Compare commits

..

2968 Commits

Author SHA1 Message Date
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
Perttu Ahola
3965d432ca Call this 0.4.dev-20111203-2 2011-12-03 11:45:26 +02:00
Perttu Ahola
746b960c0d Note about debug.txt in error message dialog when mod fails to load 2011-12-03 11:44:47 +02:00
Perttu Ahola
760416b81f Change naming convention to be modname:* instead of modname_* (sorry modders!) 2011-12-03 11:41:52 +02:00
Perttu Ahola
1c785c32ef Fix note about run-in-place mod search path in mods/default/init.lua 2011-12-03 04:00:42 +02:00
Perttu Ahola
cd608b1877 Set version 0.4.dev-20111203-1 2011-12-03 03:46:19 +02:00
Perttu Ahola
c6dd75ccfb Add usermods/ to mod search paths and print out the paths at server startup 2011-12-03 03:43:20 +02:00
Perttu Ahola
6b2023dc3e Properly handle mod name conflicts 2011-12-03 03:32:30 +02:00
Perttu Ahola
2f4a92d701 Better mod loading error handling 2011-12-03 03:23:14 +02:00
Perttu Ahola
324c544922 Add world/mods to mod search path 2011-12-03 02:55:54 +02:00
Perttu Ahola
fbbbcf97d8 Remove accidental stupid naming in craftitem example 2011-12-03 02:48:06 +02:00
Perttu Ahola
d96cd236f3 Enforced mod global naming convention and better error reporting 2011-12-03 02:45:55 +02:00
Perttu Ahola
581f950e10 Fix script error reporting a bit 2011-12-02 22:49:54 +02:00
Perttu Ahola
9344816bd6 Fix ActiveObject creation for fast player respawns 2011-12-02 17:30:22 +02:00
Perttu Ahola
67c21fc42f Fix sending of player hp (was sent all the time) 2011-12-02 17:19:42 +02:00
Perttu Ahola
c2d266efc6 Remove unnecessary debug output from mods/default/init.lua 2011-12-02 16:24:56 +02:00
Perttu Ahola
ec1859b095 Show bare hand when no item is selected 2011-12-02 15:20:42 +02:00
Perttu Ahola
bc00cdeb2c Set version to 0.4.dev-20111202-1 2011-12-02 13:00:42 +02:00
Perttu Ahola
3e6e35f383 Fix mod licensing and add a mention about sound licensing in README.txt 2011-12-02 12:58:46 +02:00
Perttu Ahola
b9e8e20c9c Script-defined creative inventory 2011-12-02 12:43:57 +02:00
Perttu Ahola
932988af46 Rename "build" privilege to "interact" (backwards-compatibly, of course) 2011-12-02 12:18:19 +02:00
Perttu Ahola
69bc9224db Rename "NodeItem"/"ToolItem"/"CraftItem" to "node"/"tool"/"craft" 2011-12-02 12:12:07 +02:00
Perttu Ahola
a17efe6e8f Remove obsolete createPickedUpItem() 2011-12-02 11:54:23 +02:00
Perttu Ahola
e8b0722137 Add time_from_last_punch to Lua API 2011-12-02 11:51:41 +02:00
Perttu Ahola
ed128fff26 Add a note about mods being under CC BY-SA 3.0 like textures 2011-12-02 11:40:04 +02:00
Mark Holmquist
a465fd5b99 + middle-click now empties the inventory slot properly 2011-12-02 11:31:10 +02:00
Perttu Ahola
9af0142a36 Add enable_pvp setting 2011-12-02 11:25:47 +02:00
Perttu Ahola
34fd47887e Make unlimited player transfer distance configurable 2011-12-02 11:22:09 +02:00
Perttu Ahola
2dc9a0c724 Fix player double damage 2011-12-02 11:16:51 +02:00
Perttu Ahola
c357985135 Make hitting players make a visual damage flash to the player texture and the screen of the local player 2011-12-02 10:57:40 +02:00
Perttu Ahola
ae2b7f9523 Don't hide players in pitch black (like oerkkis) 2011-12-02 10:45:43 +02:00
Perttu Ahola
5344dec760 Move ServerRemotePlayer to a separate file 2011-12-02 10:44:20 +02:00
Perttu Ahola
89bc306632 Fix /give(me) commands a bit in default mod 2011-12-02 02:17:01 +02:00
Perttu Ahola
dc05b106f2 Fix the previous commit 2011-12-02 02:04:25 +02:00
Perttu Ahola
a416cf7c45 Enforce PLAYER_INVENTORY_SIZE in ObjectRef::l_inventory_set_list 2011-12-02 02:01:46 +02:00
Perttu Ahola
09010410cf Print out PROTOCOL_VERSIONs if server is incompatible with client 2011-12-02 01:24:54 +02:00
Perttu Ahola
f8bbecebf5 Higher default map save and unload interval 2011-12-02 01:20:54 +02:00
Perttu Ahola
9d67037570 Don't send objects or map data before definitions have been sent 2011-12-02 01:18:25 +02:00
Perttu Ahola
e4daa4c065 Make players be again visible from a long distance 2011-12-02 01:08:14 +02:00
Perttu Ahola
08a10b8a6a Remove stuff made obsolete by making players more ActiveObject-like and raise protocol version number by one (because it is not compatible at all anymore) 2011-12-01 23:55:57 +02:00
Perttu Ahola
af32240545 Players are more like objects + related stuff 2011-12-01 23:33:48 +02:00
Perttu Ahola
ee0d3bacbc Player-is-SAO WIP 2011-12-01 18:23:58 +02:00
Perttu Ahola
9dcfa882b1 Fix non-fancy leaves not making faces with water 2011-12-01 14:48:52 +02:00
Perttu Ahola
cb589b1f99 Make non-fancy leaf texture to go in texture atlas too 2011-12-01 14:12:47 +02:00
Perttu Ahola
e6e3eef0ef Add ServerActiveObject::removingFromEnvironment() 2011-12-01 13:22:33 +02:00
Perttu Ahola
0e113a4c81 Remove +"^[forcesingle" from ContentFeatures::setInventoryTexture, because 1) it was not used, 2) if it will be used, it won't need to do that anymore 2011-12-01 13:01:37 +02:00
Perttu Ahola
1da3a8e24b Fix getTextureRaw to always return an image that is not in the texture atlas and fix plain "^[forcesingle" handling 2011-12-01 13:00:27 +02:00
Perttu Ahola
3509714951 Fix loading of legacy MaterialItems (was loaded as a quite random type) 2011-12-01 12:50:32 +02:00
Perttu Ahola
146be1f0b6 Fix texture atlas not being created correctly 2011-12-01 12:43:17 +02:00
Perttu Ahola
223a4f4741 Include the freedesktop.org-standard .desktop file in misc/ to aid package makers 2011-12-01 12:12:48 +02:00
Perttu Ahola
1f1c1790f5 Remove old stuff from misc/ 2011-12-01 12:11:26 +02:00
Kahrl
2ca00fa585 Fix processing of the default_password setting. It is now actually used as the plaintext password for new users. Also add /setpassword and /clearpassword server commands that can be used by admins with the PRIV_PASSWORD privilege, and update the /help message. 2011-12-01 12:06:39 +02:00
Kahrl
1901158b3e Make camera.cpp Irrlicht 1.8-compatible by calling ITexture::lock differently depending on the irrlicht version. 2011-12-01 11:56:06 +02:00
Kahrl
63d3403a20 Wireshark dissector: correct messed up field names 2011-12-01 11:38:06 +02:00
Kahrl
7f7fe444d3 Wireshark dissector: Add TOSERVER_RESPAWN and TOCLIENT_DEATHSCREEN, plus some failed assertion fix (well, hack). 2011-12-01 11:38:06 +02:00
Perttu Ahola
f4272ccf8f Enable simple drag and drop in inventory 2011-12-01 11:32:51 +02:00
Perttu Ahola
4196b0d341 Inventory move-to-slot hilighting 2011-12-01 11:25:55 +02:00
Perttu Ahola
ebc7a36a83 Note in init.lua the methods specific to the "generic" node metadata 2011-12-01 10:55:25 +02:00
Giuseppe Bilotta
aab50cd2cc Fix conditional bug in inventory
A spurious semicolon after the conditional checking for the drop count
to be not higher than the owned count caused the subsequent
    count = getCount()
to be always executed. Fix by removing the extra semicolon.
2011-12-01 10:41:24 +02:00
Giuseppe Bilotta
96c30452f9 Fix structs being declared as classes
Some compilers complain when a class is declared as a struct or vice
versa. Fix by making sure that the correct tag is used both in
declaration and definition.
2011-12-01 10:39:47 +02:00
Perttu Ahola
4d0f227c70 Fix sand to be cookable to glass 2011-12-01 02:56:49 +02:00
Perttu Ahola
50b87c3791 Update version in CMakeLists.txt to 0.4.dev-20111201-1 2011-12-01 02:43:10 +02:00
Perttu Ahola
b6539399f4 Fix deadlock if MeshUpdateThread asks new textures while it is being stopped (happened if texture data was transferred slowly) 2011-12-01 02:41:52 +02:00
Perttu Ahola
8b8ef8acc0 Move NodeMetadata prototype containers to content_nodemeta.cpp to fix them not being filled correctly on some systems and compilers 2011-12-01 01:58:31 +02:00
Perttu Ahola
74c6836f2f Update version in CMakeLists.txt to 0.4.dev-20111201-0 2011-12-01 00:37:46 +02:00
Perttu Ahola
d8d6d0dc95 Do not assert if count becomes larger than getStackMax() in InventoryItem::add(); it is nicer for scripting and overall hacking this way, because rising it higher than the limit is does not break anything. It should be, and is, enforced elsewhere where appropriate. 2011-12-01 00:07:21 +02:00
Perttu Ahola
f6c6c4f917 Load count 0 in itemstring as 1 2011-12-01 00:04:21 +02:00
Perttu Ahola
918c507a66 Move craftitem_place_item as minetest.craftitem_place_item in builtin.lua 2011-11-30 23:52:02 +02:00
Perttu Ahola
1b61ca412b ObjectRef:get_player_name, ObjectRef:inventory_set_list, ObjectRef:inventory_get_list 2011-11-30 23:38:18 +02:00
Perttu Ahola
cd563473fa Add ObjectRef:punch and ObjectRef:right_click to Lua API 2011-11-30 20:54:54 +02:00
Perttu Ahola
d26e19a296 List added functions in default/init.lua 2011-11-30 20:38:55 +02:00
Perttu Ahola
a244e367ea Add get_wielded_itemstring, get_wielded_item, damage_wielded_item and make getacceleration visible in API 2011-11-30 20:36:07 +02:00
Perttu Ahola
347216d654 Reworked the inventory move handling code, hopefully fixed more problems than caused 2011-11-30 19:49:34 +02:00
Perttu Ahola
49e4f55b09 Fix player getting reset to 0,0 at connect if being far from 0,0 2011-11-30 00:39:36 +02:00
Perttu Ahola
661ed387df Version 0.4.dev-20111129-2 2011-11-29 23:23:33 +02:00
Perttu Ahola
ccfec0400f Modify builtin ABMs to have lower interval and higher trigger non-chance 2011-11-29 23:22:44 +02:00
Perttu Ahola
e109ed5cef Proper player inventory and hp modification tracking and sending accordingly 2011-11-29 23:18:20 +02:00
Perttu Ahola
b2c905d800 Tune main menu a bit and show version number in there 2011-11-29 22:34:58 +02:00
Perttu Ahola
4bcff65ad0 Better version match fail messages from server 2011-11-29 22:23:03 +02:00
Perttu Ahola
e5d372f238 dev-20111129-1 2011-11-29 21:46:03 +02:00
Perttu Ahola
103d4793f0 Create the necessary API for /giveme and /give and implement those commands; also sort out the scripts a bit 2011-11-29 21:30:22 +02:00
Perttu Ahola
2a610b011a Handle items with m_count==0 sanely when placing 2011-11-29 21:05:53 +02:00
Perttu Ahola
cd030639a4 Print debug stacks to infostream rather than errorstream when placing CONTENT_IGNORE 2011-11-29 21:05:36 +02:00
Perttu Ahola
6d23fb2592 Do not install the static lua library file 2011-11-29 19:27:41 +02:00
Perttu Ahola
bc48cf076d Remove content_inventory.{h,cpp} 2011-11-29 19:13:59 +02:00
Perttu Ahola
be2ecf9186 Quick fix to a bug that makes it possible to raise water levels everywhere with one source 2011-11-29 19:13:59 +02:00
Perttu Ahola
d57aa531e1 Modify bucket namings 2011-11-29 19:13:58 +02:00
Perttu Ahola
bb898bf587 Add bucket textures 2011-11-29 19:13:58 +02:00
Perttu Ahola
9d35e4fa6e Reorganize mods 2011-11-29 19:13:58 +02:00
Perttu Ahola
bd1e5f4fc8 Add missing files for a previous commit 2011-11-29 19:13:58 +02:00
Perttu Ahola
95951ce558 Update version number to 0.4.dev-20111129 2011-11-29 19:13:58 +02:00
Perttu Ahola
10a363ebf3 Add a note about the default mod not using the modname_ prefix in textures 2011-11-29 19:13:58 +02:00
Kahrl
d6b30dd3a5 CraftItem rework and Lua interface 2011-11-29 19:13:58 +02:00
Perttu Ahola
1c19f959db Fix active_object_count and active_object_count_wider not getting updated between ABM calls causing huge amounts of DMs and rats and stuff 2011-11-29 19:13:58 +02:00
Perttu Ahola
dde22d26a8 Add NULL terminations to EnumString definitions 2011-11-29 19:13:57 +02:00
Perttu Ahola
c8211ceb3e Some MSVC fixes 2011-11-29 19:13:57 +02:00
Perttu Ahola
c910ead4db Fix CMake install data path 2011-11-29 19:13:57 +02:00
Perttu Ahola
fe64f2b673 Silly MSVC doesn't know how to handle type conversions for parameters of pow(). Help it. 2011-11-29 19:13:57 +02:00
Perttu Ahola
a91eb36277 Update installation in CMakeLists.txt 2011-11-29 19:13:57 +02:00
Perttu Ahola
026979e39d Rename menu background to menubg.png, move unknown_block.png and unknown_object.png to client, make generating a placeholder image for the filename "" not cause an error 2011-11-29 19:13:57 +02:00
Perttu Ahola
705f142b8d GenericNodeMetadata and an example furnace 2011-11-29 19:13:57 +02:00
Perttu Ahola
e880cc40e9 Fix stuff in inventory.{cpp,h} 2011-11-29 19:13:57 +02:00
Perttu Ahola
7bb4b7911b Comment out debug output in ServerEnvironment::activateBlock 2011-11-29 19:13:57 +02:00
Perttu Ahola
fadf248892 Handle ActiveBlockModifier intervals properly, down to 1s 2011-11-29 19:13:57 +02:00
Perttu Ahola
0f2b932e92 Initial NodeMetaRef stuff 2011-11-29 19:13:56 +02:00
Perttu Ahola
34bd1b3032 Lua interface for ActiveBlockModifier 2011-11-29 19:13:56 +02:00
Perttu Ahola
8924588511 Remove creation of builtin.lua defined minetest.registered_* tables in C 2011-11-29 19:13:56 +02:00
Perttu Ahola
6029d9e5a9 Comment fix in builtin.lua 2011-11-29 19:13:56 +02:00
Perttu Ahola
19a1ac1f34 For consistency, implement calling of on_chat_message callbacks in C 2011-11-29 19:13:56 +02:00
Perttu Ahola
30648d1cc9 Implement callback registration in Lua instead of C 2011-11-29 19:13:56 +02:00
Perttu Ahola
842eb5da28 Replace old active block random node modifying things with actual ActiveBlockModifiers 2011-11-29 19:13:56 +02:00
Perttu Ahola
05df2ee8a4 Add chat message callback and send functions 2011-11-29 19:13:56 +02:00
Perttu Ahola
ab3911ba9e Print errors from local log to chat 2011-11-29 19:13:56 +02:00
Perttu Ahola
013921782b Add a third log output interface method 2011-11-29 19:13:56 +02:00
Perttu Ahola
c449e5f20a Use log_deregister_thread in EmergeThread 2011-11-29 19:13:56 +02:00
Perttu Ahola
6e0de7b42c Add log_remove_output and log_deregister_thread 2011-11-29 19:13:55 +02:00
Perttu Ahola
2e42391b86 Fix mod dependency sort 2011-11-29 19:13:55 +02:00
Perttu Ahola
21bd679076 Add depends.txt for mods/give_initial_stuff 2011-11-29 19:13:55 +02:00
Perttu Ahola
fd8b9a3a44 Warn about unsatisfied dependencies 2011-11-29 19:13:55 +02:00
Perttu Ahola
5c1cb01936 Make blocks to be loaded from disk when the active block area reaches them 2011-11-29 19:13:55 +02:00
Perttu Ahola
ec4f58741b Fix a random commented-out piece of lighting code, altough it doesn't work any better 2011-11-29 19:13:55 +02:00
Perttu Ahola
4ce6e5f0c5 Optimize lighting by a tiny bit 2011-11-29 19:13:55 +02:00
Perttu Ahola
a8a82e0b21 Sort mods by dependencies defined by modpath/depends.txt in each mod (not mandatory) 2011-11-29 19:13:55 +02:00
Perttu Ahola
739cb87385 Fix default value of visual in LuaEntityProperties 2011-11-29 19:13:55 +02:00
Perttu Ahola
8492796a5c Allow server-side teleporting 2011-11-29 19:13:55 +02:00
Perttu Ahola
218b626016 Fix and tune player movement checks (make them very loose) 2011-11-29 19:13:55 +02:00
Kahrl
f42c57d9a8 Add IDropAction and related stuff 2011-11-29 19:13:54 +02:00
Perttu Ahola
82a460ec90 Improve luaentity sprite functionality (and add some random stuff) 2011-11-29 19:13:54 +02:00
Perttu Ahola
b4e6ca63b5 Comment out print("on_generated: ...") in Lua 2011-11-29 19:13:54 +02:00
Perttu Ahola
1d36e68346 Fix liquid source backface culling (was not turned off) 2011-11-29 19:13:54 +02:00
Perttu Ahola
41c473cf5e Fix player getting thrown underground after connecting 2011-11-29 19:13:54 +02:00
Perttu Ahola
b2ccbdffc1 Make map generator as much threaded as possible (not much benefit with current generator because of small generator chunk size (a single MapBlock)) 2011-11-29 19:13:54 +02:00
Perttu Ahola
769cc9879f Add on_generated hook 2011-11-29 19:13:54 +02:00
Perttu Ahola
0dbb31afeb Improve player movement speed checking 2011-11-29 19:13:54 +02:00
Perttu Ahola
1bfc3c1eb9 Player movement speed and node access distance checking 2011-11-29 19:13:54 +02:00
Perttu Ahola
8bd178c2e5 If available, use local textures instead of those sent by server 2011-11-29 19:13:53 +02:00
Perttu Ahola
b58dc083a9 Fix TNT script 2011-11-29 19:13:53 +02:00
Perttu Ahola
65b2a2cb02 Make lighting update occur immediately after ClientActiveObject addition to make objects show up much more responsively 2011-11-29 19:13:53 +02:00
Perttu Ahola
70363847aa Reshape LuaEntityCAO implementation a bit and make TNT to blink 2011-11-29 19:13:53 +02:00
Perttu Ahola
1ce749c86a Optimize active block modifier stuff (was left horribly unoptimized after making content ids dynamic) 2011-11-29 19:13:53 +02:00
Perttu Ahola
08c9b6037d Re-implement give_initial_stuff 2011-11-29 19:13:53 +02:00
Perttu Ahola
57a2bd056c Exception handling in Lua setting get 2011-11-29 19:13:53 +02:00
Perttu Ahola
234bf99743 Lua setting getter 2011-11-29 19:13:53 +02:00
Perttu Ahola
f93144fee7 remove get_nodedef 2011-11-29 19:13:53 +02:00
Perttu Ahola
945d01fd9e on_newplayer and on_respawnplayer callbacks 2011-11-29 19:13:53 +02:00
Perttu Ahola
d99d27dcbe liquid_type -> liquidtype 2011-11-29 19:13:52 +02:00
Perttu Ahola
908db7c1d2 Make node definitions available to Lua 2011-11-29 19:13:52 +02:00
Perttu Ahola
77337271fc Remove give_initial_stuff 2011-11-29 19:13:52 +02:00
Kahrl
c1479a2732 Add node definitions in Lua and do not use content_mapnode_init anymore (except in test.cpp) 2011-11-29 19:13:52 +02:00
Perttu Ahola
1f53ca5f4c Modify CONTENT_AIR and CONTENT_IGNORE handling in nodedef.cpp 2011-11-29 19:13:52 +02:00
Perttu Ahola
425db289d5 Fix random node definition stuff 2011-11-29 19:13:52 +02:00
Perttu Ahola
d2eed169ae Add builtin.lua 2011-11-29 19:13:52 +02:00
Perttu Ahola
61ffe1eac4 builtin.lua 2011-11-29 19:13:52 +02:00
Perttu Ahola
9e7ad1e2aa Add object reference to Lua on_place/dig/punchnode parameters 2011-11-29 19:13:52 +02:00
Perttu Ahola
ae9f183cda Fix "warning: comparison between signed and unsigned integer expressions" 2011-11-29 19:13:52 +02:00
Perttu Ahola
71bc20c453 Some node definitions in Lua 2011-11-29 19:13:52 +02:00
Perttu Ahola
ff1ae29f97 Duplicate last tile image automatically to all for lua node definitions 2011-11-29 19:13:51 +02:00
Perttu Ahola
fdf6eecd59 Make map generator more responsive 2011-11-29 19:13:51 +02:00
Perttu Ahola
651657edfd Print out number of blocks in memory at unload 2011-11-29 19:13:51 +02:00
Perttu Ahola
74770ab718 Don't allow placing CONTENT_IGNORE with Map::setNode() because it is never useful and is only caused by bugs. 2011-11-29 19:13:51 +02:00
Perttu Ahola
6153a2fb10 Improve debug stack printing interface 2011-11-29 19:13:51 +02:00
Perttu Ahola
e5650bb549 Make liquid_alternative_* to be strings 2011-11-29 19:13:51 +02:00
Perttu Ahola
18bb0ea1ea Mode node definition loading from Lua (still not finished), fix metadata creation from name 2011-11-29 19:13:51 +02:00
Perttu Ahola
6a8f9135de Store metadata as metadata name in node definition 2011-11-29 19:13:51 +02:00
Perttu Ahola
704d8a62bf Set block modified flag when node metadata inventory is modified 2011-11-29 19:13:50 +02:00
Perttu Ahola
3b3ca65562 Add names to NodeMetadata 2011-11-29 19:13:50 +02:00
Perttu Ahola
697ff926ce Add Lua node definition stuff (not complete) 2011-11-29 19:13:50 +02:00
Perttu Ahola
e8a9578774 Add texture modifier [brighten and modify [toalpha to modify existing texture, not read a new base 2011-11-29 19:13:50 +02:00
Perttu Ahola
0bf3a15886 Random Lua tweaks/fixes 2011-11-29 19:13:50 +02:00
Perttu Ahola
cebc8c78a4 Make object hit delay smaller for fun; actually it should be roughly zero and hit damage should be calculated from the amount of time since last punch, limited to a maximum value 2011-11-29 19:13:50 +02:00
Perttu Ahola
290e921920 Relatively snappy object-ground collision detection 2011-11-29 19:13:50 +02:00
Perttu Ahola
94feb62b08 When digging a node, don't switch to punching an object without raising button 2011-11-29 19:13:50 +02:00
Perttu Ahola
941176cd65 Default to saving stuff more often to minimize lag caused by a single save 2011-11-29 19:13:50 +02:00
Perttu Ahola
251b015210 Don't print 'Blocks modified by: ' in Map::timerUpdate if no blocks were written 2011-11-29 19:13:50 +02:00
Perttu Ahola
616bad96af Don't print all block saves to verbosestream; rather print counts of distinct modifiers 2011-11-29 19:13:49 +02:00
Perttu Ahola
1b765b9740 Add reason parameter to setModified and print it out to verbosestream when saving block 2011-11-29 19:13:49 +02:00
Perttu Ahola
0ce0c8fcfb Improve LuaEntity velocity/acceleration handling (by kahrl); implement staticdata interface to Lua 2011-11-29 19:13:49 +02:00
Perttu Ahola
811ac5ac3a Mess up with node definitions to make CONTENT_IGNORE be correctly interpreted when creating meshes 2011-11-29 19:13:49 +02:00
Perttu Ahola
901d98b687 Optimize map generator for the dynamic content ids a bit 2011-11-29 19:13:49 +02:00
Perttu Ahola
4503b03b26 Make added nodes give the corresponding NodeItem as of now (placeholder code) 2011-11-29 19:13:49 +02:00
Perttu Ahola
0e64406b06 Fix tool wear 2011-11-29 19:13:49 +02:00
Perttu Ahola
1220b642eb Falling sand and gravel 2011-11-29 19:13:49 +02:00
Perttu Ahola
cc03718d3c Node place/dig Lua callbacks 2011-11-29 19:13:49 +02:00
Perttu Ahola
d7cb6146c8 Fix crafted tools being a very tiny bit worn in default/init.lua 2011-11-29 19:13:48 +02:00
Perttu Ahola
4f021fc7dd Remove crafting definitions from content_craft.cpp 2011-11-29 19:13:48 +02:00
Perttu Ahola
498ebef357 Add classic crafting recipes to default/init.lua 2011-11-29 19:13:48 +02:00
Perttu Ahola
cebbaf1664 Catch SerializationError in CCraftDefManager::getCraftResult() 2011-11-29 19:13:48 +02:00
Perttu Ahola
227e067512 Add note about craft_get_result() not being used anymore, but don't remove before it's contents have been transferred to scripts 2011-11-29 19:13:48 +02:00
Perttu Ahola
9d5b458479 Crafting definition in scripts 2011-11-29 19:13:48 +02:00
Perttu Ahola
8dd3622c6d Improve item serialization 2011-11-29 19:13:48 +02:00
Perttu Ahola
564c3a9c96 Allow inputting nodename of MaterialItem in ItemSpec::checkItem 2011-11-29 19:13:48 +02:00
Perttu Ahola
4725e5c52e Fix another silly mistake making CONTENT_IGNORE definition not being what it should 2011-11-29 19:13:47 +02:00
Perttu Ahola
106027fc29 Fix silly misspelling in mapgen that made junglegrass to be CONTENT_IGNORE 2011-11-29 19:13:47 +02:00
Perttu Ahola
d1298fe5e7 Actually fill in the NewNameGetter names to allow map generator operation and crafting 2011-11-29 19:13:47 +02:00
Perttu Ahola
eabfb370ac MapNode constructor to allow ndef+name 2011-11-29 19:13:47 +02:00
Perttu Ahola
62164d955c Initial node definition stuff 2011-11-29 19:13:47 +02:00
Perttu Ahola
a5545593ba Fix camera MaterialItem draw logic 2011-11-29 19:13:47 +02:00
Perttu Ahola
f68fa667c8 Clean InventoryItem interface a bit 2011-11-29 19:13:47 +02:00
Perttu Ahola
7a29b14a20 Improved MaterialItem (stores nodename) 2011-11-29 19:13:47 +02:00
Perttu Ahola
df8346ef4d Do not expose CONTENT_* stuff in content_mapnode.h and use a name converter wrapper in old code 2011-11-29 19:13:47 +02:00
Perttu Ahola
c0f6395cf0 Node definition names 2011-11-29 19:13:46 +02:00
Perttu Ahola
50d63e4b0a Add name field to ContentFeatures 2011-11-29 19:13:46 +02:00
Perttu Ahola
6a417c538f Remove burn time definitions from FurnaceNodeMetadata 2011-11-29 19:13:46 +02:00
Perttu Ahola
7fae32095a Remove old comments 2011-11-29 19:13:46 +02:00
Perttu Ahola
37a5f8a30b Move cook result properly to ContentFeatures 2011-11-29 19:13:46 +02:00
Perttu Ahola
f107967fdc Remove node content-dependent stuff from map.cpp 2011-11-29 19:13:46 +02:00
Perttu Ahola
a793533d1a Remove content_mapnode.h and nodedef.h #includes 2011-11-29 19:13:46 +02:00
Perttu Ahola
3318d0b4b8 Remove content dependencies from mapblock.cpp 2011-11-29 19:13:46 +02:00
Perttu Ahola
81f1cc662f Remove #include <content_mapnode.h> from game.cpp 2011-11-29 19:13:46 +02:00
Perttu Ahola
28fe2987a0 Saner sized sapling 2011-11-29 19:13:45 +02:00
Perttu Ahola
26abf6fd82 Cut down content transfer verbosity 2011-11-29 19:13:45 +02:00
Perttu Ahola
594b189569 Cut down TextureSource verbosity 2011-11-29 19:13:45 +02:00
Perttu Ahola
7696a38543 Improve loading screen and protocol 2011-11-29 19:13:45 +02:00
Perttu Ahola
cde35d1606 Clean nodefeat and content_mapnode a bit 2011-11-29 19:13:45 +02:00
Perttu Ahola
9fc78cbece Fix flowing water being always opaque 2011-11-29 19:13:45 +02:00
Perttu Ahola
e4dff41560 Fix MaterialProperties serialization (constant_time was missing) 2011-11-29 19:13:45 +02:00
Perttu Ahola
2f2392f783 Improve glass 2011-11-29 19:13:45 +02:00
Perttu Ahola
c3703ded95 Fix NDT_PLANTLIKE scaling to always keep the bottom at ground level 2011-11-29 19:13:44 +02:00
Perttu Ahola
e5fd010a6c Replace direct irrlicht texture fetching in CAO content with TextureSource 2011-11-29 19:13:44 +02:00
Perttu Ahola
ba762bcd49 Clean mapnode.h and fix other files accordingly 2011-11-29 19:13:44 +02:00
Perttu Ahola
6da8cb00e2 Node definitions transfer 2011-11-29 19:13:44 +02:00
Perttu Ahola
eed727c61b Completely generalized mesh generation; ContentFeatures serialization 2011-11-29 19:13:44 +02:00
Perttu Ahola
89e7bacd99 Clean more 2011-11-29 19:13:44 +02:00
Perttu Ahola
ff34955a0d Remove commented out code 2011-11-29 19:13:44 +02:00
Perttu Ahola
a48a0e77eb Prepare more for node definition serialization 2011-11-29 19:13:43 +02:00
Perttu Ahola
cf6e22e9a6 Better node texture generation 2011-11-29 19:13:43 +02:00
Perttu Ahola
c1202a2ecc Update inventory texture too 2011-11-29 19:13:43 +02:00
Perttu Ahola
01ae0daea5 Properly update textures in node definitions 2011-11-29 19:13:43 +02:00
Perttu Ahola
45fc45a49e Sending of textures WIP 2011-11-29 19:13:43 +02:00
Perttu Ahola
7bdc328a71 Fix yet-another serialization error in utility.h and set constructor of Buffer take const data for copying 2011-11-29 19:13:43 +02:00
Perttu Ahola
e71744b918 Modify mod and texture directory hierarchies 2011-11-29 19:13:43 +02:00
Perttu Ahola
40e7a1a5c9 Update TODO list in scriptapi.cpp 2011-11-29 19:13:43 +02:00
Perttu Ahola
7878d9b3f6 Set traditional minetest durability values to tools 2011-11-29 19:13:43 +02:00
Perttu Ahola
9e1c4533b8 Move tool definitions to script 2011-11-29 19:13:43 +02:00
Perttu Ahola
4b8e4dae58 Tool definition transfer to client 2011-11-29 19:13:42 +02:00
Perttu Ahola
0754f2a7af ToolDefManager serialization 2011-11-29 19:13:42 +02:00
Perttu Ahola
8d2d28f1dc ToolDefinition serialization 2011-11-29 19:13:42 +02:00
Perttu Ahola
e9620d9c8c Make fence post selection box smaller and create code to allow node placement to the side of a static box 2011-11-29 19:13:42 +02:00
Perttu Ahola
de51f87e05 Tune gravel and picks 2011-11-29 19:13:42 +02:00
Perttu Ahola
1afed48a2c Make possible and do update textures in node definitions after late texture atlas making 2011-11-29 19:13:42 +02:00
Perttu Ahola
c6fd2986d4 GameDef compiles 2011-11-29 19:13:42 +02:00
Perttu Ahola
abceeee92f Create framework for getting rid of global definitions of node/tool/item/whatever types 2011-11-29 19:13:41 +02:00
Perttu Ahola
5fc791ac9a Move tool stuff to tool.{h,cpp} 2011-11-29 19:13:41 +02:00
Perttu Ahola
72884bf85f Tune the tool speed thing 2011-11-29 19:13:41 +02:00
Perttu Ahola
f97d4355be New kind of tool speed and wear calculation thingy 2011-11-29 19:13:41 +02:00
Perttu Ahola
e19d1ea95a Set version to 0.4 2011-11-29 19:13:41 +02:00
Perttu Ahola
96b71236ed Clean headers a bit 2011-11-29 19:13:41 +02:00
Perttu Ahola
3b77a63d5d Allocate MapBlock::m_node_metadata on heap to allow less header bloat 2011-11-29 19:13:41 +02:00
Perttu Ahola
64fa59e24f Generic NodeMetadata text input 2011-11-29 19:13:41 +02:00
Perttu Ahola
79c9f14aec Generalize selection boxes 2011-11-29 19:13:41 +02:00
Perttu Ahola
2ef414d05f Set the BS constant to be floating-point; this removes the need for floating point numbers when dividing it 2011-11-29 19:13:41 +02:00
Perttu Ahola
77cf27b82b Clean code and modify comments in mapnode_contentfeatures.h 2011-11-29 19:13:40 +02:00
Perttu Ahola
64996422c0 Move ContentFeatures to mapnode_contentfeatures.{h,cpp} and clean stuff 2011-11-29 19:13:40 +02:00
Perttu Ahola
f8c9b70379 Scripting: Allow multiple global step callbacks and improve documentation 2011-11-29 19:13:40 +02:00
Perttu Ahola
7b802c547d Handle undefined objects better 2011-11-29 19:13:40 +02:00
Perttu Ahola
73bb3bc595 Scripting WIP: Add global environment step function on_step 2011-11-29 19:13:40 +02:00
Perttu Ahola
1320d07068 Scripting WIP: dynamic object stuff 2011-11-29 19:13:40 +02:00
Perttu Ahola
0b97ad8384 ServerRemotePlayer implements ServerActiveObject 2011-11-29 19:13:40 +02:00
Perttu Ahola
ddaff2d653 Scripting WIP 2011-11-29 19:13:40 +02:00
Perttu Ahola
75a0ca6bd6 Scripting WIP 2011-11-29 19:13:40 +02:00
Perttu Ahola
38944467d3 Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
23adfff4fe Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
b35adfbd2d Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
526eedf98e Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
dcedfdacd1 Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
ea8d6d7abd Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
f145d498a6 Scripting WIP 2011-11-29 19:13:39 +02:00
Perttu Ahola
41c91391fc Scripting WIP; Lua entity step callback works 2011-11-29 19:13:39 +02:00
Perttu Ahola
1ddfdc55dd Add textures in data/textures (appeared to not have been added) 2011-11-29 19:13:39 +02:00
Perttu Ahola
a6a1e6ed1a random scripting work-in-progress 2011-11-29 19:13:39 +02:00
Perttu Ahola
f8430723e0 Add the default.lua script 2011-11-29 19:13:38 +02:00
Perttu Ahola
bfc68d3151 Scripting WIP 2011-11-29 19:13:38 +02:00
Perttu Ahola
ee8b6d3444 Move images to data/textures and fix some path stuff; hope that installation still works 2011-11-29 19:11:04 +02:00
Perttu Ahola
2115a766f6 Make it actually build 2011-11-29 19:11:04 +02:00
Perttu Ahola
d1a5e97a7f Add Lua 2011-11-29 19:11:04 +02:00
Perttu Ahola
7372282a72 Better spawn position finding and checking 2011-11-13 03:17:42 +02:00
Perttu Ahola
bc0e5c0063 Update changelog and call this 0.3.1 2011-11-09 12:07:40 +02:00
Perttu Ahola
045e32b6ec Fix water-glass and water-lava surfaces 2011-11-08 16:17:38 +02:00
Perttu Ahola
fea55a9b87 Call this 0.3.dev-20111108 2011-11-08 02:13:29 +02:00
Perttu Ahola
763da10c7b Reset block usage timer on client only if it is very probably drawn 2011-11-08 02:13:22 +02:00
Kahrl
1c98ec94da Make Connection::Receive return the data via a SharedBuffer reference, so the caller doesn't have to choose the right buffer size in advance.
Conflicts:

	src/test.cpp
2011-11-07 11:21:42 +02:00
Kahrl
28660b4c1a utility.h: Change Buffer's interface to be more compatible with SharedBuffer's interface, connection.h: use Buffer instead of SharedBuffer in command and event queues 2011-11-07 11:19:56 +02:00
Perttu Ahola
fa72e65b59 Add new Connection test in test.cpp in case needed in the future (commented out), improve comments in test.cpp a bit 2011-11-07 11:15:43 +02:00
Perttu Ahola
7d5d676eac Infinite packet flood test for debugging the new network layer 2011-11-07 01:20:58 +02:00
Constantin Wenger
61f2cc45c2 Command-line signal handling for Windows 2011-11-06 19:24:44 +02:00
Perttu Ahola
c1d92d72e1 Make water invisible next to underwater glass 2011-11-05 23:30:27 +02:00
Perttu Ahola
4f71a9fbde Improve "compile on Windows" section in readme 2011-11-05 14:48:32 +02:00
Perttu Ahola
4142b8c352 Call this version 0.3.dev-20111104 2011-11-04 22:16:36 +02:00
Perttu Ahola
d0fdfd44c5 Add option to set water opaque (mainly for stylistic choice) 2011-11-03 23:06:57 +02:00
Perttu Ahola
f5995337e8 Fix flowing liquid spacing; water and lava next to each other will glitch a bit but it isn't as bad as this was 2011-11-03 23:04:56 +02:00
Perttu Ahola
1469196d3b Update /README.txt, remove duplicate /doc/README.txt and update CMakeLists.txt to package /README.txt 2011-11-03 21:36:42 +02:00
Perttu Ahola
e9fd3def90 Make CONTENT_IGNORE to not block the view when occlusion culling 2011-11-03 20:45:44 +02:00
Perttu Ahola
a2af490b7b Disable mipmapping because it is sometimes ugly 2011-11-03 20:17:18 +02:00
Perttu Ahola
4964daa5be Possible fix to bases of islands/hills getting culled out too early 2011-11-03 15:10:58 +02:00
Perttu Ahola
718086f383 Tune occlusion culling a bit more 2011-11-03 13:35:32 +02:00
Perttu Ahola
339b7588d2 Tune occlusion culling a bit 2011-11-03 13:35:09 +02:00
Perttu Ahola
0ac5f6a7ca Very simple occlusion culling 2011-11-03 12:48:08 +02:00
Perttu Ahola
1726b82a16 occlusion culling fix, a little reshaping of map rendering for more useful profiler output and dynamic profiler text size 2011-11-02 18:13:56 +02:00
Perttu Ahola
03db16d55b Remove trailing / or \ in path_userdata (probably fixes world deletion on Windows) 2011-11-02 13:43:00 +02:00
Perttu Ahola
0c20973c17 Add 3d cloud checkbox in main menu (and rename setting from enable_2d_clouds to enable_3d_clouds) 2011-11-02 12:50:21 +02:00
Perttu Ahola
f65d157786 Set version to 0.3.0 and update changelog 2011-11-01 16:54:01 +02:00
Perttu Ahola
899404f3b1 Fix an obvious bug in utility.h 2011-11-01 14:54:11 +02:00
Perttu Ahola
6aab526989 Attempt a workaround to the network layer segfault 2011-10-30 11:59:23 +02:00
Perttu Ahola
c349708eab Make it to compile on MSVC2010 2011-10-21 18:37:43 +03:00
Perttu Ahola
9c3e0a8040 0.3.dev-20111021 2011-10-21 18:29:13 +03:00
Perttu Ahola
7f25183936 Some tuning in m_max_packets_per_second algorithm 2011-10-21 11:52:26 +03:00
Perttu Ahola
4b6138e69b Improve Connection with threading and some kind of congestion control 2011-10-20 23:04:09 +03:00
Perttu Ahola
b6fcbc5fba Default max_simultaneous_block_sends_server_total to 2 to make network not cough too much on the fixed block sending code 2011-10-19 19:34:47 +03:00
Perttu Ahola
ed870a7237 Fix apple inventory texture 2011-10-19 02:36:46 +03:00
Perttu Ahola
3a06fb8831 Fix and tune block sending 2011-10-19 02:17:23 +03:00
Perttu Ahola
d47120aeb3 Add enable_2d_clouds setting for usage on lower-end machines 2011-10-18 23:55:55 +03:00
Perttu Ahola
9b907dd65a Try to tune fog to work well on high-end machines also 2011-10-18 21:08:31 +03:00
Perttu Ahola
28f2fdb6de Fix possible NULL dereference in MobV2CAO::step 2011-10-18 19:53:34 +03:00
Perttu Ahola
4e1055543c Tune map rendering and related diagnostics 2011-10-18 19:18:01 +03:00
Perttu Ahola
8ead29a302 set backface culling off again for torches, ladders, rails and signs 2011-10-18 18:32:35 +03:00
Perttu Ahola
fe98fe342a ...Make the the server buildable again after the last commit 2011-10-18 17:20:54 +03:00
Perttu Ahola
554f7f120c Improve rendering and fix tiling in mesh generation 2011-10-18 13:56:35 +03:00
Perttu Ahola
05ab58cd14 Automate texture listing for texture atlas making 2011-10-18 11:31:23 +03:00
Perttu Ahola
eae2d35ca5 Fix client profiler print interval 2011-10-18 10:36:52 +03:00
Perttu Ahola
85002883bd Better handling of SendFailedException in Connection 2011-10-18 03:42:23 +03:00
Perttu Ahola
22b07bdb30 Fix object duplication bug 2011-10-18 02:58:15 +03:00
Perttu Ahola
fe338745a3 Make active_block_range default to 2 2011-10-18 00:41:17 +03:00
Perttu Ahola
6ce0c61dc0 Fix possible NULL pointer access in MobV2CAO 2011-10-18 00:41:02 +03:00
Perttu Ahola
78f4142f4f Add /clearobjects 2011-10-18 00:01:50 +03:00
Perttu Ahola
ea1fda5ebc Made a scheme to get rid of the objects in the worst object flooded blocks 2011-10-17 20:57:58 +03:00
Perttu Ahola
67db77b8b3 Modify default active block range 2011-10-17 20:41:43 +03:00
Perttu Ahola
64c4d00693 F2 toggles profiler display in client 2011-10-17 20:40:55 +03:00
Perttu Ahola
6661d9be1a Attempt to fix objects getting multiplicated by objects getting deactivated in a different block than where they were loaded and then the original block, from where the static object was removed, not getting saved at unload 2011-10-17 20:19:37 +03:00
Perttu Ahola
c41f1c960b Fix minetest.conf.example a bit 2011-10-17 20:04:35 +03:00
Perttu Ahola
9a62a909bc Add a log message to SEnv and make it load objects if there are < 51 of them, to load blocks that were limited to 50 2011-10-17 19:44:28 +03:00
Perttu Ahola
93f4d2b3f1 Catch SendFailedException when replying back in Connection::Receive() 2011-10-17 18:02:26 +03:00
Perttu Ahola
558a133044 Display RTT (round trip time, ping) on client status text 2011-10-17 17:18:50 +03:00
Perttu Ahola
5037efdea9 Add some rendering statistics to profiler 2011-10-17 17:06:28 +03:00
Perttu Ahola
e9888c8e25 Workaround for blocks having a huge amount of active objects; add log messages related to active objects for investigation 2011-10-17 11:52:38 +03:00
Perttu Ahola
3daaff3a42 Remove very floody log message of MobV2SAO 2011-10-17 11:45:06 +03:00
celeron55
d39f98aeb0 Improve active object handling log output 2011-10-17 10:47:06 +03:00
celeron55
30c21b4abd Fix partly double printed debug.txt 2011-10-17 10:46:16 +03:00
Perttu Ahola
cfd19dcdb5 Fix punching of oerkkis 2011-10-17 01:58:38 +03:00
Perttu Ahola
b0481b9db1 Fix chest not working after walked away and came back 2011-10-17 01:04:22 +03:00
Perttu Ahola
5f39885975 Improve inventory debug output 2011-10-17 01:03:45 +03:00
Perttu Ahola
9ff8067426 Fix items showing up as sticks when placed in world 2011-10-17 00:08:27 +03:00
Perttu Ahola
162619a426 Fix to-transparend conversion of backgrounds of sprite image files that don't have an alpha channel 2011-10-16 23:41:43 +03:00
Perttu Ahola
2419d0029a Some more profiler stuff to get the hang on what really uses CPU 2011-10-16 22:39:35 +03:00
Perttu Ahola
b8f2dcea4d Improve debug profiler usage for investigating CPU usage of server 2011-10-16 21:16:44 +03:00
Perttu Ahola
07d000cc54 When granting or revoking privileges, notify the target player too 2011-10-16 20:03:43 +03:00
Perttu Ahola
6470743e51 Make dungeon masters not shoot the walls with no reason 2011-10-16 19:39:20 +03:00
Perttu Ahola
143dce6672 When player times out, log the action as a timeout rather than regular quitting 2011-10-16 19:38:56 +03:00
Perttu Ahola
96b2d1fd29 Check NULL pointer properly in some new code trying to log new stuff 2011-10-16 18:50:30 +03:00
Perttu Ahola
369177aa80 Better player damage prevention when falling on unloaded blocks, not involving getting stuck in there. 2011-10-16 18:45:17 +03:00
Perttu Ahola
0bf533f753 Switch more stuff to use the logging thing and fix segfault on player leave from server as introduced in a previous switch-to-logging commit 2011-10-16 16:28:12 +03:00
Perttu Ahola
67a6bc4ab5 Fix map delete on windows (concatenate paths correctly with / or \ depending on OS) 2011-10-16 16:16:47 +03:00
Perttu Ahola
ef397dca7c Update changelog (albeit a bit late) 2011-10-16 15:20:04 +03:00
Perttu Ahola
b65a5aceb0 Use the logger; also, default to not showing much crap in console. Use --info-on-stderr to enable crap. 2011-10-16 14:57:53 +03:00
Perttu Ahola
4846846a2d Initially add small and tight logging facility 2011-10-16 12:45:00 +03:00
Perttu Ahola
414c614893 Add peaceful / not peaceful distinction in mobs and the only_peaceful_mobs setting 2011-10-16 11:52:33 +03:00
Perttu Ahola
a17abae128 Update Linux build instructions in README.txt a bit and list the bat script used for releases 2011-10-16 03:08:11 +03:00
Perttu Ahola
286edd4f1e Update version number to 0.3.dev-20111016 2011-10-16 00:53:37 +03:00
Perttu Ahola
4914eb29d1 Replace M_PI with PI 2011-10-16 00:24:51 +03:00
Perttu Ahola
825953bbdc Fix some "Conditional jump or move depends on uninitialised value(s)" valgrind detections 2011-10-15 23:07:43 +03:00
Perttu Ahola
fd6452749e Resource file handling for exe icon for MinGW 2011-10-15 17:05:16 +03:00
Perttu Ahola
7c2639ddd9 Make view bobbing amount configurable 2011-10-15 16:32:24 +03:00
Perttu Ahola
3f58028d31 Make dungeon masters though and make oerkkis disappear when they get to you (because hitting them doesn't work for some unknown reason) 2011-10-15 16:04:25 +03:00
Perttu Ahola
94dfececf6 strict_protocol_version_checking setting; PROTOCOL_VERSION in clientserver.h; clean up defaultsettings.cpp and minetest.conf.example 2011-10-15 15:02:28 +03:00
Perttu Ahola
74febd5c31 Handle death and respawn better 2011-10-15 14:46:59 +03:00
Perttu Ahola
857fe0551c Set a better version number 2011-10-15 12:51:30 +03:00
Perttu Ahola
5341bf59c2 Improve mobv2 2011-10-15 12:17:21 +03:00
Perttu Ahola
43a28f04fa mobv2 2011-10-15 02:28:57 +03:00
Perttu Ahola
080002f8ed Lock mutex when accessing m_env in Server::~Server 2011-10-14 12:39:25 +03:00
Perttu Ahola
853a78681e In CMake scripts: New version number, fix MSVC stuff 2011-10-14 09:55:39 +03:00
Perttu Ahola
9e46cbf7ea Header file tweaking; mainly for speed 2011-10-12 13:53:38 +03:00
Perttu Ahola
b60b58b627 Saner block modification flag operation for not saving everything always 2011-10-12 10:53:37 +03:00
Kahrl
3e975d8f28 minetestmapper: Fix the way ylist is computed, use cStringIO instead of rolling own Bytestream, remove some artifacts when drawing underground blocks, introduce a --drawunderground switch (defaults to of), 'blocknum' renamed to 'content'. 2011-09-27 02:38:19 +02:00
Perttu Ahola
a7833cca22 Merge remote-tracking branch 'marktraceur/master' 2011-09-26 22:41:06 +03:00
Perttu Ahola
08ac3454cc minetestmapper speed tweaks (kahrl & JacobF) 2011-09-26 22:31:34 +03:00
Perttu Ahola
3ca847b4e1 Add apple color to minetestmapper and fix cactus color 2011-09-26 20:55:00 +03:00
Perttu Ahola
e7fcc08d26 Fix minetestmapper.py 2011-09-26 20:54:42 +03:00
Perttu Ahola
520b470217 Merge remote-tracking branch 'kahrl/sectors2sqlite-fix' 2011-09-26 20:01:46 +03:00
Perttu Ahola
9a7471b740 Rotate wielded tool the right way and modify axe graphics accordingly 2011-09-26 16:10:54 +03:00
Perttu Ahola
061d4b4202 Merge branch 'view_bobbing_and_vielded_tool' 2011-09-26 15:10:02 +03:00
Perttu Ahola
2ecd53ce09 Fix single-frame lag in camera yaw/pitch, tune view bobbing and add wielded tool movement when walking and tweak stuff a bit 2011-09-26 15:09:04 +03:00
Kahrl
561bb64963 Support Python 2 and 3 in sectors2sqlite.py. 2011-09-26 13:24:21 +02:00
Kahrl
d5899a53fd Fix processing of blocks below y=0 in sectors2sqlite.py. 2011-09-26 13:10:22 +02:00
Perttu Ahola
b9e680d06c Server user limit configuration option 2011-09-26 11:57:51 +03:00
Perttu Ahola
0ccc0ac927 Merge remote-tracking branch 'darkrose/master' 2011-09-26 11:57:28 +03:00
celeron55
63eca0feb2 Merge pull request #10 from joshbeck/master
Fixed null pointer dereference errors found by cppcheck
2011-09-24 00:55:05 -07:00
Joshua Beck
ae561d705f Fixed null pointer dereference errors found by cppcheck 2011-09-24 02:11:43 -05:00
Mark Holmquist
bc01ae4cbd Fixed merge issues with saplings, ready to pull now! 2011-09-23 18:19:47 -07:00
Mark Holmquist
319f43e6d2 Fixed saplings growing into trees (thanks so much, Kahrl!)
Put the random interval back to 1 in 50 chance. It's not as rare as rats, but rarer than grass.
2011-09-23 18:14:35 -07:00
Mark Holmquist
f19919546d Adding sapling texture 2011-09-23 18:13:53 -07:00
Mark Holmquist
85f119e1e6 Adding (most) of the sapling functionality. It has yet to work, since MEET_OTHER was not implemented at the time of this commit. Hopefully it will work when merged with celeron's latest. 2011-09-23 18:13:53 -07:00
darkrose
8b875d71d1 remove content_* things from map.cpp 2011-09-23 18:04:48 +10:00
Perttu Ahola
789c88509c Move PLATFORM_LIBS around to make sqlite3 link with libdl on some distros 2011-09-23 08:48:58 +03:00
Perttu Ahola
bdf54908aa Make client report a newer version number to the server than 2011-07-31 does and make the server enforce it 2011-09-22 20:47:47 +03:00
Perttu Ahola
7244f09111 Oh well, let's call it just 0.2.20110922 2011-09-22 18:22:04 +03:00
Perttu Ahola
ca748ad44c Update changelog and version to 0.2.20110922_rc1 2011-09-22 18:15:05 +03:00
darkrose
79cb754358 added locking chest texture 2011-09-22 19:12:17 +10:00
darkrose
582e450bad added locking chests - clean patch 2011-09-22 19:11:48 +10:00
Perttu Ahola
ae6d83a41e Better apple tree generation 2011-09-21 23:31:55 +03:00
Kahrl
3e012122d1 Simplistic wielded tool lighting, added setMeshVerticesColor to utility.h and refactored some other code into calls of that 2011-09-21 18:37:29 +02:00
Kahrl
a4a2c34831 reduce view bobbing slightly 2011-09-21 15:54:06 +02:00
Kahrl
36af9bb027 Create a separate scene manager for the wielded tool. This fixes the glitchyness in large map coordinates and some depth buffer problems. (The tool doesn't bob anymore when walking, this will be fixed later.) Fix MSVC build (thanks to dannydark). 2011-09-21 01:42:52 +02:00
Kahrl
6599002149 fix a numerical problem, but tool is still jittery 2011-09-20 18:25:29 +02:00
Kahrl
cbd2bcf102 Fix jittery view bobbing at large map coordinates again. Wielded tool still has problems there 2011-09-20 18:19:26 +02:00
Kahrl
01f3ae1c50 Digging animation 2011-09-20 11:06:16 +02:00
Kahrl
eaff4616ad fix some normals 2011-09-19 17:11:53 +02:00
Kahrl
ab42549b1e Wielded tool updates, leaves and glass work now 2011-09-19 17:08:42 +02:00
Kahrl
02726f0003 Convert any inventory item into a mesh, bring back InventoryItem::getImageRay(), some const-correctness fixes 2011-09-19 06:37:24 +02:00
Kahrl
36bcbca9ac Added sprite extruder 2011-09-19 03:01:11 +02:00
Kahrl
4ed837bcfa trying some view bobbing changes 2011-09-18 17:02:30 +02:00
Kahrl
54f3796f91 Oops, up vector is needed. 2011-09-18 02:24:43 +02:00
Kahrl
ae66d611f2 This looks more like MC view bobbing, but still not even close 2011-09-18 02:17:39 +02:00
Perttu Ahola
b22cb69a15 Merge remote-tracking branch 'sfan5/apple-trees' 2011-09-16 19:09:13 +03:00
Kahrl
40707e3c5b SQLite needs to be linked with -ldl on some Linux distros. 2011-09-16 19:06:45 +03:00
Kahrl
acfb2bb8bc Revert some changes that could lead to slower map transfer and increaed network load. 2011-09-16 18:03:58 +02:00
JacobF
7f51bccf47 update minetestmapper so it can read the database also 2011-09-16 18:59:33 +03:00
Perttu Ahola
bfa5ad483f Update changelog 2011-09-16 18:59:17 +03:00
Kahrl
ae89aa55b9 Updated colors.txt (which is used by minetestmapper) 2011-09-15 23:09:00 +02:00
Kahrl
63266928a5 Made wielded tool move slightly (and smoothly) during view bobbing. Making the tool be a child node of an empty scene node instead of the camera scene node seemingly fixed the uncontrollable tool jitter, too. 2011-09-15 01:53:42 +02:00
Kahrl
fc92da4324 View bobbing is slower in the water. 2011-09-15 01:53:42 +02:00
sfan5
88dc8c694e Added Iron Apple which heals 4 Hearts 2011-09-12 20:10:17 +02:00
sfan5
785a2fd23a Changed the Heal Amount of Apples from 6 to 2 2011-09-12 19:44:26 +02:00
sfan5
4328a6442b Fixed duplication bug 2011-09-11 19:17:14 +02:00
sfan5
6496b1cf1f Removed Spaces 2011-09-11 18:16:07 +02:00
sfan5
c0caedc373 Added Apple Trees 2011-09-11 17:50:44 +02:00
Kahrl
524cf237b8 inventory displays tool breakage bar again 2011-09-08 17:45:39 +02:00
Kahrl
e4cb004460 trying something else... also replaced M_PI by PI everywhere 2011-09-08 16:10:44 +02:00
Kahrl
71418639d3 attempting to merge Queatz/the-wielded-tool and kahrl/viewbobbing, something doesn't work right yet 2011-09-08 14:21:56 +02:00
Kahrl
f2ec226521 minor view bobbing improvements 2011-09-08 13:34:28 +02:00
Kahrl
0931d4b7ff make it slightly less annoying :o) 2011-09-08 13:14:59 +02:00
Kahrl
ccadebabba Implemented view bobbing (testing simple lemniscate shape) 2011-09-08 13:03:55 +02:00
Kahrl
18771a39cf Commented out debug statements again 2011-09-08 01:24:47 +02:00
Kahrl
baf7da9d4a Collected and moved existing camera infrastructure from game.cpp to camera.cpp and camera.h. Introduced configuration settings 'fov' which chooses the camera's (vertical) field of view and 'view_bobbing' which currently does nothing. Other code refactored to not expect the FOV to be a build time constant. 2011-09-08 01:08:47 +02:00
Kahrl
c0b35fa429 Removed unused camera_position and camera_direction fields from Client. Moved ClientEnvironment::drawPostFx to ClientMap::renderPostFx -- this will make the camera management classes easier to write, as ClientMap already knows the camera position but ClientEnvironment doesn't and has to be told about it. This also eliminates the need for Client::getEnv(). Made the post effect color a content feature defined in content_mapnode.h. 2011-09-07 19:21:28 +02:00
JacobF
f31b0a3361 Display which tool the player is holding
And some simple animation when trying to dig...
2011-09-07 10:56:04 -04:00
Perttu Ahola
d28ea57083 Note about texture atlas 2011-09-07 01:27:04 +03:00
Perttu Ahola
8e26c5c066 Add note about trans_table_19. 2011-09-07 01:19:48 +03:00
Perttu Ahola
5c1074aa7d Remove block file from disk when saved to database 2011-09-06 20:28:45 +03:00
JacobF
bd72091150 Pause in unloaded territory instead of collide 2011-09-06 20:07:43 +03:00
Perttu Ahola
faf3d7902a Make Connection::Send cancel silently if peer doesn't exist. 2011-09-06 19:39:23 +03:00
Perttu Ahola
63f1ded167 Update version number to something more proper for this stage of development (0.2.201109xx_dev) 2011-09-06 19:22:00 +03:00
Perttu Ahola
3c30ab2807 Speed up periodical map unloading by moving beginSave() and endSave() to outer loop in Map::timerUpdate() 2011-09-06 19:16:36 +03:00
Perttu Ahola
310fa10035 Merge remote-tracking branch 'queatz/sqlite-map' 2011-09-06 18:04:02 +03:00
Perttu Ahola
bc847e8cc2 Fix bug in posix file/directory removal wrapper, as pointed out by kahrl 2011-09-06 17:52:03 +03:00
Perttu Ahola
b82952bdba Fix some texture stuff: remove item_fence.png, use fence.png, remove inexisting cactus.png from texture atlas (replace with nothing because cactus is rare) 2011-09-06 17:13:24 +03:00
Kahrl
570a8dbf22 allow specifying a fixed seed in the config file for generating the map (fixed_map_seed) 2011-09-06 17:05:17 +03:00
JacobF
c68ea19e8d Now SAOs will reflect changes to their temporary inventory object
Also, the temp item wasn't being deleted, might have been a memory leak.
Now you will only eat 1 item off a stack
2011-09-06 16:36:11 +03:00
JacobF
0c91d01866 Cull empty lines... 2011-09-04 17:06:23 -04:00
JacobF
e34cef312f Files to database converter 2011-09-04 17:02:50 -04:00
JacobF
d670c831c2 These numbers were well exceeding 2^32... 2011-09-04 17:01:28 -04:00
JacobF
d1a16f24cf Initial sqlite3 maps.
* The map will reside in world/map.sqlite
* It will load from the sectors folder but will not save there
2011-09-02 19:07:14 -04:00
JacobF
2d872ce3fa Furnace was crashing stuff again 2011-09-02 17:33:06 -04:00
JacobF
e3c58eff1c Merge branch 'master' of /media/Field/Software/minetest-queatz/minetest-sqlite/.. into sqlite-map 2011-09-02 16:59:17 -04:00
JacobF
99de37ff94 Update to SQLite 3.7.7.1 2011-09-01 18:27:30 -04:00
JacobF
5e3b9e3578 * Furnace would say it was overloaded when it had a non-cookable source
* I didn't understand that expression last fix and now the furnace would burn fuel
even when it had no source item.
2011-09-01 15:39:15 -04:00
Perttu Ahola
ad795c9f0c Merge remote-tracking branch 'queatz/furnace-fix' 2011-08-31 17:04:12 +03:00
Perttu Ahola
d6d479f94c Updated changelog 2011-08-31 00:43:34 +03:00
JacobF
6415528f96 If there was no source item in a furnace it would cause a segmentation fault. 2011-08-30 11:38:53 -04:00
Perttu Ahola
4af1f2963c Merge remote-tracking branch 'kahrl/dissector' 2011-08-30 14:24:33 +03:00
Perttu Ahola
ba0322f353 Merge remote-tracking branch 'queatz/mmb10' 2011-08-30 14:24:23 +03:00
Perttu Ahola
1a705523c0 Merge remote-tracking branch 'queatz/furnace-is-not-blackhole' 2011-08-30 14:24:12 +03:00
Perttu Ahola
87b9e5467d Merge remote-tracking branch 'queatz/furnace-is-not-out-nor-can-rat-escape' 2011-08-30 14:24:07 +03:00
Perttu Ahola
625dac8d8c Merge remote-tracking branch 'queatz/privs' 2011-08-30 14:23:44 +03:00
JacobF
134e49cc8e Merged 2 branches because they relied on each other.
This one contains these changes from main c55:
* Adds a function to check if there is room for a specific item
* Using that, you can now pick up rats if you have a full inventory and a not full rat stack
* Furnace would cook only 1 item if that item used the last available result slot, now it will continue
* Furnace will say it's overloaded
* Furnace won't wait until the next step to start on the next item
 - This caused small fuels to cook slower than meant to
 - Also caused furnaces to say they were out of fuel after finishing the last fuel item
2011-08-25 19:27:50 -04:00
Kahrl
cab426ffa3 dissector branch: fix for doc/protocol.txt: CONTROLTYPE_DISCO is 3 2011-08-25 21:32:48 +02:00
Kahrl
3edf2bb417 dissector branch: fix description of TOCLIENT_PLAYERITEM in clientserver.h 2011-08-25 21:31:28 +02:00
Kahrl
9ebfbd150e dissector branch: added wireshark dissector minetest.lua 2011-08-25 21:29:41 +02:00
JacobF
e278742c5e Middle mouse click will move 10 items around at a time. 2011-08-25 12:43:19 -04:00
JacobF
ef08163c38 Don't remove furnace if something is inside it. 2011-08-24 18:53:06 -04:00
JacobF
2e82268a67 If a user doesn't have build rights, don't allow them to move items to and from their inventory 2011-08-23 22:08:09 -04:00
JacobF
00bdfad5f6 The password box in the mainmenu is focused if there is already a name and address filled in 2011-08-23 22:06:35 -04:00
Perttu Ahola
efd8dabd91 Lava is now better visible inside water. (a crappy hack) 2011-08-23 03:01:01 +03:00
Perttu Ahola
e4f443a57a Inventory transparency; very loosely based on sapier's commits.
Also contains some commented-out code for testing out different looks
in the future.
2011-08-23 00:33:38 +03:00
Perttu Ahola
d4df20a913 if creative mode and player has no build privileges, cannot drop items. 2011-08-22 22:55:17 +03:00
Perttu Ahola
db495668ae Fixed water mesh generation acting weird next to sand 2011-08-22 22:44:43 +03:00
Perttu Ahola
996c653490 Fix byte count in serialization of "F1000"
Some access violations and segfaults and strange behaviour might have
been caused by this.
2011-08-22 22:17:26 +03:00
Perttu Ahola
4acad897cf Fixed some protocol comment errors in clientserver.h and elsewhere
-- TOCLIENT_OBJECTDATA: peer ID field is missing
-- TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD: added: init length should be u32, not u16
2011-08-22 22:04:46 +03:00
Giuseppe Bilotta
b37fffc2c5 Hopefully fix 'dangling water'
If a block has (at least visible) liquids, the block below should also
be flowed in.
2011-08-22 21:45:13 +03:00
Perttu Ahola
a99450ab72 Possibly fixed the extremely rare PeerNotFound loop bug.
See explanation in http://2pktfkt.de/irc/minetest-delta/2011-08-22.html
2011-08-22 21:27:11 +03:00
Perttu Ahola
7776d6228e Update README.txt 2011-08-22 15:01:09 +03:00
Perttu Ahola
5415256a52 Merge remote-tracking branch 'oblomov/me_cmd' 2011-08-22 14:46:54 +03:00
Perttu Ahola
836e43db60 Merge remote-tracking branch 'oblomov/new_input' 2011-08-22 14:46:52 +03:00
Giuseppe Bilotta
9c94538fb7 Change way commands are displayed in chat window 2011-08-22 13:43:53 +02:00
Giuseppe Bilotta
53eedd3ba4 Introduce hotkey for calling up a command window
This is just a chat window with the / text pre-loaded.
2011-08-22 13:02:08 +02:00
Giuseppe Bilotta
42134bb49e Send KEY_END when (re)creating a text input
This ensures that on creation and when resizing the cursor is at the end
of the text rather than at the beginnig.
2011-08-22 13:02:08 +02:00
Giuseppe Bilotta
0488bf54d3 /me command 2011-08-22 13:02:08 +02:00
Giuseppe Bilotta
da19aee307 Server now supports replies without prefix 2011-08-22 13:02:08 +02:00
Giuseppe Bilotta
d2c0b4905a Defines for server command context flags 2011-08-22 13:02:08 +02:00
Giuseppe Bilotta
153f07fdfb Remove distinction between /# and / commands
No need to make the server command syntax more complicated than
necessary. If the need ever arise, we'll find some other way to
distinguish the client commands. Also, the /# syntax is deprecated and
will be made obsolete in time.
2011-08-22 13:02:08 +02:00
Giuseppe Bilotta
7e610aece5 Overhaul the input system
This allows us to map the keys which are not considered in
irrlicht's EKEY_CODE system, such as \, [, /, ] etc.
2011-08-22 13:01:11 +02:00
Giuseppe Bilotta
16aedc0ef6 Fix typos in key names 2011-08-22 12:52:15 +02:00
Perttu Ahola
6596e585fe Flowing lava updates lighting 2011-08-22 13:19:07 +03:00
Perttu Ahola
f98eda4d52 Merge remote-tracking branch 'oblomov/liquid_fixes' 2011-08-22 12:53:18 +03:00
Perttu Ahola
23717510c2 Merge branch 'lava' 2011-08-22 12:53:02 +03:00
Giuseppe Bilotta
c51564ab5b Optimize for viscosity 1 2011-08-16 20:38:44 +02:00
Giuseppe Bilotta
1eb14c7743 Viscous fluids 2011-08-16 20:37:46 +02:00
Giuseppe Bilotta
56e9f97294 Make sure all neighbors of changed fluids are activated
This should fix the remaining cases of fluid not advancing or not
retreating.
2011-08-16 18:05:28 +02:00
Giuseppe Bilotta
774faf4e85 Let the liquids flow in the open
No need to curb their spread artificially.
2011-08-16 17:42:28 +02:00
Giuseppe Bilotta
d0711821f3 Ensure air neighbors to liquids that can flow are enqueued for transformation 2011-08-16 17:42:14 +02:00
Giuseppe Bilotta
7024b45197 Ensure param2 is set correctly in transformLiquids 2011-08-16 16:50:38 +02:00
Giuseppe Bilotta
5fce673a56 Use defines for liquid levels 2011-08-16 16:50:38 +02:00
Perttu Ahola
29c9d3d5f4 Implemented MEET_OTHER 2011-08-16 12:23:19 +03:00
Giuseppe Bilotta
708f1c336e transformLiquid: small optimization and whitespace cleanup 2011-08-16 06:42:11 +02:00
Perttu Ahola
dc4ac0b96f small fix to transformLiquids 2011-08-15 18:49:44 +03:00
Perttu Ahola
296748d32e Fixed liquid mesh generation 2011-08-15 17:45:35 +03:00
Perttu Ahola
ad408f269c Add lava to creative inventory (hmm, we're shortly running out of creative inventory space) 2011-08-15 16:57:57 +03:00
Perttu Ahola
e57754868f Hopefully fixed msvc "'sqrt' : ambiguous call to overloaded function" 2011-08-15 15:11:00 +03:00
Perttu Ahola
0c7e7f4998 Non-vertex-alpha texture material for lava 2011-08-15 12:08:41 +03:00
Giuseppe Bilotta
136657bcc1 Get rid of makepackage_binary.sh
It's outdated, and it would be better to use cmake's packaging
capabilities instead, for better cross-platformness.
2011-08-15 11:07:30 +02:00
Giuseppe Bilotta
dc16820e02 Cleanup root
These scripts should not be in the root but in util/ and in fact
they are, so let's get rid of these.
2011-08-15 11:05:05 +02:00
Perttu Ahola
4b85608e30 modified mapgen to generate less lava 2011-08-15 11:56:16 +03:00
Perttu Ahola
8ab77f4153 Added #define WATER_ALPHA in content_mapnode.cpp 2011-08-15 11:51:33 +03:00
Perttu Ahola
472585a7e8 tuned lava/universal damage code 2011-08-15 11:49:39 +03:00
Perttu Ahola
8f42a8be0c lava! 2011-08-15 02:04:56 +03:00
Perttu Ahola
c4b707bca2 Windows.h -> windows.h for cross-mingw build 2011-08-14 21:26:07 +03:00
Perttu Ahola
9e35fe8c37 Merge remote-tracking branch 'speedprog/fixedNotFindingData' 2011-08-13 14:05:01 +03:00
Giuseppe Bilotta
385904d75a Let Settings accept a const char* directly 2011-08-13 07:33:43 +02:00
Giuseppe Bilotta
b1e0b7728b Fix keycode_to_keyname return value 2011-08-13 07:31:46 +02:00
Giuseppe Bilotta
eb255e6870 Clean up key names handling
Constify keycode and move the static array of localizable names from the
guiKeyChangeMenu header to the implementation file, changing its name.
2011-08-12 23:42:00 +02:00
Giuseppe Bilotta
72e4c8f523 Fix use of && instead of & 2011-08-12 23:34:12 +02:00
Perttu Ahola
835d2e4b5f Removed assert if creating texture atlas image fails; cancel creating image instead. 2011-08-12 17:17:47 +03:00
Constantin Wenger
94b42a79d7 fixed not finding data dir if installed 2011-08-12 14:26:37 +02:00
Perttu Ahola
e40da2341c Fixed/extended/modified ban stuff to be good for inclusion 2011-08-12 13:11:27 +03:00
Perttu Ahola
7aa72c56b6 Merge remote-tracking branch 'speedprog/banByIp' 2011-08-12 11:55:51 +03:00
Constantin Wenger
5784c14ab7 added ipban support
commands:
/#ipban <nick>
/#ipunban <ip>
2011-08-12 03:37:18 +02:00
Perttu Ahola
3028bbb95b Updated .gitignore to ignore vim swap files 2011-08-12 00:33:24 +03:00
Giuseppe Bilotta
dfdc817db3 Typo fix 2011-08-11 19:45:44 +02:00
Giuseppe Bilotta
f4856a33c9 .gitattributes
Marking *.cpp files as C++ files makes for nicer diffs when using
--color-words or similar options.
2011-08-11 17:57:40 +02:00
Giuseppe Bilotta
371af9c241 Notify other players of wielded item change 2011-08-11 15:22:36 +02:00
Giuseppe Bilotta
88a9bae160 constify inventory item serialization 2011-08-11 15:22:36 +02:00
Giuseppe Bilotta
ecd5c5f920 Clients inform server on wielded item
This is done with the new TOSERVER_PLAYERITEM message, that informs the
server on the index of the wielded item.
2011-08-11 15:22:36 +02:00
Giuseppe Bilotta
91d1186cbb Keep track of player item 2011-08-11 15:22:36 +02:00
Giuseppe Bilotta
467b3cf4c1 Some inventory const-ification 2011-08-11 15:22:35 +02:00
Giuseppe Bilotta
c007d8219e Server should use the same eye position as the client 2011-08-11 15:22:35 +02:00
Giuseppe Bilotta
b318e82356 Refactor player's eye position coding
Collect the player's eye position coding in a Player method, and
use it in client to pass the eye position information to the game.
2011-08-11 15:22:35 +02:00
Giuseppe Bilotta
98fa00db12 Introduce Player::getLightPosition
This is currently only used in the lighting update for remote
players in client.
2011-08-11 15:22:35 +02:00
Perttu Ahola
69fca4f3cb Merged some FreeBSD fixes 2011-08-11 12:32:36 +03:00
q66
f6ed45fc20 Proper placement of binary files. 2011-08-11 11:19:33 +02:00
q66
e81ff1e833 Gettext fix for *BSD - require special linkage as glibc is not used 2011-08-11 11:19:05 +02:00
q66
43b6ca0d14 Prevent threadid_t from losing precision when casted on 64bit systems 2011-08-11 10:52:27 +02:00
Giuseppe Bilotta
34492ce480 Respect base virtual functions' signatures 2011-08-08 16:15:53 +02:00
Giuseppe Bilotta
163c38e175 Always return from non-void functions
This quiets a warning in Clang.
2011-08-08 16:13:48 +02:00
Giuseppe Bilotta
11be390110 Keys should be s32, not u32
At least two reasons for this:
* activeKey is treated as signed (check for sign, assign -1, etc)
* the ID retrieved from Irrlicht's events are signed
2011-08-08 16:12:15 +02:00
Giuseppe Bilotta
ea26a9f543 Remove spurious assignment 2011-08-08 16:11:37 +02:00
Giuseppe Bilotta
f9e1b0cd97 InventoryAction is a struct, not a class 2011-08-08 15:38:20 +02:00
Giuseppe Bilotta
805564dcf2 Clang doesn't like -Wno-unused-but-set-variable
The release versions of CMake don't yet properly support flag checking
in Clang, so we need to exclude it explicitly for the time being.
2011-08-11 10:08:58 +02:00
Giuseppe Bilotta
76fb792544 Project uses C++, so use CHECK_CXX_COMPILER_FLAG
Although this doesn't change much for our specific case, it can make a
difference for some flags, so use the appropriate macro.
2011-08-11 10:06:48 +02:00
Dmitry Marakasov
ff35014eff Fix data paths for FreeBSD 2011-08-02 02:50:16 +04:00
Dmitry Marakasov
de868d24c1 Fix "integer constant is too large for 'long' type" error 2011-08-02 02:49:15 +04:00
Dmitry Marakasov
318a730c45 Check whether -Wno-unused-but-set-variable is supported before using
it. It seems to only be available on recent (>=4.6) versions of gcc.
2011-08-01 22:17:32 +04:00
Perttu Ahola
9017c51e7f the zlib error print function now prints to dstream (debug.txt) 2011-08-08 12:11:41 +03:00
Perttu Ahola
bdb66aced7 removed broken and old tags and re-added 0.2.20110731_3 2011-08-05 11:54:54 +03:00
Perttu Ahola
ab83444cc3 Added tag 0.2.20110731_3 for changeset a519d6832511 2011-08-05 11:52:58 +03:00
Perttu Ahola
64a6da3e45 merged delta and c55 2011-08-05 11:22:13 +03:00
Giuseppe Bilotta
dd9909a574 minetestmapper can be run from any directory
If it doesn't find colors.txt locally, it looks for the one in the
directory of the script itself.
2011-08-05 08:45:15 +02:00
Giuseppe Bilotta
59c58f230e Some obvious errors in the new fluid flow management 2011-08-05 08:45:15 +02:00
Giuseppe Bilotta
f79069f5b3 MapNode is a struct, not a class 2011-08-05 08:45:15 +02:00
Giuseppe Bilotta
f5e0ba266e Some more Italian translations 2011-08-05 08:45:15 +02:00
Constantin Wenger
7361f29527 fixed some error :/ 2011-08-05 08:45:15 +02:00
Constantin Wenger
1d009a37df changed on string in german translation to fit to gui 2011-08-05 08:45:15 +02:00
Constantin Wenger
0fb208e63c updated po update script to detect wgettext and N_ 2011-08-05 08:45:15 +02:00
Constantin Wenger
dade01be29 update op PO files 2011-08-05 08:45:15 +02:00
Constantin Wenger
45057667f1 update to german translation 2011-08-05 08:45:15 +02:00
Constantin Wenger
4ab4e33450 marked strings as translation
now translated if set to a button
2011-08-05 08:45:15 +02:00
Constantin Wenger
0cfca69b42 fixed displaying special chars in the keychange menu 2011-08-05 08:45:15 +02:00
Constantin Wenger
1278a57afe added danish translation made by Frederik Helth 2011-08-05 08:45:15 +02:00
Nils Dagsson Moskopp
071c0b5536 * Welcome to OMSK. 2011-08-05 08:45:15 +02:00
Nils Dagsson Moskopp
735fa8b652 * README updated 2011-08-03 19:01:55 +02:00
Perttu Ahola
0b37f98e16 * fix for broken water 2011-08-03 19:00:25 +02:00
Perttu Ahola
5f8809e425 Fixed farmesh to such that it was a long time ago. 2011-08-03 13:03:30 +03:00
Nils Dagsson Moskopp
f143e269f4 Merge pull request #48 from Oblomov/master
Minor code cleanups (always in the gettext area, but no functional changs)
2011-08-02 01:49:31 -07:00
Giuseppe Bilotta
1d1aec9631 Use wgettext 2011-08-02 10:11:40 +02:00
Giuseppe Bilotta
817180bd55 Introduce wgettext
All usages of gettext() are converted to wchars, so let's factor this
into a single inline.
2011-08-02 10:11:40 +02:00
Giuseppe Bilotta
60bd878f0a Get rid of unused variables 2011-08-02 10:11:39 +02:00
Nils Dagsson Moskopp
bbd8e645a2 * README updated 2011-08-01 21:18:57 +02:00
Perttu Ahola
97d659c9fd added TODO in main.cpp 2011-08-01 19:21:43 +03:00
Nils Dagsson Moskopp
7b8227039f * papyrus texture now darker and edgier 2011-08-01 16:49:42 +02:00
Nils Dagsson Moskopp
363487c97b * less clumsy ladder texture, based on rails 2011-08-01 15:47:02 +02:00
Nils Dagsson Moskopp
f6bc662194 Merge pull request #47 from MarkTraceur/master
More better ladders
2011-08-01 05:59:40 -07:00
Mark Holmquist
7bd9e53ae6 Changing CONTENT_LADDER to be an extended block 2011-08-01 09:22:56 +02:00
Mark Holmquist
267744a568 Fixing ladders again 2011-08-01 09:22:44 +02:00
Mark Holmquist
8e67f4c4e6 Fixed a few problems in the ladder update, and changed the speed to account for gravity 2011-08-01 09:22:36 +02:00
Mark Holmquist
1c59cff832 Ladders implemented! 2011-08-01 09:22:36 +02:00
Mark Holmquist
bc2819cab2 Added ladders--they don't have any use yet, though 2011-08-01 09:22:36 +02:00
Nils Dagsson Moskopp
7ece67727d Merge remote-tracking branch 'origin/upstream' 2011-07-31 20:04:04 +02:00
Perttu Ahola
303351de6d Added tag 0.2.20110731_3 for changeset b277d01700f6 2011-07-31 15:55:00 +03:00
Nils Dagsson Moskopp
831003156c Merge pull request #44 from SpeedProg/master
last fix was shit, so a fix for the fix -_-
2011-07-31 05:35:27 -07:00
Constantin Wenger
54de4afd75 last fix was shit but this one works (tested) 2011-07-31 14:28:07 +02:00
Nils Dagsson Moskopp
c01c487c62 Merge branch 'master' of github.com:erlehmann/minetest-delta 2011-07-30 23:08:52 +02:00
Nils Dagsson Moskopp
2f6e931921 Merge pull request #41 from SpeedProg/master
fixe gettext I hope
2011-07-30 14:08:18 -07:00
Constantin Wenger
50dc2d8112 fixe for msvc broke linux 2011-07-30 23:05:40 +02:00
Nils Dagsson Moskopp
f4d7530587 Merge branch 'master' of github.com:erlehmann/minetest-delta 2011-07-30 22:33:26 +02:00
Nils Dagsson Moskopp
185c0bd587 Merge pull request #40 from SpeedProg/master
translated some word to german
2011-07-30 13:33:08 -07:00
Constantin Wenger
3c0090c0df german translation update, translated some of the new strings 2011-07-30 22:28:18 +02:00
Nils Dagsson Moskopp
6199252cda Merge pull request #39 from SpeedProg/master
fixes for gettext to workaround some bad behaviour of Irrlicht
2011-07-30 13:28:14 -07:00
Constantin Wenger
c08720bfba this fixes problem with msvc++ and should work on other systems and so on anyway. 2011-07-30 22:08:16 +02:00
Constantin Wenger
4882bda667 changed one forgotten en_US.UTF-8 to C 2011-07-30 22:08:16 +02:00
Constantin Wenger
a817419fe4 fixed redefinitivon of gettext.h is included more than once 2011-07-30 22:08:16 +02:00
Constantin Wenger
37bf9a666a set some more text to gettext and updated po files 2011-07-30 22:08:16 +02:00
Constantin Wenger
cd6d204a9d changed some strings of the german translation to fit in the areas 2011-07-30 22:08:16 +02:00
Constantin Wenger
9baae3a701 set locales to C because en_US not installed on some systems, only UTF-8 version and en_US.UTF-8 does not work. 2011-07-30 22:08:16 +02:00
Constantin Wenger
92f504f98d fixed displaying "umlauts" (deutsch umlaute) and hopefully other non ASCII chars, too 2011-07-30 22:03:25 +02:00
Nils Dagsson Moskopp
75816150ec * honor environment variables, use utf-8 2011-07-30 21:17:04 +02:00
Nils Dagsson Moskopp
4681392bac * PEP 8 compliance 2011-07-30 21:05:33 +02:00
Nils Dagsson Moskopp
17830c5894 - removed old minetestmapper 2011-07-30 20:37:53 +02:00
Wolfgang Fellger
edbcf7c039 * support for content types extension in minetestmapper 2011-07-30 20:35:55 +02:00
Nils Dagsson Moskopp
96bee29e35 Merge branch 'upstream/master' 2011-07-30 19:47:55 +02:00
Nils Dagsson Moskopp
82ea534997 * README updated 2011-07-30 19:30:43 +02:00
Nils Dagsson Moskopp
a4fe2a7c75 - compiling with translations works again 2011-07-30 19:28:44 +02:00
Nils Dagsson Moskopp
4ef9c7675a Merge remote-tracking branch 'origin/upstream' 2011-07-30 18:55:43 +02:00
Nils Dagsson Moskopp
f69123050b Merge branch 'master' of github.com:erlehmann/minetest-delta 2011-07-24 20:04:20 +02:00
Nils Dagsson Moskopp
a5a9c9f799 Merge pull request #36 from Oblomov/master
Some more gettext stuff
2011-07-24 11:00:38 -07:00
Giuseppe Bilotta
cce210f676 Locale dir should be parallel to global data dir 2011-07-24 19:23:03 +02:00
Giuseppe Bilotta
a8e493122e Read config from gettext.h
Otherwise the USE_GETTEXT define might not be visible.
2011-07-24 19:13:34 +02:00
Giuseppe Bilotta
e00d7ee5be Italian translations 2011-07-24 19:06:17 +02:00
Nils Dagsson Moskopp
ad6b087353 + 24x24 rendering of SVG minetest icon, polished manually to look crisp 2011-07-24 18:51:44 +02:00
Giuseppe Bilotta
3715e39e5d Actually make USE_GETTEXT available in the source 2011-07-24 18:34:10 +02:00
Giuseppe Bilotta
423109e64c Two more instances of unhardcoding the project name 2011-07-24 18:12:11 +02:00
Nils Dagsson Moskopp
71b7d92597 Merge pull request #35 from Oblomov/master
some more gettext fixes
2011-07-24 09:01:10 -07:00
Giuseppe Bilotta
e034f8a2a3 Sanitize GETTEXT usage macros
Now the user-level option is called ENABLE_GETTEXT, and USE_GETTEXT is
only set to true if gettext was enabled and found. This simplifies all
check to USE_GETTEXT only rather than the double checks for it being
enabled and found.
2011-07-24 16:52:59 +02:00
Giuseppe Bilotta
47381bde3b Bring po update out of cmake again
This solves two issues at once:
* CMake would delete po files during ‘make clean’ because it thought
  they were autogenerated and not just managed
* the only gettext tools readily available in Windows are so old they
  don't support options like --package-name

The change also moves minetest.pot down one level, so we don't need to
special case ‘en’ anymore.

The downside is of course that you need some sane POSIX shell to update
the po files.
2011-07-24 16:52:59 +02:00
Giuseppe Bilotta
c578efb32b Refactor gettext init
Put the gettext init code in a macro and define it appropriately
depending on whether gettext is actually available or not.
2011-07-24 16:52:59 +02:00
Giuseppe Bilotta
5aa2679be7 Do not package en translation, since we don't build it 2011-07-24 09:19:25 +02:00
Giuseppe Bilotta
d4e7faca21 Gettext domain should match the project name
This partially reverts 023cc0d37776976b4b192b7363f73a5d2debdef6, goes
back to using PROJECT_NAME for the filename and also uses PROJECT_NAME
as text domain in the source code.
2011-07-24 09:19:25 +02:00
Giuseppe Bilotta
4ffba76bb3 Place project name and gettext use in config 2011-07-24 09:18:29 +02:00
Nils Dagsson Moskopp
f4a08f7fb3 Merge pull request #34 from SpeedProg/master
Changes to make gettext enabled if it is found
2011-07-23 19:01:51 -07:00
Constantin Wenger
f6d9bcc9bb updated cmakerules to autodetect if gettext can be used
fixed error if gettext is disabled
2011-07-23 22:36:11 +02:00
Nils Dagsson Moskopp
a7daf8e652 * README updated 2011-07-22 21:56:00 +02:00
Constantin Wenger
4771b4951d change in readme of a lib 2011-07-22 20:55:00 +02:00
Constantin Wenger
383698186f Merge remote-tracking branch 'upstream/master' 2011-07-22 20:53:29 +02:00
Constantin Wenger
fb4c3ab4fb fixed some problems with filenames of the translations 2011-07-22 20:40:47 +02:00
Constantin Wenger
96ad0c8638 updated some parts which don't really make a problem but are better this way 2011-07-22 20:40:46 +02:00
Nils Dagsson Moskopp
7985d746f9 Merge branch 'upstream/master' 2011-07-22 20:16:58 +02:00
Nils Dagsson Moskopp
a45f287ae1 Merge pull request #32 from Oblomov/master
Gettext + misc fixes
2011-07-22 10:30:55 -07:00
Giuseppe Bilotta
7d9dd352cf Declare USE_GETTEXT option 2011-07-22 14:42:04 +02:00
Constantin Wenger
a09660dc85 fixed problem with displaying special chars 2011-07-22 13:27:30 +02:00
Giuseppe Bilotta
d78e5e7329 updatepo cmake rule
Get rid of the system-specific updatelocales.sh and introduce an
updatepo cmake rule. po files are also updated before creating the mo
files, and we now keep the .pot file (in the po/en directory). To
stabilize the po file creation, file contents are sorted by source
filename.

Update po files in the process.
2011-07-22 12:40:29 +02:00
Giuseppe Bilotta
e61b2f99c1 Static naming of po file
The po file should not be named c55 if we're in ∆. But since it is not
exposed at installation time, we don't actually need its name to be
based on the project name at all, so just call it minetest.po
2011-07-22 09:58:02 +02:00
Giuseppe Bilotta
d386f02893 Refactor mo creation/installation 2011-07-22 09:36:17 +02:00
Giuseppe Bilotta
5a3218e535 Use project name for mo files 2011-07-22 08:33:08 +02:00
Giuseppe Bilotta
02653573d2 Merge remote-tracking branch 'erlehmann/master'
Conflicts (from the introduction of fr translations):
	src/CMakeLists.txt
2011-07-22 07:48:22 +02:00
Constantin Wenger
5c66664aef changed some lines to fit the 80chars limit 2011-07-22 07:25:40 +02:00
Nils Dagsson Moskopp
21b7a272c4 * nicer firefly texture 2011-07-21 20:13:31 +02:00
Nils Dagsson Moskopp
17a47b3335 + unknown block is sick 2011-07-21 17:36:23 +02:00
Nils Dagsson Moskopp
89bbff18e5 Merge pull request #29 from cisoun/master
Add french translation.
2011-07-21 07:33:34 -07:00
Constantin Wenger
fc95d00b2f fixed not finding dll for gettext in MSVC 2011-07-21 16:21:01 +02:00
Cyriaque Skrapits
3f4f844eeb Added missing .po fil.e 2011-07-21 16:14:18 +02:00
Cyriaque Skrapits
6875ead7cf Added french translation. 2011-07-21 16:09:57 +02:00
Nils Dagsson Moskopp
5388e8b124 * different collision box for fireflies so they now hover above the ground 2011-07-21 15:40:00 +02:00
Giuseppe Bilotta
02b14090c2 Reorganize cmake gettext message output to ease debugging 2011-07-21 15:16:59 +02:00
Giuseppe Bilotta
56a744599f Restore "Leave address blank" position 2011-07-21 15:12:58 +02:00
Giuseppe Bilotta
9fa4b72a47 Find correct library for MSVC vs MingW in Winows 2011-07-21 14:50:15 +02:00
Giuseppe Bilotta
3e78b29cae Only install locale files if using gettext 2011-07-21 14:46:23 +02:00
Giuseppe Bilotta
d63c160bd6 Uppercase DEFINED or cmake 2.8.4 complains 2011-07-21 13:59:50 +02:00
Constantin Wenger
2a6c0fc17f updated some path because the dlls are mostly under bin not lib
added explanation why libintl must not belinked under some oses
2011-07-21 13:24:37 +02:00
Giuseppe Bilotta
1340da7b54 Refactor and clean up gettext management 2011-07-21 12:33:29 +02:00
Giuseppe Bilotta
89af509d10 Make gettext optional 2011-07-21 09:03:41 +02:00
Weedy
89b8b792c1 Tweak makefiles to add -delta suffix. 2011-07-21 09:03:20 +02:00
Weedy
a19491dbd2 Fix win32 MSVC compile. (screw gettext) 2011-07-21 09:03:17 +02:00
Nils Dagsson Moskopp
f5c6e3973c Merge pull request #27 from Oblomov/master
* regression fix for windows build.
2011-07-20 14:29:01 -07:00
Giuseppe Bilotta
e7beaac6f5 Move package search out of conditional
This unbreaks the Windows build which would otherwise have problems at
the jthread level.
2011-07-20 23:09:28 +02:00
Nils Dagsson Moskopp
84684e53ed + fireflies 2011-07-20 22:05:57 +02:00
Nils Dagsson Moskopp
4c0e36a5e9 * README updated 2011-07-20 19:14:40 +02:00
Nils Dagsson Moskopp
8ed83250d7 Merge branch 'master' of github.com:erlehmann/minetest-delta 2011-07-20 18:56:32 +02:00
Nils Dagsson Moskopp
360a8918dd Merge pull request #24 from SpeedProg/master
gettext paths problem
2011-07-20 09:56:23 -07:00
Constantin Wenger
4d43a67419 fixed problem with wront paths in gettext 2011-07-20 18:49:18 +02:00
Nils Dagsson Moskopp
33e80dae7f Merge branch 'master' of github.com:erlehmann/minetest-delta 2011-07-20 18:29:48 +02:00
Nils Dagsson Moskopp
4f53619a15 Merge pull request #23 from Oblomov/master
Some misc usability patches
2011-07-20 09:29:07 -07:00
Giuseppe Bilotta
3fb5b7a3bd Set the window caption for the initial window too 2011-07-20 17:59:48 +02:00
Giuseppe Bilotta
bcd3e1af2f Check the data path before usage
When not running in place, check if the assumed data path in
../share/APPNAME exists. If it doesn't exist, fall back to ../data
instead. This allows the program to run successfully from the checkout
directory even without the run-in-place flag active.
2011-07-20 17:59:48 +02:00
Giuseppe Bilotta
cd45ae3d0f Use system sqlite3/jthread libs if available 2011-07-20 17:59:48 +02:00
Nils Dagsson Moskopp
e5dc58e710 Merge branch 'master' of github.com:erlehmann/minetest-delta 2011-07-20 17:56:49 +02:00
Nils Dagsson Moskopp
cef7bb0619 Merge pull request #22 from SpeedProg/master
added gettext support
2011-07-20 08:56:35 -07:00
Constantin Wenger
a006b828a6 updated german po file for minetest-delta (prior it was for minetest)
set +x on bashscript
2011-07-20 17:00:54 +02:00
Constantin Wenger
052bb24c7f added gettext support
german translation file
and bashscript to update translations
2011-07-20 16:51:19 +02:00
Nils Dagsson Moskopp
3c630c0d90 Merge branch 'upstream/master' 2011-07-20 14:20:07 +02:00
Nils Dagsson Moskopp
d0810b0156 * README updated (graphics licensing) 2011-07-20 02:45:15 +02:00
Nils Dagsson Moskopp
ffd3cdf519 * by popular request, fewer clouds 2011-07-20 02:44:51 +02:00
Nils Dagsson Moskopp
ac2e822ea1 * README updated 2011-07-19 23:35:12 +02:00
Nils Dagsson Moskopp
0cd2972d60 + minetest application icon 2011-07-19 23:32:01 +02:00
Nils Dagsson Moskopp
821ff68f54 * initialize liquid_kind properly so compiler does not bitch about it 2011-07-19 02:02:50 +02:00
Nils Dagsson Moskopp
e8eb4d233b + fake shading for the volumetric clouds 2011-07-19 01:43:30 +02:00
Nils Dagsson Moskopp
414d1ff9e2 + volumetric clouds (thanks teddydestodes) 2011-07-18 22:50:14 +02:00
Felix Krause
7d92ce061d final fixes to liquid flow, works now as intended 2011-07-18 02:38:57 +02:00
Felix Krause
a1e2a8bec6 fixes to liquid transformation 2011-07-18 02:38:48 +02:00
Felix Krause
f34a9b6a71 fixed refactoring issues // slowed down water flow a bit
* liquid flow no longer does random things when transformed
* if a flowi
ng liquid node doesn't have a solid block as neighbor, its spread distan
ce is shortened by 1
2011-07-18 02:38:32 +02:00
Felix Krause
def870953a * refactored liquid transformation code (has some flaws)
Completely rewrote the liquid transformation. The algorithm now exclusively modifies the current node in one iteration. Another change is that MapNode.param2 now stores a bit that tells other nodes if a flowing liquid node flows downwards. This is accomplished by two masks on param2 for the "flow down" bit and the "liquid level" bits.

This will be the base of future improvements to the liquid flow. However, in the current state flowing liquid does not always disappear when cut off its source. Be aware that this branch is work in progress.
2011-07-18 02:37:19 +02:00
Nils Dagsson Moskopp
f2c6330505 * Омская птица 2011-07-18 02:09:55 +02:00
Nils Dagsson Moskopp
077ffa5231 * changed GUI to indicate Minetest Δ 2011-07-17 22:33:51 +02:00
Nils Dagsson Moskopp
0802edf582 * README updated 2011-07-16 17:14:58 +02:00
Nils Dagsson Moskopp
8bfa56648d Merge remote-tracking branch 'origin/upstream' 2011-07-16 16:52:45 +02:00
Nils Dagsson Moskopp
4d20f1283f * fix automerge regression 2011-07-15 20:16:02 +02:00
Nils Dagsson Moskopp
0a38e542c1 * regression fix, clay occurs again now 2011-07-15 06:37:47 +02:00
Nils Dagsson Moskopp
96f551a287 * possibly nicer trees 2011-07-15 02:23:41 +02:00
Nils Dagsson Moskopp
af05e4b2de Merge branch 'upstream/master'
Conflicts:
	data/oerkki1.png
	src/client.cpp
2011-07-14 22:43:28 +02:00
Nils Dagsson Moskopp
4415d95c50 * possibly improved water flow, by flyx86
- When flowing liquid starts to flow down, it stops contributing to its neighboring nodes' liquid level (possibly transforming it back to air)
- Flowing liquid turns into a source if there are at least 2 adjacent liquid source nodes
- If a new liquid flow reaches existing flowing liquid, the existing liquid is now updated properly.
2011-07-14 16:17:53 +02:00
Nils Dagsson Moskopp
1cdf210e4f * possible fix for large cubic holes in map 2011-07-13 23:12:18 +02:00
Nils Dagsson Moskopp
b0ad5ce8e2 * slightly different values for 3d perlin noise 2011-07-13 23:10:41 +02:00
Nils Dagsson Moskopp
b2447393e4 * regression fix, papyrus should appear again now 2011-07-13 16:21:20 +02:00
Nils Dagsson Moskopp
63ce6eee5c * README updated 2011-07-11 16:22:14 +02:00
Jiří Procházka
858b2d7439 + farmesh config options 2011-07-11 15:01:43 +02:00
Nils Dagsson Moskopp
6103e59c19 * amended upstream branch notes 2011-07-09 18:22:39 +02:00
Nils Dagsson Moskopp
a106c0dbdc + notes regarding upstream conversion from mercurial using hg-fast-export 2011-07-09 18:14:05 +02:00
Nils Dagsson Moskopp
f37a3a84fa Merge pull request #13 from Bahamada/upstream_merge
Upstream merge
2011-06-27 06:56:26 -07:00
Sebastian Rühl
13cf5425db backported cactus, papyrus and clay 2011-06-26 13:47:21 +02:00
Sebastian Rühl
fb6ac9a1a6 small fix 2011-06-26 12:52:03 +02:00
Sebastian Rühl
033ae0dcae Merge branch 'master' of https://github.com/erlehmann/minetest-delta.git into upstream_merge
Conflicts:
	.gitignore
	CMakeLists.txt
	data/heart.png
	src/CMakeLists.txt
	src/game.cpp
	src/guiMainMenu.cpp
	src/inventory.cpp
	src/map.cpp
	src/mapblock.cpp
	src/mapnode.cpp
	src/mapnode.h
	src/materials.cpp
	src/server.cpp

Signed-off-by: Sebastian Rühl <bahamada_basti@yahoo.de>
2011-06-26 12:24:32 +02:00
Nils Dagsson Moskopp
e261cc9e8f + rail block bounding box 2011-06-08 05:27:55 +02:00
Nils Dagsson Moskopp
2ec160454a * README updated 2011-06-07 19:41:03 +02:00
Nils Dagsson Moskopp
51d308c666 + rail 2011-06-07 19:24:30 +02:00
Nils Dagsson Moskopp
b3c439fb16 * README updated 2011-06-03 13:39:07 +02:00
Nils Dagsson Moskopp
15ae9ca8a2 + bookshelf in minetestmapper, same color as wood 2011-06-03 13:31:42 +02:00
Nils Dagsson Moskopp
c3cd89705d * point out setInventoryTextureCube() is broken with a FIXME 2011-06-03 13:13:31 +02:00
Nils Dagsson Moskopp
1bd25925cb + paper, book, bookshelf 2011-06-03 13:12:56 +02:00
Nils Dagsson Moskopp
17e17ceb59 * README updated 2011-06-03 00:57:39 +02:00
Nils Dagsson Moskopp
8da4a4276f + papyrus in minetestmapper 2011-06-03 00:56:27 +02:00
Nils Dagsson Moskopp
3bb1cfdf36 + papyrus 2011-06-03 00:55:28 +02:00
Nils Dagsson Moskopp
e627f023a0 * made cactus color darker 2011-06-03 00:52:46 +02:00
Nils Dagsson Moskopp
bd5cdbf1a4 + check if sectors/sectors2 directories exist before attempting to read them 2011-06-02 17:21:58 +02:00
Nils Dagsson Moskopp
34e57da1ca * encoding fix 2011-06-02 17:19:50 +02:00
Nils Dagsson Moskopp
de8996ac3b * tabs to spaces 2011-06-02 17:13:05 +02:00
Nils Dagsson Moskopp
33264d0fb6 * ignore minetestmapper output 2011-06-02 16:54:05 +02:00
Nils Dagsson Moskopp
cc65bda2cc + sandstone color value now in minetestmapper 2011-06-02 16:52:25 +02:00
Nils Dagsson Moskopp
4b2b65df9f + minetestmapper2, colors modified for Minetest Δ 2011-06-02 16:17:50 +02:00
Nils Dagsson Moskopp
4800f1df97 * README updated 2011-06-02 03:03:47 +02:00
Nils Dagsson Moskopp
9850df35ae Merge pull request #1 from TeddyDesTodes/master
+ submenu for key assignment, fast_move and free_move can now be toggled
2011-06-01 17:20:37 -07:00
teddydestodes
7dfa3442fe Merge remote-tracking branch 'upstream/master' 2011-06-01 19:47:10 +02:00
teddydestodes
58bc6f3a18 added new submenu for key assignment
configwriting/saving isn't complete and will break your config if you use fancy keys
2011-06-01 19:44:07 +02:00
Nils Dagsson Moskopp
a75c31143a * README updated 2011-06-01 17:19:28 +02:00
Nils Dagsson Moskopp
15b375827e Merge pull request #5 from bucket-T/master
MacOSX build support
2011-06-01 08:08:41 -07:00
Nils Dagsson Moskopp
60578e0950 * README updated 2011-06-01 16:46:49 +02:00
teddydestodes
09d7654f46 Merge remote-tracking branch 'bucket-t/master' 2011-06-01 14:43:27 +02:00
MrLoom
28234f6e54 MacOSX build support 2011-06-01 14:13:22 +02:00
teddydestodes
63fe487d93 Merge remote-tracking branch 'upstream/master' 2011-06-01 14:11:52 +02:00
Nils Dagsson Moskopp
d2b2c7c09e * improved fence dimensions (cuboid side lengths now multiples of 2, textures should fit better) 2011-06-01 20:06:16 +08:00
Nils Dagsson Moskopp
c930a92b72 * clay is rarer now 2011-06-01 08:09:28 +02:00
Nils Dagsson Moskopp
cffd40c5d6 + clay and associated items 2011-06-01 04:57:46 +02:00
Nils Dagsson Moskopp
fb78854e9b + brick 2011-05-31 22:04:09 +02:00
Nils Dagsson Moskopp
461f53945d * menulogo now shows minetest delta 2011-05-31 20:52:20 +02:00
Nils Dagsson Moskopp
6c3ca42e0e + fence inventory icon 2011-05-31 03:54:39 +02:00
Nils Dagsson Moskopp
0f4c83eb98 * improved fence dimensions (cuboid side lengths now multiples of 2, textures should fit better) 2011-05-31 02:56:23 +02:00
Nils Dagsson Moskopp
880aa870a0 + cactii 2011-05-30 14:42:08 +02:00
Nils Dagsson Moskopp
cf136f1935 + .gitignore 2011-05-30 01:21:37 +08:00
teddydestodes
ca26de72c9 fast_move and free_move can now be toggled 2011-05-29 19:17:42 +02:00
Nils Dagsson Moskopp
af574e58fe + .gitignore 2011-05-29 19:08:59 +02:00
Nils Dagsson Moskopp
ed81aa8aae + README in main directory 2011-05-29 19:03:59 +02:00
Nils Dagsson Moskopp
9ab64658ba * better heart icon 2011-05-29 18:49:02 +02:00
Nils Dagsson Moskopp
3504a66eda * better glass graphics 2011-05-29 18:48:39 +02:00
Nils Dagsson Moskopp
3f0ac7adce * better rat graphics 2011-05-29 18:48:21 +02:00
Nils Dagsson Moskopp
0076339914 * enemies are now omsk birds 2011-05-29 18:47:40 +02:00
Nils Dagsson Moskopp
2176f4d697 * better player graphics 2011-05-29 18:45:50 +02:00
Nils Dagsson Moskopp
843ffba567 + sandstone 2011-05-29 18:44:42 +02:00
837 changed files with 180633 additions and 47761 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
*.cpp diff=cpp
*.h diff=cpp

73
.gitignore vendored
View File

@@ -1,22 +1,79 @@
map/*
world/*
## Generic ignorable patterns and files
*~
.*.swp
*bak*
tags
*.vim
*.orig
*.rej
## Non-static Minetest directories
/bin/
/games/*
!/games/minimal/
/cache/
/textures/*
!/textures/base/
/sounds/
/mods/*
!/mods/minetest/
/mods/minetest/*
!/mods/minetest/mods_here.txt
/worlds/
/world/
## Configuration/log files
minetest.conf
debug.txt
## Build files
CMakeFiles/*
src/CMakeFiles/*
src/Makefile
src/cmake_config.h
src/cmake_config_githash.h
src/cmake_install.cmake
src/script/CMakeFiles/*
src/script/common/CMakeFiles/*
src/script/cpp_api/CMakeFiles/*
src/script/lua_api/CMakeFiles/*
src/util/CMakeFiles/*
src/jthread/CMakeFiles/*
src/jthread/Makefile
src/jthread/cmake_config.h
src/jthread/cmake_install.cmake
minetest.conf
bin/
src/jthread/libjthread.a
src/json/libjson.a
src/lua/build/
src/lua/CMakeFiles/
src/cguittfont/CMakeFiles/
src/cguittfont/libcguittfont.a
src/cguittfont/cmake_install.cmake
src/cguittfont/Makefile
src/json/CMakeFiles/
src/json/libjsoncpp.a
src/sqlite/CMakeFiles/*
src/sqlite/libsqlite3.a
CMakeCache.txt
CPackConfig.cmake
CPackSourceConfig.cmake
Makefile
cmake_install.cmake
src/jthread/libjthread.a
debug.txt
bin/debug.txt
minetestmapper/map.png
locale/
*.cbp
*.layout
*.o
#build variants
build/android/assets
build/android/bin
build/android/Debug
build/android/deps
build/android/gen
build/android/jni/src/*
build/android/libs
build/android/obj
timestamp

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/*

28
.hgtags
View File

@@ -1,28 +0,0 @@
c37bcfd89dd627fdb131ae3f77fcaab02721bf76 working
69547bd6be420eb40f55524fd2131cbbaa2e0e29 110107195706-exp
e3c3c8e27bbc8c9b61710517a78944deb1c61696 110211211322
23880c78e40c50ad54fcd8844510f7a423b37f2a 110212200513
20c49c98c92a62df457b773c562df41d4167492b 110214175330
10be2b71f965585af90af96903e83b4ddff52bf9 20110424_0
9b05d4bfee9312aef4182fa6f63b4237368cec34 0.2.20110529_0
6fa0a8b40406aa567f8fa84b5e2045a7e3762c1d 0.2.20110529_1
cf6dd618ef0b7514c81ae87749733b5a328fc763 0.2.20110529_2
96efc17b4cd92aacbe947b520a6ba91727d42f03 0.2.20110602_0
0000000000000000000000000000000000000000 0.2.20110602_0
6f17cd3f6c5481e6abc906fc441980c764632cbc 0.2.20110602_0
dd08a9b5cb84d55b7576bb3fde3068dd263bc3bc 0.2.20110618_0_dev
25aa2021937f7a8b36808390983cebbc16ae6965 0.2.20110704_0
25aa2021937f7a8b36808390983cebbc16ae6965 0.2.20110704_0
0000000000000000000000000000000000000000 0.2.20110704_0
0000000000000000000000000000000000000000 0.2.20110704_0
65263ec55caf526e3f3e0bdc6657ce42daee46bc 0.2.20110704_0
06c62112b503e746d5d8cc40f951974447d590b7 0.2.20110731_0
705a7e95b8710c8cada5524d8c7bb658f4b710d9 0.2.20110731_1
4a6cf9491306988b24c79438ee6398885c432fce 0.2.20110731_2
4a6cf9491306988b24c79438ee6398885c432fce 0.2.20110731_2
0000000000000000000000000000000000000000 0.2.20110731_2
0000000000000000000000000000000000000000 0.2.20110731_2
8ad16fbce9a4da45b2552ad8b400a5a127722acc 0.2.20110731_2
c87e28deaabf4a776c261b3a09b6bf5ea3e04abf 0.2.20110731_3
c87e28deaabf4a776c261b3a09b6bf5ea3e04abf 0.2.20110731_3
0000000000000000000000000000000000000000 0.2.20110731_3

10
.travis.yml Normal file
View File

@@ -0,0 +1,10 @@
language: cpp
compiler:
- gcc
- clang
before_install:
- if [ $CC = "clang" ]; then export PATH="/usr/bin/:$PATH"; sudo sh -c 'echo "deb http://ppa.launchpad.net/eudoxos/llvm-3.1/ubuntu precise main" >> /etc/apt/sources.list'; sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 92DE8183; sudo apt-get update; sudo apt-get install llvm-3.1; sudo apt-get install clang; fi
- sudo apt-get install libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev
script: cmake . && make
notifications:
email: false

View File

@@ -7,11 +7,24 @@ endif(${CMAKE_VERSION} STREQUAL "2.8.2")
# This can be read from ${PROJECT_NAME} after project() is called
project(minetest)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Also remember to set PROTOCOL_VERSION in clientserver.h when releasing
set(VERSION_MAJOR 0)
set(VERSION_MINOR 2)
set(VERSION_PATCH 20110731_3)
set(VERSION_MINOR 4)
set(VERSION_PATCH 10)
set(VERSION_PATCH_ORIG ${VERSION_PATCH})
if(VERSION_EXTRA)
set(VERSION_PATCH ${VERSION_PATCH}-${VERSION_EXTRA})
else()
# Comment the following line during release
# set(VERSION_PATCH ${VERSION_PATCH}-dev)
endif()
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
MESSAGE(STATUS "*** Will build version ${VERSION_STRING} ***")
# Configuration options
if(WIN32)
@@ -20,6 +33,13 @@ else()
set(RUN_IN_PLACE 0 CACHE BOOL "Run directly in source directory structure")
endif()
# RUN_IN_PLACE is exported as a #define value, ensure it's 1/0 instead of ON/OFF
if(RUN_IN_PLACE)
set(RUN_IN_PLACE 1)
else()
set(RUN_IN_PLACE 0)
endif()
set(BUILD_CLIENT 1 CACHE BOOL "Build client")
if(WIN32)
set(BUILD_SERVER 0 CACHE BOOL "Build server")
@@ -46,26 +66,115 @@ find_package(Irrlicht)
#
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(SHAREDIR ".")
set(BINDIR "./bin")
set(DOCDIR "./doc/${PROJECT_NAME}")
set(EXAMPLE_CONF_DIR ${DOCDIR})
set(LOCALEDIR "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/appdata")
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/appdata")
set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale")
endif()
endif()
install(FILES "doc/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}")
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}/games/minimal" DESTINATION "${SHAREDIR}/games")
set(MINETEST_GAME_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game")
if(EXISTS ${MINETEST_GAME_SOURCE} AND IS_DIRECTORY ${MINETEST_GAME_SOURCE})
install(FILES ${MINETEST_GAME_SOURCE}/game.conf DESTINATION "${SHAREDIR}/games/minetest_game/")
install(FILES ${MINETEST_GAME_SOURCE}/README.txt DESTINATION "${SHAREDIR}/games/minetest_game/")
install(DIRECTORY ${MINETEST_GAME_SOURCE}/mods DESTINATION "${SHAREDIR}/games/minetest_game")
install(DIRECTORY ${MINETEST_GAME_SOURCE}/menu DESTINATION "${SHAREDIR}/games/minetest_game")
endif()
if(BUILD_CLIENT)
#install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/sounds/base/pack" DESTINATION "${SHAREDIR}/sounds/base")
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/mapformat.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/minetest.desktop" DESTINATION "${XDG_APPS_DIR}")
install(FILES "misc/minetest.appdata.xml" DESTINATION "${APPDATADIR}")
install(FILES "misc/minetest-icon.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
endif()
#
# Subdirectories
@@ -100,15 +209,13 @@ if(WIN32)
# 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_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-osx")
set(CPACK_PACKAGE_ICON "")
set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/misc/mac/minetest-icon.icns)
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_BUNDLE_ICON ${CPACK_PACKAGE_ICON})
set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/misc/mac/Info.plist)
set(CPACK_BUNDLE_STARTUP_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/misc/mac/minetest-mac.sh)
set(CPACK_GENERATOR "Bundle")
else()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-linux")

View File

@@ -1,50 +1,80 @@
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-2013 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
Default Controls
-----------------
- WASD: move
- Space: jump/climb
- Shift: sneak/go down
- Q: drop item
- I: inventory
- Mouse: turn/look
- Mouse left: dig/punch
- Mouse right: place/use
- Mouse wheel: select item
- Esc: pause menu
- T: chat
- Settable in the configuration file, see the section below.
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:
../map
- Otherwise something like this:
Windows: C:\Documents and Settings\user\Application Data\minetest\map
Linux: ~/.minetest/map
OS X: ~/Library/Application Support/minetest/map
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
OS X:
$bin = ?
$share = ?
$user = ~/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:
- 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>
- 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
Command-line options:
---------------------
@@ -54,12 +84,19 @@ 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
$ apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev
Download source, extract (this is the URL to the latest of source repository, which might not work at all times):
$ wget https://bitbucket.org/celeron55/minetest/get/tip.tar.gz
$ tar xf tip.tar.gz
$ cd minetest
$ wget https://github.com/minetest/minetest/tarball/master -O master.tar.gz
$ tar xf master.tar.gz
$ cd minetest-minetest-286edd4 (or similar)
Download minetest_game (otherwise only the "Minimal development test" game is available)
$ cd games/
$ wget https://github.com/minetest/minetest_game/tarball/master -O minetest_game.tar.gz
$ tar xf minetest_game.tar.gz
$ mv minetest-minetest_game-* minetest_game
$ cd ..
Build a version that runs directly from the source directory:
$ cmake . -DRUN_IN_PLACE=1
@@ -73,10 +110,84 @@ $ ./minetest
- 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
- You can select between Release and Debug build by -DCMAKE_BUILD_TYPE=<Debug or Release>
- Note that the Debug build is considerably slower
- 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
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_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, which is much faster than SQLite, as map backend
ENABLE_REDIS - Build with libhiredis; Enables use of redis map backend
ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds
DISABLE_LUAJIT - Do not search for LuaJIT headers & library
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_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
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 - path to Irrlicht.dll
IRRLICHT_INCLUDE_DIR - directory that contains IrrCompileConfig.h
IRRLICHT_LIBRARY - path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a
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
REDIS_INCLUDE_DIR - Only when building with redis support; directory that contains hiredis.h
REDIS_LIBRARY - Only when building with redis support; path to libhiredis.a/libhiredis.so
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_gl_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so
SQLITE3_INCLUDE_DIR - Only if you want to use SQLite from your OS; directory that contains sqlite3.h
SQLITE3_LIBRARY - Only if you want to use the SQLite from your OS; path to libsqlite3.a/libsqlite3.so
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 zlibwapi.dll
ZLIB_INCLUDE_DIR - directory where zlib.h is located
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 +201,19 @@ 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
* gettext bibrary and tools:
* Optional: gettext library and tools:
http://gnuwin32.sourceforge.net/downlinks/gettext.php
* And, of course, Minetest-c55:
http://celeron.55.lt/~celeron55/minetest/download
- This is used for other UI languages. Feel free to leave it out.
* And, of course, Minetest:
http://minetest.net/download.php
- 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. All those
packages contain a nice base directory in them, which should end up being
the direct subdirectories of DIR.
- 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
- 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):
-----------------
+ DIR
@@ -119,7 +233,7 @@ Compiling on Windows:
+ lib
+ include
...
+ gettext
+ gettext (optional)
+bin
+include
+lib
@@ -157,11 +271,14 @@ Compiling on Windows:
GETTEXT_MSGFMT DIR/gettext/bin/msgfmt
-----------------
- Hit "Configure"
- Hit "Configure" once again 8)
- If something is still coloured red, you have a problem.
- Hit "Generate"
If using MSVC:
- Open the generated minetest.sln
- The project defaults to the "Debug" configuration. Make very sure to
select "Release", unless you want to debug some stuff (it's slower)
select "Release", unless you want to debug some stuff (it's slower
and might not even work at all)
- Build the ALL_BUILD project
- Build the INSTALL project
- You should now have a working game with the executable in
@@ -171,26 +288,78 @@ 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
License of Minetest-c55
-----------------------
Windows releases of minetest are built using a bat script like this:
--------------------------------------------------------------------
Minetest-c55
Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
set sourcedir=%CD%
set installpath="C:\tmp\minetest_install"
set irrlichtpath="C:\tmp\irrlicht-1.7.2"
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%
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
: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)
http://creativecommons.org/licenses/by-sa/3.0/
Authors of media files
-----------------------
Everything not listed in here:
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
BlockMen:
textures/base/pack/menuheader.png
erlehmann:
misc/minetest-icon-24x24.png
misc/minetest-icon.ico
misc/minetest-icon.svg
textures/base/pack/logo.png
License of Minetest source code
-------------------------------
Minetest
Copyright (C) 2010-2013 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.
@@ -246,4 +415,68 @@ 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 http://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
---------------
DejaVu Sans Mono:
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
Bitstream Vera Fonts Copyright:
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
a trademark of Bitstream, Inc.
Arev Fonts Copyright:
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
Liberation Fonts Copyright:
Copyright (c) 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc.
DroidSansFallback:
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.

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.minetest.minetest"
android:versionCode="###ANDROID_VERSION###"
android:versionName="###BASE_VERSION###.###ANDROID_VERSION###"
android:installLocation="auto">
<uses-sdk android:minSdkVersion="9"/>
<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" />
###DEBUG_BUILD###
<application android:icon="@drawable/irr_icon" android:label="Minetest" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" ###DEBUG_FLAG###>
<activity android:name=".MtNativeActivity"
android:label="Minetest"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="landscape"
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>

724
build/android/Makefile Normal file
View File

@@ -0,0 +1,724 @@
# build options
OS := $(shell uname)
#automaticaly set number of jobs
ifeq ($(OS),Linux)
PARALLEL := $(shell grep -c ^processor /proc/cpuinfo)
else
PARALLEL := 1
endif
# compile with GPROF
# GPROF = 1
# build for build platform
APP_PLATFORM = android-9
# paths used for timestaps, dependencys, tree config and libs
PATHCFGFILE = path.cfg
ROOT = $(shell pwd)
################################################################################
# Android Version code
# Increase for each build!
################################################################################
ANDROID_VERSION_CODE = 4
################################################################################
# toolchain config for arm old processors
################################################################################
TARGET_HOST = arm-linux
TARGET_ABI = armeabi
TARGET_LIBDIR = armeabi
TARGET_TOOLCHAIN = arm-linux-androideabi-
TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfp
CROSS_PREFIX = arm-linux-androideabi-
COMPILER_VERSION = 4.8
################################################################################
# toolchain config for arm new processors
################################################################################
#TARGET_HOST = arm-linux
#TARGET_ABI = armeabi-v7a-hard
#TARGET_LIBDIR = armeabi-v7a
#TARGET_TOOLCHAIN = arm-linux-androideabi-
#TARGET_CFLAGS_ADDON = -mfpu=vfpv3-d16 -D_NDK_MATH_NO_SOFTFP=1 \
# -mfloat-abi=hard -march=armv7-a
#TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
#TARGET_LDFLAGS_ADDON = -Wl,--no-warn-mismatch -lm_hard
#CROSS_PREFIX = arm-linux-androideabi-
#COMPILER_VERSION = 4.8
################################################################################
# toolchain config for little endian mips
################################################################################
#TARGET_HOST = mipsel-linux
#TARGET_ABI = mips
#TARGET_LIBDIR = mips
#TARGET_TOOLCHAIN = mipsel-linux-android-
#CROSS_PREFIX = mipsel-linux-android-
#COMPILER_VERSION = 4.8
################################################################################
# toolchain config for x86
################################################################################
#TARGET_HOST = x86-linux
#TARGET_ABI = x86
#TARGET_LIBDIR = x86
#TARGET_TOOLCHAIN = x86-
#CROSS_PREFIX = i686-linux-android-
#COMPILER_VERSION = 4.8
################################################################################
ASSETS_TIMESTAMP = deps/assets_timestamp
LEVELDB_DIR = $(ROOT)/deps/leveldb/
LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
LEVELDB_TIMESTAMP_INT = $(ROOT)/deps/leveldb_timestamp
LEVELDB_URL_GIT = https://code.google.com/p/leveldb/
OPENAL_DIR = $(ROOT)/deps/openal-soft/
OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp
OPENAL_TIMESTAMP_INT = $(ROOT)/deps/openal_timestamp
OPENAL_URL_GIT = https://github.com/apportable/openal-soft
OGG_DIR = $(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 = $(ROOT)/deps/ogg_timestamp
OGG_URL_GIT = https://github.com/vincentjames501/libvorbis-libogg-android
IRRLICHT_DIR = $(ROOT)/deps/irrlicht/
IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a
IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
IRRLICHT_TIMESTAMP_INT = $(ROOT)/deps/irrlicht_timestamp
IRRLICHT_URL_SVN = http://svn.code.sf.net/p/irrlicht/code/branches/ogl-es/
OPENSSL_BASEDIR = openssl-android
OPENSSL_DIR = $(ROOT)/deps/$(OPENSSL_BASEDIR)/
OPENSSL_LIB = $(OPENSSL_DIR)libs/$(TARGET_ABI)/libopenssl.so
OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp
OPENSSL_TIMESTAMP_INT = $(ROOT)/deps/openssl_timestamp
OPENSSL_URL_GIT = https://github.com/wobbals/openssl-android
CURL_VERSION = 7.35.0
CURL_DIR = $(ROOT)/deps/curl-$(CURL_VERSION)
CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a
CURL_TIMESTAMP = $(CURL_DIR)/timestamp
CURL_TIMESTAMP_INT = $(ROOT)/deps/curl_timestamp
CURL_URL_HTTP = http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
FREETYPE_DIR = $(ROOT)/deps/freetype2-android/
FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGER_ABI)/libfreetype2-static.a
FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp
FREETYPE_TIMESTAMP_INT = $(ROOT)/deps/freetype_timestamp
FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
-include $(PATHCFGFILE)
.PHONY : debug release reconfig delconfig \
leveldb_download clean_leveldb leveldb\
irrlicht_download clean_irrlicht irrlicht \
clean_assets assets \
freetype_download clean_freetype freetype \
apk clean_apk \
clean_all clean prep_srcdir \
install_debug install envpaths all \
manifest clean_manifest\
$(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
$(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
$(OPENSSL_TIMESTAMP) curl_binary \
$(ROOT)/jni/src/android_version.h
debug : $(PATHCFGFILE)
export NDEBUG=; \
export BUILD_TYPE=debug; \
$(MAKE) -j${PARALLEL} apk
all : debug release
release : $(PATHCFGFILE)
@export NDEBUG=1; \
export BUILD_TYPE=release; \
$(MAKE) -j${PARALLEL} apk
reconfig: delconfig
@$(MAKE) -j${PARALLEL} $(PATHCFGFILE)
delconfig :
$(RM) ${PATHCFGFILE}
$(PATHCFGFILE) :
@echo "Please specify path of ANDROID NDK"; \
echo "e.g. /home/user/android-ndk-r9c/"; \
read ANDROID_NDK ; \
if [ ! -d $$ANDROID_NDK ] ; then \
echo "$$ANDROID_NDK is not a valid folder"; \
exit 1; \
fi; \
echo "ANDROID_NDK = $$ANDROID_NDK" > ${PATHCFGFILE}; \
echo "NDK_MODULE_PATH = $$ANDROID_NDK/tools" >> ${PATHCFGFILE}; \
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\
echo "+ Note: NDK_MODULE_PATH is set to $$ANDROID_NDK/tools"; \
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\
echo "Please specify path of ANDROID SDK"; \
echo "e.g. /home/user/adt-bundle-linux-x86_64-20131030/sdk/"; \
read SDKFLDR ; \
if [ ! -d $$SDKFLDR ] ; then \
echo "$$SDKFLDR is not a valid folder"; \
exit 1; \
fi; \
echo "SDKFOLDER = $$SDKFLDR" >> ${PATHCFGFILE};
$(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 ${ROOT}/deps; \
cd ${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 \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for openal detected building..."; \
cd ${OPENAL_DIR}; \
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
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 ${ROOT}/deps; \
cd ${ROOT}/deps ; \
git clone ${OGG_URL_GIT}|| exit 1; \
cd libvorbis-libogg-android ; \
patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \
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 \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for ogg detected building..."; \
cd ${OGG_DIR}; \
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
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 ${ROOT}/deps; \
cd ${ROOT}/deps ; \
git clone ${OPENSSL_URL_GIT} || exit 1; \
fi
openssl : $(OPENSSL_LIB)
$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP)
@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 \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for openssl detected building..."; \
cd ${OPENSSL_DIR}; \
cat jni/Application.mk | grep -v NDK_TOOLCHAIN_VERSION >jni/Application.mk.new;\
mv jni/Application.mk.new jni/Application.mk; \
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${OPENSSL_TIMESTAMP}; \
touch ${OPENSSL_TIMESTAMP_INT}; \
else \
echo "nothing to be done for openssl"; \
fi
clean_openssl :
$(RM) -rf ${OPENSSL_DIR}
$(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 ${ROOT}/deps; \
cd ${ROOT}/deps ; \
git clone ${LEVELDB_URL_GIT} || exit 1; \
fi
leveldb : $(LEVELDB_LIB)
$(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 \
export PATH=$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for leveldb detected building..."; \
cd deps/leveldb; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-arm; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--install-dir=$${TOOLCHAIN} --system=linux-x86_64; \
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_CFLAGS_ADDON}"; \
export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
$(MAKE) -j${PARALLEL} -s || exit 1; \
touch ${LEVELDB_TIMESTAMP}; \
touch ${LEVELDB_TIMESTAMP_INT}; \
else \
echo "nothing to be done for leveldb"; \
fi
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 ${ROOT}/deps; \
cd deps; \
git clone ${FREETYPE_URL_GIT} || 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
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}; \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for freetype detected building..."; \
cd ${FREETYPE_DIR}/Android/jni; \
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} -j${PARALLEL} \
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}
#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 ${ROOT}/deps; \
cd deps; \
svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1; \
cd irrlicht; \
patch -p1 < ../../irrlicht-touchcount.patch || exit 1; \
patch -p1 < ../../irrlicht-back_button.patch || exit 1; \
patch -p1 < ../../irrlicht-texturehack.patch || exit 1; \
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}; \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
echo "changed timestamp for irrlicht detected building..."; \
cd deps/irrlicht/source/Irrlicht/Android; \
ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} -j${PARALLEL} \
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 ${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; \
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}; \
export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \
echo "changed timestamp for curl detected building..."; \
cd deps/curl-${CURL_VERSION}; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-arm; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--install-dir=$${TOOLCHAIN} --system=linux-x86_64; \
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 \
-L${OPENSSL_DIR}/libs/${TARGET_ABI}/ ${TARGET_CFLAGS_ADDON}"; \
export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR}/libs/${TARGET_ABI}/ \
${TARGET_LDFLAGS_ADDON}"; \
./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \
$(MAKE) -j${PARALLEL} -s || exit 1; \
touch ${CURL_TIMESTAMP}; \
touch ${CURL_TIMESTAMP_INT}; \
else \
echo "nothing to be done for curl"; \
fi
clean_curl :
$(RM) -rf deps/curl-${CURL_VERSION}
curl_binary:
@if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \
echo "curl sources missing, downloading..."; \
mkdir -p ${ROOT}/deps; \
cd deps; \
wget http://curl.haxx.se/gknw.net/7.34.0/dist-android/curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
tar -xzf curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\
mv curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android curl-${CURL_VERSION_BINARY};\
rm curl-7.34.0-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz; \
fi
$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
@mkdir -p ${ROOT}/deps; \
LAST_MODIF=$$(find ${ROOT}/../../builtin -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../builtin/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
echo builtin changed $$LAST_MODIF; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../client -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../client/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../doc -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../doc/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../fonts -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../fonts/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../games -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../games/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../mods -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../mods/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../po -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../po/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
LAST_MODIF=$$(find ${ROOT}/../../textures -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ROOT}/../../textures/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
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 [ ${ROOT}/../../minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \
echo "conf changed"; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
if [ ${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 ${ROOT}/assets ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "assets changed, refreshing..."; \
$(MAKE) -j${PARALLEL} clean_assets; \
mkdir -p ${ROOT}/assets/Minetest; \
cp ${ROOT}/../../minetest.conf.example ${ROOT}/assets/Minetest; \
cp ${ROOT}/../../README.txt ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../builtin ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../client ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../games ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../mods ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \
cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \
mkdir -p ${ROOT}/assets/Minetest/media; \
cp -r ${IRRLICHT_DIR}/media/Shaders ${ROOT}/assets/Minetest/media; \
cd ${ROOT}/assets; \
find . -name "timestamp" -exec rm {} \; ; \
find . -name "*.blend" -exec rm {} \; ; \
ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
cp ${ROOT}/${ASSETS_TIMESTAMP} ${ROOT}/${ASSETS_TIMESTAMP}.old; \
else \
echo "nothing to be done for assets"; \
fi
clean_assets :
@$(RM) -r assets
apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(LEVELDB_LIB) \
$(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h
@export NDEBUG=$$NDEBUG; $(MAKE) -j${PARALLEL} manifest; \
export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \
export ANDROID_HOME=${SDKFOLDER}; \
mkdir -p ${ROOT}/src; \
ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH} -j${PARALLEL} \
GPROF=${GPROF} APP_ABI=${TARGET_ABI} \
APP_PLATFORM=${APP_PLATFORM} \
TARGET_LIBDIR=${TARGET_LIBDIR} \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" && \
ant $$BUILD_TYPE && \
echo "++ Success!" && \
echo "APK: bin/Minetest-$$BUILD_TYPE.apk" && \
echo "You can install it with \`adb install -r bin/Minetest-$$BUILD_TYPE.apk\`"
prep_srcdir :
@rm ${ROOT}/jni/src; \
ln -s ${ROOT}/../../src ${ROOT}/jni/src
clean_apk : manifest
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
export ANDROID_HOME=${SDKFOLDER}; \
ant clean
install_debug :
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
adb install -r ${ROOT}/bin/Minetest-debug.apk
install :
@export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \
adb install -r ${ROOT}/bin/Minetest-release.apk
envpaths :
@echo "export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}" > and_env;\
echo "export ANDROID_HOME=${SDKFOLDER}" >> and_env;
clean_all :
@$(MAKE) -j${PARALLEL} clean_apk; \
$(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \
clean_openal clean_ogg clean_manifest; \
sleep 1; \
$(RM) -r gen libs obj deps bin Debug and_env
$(ROOT)/jni/src/android_version.h :
@echo "#define STR_HELPER(x) #x" \
>${ROOT}/jni/src/android_version.h; \
echo "#define STR(x) STR_HELPER(x)" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#define VERSION_MINOR $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}')" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#define VERSION_PATCH_ORIG $$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#define CMAKE_VERSION_GITHASH \"$$(git rev-parse --short=8 HEAD)\"" \
>> ${ROOT}/jni/src/android_version.h; \
echo "#define CMAKE_VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\
\".\"STR(VERSION_PATCH)" \
>> ${ROOT}/jni/src/android_version.h;
manifest :
@VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \
VERS_MINOR=$$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}'); \
VERS_PATCH=$$(cat ${ROOT}/../../CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}'); \
BASE_VERSION="$$VERS_MAJOR.$$VERS_MINOR.$$VERS_PATCH"; \
if [ "${NDEBUG}x" != "x" ] ; then \
DBG=''; \
DBG_FLAG="android:debuggable=\"false\""; \
else \
DBG="<uses-permission android:name=\"android.permission.SET_DEBUG_APP\" />"; \
DBG_FLAG="android:debuggable=\"true\""; \
fi; \
cat ${ROOT}/AndroidManifest.xml.template | \
sed s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g | \
sed s/###BASE_VERSION###/$$BASE_VERSION/g | \
sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \
sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml
clean_manifest :
rm -rf ${ROOT}/AndroidManifest.xml
clean : clean_apk clean_assets

16
build/android/build.xml Normal file
View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="Minetest" default="help">
<property file="local.properties" />
<property file="ant.properties" />
<property environment="env" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition>
<loadproperties srcFile="project.properties" />
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
unless="sdk.dir"
/>
<import file="custom_rules.xml" optional="true" />
<import file="${sdk.dir}/tools/ant/build.xml" />
</project>

View File

@@ -0,0 +1,19 @@
--- irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 20:56:21.289559503 +0200
+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp.orig 2014-06-03 20:57:39.281556749 +0200
@@ -423,6 +423,7 @@
}
device->postEventFromUser(event);
+ status = 1;
}
break;
default:
@@ -479,7 +480,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,308 @@
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)
include $(CLEAR_VARS)
LOCAL_MODULE := LevelDB
LOCAL_SRC_FILES := deps/leveldb/libleveldb.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := deps/curl-7.35.0/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 := 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 := ssl
LOCAL_SRC_FILES := deps/openssl-android/libs/$(TARGET_LIBDIR)/libssl.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := deps/openssl-android/libs/$(TARGET_LIBDIR)/libcrypto.so
include $(PREBUILT_SHARED_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=1 \
$(GPROF_DEF) \
-pipe -fstrict-aliasing
ifndef NDEBUG
LOCAL_CFLAGS += -g -D_DEBUG -O0 -fno-omit-frame-pointer
else
LOCAL_CFLAGS += -fexpensive-optimizations -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/sqlite \
jni/src/script \
jni/src/lua/src \
jni/src/json \
jni/src/cguittfont \
deps/irrlicht/include \
deps/freetype2-android/include \
deps/curl-7.35.0/include \
deps/openal-soft/jni/OpenAL/include \
deps/libvorbis-libogg-android/jni/include \
deps/leveldb/include \
LOCAL_SRC_FILES := \
jni/src/ban.cpp \
jni/src/base64.cpp \
jni/src/biome.cpp \
jni/src/camera.cpp \
jni/src/cavegen.cpp \
jni/src/chat.cpp \
jni/src/client.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/connection.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-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/filecache.cpp \
jni/src/filesys.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/guiVolumeChange.cpp \
jni/src/httpfetch.cpp \
jni/src/hud.cpp \
jni/src/inventory.cpp \
jni/src/inventorymanager.cpp \
jni/src/itemdef.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/mapblock.cpp \
jni/src/mapblock_mesh.cpp \
jni/src/mapgen.cpp \
jni/src/mapgen_indev.cpp \
jni/src/mapgen_math.cpp \
jni/src/mapgen_singlenode.cpp \
jni/src/mapgen_v6.cpp \
jni/src/mapgen_v7.cpp \
jni/src/mapnode.cpp \
jni/src/mapsector.cpp \
jni/src/mesh.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/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/quicktune.cpp \
jni/src/rollback.cpp \
jni/src/rollback_interface.cpp \
jni/src/serialization.cpp \
jni/src/server.cpp \
jni/src/serverlist.cpp \
jni/src/serverobject.cpp \
jni/src/sha1.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/test.cpp \
jni/src/tile.cpp \
jni/src/tool.cpp \
jni/src/treegen.cpp \
jni/src/version.cpp \
jni/src/voxel.cpp \
jni/src/voxelalgorithms.cpp \
jni/src/util/directiontables.cpp \
jni/src/util/numeric.cpp \
jni/src/util/pointedthing.cpp \
jni/src/util/serialize.cpp \
jni/src/util/string.cpp \
jni/src/util/timetaker.cpp \
jni/src/touchscreengui.cpp \
jni/src/database-leveldb.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_base.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_server.cpp \
jni/src/script/cpp_api/s_async.cpp \
jni/src/script/lua_api/l_base.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_mainmenu.cpp \
jni/src/script/lua_api/l_mapgen.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_util.cpp \
jni/src/script/lua_api/l_vmanip.cpp \
jni/src/script/scripting_game.cpp \
jni/src/script/scripting_mainmenu.cpp
#freetype2 support
LOCAL_SRC_FILES += \
jni/src/cguittfont/xCGUITTFont.cpp
# lua
LOCAL_SRC_FILES += \
jni/src/lua/src/lapi.c \
jni/src/lua/src/lauxlib.c \
jni/src/lua/src/lbaselib.c \
jni/src/lua/src/lcode.c \
jni/src/lua/src/ldblib.c \
jni/src/lua/src/ldebug.c \
jni/src/lua/src/ldo.c \
jni/src/lua/src/ldump.c \
jni/src/lua/src/lfunc.c \
jni/src/lua/src/lgc.c \
jni/src/lua/src/linit.c \
jni/src/lua/src/liolib.c \
jni/src/lua/src/llex.c \
jni/src/lua/src/lmathlib.c \
jni/src/lua/src/lmem.c \
jni/src/lua/src/loadlib.c \
jni/src/lua/src/lobject.c \
jni/src/lua/src/lopcodes.c \
jni/src/lua/src/loslib.c \
jni/src/lua/src/lparser.c \
jni/src/lua/src/lstate.c \
jni/src/lua/src/lstring.c \
jni/src/lua/src/lstrlib.c \
jni/src/lua/src/ltable.c \
jni/src/lua/src/ltablib.c \
jni/src/lua/src/ltm.c \
jni/src/lua/src/lundump.c \
jni/src/lua/src/lvm.c \
jni/src/lua/src/lzio.c \
jni/src/lua/src/print.c
# sqlite
LOCAL_SRC_FILES += jni/src/sqlite/sqlite3.c
# jthread
LOCAL_SRC_FILES += \
jni/src/jthread/pthread/jevent.cpp \
jni/src/jthread/pthread/jmutex.cpp \
jni/src/jthread/pthread/jsemaphore.cpp \
jni/src/jthread/pthread/jthread.cpp
# json
LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp
LOCAL_SHARED_LIBRARIES := openal ogg vorbis ssl crypto
LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl LevelDB android_native_app_glue $(PROFILER_LIBS)
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,8 @@
# NDK_TOOLCHAIN_VERSION := clang3.3
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,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 @@
target=android-10

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,22 @@
<?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="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="preparing media ..."
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>

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>

View File

@@ -0,0 +1,288 @@
package org.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 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;
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();
m_AssetCopy = new copyAssetTask();
m_AssetCopy.execute();
}
ProgressBar m_ProgressBar;
TextView m_Filename;
copyAssetTask m_AssetCopy;
private class copyAssetTask extends AsyncTask<String, Integer, String>{
private void copyElement(String name, String path) {
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String full_path;
if (path != "") {
full_path = path + "/" + name;
}
else {
full_path = name;
}
//is a folder read asset list
if (m_foldernames.contains(full_path)) {
m_Foldername = full_path;
publishProgress(0);
File current_folder = new File(baseDir + "/" + full_path);
if (!current_folder.exists()) {
if (!current_folder.mkdirs()) {
Log.w("MinetestAssetCopy","\t failed create folder: " + baseDir + "/" + full_path);
}
else {
Log.w("MinetestAssetCopy","\t created folder: " + baseDir + "/" + full_path);
}
}
try {
String[] current_assets = getAssets().list(full_path);
for(int i=0; i < current_assets.length; i++) {
copyElement(current_assets[i],full_path);
}
} catch (IOException e) {
Log.w("MinetestAssetCopy","\t failed to read contents of folder");
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//is a file just copy
else {
boolean refresh = true;
File testme = new File(baseDir + "/" + full_path);
long asset_filesize = -1;
long stored_filesize = -1;
if (testme.exists()) {
try {
AssetFileDescriptor fd = getAssets().openFd(full_path);
asset_filesize = fd.getLength();
fd.close();
} catch (IOException e) {
refresh = true;
m_asset_size_unknown.add(full_path);
}
stored_filesize = testme.length();
if (asset_filesize == stored_filesize) {
refresh = false;
}
}
if (refresh) {
m_tocopy.add(full_path);
}
}
}
private long getFullSize(String filename) {
long size = 0;
try {
InputStream src = getAssets().open(filename);
byte[] buf = new byte[1024];
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_tocopy = new Vector<String>();
m_asset_size_unknown = new Vector<String>();
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
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.w("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.w("MinetestAssetCopy","Failed to create .nomedia file");
e.printStackTrace();
}
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();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
copyElement("Minetest","");
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.w("MinetestAssetCopy","Copying file: " + filename + " FAILED (not in assets)");
// TODO Auto-generated catch block
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 sue 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.w("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.w("MinetestAssetCopy","Copied file: " + m_tocopy.get(i) + " (" + total_filesize + " bytes)");
}
else if (len < 0) {
Log.w("MinetestAssetCopy","Copying file: " + m_tocopy.get(i) + " failed, size < 0");
}
src.close();
} catch (IOException e) {
Log.w("MinetestAssetCopy","Copying file: " + m_tocopy.get(i) + " failed");
e.printStackTrace();
}
}
return "";
}
protected void onProgressUpdate(Integer... progress) {
if (m_copy_started) {
m_ProgressBar.setProgress(progress[0]);
m_Filename.setText(m_tocopy.get(progress[0]));
}
else {
m_Filename.setText("scanning " + m_Foldername + " ...");
}
}
protected void onPostExecute (String result) {
finish();
}
boolean m_copy_started = false;
String m_Foldername = "media";
Vector<String> m_foldernames;
Vector<String> m_tocopy;
Vector<String> m_asset_size_unknown;
}
}

View File

@@ -0,0 +1,91 @@
package org.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,93 @@
package org.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");
}
private int m_MessagReturnCode;
private String m_MessageReturnValue;
}

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,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,317 @@
--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
table.insert(self.m_processed_list,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
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,444 @@
-- Minetest: builtin/misc_helpers.lua
--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
-- 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
table.insert(t, dump2(k, keyStr, dumped))
end
else
keyStr = basic_dump(k)
end
local vname = string.format("%s[%s]", name, keyStr)
table.insert(t, dump2(v, vname, dumped))
end
return string.format("%s = {}\n%s", name, table.concat(t))
end
--------------------------------------------------------------------------------
-- This dumps values in a one-line format, like serialize().
-- For example, {test = {"Testing..."}} becomes {["test"] = {[1] = "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 dumped argument is internal-only.
function dump(o, dumped)
-- Same as "dumped" in dump2. The difference is that here it can only
-- contain boolean (and nil) values since multiple references aren't
-- handled properly.
dumped = dumped or {}
if type(o) == "table" then
if dumped[o] then
return "<circular reference>"
end
dumped[o] = true
local t = {}
for k, v in pairs(o) do
k = dump(k, dumped)
v = dump(v, dumped)
table.insert(t, string.format("[%s] = %s", k, v))
end
return string.format("{%s}", table.concat(t, ", "))
else
return basic_dump(o)
end
end
--------------------------------------------------------------------------------
function string:split(sep)
local sep, fields = sep or ",", {}
local pattern = string.format("([^%s]+)", sep)
self:gsub(pattern, function(c) fields[#fields+1] = c end)
return fields
end
--------------------------------------------------------------------------------
function file_exists(filename)
local f = io.open(filename, "r")
if f==nil then
return false
else
f:close()
return true
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 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.splittext(text,charlimit)
local retval = {}
local current_idx = 1
local start,stop = string.find(text," ",current_idx)
local nl_start,nl_stop = string.find(text,"\n",current_idx)
local gotnewline = false
if nl_start ~= nil and (start == nil or nl_start < start) then
start = nl_start
stop = nl_stop
gotnewline = true
end
local last_line = ""
while start ~= nil do
if string.len(last_line) + (stop-start) > charlimit then
table.insert(retval,last_line)
last_line = ""
end
if last_line ~= "" then
last_line = last_line .. " "
end
last_line = last_line .. string.sub(text,current_idx,stop -1)
if gotnewline then
table.insert(retval,last_line)
last_line = ""
gotnewline = false
end
current_idx = stop+1
start,stop = string.find(text," ",current_idx)
nl_start,nl_stop = string.find(text,"\n",current_idx)
if nl_start ~= nil and (start == nil or nl_start < start) then
start = nl_start
stop = nl_stop
gotnewline = true
end
end
--add last part of text
if string.len(last_line) + (string.len(text) - current_idx) > charlimit then
table.insert(retval,last_line)
table.insert(retval,string.sub(text,current_idx))
else
last_line = last_line .. " " .. string.sub(text,current_idx)
table.insert(retval,last_line)
end
return retval
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)
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
undef.on_rightclick(pointed_thing.under, unode, placer,
itemstack, pointed_thing)
return
end
local pitch = placer:get_look_pitch()
local fdir = core.dir_to_facedir(placer:get_look_dir())
local wield_name = itemstack:get_name()
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)
local anode = core.get_node_or_nil(above)
if not anode then
return
end
local pos = pointed_thing.above
local node = anode
if undef and undef.buildable_to then
pos = pointed_thing.under
node = unode
iswall = false
end
if core.is_protected(pos, placer:get_player_name()) then
core.record_protection_violation(pos,
placer:get_player_name())
return
end
local ndef = core.registered_nodes[node.name]
if not ndef or not ndef.buildable_to then
return
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
if iswall then
core.set_node(pos, {name = wield_name,
param2 = dirs1[fdir+1]})
elseif isceiling then
if orient_flags.force_facedir then
core.set_node(pos, {name = wield_name,
param2 = 20})
else
core.set_node(pos, {name = wield_name,
param2 = dirs2[fdir+1]})
end
else -- place right side up
if orient_flags.force_facedir then
core.set_node(pos, {name = wield_name,
param2 = 0})
else
core.set_node(pos, {name = wield_name,
param2 = fdir})
end
end
if not infinitestacks then
itemstack:take_item()
return itemstack
end
end
--------------------------------------------------------------------------------
--Wrapper for rotate_and_place() to check for sneak and assume Creative mode
--implies infinite stacks when performing a 6d rotation.
--------------------------------------------------------------------------------
core.rotate_node = function(itemstack, placer, pointed_thing)
core.rotate_and_place(itemstack, placer, pointed_thing,
core.setting_getbool("creative_mode"),
{invert_wall = placer:get_player_control().sneak})
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.pos_to_string(pos)
return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
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
function fgettext(text, ...)
text = core.gettext(text)
local arg = {n=select('#', ...), ...}
if arg.n >= 1 then
-- Insert positional parameters ($1, $2, ...)
result = ''
pos = 1
while pos <= text:len() do
newpos = text:find('[$]', pos)
if newpos == nil then
result = result .. text:sub(pos)
pos = text:len() + 1
else
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 core.formspec_escape(text)
end
end

View File

@@ -0,0 +1,223 @@
-- Minetest: builtin/serialize.lua
-- https://github.com/fab13n/metalua/blob/no-dll/src/lib/serialize.lua
-- Copyright (c) 2006-2997 Fabien Fleutot <metalua@gmail.com>
-- License: MIT
--------------------------------------------------------------------------------
-- 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:
-- * strings, numbers, booleans, nil
-- * tables thereof. Tables can have shared part, but can't be recursive yet.
-- Caveat: metatables and environments aren't saved.
--------------------------------------------------------------------------------
local no_identity = { number=1, boolean=1, string=1, ['nil']=1 }
function core.serialize(x)
local gensym_max = 0 -- index of the gensym() symbol generator
local seen_once = { } -- element->true set of elements seen exactly once in the table
local multiple = { } -- element->varname set of elements seen more than once
local nested = { } -- transient, set of elements currently being traversed
local nest_points = { }
local nest_patches = { }
local function gensym()
gensym_max = gensym_max + 1 ; return gensym_max
end
-----------------------------------------------------------------------------
-- 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 created by mark_nest_point:
-- * nest_points [parent] associates all keys and values in table parent which
-- create a nest_point with boolean `true'
-- * nest_patches contain a list of { parent, key, value } tuples creating
-- a nest point. They're all dumped after all the other table operations
-- have been performed.
--
-- mark_nest_point (p, k, v) fills tables nest_points and nest_patches with
-- informations required to remember that key/value (k,v) create a nest point
-- in table parent. It also marks `parent' as occuring multiple times, since
-- several references to it will be required in order to patch the nest
-- points.
-----------------------------------------------------------------------------
local function mark_nest_point (parent, k, v)
local nk, nv = nested[k], nested[v]
assert (not nk or seen_once[k] or multiple[k])
assert (not nv or seen_once[v] or multiple[v])
local mode = (nk and nv and "kv") or (nk and "k") or ("v")
local parent_np = nest_points [parent]
local pair = { k, v }
if not parent_np then parent_np = { }; nest_points [parent] = parent_np end
parent_np [k], parent_np [v] = nk, nv
table.insert (nest_patches, { parent, k, v })
seen_once [parent], multiple [parent] = nil, true
end
-----------------------------------------------------------------------------
-- First pass, list the tables and functions which appear more than once in x
-----------------------------------------------------------------------------
local function mark_multiple_occurences (x)
if no_identity [type(x)] then return end
if seen_once [x] then seen_once [x], multiple [x] = nil, true
elseif multiple [x] then -- pass
else seen_once [x] = true end
if type (x) == '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 = { } -- multiply occuring values already dumped in localdefs
local localdefs = { } -- already dumped local definitions as source code lines
-- mutually recursive functions:
local dump_val, dump_or_ref_val
--------------------------------------------------------------------
-- if x occurs multiple times, dump the local var rather than the
-- value. If it's the first time it's dumped, also dump the content
-- in localdefs.
--------------------------------------------------------------------
function dump_or_ref_val (x)
if nested[x] then return 'false' end -- placeholder for recursive reference
if not multiple[x] then return dump_val (x) end
local var = dumped [x]
if var then return "_[" .. var .. "]" end -- already referenced
local val = dump_val(x) -- first occurence, create and register reference
var = gensym()
table.insert(localdefs, "_["..var.."]="..val)
dumped [x] = var
return "_[" .. var .. "]"
end
-----------------------------------------------------------------------------
-- Second pass, dump the object; subparts occuring multiple times are dumped
-- in local variables which can be referenced multiple times;
-- care is taken to dump locla vars in asensible order.
-----------------------------------------------------------------------------
function dump_val(x)
local t = type(x)
if x==nil then return 'nil'
elseif t=="number" then return tostring(x)
elseif t=="string" then return string.format("%q", x)
elseif t=="boolean" then return x and "true" or "false"
elseif t=="function" then
return string.format("loadstring(%q)", string.dump(x))
elseif t=="table" then
local acc = { }
local idx_dumped = { }
local np = nest_points [x]
for i, v in ipairs(x) do
if np and np[v] then
table.insert (acc, 'false') -- placeholder
else
table.insert (acc, dump_or_ref_val(v))
end
idx_dumped[i] = true
end
for k, v in pairs(x) do
if np and (np[k] or np[v]) then
--check_multiple(k); check_multiple(v) -- force dumps in localdefs
elseif not idx_dumped[k] then
table.insert (acc, "[" .. dump_or_ref_val(k) .. "] = " .. dump_or_ref_val(v))
end
end
return "{ "..table.concat(acc,", ").." }"
else
error ("Can't serialize data of type "..t)
end
end
local function dump_nest_patches()
for _, entry in ipairs(nest_patches) do
local p, k, v = unpack (entry)
assert (multiple[p])
local set = dump_or_ref_val (p) .. "[" .. dump_or_ref_val (k) .. "] = " ..
dump_or_ref_val (v) .. " -- rec "
table.insert (localdefs, set)
end
end
mark_multiple_occurences (x)
local toplevel = dump_or_ref_val (x)
dump_nest_patches()
if next (localdefs) then
return "local _={ }\n" ..
table.concat (localdefs, "\n") ..
"\nreturn " .. toplevel
else
return "return " .. toplevel
end
end
-- Deserialization.
-- http://stackoverflow.com/questions/5958818/loading-serialized-data-into-a-table
--
local env = {
loadstring = loadstring,
}
local function noop() end
local safe_env = {
loadstring = noop,
}
local function stringtotable(sdata, safe)
if sdata:byte(1) == 27 then return nil, "binary bytecode prohibited" end
local f, message = assert(loadstring(sdata))
if not f then return nil, message end
if safe then
setfenv(f, safe_env)
else
setfenv(f, env)
end
return f()
end
function core.deserialize(sdata, safe)
local table = {}
local okay, results = pcall(stringtotable, sdata, safe)
if okay then
return results
end
core.log('error', 'core.deserialize(): '.. results)
return nil
end
-- Run some unit tests
local function unit_test()
function unitTest(name, success)
if not success then
error(name .. ': failed')
end
end
unittest_input = {cat={sound="nyan", speed=400}, dog={sound="woof"}}
unittest_output = core.deserialize(core.serialize(unittest_input))
unitTest("test 1a", unittest_input.cat.sound == unittest_output.cat.sound)
unitTest("test 1b", unittest_input.cat.speed == unittest_output.cat.speed)
unitTest("test 1c", unittest_input.dog.sound == unittest_output.dog.sound)
unittest_input = {escapechars="\n\r\t\v\\\"\'", noneuropean="θשׁ٩∂"}
unittest_output = core.deserialize(core.serialize(unittest_input))
unitTest("test 3a", unittest_input.escapechars == unittest_output.escapechars)
unitTest("test 3b", unittest_input.noneuropean == unittest_output.noneuropean)
end
unit_test() -- Run it
unit_test = nil -- Hide it

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

@@ -0,0 +1,146 @@
vector = {}
local function assert_vector(v)
assert(type(v) == "table" and v.x and v.y and v.z, "Invalid vector")
end
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)
assert_vector(a)
assert_vector(b)
return a.x == b.x and
a.y == b.y and
a.z == b.z
end
function vector.length(v)
assert_vector(v)
return math.hypot(v.x, math.hypot(v.y, v.z))
end
function vector.normalize(v)
assert_vector(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.round(v)
assert_vector(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.distance(a, b)
assert_vector(a)
assert_vector(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)
assert_vector(pos1)
assert_vector(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)
assert_vector(a)
if type(b) == "table" then
assert_vector(b)
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)
assert_vector(a)
if type(b) == "table" then
assert_vector(b)
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)
assert_vector(a)
if type(b) == "table" then
assert_vector(b)
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)
assert_vector(a)
if type(b) == "table" then
assert_vector(b)
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

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

@@ -0,0 +1,209 @@
--Minetest
--Copyright (C) 2014 sapier
--
--self 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.
--
--self 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 self 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]",
btn_pos.x, btn_pos.y, self.btn_size, self.btn_size,
self.buttons[i].image, btn_name, self.buttons[i].caption,
borders)
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)
if caption == nil then caption = "" end
if image == nil then image = "" end
table.insert(self.buttons,{ name=name, caption=caption, image=image})
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
--
--self 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.
--
--self 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 self 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
--
--self 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.
--
--self 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 self 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 = {},
}
table.insert(self.tablist,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.setting_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

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

@@ -0,0 +1,171 @@
--Minetest
--Copyright (C) 2014 sapier
--
--self 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.
--
--self 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 self 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
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function ui.update()
local formspec = ""
-- handle errors
if gamedata ~= nil and gamedata.errormessage ~= nil then
formspec = "size[12,3.2]" ..
"textarea[1,1;10,2;;ERROR: " ..
core.formspec_escape(gamedata.errormessage) ..
";]"..
"button[4.5,2.5;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
print("WARNING: ui manager detected more then one active ui element, self most likely isn't intended")
end
if (active_toplevel_ui_elements == 0) then
print("WARNING: not a single 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)
if fields["btn_error_confirm"] then
gamedata.errormessage = nil
update_menu()
return
end
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_error_confirm"] then
gamedata.errormessage = nil
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

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

@@ -0,0 +1,188 @@
-- Minetest: builtin/auth.lua
--
-- Authentication handler
--
function core.string_to_privs(str, delim)
assert(type(str) == "string")
delim = delim or ','
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 ','
list = {}
for priv, bool in pairs(privs) do
if bool then
table.insert(list, 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 name, password, privilegestring = string.match(line, "([^:]*):([^:]*):([^:]*)")
if not name or not password or not privilegestring then
error("Invalid line in auth.txt: "..dump(line))
end
local privileges = core.string_to_privs(privilegestring)
newtable[name] = {password=password, privileges=privileges}
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")
end
local file, errmsg = io.open(core.auth_file_path, 'w+b')
if not file then
error(core.auth_file_path.." could not be opened for writing: "..errmsg)
end
for name, stuff in pairs(core.auth_table) do
local privstring = core.privs_to_string(stuff.privileges)
file:write(name..":"..stuff.password..":"..privstring..'\n')
end
io.close(file)
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.setting_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,
}
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.setting_get("default_privs")),
}
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.setting_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,
}
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()
end
function core.get_auth_handler()
if core.registered_auth_handler then
return core.registered_auth_handler
end
return core.builtin_auth_handler
end
function core.set_player_password(name, password)
if core.get_auth_handler().set_password then
core.get_auth_handler().set_password(name, password)
end
end
function core.set_player_privs(name, privs)
if core.get_auth_handler().set_privileges then
core.get_auth_handler().set_privileges(name, privs)
end
end
function core.auth_reload()
if core.get_auth_handler().reload then
return core.get_auth_handler().reload()
end
return false
end

View File

@@ -0,0 +1,710 @@
-- Minetest: builtin/chatcommands.lua
--
-- Chat command handler
--
core.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 {}
core.chatcommands[cmd] = def
end
core.register_on_chat_message(function(name, message)
local cmd, param = string.match(message, "^/([^ ]+) *(.*)")
if not param then
param = ""
end
local cmd_def = core.chatcommands[cmd]
if not cmd_def then
return false
end
local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs)
if has_privs then
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)
--
-- Chat commands
--
core.register_chatcommand("me", {
params = "<action>",
description = "chat action (eg. /me orders a pizza)",
privs = {shout=true},
func = function(name, param)
core.chat_send_all("* " .. name .. " " .. param)
end,
})
core.register_chatcommand("help", {
privs = {},
params = "[all/privs/<cmd>]",
description = "Get help for commands or list privileges",
func = function(name, param)
local function format_help_line(cmd, def)
local msg = "/"..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 msg = ""
local cmds = {}
for cmd, def in pairs(core.chatcommands) do
if core.check_player_privs(name, def.privs) then
table.insert(cmds, cmd)
end
end
table.sort(cmds)
return true, "Available commands: " .. table.concat(cmds, " ") .. "\n"
.. "Use '/help <cmd>' to get more information,"
.. " or '/help all' to list everything."
elseif param == "all" then
local cmds = {}
for cmd, def in pairs(core.chatcommands) do
if core.check_player_privs(name, def.privs) then
table.insert(cmds, format_help_line(cmd, def))
end
end
table.sort(cmds)
return true, "Available commands:\n"..table.concat(cmds, "\n")
elseif param == "privs" then
local privs = {}
for priv, def in pairs(core.registered_privileges) do
table.insert(privs, priv .. ": " .. def.description)
end
table.sort(privs)
return true, "Available privileges:\n"..table.concat(privs, "\n")
else
local cmd = param
local def = core.chatcommands[cmd]
if not def then
return false, "Command not available: "..cmd
else
return true, format_help_line(cmd, def)
end
end
end,
})
core.register_chatcommand("privs", {
params = "<name>",
description = "print out privileges of player",
func = function(name, param)
param = (param ~= "" and param or name)
return true, "Privileges of " .. param .. ": "
.. core.privs_to_string(
core.get_player_privs(param), ' ')
end,
})
core.register_chatcommand("grant", {
params = "<name> <privilege>|all",
description = "Give privilege to player",
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 grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then
return false, "Invalid parameters (see /help grant)"
elseif not core.auth_table[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 = ""
for priv, _ in pairs(grantprivs) do
if priv ~= "interact" and priv ~= "shout" and
not core.check_player_privs(name, {privs=true}) 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", name..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname)
if grantname ~= name then
core.chat_send_player(grantname, name
.. " 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("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.auth_table[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)
for priv, _ in pairs(revoke_privs) do
if priv ~= "interact" and priv ~= "shout" and priv ~= "interact_extra" 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 given 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 actstr = "?"
if not raw_password then
core.set_player_password(toname, "")
actstr = "cleared"
else
core.set_player_password(toname,
core.get_password_hash(toname,
raw_password))
actstr = "set"
end
if toname ~= name then
core.chat_send_player(toname, "Your password was "
.. actstr .. " by " .. name)
end
return true, "Password of player \"" .. toname .. "\" " .. actstr
end,
})
core.register_chatcommand("clearpassword", {
params = "<name>",
description = "set empty password",
privs = {password=true},
func = function(name, param)
toname = param
if toname == "" then
return false, "Name field required"
end
core.set_player_password(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("teleport", {
params = "<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>",
description = "teleport to given 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)
teleportee = core.get_player_by_name(name)
if teleportee and p.x and p.y and p.z then
teleportee:setpos(p)
return true, "Teleporting to "..core.pos_to_string(p)
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 core.check_player_privs(name, {bring=true}) then
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
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.setting_set(setname, setvalue)
return true, setname .. " = " .. setvalue
end
local setname, setvalue = string.match(param, "([^ ]+) (.+)")
if setname and setvalue then
if not core.setting_get(setname) then
return false, "Failed. Use '/set -n <name> <value>' to create a new setting."
end
core.setting_set(setname, setvalue)
return true, setname .. " = " .. setvalue
end
local setname = string.match(param, "([^ ]+)")
if setname then
local setvalue = core.setting_get(setname)
if not setvalue then
setvalue = "<not set>"
end
return true, setname .. " = " .. setvalue
end
return false, "Invalid parameters (see /help set)."
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)
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>",
description = "Spawn entity at your position",
privs = {give=true, interact=true},
func = function(name, param)
local entityname = string.match(param, "(.+)$")
if not entityname then
return false, "EntityName required"
end
core.log("action", ("/spawnentity invoked, entityname=%q")
:format(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
local p = player:getpos()
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:get_player_name()
if 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 has last touched a node or near it,"
.. " max. <seconds> ago (default range=0,"
.. " seconds=86400=24h, limit=5)",
privs = {rollback=true},
func = function(name, param)
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)
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)
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...24000>",
description = "set time of day",
privs = {settime=true},
func = function(name, param)
if param == "" then
return false, "Missing time."
end
local newtime = tonumber(param)
if newtime == nil then
return false, "Invalid time."
end
core.set_timeofday((newtime % 24000) / 24000)
core.log("action", name .. " sets time " .. newtime)
return true, "Time of day changed."
end,
})
core.register_chatcommand("shutdown", {
description = "shutdown server",
privs = {server=true},
func = function(name, param)
core.log("action", name .. " shuts down server")
core.request_shutdown()
core.chat_send_all("*** Server shutting down (operator request).")
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
core.log("action", name .. " kicked " .. tokick)
return true, "Kicked " .. tokick
end,
})
core.register_chatcommand("clearobjects", {
description = "clear all objects in world",
privs = {server=true},
func = function(name, param)
core.log("action", name .. " clears all objects.")
core.chat_send_all("Clearing all objects. This may take long."
.. " You may experience a timeout. (by "
.. name .. ")")
core.clear_objects()
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,
})

View File

@@ -0,0 +1,53 @@
-- Minetest: builtin/deprecated.lua
--
-- Default material types
--
function digprop_err()
core.log("info", debug.traceback())
core.log("info", "WARNING: 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
core.node_metadata_inventory_move_allow_all = function()
core.log("info", "WARNING: core.node_metadata_inventory_move_allow_all is obsolete and does nothing.")
end
core.add_to_creative_inventory = function(itemstring)
core.log('info', "WARNING: 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("info", "WARNING: 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

View File

@@ -0,0 +1,19 @@
-- Minetest: builtin/detached_inventory.lua
core.detached_inventories = {}
function core.create_detached_inventory(name, callbacks)
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
core.detached_inventories[name] = stuff
return core.create_detached_inventory_raw(name)
end

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

@@ -0,0 +1,214 @@
-- Minetest: builtin/item.lua
--
-- Falling stuff
--
core.register_entity(":__builtin:falling_node", {
initial_properties = {
physical = true,
collide_with_objects = false,
collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
visual = "wielditem",
textures = {},
visual_size = {x=0.667, y=0.667},
},
node = {},
set_node = function(self, node)
self.node = node
local stack = ItemStack(node.name)
local itemtable = stack:to_table()
local itemname = nil
if itemtable then
itemname = stack:to_table().name
end
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
prop = {
is_visible = true,
textures = {node.name},
}
self.object:set_properties(prop)
end,
get_staticdata = function(self)
return self.node.name
end,
on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal=1})
--self.object:setacceleration({x=0, y=-10, z=0})
self:set_node({name=staticdata})
end,
on_step = function(self, dtime)
-- Set gravity
self.object:setacceleration({x=0, y=-10, z=0})
-- Turn to actual sand when collides to ground or just move
local pos = self.object:getpos()
local bcp = {x=pos.x, y=pos.y-0.7, z=pos.z} -- Position of bottom center point
local bcn = core.get_node(bcp)
local bcd = core.registered_nodes[bcn.name]
-- Note: walkable is in the node definition, not in item groups
if 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 addlevel == nil 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)
-- remove node and replace it with it's drops
local drops = core.get_node_drops(n2.name, "")
core.remove_node(np)
local _, dropped_item
for _, dropped_item in ipairs(drops) do
core.add_item(np, dropped_item)
end
-- Run script hook
local _, callback
for _, callback in ipairs(core.registered_on_dignodes) do
callback(np, n2, nil)
end
-- Create node and remove entity
core.add_node(np, self.node)
self.object:remove()
nodeupdate(np)
else
-- Do nothing
end
end
})
function spawn_falling_node(p, node)
obj = core.add_entity(p, "__builtin:falling_node")
obj:get_luaentity():set_node(node)
end
function drop_attached_node(p)
local nn = core.get_node(p).name
core.remove_node(p)
for _,item in ipairs(core.get_node_drops(nn, "")) 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 check_attached_node(p, n)
local def = core.registered_nodes[n.name]
local d = {x=0, y=0, z=0}
if def.paramtype2 == "wallmounted" then
if n.param2 == 0 then
d.y = 1
elseif n.param2 == 1 then
d.y = -1
elseif n.param2 == 2 then
d.x = 1
elseif n.param2 == 3 then
d.x = -1
elseif n.param2 == 4 then
d.z = 1
elseif n.param2 == 5 then
d.z = -1
end
else
d.y = -1
end
local p2 = {x=p.x+d.x, y=p.y+d.y, z=p.z+d.z}
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 nodeupdate_single(p, delay)
n = core.get_node(p)
if core.get_item_group(n.name, "falling_node") ~= 0 then
p_bottom = {x=p.x, y=p.y-1, z=p.z}
n_bottom = core.get_node(p_bottom)
-- Note: walkable is in the node definition, not in item groups
if core.registered_nodes[n_bottom.name] and
(core.get_item_group(n.name, "float") == 0 or
core.registered_nodes[n_bottom.name].liquidtype == "none") and
(n.name ~= n_bottom.name or (core.registered_nodes[n_bottom.name].leveled and
core.get_node_level(p_bottom) < core.get_node_max_level(p_bottom))) and
(not core.registered_nodes[n_bottom.name].walkable or
core.registered_nodes[n_bottom.name].buildable_to) then
if delay then
core.after(0.1, nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
else
n.level = core.env:get_node_level(p)
core.remove_node(p)
spawn_falling_node(p, n)
nodeupdate(p)
end
end
end
if core.get_item_group(n.name, "attached_node") ~= 0 then
if not check_attached_node(p, n) then
drop_attached_node(p)
nodeupdate(p)
end
end
end
function nodeupdate(p, delay)
-- Round p to prevent falling entities to get stuck
p.x = math.floor(p.x+0.5)
p.y = math.floor(p.y+0.5)
p.z = math.floor(p.z+0.5)
for x = -1,1 do
for y = -1,1 do
for z = -1,1 do
nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
end
end
end
end
--
-- Global callbacks
--
function on_placenode(p, node)
nodeupdate(p)
end
core.register_on_placenode(on_placenode)
function on_dignode(p, node)
nodeupdate(p)
end
core.register_on_dignode(on_dignode)

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

@@ -0,0 +1,29 @@
-- 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,
}
function core.has_feature(arg)
if type(arg) == "table" then
missing_features = {}
result = true
for ft, _ 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,79 @@
-- 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 total_forceloaded = 0
local BLOCKSIZE = 16
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
function core.forceload_block(pos)
local blockpos = get_blockpos(pos)
local hash = core.hash_node_position(blockpos)
if blocks_forceloaded[hash] ~= nil then
blocks_forceloaded[hash] = blocks_forceloaded[hash] + 1
return true
else
if total_forceloaded >= (tonumber(core.setting_get("max_forceloaded_blocks")) or 16) then
return false
end
total_forceloaded = total_forceloaded+1
blocks_forceloaded[hash] = 1
forceload_block(blockpos)
return true
end
end
function core.forceload_free_block(pos)
local blockpos = get_blockpos(pos)
local hash = core.hash_node_position(blockpos)
if blocks_forceloaded[hash] == nil then return end
if blocks_forceloaded[hash] > 1 then
blocks_forceloaded[hash] = blocks_forceloaded[hash] - 1
else
total_forceloaded = total_forceloaded-1
blocks_forceloaded[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)
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)

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

@@ -0,0 +1,23 @@
local scriptpath = minetest.get_builtin_path()..DIR_DELIM
local commonpath = scriptpath.."common"..DIR_DELIM
local gamepath = scriptpath.."game"..DIR_DELIM
dofile(commonpath.."vector.lua")
dofile(gamepath.."item.lua")
dofile(gamepath.."register.lua")
dofile(gamepath.."item_entity.lua")
dofile(gamepath.."deprecated.lua")
dofile(gamepath.."misc.lua")
dofile(gamepath.."privileges.lua")
dofile(gamepath.."auth.lua")
dofile(gamepath.."chatcommands.lua")
dofile(gamepath.."static_spawn.lua")
dofile(gamepath.."detached_inventory.lua")
dofile(gamepath.."falling.lua")
dofile(gamepath.."features.lua")
dofile(gamepath.."voxelarea.lua")
dofile(gamepath.."forceloading.lua")
dofile(gamepath.."statbars.lua")

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

@@ -0,0 +1,600 @@
-- Minetest: builtin/item.lua
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
else
-- The position where a node would be dug
return pointed_thing.under
end
elseif pointed_thing.type == "object" then
obj = pointed_thing.ref
if obj ~= nil then
return obj:getpos()
else
return nil
end
else
return nil
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
function core.facedir_to_dir(facedir)
--a table of possible dirs
return ({{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}})
--indexed into by a table of correlating facedirs
[({[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})
--indexed into by the facedir in question
[facedir]]
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
function core.get_node_drops(nodename, toolname)
local drop = ItemStack({name=nodename}):get_definition().drop
if drop == nil then
-- default drop
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
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
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
function core.item_place_node(itemstack, placer, pointed_thing, param2)
local item = itemstack:peek_item()
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)
if not oldnode_under or not oldnode_above then
core.log("info", placer:get_player_name() .. " tried to place"
.. " node in unloaded position " .. core.pos_to_string(above))
return itemstack, false
end
local olddef_under = ItemStack({name=oldnode_under.name}):get_definition()
olddef_under = olddef_under or core.nodedef_default
local olddef_above = ItemStack({name=oldnode_above.name}):get_definition()
olddef_above = olddef_above or core.nodedef_default
if not olddef_above.buildable_to and not olddef_under.buildable_to then
core.log("info", placer:get_player_name() .. " 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
core.log("info", "node under is buildable to")
place_to = {x = under.x, y = under.y, z = under.z}
end
if core.is_protected(place_to, placer:get_player_name()) then
core.log("action", placer:get_player_name()
.. " tried to place " .. def.name
.. " at protected position "
.. core.pos_to_string(place_to))
core.record_protection_violation(place_to, placer:get_player_name())
return itemstack
end
core.log("action", placer:get_player_name() .. " 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}
-- Calculate direction for wall mounted stuff like torches and signs
if def.paramtype2 == 'wallmounted' 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' and not param2 then
local placer_pos = 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)
core.log("action", "facedir: " .. newnode.param2)
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 check_attached_node(place_to, newnode) then
core.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 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
local _, callback
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_drop(itemstack, dropper, pos)
if dropper.is_player then
local v = dropper:get_look_dir()
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
local cs = itemstack:get_count()
if dropper:get_player_control().sneak then
cs = 1
end
local item = itemstack:take_item(cs)
local obj = core.add_item(p, item)
if obj then
v.x = v.x*2
v.y = v.y*2 + 2
v.z = v.z*2
obj:setvelocity(v)
end
else
core.add_item(pos, itemstack)
end
return itemstack
end
function core.item_eat(hp_change, replace_with_item)
return function(itemstack, user, pointed_thing) -- closure
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)
itemstack:add_item(replace_with_item) -- note: replace_with_item is optional
end
return itemstack
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
if digger:get_inventory() then
local _, dropped_item
for _, dropped_item in ipairs(drops) do
local left = digger:get_inventory():add_item("main", 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
end
function core.node_dig(pos, node, digger)
local def = ItemStack({name=node.name}):get_definition()
if not def.diggable or (def.can_dig and not def.can_dig(pos,digger)) then
core.log("info", digger:get_player_name() .. " tried to dig "
.. node.name .. " which is not diggable "
.. core.pos_to_string(pos))
return
end
if core.is_protected(pos, digger:get_player_name()) then
core.log("action", digger:get_player_name()
.. " tried to dig " .. node.name
.. " at protected position "
.. core.pos_to_string(pos))
core.record_protection_violation(pos, digger:get_player_name())
return
end
core.log('action', digger:get_player_name() .. " digs "
.. node.name .. " at " .. core.pos_to_string(pos))
local wielded = digger:get_wielded_item()
local drops = core.get_node_drops(node.name, wielded:get_name())
local wdef = wielded:get_definition()
local tp = wielded:get_tool_capabilities()
local dp = core.get_dig_params(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.setting_getbool("creative_mode") then
wielded:add_wear(dp.wear)
end
end
digger:set_wielded_item(wielded)
-- Handle drops
core.handle_node_drops(pos, drops, digger)
local oldmetadata = nil
if 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.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
-- 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,
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_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_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_drop = nil,
on_use = nil,
}

View File

@@ -0,0 +1,189 @@
-- 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")
obj:get_luaentity():set_item(stack:to_string())
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.setting_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.24, -0.24, -0.24, 0.24, 0.24, 0.24},
visual = "wielditem",
visual_size = {x = 0.3, y = 0.3},
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.15 + 0.15 * (count / max_count)
local c = 0.8 * s
local itemtable = stack:to_table()
local itemname = nil
if itemtable then
itemname = stack:to_table().name
end
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
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.2,
}
self.object:set_properties(prop)
end,
get_staticdata = function(self)
return core.serialize({
itemstring = self.itemstring,
always_collect = self.always_collect,
age = self.age
})
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
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,
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.3
local nn = core.get_node(p).name
-- If node is not registered or node is walkably solid and resting on nodebox
local v = self.object:getvelocity()
if not core.registered_nodes[nn] or core.registered_nodes[nn].walkable and v.y == 0 then
if self.physical_state then
local own_stack = ItemStack(self.object:get_luaentity().itemstring)
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
local stack = ItemStack(obj.itemstring)
if own_stack:get_name() == stack:get_name() 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
count = count - max_count
else
self.itemstring = ''
end
local pos=object:getpos()
pos.y = pos.y + (count - stack:get_count()) / max_count * 0.15
object:moveto(pos, false)
local s, c
local max_count = stack:get_stack_max()
local name = stack:get_name()
if not overflow then
obj.itemstring = name.." "..count
s = 0.15 + 0.15 * (count / max_count)
c = 0.8 * s
object:set_properties({
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c}
})
self.object:remove()
return
else
s = 0.3
c = 0.24
object:set_properties({
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c}
})
obj.itemstring = name.." "..max_count
s = 0.15 + 0.15 * (count / max_count)
c = 0.8 * s
self.object:set_properties({
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c}
})
self.itemstring = name.." "..count
end
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)
if self.itemstring ~= '' then
local left = hitter:get_inventory():add_item("main", self.itemstring)
if not left:is_empty() then
self.itemstring = left:to_string()
return
end
end
self.itemstring = ''
self.object:remove()
end,
})

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

@@ -0,0 +1,134 @@
-- Minetest: builtin/misc.lua
--
-- Misc. API functions
--
core.timers_to_add = {}
core.timers = {}
core.register_globalstep(function(dtime)
for _, timer in ipairs(core.timers_to_add) do
table.insert(core.timers, timer)
end
core.timers_to_add = {}
for index, timer in ipairs(core.timers) do
timer.time = timer.time - dtime
if timer.time <= 0 then
timer.func(unpack(timer.args or {}))
table.remove(core.timers,index)
end
end
end)
function core.after(time, func, ...)
assert(tonumber(time) and type(func) == "function",
"Invalid core.after invocation")
table.insert(core.timers_to_add, {time=time, func=func, args={...}})
end
function core.check_player_privs(name, privs)
local player_privs = core.get_player_privs(name)
local missing_privileges = {}
for priv, val in pairs(privs) do
if val then
if not player_privs[priv] then
table.insert(missing_privileges, 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)
player_list[player:get_player_name()] = player
end)
core.register_on_leaveplayer(function(player)
player_list[player:get_player_name()] = nil
end)
function core.get_connected_players()
local temp_table = {}
for index, value in pairs(player_list) do
if value:is_player_connected() then
table.insert(temp_table, value)
end
end
return temp_table
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.string_to_pos(value)
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.setting_get_pos(name)
local value = core.setting_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

View File

@@ -0,0 +1,53 @@
-- 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("teleport", "Can use /teleport command")
core.register_privilege("bring", "Can teleport other players")
core.register_privilege("settime", "Can use /time")
core.register_privilege("privs", "Can modify privileges")
core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
core.register_privilege("server", "Can do server maintenance stuff")
core.register_privilege("shout", "Can speak in chat")
core.register_privilege("ban", "Can ban and unban players")
core.register_privilege("kick", "Can kick players")
core.register_privilege("give", "Can use /give and /giveme")
core.register_privilege("password", "Can use /setpassword and /clearpassword")
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", "Can use the rollback functionality")

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

@@ -0,0 +1,411 @@
-- 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 register_alias_raw = core.register_alias_raw
core.register_alias_raw = nil
--
-- Item / entity / ABM registration functions
--
core.registered_abms = {}
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
-- Escape the modname prefix enforcement mechanism
return name:sub(2)
else
-- Modname prefix enforcement
local expected_prefix = core.get_current_modname() .. ":"
if name:sub(1, #expected_prefix) ~= expected_prefix then
error("Name " .. name .. " does not follow naming conventions: " ..
"\"modname:\" or \":\" prefix required")
end
local subname = name:sub(#expected_prefix+1)
if subname:find("[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]") 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
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
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
-- 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
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
-- 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
register_item_raw(itemdef)
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
local register_biome_raw = core.register_biome
core.registered_biomes = {}
function core.register_biome(biome)
core.registered_biomes[biome.name] = biome
register_biome_raw(biome)
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_drop = core.item_drop,
groups = {not_in_creative_inventory=1},
diggable = true,
})
core.register_node(":air", {
description = "Air (you hacker you!)",
inventory_image = "unknown_node.png",
wield_image = "unknown_node.png",
drawtype = "airlike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
air_equivalent = true,
drop = "",
groups = {not_in_creative_inventory=1},
})
core.register_node(":ignore", {
description = "Ignore (you hacker you!)",
inventory_image = "unknown_node.png",
wield_image = "unknown_node.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
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 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) table.insert(t, func) end
return t, registerfunc
end
local function make_registration_reverse()
local t = {}
local registerfunc = function(func) table.insert(t, 1, func) end
return t, registerfunc
end
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_mapgen_inits, core.register_on_mapgen_init = 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()

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

@@ -0,0 +1,165 @@
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+10)},
}
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+10)},
}
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
core.is_yes(core.setting_get("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
core.is_yes(core.setting_get("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,33 @@
-- Minetest: builtin/static_spawn.lua
local function warn_invalid_static_spawnpoint()
if core.setting_get("static_spawnpoint") and
not core.setting_get_pos("static_spawnpoint") then
core.log('error', "The static_spawnpoint setting is invalid: \""..
core.setting_get("static_spawnpoint").."\"")
end
end
warn_invalid_static_spawnpoint()
local function put_player_in_spawn(obj)
warn_invalid_static_spawnpoint()
local static_spawnpoint = core.setting_get_pos("static_spawnpoint")
if not static_spawnpoint then
return false
end
core.log('action', "Moving "..obj:get_player_name()..
" to static spawnpoint at "..
core.pos_to_string(static_spawnpoint))
obj:setpos(static_spawnpoint)
return true
end
core.register_on_newplayer(function(obj)
put_player_in_spawn(obj)
end)
core.register_on_respawnplayer(function(obj)
return put_player_in_spawn(obj)
end)

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

@@ -0,0 +1,103 @@
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()
return {
x = self.MaxEdge.x - self.MinEdge.x + 1,
y = self.MaxEdge.y - self.MinEdge.y + 1,
z = self.MaxEdge.z - self.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 i = (z - self.MinEdge.z) * self.zstride +
(y - self.MinEdge.y) * self.ystride +
(x - self.MinEdge.x) + 1
return math.floor(i)
end
function VoxelArea:indexp(p)
local i = (p.z - self.MinEdge.z) * self.zstride +
(p.y - self.MinEdge.y) * self.ystride +
(p.x - self.MinEdge.x) + 1
return math.floor(i)
end
function VoxelArea:position(i)
local p = {}
i = i - 1
p.z = math.floor(i / self.zstride) + self.MinEdge.z
i = i % self.zstride
p.y = math.floor(i / self.ystride) + self.MinEdge.y
i = i % self.ystride
p.x = math.floor(i) + self.MinEdge.x
return p
end
function VoxelArea:contains(x, y, z)
return (x >= self.MinEdge.x) and (x <= self.MaxEdge.x) and
(y >= self.MinEdge.y) and (y <= self.MaxEdge.y) and
(z >= self.MinEdge.z) and (z <= self.MaxEdge.z)
end
function VoxelArea:containsp(p)
return (p.x >= self.MinEdge.x) and (p.x <= self.MaxEdge.x) and
(p.y >= self.MinEdge.y) and (p.y <= self.MaxEdge.y) and
(p.z >= self.MinEdge.z) and (p.z <= self.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 last = self:index(maxx, maxy, maxz)
local ystride = self.ystride
local zstride = self.zstride
local yoff = (last+1) % ystride
local zoff = (last+1) % zstride
local ystridediff = (i - last) % ystride
local zstridediff = (i - last) % zstride
return function()
i = i + 1
if i % zstride == zoff then
i = i + zstridediff
elseif i % ystride == yoff then
i = i + ystridediff
end
if i <= last then
return i
end
end
end
function VoxelArea:iterp(minp, maxp)
return self:iter(minp.x, minp.y, minp.z, maxp.x, maxp.y, maxp.z)
end

37
builtin/init.lua Normal file
View File

@@ -0,0 +1,37 @@
--
-- 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
print = core.debug
math.randomseed(os.time())
os.setlocale("C", "numeric")
minetest = core
-- Load other files
local scriptdir = core.get_builtin_path()..DIR_DELIM
local gamepath = scriptdir.."game"..DIR_DELIM
local commonpath = scriptdir.."common"..DIR_DELIM
local asyncpath = scriptdir.."async"..DIR_DELIM
dofile(commonpath.."serialize.lua")
dofile(commonpath.."misc_helpers.lua")
if INIT == "game" then
dofile(gamepath.."init.lua")
elseif INIT == "mainmenu" then
local mainmenuscript = core.setting_get("main_menu_script")
if mainmenuscript ~= nil and mainmenuscript ~= "" then
dofile(mainmenuscript)
else
dofile(core.get_mainmenu_path()..DIR_DELIM.."init.lua")
end
elseif INIT == "async" then
dofile(asyncpath.."init.lua")
else
error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT)))
end

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

@@ -0,0 +1,193 @@
--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 = {}
--------------------------------------------------------------------------------
-- Menu helper functions
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function render_favorite(spec,render_details)
local text = ""
if spec.name ~= nil then
text = text .. core.formspec_escape(spec.name:trim())
-- if spec.description ~= nil and
-- core.formspec_escape(spec.description):trim() ~= "" then
-- text = text .. " (" .. core.formspec_escape(spec.description) .. ")"
-- end
else
if spec.address ~= nil then
text = text .. spec.address:trim()
if spec.port ~= nil then
text = text .. ":" .. spec.port
end
end
end
if not render_details then
return text
end
local details = ""
if spec.password == true then
details = details .. "*"
else
details = details .. "_"
end
if spec.creative then
details = details .. "C"
else
details = details .. "_"
end
if spec.damage then
details = details .. "D"
else
details = details .. "_"
end
if spec.pvp then
details = details .. "P"
else
details = details .. "_"
end
details = details .. " "
local playercount = ""
if spec.clients ~= nil and
spec.clients_max ~= nil then
playercount = string.format("%03d",spec.clients) .. "/" ..
string.format("%03d",spec.clients_max) .. " "
end
return playercount .. core.formspec_escape(details) .. text
end
--------------------------------------------------------------------------------
os.tempfolder = function()
if core.setting_get("TMPFolder") then
return core.setting_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)
if fields["key_up"] then
local oldidx = core.get_textlist_index(textlist)
if oldidx ~= nil and oldidx > 1 then
local newidx = oldidx -1
core.setting_set(settingname,
menudata.worldlist:get_raw_index(newidx))
end
return true
end
if fields["key_down"] then
local oldidx = core.get_textlist_index(textlist)
if oldidx ~= nil and oldidx < menudata.worldlist:size() then
local newidx = oldidx + 1
core.setting_set(settingname,
menudata.worldlist:get_raw_index(newidx))
end
return true
end
return false
end
--------------------------------------------------------------------------------
function asyncOnlineFavourites()
menudata.favorites = {}
core.handle_async(
function(param)
return core.get_favorites("online")
end,
nil,
function(result)
menudata.favorites = result
core.event_handler("Refresh")
end
)
end
--------------------------------------------------------------------------------
function text2textlist(xpos,ypos,width,height,tl_name,textlen,text,transparency)
local textlines = core.splittext(text,textlen)
local retval = "textlist[" .. xpos .. "," .. ypos .. ";"
.. width .. "," .. height .. ";"
.. tl_name .. ";"
for i=1, #textlines, 1 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

View File

@@ -0,0 +1,290 @@
--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(data)
local mod = data.list:get_list()[data.selected_mod]
local retval =
"size[11,6.5,true]" ..
"label[0.5,-0.25;" .. fgettext("World:") .. "]" ..
"label[1.75,-0.25;" .. data.worldspec.name .. "]"
if data.hide_gamemods then
retval = retval .. "checkbox[0,5.75;cb_hide_gamemods;" .. fgettext("Hide Game") .. ";true]"
else
retval = retval .. "checkbox[0,5.75;cb_hide_gamemods;" .. fgettext("Hide Game") .. ";false]"
end
if data.hide_modpackcontents then
retval = retval .. "checkbox[2,5.75;cb_hide_mpcontent;" .. fgettext("Hide mp content") .. ";true]"
else
retval = retval .. "checkbox[2,5.75;cb_hide_mpcontent;" .. fgettext("Hide mp content") .. ";false]"
end
if mod == nil then
mod = {name=""}
end
retval = retval ..
"label[0,0.45;" .. fgettext("Mod:") .. "]" ..
"label[0.75,0.45;" .. mod.name .. "]" ..
"label[0,1;" .. fgettext("Depends:") .. "]" ..
"textlist[0,1.5;5,4.25;world_config_depends;" ..
modmgr.get_dependencies(mod.path) .. ";0]" ..
"button[9.25,6.35;2,0.5;btn_config_world_save;" .. fgettext("Save") .. "]" ..
"button[7.4,6.35;2,0.5;btn_config_world_cancel;" .. fgettext("Cancel") .. "]"
if mod ~= nil and mod.name ~= "" and mod.typ ~= "game_mod" 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
rawlist[j].enabled ~= true then
all_enabled = false
break
end
end
if all_enabled == false then
retval = retval .. "button[5.5,-0.125;2,0.5;btn_mp_enable;" .. fgettext("Enable MP") .. "]"
else
retval = retval .. "button[5.5,-0.125;2,0.5;btn_mp_disable;" .. fgettext("Disable MP") .. "]"
end
else
if mod.enabled then
retval = retval .. "checkbox[5.5,-0.375;cb_mod_enable;" .. fgettext("enabled") .. ";true]"
else
retval = retval .. "checkbox[5.5,-0.375;cb_mod_enable;" .. fgettext("enabled") .. ";false]"
end
end
end
retval = retval ..
"button[8.5,-0.125;2.5,0.5;btn_all_mods;" .. fgettext("Enable all") .. "]" ..
"textlist[5.5,0.5;5.5,5.75;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.typ == "game_mod" 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_textlist_event(fields["world_config_modlist"])
this.data.selected_mod = event.index
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["cb_hide_gamemods"] ~= nil or
fields["cb_hide_mpcontent"] ~= nil then
local current = this.data.list:get_filtercriteria()
if current == nil then
current = {}
end
if core.is_yes(fields["cb_hide_gamemods"]) then
current.hide_game = true
this.data.hide_gamemods = true
else
current.hide_game = false
this.data.hide_gamemods = false
end
if core.is_yes(fields["cb_hide_mpcontent"]) then
current.hide_modpackcontents = true
this.data.hide_modpackcontents = true
else
current.hide_modpackcontents = false
this.data.hide_modpackcontents = false
end
this.data.list:set_filtercriteria(current)
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
mod.typ ~= "game_mod" then
if mod.enabled then
worldfile:set("load_mod_"..mod.name, "true")
else
worldfile:set("load_mod_"..mod.name, "false")
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_all_mods"] then
local list = this.data.list:get_raw_list()
for i=1,#list,1 do
if list[i].typ ~= "game_mod" and
not list[i].is_modpack then
list[i].enabled = true
end
end
return true
end
return false
end
function create_configure_world_dlg(worldidx)
local dlg = dialog_create("sp_config_world",
get_formspec,
handle_buttons,
nil)
--TODO read from settings
dlg.data.hide_gamemods = false
dlg.data.hide_modpackcontents = false
dlg.data.selected_mod = 0
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.typ == "game_mod" 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 }
)
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,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 create_world_formspec(dialogdata)
local mapgens = {"v6", "v7", "indev", "singlenode", "math"}
local current_seed = core.setting_get("fixed_map_seed") or ""
local current_mg = core.setting_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.setting_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
local retval =
"size[12,6,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[5,5.5;2.6,0.5;world_create_confirm;" .. fgettext("Create") .. "]" ..
"button[7.5,5.5;2.8,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
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
if not menudata.worldlist:uid_exists_raw(worldname) then
core.setting_set("mg_name",fields["dd_mapgen"])
message = core.create_world(worldname,gameindex)
else
message = fgettext("A world named \"$1\" already exists", worldname)
end
core.setting_set("fixed_map_seed", fields["te_seed"])
if message ~= nil then
gamedata.errormessage = message
else
core.setting_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.setting_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,68 @@
--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[12.4,5,true]" ..
"field[1.75,1;10,3;;" .. fgettext("Are you sure you want to delete \"$1\"?", dialogdata.mod.name) .. ";]"..
"button[4,4.2;1,0.5;dlg_delete_mod_confirm;" .. fgettext("Yes") .. "]" ..
"button[6.5,4.2;3,0.5;dlg_delete_mod_cancel;" .. fgettext("No of course not!") .. "]"
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,64 @@
--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[12,6,true]" ..
"label[2,2;" ..
fgettext("Delete World \"$1\"?", dialogdata.delete_name) .. "]"..
"button[3.5,4.2;2.6,0.5;world_delete_confirm;" .. fgettext("Yes").. "]" ..
"button[6,4.2;2.8,0.5;world_delete_cancel;" .. fgettext("No") .. "]"
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,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 rename_modpack_formspec(dialogdata)
dialogdata.mod = modmgr.global_mods:get_list()[dialogdata.selected]
local retval =
"size[12.4,5,true]" ..
"label[1.75,1;".. fgettext("Rename Modpack:") .. "]"..
"field[4.5,1.4;6,0.5;te_modpack_name;;" ..
dialogdata.mod.name ..
"]" ..
"button[5,4.2;2.6,0.5;dlg_rename_modpack_confirm;"..
fgettext("Accept") .. "]" ..
"button[7.5,4.2;2.8,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,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 .. gamemgr.games[1].id
for i=2,#gamemgr.games,1 do
retval = retval .. "," .. gamemgr.games[i].name
end
end
return retval
end
--------------------------------------------------------------------------------
-- read initial data
--------------------------------------------------------------------------------
gamemgr.update_gamelist()

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

@@ -0,0 +1,114 @@
--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 = "#0000DD"
mt_color_green = "#00DD00"
mt_color_dark_green = "#003300"
--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 .. "dlg_config_world.lua")
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")
dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua")
dofile(menupath .. DIR_DELIM .. "tab_server.lua")
dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua")
dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
dofile(menupath .. DIR_DELIM .. "textures.lua")
--------------------------------------------------------------------------------
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
menudata.worldlist = filterlist.create(
core.get_worlds,
compare_worlds,
function(element,uid)
if element.name == uid then
return true
end
return false
end, --unique id compare fct
function(element,gameid)
if element.gameid == gameid then
return true
end
return false
end --filter fct
)
menudata.worldlist:add_sort_mechanism("alphabetic",sort_worlds_alphabetic)
menudata.worldlist:set_sortmode("alphabetic")
mm_texture.init()
--create main tabview
local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=0,y=0})
tv_main:set_autosave_tab(true)
tv_main:add(tab_singleplayer)
tv_main:add(tab_multiplayer)
tv_main:add(tab_server)
tv_main:add(tab_settings)
tv_main:add(tab_texturepacks)
tv_main:add(tab_mods)
tv_main:add(tab_credits)
tv_main:set_global_event_handler(main_event_handler)
tv_main:set_tab(core.setting_get("maintab_LAST"))
ui.set_default("maintab")
tv_main:show()
--create modstore ui
modstore.init({x=12,y=8},4,3)
ui.update()
core.sound_play("main_menu", true)
end
init_globals()

View File

@@ -0,0 +1,102 @@
--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 = "#0000DD"
mt_color_green = "#00DD00"
mt_color_dark_green = "#003300"
--marker for android specific code
ANDROID = true
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 .. "dlg_config_world.lua")
dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
--------------------------------------------------------------------------------
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
local worldlist = core.get_worlds()
local found_singleplayerworld = false
for i=1,#worldlist,1 do
if worldlist[i].name == "singleplayerworld" then
found_singleplayerworld = true
gamedata.worldindex = i
end
end
if not found_singleplayerworld then
core.create_world("singleplayerworld", 1)
local worldlist = core.get_worlds()
for i=1,#worldlist,1 do
if worldlist[i].name == "singleplayerworld" then
gamedata.worldindex = i
end
end
end
--create main tabview
local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=-0,y=-0})
tv_main:add(tab_simple_main)
tv_main:add(tab_mods)
tv_main:add(tab_settings)
tv_main:add(tab_credits)
tv_main:set_global_event_handler(main_event_handler)
tv_main:set_fixed_size(false)
ui.set_default("maintab")
tv_main:show()
--create modstore ui
modstore.init({x=12,y=6},3,2)
ui.update()
core.sound_play("main_menu", true)
end
init_globals()

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

@@ -0,0 +1,562 @@
--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_dirlist(path,true)
for i=1,#mods,1 do
local toadd = {}
local modpackfile = nil
toadd.name = mods[i]
toadd.path = path .. DIR_DELIM .. mods[i] .. DIR_DELIM
if modpack ~= nil and
modpack ~= "" then
toadd.modpack = modpack
else
local filename = path .. DIR_DELIM .. mods[i] .. DIR_DELIM .. "modpack.txt"
local error = nil
modpackfile,error = io.open(filename,"r")
end
if modpackfile ~= nil then
modpackfile:close()
toadd.is_modpack = true
table.insert(retval,toadd)
get_mods(path .. DIR_DELIM .. mods[i],retval,mods[i])
else
table.insert(retval,toadd)
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_dirlist(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
for i,v in ipairs(list) do
if retval ~= "" then
retval = retval ..","
end
local color = ""
if v.is_modpack then
local rawlist = render_list:get_raw_list()
local all_enabled = true
for j=1,#rawlist,1 do
if rawlist[j].modpack == list[i].name and
rawlist[j].enabled ~= true then
all_enabled = false
break
end
end
if all_enabled == false then
color = mt_color_grey
else
color = mt_color_dark_green
end
end
if v.typ == "game_mod" then
color = mt_color_blue
else
if v.enabled then
color = mt_color_green
end
end
retval = retval .. color
if v.modpack ~= nil then
retval = retval .. " "
end
retval = retval .. v.name
end
return retval
end
--------------------------------------------------------------------------------
function modmgr.get_dependencies(modfolder)
local toadd = ""
if modfolder ~= nil then
local filename = modfolder ..
DIR_DELIM .. "depends.txt"
local dependencyfile = io.open(filename,"r")
if dependencyfile then
local dependency = dependencyfile:read("*l")
while dependency do
if toadd ~= "" then
toadd = toadd .. ","
end
toadd = toadd .. dependency
dependency = dependencyfile:read()
end
dependencyfile:close()
end
end
return toadd
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
else
worldconfig.global_mods[key] = core.is_yes(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"
table.insert(retval,global_mods[i])
end
--read game mods
local gamespec = gamemgr.find_by_gameid(data.gameid)
gamemgr.get_game_mods(gamespec, game_mods)
for i=1,#game_mods,1 do
game_mods[i].typ = "game_mod"
table.insert(retval,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

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

@@ -0,0 +1,618 @@
--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") ..
" " .. data.title .. " " ..
fgettext("please wait...") .. "]"
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()
else
modstore.lastmodtitle = ""
end
this:delete()
return true
end
return false
end,
nil,
modstore.tv_store)
new_dlg.data.title = title
new_dlg:show()
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] successfulldialog
function modstore.successfulldialog()
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.5,1.5;1,0.5;btn_confirm_mod_successfull;" .. fgettext("ok") .. "]"
end,
function(this,fields)
if fields["btn_confirm_mod_successfull"] ~= nil then
this.parent:show()
this:hide()
this:delete()
return true
end
return false
end,
nil,
modstore.tv_store)
new_dlg.data.title = title
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
parent:hide()
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
if modstore.lastmodtitle ~= "" then
modstore.lastmodtitle = modstore.lastmodtitle .. ", "
end
modstore.lastmodtitle = modstore.lastmodtitle .. moddetails.title
if not core.handle_async(
function(param)
local fullurl = core.setting_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.setting_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
parent:hide()
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 = modstore.basetexturedir .. "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.setting_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,62 @@
--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.
--------------------------------------------------------------------------------
tab_credits = {
name = "credits",
caption = fgettext("Credits"),
cbf_formspec = function (tabview, name, tabdata)
local logofile = defaulttexturedir .. "logo.png"
return "vertlabel[0,-0.25;CREDITS]" ..
"label[0.5,3;Minetest " .. core.get_version() .. "]" ..
"label[0.5,3.3;http://minetest.net]" ..
"image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
"textlist[3.5,-0.25;8.5,5.8;list_credits;" ..
"#FFFF00" .. fgettext("Core Developers") .."," ..
"Perttu Ahola (celeron55) <celeron55@gmail.com>,"..
"Ryan Kwolek (kwolekr) <kwolekr@minetest.net>,"..
"PilzAdam <pilzadam@minetest.net>," ..
"Ilya Zhuravlev (xyz) <xyz@minetest.net>,"..
"Lisa Milne (darkrose) <lisa@ltmnet.com>,"..
"Maciej Kasatkin (RealBadAngel) <mk@realbadangel.pl>,"..
"proller <proler@gmail.com>,"..
"sfan5 <sfan5@live.de>,"..
"kahrl <kahrl@gmx.net>,"..
"sapier,"..
"ShadowNinja <shadowninja@minetest.net>,"..
"Nathanael Courant (Nore/Novatux) <nore@mesecons.net>,"..
"BlockMen,"..
","..
"#FFFF00" .. fgettext("Active Contributors") .. "," ..
"Vanessa Ezekowitz (VanessaE) <vanessaezekowitz@gmail.com>,"..
"Jurgen Doser (doserj) <jurgen.doser@gmail.com>,"..
"Jeija <jeija@mesecons.net>,"..
"MirceaKitsune <mirceakitsune@gmail.com>,"..
"dannydark <the_skeleton_of_a_child@yahoo.co.uk>,"..
"0gb.us <0gb.us@0gb.us>,"..
"," ..
"#FFFF00" .. fgettext("Previous Contributors") .. "," ..
"Guiseppe Bilotta (Oblomov) <guiseppe.bilotta@gmail.com>,"..
"Jonathan Neuschafer <j.neuschaefer@gmx.net>,"..
"Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net>,"..
"Constantin Wenger (SpeedProg) <constantin.wenger@googlemail.com>,"..
"matttpt <matttpt@gmail.com>,"..
"JacobF <queatz@gmail.com>,"..
";0;true]"
end
}

View File

@@ -0,0 +1,170 @@
--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 =
"vertlabel[0,-0.25;".. fgettext("MODS") .. "]" ..
"label[0.8,-0.25;".. fgettext("Installed Mods:") .. "]" ..
"textlist[0.75,0.25;4.5,4;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") .. "]" ..
"button[2.45,4.85;3.05,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 = modstore.basetexturedir .. "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.splittext(descriptiontext,42)
descriptionfile:close()
else
descriptionlines = {}
table.insert(descriptionlines,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
retval = retval .. ",Depends:,"
local toadd = modmgr.get_dependencies(selected_mod.path)
retval = retval .. toadd .. ";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_textlist_event(fields["modlist"])
tabdata.selected_mod = event.index
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
--------------------------------------------------------------------------------
tab_mods = {
name = "mods",
caption = fgettext("Mods"),
cbf_formspec = get_formspec,
cbf_button_handler = handle_buttons,
on_change = gamemgr.update_gamelist
}

View File

@@ -0,0 +1,236 @@
--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)
local render_details = core.is_yes(core.setting_getbool("public_serverlist"))
local retval =
"vertlabel[0,-0.25;".. fgettext("CLIENT") .. "]" ..
"label[1,-0.25;".. fgettext("Favorites:") .. "]"..
"label[1,4.25;".. fgettext("Address/Port") .. "]"..
"label[9,2.75;".. fgettext("Name/Password") .. "]" ..
"field[1.25,5.25;5.5,0.5;te_address;;" ..core.setting_get("address") .."]" ..
"field[6.75,5.25;2.25,0.5;te_port;;" ..core.setting_get("remote_port") .."]" ..
"checkbox[1,3.6;cb_public_serverlist;".. fgettext("Public Serverlist") .. ";" ..
dump(core.setting_getbool("public_serverlist")) .. "]"
if not core.setting_getbool("public_serverlist") then
retval = retval ..
"button[6.45,3.95;2.25,0.5;btn_delete_favorite;".. fgettext("Delete") .. "]"
end
retval = retval ..
"button[9,4.95;2.5,0.5;btn_mp_connect;".. fgettext("Connect") .. "]" ..
"field[9.3,3.75;2.5,0.5;te_name;;" ..core.setting_get("name") .."]" ..
"pwdfield[9.3,4.5;2.5,0.5;te_pwd;]" ..
"textarea[9.3,0.25;2.5,2.75;;"
if tabdata.fav_selected ~= nil and
menudata.favorites[tabdata.fav_selected] ~= nil and
menudata.favorites[tabdata.fav_selected].description ~= nil then
retval = retval ..
core.formspec_escape(menudata.favorites[tabdata.fav_selected].description,true)
end
retval = retval ..
";]"
--favourites
retval = retval ..
"textlist[1,0.35;7.5,3.35;favourites;"
if #menudata.favorites > 0 then
retval = retval .. render_favorite(menudata.favorites[1],render_details)
for i=2,#menudata.favorites,1 do
retval = retval .. "," .. render_favorite(menudata.favorites[i],render_details)
end
end
if tabdata.fav_selected ~= nil then
retval = retval .. ";" .. tabdata.fav_selected .. "]"
else
retval = retval .. ";0]"
end
return retval
end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
if fields["te_name"] ~= nil then
gamedata.playername = fields["te_name"]
core.setting_set("name", fields["te_name"])
end
if fields["favourites"] ~= nil then
local event = core.explode_textlist_event(fields["favourites"])
if event.type == "DCL" then
if event.index <= #menudata.favorites then
gamedata.address = menudata.favorites[event.index].address
gamedata.port = menudata.favorites[event.index].port
gamedata.playername = fields["te_name"]
if fields["te_pwd"] ~= nil then
gamedata.password = fields["te_pwd"]
end
gamedata.selected_world = 0
if menudata.favorites ~= nil then
gamedata.servername = menudata.favorites[event.index].name
gamedata.serverdescription = menudata.favorites[event.index].description
end
if gamedata.address ~= nil and
gamedata.port ~= nil then
core.setting_set("address",gamedata.address)
core.setting_set("remote_port",gamedata.port)
core.start()
end
end
return true
end
if event.type == "CHG" then
if event.index <= #menudata.favorites then
local address = menudata.favorites[event.index].address
local port = menudata.favorites[event.index].port
if address ~= nil and
port ~= nil then
core.setting_set("address",address)
core.setting_set("remote_port",port)
end
tabdata.fav_selected = event.index
end
return true
end
end
if fields["key_up"] ~= nil or
fields["key_down"] ~= nil then
local fav_idx = core.get_textlist_index("favourites")
if fav_idx ~= nil then
if fields["key_up"] ~= nil and fav_idx > 1 then
fav_idx = fav_idx -1
else if fields["key_down"] and fav_idx < #menudata.favorites then
fav_idx = fav_idx +1
end end
else
fav_idx = 1
end
if menudata.favorites == nil or
menudata.favorites[fav_idx] == nil then
tabdata.fav_selected = 0
return true
end
local address = menudata.favorites[fav_idx].address
local port = menudata.favorites[fav_idx].port
if address ~= nil and
port ~= nil then
core.setting_set("address",address)
core.setting_set("remote_port",port)
end
tabdata.fav_selected = fav_idx
return true
end
if fields["cb_public_serverlist"] ~= nil then
core.setting_set("public_serverlist", fields["cb_public_serverlist"])
if core.setting_getbool("public_serverlist") then
asyncOnlineFavourites()
else
menudata.favorites = core.get_favorites("local")
end
tabdata.fav_selected = nil
return true
end
if fields["btn_delete_favorite"] ~= nil then
local current_favourite = core.get_textlist_index("favourites")
if current_favourite == nil then return end
core.delete_favorite(current_favourite)
menudata.favorites = core.get_favorites()
tabdata.fav_selected = nil
core.setting_set("address","")
core.setting_set("remote_port","30000")
return true
end
if fields["btn_mp_connect"] ~= nil or
fields["key_enter"] ~= nil 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 ~= nil and fav_idx <= #menudata.favorites and
menudata.favorites[fav_idx].address == fields["te_address"] and
menudata.favorites[fav_idx].port == fields["te_port"] then
gamedata.servername = menudata.favorites[fav_idx].name
gamedata.serverdescription = menudata.favorites[fav_idx].description
else
gamedata.servername = ""
gamedata.serverdescription = ""
end
gamedata.selected_world = 0
core.setting_set("address", fields["te_address"])
core.setting_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
if core.setting_getbool("public_serverlist") then
asyncOnlineFavourites()
else
menudata.favorites = core.get_favorites("local")
end
end
--------------------------------------------------------------------------------
tab_multiplayer = {
name = "multiplayer",
caption = fgettext("Client"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
}

View File

@@ -0,0 +1,178 @@
--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)
local index = menudata.worldlist:get_current_index(
tonumber(core.setting_get("mainmenu_last_selected_world"))
)
local 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") .. "]" ..
"button[8.5,4.9;3.25,0.5;start_server;".. fgettext("Start Game") .. "]" ..
"label[4,-0.25;".. fgettext("Select World:") .. "]"..
"vertlabel[0,-0.25;".. fgettext("START SERVER") .. "]" ..
"checkbox[0.5,0.25;cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
dump(core.setting_getbool("creative_mode")) .. "]"..
"checkbox[0.5,0.7;cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
dump(core.setting_getbool("enable_damage")) .. "]"..
"checkbox[0.5,1.15;cb_server_announce;".. fgettext("Public") .. ";" ..
dump(core.setting_getbool("server_announce")) .. "]"..
"field[0.8,3.2;3.5,0.5;te_playername;".. fgettext("Name") .. ";" ..
core.setting_get("name") .. "]" ..
"pwdfield[0.8,4.2;3.5,0.5;te_passwd;".. fgettext("Password") .. "]"
local bind_addr = core.setting_get("bind_address")
if bind_addr ~= nil and bind_addr ~= "" then
retval = retval ..
"field[0.8,5.2;2.25,0.5;te_serveraddr;".. fgettext("Bind Address") .. ";" ..
core.setting_get("bind_address") .."]" ..
"field[3.05,5.2;1.25,0.5;te_serverport;".. fgettext("Port") .. ";" ..
core.setting_get("port") .."]"
else
retval = retval ..
"field[0.8,5.2;3.5,0.5;te_serverport;".. fgettext("Server Port") .. ";" ..
core.setting_get("port") .."]"
end
retval = retval ..
"textlist[4,0.25;7.5,3.7;srv_worlds;" ..
menu_render_worldlist() ..
";" .. index .. "]"
return retval
end
--------------------------------------------------------------------------------
local function main_button_handler(this, fields, name, tabdata)
local world_doubleclick = false
if fields["srv_worlds"] ~= nil then
local event = core.explode_textlist_event(fields["srv_worlds"])
if event.type == "DCL" then
world_doubleclick = true
end
if event.type == "CHG" then
core.setting_set("mainmenu_last_selected_world",
menudata.worldlist:get_raw_index(core.get_textlist_index("srv_worlds")))
return true
end
end
if menu_handle_key_up_down(fields,"srv_worlds","mainmenu_last_selected_world") then
return true
end
if fields["cb_creative_mode"] then
core.setting_set("creative_mode", fields["cb_creative_mode"])
return true
end
if fields["cb_enable_damage"] then
core.setting_set("enable_damage", fields["cb_enable_damage"])
return true
end
if fields["cb_server_announce"] then
core.setting_set("server_announce", fields["cb_server_announce"])
return true
end
if fields["start_server"] ~= nil or
world_doubleclick or
fields["key_enter"] then
local selected = core.get_textlist_index("srv_worlds")
if selected ~= nil then
gamedata.playername = fields["te_playername"]
gamedata.password = fields["te_passwd"]
gamedata.port = fields["te_serverport"]
gamedata.address = ""
gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
core.setting_set("port",gamedata.port)
if fields["te_serveraddr"] ~= nil then
core.setting_set("bind_address",fields["te_serveraddr"])
end
--update last game
local world = menudata.worldlist:get_raw_element(gamedata.selected_world)
local game,index = gamemgr.find_by_gameid(world.gameid)
core.setting_set("menu_last_game",game.id)
core.start()
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)
create_world_dlg:show()
this:hide()
return true
end
if fields["world_delete"] ~= nil then
local selected = core.get_textlist_index("srv_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)
delete_world_dlg:show()
this:hide()
end
end
return true
end
if fields["world_configure"] ~= nil then
local selected = core.get_textlist_index("srv_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)
configdialog:show()
this:hide()
end
end
return true
end
return false
end
--------------------------------------------------------------------------------
tab_server = {
name = "server",
caption = fgettext("Server"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = nil
}

View File

@@ -0,0 +1,288 @@
--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 dlg_confirm_reset_formspec(data)
local retval =
"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!!!") .. "]"
return retval
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,1 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,1 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 gui_scale_index()
local current_value = tonumber(core.setting_get("gui_scaling"))
if (current_value == nil) then
return 0
elseif current_value <= 0.5 then
return 1
elseif current_value <= 0.625 then
return 2
elseif current_value <= 0.75 then
return 3
elseif current_value <= 0.875 then
return 4
elseif current_value <= 1.0 then
return 5
elseif current_value <= 1.25 then
return 6
elseif current_value <= 1.5 then
return 7
else
return 8
end
end
local function formspec(tabview, name, tabdata)
local tab_string =
"vertlabel[0,-0.25;" .. fgettext("SETTINGS") .. "]" ..
"box[0.75,0;3.25,4;#999999]" ..
"checkbox[1,0;cb_fancy_trees;".. fgettext("Fancy Trees") .. ";"
.. dump(core.setting_getbool("new_style_leaves")) .. "]"..
"checkbox[1,0.5;cb_smooth_lighting;".. fgettext("Smooth Lighting")
.. ";".. dump(core.setting_getbool("smooth_lighting")) .. "]"..
"checkbox[1,1;cb_3d_clouds;".. fgettext("3D Clouds") .. ";"
.. dump(core.setting_getbool("enable_3d_clouds")) .. "]"..
"checkbox[1,1.5;cb_opaque_water;".. fgettext("Opaque Water") .. ";"
.. dump(core.setting_getbool("opaque_water")) .. "]"..
"checkbox[1,2.0;cb_pre_ivis;".. fgettext("Preload item visuals") .. ";"
.. dump(core.setting_getbool("preload_item_visuals")) .. "]"..
"checkbox[1,2.5;cb_particles;".. fgettext("Enable Particles") .. ";"
.. dump(core.setting_getbool("enable_particles")) .. "]"..
"box[4.25,0;3.25,2.5;#999999]" ..
"checkbox[4.5,0;cb_mipmapping;".. fgettext("Mip-Mapping") .. ";"
.. dump(core.setting_getbool("mip_map")) .. "]"..
"checkbox[4.5,0.5;cb_anisotrophic;".. fgettext("Anisotropic Filtering") .. ";"
.. dump(core.setting_getbool("anisotropic_filter")) .. "]"..
"checkbox[4.5,1.0;cb_bilinear;".. fgettext("Bi-Linear Filtering") .. ";"
.. dump(core.setting_getbool("bilinear_filter")) .. "]"..
"checkbox[4.5,1.5;cb_trilinear;".. fgettext("Tri-Linear Filtering") .. ";"
.. dump(core.setting_getbool("trilinear_filter")) .. "]"..
"box[7.75,0;4,4;#999999]" ..
"checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";"
.. dump(core.setting_getbool("enable_shaders")) .. "]"
if not ANDROID then
tab_string = tab_string ..
"button[8,4.75;3.75,0.5;btn_change_keys;".. fgettext("Change keys") .. "]"
else
tab_string = tab_string ..
"button[8,4.75;3.75,0.5;btn_reset_singleplayer;".. fgettext("Reset singleplayer world") .. "]"
end
tab_string = tab_string ..
"box[0.75,4.25;3.25,1.25;#999999]" ..
"label[1,4.25;" .. fgettext("GUI scale factor") .. "]" ..
"dropdown[1,4.75;3.0;dd_gui_scaling;0.5,0.625,0.75,0.875,1.0,1.25,1.5,2.0;"
.. gui_scale_index() .. "]"
if ANDROID then
tab_string = tab_string ..
"box[4.25,2.75;3.25,2.15;#999999]" ..
"checkbox[4.5,2.75;cb_touchscreen_target;".. fgettext("Touch free target") .. ";"
.. dump(core.setting_getbool("touchtarget")) .. "]"
end
if core.setting_get("touchscreen_threshold") ~= nil then
tab_string = tab_string ..
"label[4.5,3.5;" .. fgettext("Touchthreshold (px)") .. "]" ..
"dropdown[4.5,4;3;dd_touchthreshold;0,10,20,30,40,50;" ..
((tonumber(core.setting_get("touchscreen_threshold"))/10)+1) .. "]"
end
if core.setting_getbool("enable_shaders") then
tab_string = tab_string ..
"checkbox[8,0.5;cb_bumpmapping;".. fgettext("Bumpmapping") .. ";"
.. dump(core.setting_getbool("enable_bumpmapping")) .. "]"..
"checkbox[8,1.0;cb_generate_normalmaps;".. fgettext("Generate Normalmaps") .. ";"
.. dump(core.setting_getbool("generate_normalmaps")) .. "]"..
"checkbox[8,1.5;cb_parallax;".. fgettext("Parallax Occlusion") .. ";"
.. dump(core.setting_getbool("enable_parallax_occlusion")) .. "]"..
"checkbox[8,2.0;cb_waving_water;".. fgettext("Waving Water") .. ";"
.. dump(core.setting_getbool("enable_waving_water")) .. "]"..
"checkbox[8,2.5;cb_waving_leaves;".. fgettext("Waving Leaves") .. ";"
.. dump(core.setting_getbool("enable_waving_leaves")) .. "]"..
"checkbox[8,3.0;cb_waving_plants;".. fgettext("Waving Plants") .. ";"
.. dump(core.setting_getbool("enable_waving_plants")) .. "]"
else
tab_string = tab_string ..
"textlist[8.33,0.7;4,1;;#888888" .. fgettext("Bumpmapping") .. ";0;true]" ..
"textlist[8.33,1.2;4,1;;#888888" .. fgettext("Generate Normalmaps") .. ";0;true]" ..
"textlist[8.33,1.7;4,1;;#888888" .. fgettext("Parallax Occlusion") .. ";0;true]" ..
"textlist[8.33,2.2;4,1;;#888888" .. fgettext("Waving Water") .. ";0;true]" ..
"textlist[8.33,2.7;4,1;;#888888" .. fgettext("Waving Leaves") .. ";0;true]" ..
"textlist[8.33,3.2;4,1;;#888888" .. fgettext("Waving Plants") .. ";0;true]"
end
return tab_string
end
--------------------------------------------------------------------------------
local function handle_settings_buttons(this, fields, tabname, tabdata)
if fields["cb_fancy_trees"] then
core.setting_set("new_style_leaves", fields["cb_fancy_trees"])
return true
end
if fields["cb_smooth_lighting"] then
core.setting_set("smooth_lighting", fields["cb_smooth_lighting"])
return true
end
if fields["cb_3d_clouds"] then
core.setting_set("enable_3d_clouds", fields["cb_3d_clouds"])
return true
end
if fields["cb_opaque_water"] then
core.setting_set("opaque_water", fields["cb_opaque_water"])
return true
end
if fields["cb_mipmapping"] then
core.setting_set("mip_map", fields["cb_mipmapping"])
return true
end
if fields["cb_anisotrophic"] then
core.setting_set("anisotropic_filter", fields["cb_anisotrophic"])
return true
end
if fields["cb_bilinear"] then
core.setting_set("bilinear_filter", fields["cb_bilinear"])
return true
end
if fields["cb_trilinear"] then
core.setting_set("trilinear_filter", fields["cb_trilinear"])
return true
end
if fields["cb_shaders"] then
if (core.setting_get("video_driver") == "direct3d8" or core.setting_get("video_driver") == "direct3d9") then
core.setting_set("enable_shaders", "false")
gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.")
else
core.setting_set("enable_shaders", fields["cb_shaders"])
end
return true
end
if fields["cb_pre_ivis"] then
core.setting_set("preload_item_visuals", fields["cb_pre_ivis"])
return true
end
if fields["cb_particles"] then
core.setting_set("enable_particles", fields["cb_particles"])
return true
end
if fields["cb_bumpmapping"] then
core.setting_set("enable_bumpmapping", fields["cb_bumpmapping"])
end
if fields["cb_generate_normalmaps"] then
core.setting_set("generate_normalmaps", fields["cb_generate_normalmaps"])
end
if fields["cb_parallax"] then
core.setting_set("enable_parallax_occlusion", fields["cb_parallax"])
return true
end
if fields["cb_waving_water"] then
core.setting_set("enable_waving_water", fields["cb_waving_water"])
return true
end
if fields["cb_waving_leaves"] then
core.setting_set("enable_waving_leaves", fields["cb_waving_leaves"])
end
if fields["cb_waving_plants"] then
core.setting_set("enable_waving_plants", fields["cb_waving_plants"])
return true
end
if fields["btn_change_keys"] ~= nil then
core.show_keys_menu()
return true
end
if fields["cb_touchscreen_target"] then
core.setting_set("touchtarget", fields["cb_touchscreen_target"])
return true
end
if fields["btn_reset_singleplayer"] then
print("sp reset")
showconfirm_reset(this)
return true
end
--Note dropdowns have to be handled LAST!
local ddhandled = false
if fields["dd_touchthreshold"] then
core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"])
ddhandled = true
end
if fields["dd_gui_scaling"] then
core.setting_set("gui_scaling",fields["dd_gui_scaling"])
ddhandled = true
end
return ddhandled
end
tab_settings = {
name = "settings",
caption = fgettext("Settings"),
cbf_formspec = formspec,
cbf_button_handler = handle_settings_buttons
}

View File

@@ -0,0 +1,192 @@
--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)
local retval = ""
local render_details = dump(core.setting_getbool("public_serverlist"))
retval = retval ..
"label[8,0.5;".. fgettext("Name/Password") .. "]" ..
"field[0.25,3.25;5.5,0.5;te_address;;" ..core.setting_get("address") .."]" ..
"field[5.75,3.25;2.25,0.5;te_port;;" ..core.setting_get("remote_port") .."]" ..
"checkbox[8,-0.25;cb_public_serverlist;".. fgettext("Public Serverlist") .. ";" ..
render_details .. "]"
retval = retval ..
"button[8,2.5;4,1.5;btn_mp_connect;".. fgettext("Connect") .. "]" ..
"field[8.75,1.5;3.5,0.5;te_name;;" ..core.setting_get("name") .."]" ..
"pwdfield[8.75,2.3;3.5,0.5;te_pwd;]"
--favourites
retval = retval ..
"textlist[-0.05,0.0;7.55,2.75;favourites;"
if #menudata.favorites > 0 then
retval = retval .. render_favorite(menudata.favorites[1],render_details)
for i=2,#menudata.favorites,1 do
retval = retval .. "," .. render_favorite(menudata.favorites[i],render_details)
end
end
if tabdata.fav_selected ~= nil then
retval = retval .. ";" .. tabdata.fav_selected .. "]"
else
retval = retval .. ";0]"
end
-- separator
retval = retval ..
"box[-0.3,3.75;12.4,0.1;#FFFFFF]"
-- checkboxes
retval = retval ..
"checkbox[1.0,3.9;cb_creative;".. fgettext("Creative Mode") .. ";" ..
dump(core.setting_getbool("creative_mode")) .. "]"..
"checkbox[5.0,3.9;cb_damage;".. fgettext("Enable Damage") .. ";" ..
dump(core.setting_getbool("enable_damage")) .. "]" ..
"checkbox[8,3.9;cb_fly_mode;".. fgettext("Fly mode") .. ";" ..
dump(core.setting_getbool("free_move")) .. "]"
-- buttons
retval = retval ..
"button[2.0,4.5;6,1.5;btn_start_singleplayer;" .. fgettext("Start Singleplayer") .. "]" ..
"button[8.25,4.5;2.5,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"] ~= nil then
local event = core.explode_textlist_event(fields["favourites"])
if event.type == "CHG" then
if event.index <= #menudata.favorites then
local address = menudata.favorites[event.index].address
local port = menudata.favorites[event.index].port
if address ~= nil and
port ~= nil then
core.setting_set("address",address)
core.setting_set("remote_port",port)
end
tabdata.fav_selected = event.index
end
end
return true
end
if fields["cb_public_serverlist"] ~= nil then
core.setting_set("public_serverlist", fields["cb_public_serverlist"])
if core.setting_getbool("public_serverlist") then
asyncOnlineFavourites()
else
menudata.favorites = core.get_favorites("local")
end
return true
end
if fields["cb_creative"] then
core.setting_set("creative_mode", fields["cb_creative"])
return true
end
if fields["cb_damage"] then
core.setting_set("enable_damage", fields["cb_damage"])
return true
end
if fields["cb_fly_mode"] then
core.setting_set("free_move", fields["cb_fly_mode"])
return true
end
if fields["btn_mp_connect"] ~= nil or
fields["key_enter"] ~= nil 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 ~= nil and fav_idx <= #menudata.favorites and
menudata.favorites[fav_idx].address == fields["te_address"] and
menudata.favorites[fav_idx].port == fields["te_port"] then
gamedata.servername = menudata.favorites[fav_idx].name
gamedata.serverdescription = menudata.favorites[fav_idx].description
else
gamedata.servername = ""
gamedata.serverdescription = ""
end
gamedata.selected_world = 0
core.setting_set("address",fields["te_address"])
core.setting_set("remote_port",fields["te_port"])
core.start()
return true
end
if fields["btn_config_sp_world"] ~= nil then
local configdialog = create_configure_world_dlg(1)
if (configdialog ~= nil) 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
if core.setting_getbool("public_serverlist") then
asyncOnlineFavourites()
else
menudata.favorites = core.get_favorites("local")
end
end
--------------------------------------------------------------------------------
tab_simple_main = {
name = "main",
caption = fgettext("Main"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_activate
}

View File

@@ -0,0 +1,227 @@
--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.setting_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.setting_set("menu_last_game",gamemgr.games[j].id)
menudata.worldlist:set_filtercriteria(gamemgr.games[j].id)
return true
end
end
end
end
local btnbar = buttonbar_create("game_button_bar",
game_buttonbar_button_handler,
{x=-0.3,y=5.65}, "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
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)
end
end
local function get_formspec(tabview, name, tabdata)
local retval = ""
local index = filterlist.get_current_index(menudata.worldlist,
tonumber(core.setting_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") .. "]" ..
"button[8.5,4.95;3.25,0.5;play;".. fgettext("Play") .. "]" ..
"label[4,-0.25;".. fgettext("Select World:") .. "]"..
"vertlabel[0,-0.25;".. fgettext("SINGLE PLAYER") .. "]" ..
"checkbox[0.5,0.25;cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
dump(core.setting_getbool("creative_mode")) .. "]"..
"checkbox[0.5,0.7;cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
dump(core.setting_getbool("enable_damage")) .. "]"..
"textlist[4,0.25;7.5,3.7;sp_worlds;" ..
menu_render_worldlist() ..
";" .. index .. "]"
return retval
end
local function main_button_handler(this, fields, name, tabdata)
assert(name == "singleplayer")
local world_doubleclick = false
if fields["sp_worlds"] ~= nil then
local event = core.explode_textlist_event(fields["sp_worlds"])
if event.type == "DCL" then
world_doubleclick = true
end
if event.type == "CHG" then
core.setting_set("mainmenu_last_selected_world",
menudata.worldlist:get_raw_index(core.get_textlist_index("sp_worlds")))
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.setting_set("creative_mode", fields["cb_creative_mode"])
return true
end
if fields["cb_enable_damage"] then
core.setting_set("enable_damage", fields["cb_enable_damage"])
return true
end
if fields["play"] ~= nil or
world_doubleclick or
fields["key_enter"] then
local selected = core.get_textlist_index("sp_worlds")
if selected ~= nil then
gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
gamedata.singleplayer = true
core.start()
end
return true
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
--------------------------------------------------------------------------------
tab_singleplayer = {
name = "singleplayer",
caption = fgettext("Singleplayer"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
}

View File

@@ -0,0 +1,117 @@
--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)
retval = {"None"}
for _,i in ipairs(list) do
if i~="base" then
table.insert(retval, i)
end
end
return retval
end
--------------------------------------------------------------------------------
local function render_texture_pack_list(list)
local retval = ""
for i, v in ipairs(list) do
if retval ~= "" then
retval = retval ..","
end
retval = retval .. core.formspec_escape(v)
end
return retval
end
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
local retval = "label[4,-0.25;".. fgettext("Select texture pack:") .. "]"..
"vertlabel[0,-0.25;".. fgettext("TEXTURE PACKS") .. "]" ..
"textlist[4,0.25;7.5,5.0;TPs;"
local current_texture_path = core.setting_get("texture_path")
local list = filter_texture_pack_list(core.get_dirlist(core.get_texturepath(), true))
local index = tonumber(core.setting_get("mainmenu_last_selected_TP"))
if index == nil 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.."info.txt"
local infotext = ""
local f = io.open(infofile, "r")
if f==nil 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 = nil
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.65,0.25;4.0,3.7;"..core.formspec_escape(screenfile or no_screenshot).."]"..
"textarea[1.0,3.25;3.7,1.5;;"..core.formspec_escape(infotext or "")..";]"
end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
if fields["TPs"] ~= nil 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.setting_set("mainmenu_last_selected_TP",
index)
local list = filter_texture_pack_list(core.get_dirlist(core.get_texturepath(), true))
local current_index = core.get_textlist_index("TPs")
if current_index ~= nil and #list >= current_index then
local new_path = core.get_texturepath()..DIR_DELIM..list[current_index]
if list[current_index] == "None" then new_path = "" end
core.setting_set("texture_path", new_path)
end
end
return true
end
return false
end
--------------------------------------------------------------------------------
tab_texturepacks = {
name = "texturepacks",
caption = fgettext("Texturepacks"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = nil
}

View File

@@ -0,0 +1,166 @@
--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.setting_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.setting_getbool("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.setting_getbool("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
local path = gamedetails.path .. DIR_DELIM .."menu" ..
DIR_DELIM .. identifier .. ".png"
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 base pack
local minimalpath = defaulttexturedir .. "dirt_bg.png"
core.set_background("background", minimalpath, true, 128)
end

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

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

View File

@@ -0,0 +1,116 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 worldPosition;
varying vec3 eyeVec;
varying vec3 tsEyeVec;
varying vec3 lightVec;
varying vec3 tsLightVec;
bool normalTexturePresent = false;
const float e = 2.718281828459;
const float BS = 10.0;
float intensity (vec3 color){
return (color.r + color.g + color.b) / 3.0;
}
float get_rgb_height (vec2 uv){
return intensity(texture2D(baseTexture,uv).rgb);
}
vec4 get_normal_map(vec2 uv){
vec4 bump = texture2D(normalTexture, uv).rgba;
bump.xyz = normalize(bump.xyz * 2.0 -1.0);
bump.y = -bump.y;
return bump;
}
void main (void)
{
vec3 color;
vec4 bump;
vec2 uv = gl_TexCoord[0].st;
bool use_normalmap = false;
#ifdef USE_NORMALMAPS
if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){
normalTexturePresent = true;
}
#endif
#ifdef ENABLE_PARALLAX_OCCLUSION
if (normalTexturePresent){
vec3 tsEye = normalize(tsEyeVec);
float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS;
uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y);
}
#endif
#ifdef USE_NORMALMAPS
if (normalTexturePresent){
bump = get_normal_map(uv);
use_normalmap = true;
}
#endif
#ifdef GENERATE_NORMALMAPS
if (use_normalmap == false){
float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP));
float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP));
float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP));
float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y));
float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP));
float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP));
float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP));
float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y));
float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);
float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr);
bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0);
use_normalmap = true;
}
#endif
vec4 base = texture2D(baseTexture, uv).rgba;
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap){
vec3 L = normalize(lightVec);
vec3 E = normalize(eyeVec);
float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5);
float diffuse = dot(E,bump.xyz);
color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb;
} else {
color = base.rgb;
}
#else
color = base.rgb;
#endif
#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE
float alpha = gl_Color.a;
vec4 col = vec4(color.rgb, alpha);
col *= gl_Color;
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
alpha = mix(alpha, 0.0, d);
}
gl_FragColor = vec4(col.rgb, alpha);
#else
vec4 col = vec4(color.rgb, base.a);
col *= gl_Color;
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.rgb, base.a);
#endif
}

View File

@@ -0,0 +1,141 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform mat4 mWorld;
uniform float dayNightRatio;
uniform vec3 eyePosition;
uniform float animationTimer;
varying vec3 vPosition;
varying vec3 worldPosition;
varying vec3 eyeVec;
varying vec3 lightVec;
varying vec3 tsEyeVec;
varying vec3 tsLightVec;
const float e = 2.718281828459;
const float BS = 10.0;
float smoothCurve( float x ) {
return x * x *( 3.0 - 2.0 * x );
}
float triangleWave( float x ) {
return abs( fract( x + 0.5 ) * 2.0 - 1.0 );
}
float smoothTriangleWave( float x ) {
return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0;
}
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
vec4 pos = gl_Vertex;
pos.y -= 2.0;
pos.y -= sin (pos.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) * WATER_WAVE_HEIGHT
+ sin ((pos.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) / 7.0) * WATER_WAVE_HEIGHT;
gl_Position = mWorldViewProj * pos;
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
vec4 pos = gl_Vertex;
vec4 pos2 = mWorld * gl_Vertex;
pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2.x * 0.01 + pos2.z * 0.01) * 2.0 - 1.0) * 0.4;
pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.2;
pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.4;
gl_Position = mWorldViewProj * pos;
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
vec4 pos = gl_Vertex;
vec4 pos2 = mWorld * gl_Vertex;
if (gl_TexCoord[0].y < 0.05) {
pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8;
pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4;
}
gl_Position = mWorldViewProj * pos;
#else
gl_Position = mWorldViewProj * gl_Vertex;
#endif
vPosition = gl_Position.xyz;
worldPosition = (mWorld * gl_Vertex).xyz;
vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
vec3 normal, tangent, binormal;
normal = normalize(gl_NormalMatrix * gl_Normal);
float tileContrast = 1.0;
if (gl_Normal.x > 0.5) {
// 1.0, 0.0, 0.0
tileContrast = 0.8;
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.x < -0.5) {
// -1.0, 0.0, 0.0
tileContrast = 0.8;
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.y > 0.5) {
// 0.0, 1.0, 0.0
tileContrast = 1.2;
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.y < -0.5) {
// 0.0, -1.0, 0.0
tileContrast = 0.3;
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.z > 0.5) {
// 0.0, 0.0, 1.0
tileContrast = 0.5;
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.z < -0.5) {
// 0.0, 0.0, -1.0
tileContrast = 0.5;
tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
}
mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x,
tangent.y, binormal.y, normal.y,
tangent.z, binormal.z, normal.z);
lightVec = sunPosition - worldPosition;
tsLightVec = lightVec * tbnMatrix;
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
tsEyeVec = eyeVec * tbnMatrix;
vec4 color;
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
float rg = mix(night, day, dayNightRatio);
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
#if !(MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE)
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
color *= tileContrast;
color = sqrt(color); // Linear -> SRGB
#endif
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
}

View File

@@ -0,0 +1,116 @@
uniform sampler2D baseTexture;
uniform sampler2D normalTexture;
uniform sampler2D useNormalmap;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
varying vec3 vPosition;
varying vec3 worldPosition;
varying vec3 eyeVec;
varying vec3 tsEyeVec;
varying vec3 lightVec;
varying vec3 tsLightVec;
bool normalTexturePresent = false;
const float e = 2.718281828459;
const float BS = 10.0;
float intensity (vec3 color){
return (color.r + color.g + color.b) / 3.0;
}
float get_rgb_height (vec2 uv){
return intensity(texture2D(baseTexture,uv).rgb);
}
vec4 get_normal_map(vec2 uv){
vec4 bump = texture2D(normalTexture, uv).rgba;
bump.xyz = normalize(bump.xyz * 2.0 -1.0);
bump.y = -bump.y;
return bump;
}
void main (void)
{
vec3 color;
vec4 bump;
vec2 uv = gl_TexCoord[0].st;
bool use_normalmap = false;
#ifdef USE_NORMALMAPS
if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){
normalTexturePresent = true;
}
#endif
#ifdef ENABLE_PARALLAX_OCCLUSION
if (normalTexturePresent){
vec3 tsEye = normalize(tsEyeVec);
float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS;
uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y);
}
#endif
#ifdef USE_NORMALMAPS
if (normalTexturePresent){
bump = get_normal_map(uv);
use_normalmap = true;
}
#endif
#ifdef GENERATE_NORMALMAPS
if (use_normalmap == false){
float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP));
float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP));
float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP));
float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y));
float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP));
float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP));
float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP));
float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y));
float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);
float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr);
bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0);
use_normalmap = true;
}
#endif
vec4 base = texture2D(baseTexture, uv).rgba;
#ifdef ENABLE_BUMPMAPPING
if (use_normalmap){
vec3 L = normalize(lightVec);
vec3 E = normalize(eyeVec);
float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5);
float diffuse = dot(E,bump.xyz);
color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb;
} else {
color = base.rgb;
}
#else
color = base.rgb;
#endif
#if MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE
float alpha = gl_Color.a;
vec4 col = vec4(color.rgb, alpha);
col *= gl_Color;
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
alpha = mix(alpha, 0.0, d);
}
gl_FragColor = vec4(col.rgb, alpha);
#else
vec4 col = vec4(color.rgb, base.a);
col *= gl_Color;
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
col = mix(col, skyBgColor, d);
}
gl_FragColor = vec4(col.rgb, base.a);
#endif
}

View File

@@ -0,0 +1,141 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform mat4 mWorld;
uniform float dayNightRatio;
uniform vec3 eyePosition;
uniform float animationTimer;
varying vec3 vPosition;
varying vec3 worldPosition;
varying vec3 eyeVec;
varying vec3 lightVec;
varying vec3 tsEyeVec;
varying vec3 tsLightVec;
const float e = 2.718281828459;
const float BS = 10.0;
float smoothCurve( float x ) {
return x * x *( 3.0 - 2.0 * x );
}
float triangleWave( float x ) {
return abs( fract( x + 0.5 ) * 2.0 - 1.0 );
}
float smoothTriangleWave( float x ) {
return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0;
}
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
vec4 pos = gl_Vertex;
pos.y -= 2.0;
pos.y -= sin (pos.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) * WATER_WAVE_HEIGHT
+ sin ((pos.z/WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH) / 7.0) * WATER_WAVE_HEIGHT;
gl_Position = mWorldViewProj * pos;
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES
vec4 pos = gl_Vertex;
vec4 pos2 = mWorld * gl_Vertex;
pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2.x * 0.01 + pos2.z * 0.01) * 2.0 - 1.0) * 0.4;
pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.2;
pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2.x * -0.01 + pos2.z * -0.01) * 2.0 - 1.0) * 0.4;
gl_Position = mWorldViewProj * pos;
#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS
vec4 pos = gl_Vertex;
vec4 pos2 = mWorld * gl_Vertex;
if (gl_TexCoord[0].y < 0.05) {
pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2.x * 0.1 + pos2.z * 0.1) * 2.0 - 1.0) * 0.8;
pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2.x * -0.5 + pos2.z * -0.5) * 2.0 - 1.0) * 0.4;
}
gl_Position = mWorldViewProj * pos;
#else
gl_Position = mWorldViewProj * gl_Vertex;
#endif
vPosition = gl_Position.xyz;
worldPosition = (mWorld * gl_Vertex).xyz;
vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0);
vec3 normal, tangent, binormal;
normal = normalize(gl_NormalMatrix * gl_Normal);
float tileContrast = 1.0;
if (gl_Normal.x > 0.5) {
// 1.0, 0.0, 0.0
tileContrast = 0.8;
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.x < -0.5) {
// -1.0, 0.0, 0.0
tileContrast = 0.8;
tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.y > 0.5) {
// 0.0, 1.0, 0.0
tileContrast = 1.2;
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.y < -0.5) {
// 0.0, -1.0, 0.0
tileContrast = 0.3;
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0));
} else if (gl_Normal.z > 0.5) {
// 0.0, 0.0, 1.0
tileContrast = 0.5;
tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
} else if (gl_Normal.z < -0.5) {
// 0.0, 0.0, -1.0
tileContrast = 0.5;
tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0));
binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0));
}
mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x,
tangent.y, binormal.y, normal.y,
tangent.z, binormal.z, normal.z);
lightVec = sunPosition - worldPosition;
tsLightVec = lightVec * tbnMatrix;
eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz;
tsEyeVec = eyeVec * tbnMatrix;
vec4 color;
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
float rg = mix(night, day, dayNightRatio);
rg += light_source * 2.5; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
#if !(MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE)
// Make sides and bottom darker than the top
color = color * color; // SRGB -> Linear
color *= tileContrast;
color = sqrt(color); // Linear -> SRGB
#endif
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0);
}

View File

@@ -0,0 +1,47 @@
# - Find curl
# Find the native CURL headers and libraries.
#
# CURL_INCLUDE_DIR - where to find curl/curl.h, etc.
# CURL_LIBRARY - List of libraries when using curl.
# CURL_FOUND - True if curl found.
if( UNIX )
FIND_PATH(CURL_INCLUDE_DIR NAMES curl.h
PATHS
/usr/local/include/curl
/usr/include/curl
)
FIND_LIBRARY(CURL_LIBRARY NAMES curl
PATHS
/usr/local/lib
/usr/lib
)
else( UNIX )
FIND_PATH(CURL_INCLUDE_DIR NAMES curl/curl.h) # Look for the header file.
FIND_LIBRARY(CURL_LIBRARY NAMES curl) # Look for the library.
FIND_FILE(CURL_DLL NAMES libcurl.dll
PATHS
"c:/windows/system32"
DOC "Path of the cURL dll (for installation)")
INCLUDE(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL DEFAULT_MSG CURL_LIBRARY CURL_INCLUDE_DIR) # all listed variables are TRUE
endif( UNIX )
if( WIN32 )
if( CURL_LIBRARY AND CURL_INCLUDE_DIR AND CURL_DLL ) # libcurl.dll is required on Windows
SET(CURL_FOUND TRUE)
else( CURL_LIBRARY AND CURL_INCLUDE_DIR AND CURL_DLL )
SET(CURL_FOUND FALSE)
endif( CURL_LIBRARY AND CURL_INCLUDE_DIR AND CURL_DLL )
else ( WIN32 )
if( CURL_LIBRARY AND CURL_INCLUDE_DIR )
SET(CURL_FOUND TRUE)
else( CURL_LIBRARY AND CURL_INCLUDE_DIR )
SET(CURL_FOUND FALSE)
endif( CURL_LIBRARY AND CURL_INCLUDE_DIR )
endif ( WIN32 )
MESSAGE(STATUS "CURL_INCLUDE_DIR = ${CURL_INCLUDE_DIR}")
MESSAGE(STATUS "CURL_LIBRARY = ${CURL_LIBRARY}")
MESSAGE(STATUS "CURL_DLL = ${CURL_DLL}")

View File

@@ -16,20 +16,17 @@ FIND_PROGRAM(GETTEXT_MSGFMT
PATHS "${CUSTOM_GETTEXT_PATH}/bin"
DOC "path to msgfmt")
FIND_PROGRAM(GETTEXT_MSGMERGE
NAMES msgmerge
PATHS "${CUSTOM_GETTEXT_PATH}/bin"
DOC "path to msgmerge")
if(APPLE)
FIND_LIBRARY(GETTEXT_LIBRARY
NAMES libintl.a
PATHS "${CUSTOM_GETTEXT_PATH}/lib"
DOC "gettext *intl*.lib")
FIND_PROGRAM(GETTEXT_MSGEN
NAMES msgen
PATHS "${CUSTOM_GETTEXT_PATH}/bin"
DOC "path to msgen")
FIND_PROGRAM(GETTEXT_EXTRACT
NAMES xgettext
PATHS "${CUSTOM_GETTEXT_PATH}/bin"
DOC "path to xgettext")
FIND_LIBRARY(ICONV_LIBRARY
NAMES libiconv.dylib
PATHS "/usr/lib"
DOC "iconv lib")
endif(APPLE)
# modern Linux, as well as Mac, seem to not need require special linking
# they do not because gettext is part of glibc
@@ -56,7 +53,6 @@ IF (WIN32)
DOC "gettext *iconv*.lib")
ENDIF(WIN32)
IF(GETTEXT_INCLUDE_DIR AND GETTEXT_MSGFMT)
IF (WIN32)
# in the Win32 case check also for the extra linking requirements
@@ -64,6 +60,10 @@ IF(GETTEXT_INCLUDE_DIR AND GETTEXT_MSGFMT)
SET(GETTEXT_FOUND TRUE)
ENDIF()
ELSE(WIN32)
# *BSD variants require special linkage as they don't use glibc
IF(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
SET(GETTEXT_LIBRARY "intl")
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "BSD")
SET(GETTEXT_FOUND TRUE)
ENDIF(WIN32)
ENDIF()
@@ -71,10 +71,14 @@ ENDIF()
IF(GETTEXT_FOUND)
SET(GETTEXT_PO_PATH ${CMAKE_SOURCE_DIR}/po)
SET(GETTEXT_MO_BUILD_PATH ${CMAKE_BINARY_DIR}/locale/<locale>/LC_MESSAGES)
SET(GETTEXT_MO_DEST_PATH locale/<locale>/LC_MESSAGES)
SET(GETTEXT_MO_DEST_PATH ${LOCALEDIR}/<locale>/LC_MESSAGES)
FILE(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*")
LIST(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES minetest.pot)
MACRO(SET_MO_PATHS _buildvar _destvar _locale)
STRING(REPLACE "<locale>" ${_locale} ${_buildvar} ${GETTEXT_MO_BUILD_PATH})
STRING(REPLACE "<locale>" ${_locale} ${_destvar} ${GETTEXT_MO_DEST_PATH})
ENDMACRO(SET_MO_PATHS)
ELSE()
SET(GETTEXT_INCLUDE_DIR "")
SET(GETTEXT_LIBRARY "")
ENDIF()

View File

@@ -0,0 +1,18 @@
# Look for json, use our own if not found
#FIND_PATH(JSON_INCLUDE_DIR json.h)
#FIND_LIBRARY(JSON_LIBRARY NAMES jsoncpp)
#IF(JSON_LIBRARY AND JSON_INCLUDE_DIR)
# SET( JSON_FOUND TRUE )
#ENDIF(JSON_LIBRARY AND JSON_INCLUDE_DIR)
#IF(JSON_FOUND)
# MESSAGE(STATUS "Found system jsoncpp header file in ${JSON_INCLUDE_DIR}")
# MESSAGE(STATUS "Found system jsoncpp library ${JSON_LIBRARY}")
#ELSE(JSON_FOUND)
SET(JSON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/json)
SET(JSON_LIBRARY jsoncpp)
MESSAGE(STATUS "Using project jsoncpp library")
#ENDIF(JSON_FOUND)

View File

@@ -1,18 +0,0 @@
# Look for jthread, use our own if not found
FIND_PATH(JTHREAD_INCLUDE_DIR jthread.h)
FIND_LIBRARY(JTHREAD_LIBRARY NAMES jthread)
IF(JTHREAD_LIBRARY AND JTHREAD_INCLUDE_DIR)
SET( JTHREAD_FOUND TRUE )
ENDIF(JTHREAD_LIBRARY AND JTHREAD_INCLUDE_DIR)
IF(JTHREAD_FOUND)
MESSAGE(STATUS "Found system jthread header file in ${JTHREAD_INCLUDE_DIR}")
MESSAGE(STATUS "Found system jthread library ${JTHREAD_LIBRARY}")
ELSE(JTHREAD_FOUND)
SET(JTHREAD_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/jthread)
SET(JTHREAD_LIBRARY jthread)
MESSAGE(STATUS "Using project jthread library")
ENDIF(JTHREAD_FOUND)

View File

@@ -0,0 +1,130 @@
#-------------------------------------------------------------------
# This file is stolen from part of the CMake build system for OGRE (Object-oriented Graphics Rendering Engine) http://www.ogre3d.org/
#
# The contents of this file are placed in the public domain. Feel
# free to make use of it in any way you like.
#-------------------------------------------------------------------
# - Try to find OpenGLES and EGL
# Once done this will define
#
# OPENGLES2_FOUND - system has OpenGLES
# OPENGLES2_INCLUDE_DIR - the GL include directory
# OPENGLES2_LIBRARIES - Link these to use OpenGLES
#
# EGL_FOUND - system has EGL
# EGL_INCLUDE_DIR - the EGL include directory
# EGL_LIBRARIES - Link these to use EGL
# win32, apple, android NOT TESED
# linux tested and works
IF (WIN32)
IF (CYGWIN)
FIND_PATH(OPENGLES2_INCLUDE_DIR GLES2/gl2.h )
FIND_LIBRARY(OPENGLES2_gl_LIBRARY libGLESv2 )
ELSE (CYGWIN)
IF(BORLAND)
SET (OPENGLES2_gl_LIBRARY import32 CACHE STRING "OpenGL ES 2.x library for win32")
ELSE(BORLAND)
# todo
# SET (OPENGLES_gl_LIBRARY ${SOURCE_DIR}/Dependencies/lib/release/libGLESv2.lib CACHE STRING "OpenGL ES 2.x library for win32"
ENDIF(BORLAND)
ENDIF (CYGWIN)
ELSE (WIN32)
IF (APPLE)
create_search_paths(/Developer/Platforms)
findpkg_framework(OpenGLES2)
set(OPENGLES2_gl_LIBRARY "-framework OpenGLES")
ELSE(APPLE)
FIND_PATH(OPENGLES2_INCLUDE_DIR GLES2/gl2.h
/usr/openwin/share/include
/opt/graphics/OpenGL/include /usr/X11R6/include
/usr/include
)
FIND_LIBRARY(OPENGLES2_gl_LIBRARY
NAMES GLESv2
PATHS /opt/graphics/OpenGL/lib
/usr/openwin/lib
/usr/shlib /usr/X11R6/lib
/usr/lib
)
IF (NOT BUILD_ANDROID)
FIND_PATH(EGL_INCLUDE_DIR EGL/egl.h
/usr/openwin/share/include
/opt/graphics/OpenGL/include /usr/X11R6/include
/usr/include
)
FIND_LIBRARY(EGL_egl_LIBRARY
NAMES EGL
PATHS /opt/graphics/OpenGL/lib
/usr/openwin/lib
/usr/shlib /usr/X11R6/lib
/usr/lib
)
# On Unix OpenGL most certainly always requires X11.
# Feel free to tighten up these conditions if you don't
# think this is always true.
# It's not true on OSX.
IF (OPENGLES2_gl_LIBRARY)
IF(NOT X11_FOUND)
INCLUDE(FindX11)
ENDIF(NOT X11_FOUND)
IF (X11_FOUND)
IF (NOT APPLE)
SET (OPENGLES2_LIBRARIES ${X11_LIBRARIES})
ENDIF (NOT APPLE)
ENDIF (X11_FOUND)
ENDIF (OPENGLES2_gl_LIBRARY)
ENDIF ()
ENDIF(APPLE)
ENDIF (WIN32)
#SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES})
IF (BUILD_ANDROID)
IF(OPENGLES2_gl_LIBRARY)
SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES})
SET( EGL_LIBRARIES)
SET( OPENGLES2_FOUND "YES" )
ENDIF(OPENGLES2_gl_LIBRARY)
ELSE ()
SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES})
IF(OPENGLES2_gl_LIBRARY AND EGL_egl_LIBRARY)
SET( OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY} ${OPENGLES2_LIBRARIES})
SET( EGL_LIBRARIES ${EGL_egl_LIBRARY} ${EGL_LIBRARIES})
SET( OPENGLES2_FOUND "YES" )
ENDIF(OPENGLES2_gl_LIBRARY AND EGL_egl_LIBRARY)
ENDIF ()
MARK_AS_ADVANCED(
OPENGLES2_INCLUDE_DIR
OPENGLES2_gl_LIBRARY
EGL_INCLUDE_DIR
EGL_egl_LIBRARY
)
IF(OPENGLES2_FOUND)
MESSAGE(STATUS "Found system opengles2 library ${OPENGLES2_LIBRARIES}")
ELSE ()
SET(OPENGLES2_LIBRARIES "")
ENDIF ()

View File

@@ -0,0 +1,46 @@
# - Find vorbis
# Find the native vorbis includes and libraries
#
# VORBIS_INCLUDE_DIR - where to find vorbis.h, etc.
# OGG_INCLUDE_DIR - where to find ogg/ogg.h, etc.
# VORBIS_LIBRARIES - List of libraries when using vorbis(file).
# VORBIS_FOUND - True if vorbis found.
if(NOT GP2XWIZ)
if(VORBIS_INCLUDE_DIR)
# Already in cache, be silent
set(VORBIS_FIND_QUIETLY TRUE)
endif(VORBIS_INCLUDE_DIR)
find_path(OGG_INCLUDE_DIR ogg/ogg.h)
find_path(VORBIS_INCLUDE_DIR vorbis/vorbisfile.h)
# MSVC built ogg/vorbis may be named ogg_static and vorbis_static
find_library(OGG_LIBRARY NAMES ogg ogg_static)
find_library(VORBIS_LIBRARY NAMES vorbis vorbis_static)
find_library(VORBISFILE_LIBRARY NAMES vorbisfile vorbisfile_static)
# Handle the QUIETLY and REQUIRED arguments and set VORBIS_FOUND
# to TRUE if all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(VORBIS DEFAULT_MSG
OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR
OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
else(NOT GP2XWIZ)
find_path(VORBIS_INCLUDE_DIR tremor/ivorbisfile.h)
find_library(VORBIS_LIBRARY NAMES vorbis_dec)
find_package_handle_standard_args(VORBIS DEFAULT_MSG
VORBIS_INCLUDE_DIR VORBIS_LIBRARY)
endif(NOT GP2XWIZ)
if(VORBIS_FOUND)
if(NOT GP2XWIZ)
set(VORBIS_LIBRARIES ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY}
${OGG_LIBRARY})
else(NOT GP2XWIZ)
set(VORBIS_LIBRARIES ${VORBIS_LIBRARY})
endif(NOT GP2XWIZ)
else(VORBIS_FOUND)
set(VORBIS_LIBRARIES)
endif(VORBIS_FOUND)
mark_as_advanced(OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR)
mark_as_advanced(OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)

View File

@@ -0,0 +1,20 @@
# Always run during 'make'
if(VERSION_EXTRA)
set(VERSION_GITHASH "${VERSION_STRING}")
else(VERSION_EXTRA)
execute_process(COMMAND git describe --always --tag --dirty
WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}"
OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if(VERSION_GITHASH)
message(STATUS "*** Detected git version ${VERSION_GITHASH} ***")
else()
set(VERSION_GITHASH "${VERSION_STRING}")
endif()
endif()
configure_file(
${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in
${GENERATE_VERSION_BINARY_DIR}/cmake_config_githash.h)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 539 B

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