From 3aeac83e7d539c3fa9e0ae390412be99585a1406 Mon Sep 17 00:00:00 2001 From: Johnny Joy Bringer Date: Fri, 13 May 2016 13:55:16 -0400 Subject: [PATCH] Add support for PostgreSQL backend --- .gitattributes | 2 + .gitignore | 87 + .mailmap | 33 + .travis.yml | 20 + CMakeLists.txt | 237 + README.txt | 538 ++ build/android/AndroidManifest.xml.template | 35 + build/android/Makefile | 891 ++++ build/android/build.xml | 16 + build/android/irrlicht-back_button.patch | 19 + build/android/irrlicht-texturehack.patch | 240 + build/android/irrlicht-touchcount.patch | 30 + build/android/jni/Android.mk | 373 ++ build/android/jni/Application.mk | 8 + build/android/libiconv_android.patch | 39 + build/android/libiconv_stdio.patch | 13 + build/android/libvorbis-libogg-fpu.patch | 37 + build/android/openssl_arch.patch | 11 + build/android/project.properties | 1 + build/android/res/drawable-hdpi/irr_icon.png | Bin 0 -> 5490 bytes build/android/res/drawable-ldpi/irr_icon.png | Bin 0 -> 2262 bytes build/android/res/drawable-mdpi/irr_icon.png | Bin 0 -> 3110 bytes build/android/res/drawable-xhdpi/irr_icon.png | Bin 0 -> 7610 bytes build/android/res/layout/assetcopy.xml | 22 + build/android/res/values/styles.xml | 11 + .../minetest/minetest/MinetestAssetCopy.java | 456 ++ .../minetest/minetest/MinetestTextEntry.java | 91 + .../minetest/minetest/MtNativeActivity.java | 100 + builtin/async/init.lua | 17 + builtin/common/async_event.lua | 40 + builtin/common/filterlist.lua | 317 ++ builtin/common/misc_helpers.lua | 641 +++ builtin/common/serialize.lua | 218 + builtin/common/strict.lua | 53 + builtin/common/vector.lua | 133 + builtin/fstk/buttonbar.lua | 210 + builtin/fstk/dialog.lua | 69 + builtin/fstk/tabview.lua | 273 + builtin/fstk/ui.lua | 208 + builtin/game/auth.lua | 201 + builtin/game/chatcommands.lua | 888 ++++ builtin/game/constants.lua | 17 + builtin/game/deprecated.lua | 51 + builtin/game/detached_inventory.lua | 20 + builtin/game/falling.lua | 214 + builtin/game/features.lua | 30 + builtin/game/forceloading.lua | 79 + builtin/game/init.lua | 28 + builtin/game/item.lua | 645 +++ builtin/game/item_entity.lua | 216 + builtin/game/misc.lua | 206 + builtin/game/mod_profiling.lua | 356 ++ builtin/game/privileges.lua | 53 + builtin/game/register.lua | 509 ++ builtin/game/statbars.lua | 165 + builtin/game/static_spawn.lua | 25 + builtin/game/voxelarea.lua | 109 + builtin/init.lua | 47 + builtin/mainmenu/common.lua | 347 ++ builtin/mainmenu/dlg_config_world.lua | 311 ++ builtin/mainmenu/dlg_create_world.lua | 143 + builtin/mainmenu/dlg_delete_mod.lua | 68 + builtin/mainmenu/dlg_delete_world.lua | 64 + builtin/mainmenu/dlg_rename_modpack.lua | 69 + builtin/mainmenu/gamemgr.lua | 83 + builtin/mainmenu/init.lua | 164 + builtin/mainmenu/init_simple.lua | 4 + builtin/mainmenu/modmgr.lua | 566 +++ builtin/mainmenu/store.lua | 614 +++ builtin/mainmenu/tab_credits.lua | 80 + builtin/mainmenu/tab_mods.lua | 172 + builtin/mainmenu/tab_multiplayer.lua | 261 + builtin/mainmenu/tab_server.lua | 195 + builtin/mainmenu/tab_settings.lua | 741 +++ builtin/mainmenu/tab_simple_main.lua | 205 + builtin/mainmenu/tab_singleplayer.lua | 250 + builtin/mainmenu/tab_texturepacks.lua | 126 + builtin/mainmenu/textures.lua | 185 + builtin/settingtypes.txt | 1087 ++++ client/serverlist/.gitignore | 2 + .../minimap_shader/opengl_fragment.glsl | 32 + .../shaders/minimap_shader/opengl_vertex.glsl | 11 + .../shaders/nodes_shader/opengl_fragment.glsl | 167 + .../shaders/nodes_shader/opengl_vertex.glsl | 147 + .../water_surface_shader/opengl_fragment.glsl | 137 + .../water_surface_shader/opengl_vertex.glsl | 144 + .../wielded_shader/opengl_fragment.glsl | 114 + .../shaders/wielded_shader/opengl_vertex.glsl | 35 + cmake/Modules/FindCURL.cmake | 19 + cmake/Modules/FindGMP.cmake | 28 + cmake/Modules/FindGettextLib.cmake | 78 + cmake/Modules/FindIrrlicht.cmake | 71 + cmake/Modules/FindJson.cmake | 27 + cmake/Modules/FindLua.cmake | 25 + cmake/Modules/FindNcursesw.cmake | 189 + cmake/Modules/FindOpenGLES2.cmake | 112 + cmake/Modules/FindSQLite3.cmake | 9 + cmake/Modules/FindVorbis.cmake | 46 + cmake/Modules/GenerateVersion.cmake | 26 + doc/Doxyfile.in | 34 + doc/README.android | 130 + doc/fst_api.txt | 171 + doc/lgpl-2.1.txt | 502 ++ doc/lua_api.txt | 3763 ++++++++++++++ doc/menu_lua_api.txt | 237 + doc/minetest.6 | 118 + doc/minetestserver.6 | 2 + doc/old/ancient_main_comment.txt | 345 ++ doc/old/changelog.txt | 147 + doc/protocol.txt | 108 + doc/texture_overrides.txt | 35 + doc/world_format.txt | 609 +++ fonts/DroidSansFallbackFull.ttf | Bin 0 -> 4529044 bytes fonts/liberationmono.ttf | Bin 0 -> 333636 bytes fonts/liberationsans.ttf | Bin 0 -> 133828 bytes fonts/lucida_sans_10.xml | Bin 0 -> 156248 bytes fonts/lucida_sans_100.png | Bin 0 -> 12012 bytes fonts/lucida_sans_11.xml | Bin 0 -> 157272 bytes fonts/lucida_sans_110.png | Bin 0 -> 14739 bytes fonts/lucida_sans_12.xml | Bin 0 -> 157058 bytes fonts/lucida_sans_120.png | Bin 0 -> 16295 bytes fonts/lucida_sans_14.xml | Bin 0 -> 159272 bytes fonts/lucida_sans_140.png | Bin 0 -> 42429 bytes fonts/lucida_sans_16.xml | Bin 0 -> 160744 bytes fonts/lucida_sans_160.png | Bin 0 -> 48106 bytes fonts/lucida_sans_18.xml | Bin 0 -> 162284 bytes fonts/lucida_sans_180.png | Bin 0 -> 56766 bytes fonts/lucida_sans_20.xml | Bin 0 -> 162438 bytes fonts/lucida_sans_200.png | Bin 0 -> 69059 bytes fonts/lucida_sans_22.xml | Bin 0 -> 162936 bytes fonts/lucida_sans_220.png | Bin 0 -> 74427 bytes fonts/lucida_sans_24.xml | Bin 0 -> 166358 bytes fonts/lucida_sans_240.png | Bin 0 -> 83532 bytes fonts/lucida_sans_26.xml | Bin 0 -> 167054 bytes fonts/lucida_sans_260.png | Bin 0 -> 93958 bytes fonts/lucida_sans_28.xml | Bin 0 -> 167156 bytes fonts/lucida_sans_280.png | Bin 0 -> 101952 bytes fonts/lucida_sans_36.xml | Bin 0 -> 169606 bytes fonts/lucida_sans_360.png | Bin 0 -> 143453 bytes fonts/lucida_sans_4.xml | Bin 0 -> 136910 bytes fonts/lucida_sans_40.png | Bin 0 -> 7642 bytes fonts/lucida_sans_48.xml | Bin 0 -> 171972 bytes fonts/lucida_sans_480.png | Bin 0 -> 205578 bytes fonts/lucida_sans_56.xml | Bin 0 -> 174174 bytes fonts/lucida_sans_560.png | Bin 0 -> 246505 bytes fonts/lucida_sans_6.xml | Bin 0 -> 140552 bytes fonts/lucida_sans_60.png | Bin 0 -> 13992 bytes fonts/lucida_sans_8.xml | Bin 0 -> 154564 bytes fonts/lucida_sans_80.png | Bin 0 -> 9740 bytes fonts/lucida_sans_9.xml | Bin 0 -> 154830 bytes fonts/lucida_sans_90.png | Bin 0 -> 10704 bytes fonts/mono_dejavu_sans_10.xml | Bin 0 -> 257014 bytes fonts/mono_dejavu_sans_100.png | Bin 0 -> 56121 bytes fonts/mono_dejavu_sans_11.xml | Bin 0 -> 263644 bytes fonts/mono_dejavu_sans_110.png | Bin 0 -> 67613 bytes fonts/mono_dejavu_sans_12.xml | Bin 0 -> 268932 bytes fonts/mono_dejavu_sans_120.png | Bin 0 -> 73938 bytes fonts/mono_dejavu_sans_14.xml | Bin 0 -> 269188 bytes fonts/mono_dejavu_sans_140.png | Bin 0 -> 89073 bytes fonts/mono_dejavu_sans_16.xml | Bin 0 -> 275642 bytes fonts/mono_dejavu_sans_160.png | Bin 0 -> 101939 bytes fonts/mono_dejavu_sans_18.xml | Bin 0 -> 279962 bytes fonts/mono_dejavu_sans_180.png | Bin 0 -> 122274 bytes fonts/mono_dejavu_sans_20.xml | Bin 0 -> 282588 bytes fonts/mono_dejavu_sans_200.png | Bin 0 -> 138662 bytes fonts/mono_dejavu_sans_22.xml | Bin 0 -> 283950 bytes fonts/mono_dejavu_sans_220.png | Bin 0 -> 152844 bytes fonts/mono_dejavu_sans_24.xml | Bin 0 -> 286626 bytes fonts/mono_dejavu_sans_240.png | Bin 0 -> 170247 bytes fonts/mono_dejavu_sans_26.xml | Bin 0 -> 289710 bytes fonts/mono_dejavu_sans_260.png | Bin 0 -> 190156 bytes fonts/mono_dejavu_sans_28.xml | Bin 0 -> 292596 bytes fonts/mono_dejavu_sans_280.png | Bin 0 -> 200848 bytes fonts/mono_dejavu_sans_4.xml | Bin 0 -> 237740 bytes fonts/mono_dejavu_sans_40.png | Bin 0 -> 15668 bytes fonts/mono_dejavu_sans_6.xml | Bin 0 -> 245472 bytes fonts/mono_dejavu_sans_60.png | Bin 0 -> 29291 bytes fonts/mono_dejavu_sans_8.xml | Bin 0 -> 251876 bytes fonts/mono_dejavu_sans_80.png | Bin 0 -> 45552 bytes fonts/mono_dejavu_sans_9.xml | Bin 0 -> 254016 bytes fonts/mono_dejavu_sans_90.png | Bin 0 -> 50995 bytes games/minimal/game.conf | 2 + games/minimal/menu/background.png | Bin 0 -> 392 bytes games/minimal/menu/icon.png | Bin 0 -> 218 bytes games/minimal/mods/bucket/depends.txt | 2 + games/minimal/mods/bucket/init.lua | 95 + games/minimal/mods/bucket/textures/bucket.png | Bin 0 -> 182 bytes .../mods/bucket/textures/bucket_lava.png | Bin 0 -> 183 bytes .../mods/bucket/textures/bucket_water.png | Bin 0 -> 180 bytes games/minimal/mods/default/init.lua | 1797 +++++++ games/minimal/mods/default/mapgen.lua | 136 + .../sounds/default_grass_footstep.1.ogg | Bin 0 -> 7014 bytes .../minimal/mods/default/textures/bubble.png | Bin 0 -> 273 bytes .../mods/default/textures/crack_anylength.png | Bin 0 -> 255 bytes .../mods/default/textures/default_apple.png | Bin 0 -> 109 bytes .../mods/default/textures/default_book.png | Bin 0 -> 157 bytes .../default/textures/default_bookshelf.png | Bin 0 -> 515 bytes .../mods/default/textures/default_brick.png | Bin 0 -> 457 bytes .../default/textures/default_cactus_side.png | Bin 0 -> 144 bytes .../default/textures/default_cactus_top.png | Bin 0 -> 121 bytes .../default/textures/default_chest_front.png | Bin 0 -> 114 bytes .../default/textures/default_chest_lock.png | Bin 0 -> 145 bytes .../default/textures/default_chest_side.png | Bin 0 -> 98 bytes .../default/textures/default_chest_top.png | Bin 0 -> 93 bytes .../mods/default/textures/default_clay.png | Bin 0 -> 318 bytes .../default/textures/default_clay_brick.png | Bin 0 -> 173 bytes .../default/textures/default_clay_lump.png | Bin 0 -> 140 bytes .../mods/default/textures/default_cloud.png | Bin 0 -> 83 bytes .../default/textures/default_coal_lump.png | Bin 0 -> 138 bytes .../mods/default/textures/default_cobble.png | Bin 0 -> 374 bytes .../mods/default/textures/default_dirt.png | Bin 0 -> 1586 bytes .../mods/default/textures/default_fence.png | Bin 0 -> 480 bytes .../textures/default_furnace_fire_bg.png | Bin 0 -> 220 bytes .../textures/default_furnace_fire_fg.png | Bin 0 -> 719 bytes .../textures/default_furnace_front.png | Bin 0 -> 159 bytes .../textures/default_furnace_front_active.png | Bin 0 -> 283 bytes .../default/textures/default_furnace_side.png | Bin 0 -> 125 bytes .../mods/default/textures/default_glass.png | Bin 0 -> 210 bytes .../mods/default/textures/default_grass.png | Bin 0 -> 782 bytes .../textures/default_grass_footsteps.png | Bin 0 -> 771 bytes .../default/textures/default_grass_side.png | Bin 0 -> 878 bytes .../mods/default/textures/default_gravel.png | Bin 0 -> 172 bytes .../default/textures/default_iron_lump.png | Bin 0 -> 140 bytes .../default/textures/default_junglegrass.png | Bin 0 -> 237 bytes .../mods/default/textures/default_ladder.png | Bin 0 -> 368 bytes .../mods/default/textures/default_lava.png | Bin 0 -> 172 bytes .../default_lava_flowing_animated.png | Bin 0 -> 7818 bytes .../textures/default_lava_source_animated.png | Bin 0 -> 2902 bytes .../mods/default/textures/default_leaves.png | Bin 0 -> 1683 bytes .../mods/default/textures/default_mese.png | Bin 0 -> 129 bytes .../default/textures/default_mineral_coal.png | Bin 0 -> 142 bytes .../default/textures/default_mineral_iron.png | Bin 0 -> 922 bytes .../default/textures/default_mossycobble.png | Bin 0 -> 603 bytes .../mods/default/textures/default_nc_back.png | Bin 0 -> 186 bytes .../default/textures/default_nc_front.png | Bin 0 -> 204 bytes .../mods/default/textures/default_nc_rb.png | Bin 0 -> 137 bytes .../mods/default/textures/default_nc_side.png | Bin 0 -> 148 bytes .../mods/default/textures/default_paper.png | Bin 0 -> 139 bytes .../mods/default/textures/default_papyrus.png | Bin 0 -> 165 bytes .../mods/default/textures/default_rail.png | Bin 0 -> 437 bytes .../textures/default_rail_crossing.png | Bin 0 -> 388 bytes .../default/textures/default_rail_curved.png | Bin 0 -> 375 bytes .../textures/default_rail_t_junction.png | Bin 0 -> 374 bytes .../mods/default/textures/default_sand.png | Bin 0 -> 762 bytes .../default/textures/default_sandstone.png | Bin 0 -> 744 bytes .../mods/default/textures/default_sapling.png | Bin 0 -> 328 bytes .../textures/default_scorched_stuff.png | Bin 0 -> 164 bytes .../default/textures/default_sign_wall.png | Bin 0 -> 416 bytes .../default/textures/default_steel_block.png | Bin 0 -> 128 bytes .../default/textures/default_steel_ingot.png | Bin 0 -> 144 bytes .../mods/default/textures/default_stick.png | Bin 0 -> 120 bytes .../mods/default/textures/default_stone.png | Bin 0 -> 389 bytes .../default/textures/default_tnt_bottom.png | Bin 0 -> 98 bytes .../default/textures/default_tnt_side.png | Bin 0 -> 129 bytes .../mods/default/textures/default_tnt_top.png | Bin 0 -> 146 bytes .../textures/default_tool_mesepick.png | Bin 0 -> 155 bytes .../textures/default_tool_steelaxe.png | Bin 0 -> 140 bytes .../textures/default_tool_steelpick.png | Bin 0 -> 163 bytes .../textures/default_tool_steelshovel.png | Bin 0 -> 144 bytes .../textures/default_tool_steelsword.png | Bin 0 -> 169 bytes .../textures/default_tool_stoneaxe.png | Bin 0 -> 141 bytes .../textures/default_tool_stonepick.png | Bin 0 -> 155 bytes .../textures/default_tool_stoneshovel.png | Bin 0 -> 144 bytes .../textures/default_tool_stonesword.png | Bin 0 -> 168 bytes .../default/textures/default_tool_woodaxe.png | Bin 0 -> 134 bytes .../textures/default_tool_woodpick.png | Bin 0 -> 149 bytes .../textures/default_tool_woodshovel.png | Bin 0 -> 135 bytes .../textures/default_tool_woodsword.png | Bin 0 -> 147 bytes .../mods/default/textures/default_torch.png | Bin 0 -> 146 bytes .../textures/default_torch_on_ceiling.png | Bin 0 -> 137 bytes .../textures/default_torch_on_floor.png | Bin 0 -> 138 bytes .../mods/default/textures/default_tree.png | Bin 0 -> 1445 bytes .../default/textures/default_tree_top.png | Bin 0 -> 177 bytes .../mods/default/textures/default_water.png | Bin 0 -> 302 bytes .../mods/default/textures/default_wood.png | Bin 0 -> 1400 bytes games/minimal/mods/default/textures/heart.png | Bin 0 -> 248 bytes .../minimal/mods/default/textures/player.png | Bin 0 -> 157 bytes .../mods/default/textures/player_back.png | Bin 0 -> 149 bytes .../mods/default/textures/treeprop.png | Bin 0 -> 757 bytes .../mods/default/textures/wieldhand.png | Bin 0 -> 212 bytes games/minimal/mods/errorhandler_test/init.lua | 106 + games/minimal/mods/experimental/depends.txt | 2 + games/minimal/mods/experimental/init.lua | 601 +++ .../textures/experimental_dummyball.png | Bin 0 -> 399 bytes .../textures/experimental_tester_tool_1.png | Bin 0 -> 160 bytes .../mods/give_initial_stuff/depends.txt | 2 + .../minimal/mods/give_initial_stuff/init.lua | 16 + games/minimal/mods/legacy/depends.txt | 2 + games/minimal/mods/legacy/init.lua | 128 + .../mods/legacy/textures/apple_iron.png | Bin 0 -> 119 bytes .../mods/legacy/textures/cooked_rat.png | Bin 0 -> 145 bytes .../mods/legacy/textures/dungeon_master.png | Bin 0 -> 3007 bytes .../minimal/mods/legacy/textures/fireball.png | Bin 0 -> 279 bytes .../minimal/mods/legacy/textures/firefly.png | Bin 0 -> 99 bytes .../minimal/mods/legacy/textures/oerkki1.png | Bin 0 -> 165 bytes .../mods/legacy/textures/oerkki1_damaged.png | Bin 0 -> 210 bytes games/minimal/mods/legacy/textures/rat.png | Bin 0 -> 141 bytes games/minimal/mods/stairs/depends.txt | 1 + games/minimal/mods/stairs/init.lua | 93 + games/minimal/mods/test/init.lua | 11 + minetest.conf.example | 1386 +++++ misc/Info.plist | 14 + misc/minetest-icon-24x24.png | Bin 0 -> 587 bytes misc/minetest-icon.icns | Bin 0 -> 242668 bytes misc/minetest-icon.ico | Bin 0 -> 9662 bytes misc/minetest.appdata.xml | 36 + misc/minetest.desktop | 17 + misc/minetest.svg | 183 + misc/winresource.rc | 58 + mods/mods_here.txt | 4 + po/be/minetest.po | 3577 +++++++++++++ po/ca/minetest.po | 3620 ++++++++++++++ po/cs/minetest.po | 3809 ++++++++++++++ po/da/minetest.po | 3792 ++++++++++++++ po/de/minetest.po | 4367 ++++++++++++++++ po/eo/minetest.po | 3770 ++++++++++++++ po/es/minetest.po | 3737 ++++++++++++++ po/et/minetest.po | 3807 ++++++++++++++ po/fr/minetest.po | 4286 ++++++++++++++++ po/he/minetest.po | 3587 +++++++++++++ po/hu/minetest.po | 3863 ++++++++++++++ po/id/minetest.po | 3799 ++++++++++++++ po/it/minetest.po | 3846 ++++++++++++++ po/ja/minetest.po | 3721 ++++++++++++++ po/jbo/minetest.po | 3655 ++++++++++++++ po/ko/minetest.po | 3582 +++++++++++++ po/ky/minetest.po | 3779 ++++++++++++++ po/lt/minetest.po | 3715 ++++++++++++++ po/minetest.pot | 3579 +++++++++++++ po/nb/minetest.po | 3631 ++++++++++++++ po/nl/minetest.po | 3969 +++++++++++++++ po/pl/minetest.po | 3855 ++++++++++++++ po/pt/minetest.po | 3867 ++++++++++++++ po/pt_BR/minetest.po | 3869 ++++++++++++++ po/ro/minetest.po | 3784 ++++++++++++++ po/ru/minetest.po | 3871 ++++++++++++++ po/tr/minetest.po | 3791 ++++++++++++++ po/uk/minetest.po | 3814 ++++++++++++++ po/zh_CN/minetest.po | 3912 +++++++++++++++ po/zh_TW/minetest.po | 3735 ++++++++++++++ src/CMakeLists.txt | 827 +++ src/activeobject.h | 86 + src/areastore.cpp | 343 ++ src/areastore.h | 196 + src/ban.cpp | 146 + src/ban.h | 52 + src/camera.cpp | 664 +++ src/camera.h | 219 + src/cavegen.cpp | 811 +++ src/cavegen.h | 166 + src/cguittfont/CGUITTFont.cpp | 1175 +++++ src/cguittfont/CGUITTFont.h | 379 ++ src/cguittfont/CMakeLists.txt | 30 + src/cguittfont/irrUString.h | 3892 +++++++++++++++ src/cguittfont/xCGUITTFont.cpp | 5 + src/cguittfont/xCGUITTFont.h | 7 + src/chat.cpp | 779 +++ src/chat.h | 275 + src/chat_interface.h | 82 + src/client.cpp | 1958 ++++++++ src/client.h | 689 +++ src/client/CMakeLists.txt | 6 + src/client/clientlauncher.cpp | 710 +++ src/client/clientlauncher.h | 129 + src/client/inputhandler.h | 435 ++ src/client/tile.cpp | 2074 ++++++++ src/client/tile.h | 293 ++ src/clientiface.cpp | 854 ++++ src/clientiface.h | 519 ++ src/clientmap.cpp | 834 ++++ src/clientmap.h | 164 + src/clientmedia.cpp | 655 +++ src/clientmedia.h | 150 + src/clientobject.cpp | 69 + src/clientobject.h | 126 + src/clientsimpleobject.h | 38 + src/clouds.cpp | 366 ++ src/clouds.h | 105 + src/cmake_config.h.in | 38 + src/cmake_config_githash.h.in | 10 + src/collision.cpp | 550 ++ src/collision.h | 97 + src/config.h | 42 + src/constants.h | 119 + src/content_abm.cpp | 36 + src/content_abm.h | 33 + src/content_cao.cpp | 1842 +++++++ src/content_cao.h | 208 + src/content_cso.cpp | 91 + src/content_cso.h | 30 + src/content_mapblock.cpp | 1669 +++++++ src/content_mapblock.h | 29 + src/content_mapnode.cpp | 169 + src/content_mapnode.h | 37 + src/content_nodemeta.cpp | 200 + src/content_nodemeta.h | 40 + src/content_sao.cpp | 1399 ++++++ src/content_sao.h | 349 ++ src/convert_json.cpp | 381 ++ src/convert_json.h | 34 + src/craftdef.cpp | 1039 ++++ src/craftdef.h | 446 ++ src/database-dummy.cpp | 55 + src/database-dummy.h | 41 + src/database-leveldb.cpp | 104 + src/database-leveldb.h | 49 + src/database-postgresql.cpp | 285 ++ src/database-postgresql.h | 59 + src/database-redis.cpp | 184 + src/database-redis.h | 55 + src/database-sqlite3.cpp | 248 + src/database-sqlite3.h | 69 + src/database.cpp | 69 + src/database.h | 53 + src/daynightratio.h | 69 + src/debug.cpp | 355 ++ src/debug.h | 139 + src/defaultsettings.cpp | 375 ++ src/defaultsettings.h | 39 + src/drawscene.cpp | 555 ++ src/drawscene.h | 39 + src/dungeongen.cpp | 638 +++ src/dungeongen.h | 98 + src/emerge.cpp | 707 +++ src/emerge.h | 171 + src/environment.cpp | 2613 ++++++++++ src/environment.h | 557 +++ src/event.h | 72 + src/event_manager.h | 115 + src/exceptions.h | 178 + src/filecache.cpp | 89 + src/filecache.h | 47 + src/filesys.cpp | 711 +++ src/filesys.h | 121 + src/fontengine.cpp | 455 ++ src/fontengine.h | 139 + src/game.cpp | 4444 +++++++++++++++++ src/game.h | 155 + src/gamedef.h | 94 + src/gameparams.h | 34 + src/genericobject.cpp | 184 + src/genericobject.h | 81 + src/gettext.cpp | 248 + src/gettext.h | 52 + src/gettime.h | 63 + src/gmp/CMakeLists.txt | 7 + src/gmp/mini-gmp.c | 4130 +++++++++++++++ src/gmp/mini-gmp.h | 256 + src/guiChatConsole.cpp | 574 +++ src/guiChatConsole.h | 129 + src/guiEngine.cpp | 619 +++ src/guiEngine.h | 313 ++ src/guiFileSelectMenu.cpp | 125 + src/guiFileSelectMenu.h | 78 + src/guiFormSpecMenu.cpp | 3634 ++++++++++++++ src/guiFormSpecMenu.h | 491 ++ src/guiKeyChangeMenu.cpp | 418 ++ src/guiKeyChangeMenu.h | 79 + src/guiMainMenu.h | 68 + src/guiPasswordChange.cpp | 266 + src/guiPasswordChange.h | 54 + src/guiTable.cpp | 1275 +++++ src/guiTable.h | 269 + src/guiVolumeChange.cpp | 181 + src/guiVolumeChange.h | 51 + src/guiscalingfilter.cpp | 169 + src/guiscalingfilter.h | 52 + src/httpfetch.cpp | 796 +++ src/httpfetch.h | 130 + src/hud.cpp | 571 +++ src/hud.h | 159 + src/imagefilters.cpp | 172 + src/imagefilters.h | 46 + src/intlGUIEditBox.cpp | 1509 ++++++ src/intlGUIEditBox.h | 178 + src/inventory.cpp | 1068 ++++ src/inventory.h | 317 ++ src/inventorymanager.cpp | 923 ++++ src/inventorymanager.h | 262 + src/irr_aabb3d.h | 30 + src/irr_v2d.h | 34 + src/irr_v3d.h | 33 + src/irrlichttypes.h | 66 + src/irrlichttypes_bloated.h | 32 + src/irrlichttypes_extrabloated.h | 39 + src/itemdef.cpp | 657 +++ src/itemdef.h | 162 + src/itemgroup.h | 38 + src/json/CMakeLists.txt | 7 + src/json/UPDATING | 16 + src/json/json.h | 1914 +++++++ src/json/jsoncpp.cpp | 4367 ++++++++++++++++ src/keycode.cpp | 370 ++ src/keycode.h | 73 + src/light.cpp | 388 ++ src/light.h | 127 + src/localplayer.cpp | 624 +++ src/localplayer.h | 103 + src/log.cpp | 358 ++ src/log.h | 216 + src/lua/CMakeLists.txt | 77 + src/lua/COPYRIGHT | 34 + src/lua/src/CMakeLists.txt | 54 + src/lua/src/lapi.c | 1087 ++++ src/lua/src/lapi.h | 16 + src/lua/src/lauxlib.c | 653 +++ src/lua/src/lauxlib.h | 174 + src/lua/src/lbaselib.c | 653 +++ src/lua/src/lcode.c | 839 ++++ src/lua/src/lcode.h | 76 + src/lua/src/ldblib.c | 397 ++ src/lua/src/ldebug.c | 638 +++ src/lua/src/ldebug.h | 33 + src/lua/src/ldo.c | 518 ++ src/lua/src/ldo.h | 57 + src/lua/src/ldump.c | 164 + src/lua/src/lfunc.c | 174 + src/lua/src/lfunc.h | 34 + src/lua/src/lgc.c | 711 +++ src/lua/src/lgc.h | 110 + src/lua/src/linit.c | 38 + src/lua/src/liolib.c | 553 ++ src/lua/src/llex.c | 467 ++ src/lua/src/llex.h | 81 + src/lua/src/llimits.h | 128 + src/lua/src/lmathlib.c | 263 + src/lua/src/lmem.c | 86 + src/lua/src/lmem.h | 49 + src/lua/src/loadlib.c | 666 +++ src/lua/src/lobject.c | 214 + src/lua/src/lobject.h | 381 ++ src/lua/src/lopcodes.c | 102 + src/lua/src/lopcodes.h | 268 + src/lua/src/loslib.c | 243 + src/lua/src/lparser.c | 1339 +++++ src/lua/src/lparser.h | 82 + src/lua/src/lstate.c | 214 + src/lua/src/lstate.h | 169 + src/lua/src/lstring.c | 111 + src/lua/src/lstring.h | 31 + src/lua/src/lstrlib.c | 869 ++++ src/lua/src/ltable.c | 588 +++ src/lua/src/ltable.h | 40 + src/lua/src/ltablib.c | 287 ++ src/lua/src/ltm.c | 75 + src/lua/src/ltm.h | 54 + src/lua/src/lua.c | 392 ++ src/lua/src/lua.h | 388 ++ src/lua/src/luac.c | 200 + src/lua/src/luaconf.h | 763 +++ src/lua/src/lualib.h | 53 + src/lua/src/lundump.c | 227 + src/lua/src/lundump.h | 36 + src/lua/src/lvm.c | 763 +++ src/lua/src/lvm.h | 36 + src/lua/src/lzio.c | 82 + src/lua/src/lzio.h | 67 + src/lua/src/print.c | 227 + src/luaentity_common.h | 30 + src/main.cpp | 978 ++++ src/mainmenumanager.h | 185 + src/map.cpp | 3657 ++++++++++++++ src/map.h | 570 +++ src/mapblock.cpp | 1087 ++++ src/mapblock.h | 697 +++ src/mapblock_mesh.cpp | 1501 ++++++ src/mapblock_mesh.h | 221 + src/mapgen.cpp | 480 ++ src/mapgen.h | 198 + src/mapgen_flat.cpp | 582 +++ src/mapgen_flat.h | 125 + src/mapgen_fractal.cpp | 647 +++ src/mapgen_fractal.h | 132 + src/mapgen_singlenode.cpp | 101 + src/mapgen_singlenode.h | 56 + src/mapgen_v5.cpp | 591 +++ src/mapgen_v5.h | 114 + src/mapgen_v6.cpp | 1057 ++++ src/mapgen_v6.h | 178 + src/mapgen_v7.cpp | 890 ++++ src/mapgen_v7.h | 141 + src/mapnode.cpp | 705 +++ src/mapnode.h | 291 ++ src/mapsector.cpp | 262 + src/mapsector.h | 140 + src/mesh.cpp | 1089 ++++ src/mesh.h | 102 + src/mg_biome.cpp | 142 + src/mg_biome.h | 87 + src/mg_decoration.cpp | 371 ++ src/mg_decoration.h | 152 + src/mg_ore.cpp | 441 ++ src/mg_ore.h | 170 + src/mg_schematic.cpp | 584 +++ src/mg_schematic.h | 148 + src/minimap.cpp | 562 +++ src/minimap.h | 158 + src/modalMenu.h | 150 + src/modifiedstate.h | 37 + src/mods.cpp | 358 ++ src/mods.h | 208 + src/nameidmapping.cpp | 51 + src/nameidmapping.h | 82 + src/network/CMakeLists.txt | 16 + src/network/clientopcodes.cpp | 213 + src/network/clientopcodes.h | 52 + src/network/clientpackethandler.cpp | 1223 +++++ src/network/connection.cpp | 3097 ++++++++++++ src/network/connection.h | 1096 ++++ src/network/networkpacket.cpp | 520 ++ src/network/networkpacket.h | 131 + src/network/networkprotocol.h | 920 ++++ src/network/serveropcodes.cpp | 213 + src/network/serveropcodes.h | 52 + src/network/serverpackethandler.cpp | 2035 ++++++++ src/nodedef.cpp | 1539 ++++++ src/nodedef.h | 393 ++ src/nodemetadata.cpp | 233 + src/nodemetadata.h | 101 + src/nodetimer.cpp | 154 + src/nodetimer.h | 91 + src/noise.cpp | 799 +++ src/noise.h | 254 + src/objdef.cpp | 184 + src/objdef.h | 99 + src/object_properties.cpp | 155 + src/object_properties.h | 59 + src/particles.cpp | 573 +++ src/particles.h | 197 + src/pathfinder.cpp | 1073 ++++ src/pathfinder.h | 350 ++ src/player.cpp | 323 ++ src/player.h | 446 ++ src/porting.cpp | 746 +++ src/porting.h | 354 ++ src/porting_android.cpp | 293 ++ src/porting_android.h | 81 + src/profiler.cpp | 23 + src/profiler.h | 251 + src/quicktune.cpp | 105 + src/quicktune.h | 104 + src/quicktune_shortcutter.h | 88 + src/rollback.cpp | 952 ++++ src/rollback.h | 107 + src/rollback_interface.cpp | 238 + src/rollback_interface.h | 167 + src/script/CMakeLists.txt | 20 + src/script/common/CMakeLists.txt | 10 + src/script/common/c_content.cpp | 1239 +++++ src/script/common/c_content.h | 164 + src/script/common/c_converter.cpp | 639 +++ src/script/common/c_converter.h | 117 + src/script/common/c_internal.cpp | 192 + src/script/common/c_internal.h | 110 + src/script/common/c_types.cpp | 34 + src/script/common/c_types.h | 64 + src/script/cpp_api/CMakeLists.txt | 18 + src/script/cpp_api/s_async.cpp | 306 ++ src/script/cpp_api/s_async.h | 158 + src/script/cpp_api/s_base.cpp | 322 ++ src/script/cpp_api/s_base.h | 127 + src/script/cpp_api/s_entity.cpp | 290 ++ src/script/cpp_api/s_entity.h | 50 + src/script/cpp_api/s_env.cpp | 198 + src/script/cpp_api/s_env.h | 47 + src/script/cpp_api/s_internal.h | 86 + src/script/cpp_api/s_inventory.cpp | 249 + src/script/cpp_api/s_inventory.h | 71 + src/script/cpp_api/s_item.cpp | 249 + src/script/cpp_api/s_item.h | 60 + src/script/cpp_api/s_mainmenu.cpp | 95 + src/script/cpp_api/s_mainmenu.h | 48 + src/script/cpp_api/s_node.cpp | 273 + src/script/cpp_api/s_node.h | 63 + src/script/cpp_api/s_nodemeta.cpp | 243 + src/script/cpp_api/s_nodemeta.h | 67 + src/script/cpp_api/s_player.cpp | 197 + src/script/cpp_api/s_player.h | 52 + src/script/cpp_api/s_security.cpp | 604 +++ src/script/cpp_api/s_security.h | 70 + src/script/cpp_api/s_server.cpp | 160 + src/script/cpp_api/s_server.h | 52 + src/script/lua_api/CMakeLists.txt | 24 + src/script/lua_api/l_areastore.cpp | 402 ++ src/script/lua_api/l_areastore.h | 70 + src/script/lua_api/l_base.cpp | 78 + src/script/lua_api/l_base.h | 65 + src/script/lua_api/l_craft.cpp | 434 ++ src/script/lua_api/l_craft.h | 50 + src/script/lua_api/l_env.cpp | 1019 ++++ src/script/lua_api/l_env.h | 229 + src/script/lua_api/l_internal.h | 58 + src/script/lua_api/l_inventory.cpp | 542 ++ src/script/lua_api/l_inventory.h | 135 + src/script/lua_api/l_item.cpp | 576 +++ src/script/lua_api/l_item.h | 147 + src/script/lua_api/l_mainmenu.cpp | 1194 +++++ src/script/lua_api/l_mainmenu.h | 161 + src/script/lua_api/l_mapgen.cpp | 1402 ++++++ src/script/lua_api/l_mapgen.h | 110 + src/script/lua_api/l_nodemeta.cpp | 360 ++ src/script/lua_api/l_nodemeta.h | 103 + src/script/lua_api/l_nodetimer.cpp | 173 + src/script/lua_api/l_nodetimer.h | 67 + src/script/lua_api/l_noise.cpp | 717 +++ src/script/lua_api/l_noise.h | 196 + src/script/lua_api/l_object.cpp | 1774 +++++++ src/script/lua_api/l_object.h | 305 ++ src/script/lua_api/l_particles.cpp | 234 + src/script/lua_api/l_particles.h | 37 + src/script/lua_api/l_rollback.cpp | 117 + src/script/lua_api/l_rollback.h | 38 + src/script/lua_api/l_server.cpp | 541 ++ src/script/lua_api/l_server.h | 110 + src/script/lua_api/l_settings.cpp | 219 + src/script/lua_api/l_settings.h | 73 + src/script/lua_api/l_util.cpp | 433 ++ src/script/lua_api/l_util.h | 106 + src/script/lua_api/l_vmanip.cpp | 478 ++ src/script/lua_api/l_vmanip.h | 83 + src/script/scripting_game.cpp | 112 + src/script/scripting_game.h | 57 + src/script/scripting_mainmenu.cpp | 89 + src/script/scripting_mainmenu.h | 51 + src/serialization.cpp | 268 + src/serialization.h | 97 + src/server.cpp | 3553 +++++++++++++ src/server.h | 681 +++ src/serverlist.cpp | 263 + src/serverlist.h | 50 + src/serverobject.cpp | 101 + src/serverobject.h | 253 + src/settings.cpp | 1017 ++++ src/settings.h | 234 + src/settings_translation_file.cpp | 544 ++ src/shader.cpp | 870 ++++ src/shader.h | 113 + src/sky.cpp | 669 +++ src/sky.h | 141 + src/socket.cpp | 591 +++ src/socket.h | 141 + src/sound.cpp | 25 + src/sound.h | 101 + src/sound_openal.cpp | 616 +++ src/sound_openal.h | 28 + src/staticobject.cpp | 88 + src/staticobject.h | 104 + src/strfnd.h | 176 + src/subgame.cpp | 325 ++ src/subgame.h | 106 + src/terminal_chat_console.cpp | 452 ++ src/terminal_chat_console.h | 131 + src/threading/CMakeLists.txt | 6 + src/threading/atomic.h | 139 + src/threading/event.h | 57 + src/threading/mutex.cpp | 93 + src/threading/mutex.h | 69 + src/threading/mutex_auto_lock.h | 50 + src/threading/semaphore.cpp | 162 + src/threading/semaphore.h | 55 + src/threading/thread.cpp | 440 ++ src/threading/thread.h | 169 + src/threads.h | 94 + src/tool.cpp | 214 + src/tool.h | 146 + src/touchscreengui.cpp | 778 +++ src/touchscreengui.h | 170 + src/treegen.cpp | 879 ++++ src/treegen.h | 94 + src/unittest/CMakeLists.txt | 24 + src/unittest/test.cpp | 636 +++ src/unittest/test.h | 147 + src/unittest/test_areastore.cpp | 129 + src/unittest/test_collision.cpp | 180 + src/unittest/test_compression.cpp | 172 + src/unittest/test_connection.cpp | 348 ++ src/unittest/test_filepath.cpp | 261 + src/unittest/test_inventory.cpp | 143 + src/unittest/test_mapnode.cpp | 56 + src/unittest/test_nodedef.cpp | 66 + src/unittest/test_noderesolver.cpp | 208 + src/unittest/test_noise.cpp | 285 ++ src/unittest/test_objdef.cpp | 106 + src/unittest/test_profiler.cpp | 72 + src/unittest/test_random.cpp | 274 + src/unittest/test_schematic.cpp | 280 ++ src/unittest/test_serialization.cpp | 649 +++ src/unittest/test_settings.cpp | 204 + src/unittest/test_socket.cpp | 151 + src/unittest/test_threading.cpp | 182 + src/unittest/test_utilities.cpp | 309 ++ src/unittest/test_voxelalgorithms.cpp | 204 + src/unittest/test_voxelmanipulator.cpp | 108 + src/util/CMakeLists.txt | 14 + src/util/auth.cpp | 129 + src/util/auth.h | 37 + src/util/base64.cpp | 131 + src/util/base64.h | 10 + src/util/basic_macros.h | 53 + src/util/container.h | 307 ++ src/util/directiontables.cpp | 101 + src/util/directiontables.h | 34 + src/util/hex.h | 62 + src/util/mathconstants.h | 7 + src/util/md32_common.h | 428 ++ src/util/numeric.cpp | 251 + src/util/numeric.h | 419 ++ src/util/pointedthing.cpp | 126 + src/util/pointedthing.h | 51 + src/util/pointer.h | 308 ++ src/util/serialize.cpp | 637 +++ src/util/serialize.h | 645 +++ src/util/sha1.cpp | 207 + src/util/sha1.h | 51 + src/util/sha2.h | 154 + src/util/sha256.c | 404 ++ src/util/srp.cpp | 1082 ++++ src/util/srp.h | 194 + src/util/string.cpp | 735 +++ src/util/string.h | 512 ++ src/util/thread.h | 239 + src/util/timetaker.cpp | 71 + src/util/timetaker.h | 54 + src/version.cpp | 38 + src/version.h | 28 + src/voxel.cpp | 583 +++ src/voxel.h | 599 +++ src/voxelalgorithms.cpp | 157 + src/voxelalgorithms.h | 58 + src/wieldmesh.cpp | 438 ++ src/wieldmesh.h | 80 + textures/base/pack/blank.png | Bin 0 -> 95 bytes textures/base/pack/camera_btn.png | Bin 0 -> 729 bytes textures/base/pack/chat_btn.png | Bin 0 -> 399 bytes textures/base/pack/debug_btn.png | Bin 0 -> 895 bytes textures/base/pack/dirt_bg.png | Bin 0 -> 82 bytes textures/base/pack/down.png | Bin 0 -> 1328 bytes textures/base/pack/down_arrow.png | Bin 0 -> 373 bytes textures/base/pack/drop_btn.png | Bin 0 -> 539 bytes textures/base/pack/fast_btn.png | Bin 0 -> 875 bytes textures/base/pack/fly_btn.png | Bin 0 -> 720 bytes textures/base/pack/halo.png | Bin 0 -> 83 bytes textures/base/pack/inventory_btn.png | Bin 0 -> 343 bytes textures/base/pack/jump_btn.png | Bin 0 -> 434 bytes textures/base/pack/left_arrow.png | Bin 0 -> 400 bytes textures/base/pack/logo.png | Bin 0 -> 12188 bytes textures/base/pack/menu_header.png | Bin 0 -> 127202 bytes textures/base/pack/minimap_mask_round.png | Bin 0 -> 1858 bytes textures/base/pack/minimap_mask_square.png | Bin 0 -> 420 bytes textures/base/pack/minimap_overlay_round.png | Bin 0 -> 13105 bytes textures/base/pack/minimap_overlay_square.png | Bin 0 -> 1686 bytes textures/base/pack/no_screenshot.png | Bin 0 -> 140 bytes textures/base/pack/noclip_btn.png | Bin 0 -> 1087 bytes textures/base/pack/player_marker.png | Bin 0 -> 2178 bytes textures/base/pack/rangeview_btn.png | Bin 0 -> 1476 bytes textures/base/pack/right_arrow.png | Bin 0 -> 396 bytes textures/base/pack/server_flags_creative.png | Bin 0 -> 273 bytes textures/base/pack/server_flags_damage.png | Bin 0 -> 713 bytes textures/base/pack/server_flags_pvp.png | Bin 0 -> 1048 bytes textures/base/pack/smoke_puff.png | Bin 0 -> 1233 bytes textures/base/pack/sunrisebg.png | Bin 0 -> 4231 bytes textures/base/pack/unknown_item.png | Bin 0 -> 292 bytes textures/base/pack/unknown_node.png | Bin 0 -> 193 bytes textures/base/pack/unknown_object.png | Bin 0 -> 254 bytes textures/base/pack/up_arrow.png | Bin 0 -> 373 bytes textures/texture_packs_here.txt | 1 + util/buildbot/buildwin32.sh | 162 + util/buildbot/buildwin64.sh | 156 + util/buildbot/toolchain_mingw.cmake | 17 + util/buildbot/toolchain_mingw64.cmake | 17 + util/bump_version.sh | 121 + util/colors.txt | 78 + util/generate-texture-normals.sh | 255 + util/minetestmapper.py | 752 +++ util/sectors2sqlite.py | 132 + util/test_multiplayer.sh | 43 + util/travis/before_install.sh | 32 + util/travis/script.sh | 42 + util/travis/toolchain_mingw.cmake.in | 18 + util/updatepo.sh | 76 + util/wireshark/minetest.lua | 1329 +++++ 881 files changed, 325375 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .mailmap create mode 100644 .travis.yml create mode 100644 CMakeLists.txt create mode 100644 README.txt create mode 100644 build/android/AndroidManifest.xml.template create mode 100644 build/android/Makefile create mode 100644 build/android/build.xml create mode 100644 build/android/irrlicht-back_button.patch create mode 100644 build/android/irrlicht-texturehack.patch create mode 100644 build/android/irrlicht-touchcount.patch create mode 100644 build/android/jni/Android.mk create mode 100644 build/android/jni/Application.mk create mode 100644 build/android/libiconv_android.patch create mode 100644 build/android/libiconv_stdio.patch create mode 100644 build/android/libvorbis-libogg-fpu.patch create mode 100644 build/android/openssl_arch.patch create mode 100644 build/android/project.properties create mode 100644 build/android/res/drawable-hdpi/irr_icon.png create mode 100644 build/android/res/drawable-ldpi/irr_icon.png create mode 100644 build/android/res/drawable-mdpi/irr_icon.png create mode 100644 build/android/res/drawable-xhdpi/irr_icon.png create mode 100644 build/android/res/layout/assetcopy.xml create mode 100644 build/android/res/values/styles.xml create mode 100644 build/android/src/net/minetest/minetest/MinetestAssetCopy.java create mode 100644 build/android/src/net/minetest/minetest/MinetestTextEntry.java create mode 100644 build/android/src/net/minetest/minetest/MtNativeActivity.java create mode 100644 builtin/async/init.lua create mode 100644 builtin/common/async_event.lua create mode 100644 builtin/common/filterlist.lua create mode 100644 builtin/common/misc_helpers.lua create mode 100644 builtin/common/serialize.lua create mode 100644 builtin/common/strict.lua create mode 100644 builtin/common/vector.lua create mode 100644 builtin/fstk/buttonbar.lua create mode 100644 builtin/fstk/dialog.lua create mode 100644 builtin/fstk/tabview.lua create mode 100644 builtin/fstk/ui.lua create mode 100644 builtin/game/auth.lua create mode 100644 builtin/game/chatcommands.lua create mode 100644 builtin/game/constants.lua create mode 100644 builtin/game/deprecated.lua create mode 100644 builtin/game/detached_inventory.lua create mode 100644 builtin/game/falling.lua create mode 100644 builtin/game/features.lua create mode 100644 builtin/game/forceloading.lua create mode 100644 builtin/game/init.lua create mode 100644 builtin/game/item.lua create mode 100644 builtin/game/item_entity.lua create mode 100644 builtin/game/misc.lua create mode 100644 builtin/game/mod_profiling.lua create mode 100644 builtin/game/privileges.lua create mode 100644 builtin/game/register.lua create mode 100644 builtin/game/statbars.lua create mode 100644 builtin/game/static_spawn.lua create mode 100644 builtin/game/voxelarea.lua create mode 100644 builtin/init.lua create mode 100644 builtin/mainmenu/common.lua create mode 100644 builtin/mainmenu/dlg_config_world.lua create mode 100644 builtin/mainmenu/dlg_create_world.lua create mode 100644 builtin/mainmenu/dlg_delete_mod.lua create mode 100644 builtin/mainmenu/dlg_delete_world.lua create mode 100644 builtin/mainmenu/dlg_rename_modpack.lua create mode 100644 builtin/mainmenu/gamemgr.lua create mode 100644 builtin/mainmenu/init.lua create mode 100644 builtin/mainmenu/init_simple.lua create mode 100644 builtin/mainmenu/modmgr.lua create mode 100644 builtin/mainmenu/store.lua create mode 100644 builtin/mainmenu/tab_credits.lua create mode 100644 builtin/mainmenu/tab_mods.lua create mode 100644 builtin/mainmenu/tab_multiplayer.lua create mode 100644 builtin/mainmenu/tab_server.lua create mode 100644 builtin/mainmenu/tab_settings.lua create mode 100644 builtin/mainmenu/tab_simple_main.lua create mode 100644 builtin/mainmenu/tab_singleplayer.lua create mode 100644 builtin/mainmenu/tab_texturepacks.lua create mode 100644 builtin/mainmenu/textures.lua create mode 100644 builtin/settingtypes.txt create mode 100644 client/serverlist/.gitignore create mode 100644 client/shaders/minimap_shader/opengl_fragment.glsl create mode 100644 client/shaders/minimap_shader/opengl_vertex.glsl create mode 100644 client/shaders/nodes_shader/opengl_fragment.glsl create mode 100644 client/shaders/nodes_shader/opengl_vertex.glsl create mode 100644 client/shaders/water_surface_shader/opengl_fragment.glsl create mode 100644 client/shaders/water_surface_shader/opengl_vertex.glsl create mode 100644 client/shaders/wielded_shader/opengl_fragment.glsl create mode 100644 client/shaders/wielded_shader/opengl_vertex.glsl create mode 100644 cmake/Modules/FindCURL.cmake create mode 100644 cmake/Modules/FindGMP.cmake create mode 100644 cmake/Modules/FindGettextLib.cmake create mode 100644 cmake/Modules/FindIrrlicht.cmake create mode 100644 cmake/Modules/FindJson.cmake create mode 100644 cmake/Modules/FindLua.cmake create mode 100644 cmake/Modules/FindNcursesw.cmake create mode 100644 cmake/Modules/FindOpenGLES2.cmake create mode 100644 cmake/Modules/FindSQLite3.cmake create mode 100644 cmake/Modules/FindVorbis.cmake create mode 100644 cmake/Modules/GenerateVersion.cmake create mode 100644 doc/Doxyfile.in create mode 100644 doc/README.android create mode 100644 doc/fst_api.txt create mode 100644 doc/lgpl-2.1.txt create mode 100644 doc/lua_api.txt create mode 100644 doc/menu_lua_api.txt create mode 100644 doc/minetest.6 create mode 100644 doc/minetestserver.6 create mode 100644 doc/old/ancient_main_comment.txt create mode 100644 doc/old/changelog.txt create mode 100644 doc/protocol.txt create mode 100644 doc/texture_overrides.txt create mode 100644 doc/world_format.txt create mode 100644 fonts/DroidSansFallbackFull.ttf create mode 100644 fonts/liberationmono.ttf create mode 100644 fonts/liberationsans.ttf create mode 100755 fonts/lucida_sans_10.xml create mode 100755 fonts/lucida_sans_100.png create mode 100755 fonts/lucida_sans_11.xml create mode 100755 fonts/lucida_sans_110.png create mode 100755 fonts/lucida_sans_12.xml create mode 100755 fonts/lucida_sans_120.png create mode 100755 fonts/lucida_sans_14.xml create mode 100755 fonts/lucida_sans_140.png create mode 100755 fonts/lucida_sans_16.xml create mode 100755 fonts/lucida_sans_160.png create mode 100755 fonts/lucida_sans_18.xml create mode 100755 fonts/lucida_sans_180.png create mode 100755 fonts/lucida_sans_20.xml create mode 100755 fonts/lucida_sans_200.png create mode 100755 fonts/lucida_sans_22.xml create mode 100755 fonts/lucida_sans_220.png create mode 100755 fonts/lucida_sans_24.xml create mode 100755 fonts/lucida_sans_240.png create mode 100755 fonts/lucida_sans_26.xml create mode 100755 fonts/lucida_sans_260.png create mode 100755 fonts/lucida_sans_28.xml create mode 100755 fonts/lucida_sans_280.png create mode 100755 fonts/lucida_sans_36.xml create mode 100755 fonts/lucida_sans_360.png create mode 100755 fonts/lucida_sans_4.xml create mode 100755 fonts/lucida_sans_40.png create mode 100755 fonts/lucida_sans_48.xml create mode 100755 fonts/lucida_sans_480.png create mode 100755 fonts/lucida_sans_56.xml create mode 100755 fonts/lucida_sans_560.png create mode 100755 fonts/lucida_sans_6.xml create mode 100755 fonts/lucida_sans_60.png create mode 100755 fonts/lucida_sans_8.xml create mode 100755 fonts/lucida_sans_80.png create mode 100755 fonts/lucida_sans_9.xml create mode 100755 fonts/lucida_sans_90.png create mode 100755 fonts/mono_dejavu_sans_10.xml create mode 100755 fonts/mono_dejavu_sans_100.png create mode 100755 fonts/mono_dejavu_sans_11.xml create mode 100755 fonts/mono_dejavu_sans_110.png create mode 100755 fonts/mono_dejavu_sans_12.xml create mode 100755 fonts/mono_dejavu_sans_120.png create mode 100755 fonts/mono_dejavu_sans_14.xml create mode 100755 fonts/mono_dejavu_sans_140.png create mode 100755 fonts/mono_dejavu_sans_16.xml create mode 100755 fonts/mono_dejavu_sans_160.png create mode 100755 fonts/mono_dejavu_sans_18.xml create mode 100755 fonts/mono_dejavu_sans_180.png create mode 100755 fonts/mono_dejavu_sans_20.xml create mode 100755 fonts/mono_dejavu_sans_200.png create mode 100755 fonts/mono_dejavu_sans_22.xml create mode 100755 fonts/mono_dejavu_sans_220.png create mode 100755 fonts/mono_dejavu_sans_24.xml create mode 100755 fonts/mono_dejavu_sans_240.png create mode 100755 fonts/mono_dejavu_sans_26.xml create mode 100755 fonts/mono_dejavu_sans_260.png create mode 100755 fonts/mono_dejavu_sans_28.xml create mode 100755 fonts/mono_dejavu_sans_280.png create mode 100755 fonts/mono_dejavu_sans_4.xml create mode 100755 fonts/mono_dejavu_sans_40.png create mode 100755 fonts/mono_dejavu_sans_6.xml create mode 100755 fonts/mono_dejavu_sans_60.png create mode 100755 fonts/mono_dejavu_sans_8.xml create mode 100755 fonts/mono_dejavu_sans_80.png create mode 100755 fonts/mono_dejavu_sans_9.xml create mode 100755 fonts/mono_dejavu_sans_90.png create mode 100644 games/minimal/game.conf create mode 100644 games/minimal/menu/background.png create mode 100644 games/minimal/menu/icon.png create mode 100644 games/minimal/mods/bucket/depends.txt create mode 100644 games/minimal/mods/bucket/init.lua create mode 100644 games/minimal/mods/bucket/textures/bucket.png create mode 100644 games/minimal/mods/bucket/textures/bucket_lava.png create mode 100644 games/minimal/mods/bucket/textures/bucket_water.png create mode 100644 games/minimal/mods/default/init.lua create mode 100644 games/minimal/mods/default/mapgen.lua create mode 100644 games/minimal/mods/default/sounds/default_grass_footstep.1.ogg create mode 100644 games/minimal/mods/default/textures/bubble.png create mode 100644 games/minimal/mods/default/textures/crack_anylength.png create mode 100644 games/minimal/mods/default/textures/default_apple.png create mode 100644 games/minimal/mods/default/textures/default_book.png create mode 100644 games/minimal/mods/default/textures/default_bookshelf.png create mode 100644 games/minimal/mods/default/textures/default_brick.png create mode 100644 games/minimal/mods/default/textures/default_cactus_side.png create mode 100644 games/minimal/mods/default/textures/default_cactus_top.png create mode 100644 games/minimal/mods/default/textures/default_chest_front.png create mode 100644 games/minimal/mods/default/textures/default_chest_lock.png create mode 100644 games/minimal/mods/default/textures/default_chest_side.png create mode 100644 games/minimal/mods/default/textures/default_chest_top.png create mode 100644 games/minimal/mods/default/textures/default_clay.png create mode 100644 games/minimal/mods/default/textures/default_clay_brick.png create mode 100644 games/minimal/mods/default/textures/default_clay_lump.png create mode 100644 games/minimal/mods/default/textures/default_cloud.png create mode 100644 games/minimal/mods/default/textures/default_coal_lump.png create mode 100644 games/minimal/mods/default/textures/default_cobble.png create mode 100644 games/minimal/mods/default/textures/default_dirt.png create mode 100644 games/minimal/mods/default/textures/default_fence.png create mode 100644 games/minimal/mods/default/textures/default_furnace_fire_bg.png create mode 100644 games/minimal/mods/default/textures/default_furnace_fire_fg.png create mode 100644 games/minimal/mods/default/textures/default_furnace_front.png create mode 100644 games/minimal/mods/default/textures/default_furnace_front_active.png create mode 100644 games/minimal/mods/default/textures/default_furnace_side.png create mode 100644 games/minimal/mods/default/textures/default_glass.png create mode 100644 games/minimal/mods/default/textures/default_grass.png create mode 100644 games/minimal/mods/default/textures/default_grass_footsteps.png create mode 100644 games/minimal/mods/default/textures/default_grass_side.png create mode 100644 games/minimal/mods/default/textures/default_gravel.png create mode 100644 games/minimal/mods/default/textures/default_iron_lump.png create mode 100644 games/minimal/mods/default/textures/default_junglegrass.png create mode 100644 games/minimal/mods/default/textures/default_ladder.png create mode 100644 games/minimal/mods/default/textures/default_lava.png create mode 100644 games/minimal/mods/default/textures/default_lava_flowing_animated.png create mode 100644 games/minimal/mods/default/textures/default_lava_source_animated.png create mode 100644 games/minimal/mods/default/textures/default_leaves.png create mode 100644 games/minimal/mods/default/textures/default_mese.png create mode 100644 games/minimal/mods/default/textures/default_mineral_coal.png create mode 100644 games/minimal/mods/default/textures/default_mineral_iron.png create mode 100644 games/minimal/mods/default/textures/default_mossycobble.png create mode 100644 games/minimal/mods/default/textures/default_nc_back.png create mode 100644 games/minimal/mods/default/textures/default_nc_front.png create mode 100644 games/minimal/mods/default/textures/default_nc_rb.png create mode 100644 games/minimal/mods/default/textures/default_nc_side.png create mode 100644 games/minimal/mods/default/textures/default_paper.png create mode 100644 games/minimal/mods/default/textures/default_papyrus.png create mode 100644 games/minimal/mods/default/textures/default_rail.png create mode 100644 games/minimal/mods/default/textures/default_rail_crossing.png create mode 100644 games/minimal/mods/default/textures/default_rail_curved.png create mode 100644 games/minimal/mods/default/textures/default_rail_t_junction.png create mode 100644 games/minimal/mods/default/textures/default_sand.png create mode 100644 games/minimal/mods/default/textures/default_sandstone.png create mode 100644 games/minimal/mods/default/textures/default_sapling.png create mode 100644 games/minimal/mods/default/textures/default_scorched_stuff.png create mode 100644 games/minimal/mods/default/textures/default_sign_wall.png create mode 100644 games/minimal/mods/default/textures/default_steel_block.png create mode 100644 games/minimal/mods/default/textures/default_steel_ingot.png create mode 100644 games/minimal/mods/default/textures/default_stick.png create mode 100644 games/minimal/mods/default/textures/default_stone.png create mode 100644 games/minimal/mods/default/textures/default_tnt_bottom.png create mode 100644 games/minimal/mods/default/textures/default_tnt_side.png create mode 100644 games/minimal/mods/default/textures/default_tnt_top.png create mode 100644 games/minimal/mods/default/textures/default_tool_mesepick.png create mode 100644 games/minimal/mods/default/textures/default_tool_steelaxe.png create mode 100644 games/minimal/mods/default/textures/default_tool_steelpick.png create mode 100644 games/minimal/mods/default/textures/default_tool_steelshovel.png create mode 100644 games/minimal/mods/default/textures/default_tool_steelsword.png create mode 100644 games/minimal/mods/default/textures/default_tool_stoneaxe.png create mode 100644 games/minimal/mods/default/textures/default_tool_stonepick.png create mode 100644 games/minimal/mods/default/textures/default_tool_stoneshovel.png create mode 100644 games/minimal/mods/default/textures/default_tool_stonesword.png create mode 100644 games/minimal/mods/default/textures/default_tool_woodaxe.png create mode 100644 games/minimal/mods/default/textures/default_tool_woodpick.png create mode 100644 games/minimal/mods/default/textures/default_tool_woodshovel.png create mode 100644 games/minimal/mods/default/textures/default_tool_woodsword.png create mode 100644 games/minimal/mods/default/textures/default_torch.png create mode 100644 games/minimal/mods/default/textures/default_torch_on_ceiling.png create mode 100644 games/minimal/mods/default/textures/default_torch_on_floor.png create mode 100644 games/minimal/mods/default/textures/default_tree.png create mode 100644 games/minimal/mods/default/textures/default_tree_top.png create mode 100644 games/minimal/mods/default/textures/default_water.png create mode 100644 games/minimal/mods/default/textures/default_wood.png create mode 100644 games/minimal/mods/default/textures/heart.png create mode 100644 games/minimal/mods/default/textures/player.png create mode 100644 games/minimal/mods/default/textures/player_back.png create mode 100644 games/minimal/mods/default/textures/treeprop.png create mode 100644 games/minimal/mods/default/textures/wieldhand.png create mode 100644 games/minimal/mods/errorhandler_test/init.lua create mode 100644 games/minimal/mods/experimental/depends.txt create mode 100644 games/minimal/mods/experimental/init.lua create mode 100644 games/minimal/mods/experimental/textures/experimental_dummyball.png create mode 100644 games/minimal/mods/experimental/textures/experimental_tester_tool_1.png create mode 100644 games/minimal/mods/give_initial_stuff/depends.txt create mode 100644 games/minimal/mods/give_initial_stuff/init.lua create mode 100644 games/minimal/mods/legacy/depends.txt create mode 100644 games/minimal/mods/legacy/init.lua create mode 100644 games/minimal/mods/legacy/textures/apple_iron.png create mode 100644 games/minimal/mods/legacy/textures/cooked_rat.png create mode 100644 games/minimal/mods/legacy/textures/dungeon_master.png create mode 100644 games/minimal/mods/legacy/textures/fireball.png create mode 100644 games/minimal/mods/legacy/textures/firefly.png create mode 100644 games/minimal/mods/legacy/textures/oerkki1.png create mode 100644 games/minimal/mods/legacy/textures/oerkki1_damaged.png create mode 100644 games/minimal/mods/legacy/textures/rat.png create mode 100644 games/minimal/mods/stairs/depends.txt create mode 100644 games/minimal/mods/stairs/init.lua create mode 100644 games/minimal/mods/test/init.lua create mode 100644 minetest.conf.example create mode 100644 misc/Info.plist create mode 100644 misc/minetest-icon-24x24.png create mode 100644 misc/minetest-icon.icns create mode 100644 misc/minetest-icon.ico create mode 100644 misc/minetest.appdata.xml create mode 100644 misc/minetest.desktop create mode 100644 misc/minetest.svg create mode 100644 misc/winresource.rc create mode 100644 mods/mods_here.txt create mode 100644 po/be/minetest.po create mode 100644 po/ca/minetest.po create mode 100644 po/cs/minetest.po create mode 100644 po/da/minetest.po create mode 100644 po/de/minetest.po create mode 100644 po/eo/minetest.po create mode 100644 po/es/minetest.po create mode 100644 po/et/minetest.po create mode 100644 po/fr/minetest.po create mode 100644 po/he/minetest.po create mode 100644 po/hu/minetest.po create mode 100644 po/id/minetest.po create mode 100644 po/it/minetest.po create mode 100644 po/ja/minetest.po create mode 100644 po/jbo/minetest.po create mode 100644 po/ko/minetest.po create mode 100644 po/ky/minetest.po create mode 100644 po/lt/minetest.po create mode 100644 po/minetest.pot create mode 100644 po/nb/minetest.po create mode 100644 po/nl/minetest.po create mode 100644 po/pl/minetest.po create mode 100644 po/pt/minetest.po create mode 100644 po/pt_BR/minetest.po create mode 100644 po/ro/minetest.po create mode 100644 po/ru/minetest.po create mode 100644 po/tr/minetest.po create mode 100644 po/uk/minetest.po create mode 100644 po/zh_CN/minetest.po create mode 100644 po/zh_TW/minetest.po create mode 100644 src/CMakeLists.txt create mode 100644 src/activeobject.h create mode 100644 src/areastore.cpp create mode 100644 src/areastore.h create mode 100644 src/ban.cpp create mode 100644 src/ban.h create mode 100644 src/camera.cpp create mode 100644 src/camera.h create mode 100644 src/cavegen.cpp create mode 100644 src/cavegen.h create mode 100644 src/cguittfont/CGUITTFont.cpp create mode 100644 src/cguittfont/CGUITTFont.h create mode 100644 src/cguittfont/CMakeLists.txt create mode 100644 src/cguittfont/irrUString.h create mode 100644 src/cguittfont/xCGUITTFont.cpp create mode 100644 src/cguittfont/xCGUITTFont.h create mode 100644 src/chat.cpp create mode 100644 src/chat.h create mode 100644 src/chat_interface.h create mode 100644 src/client.cpp create mode 100644 src/client.h create mode 100644 src/client/CMakeLists.txt create mode 100644 src/client/clientlauncher.cpp create mode 100644 src/client/clientlauncher.h create mode 100644 src/client/inputhandler.h create mode 100644 src/client/tile.cpp create mode 100644 src/client/tile.h create mode 100644 src/clientiface.cpp create mode 100644 src/clientiface.h create mode 100644 src/clientmap.cpp create mode 100644 src/clientmap.h create mode 100644 src/clientmedia.cpp create mode 100644 src/clientmedia.h create mode 100644 src/clientobject.cpp create mode 100644 src/clientobject.h create mode 100644 src/clientsimpleobject.h create mode 100644 src/clouds.cpp create mode 100644 src/clouds.h create mode 100644 src/cmake_config.h.in create mode 100644 src/cmake_config_githash.h.in create mode 100644 src/collision.cpp create mode 100644 src/collision.h create mode 100644 src/config.h create mode 100644 src/constants.h create mode 100644 src/content_abm.cpp create mode 100644 src/content_abm.h create mode 100644 src/content_cao.cpp create mode 100644 src/content_cao.h create mode 100644 src/content_cso.cpp create mode 100644 src/content_cso.h create mode 100644 src/content_mapblock.cpp create mode 100644 src/content_mapblock.h create mode 100644 src/content_mapnode.cpp create mode 100644 src/content_mapnode.h create mode 100644 src/content_nodemeta.cpp create mode 100644 src/content_nodemeta.h create mode 100644 src/content_sao.cpp create mode 100644 src/content_sao.h create mode 100644 src/convert_json.cpp create mode 100644 src/convert_json.h create mode 100644 src/craftdef.cpp create mode 100644 src/craftdef.h create mode 100644 src/database-dummy.cpp create mode 100644 src/database-dummy.h create mode 100644 src/database-leveldb.cpp create mode 100644 src/database-leveldb.h create mode 100644 src/database-postgresql.cpp create mode 100644 src/database-postgresql.h create mode 100644 src/database-redis.cpp create mode 100644 src/database-redis.h create mode 100644 src/database-sqlite3.cpp create mode 100644 src/database-sqlite3.h create mode 100644 src/database.cpp create mode 100644 src/database.h create mode 100644 src/daynightratio.h create mode 100644 src/debug.cpp create mode 100644 src/debug.h create mode 100644 src/defaultsettings.cpp create mode 100644 src/defaultsettings.h create mode 100644 src/drawscene.cpp create mode 100644 src/drawscene.h create mode 100644 src/dungeongen.cpp create mode 100644 src/dungeongen.h create mode 100644 src/emerge.cpp create mode 100644 src/emerge.h create mode 100644 src/environment.cpp create mode 100644 src/environment.h create mode 100644 src/event.h create mode 100644 src/event_manager.h create mode 100644 src/exceptions.h create mode 100644 src/filecache.cpp create mode 100644 src/filecache.h create mode 100644 src/filesys.cpp create mode 100644 src/filesys.h create mode 100644 src/fontengine.cpp create mode 100644 src/fontengine.h create mode 100644 src/game.cpp create mode 100644 src/game.h create mode 100644 src/gamedef.h create mode 100644 src/gameparams.h create mode 100644 src/genericobject.cpp create mode 100644 src/genericobject.h create mode 100644 src/gettext.cpp create mode 100644 src/gettext.h create mode 100644 src/gettime.h create mode 100644 src/gmp/CMakeLists.txt create mode 100644 src/gmp/mini-gmp.c create mode 100644 src/gmp/mini-gmp.h create mode 100644 src/guiChatConsole.cpp create mode 100644 src/guiChatConsole.h create mode 100644 src/guiEngine.cpp create mode 100644 src/guiEngine.h create mode 100644 src/guiFileSelectMenu.cpp create mode 100644 src/guiFileSelectMenu.h create mode 100644 src/guiFormSpecMenu.cpp create mode 100644 src/guiFormSpecMenu.h create mode 100644 src/guiKeyChangeMenu.cpp create mode 100644 src/guiKeyChangeMenu.h create mode 100644 src/guiMainMenu.h create mode 100644 src/guiPasswordChange.cpp create mode 100644 src/guiPasswordChange.h create mode 100644 src/guiTable.cpp create mode 100644 src/guiTable.h create mode 100644 src/guiVolumeChange.cpp create mode 100644 src/guiVolumeChange.h create mode 100644 src/guiscalingfilter.cpp create mode 100644 src/guiscalingfilter.h create mode 100644 src/httpfetch.cpp create mode 100644 src/httpfetch.h create mode 100644 src/hud.cpp create mode 100644 src/hud.h create mode 100644 src/imagefilters.cpp create mode 100644 src/imagefilters.h create mode 100644 src/intlGUIEditBox.cpp create mode 100644 src/intlGUIEditBox.h create mode 100644 src/inventory.cpp create mode 100644 src/inventory.h create mode 100644 src/inventorymanager.cpp create mode 100644 src/inventorymanager.h create mode 100644 src/irr_aabb3d.h create mode 100644 src/irr_v2d.h create mode 100644 src/irr_v3d.h create mode 100644 src/irrlichttypes.h create mode 100644 src/irrlichttypes_bloated.h create mode 100644 src/irrlichttypes_extrabloated.h create mode 100644 src/itemdef.cpp create mode 100644 src/itemdef.h create mode 100644 src/itemgroup.h create mode 100644 src/json/CMakeLists.txt create mode 100644 src/json/UPDATING create mode 100644 src/json/json.h create mode 100644 src/json/jsoncpp.cpp create mode 100644 src/keycode.cpp create mode 100644 src/keycode.h create mode 100644 src/light.cpp create mode 100644 src/light.h create mode 100644 src/localplayer.cpp create mode 100644 src/localplayer.h create mode 100644 src/log.cpp create mode 100644 src/log.h create mode 100644 src/lua/CMakeLists.txt create mode 100644 src/lua/COPYRIGHT create mode 100644 src/lua/src/CMakeLists.txt create mode 100644 src/lua/src/lapi.c create mode 100644 src/lua/src/lapi.h create mode 100644 src/lua/src/lauxlib.c create mode 100644 src/lua/src/lauxlib.h create mode 100644 src/lua/src/lbaselib.c create mode 100644 src/lua/src/lcode.c create mode 100644 src/lua/src/lcode.h create mode 100644 src/lua/src/ldblib.c create mode 100644 src/lua/src/ldebug.c create mode 100644 src/lua/src/ldebug.h create mode 100644 src/lua/src/ldo.c create mode 100644 src/lua/src/ldo.h create mode 100644 src/lua/src/ldump.c create mode 100644 src/lua/src/lfunc.c create mode 100644 src/lua/src/lfunc.h create mode 100644 src/lua/src/lgc.c create mode 100644 src/lua/src/lgc.h create mode 100644 src/lua/src/linit.c create mode 100644 src/lua/src/liolib.c create mode 100644 src/lua/src/llex.c create mode 100644 src/lua/src/llex.h create mode 100644 src/lua/src/llimits.h create mode 100644 src/lua/src/lmathlib.c create mode 100644 src/lua/src/lmem.c create mode 100644 src/lua/src/lmem.h create mode 100644 src/lua/src/loadlib.c create mode 100644 src/lua/src/lobject.c create mode 100644 src/lua/src/lobject.h create mode 100644 src/lua/src/lopcodes.c create mode 100644 src/lua/src/lopcodes.h create mode 100644 src/lua/src/loslib.c create mode 100644 src/lua/src/lparser.c create mode 100644 src/lua/src/lparser.h create mode 100644 src/lua/src/lstate.c create mode 100644 src/lua/src/lstate.h create mode 100644 src/lua/src/lstring.c create mode 100644 src/lua/src/lstring.h create mode 100644 src/lua/src/lstrlib.c create mode 100644 src/lua/src/ltable.c create mode 100644 src/lua/src/ltable.h create mode 100644 src/lua/src/ltablib.c create mode 100644 src/lua/src/ltm.c create mode 100644 src/lua/src/ltm.h create mode 100644 src/lua/src/lua.c create mode 100644 src/lua/src/lua.h create mode 100644 src/lua/src/luac.c create mode 100644 src/lua/src/luaconf.h create mode 100644 src/lua/src/lualib.h create mode 100644 src/lua/src/lundump.c create mode 100644 src/lua/src/lundump.h create mode 100644 src/lua/src/lvm.c create mode 100644 src/lua/src/lvm.h create mode 100644 src/lua/src/lzio.c create mode 100644 src/lua/src/lzio.h create mode 100644 src/lua/src/print.c create mode 100644 src/luaentity_common.h create mode 100644 src/main.cpp create mode 100644 src/mainmenumanager.h create mode 100644 src/map.cpp create mode 100644 src/map.h create mode 100644 src/mapblock.cpp create mode 100644 src/mapblock.h create mode 100644 src/mapblock_mesh.cpp create mode 100644 src/mapblock_mesh.h create mode 100644 src/mapgen.cpp create mode 100644 src/mapgen.h create mode 100644 src/mapgen_flat.cpp create mode 100644 src/mapgen_flat.h create mode 100644 src/mapgen_fractal.cpp create mode 100644 src/mapgen_fractal.h create mode 100644 src/mapgen_singlenode.cpp create mode 100644 src/mapgen_singlenode.h create mode 100644 src/mapgen_v5.cpp create mode 100644 src/mapgen_v5.h create mode 100644 src/mapgen_v6.cpp create mode 100644 src/mapgen_v6.h create mode 100644 src/mapgen_v7.cpp create mode 100644 src/mapgen_v7.h create mode 100644 src/mapnode.cpp create mode 100644 src/mapnode.h create mode 100644 src/mapsector.cpp create mode 100644 src/mapsector.h create mode 100644 src/mesh.cpp create mode 100644 src/mesh.h create mode 100644 src/mg_biome.cpp create mode 100644 src/mg_biome.h create mode 100644 src/mg_decoration.cpp create mode 100644 src/mg_decoration.h create mode 100644 src/mg_ore.cpp create mode 100644 src/mg_ore.h create mode 100644 src/mg_schematic.cpp create mode 100644 src/mg_schematic.h create mode 100644 src/minimap.cpp create mode 100644 src/minimap.h create mode 100644 src/modalMenu.h create mode 100644 src/modifiedstate.h create mode 100644 src/mods.cpp create mode 100644 src/mods.h create mode 100644 src/nameidmapping.cpp create mode 100644 src/nameidmapping.h create mode 100644 src/network/CMakeLists.txt create mode 100644 src/network/clientopcodes.cpp create mode 100644 src/network/clientopcodes.h create mode 100644 src/network/clientpackethandler.cpp create mode 100644 src/network/connection.cpp create mode 100644 src/network/connection.h create mode 100644 src/network/networkpacket.cpp create mode 100644 src/network/networkpacket.h create mode 100644 src/network/networkprotocol.h create mode 100644 src/network/serveropcodes.cpp create mode 100644 src/network/serveropcodes.h create mode 100644 src/network/serverpackethandler.cpp create mode 100644 src/nodedef.cpp create mode 100644 src/nodedef.h create mode 100644 src/nodemetadata.cpp create mode 100644 src/nodemetadata.h create mode 100644 src/nodetimer.cpp create mode 100644 src/nodetimer.h create mode 100644 src/noise.cpp create mode 100644 src/noise.h create mode 100644 src/objdef.cpp create mode 100644 src/objdef.h create mode 100644 src/object_properties.cpp create mode 100644 src/object_properties.h create mode 100644 src/particles.cpp create mode 100644 src/particles.h create mode 100644 src/pathfinder.cpp create mode 100644 src/pathfinder.h create mode 100644 src/player.cpp create mode 100644 src/player.h create mode 100644 src/porting.cpp create mode 100644 src/porting.h create mode 100644 src/porting_android.cpp create mode 100644 src/porting_android.h create mode 100644 src/profiler.cpp create mode 100644 src/profiler.h create mode 100644 src/quicktune.cpp create mode 100644 src/quicktune.h create mode 100644 src/quicktune_shortcutter.h create mode 100644 src/rollback.cpp create mode 100644 src/rollback.h create mode 100644 src/rollback_interface.cpp create mode 100644 src/rollback_interface.h create mode 100644 src/script/CMakeLists.txt create mode 100644 src/script/common/CMakeLists.txt create mode 100644 src/script/common/c_content.cpp create mode 100644 src/script/common/c_content.h create mode 100644 src/script/common/c_converter.cpp create mode 100644 src/script/common/c_converter.h create mode 100644 src/script/common/c_internal.cpp create mode 100644 src/script/common/c_internal.h create mode 100644 src/script/common/c_types.cpp create mode 100644 src/script/common/c_types.h create mode 100644 src/script/cpp_api/CMakeLists.txt create mode 100644 src/script/cpp_api/s_async.cpp create mode 100644 src/script/cpp_api/s_async.h create mode 100644 src/script/cpp_api/s_base.cpp create mode 100644 src/script/cpp_api/s_base.h create mode 100644 src/script/cpp_api/s_entity.cpp create mode 100644 src/script/cpp_api/s_entity.h create mode 100644 src/script/cpp_api/s_env.cpp create mode 100644 src/script/cpp_api/s_env.h create mode 100644 src/script/cpp_api/s_internal.h create mode 100644 src/script/cpp_api/s_inventory.cpp create mode 100644 src/script/cpp_api/s_inventory.h create mode 100644 src/script/cpp_api/s_item.cpp create mode 100644 src/script/cpp_api/s_item.h create mode 100644 src/script/cpp_api/s_mainmenu.cpp create mode 100644 src/script/cpp_api/s_mainmenu.h create mode 100644 src/script/cpp_api/s_node.cpp create mode 100644 src/script/cpp_api/s_node.h create mode 100644 src/script/cpp_api/s_nodemeta.cpp create mode 100644 src/script/cpp_api/s_nodemeta.h create mode 100644 src/script/cpp_api/s_player.cpp create mode 100644 src/script/cpp_api/s_player.h create mode 100644 src/script/cpp_api/s_security.cpp create mode 100644 src/script/cpp_api/s_security.h create mode 100644 src/script/cpp_api/s_server.cpp create mode 100644 src/script/cpp_api/s_server.h create mode 100644 src/script/lua_api/CMakeLists.txt create mode 100644 src/script/lua_api/l_areastore.cpp create mode 100644 src/script/lua_api/l_areastore.h create mode 100644 src/script/lua_api/l_base.cpp create mode 100644 src/script/lua_api/l_base.h create mode 100644 src/script/lua_api/l_craft.cpp create mode 100644 src/script/lua_api/l_craft.h create mode 100644 src/script/lua_api/l_env.cpp create mode 100644 src/script/lua_api/l_env.h create mode 100644 src/script/lua_api/l_internal.h create mode 100644 src/script/lua_api/l_inventory.cpp create mode 100644 src/script/lua_api/l_inventory.h create mode 100644 src/script/lua_api/l_item.cpp create mode 100644 src/script/lua_api/l_item.h create mode 100644 src/script/lua_api/l_mainmenu.cpp create mode 100644 src/script/lua_api/l_mainmenu.h create mode 100644 src/script/lua_api/l_mapgen.cpp create mode 100644 src/script/lua_api/l_mapgen.h create mode 100644 src/script/lua_api/l_nodemeta.cpp create mode 100644 src/script/lua_api/l_nodemeta.h create mode 100644 src/script/lua_api/l_nodetimer.cpp create mode 100644 src/script/lua_api/l_nodetimer.h create mode 100644 src/script/lua_api/l_noise.cpp create mode 100644 src/script/lua_api/l_noise.h create mode 100644 src/script/lua_api/l_object.cpp create mode 100644 src/script/lua_api/l_object.h create mode 100644 src/script/lua_api/l_particles.cpp create mode 100644 src/script/lua_api/l_particles.h create mode 100644 src/script/lua_api/l_rollback.cpp create mode 100644 src/script/lua_api/l_rollback.h create mode 100644 src/script/lua_api/l_server.cpp create mode 100644 src/script/lua_api/l_server.h create mode 100644 src/script/lua_api/l_settings.cpp create mode 100644 src/script/lua_api/l_settings.h create mode 100644 src/script/lua_api/l_util.cpp create mode 100644 src/script/lua_api/l_util.h create mode 100644 src/script/lua_api/l_vmanip.cpp create mode 100644 src/script/lua_api/l_vmanip.h create mode 100644 src/script/scripting_game.cpp create mode 100644 src/script/scripting_game.h create mode 100644 src/script/scripting_mainmenu.cpp create mode 100644 src/script/scripting_mainmenu.h create mode 100644 src/serialization.cpp create mode 100644 src/serialization.h create mode 100644 src/server.cpp create mode 100644 src/server.h create mode 100644 src/serverlist.cpp create mode 100644 src/serverlist.h create mode 100644 src/serverobject.cpp create mode 100644 src/serverobject.h create mode 100644 src/settings.cpp create mode 100644 src/settings.h create mode 100644 src/settings_translation_file.cpp create mode 100644 src/shader.cpp create mode 100644 src/shader.h create mode 100644 src/sky.cpp create mode 100644 src/sky.h create mode 100644 src/socket.cpp create mode 100644 src/socket.h create mode 100644 src/sound.cpp create mode 100644 src/sound.h create mode 100644 src/sound_openal.cpp create mode 100644 src/sound_openal.h create mode 100644 src/staticobject.cpp create mode 100644 src/staticobject.h create mode 100644 src/strfnd.h create mode 100644 src/subgame.cpp create mode 100644 src/subgame.h create mode 100644 src/terminal_chat_console.cpp create mode 100644 src/terminal_chat_console.h create mode 100644 src/threading/CMakeLists.txt create mode 100644 src/threading/atomic.h create mode 100644 src/threading/event.h create mode 100644 src/threading/mutex.cpp create mode 100644 src/threading/mutex.h create mode 100644 src/threading/mutex_auto_lock.h create mode 100644 src/threading/semaphore.cpp create mode 100644 src/threading/semaphore.h create mode 100644 src/threading/thread.cpp create mode 100644 src/threading/thread.h create mode 100644 src/threads.h create mode 100644 src/tool.cpp create mode 100644 src/tool.h create mode 100644 src/touchscreengui.cpp create mode 100644 src/touchscreengui.h create mode 100644 src/treegen.cpp create mode 100644 src/treegen.h create mode 100644 src/unittest/CMakeLists.txt create mode 100644 src/unittest/test.cpp create mode 100644 src/unittest/test.h create mode 100644 src/unittest/test_areastore.cpp create mode 100644 src/unittest/test_collision.cpp create mode 100644 src/unittest/test_compression.cpp create mode 100644 src/unittest/test_connection.cpp create mode 100644 src/unittest/test_filepath.cpp create mode 100644 src/unittest/test_inventory.cpp create mode 100644 src/unittest/test_mapnode.cpp create mode 100644 src/unittest/test_nodedef.cpp create mode 100644 src/unittest/test_noderesolver.cpp create mode 100644 src/unittest/test_noise.cpp create mode 100644 src/unittest/test_objdef.cpp create mode 100644 src/unittest/test_profiler.cpp create mode 100644 src/unittest/test_random.cpp create mode 100644 src/unittest/test_schematic.cpp create mode 100644 src/unittest/test_serialization.cpp create mode 100644 src/unittest/test_settings.cpp create mode 100644 src/unittest/test_socket.cpp create mode 100644 src/unittest/test_threading.cpp create mode 100644 src/unittest/test_utilities.cpp create mode 100644 src/unittest/test_voxelalgorithms.cpp create mode 100644 src/unittest/test_voxelmanipulator.cpp create mode 100644 src/util/CMakeLists.txt create mode 100644 src/util/auth.cpp create mode 100644 src/util/auth.h create mode 100644 src/util/base64.cpp create mode 100644 src/util/base64.h create mode 100644 src/util/basic_macros.h create mode 100644 src/util/container.h create mode 100644 src/util/directiontables.cpp create mode 100644 src/util/directiontables.h create mode 100644 src/util/hex.h create mode 100644 src/util/mathconstants.h create mode 100644 src/util/md32_common.h create mode 100644 src/util/numeric.cpp create mode 100644 src/util/numeric.h create mode 100644 src/util/pointedthing.cpp create mode 100644 src/util/pointedthing.h create mode 100644 src/util/pointer.h create mode 100644 src/util/serialize.cpp create mode 100644 src/util/serialize.h create mode 100644 src/util/sha1.cpp create mode 100644 src/util/sha1.h create mode 100644 src/util/sha2.h create mode 100644 src/util/sha256.c create mode 100644 src/util/srp.cpp create mode 100644 src/util/srp.h create mode 100644 src/util/string.cpp create mode 100644 src/util/string.h create mode 100644 src/util/thread.h create mode 100644 src/util/timetaker.cpp create mode 100644 src/util/timetaker.h create mode 100644 src/version.cpp create mode 100644 src/version.h create mode 100644 src/voxel.cpp create mode 100644 src/voxel.h create mode 100644 src/voxelalgorithms.cpp create mode 100644 src/voxelalgorithms.h create mode 100644 src/wieldmesh.cpp create mode 100644 src/wieldmesh.h create mode 100644 textures/base/pack/blank.png create mode 100644 textures/base/pack/camera_btn.png create mode 100644 textures/base/pack/chat_btn.png create mode 100644 textures/base/pack/debug_btn.png create mode 100644 textures/base/pack/dirt_bg.png create mode 100644 textures/base/pack/down.png create mode 100644 textures/base/pack/down_arrow.png create mode 100644 textures/base/pack/drop_btn.png create mode 100644 textures/base/pack/fast_btn.png create mode 100644 textures/base/pack/fly_btn.png create mode 100644 textures/base/pack/halo.png create mode 100644 textures/base/pack/inventory_btn.png create mode 100644 textures/base/pack/jump_btn.png create mode 100644 textures/base/pack/left_arrow.png create mode 100644 textures/base/pack/logo.png create mode 100644 textures/base/pack/menu_header.png create mode 100644 textures/base/pack/minimap_mask_round.png create mode 100644 textures/base/pack/minimap_mask_square.png create mode 100644 textures/base/pack/minimap_overlay_round.png create mode 100644 textures/base/pack/minimap_overlay_square.png create mode 100644 textures/base/pack/no_screenshot.png create mode 100644 textures/base/pack/noclip_btn.png create mode 100644 textures/base/pack/player_marker.png create mode 100644 textures/base/pack/rangeview_btn.png create mode 100644 textures/base/pack/right_arrow.png create mode 100644 textures/base/pack/server_flags_creative.png create mode 100644 textures/base/pack/server_flags_damage.png create mode 100644 textures/base/pack/server_flags_pvp.png create mode 100644 textures/base/pack/smoke_puff.png create mode 100644 textures/base/pack/sunrisebg.png create mode 100644 textures/base/pack/unknown_item.png create mode 100644 textures/base/pack/unknown_node.png create mode 100644 textures/base/pack/unknown_object.png create mode 100644 textures/base/pack/up_arrow.png create mode 100644 textures/texture_packs_here.txt create mode 100755 util/buildbot/buildwin32.sh create mode 100755 util/buildbot/buildwin64.sh create mode 100644 util/buildbot/toolchain_mingw.cmake create mode 100644 util/buildbot/toolchain_mingw64.cmake create mode 100755 util/bump_version.sh create mode 100644 util/colors.txt create mode 100755 util/generate-texture-normals.sh create mode 100755 util/minetestmapper.py create mode 100755 util/sectors2sqlite.py create mode 100755 util/test_multiplayer.sh create mode 100755 util/travis/before_install.sh create mode 100755 util/travis/script.sh create mode 100644 util/travis/toolchain_mingw.cmake.in create mode 100755 util/updatepo.sh create mode 100644 util/wireshark/minetest.lua diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..2e62a4e59 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.cpp diff=cpp +*.h diff=cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..cd6ee3e32 --- /dev/null +++ b/.gitignore @@ -0,0 +1,87 @@ +## Editors and Development environments +*~ +*.swp +*.bak* +*.orig +# Vim +*.vim +# Kate +.*.kate-swp +.swp.* +# KDevelop4 +.kdev4/ +*.kdev4 +# Eclipse (CDT and LDT) +.project +.cproject +.settings/ +.buildpath +.metadata +# GNU Global +tags +!tags/ +gtags.files + +## Files related to minetest development cycle +/*.patch +# GNU Patch reject file +*.rej + +## Non-static Minetest directories or symlinks to these +/bin/ +/games/* +!/games/minimal/ +/cache +/textures/* +!/textures/base/ +/screenshots +/sounds +/mods/* +!/mods/minetest/ +/mods/minetest/* +!/mods/minetest/mods_here.txt +/worlds +/world/ + +## Configuration/log files +minetest.conf +debug.txt + +## Doxygen files +doc/Doxyfile +doc/html/ +doc/doxygen_* + +## Build files +CMakeFiles +Makefile +!build/android/Makefile +cmake_install.cmake +CMakeCache.txt +CPackConfig.cmake +CPackSourceConfig.cmake +src/android_version.h +src/android_version_githash.h +src/cmake_config.h +src/cmake_config_githash.h +src/lua/build/ +locale/ +.directory +*.cbp +*.layout +*.o +*.a + +## Android build files +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 +build/android/path.cfg +build/android/and_env +build/android/AndroidManifest.xml +timestamp diff --git a/.mailmap b/.mailmap new file mode 100644 index 000000000..c487460a0 --- /dev/null +++ b/.mailmap @@ -0,0 +1,33 @@ +0gb.us <0gb.us@0gb.us> +Calinou +Perttu Ahola celeron55 +Perttu Ahola celeron55 +Craig Robbins +Diego Martínez +Ilya Zhuravlev +kwolekr +PilzAdam PilzAdam +PilzAdam Pilz Adam +PilzAdam PilzAdam +proller +proller +RealBadAngel +RealBadAngel +Selat +ShadowNinja ShadowNinja +Shen Zheyu arsdragonfly +Pavel Elagin elagin +Esteban I. Ruiz Moreno Esteban I. RM +manuel duarte manuel joaquim +manuel duarte sweetbomber +Diego Martínez kaeza +Diego Martínez Diego Martinez +Lord James Lord89James +BlockMen Block Men +sfan5 Sfan5 +DannyDark dannydark +Ilya Pavlov Ilya +Ilya Zhuravlev xyzz +sapier sapier +sapier sapier + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..d7ee23876 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +language: cpp +compiler: + - gcc + - clang +env: + - PLATFORM=Win32 + - PLATFORM=Win64 + - PLATFORM=Linux +before_install: ./util/travis/before_install.sh +script: ./util/travis/script.sh +sudo: required +notifications: + email: false +matrix: + fast_finish: true + exclude: + - env: PLATFORM=Win32 + compiler: clang + - env: PLATFORM=Win64 + compiler: clang diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..ea41d0d2f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,237 @@ +cmake_minimum_required(VERSION 2.6) + +if(${CMAKE_VERSION} STREQUAL "2.8.2") + # Bug http://vtk.org/Bug/view.php?id=11020 + message(WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!") +endif() + +# This can be read from ${PROJECT_NAME} after project() is called +project(minetest) +set(PROJECT_NAME_CAPITALIZED "Minetest") + + +# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing +set(VERSION_MAJOR 0) +set(VERSION_MINOR 4) +set(VERSION_PATCH 13) +set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") + +# Change to false for releases +set(DEVELOPMENT_BUILD TRUE) + +set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") +if(VERSION_EXTRA) + set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA}) +elseif(DEVELOPMENT_BUILD) + set(VERSION_STRING "${VERSION_STRING}-dev") +endif() + +message(STATUS "*** Will build version ${VERSION_STRING} ***") + + +# Configuration options +set(DEFAULT_RUN_IN_PLACE FALSE) +if(WIN32) + set(DEFAULT_RUN_IN_PLACE TRUE) +endif() +set(RUN_IN_PLACE ${DEFAULT_RUN_IN_PLACE} CACHE BOOL + "Run directly in source directory structure") + + +set(BUILD_CLIENT TRUE CACHE BOOL "Build client") +set(BUILD_SERVER FALSE CACHE BOOL "Build server") + + +set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build") + +if(NOT CMAKE_BUILD_TYPE) + # Default to release + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Debug or Release" FORCE) +endif() + + +# Included stuff +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + + +# This is done here so that relative search paths are more reasonable +find_package(Irrlicht) + + +# Installation + +if(WIN32) + set(SHAREDIR ".") + set(BINDIR "bin") + set(DOCDIR "doc") + set(EXAMPLE_CONF_DIR ".") + set(LOCALEDIR "locale") +elseif(APPLE) + set(BUNDLE_NAME ${PROJECT_NAME}.app) + set(BUNDLE_PATH "${BUNDLE_NAME}") + set(BINDIR ${BUNDLE_NAME}/Contents/MacOS) + set(SHAREDIR ${BUNDLE_NAME}/Contents/Resources) + set(DOCDIR "${SHAREDIR}/${PROJECT_NAME}") + set(EXAMPLE_CONF_DIR ${DOCDIR}) + set(LOCALEDIR "${SHAREDIR}/locale") +elseif(UNIX) # Linux, BSD etc + 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() + +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/world_format.txt" DESTINATION "${DOCDIR}") +install(FILES "minetest.conf.example" DESTINATION "${EXAMPLE_CONF_DIR}") + +if(UNIX AND NOT APPLE) + install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6") + install(FILES "misc/minetest.desktop" DESTINATION "${XDG_APPS_DIR}") + install(FILES "misc/minetest.appdata.xml" DESTINATION "${APPDATADIR}") + install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") +endif() + +if(APPLE) + install(FILES "misc/minetest-icon.icns" DESTINATION "${SHAREDIR}") + install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents") +endif() + + +# Subdirectories +# Be sure to add all relevant definitions above this + +add_subdirectory(src) + + +# CPack + +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An InfiniMiner/Minecraft inspired game") +set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) +set(CPACK_PACKAGE_VENDOR "celeron55") +set(CPACK_PACKAGE_CONTACT "Perttu Ahola ") + +if(WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win64") + else() + set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win32") + endif() + + set(CPACK_GENERATOR ZIP) +elseif(APPLE) + set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0) + set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-osx") + set(CPACK_GENERATOR ZIP) +else() + set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-linux") + set(CPACK_GENERATOR TGZ) + set(CPACK_SOURCE_GENERATOR TGZ) +endif() + +include(CPack) + + +# Add a target to generate API documentation with Doxygen +find_package(Doxygen) +if(DOXYGEN_FOUND) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in + ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY) + add_custom_target(doc + ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc + COMMENT "Generating API documentation with Doxygen" VERBATIM + ) +endif() + diff --git a/README.txt b/README.txt new file mode 100644 index 000000000..4801d7644 --- /dev/null +++ b/README.txt @@ -0,0 +1,538 @@ +Minetest +======== + +An InfiniMiner/Minecraft inspired game. + +Copyright (c) 2010-2013 Perttu Ahola +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://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 +-------------------------- +- Don't expect it to work as well as a finished game will. +- Please report any bugs. When doing that, debug.txt is useful. + +Default Controls +----------------- +- WASD: move +- Space: jump/climb +- Shift: sneak/go down +- Q: drop itemstack (+ SHIFT for single item) +- I: inventory +- Mouse: turn/look +- Mouse left: dig/punch +- Mouse right: place/use +- Mouse wheel: select item +- T: chat +- 1-8: select item + +- Esc: pause menu (pauses only singleplayer game) +- R: Enable/Disable full range view +- +: Increase view range +- -: Decrease view range +- K: Enable/Disable fly (needs fly privilege) +- J: Enable/Disable fast (needs fast privilege) +- H: Enable/Disable noclip (needs noclip privilege) + +- F1: Hide/Show HUD +- F2: Hide/Show Chat +- F3: Disable/Enable Fog +- F4: Disable/Enable Camera update (Mapblocks are not updated anymore when disabled) +- F5: Toogle through debug info screens +- F6: Toogle through output data +- F7: Toggle through camera modes +- F10: Show/Hide console +- F12: Take screenshot + +- Settable in the configuration file, see the section below. + +Paths +------ +$bin - Compiled binaries +$share - Distributed read-only data +$user - User-created modifiable data + +Windows .zip / RUN_IN_PLACE source: +$bin = bin +$share = . +$user = . + +Linux installed: +$bin = /usr/bin +$share = /usr/share/minetest +$user = ~/.minetest + +OS X: +$bin = Contents/MacOS +$share = Contents/Resources +$user = Contents/User OR ~/Library/Application Support/minetest + +World directory +---------------- +- Worlds can be found as separate folders in: + $user/worlds/ + +Configuration file: +------------------- +- 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 + +Command-line options: +--------------------- +- Use --help + +Compiling on GNU/Linux: +----------------------- + +Install dependencies. Here's an example for Debian/Ubuntu: +$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev + +You can install git for easily keeping your copy up to date. +If you dont want git, read below on how to get the source without git. +This is an example for installing git on Debian/Ubuntu: +$ sudo apt-get install git-core + +Download source (this is the URL to the latest of source repository, which might not work at all times) using git: +$ git clone --depth 1 https://github.com/minetest/minetest.git +$ cd minetest + +Download minetest_game (otherwise only the "Minimal development test" game is available) using git: +$ git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game + +Download source, without using git: +$ wget https://github.com/minetest/minetest/archive/master.tar.gz +$ tar xf master.tar.gz +$ cd minetest-master + +Download minetest_game, without using git: +$ cd games/ +$ wget https://github.com/minetest/minetest_game/archive/master.tar.gz +$ tar xf master.tar.gz +$ mv minetest_game-master minetest_game +$ cd .. + +Build a version that runs directly from the source directory: +$ cmake . -DRUN_IN_PLACE=TRUE +$ make -j + +Run it: +$ ./bin/minetest + +- Use cmake . -LH to see all CMake options and their current state +- If you want to install it system-wide (or are making a distribution package), + you will want to use -DRUN_IN_PLACE=FALSE +- You can build a bare server by specifying -DBUILD_SERVER=TRUE +- You can disable the client build by specifying -DBUILD_CLIENT=FALSE +- You can select between Release and Debug build by -DCMAKE_BUILD_TYPE= + - Debug 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 + +With PostgreSQL Backend +----------------------- +The PostgreSQL backend does not build by default. + +In addition to the above dependencies, the PostgreSQL backend requires the following. +# apt-get install libpq-dev postgresql-client postgresql-server-dev + +Build as above, with the following flag. +# cmake -DENABLE_POSTGRESQL=TRUE + +For more information click on the following forum link. +https://forum.minetest.net/viewtopic.php?f=3&t=12851 + +CMake options +------------- +General options: + +BUILD_CLIENT - Build Minetest client +BUILD_SERVER - Build Minetest server +CMAKE_BUILD_TYPE - Type of build (Release vs. Debug) + Release - Release build + Debug - Debug build + SemiDebug - Partially optimized debug build + RelWithDebInfo - Release build with Debug information + MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible +ENABLE_CURL - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http +ENABLE_CURSES - Build with (n)curses; Enables a server side terminal (command line option: --terminal) +ENABLE_FREETYPE - Build with FreeType2; Allows using TTF fonts +ENABLE_GETTEXT - Build with Gettext; Allows using translations +ENABLE_GLES - Search for Open GLES headers & libraries and use them +ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend (faster than SQLite3) +ENABLE_POSTGRESQL - Build with PostgreSQL; Enables use of PostgreSQL map backend +ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend +ENABLE_SPATIAL - Build with LibSpatial; Speeds up AreaStores +ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds +ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua) +ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp) +RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory) +USE_GPROF - Enable profiling using GProf +VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) + +Library specific options: + +BZIP2_INCLUDE_DIR - Linux only; directory where bzlib.h is located +BZIP2_LIBRARY - Linux only; path to libbz2.a/libbz2.so +CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll +CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located +CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib +EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h +EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so +FREETYPE_INCLUDE_DIR_freetype2 - Only if building with Freetype2; directory that contains an freetype directory with files such as ftimage.h in it +FREETYPE_INCLUDE_DIR_ft2build - Only if building with Freetype2; directory that contains ft2build.h +FREETYPE_LIBRARY - Only if building with Freetype2; path to libfreetype.a/libfreetype.so/freetype.lib +FREETYPE_DLL - Only if building with Freetype2 on Windows; path to libfreetype.dll +GETTEXT_DLL - Only when building with Gettext on Windows; path to libintl3.dll +GETTEXT_ICONV_DLL - Only when building with Gettext on Windows; path to libiconv2.dll +GETTEXT_INCLUDE_DIR - Only when building with Gettext; directory that contains iconv.h +GETTEXT_LIBRARY - Only when building with Gettext on Windows; path to libintl.dll.a +GETTEXT_MSGFMT - Only when building with Gettext; path to msgfmt/msgfmt.exe +IRRLICHT_DLL - Only on Windows; path to Irrlicht.dll +IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h +IRRLICHT_LIBRARY - Path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a/Irrlicht.lib +LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h +LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a +LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll +REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h +REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so +SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h +SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib +LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located +LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so +MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll +OGG_DLL - Only if building with sound on Windows; path to libogg.dll +OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h +OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a +OPENAL_DLL - Only if building with sound on Windows; path to OpenAL32.dll +OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located +OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib +OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h +OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so +SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h +SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib +VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll +VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a +VORBIS_DLL - Only if building with sound on Windows; path to libvorbis-0.dll +VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside +VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a +XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so +ZLIB_DLL - Only on Windows; path to zlib1.dll +ZLIBWAPI_DLL - Only on Windows; path to zlibwapi.dll +ZLIB_INCLUDE_DIR - Directory that contains zlib.h +ZLIB_LIBRARY - Path to libz.a/libz.so/zlibwapi.lib + +Compiling on Windows: +--------------------- +- This section is outdated. In addition to what is described here: + - In addition to minetest, you need to download minetest_game. + - If you wish to have sound support, you need libogg, libvorbis and libopenal + +- You need: + * CMake: + http://www.cmake.org/cmake/resources/software.html + * MinGW or Visual Studio + http://www.mingw.org/ + http://msdn.microsoft.com/en-us/vstudio/default + * Irrlicht SDK 1.7: + http://irrlicht.sourceforge.net/downloads.html + * Zlib headers (zlib125.zip) + http://www.winimage.com/zLibDll/index.html + * Zlib library (zlibwapi.lib and zlibwapi.dll from zlib125dll.zip): + http://www.winimage.com/zLibDll/index.html + * Optional: gettext library and tools: + http://gnuwin32.sourceforge.net/downlinks/gettext.php + - This is used for other UI languages. Feel free to leave it out. + * And, of course, Minetest: + http://minetest.net/download +- Steps: + - Select a directory called DIR hereafter in which you will operate. + - Make sure you have CMake and a compiler installed. + - Download all the other stuff to DIR and extract them into there. + ("extract here", not "extract to packagename/") + NOTE: zlib125dll.zip needs to be extracted into zlib125dll + - 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 + - zlib-1.2.5.tar.gz + - zlib125dll.zip + - irrlicht-1.7.1.zip + - 110214175330.zip (or whatever, this is the minetest source) + + zlib-1.2.5 + - zlib.h + + win32 + ... + + zlib125dll + - readme.txt + + dll32 + ... + + irrlicht-1.7.1 + + lib + + include + ... + + gettext (optional) + +bin + +include + +lib + + minetest + + src + + doc + - CMakeLists.txt + ... + ----------------- + - Start up the CMake GUI + - Select "Browse Source..." and select DIR/minetest + - Now, if using MSVC: + - Select "Browse Build..." and select DIR/minetest-build + - Else if using MinGW: + - Select "Browse Build..." and select DIR/minetest + - Select "Configure" + - Select your compiler + - It will warn about missing stuff, ignore that at this point. (later don't) + - Make sure the configuration is as follows + (note that the versions may differ for you): + ----------------- + BUILD_CLIENT [X] + BUILD_SERVER [ ] + CMAKE_BUILD_TYPE Release + CMAKE_INSTALL_PREFIX DIR/minetest-install + IRRLICHT_SOURCE_DIR DIR/irrlicht-1.7.1 + RUN_IN_PLACE [X] + WARN_ALL [ ] + ZLIB_DLL DIR/zlib125dll/dll32/zlibwapi.dll + ZLIB_INCLUDE_DIR DIR/zlib-1.2.5 + ZLIB_LIBRARIES DIR/zlib125dll/dll32/zlibwapi.lib + GETTEXT_BIN_DIR DIR/gettext/bin + GETTEXT_INCLUDE_DIR DIR/gettext/include + GETTEXT_LIBRARIES DIR/gettext/lib/intl.lib + 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 + 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 + DIR/minetest-install/bin/minetest.exe + - Additionally you may create a zip package by building the PACKAGE + project. + If using MinGW: + - Using the command line, browse to the build directory and run 'make' + (or mingw32-make or whatever it happens to be) + - You may need to copy some of the downloaded DLLs into bin/, see what + running the produced executable tells you it doesn't have. + - You should now have a working game with the executable in + DIR/minetest/bin/minetest.exe + +Windows releases of minetest are built using a bat script like this: +-------------------------------------------------------------------- + +set sourcedir=%CD% +set installpath="C:\tmp\minetest_install" +set irrlichtpath="C:\tmp\irrlicht-1.7.2" + +set builddir=%sourcedir%\bvc10 +mkdir %builddir% +pushd %builddir% +cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=TRUE -DCMAKE_INSTALL_PREFIX=%installpath% +if %errorlevel% neq 0 goto fail +"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release +if %errorlevel% neq 0 goto fail +"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" INSTALL.vcxproj /p:Configuration=Release +if %errorlevel% neq 0 goto fail +"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" PACKAGE.vcxproj /p:Configuration=Release +if %errorlevel% neq 0 goto fail +popd +echo Finished. +exit /b 0 + +: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 + +BlockMen: + textures/base/pack/menuheader.png + +erlehmann: + misc/minetest-icon-24x24.png + misc/minetest-icon.ico + misc/minetest.svg + textures/base/pack/logo.png + +License of Minetest source code +------------------------------- + +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola + +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. + +Irrlicht +--------------- + +This program uses the Irrlicht Engine. http://irrlicht.sourceforge.net/ + + The Irrlicht Engine License + +Copyright © 2002-2005 Nikolaus Gebhardt + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute +it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you use + this software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + 3. This notice may not be removed or altered from any source + distribution. + + +JThread +--------------- + +This program uses the JThread library. License for JThread follows: + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +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. + +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. diff --git a/build/android/AndroidManifest.xml.template b/build/android/AndroidManifest.xml.template new file mode 100644 index 000000000..0f75ca648 --- /dev/null +++ b/build/android/AndroidManifest.xml.template @@ -0,0 +1,35 @@ + + + + + + + + ###DEBUG_BUILD### + + + + + + + + + + + + + + diff --git a/build/android/Makefile b/build/android/Makefile new file mode 100644 index 000000000..9f1076027 --- /dev/null +++ b/build/android/Makefile @@ -0,0 +1,891 @@ +# build options + +OS := $(shell uname) + +# 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) + +GAMES_TO_COPY = minetest_game +MODS_TO_COPY = + + +VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ') +VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ') +VERSION_PATCH := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ') + +################################################################################ +# Android Version code +# Increase for each build! +################################################################################ +# Play Store actual version (16/03/15): 11 +ANDROID_VERSION_CODE = 13 + +################################################################################ +# 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 +#TARGET_ARCH = arm +#CROSS_PREFIX = arm-linux-androideabi- +#COMPILER_VERSION = 4.8 +#HAVE_LEVELDB = 1 + +################################################################################ +# toolchain config for arm new processors +################################################################################ +TARGET_HOST = arm-linux +TARGET_ABI = armeabi-v7a +TARGET_LIBDIR = armeabi-v7a +TARGET_TOOLCHAIN = arm-linux-androideabi- +TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 +TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON) +TARGET_ARCH = armv7 +CROSS_PREFIX = arm-linux-androideabi- +COMPILER_VERSION = 4.8 +HAVE_LEVELDB = 1 + +################################################################################ +# toolchain config for little endian mips +################################################################################ +#TARGET_HOST = mipsel-linux +#TARGET_ABI = mips +#TARGET_LIBDIR = mips +#TARGET_TOOLCHAIN = mipsel-linux-android- +#TARGET_ARCH = mips32 +#CROSS_PREFIX = mipsel-linux-android- +#COMPILER_VERSION = 4.8 +#HAVE_LEVELDB = 0 + +################################################################################ +# toolchain config for x86 +################################################################################ +#TARGET_HOST = x86-linux +#TARGET_ABI = x86 +#TARGET_LIBDIR = x86 +#TARGET_TOOLCHAIN = x86- +#CROSS_PREFIX = i686-linux-android- +#TARGET_ARCH = x86 +#COMPILER_VERSION = 4.8 +#HAVE_LEVELDB = 1 + +################################################################################ +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://github.com/google/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_REVISION = 5122 +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@$(IRRLICHT_REVISION) + +OPENSSL_VERSION = 1.0.1p +OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION) +OPENSSL_DIR = $(ROOT)/deps/$(OPENSSL_BASEDIR)/ +OPENSSL_LIB = $(OPENSSL_DIR)/libssl.so.1.0.0 +OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp +OPENSSL_TIMESTAMP_INT = $(ROOT)/deps/openssl_timestamp +OPENSSL_URL = http://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz + +CURL_VERSION = 7.45.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 + +GMP_VERSION = 6.1.0 +GMP_DIR = $(ROOT)/deps/gmp-$(GMP_VERSION) +GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.so +GMP_TIMESTAMP = $(GMP_DIR)/timestamp +GMP_TIMESTAMP_INT = $(ROOT)/deps/gmp_timestamp +GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2 + +FREETYPE_DIR = $(ROOT)/deps/freetype2-android/ +FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_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 + +ICONV_VERSION = 1.14 +ICONV_DIR = $(ROOT)/deps/libiconv/ +ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so +ICONV_TIMESTAMP = $(ICONV_DIR)timestamp +ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp +ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz + +SQLITE3_FOLDER = sqlite-amalgamation-3090200 +SQLITE3_URL = http://www.sqlite.org/2015/$(SQLITE3_FOLDER).zip + +-include $(PATHCFGFILE) + +#use interim target variable to switch leveldb on or off +ifeq ($(HAVE_LEVELDB),1) + LEVELDB_TARGET = $(LEVELDB_LIB) +endif + +.PHONY : debug release reconfig delconfig \ + leveldb_download clean_leveldb leveldb\ + irrlicht_download clean_irrlicht irrlicht \ + clean_assets assets sqlite3_download \ + freetype_download clean_freetype freetype \ + apk clean_apk \ + clean_all clean prep_srcdir \ + install_debug install 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 \ + $(ROOT)/jni/src/android_version_githash.h + +debug : $(PATHCFGFILE) + export NDEBUG=; \ + export BUILD_TYPE=debug; \ + $(MAKE) apk + +all : debug release + +release : $(PATHCFGFILE) + @export NDEBUG=1; \ + export BUILD_TYPE=release; \ + $(MAKE) apk + +reconfig: delconfig + @$(MAKE) $(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/toolchains" >> ${PATHCFGFILE}; \ + echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";\ + echo "+ Note: NDK_MODULE_PATH is set to $$ANDROID_NDK/toolchains"; \ + 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} TARGET_ARCH_ABI=${TARGET_ABI} \ + APP_PLATFORM=${APP_PLATFORM} 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; \ + sed -i 's-:-?-' jni/Application.mk; \ + fi + +ogg : $(OGG_LIB) + +$(OGG_LIB): $(OGG_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \ + echo "${OGG_TIMESTAMP_INT} doesn't exist"; \ + REFRESH=1; \ + fi; \ + if [ ${OGG_TIMESTAMP} -nt ${OGG_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + 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} \ + 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 ; \ + wget ${OPENSSL_URL} || exit 1; \ + tar -xzf ${OPENSSL_BASEDIR}.tar.gz; \ + cd ${OPENSSL_BASEDIR}; \ + patch -p1 < ../../openssl_arch.patch; \ + 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 \ + echo "changed timestamp for openssl detected building..."; \ + cd ${OPENSSL_DIR}; \ + ln -s ${OPENSSL_DIR} ../openssl; \ + export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-openssl; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + CC=${CROSS_PREFIX}gcc ./Configure android-${TARGET_ARCH} no-idea no-seed -no-sha0 -DL_ENDIAN;\ + CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \ + touch ${OPENSSL_TIMESTAMP}; \ + touch ${OPENSSL_TIMESTAMP_INT}; \ + $(RM) -rf $${TOOLCHAIN}; \ + else \ + echo "nothing to be done for openssl"; \ + fi + +clean_openssl : + $(RM) -rf ${OPENSSL_DIR}; \ + $(RM) -rf $(ROOT)/deps/${OPENSSL_BASEDIR}.tar.gz; \ + $(RM) -rf $(ROOT)/deps/openssl + +$(LEVELDB_TIMESTAMP) : leveldb_download + @LAST_MODIF=$$(find ${LEVELDB_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${LEVELDB_TIMESTAMP}; \ + fi + +leveldb_download : + @if [ ! -d ${LEVELDB_DIR} ] ; then \ + echo "leveldb sources missing, downloading..."; \ + mkdir -p ${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-${TARGET_HOST}-leveldb; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \ + export CPPFLAGS="$${CPPFLAGS} ${TARGET_CFLAGS_ADDON}"; \ + export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \ + export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ + $(MAKE) -s || exit 1; \ + touch ${LEVELDB_TIMESTAMP}; \ + touch ${LEVELDB_TIMESTAMP_INT}; \ + $(RM) -rf $${TOOLCHAIN}; \ + 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 + +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} \ + TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ + TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \ + TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \ + touch ${FREETYPE_TIMESTAMP}; \ + touch ${FREETYPE_TIMESTAMP_INT}; \ + else \ + echo "nothing to be done for freetype"; \ + fi + +clean_freetype : + $(RM) -rf ${FREETYPE_DIR} + +$(ICONV_TIMESTAMP) : iconv_download + @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${ICONV_TIMESTAMP}; \ + fi + +iconv_download : + @if [ ! -d ${ICONV_DIR} ] ; then \ + echo "iconv sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd ${ROOT}/deps; \ + wget ${ICONV_URL_HTTP} || exit 1; \ + tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \ + rm libiconv-${ICONV_VERSION}.tar.gz; \ + ln -s libiconv-${ICONV_VERSION} libiconv; \ + cd ${ICONV_DIR}; \ + patch -p1 < ${ROOT}/libiconv_android.patch; \ + patch -p1 < ${ROOT}/libiconv_stdio.patch; \ + fi + +iconv : $(ICONV_LIB) + +$(ICONV_LIB) : $(ICONV_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${ICONV_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${ICONV_DIR}; \ + export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ + echo "changed timestamp for iconv detected building..."; \ + cd ${ICONV_DIR}; \ + \ + export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ + ./configure --host=${TARGET_HOST} || exit 1; \ + sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \ + grep "iconv_LDFLAGS" src/Makefile; \ + $(MAKE) -s || exit 1; \ + touch ${ICONV_TIMESTAMP}; \ + touch ${ICONV_TIMESTAMP_INT}; \ + rm -rf ${TOOLCHAIN}; \ + else \ + echo "nothing to be done for iconv"; \ + fi + +clean_iconv : + $(RM) -rf ${ICONV_DIR} + +#Note: Texturehack patch is required for gpu's not supporting color format +# correctly. Known bad GPU: +# -geforce on emulator +# -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3) + +irrlicht_download : + @if [ ! -d "deps/irrlicht" ] ; then \ + echo "irrlicht sources missing, downloading..."; \ + mkdir -p ${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_TIMESTAMP) : irrlicht_download + @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${IRRLICHT_TIMESTAMP}; \ + fi + +irrlicht : $(IRRLICHT_LIB) + +$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB) + @REFRESH=0; \ + if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${IRRLICHT_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${IRRLICHT_DIR}; \ + 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} \ + 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; \ + ln -s curl-${CURL_VERSION} curl; \ + fi + +curl : $(CURL_LIB) + +$(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB) + @REFRESH=0; \ + if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${CURL_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${CURL_DIR}; \ + 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-${TARGET_HOST}-curl; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ + export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include \ + -L${OPENSSL_DIR} ${TARGET_CFLAGS_ADDON}"; \ + export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \ + export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}"; \ + ./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \ + $(MAKE) -s || exit 1; \ + touch ${CURL_TIMESTAMP}; \ + touch ${CURL_TIMESTAMP_INT}; \ + $(RM) -rf $${TOOLCHAIN}; \ + else \ + echo "nothing to be done for curl"; \ + fi + +clean_curl : + $(RM) -rf deps/curl-${CURL_VERSION} \ + $(RM) -f deps/curl + + +curl_binary: + @if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \ + echo "curl binary 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 + +$(GMP_TIMESTAMP) : gmp_download + @LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${GMP_TIMESTAMP}; \ + fi + +gmp_download : + @if [ ! -d "${GMP_DIR}" ] ; then \ + echo "gmp sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd deps; \ + wget ${GMP_URL_HTTP} || exit 1; \ + tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1; \ + rm gmp-${GMP_VERSION}.tar.bz2; \ + ln -s gmp-${GMP_VERSION} gmp; \ + fi + +gmp : $(GMP_LIB) + +$(GMP_LIB): $(GMP_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${GMP_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${GMP_DIR}; \ + export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \ + echo "changed timestamp for gmp detected building..."; \ + cd deps/gmp-${GMP_VERSION}; \ + export CROSS_PREFIX=${CROSS_PREFIX}; \ + export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + export LIBGMP_LDFLAGS="-avoid-version"; \ + export LIBGMPXX_LDFLAGS="-avoid-version"; \ + ./configure --disable-static --host=${TARGET_HOST} --prefix=/usr; \ + $(MAKE) install DESTDIR=/${GMP_DIR} || exit 1; \ + touch ${GMP_TIMESTAMP}; \ + touch ${GMP_TIMESTAMP_INT}; \ + $(RM) -rf $${TOOLCHAIN}; \ + else \ + echo "nothing to be done for gmp"; \ + fi + +clean_gmp: + $(RM) -rf deps/gmp-${GMP_VERSION} \ + $(RM) -f deps/gmp + +sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c + +deps/${SQLITE3_FOLDER}/sqlite3.c : + cd deps; \ + wget ${SQLITE3_URL}; \ + unzip ${SQLITE3_FOLDER}.zip; \ + ln -s ${SQLITE3_FOLDER} sqlite + +clean_sqlite3: + cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \ + $(RM) -f sqlite + +$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB) + @mkdir -p ${ROOT}/deps; \ + for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \ + LAST_MODIF=$$(find ${ROOT}/../../${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \ + touch ${ROOT}/../../${DIRNAME}/timestamp; \ + touch ${ASSETS_TIMESTAMP}; \ + echo ${DIRNAME} changed $$LAST_MODIF; \ + fi; \ + done; \ + LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${IRRLICHT_DIR}/media/timestamp; \ + touch ${ASSETS_TIMESTAMP}; \ + fi; \ + if [ ${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) 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; \ + mkdir ${ROOT}/assets/Minetest/games; \ + for game in ${GAMES_TO_COPY}; do \ + cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/Minetest/games/; \ + done; \ + mkdir ${ROOT}/assets/Minetest/mods; \ + for mod in ${MODS_TO_COPY}; do \ + cp -r ${ROOT}/../../mods/$$mod ${ROOT}/assets/Minetest/mods/; \ + done; \ + 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 || exit 1; \ + find . -name "timestamp" -exec rm {} \; ; \ + find . -name "*.blend" -exec rm {} \; ; \ + find . -name "*~" -exec rm {} \; ; \ + find . -type d -path "*.git" -exec rm -rf {} \; ; \ + find . -type d -path "*.svn" -exec rm -rf {} \; ; \ + find . -type f -path "*.gitignore" -exec rm -rf {} \; ; \ + ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \ + find Minetest >"filelist.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 $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ + $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \ + $(ROOT)/jni/src/android_version_githash.h sqlite3_download + @export NDEBUG=$$NDEBUG; $(MAKE) 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} \ + GPROF=${GPROF} APP_ABI=${TARGET_ABI} HAVE_LEVELDB=${HAVE_LEVELDB} \ + 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 : + @if [ ! -e ${ROOT}/jni/src ]; then \ + ln -s ${ROOT}/../../src ${ROOT}/jni/src; \ + fi + +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) clean_apk; \ + $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl clean_openssl \ + clean_openal clean_ogg clean_gmp clean_manifest; \ + sleep 1; \ + $(RM) -r gen libs obj deps bin Debug and_env + +$(ROOT)/jni/src/android_version_githash.h : prep_srcdir + @export VERSION_FILE=${ROOT}/jni/src/android_version_githash.h; \ + export VERSION_FILE_NEW=$${VERSION_FILE}.new; \ + { \ + echo "#ifndef ANDROID_MT_VERSION_GITHASH_H"; \ + echo "#define ANDROID_MT_VERSION_GITHASH_H"; \ + export GITHASH=$$(git rev-parse --short=8 HEAD); \ + export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \ + echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \ + echo "#endif"; \ + } > "$${VERSION_FILE_NEW}"; \ + if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \ + echo "android_version_githash.h changed, updating..."; \ + mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ + else \ + rm "$${VERSION_FILE_NEW}"; \ + fi + + +$(ROOT)/jni/src/android_version.h : prep_srcdir + @export VERSION_FILE=${ROOT}/jni/src/android_version.h; \ + export VERSION_FILE_NEW=$${VERSION_FILE}.new; \ + { \ + echo "#ifndef ANDROID_MT_VERSION_H"; \ + echo "#define ANDROID_MT_VERSION_H"; \ + echo "#define VERSION_MAJOR ${VERSION_MAJOR}"; \ + echo "#define VERSION_MINOR ${VERSION_MINOR}"; \ + echo "#define VERSION_PATCH ${VERSION_PATCH}"; \ + echo "#define VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\ + \".\"STR(VERSION_PATCH)"; \ + echo "#endif"; \ + } > $${VERSION_FILE_NEW}; \ + if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \ + echo "android_version.h changed, updating..."; \ + mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ + else \ + rm "$${VERSION_FILE_NEW}"; \ + fi + +manifest : + @BASE_VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \ + if [ "${NDEBUG}x" != "x" ] ; then \ + DBG=''; \ + DBG_FLAG="android:debuggable=\"false\""; \ + else \ + DBG=""; \ + 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 diff --git a/build/android/build.xml b/build/android/build.xml new file mode 100644 index 000000000..50a3e95ac --- /dev/null +++ b/build/android/build.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/build/android/irrlicht-back_button.patch b/build/android/irrlicht-back_button.patch new file mode 100644 index 000000000..227749ba7 --- /dev/null +++ b/build/android/irrlicht-back_button.patch @@ -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 diff --git a/build/android/irrlicht-texturehack.patch b/build/android/irrlicht-texturehack.patch new file mode 100644 index 000000000..a458ede72 --- /dev/null +++ b/build/android/irrlicht-texturehack.patch @@ -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(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(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) diff --git a/build/android/irrlicht-touchcount.patch b/build/android/irrlicht-touchcount.patch new file mode 100644 index 000000000..d4e4b9c3e --- /dev/null +++ b/build/android/irrlicht-touchcount.patch @@ -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); + } diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk new file mode 100644 index 000000000..b8fd9db78 --- /dev/null +++ b/build/android/jni/Android.mk @@ -0,0 +1,373 @@ +LOCAL_PATH := $(call my-dir)/.. + +#LOCAL_ADDRESS_SANITIZER:=true + +include $(CLEAR_VARS) +LOCAL_MODULE := Irrlicht +LOCAL_SRC_FILES := deps/irrlicht/lib/Android/libIrrlicht.a +include $(PREBUILT_STATIC_LIBRARY) + +ifeq ($(HAVE_LEVELDB), 1) + include $(CLEAR_VARS) + LOCAL_MODULE := LevelDB + LOCAL_SRC_FILES := deps/leveldb/libleveldb.a + include $(PREBUILT_STATIC_LIBRARY) +endif + +include $(CLEAR_VARS) +LOCAL_MODULE := curl +LOCAL_SRC_FILES := deps/curl/lib/.libs/libcurl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := freetype +LOCAL_SRC_FILES := deps/freetype2-android/Android/obj/local/$(TARGET_ARCH_ABI)/libfreetype2-static.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := iconv +LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := openal +LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := ogg +LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libogg.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := vorbis +LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libvorbis.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := gmp +LOCAL_SRC_FILES := deps/gmp/usr/lib/libgmp.so +include $(PREBUILT_SHARED_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := ssl +LOCAL_SRC_FILES := deps/openssl/libssl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := crypto +LOCAL_SRC_FILES := deps/openssl/libcrypto.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := minetest + +LOCAL_CPP_FEATURES += exceptions + +ifdef GPROF +GPROF_DEF=-DGPROF +endif + +LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ \ + -DHAVE_TOUCHSCREENGUI \ + -DUSE_CURL=1 \ + -DUSE_SOUND=1 \ + -DUSE_FREETYPE=1 \ + -DUSE_LEVELDB=$(HAVE_LEVELDB) \ + $(GPROF_DEF) \ + -pipe -fstrict-aliasing + +ifndef NDEBUG +LOCAL_CFLAGS += -g -D_DEBUG -O0 -fno-omit-frame-pointer +else +LOCAL_CFLAGS += -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/libiconv/include \ + deps/freetype2-android/include \ + deps/curl/include \ + deps/openal-soft/jni/OpenAL/include \ + deps/libvorbis-libogg-android/jni/include \ + deps/gmp/usr/include \ + deps/leveldb/include \ + deps/sqlite/ + +LOCAL_SRC_FILES := \ + jni/src/areastore.cpp \ + jni/src/ban.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/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/fontengine.cpp \ + jni/src/game.cpp \ + jni/src/genericobject.cpp \ + jni/src/gettext.cpp \ + jni/src/guiChatConsole.cpp \ + jni/src/guiEngine.cpp \ + jni/src/guiFileSelectMenu.cpp \ + jni/src/guiFormSpecMenu.cpp \ + jni/src/guiKeyChangeMenu.cpp \ + jni/src/guiPasswordChange.cpp \ + jni/src/guiTable.cpp \ + jni/src/guiscalingfilter.cpp \ + jni/src/guiVolumeChange.cpp \ + jni/src/httpfetch.cpp \ + jni/src/hud.cpp \ + jni/src/imagefilters.cpp \ + jni/src/intlGUIEditBox.cpp \ + jni/src/inventory.cpp \ + jni/src/inventorymanager.cpp \ + jni/src/itemdef.cpp \ + jni/src/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_flat.cpp \ + jni/src/mapgen_fractal.cpp \ + jni/src/mapgen_singlenode.cpp \ + jni/src/mapgen_v5.cpp \ + jni/src/mapgen_v6.cpp \ + jni/src/mapgen_v7.cpp \ + jni/src/mapnode.cpp \ + jni/src/mapsector.cpp \ + jni/src/mesh.cpp \ + jni/src/mg_biome.cpp \ + jni/src/mg_decoration.cpp \ + jni/src/mg_ore.cpp \ + jni/src/mg_schematic.cpp \ + jni/src/minimap.cpp \ + jni/src/mods.cpp \ + jni/src/nameidmapping.cpp \ + jni/src/nodedef.cpp \ + jni/src/nodemetadata.cpp \ + jni/src/nodetimer.cpp \ + jni/src/noise.cpp \ + jni/src/objdef.cpp \ + jni/src/object_properties.cpp \ + jni/src/particles.cpp \ + jni/src/pathfinder.cpp \ + jni/src/player.cpp \ + jni/src/porting_android.cpp \ + jni/src/porting.cpp \ + jni/src/profiler.cpp \ + jni/src/quicktune.cpp \ + jni/src/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/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/tool.cpp \ + jni/src/treegen.cpp \ + jni/src/version.cpp \ + jni/src/voxel.cpp \ + jni/src/voxelalgorithms.cpp \ + jni/src/util/auth.cpp \ + jni/src/util/base64.cpp \ + jni/src/util/directiontables.cpp \ + jni/src/util/numeric.cpp \ + jni/src/util/pointedthing.cpp \ + jni/src/util/serialize.cpp \ + jni/src/util/sha1.cpp \ + jni/src/util/string.cpp \ + jni/src/util/srp.cpp \ + jni/src/util/timetaker.cpp \ + jni/src/unittest/test.cpp \ + jni/src/unittest/test_collision.cpp \ + jni/src/unittest/test_compression.cpp \ + jni/src/unittest/test_connection.cpp \ + jni/src/unittest/test_filepath.cpp \ + jni/src/unittest/test_inventory.cpp \ + jni/src/unittest/test_mapnode.cpp \ + jni/src/unittest/test_nodedef.cpp \ + jni/src/unittest/test_noderesolver.cpp \ + jni/src/unittest/test_noise.cpp \ + jni/src/unittest/test_objdef.cpp \ + jni/src/unittest/test_profiler.cpp \ + jni/src/unittest/test_random.cpp \ + jni/src/unittest/test_schematic.cpp \ + jni/src/unittest/test_serialization.cpp \ + jni/src/unittest/test_settings.cpp \ + jni/src/unittest/test_socket.cpp \ + jni/src/unittest/test_utilities.cpp \ + jni/src/unittest/test_voxelalgorithms.cpp \ + jni/src/unittest/test_voxelmanipulator.cpp \ + jni/src/touchscreengui.cpp \ + jni/src/database-leveldb.cpp \ + jni/src/settings.cpp \ + jni/src/wieldmesh.cpp \ + jni/src/client/clientlauncher.cpp \ + jni/src/client/tile.cpp + +# intentionally kept out (we already build openssl itself): jni/src/util/sha256.c + +# Network +LOCAL_SRC_FILES += \ + jni/src/network/connection.cpp \ + jni/src/network/networkpacket.cpp \ + jni/src/network/clientopcodes.cpp \ + jni/src/network/clientpackethandler.cpp \ + jni/src/network/serveropcodes.cpp \ + jni/src/network/serverpackethandler.cpp \ + +# lua api +LOCAL_SRC_FILES += \ + jni/src/script/common/c_content.cpp \ + jni/src/script/common/c_converter.cpp \ + jni/src/script/common/c_internal.cpp \ + jni/src/script/common/c_types.cpp \ + jni/src/script/cpp_api/s_async.cpp \ + jni/src/script/cpp_api/s_base.cpp \ + jni/src/script/cpp_api/s_entity.cpp \ + jni/src/script/cpp_api/s_env.cpp \ + jni/src/script/cpp_api/s_inventory.cpp \ + jni/src/script/cpp_api/s_item.cpp \ + jni/src/script/cpp_api/s_mainmenu.cpp \ + jni/src/script/cpp_api/s_node.cpp \ + jni/src/script/cpp_api/s_nodemeta.cpp \ + jni/src/script/cpp_api/s_player.cpp \ + jni/src/script/cpp_api/s_security.cpp \ + jni/src/script/cpp_api/s_server.cpp \ + jni/src/script/lua_api/l_areastore.cpp \ + jni/src/script/lua_api/l_base.cpp \ + jni/src/script/lua_api/l_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 + +# SQLite3 +LOCAL_SRC_FILES += deps/sqlite/sqlite3.c + +# Threading +LOCAL_SRC_FILES += \ + jni/src/threading/mutex.cpp \ + jni/src/threading/semaphore.cpp \ + jni/src/threading/thread.cpp + +# JSONCPP +LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp + +LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp +LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) + +ifeq ($(HAVE_LEVELDB), 1) + LOCAL_STATIC_LIBRARIES += LevelDB +endif +LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid + +include $(BUILD_SHARED_LIBRARY) + +# at the end of Android.mk +ifdef GPROF +$(call import-module,android-ndk-profiler) +endif +$(call import-module,android/native_app_glue) diff --git a/build/android/jni/Application.mk b/build/android/jni/Application.mk new file mode 100644 index 000000000..b7ffc56a1 --- /dev/null +++ b/build/android/jni/Application.mk @@ -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 diff --git a/build/android/libiconv_android.patch b/build/android/libiconv_android.patch new file mode 100644 index 000000000..4eca0a4ef --- /dev/null +++ b/build/android/libiconv_android.patch @@ -0,0 +1,39 @@ +--- a/libcharset/lib/localcharset.c 2015-06-10 11:55:25.933870724 +0200 ++++ b/libcharset/lib/localcharset.c 2015-06-10 11:55:39.578063493 +0200 +@@ -47,7 +47,7 @@ + + #if !defined WIN32_NATIVE + # include +-# if HAVE_LANGINFO_CODESET ++# if HAVE_LANGINFO_CODESET && !(defined __ANDROID__) + # include + # else + # if 0 /* see comment below */ +@@ -124,7 +124,7 @@ get_charset_aliases (void) + cp = charset_aliases; + if (cp == NULL) + { +-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) ++#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__ || defined __ANDROID__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; +@@ -338,6 +338,9 @@ get_charset_aliases (void) + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; + # endif ++# if defined __ANDROID__ ++ cp = "*" "\0" "UTF-8" "\0"; ++# endif + #endif + + charset_aliases = cp; +@@ -361,7 +364,7 @@ locale_charset (void) + const char *codeset; + const char *aliases; + +-#if !(defined WIN32_NATIVE || defined OS2) ++#if !(defined WIN32_NATIVE || defined OS2 || defined __ANDROID__) + + # if HAVE_LANGINFO_CODESET + diff --git a/build/android/libiconv_stdio.patch b/build/android/libiconv_stdio.patch new file mode 100644 index 000000000..9fa50f79a --- /dev/null +++ b/build/android/libiconv_stdio.patch @@ -0,0 +1,13 @@ +--- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200 ++++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200 +@@ -695,8 +696,9 @@ _GL_CXXALIASWARN (gets); + /* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ ++#define gets(a) fgets( a, sizeof(*(a)), stdin) + #endif + + +#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ diff --git a/build/android/libvorbis-libogg-fpu.patch b/build/android/libvorbis-libogg-fpu.patch new file mode 100644 index 000000000..52ab397ac --- /dev/null +++ b/build/android/libvorbis-libogg-fpu.patch @@ -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 \ diff --git a/build/android/openssl_arch.patch b/build/android/openssl_arch.patch new file mode 100644 index 000000000..d9ebbd59c --- /dev/null +++ b/build/android/openssl_arch.patch @@ -0,0 +1,11 @@ +--- openssl-1.0.1j/Configure.orig 2014-10-15 14:53:39.000000000 +0200 ++++ openssl-1.0.1j/Configure 2015-01-03 22:41:43.505749921 +0100 +@@ -407,6 +407,8 @@ + "android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + "android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", ++"android-arm","gcc:-march=armv4 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", ++"android-mips32","gcc:-march=mips32 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + + #### *BSD [do see comment about ${BSDthreads} above!] + "BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", diff --git a/build/android/project.properties b/build/android/project.properties new file mode 100644 index 000000000..cc2a7c5cf --- /dev/null +++ b/build/android/project.properties @@ -0,0 +1 @@ +target=android-10 diff --git a/build/android/res/drawable-hdpi/irr_icon.png b/build/android/res/drawable-hdpi/irr_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6861a0d3d87b15f65460a33a520afc62b53657 GIT binary patch literal 5490 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 literal 0 HcmV?d00001 diff --git a/build/android/res/layout/assetcopy.xml b/build/android/res/layout/assetcopy.xml new file mode 100644 index 000000000..ade4b0c98 --- /dev/null +++ b/build/android/res/layout/assetcopy.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/build/android/res/values/styles.xml b/build/android/res/values/styles.xml new file mode 100644 index 000000000..25b8df5a3 --- /dev/null +++ b/build/android/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/build/android/src/net/minetest/minetest/MinetestAssetCopy.java b/build/android/src/net/minetest/minetest/MinetestAssetCopy.java new file mode 100644 index 000000000..5776e77b5 --- /dev/null +++ b/build/android/src/net/minetest/minetest/MinetestAssetCopy.java @@ -0,0 +1,456 @@ +package net.minetest.minetest; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.util.Vector; +import java.util.Iterator; +import java.lang.Object; + +import android.app.Activity; +import android.content.res.AssetFileDescriptor; + +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Environment; +import android.util.Log; +import android.view.Display; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.graphics.Rect; +import android.graphics.Paint; +import android.text.TextPaint; + +public class MinetestAssetCopy extends Activity +{ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + setContentView(R.layout.assetcopy); + + m_ProgressBar = (ProgressBar) findViewById(R.id.progressBar1); + m_Filename = (TextView) findViewById(R.id.textView1); + + Display display = getWindowManager().getDefaultDisplay(); + m_ProgressBar.getLayoutParams().width = (int) (display.getWidth() * 0.8); + m_ProgressBar.invalidate(); + + /* check if there's already a copy in progress and reuse in case it is*/ + MinetestAssetCopy prevActivity = + (MinetestAssetCopy) getLastNonConfigurationInstance(); + if(prevActivity!= null) { + m_AssetCopy = prevActivity.m_AssetCopy; + } + else { + m_AssetCopy = new copyAssetTask(); + m_AssetCopy.execute(); + } + } + + /* preserve asset copy background task to prevent restart of copying */ + /* this way of doing it is not recommended for latest android version */ + /* but the recommended way isn't available on android 2.x */ + public Object onRetainNonConfigurationInstance() + { + return this; + } + + ProgressBar m_ProgressBar; + TextView m_Filename; + + copyAssetTask m_AssetCopy; + + private class copyAssetTask extends AsyncTask + { + private long getFullSize(String filename) + { + long size = 0; + try { + InputStream src = getAssets().open(filename); + byte[] buf = new byte[4096]; + + int len = 0; + while ((len = src.read(buf)) > 0) + { + size += len; + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return size; + } + + @Override + protected String doInBackground(String... files) + { + m_foldernames = new Vector(); + m_filenames = new Vector(); + m_tocopy = new Vector(); + m_asset_size_unknown = new Vector(); + String baseDir = + Environment.getExternalStorageDirectory().getAbsolutePath() + + "/"; + + + // prepare temp folder + File TempFolder = new File(baseDir + "Minetest/tmp/"); + + if (!TempFolder.exists()) + { + TempFolder.mkdir(); + } + else { + File[] todel = TempFolder.listFiles(); + + for(int i=0; i < todel.length; i++) + { + Log.v("MinetestAssetCopy","deleting: " + todel[i].getAbsolutePath()); + todel[i].delete(); + } + } + + // add a .nomedia file + try { + OutputStream dst = new FileOutputStream(baseDir + "Minetest/.nomedia"); + dst.close(); + } catch (IOException e) { + Log.e("MinetestAssetCopy","Failed to create .nomedia file"); + e.printStackTrace(); + } + + + // build lists from prepared data + BuildFolderList(); + BuildFileList(); + + // scan filelist + ProcessFileList(); + + // doing work + m_copy_started = true; + m_ProgressBar.setMax(m_tocopy.size()); + + for (int i = 0; i < m_tocopy.size(); i++) + { + try + { + String filename = m_tocopy.get(i); + publishProgress(i); + + boolean asset_size_unknown = false; + long filesize = -1; + + if (m_asset_size_unknown.contains(filename)) + { + File testme = new File(baseDir + "/" + filename); + + if(testme.exists()) + { + filesize = testme.length(); + } + asset_size_unknown = true; + } + + InputStream src; + try + { + src = getAssets().open(filename); + } catch (IOException e) { + Log.e("MinetestAssetCopy","Copying file: " + filename + " FAILED (not in assets)"); + e.printStackTrace(); + continue; + } + + // Transfer bytes from in to out + byte[] buf = new byte[1*1024]; + int len = src.read(buf, 0, 1024); + + /* following handling is crazy but we need to deal with */ + /* compressed assets.Flash chips limited livetime due to */ + /* write operations, we can't allow large files to destroy */ + /* users flash. */ + if (asset_size_unknown) + { + if ( (len > 0) && (len < buf.length) && (len == filesize)) + { + src.close(); + continue; + } + + if (len == buf.length) + { + src.close(); + long size = getFullSize(filename); + if ( size == filesize) + { + continue; + } + src = getAssets().open(filename); + len = src.read(buf, 0, 1024); + } + } + if (len > 0) + { + int total_filesize = 0; + OutputStream dst; + try + { + dst = new FileOutputStream(baseDir + "/" + filename); + } catch (IOException e) { + Log.e("MinetestAssetCopy","Copying file: " + baseDir + + "/" + filename + " FAILED (couldn't open output file)"); + e.printStackTrace(); + src.close(); + continue; + } + dst.write(buf, 0, len); + total_filesize += len; + + while ((len = src.read(buf)) > 0) + { + dst.write(buf, 0, len); + total_filesize += len; + } + + dst.close(); + Log.v("MinetestAssetCopy","Copied file: " + + m_tocopy.get(i) + " (" + total_filesize + + " bytes)"); + } + else if (len < 0) + { + Log.e("MinetestAssetCopy","Copying file: " + + m_tocopy.get(i) + " failed, size < 0"); + } + src.close(); + } + catch (IOException e) + { + Log.e("MinetestAssetCopy","Copying file: " + + m_tocopy.get(i) + " failed"); + e.printStackTrace(); + } + } + return ""; + } + + + /** + * update progress bar + */ + protected void onProgressUpdate(Integer... progress) + { + + if (m_copy_started) + { + boolean shortened = false; + String todisplay = m_tocopy.get(progress[0]); + m_ProgressBar.setProgress(progress[0]); + + // make sure our text doesn't exceed our layout width + Rect bounds = new Rect(); + Paint textPaint = m_Filename.getPaint(); + textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds); + + while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) { + if (todisplay.length() < 2) { + break; + } + todisplay = todisplay.substring(1); + textPaint.getTextBounds(todisplay, 0, todisplay.length(), bounds); + shortened = true; + } + + if (! shortened) { + m_Filename.setText(todisplay); + } + else { + m_Filename.setText(".." + todisplay); + } + } + else + { + boolean shortened = false; + String todisplay = m_Foldername; + String full_text = "scanning " + todisplay + " ..."; + // make sure our text doesn't exceed our layout width + Rect bounds = new Rect(); + Paint textPaint = m_Filename.getPaint(); + textPaint.getTextBounds(full_text, 0, full_text.length(), bounds); + + while (bounds.width() > getResources().getDisplayMetrics().widthPixels * 0.7) { + if (todisplay.length() < 2) { + break; + } + todisplay = todisplay.substring(1); + full_text = "scanning " + todisplay + " ..."; + textPaint.getTextBounds(full_text, 0, full_text.length(), bounds); + shortened = true; + } + + if (! shortened) { + m_Filename.setText(full_text); + } + else { + m_Filename.setText("scanning .." + todisplay + " ..."); + } + } + } + + /** + * check al files and folders in filelist + */ + protected void ProcessFileList() + { + String FlashBaseDir = + Environment.getExternalStorageDirectory().getAbsolutePath(); + + Iterator itr = m_filenames.iterator(); + + while (itr.hasNext()) + { + String current_path = (String) itr.next(); + String FlashPath = FlashBaseDir + "/" + current_path; + + if (isAssetFolder(current_path)) + { + /* store information and update gui */ + m_Foldername = current_path; + publishProgress(0); + + /* open file in order to check if it's a folder */ + File current_folder = new File(FlashPath); + if (!current_folder.exists()) + { + if (!current_folder.mkdirs()) + { + Log.e("MinetestAssetCopy","\t failed create folder: " + + FlashPath); + } + else + { + Log.v("MinetestAssetCopy","\t created folder: " + + FlashPath); + } + } + + continue; + } + + /* if it's not a folder it's most likely a file */ + boolean refresh = true; + + File testme = new File(FlashPath); + + long asset_filesize = -1; + long stored_filesize = -1; + + if (testme.exists()) + { + try + { + AssetFileDescriptor fd = getAssets().openFd(current_path); + asset_filesize = fd.getLength(); + fd.close(); + } + catch (IOException e) + { + refresh = true; + m_asset_size_unknown.add(current_path); + Log.e("MinetestAssetCopy","Failed to open asset file \"" + + FlashPath + "\" for size check"); + } + + stored_filesize = testme.length(); + + if (asset_filesize == stored_filesize) + { + refresh = false; + } + + } + + if (refresh) + { + m_tocopy.add(current_path); + } + } + } + + /** + * read list of folders prepared on package build + */ + protected void BuildFolderList() + { + try + { + InputStream is = getAssets().open("index.txt"); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + + String line = reader.readLine(); + while (line != null) + { + m_foldernames.add(line); + line = reader.readLine(); + } + is.close(); + } catch (IOException e1) + { + Log.e("MinetestAssetCopy","Error on processing index.txt"); + e1.printStackTrace(); + } + } + + /** + * read list of asset files prepared on package build + */ + protected void BuildFileList() + { + long entrycount = 0; + try + { + InputStream is = getAssets().open("filelist.txt"); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + + String line = reader.readLine(); + while (line != null) + { + m_filenames.add(line); + line = reader.readLine(); + entrycount ++; + } + is.close(); + } + catch (IOException e1) + { + Log.e("MinetestAssetCopy","Error on processing filelist.txt"); + e1.printStackTrace(); + } + } + + protected void onPostExecute (String result) + { + finish(); + } + + protected boolean isAssetFolder(String path) + { + return m_foldernames.contains(path); + } + + boolean m_copy_started = false; + String m_Foldername = "media"; + Vector m_foldernames; + Vector m_filenames; + Vector m_tocopy; + Vector m_asset_size_unknown; + } +} diff --git a/build/android/src/net/minetest/minetest/MinetestTextEntry.java b/build/android/src/net/minetest/minetest/MinetestTextEntry.java new file mode 100644 index 000000000..68dc73274 --- /dev/null +++ b/build/android/src/net/minetest/minetest/MinetestTextEntry.java @@ -0,0 +1,91 @@ +package net.minetest.minetest; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.text.InputType; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnKeyListener; +import android.widget.EditText; + +public class MinetestTextEntry extends Activity { + public AlertDialog mTextInputDialog; + public EditText mTextInputWidget; + + private final int MultiLineTextInput = 1; + private final int SingleLineTextInput = 2; + private final int SingleLinePasswordInput = 3; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle b = getIntent().getExtras(); + String acceptButton = b.getString("EnterButton"); + String hint = b.getString("hint"); + String current = b.getString("current"); + int editType = b.getInt("editType"); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + mTextInputWidget = new EditText(this); + mTextInputWidget.setHint(hint); + mTextInputWidget.setText(current); + mTextInputWidget.setMinWidth(300); + if (editType == SingleLinePasswordInput) { + mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + else { + mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT); + } + + + builder.setView(mTextInputWidget); + + if (editType == MultiLineTextInput) { + builder.setPositiveButton(acceptButton, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) + { pushResult(mTextInputWidget.getText().toString()); } + }); + } + + builder.setOnCancelListener(new DialogInterface.OnCancelListener() { + public void onCancel(DialogInterface dialog) { + cancelDialog(); + } + }); + + mTextInputWidget.setOnKeyListener(new OnKeyListener() { + @Override + public boolean onKey(View view, int KeyCode, KeyEvent event) { + if ( KeyCode == KeyEvent.KEYCODE_ENTER){ + + pushResult(mTextInputWidget.getText().toString()); + return true; + } + return false; + } + }); + + mTextInputDialog = builder.create(); + mTextInputDialog.show(); + } + + public void pushResult(String text) { + Intent resultData = new Intent(); + resultData.putExtra("text", text); + setResult(Activity.RESULT_OK,resultData); + mTextInputDialog.dismiss(); + finish(); + } + + public void cancelDialog() { + setResult(Activity.RESULT_CANCELED); + mTextInputDialog.dismiss(); + finish(); + } +} diff --git a/build/android/src/net/minetest/minetest/MtNativeActivity.java b/build/android/src/net/minetest/minetest/MtNativeActivity.java new file mode 100644 index 000000000..fc95a8379 --- /dev/null +++ b/build/android/src/net/minetest/minetest/MtNativeActivity.java @@ -0,0 +1,100 @@ +package net.minetest.minetest; + +import android.app.NativeActivity; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.WindowManager; + +public class MtNativeActivity extends NativeActivity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + m_MessagReturnCode = -1; + m_MessageReturnValue = ""; + + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + + public void copyAssets() { + Intent intent = new Intent(this, MinetestAssetCopy.class); + startActivity(intent); + } + + public void showDialog(String acceptButton, String hint, String current, + int editType) { + + Intent intent = new Intent(this, MinetestTextEntry.class); + Bundle params = new Bundle(); + params.putString("acceptButton", acceptButton); + params.putString("hint", hint); + params.putString("current", current); + params.putInt("editType", editType); + intent.putExtras(params); + startActivityForResult(intent, 101); + m_MessageReturnValue = ""; + m_MessagReturnCode = -1; + } + + public static native void putMessageBoxResult(String text); + + /* ugly code to workaround putMessageBoxResult not beeing found */ + public int getDialogState() { + return m_MessagReturnCode; + } + + public String getDialogValue() { + m_MessagReturnCode = -1; + return m_MessageReturnValue; + } + + public float getDensity() { + return getResources().getDisplayMetrics().density; + } + + public int getDisplayWidth() { + return getResources().getDisplayMetrics().widthPixels; + } + + public int getDisplayHeight() { + return getResources().getDisplayMetrics().heightPixels; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, + Intent data) { + if (requestCode == 101) { + if (resultCode == RESULT_OK) { + String text = data.getStringExtra("text"); + m_MessagReturnCode = 0; + m_MessageReturnValue = text; + } + else { + m_MessagReturnCode = 1; + } + } + } + + static { + System.loadLibrary("openal"); + System.loadLibrary("ogg"); + System.loadLibrary("vorbis"); + System.loadLibrary("ssl"); + System.loadLibrary("crypto"); + System.loadLibrary("gmp"); + System.loadLibrary("iconv"); + + // We don't have to load libminetest.so ourselves, + // but if we do, we get nicer logcat errors when + // loading fails. + System.loadLibrary("minetest"); + } + + private int m_MessagReturnCode; + private String m_MessageReturnValue; +} diff --git a/builtin/async/init.lua b/builtin/async/init.lua new file mode 100644 index 000000000..1b2549685 --- /dev/null +++ b/builtin/async/init.lua @@ -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 + diff --git a/builtin/common/async_event.lua b/builtin/common/async_event.lua new file mode 100644 index 000000000..988af79b9 --- /dev/null +++ b/builtin/common/async_event.lua @@ -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 + diff --git a/builtin/common/filterlist.lua b/builtin/common/filterlist.lua new file mode 100644 index 000000000..210681133 --- /dev/null +++ b/builtin/common/filterlist.lua @@ -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 diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua new file mode 100644 index 000000000..08a230431 --- /dev/null +++ b/builtin/common/misc_helpers.lua @@ -0,0 +1,641 @@ +-- Minetest: builtin/misc_helpers.lua + +-------------------------------------------------------------------------------- +-- Localize functions to avoid table lookups (better performance). +local table_insert = table.insert +local string_sub, string_find = string.sub, string.find + +-------------------------------------------------------------------------------- +function basic_dump(o) + local tp = type(o) + if tp == "number" then + return tostring(o) + elseif tp == "string" then + return string.format("%q", o) + elseif tp == "boolean" then + return tostring(o) + elseif tp == "nil" then + return "nil" + -- Uncomment for full function dumping support. + -- Not currently enabled because bytecode isn't very human-readable and + -- dump's output is intended for humans. + --elseif tp == "function" then + -- return string.format("loadstring(%q)", string.dump(o)) + else + return string.format("<%s>", tp) + end +end + +local keywords = { + ["and"] = true, + ["break"] = true, + ["do"] = true, + ["else"] = true, + ["elseif"] = true, + ["end"] = true, + ["false"] = true, + ["for"] = true, + ["function"] = true, + ["goto"] = true, -- Lua 5.2 + ["if"] = true, + ["in"] = true, + ["local"] = true, + ["nil"] = true, + ["not"] = true, + ["or"] = true, + ["repeat"] = true, + ["return"] = true, + ["then"] = true, + ["true"] = true, + ["until"] = true, + ["while"] = true, +} +local function is_valid_identifier(str) + if not str:find("^[a-zA-Z_][a-zA-Z0-9_]*$") or keywords[str] then + return false + end + return true +end + +-------------------------------------------------------------------------------- +-- Dumps values in a line-per-value format. +-- For example, {test = {"Testing..."}} becomes: +-- _["test"] = {} +-- _["test"][1] = "Testing..." +-- This handles tables as keys and circular references properly. +-- It also handles multiple references well, writing the table only once. +-- The dumped argument is internal-only. + +function dump2(o, name, dumped) + name = name or "_" + -- "dumped" is used to keep track of serialized tables to handle + -- multiple references and circular tables properly. + -- It only contains tables as keys. The value is the name that + -- the table has in the dump, eg: + -- {x = {"y"}} -> dumped[{"y"}] = '_["x"]' + dumped = dumped or {} + if type(o) ~= "table" then + return string.format("%s = %s\n", name, basic_dump(o)) + end + if dumped[o] then + return string.format("%s = %s\n", name, dumped[o]) + end + dumped[o] = name + -- This contains a list of strings to be concatenated later (because + -- Lua is slow at individual concatenation). + local t = {} + for k, v in pairs(o) do + local keyStr + if type(k) == "table" then + if dumped[k] then + keyStr = dumped[k] + else + -- Key tables don't have a name, so use one of + -- the form _G["table: 0xFFFFFFF"] + keyStr = string.format("_G[%q]", tostring(k)) + -- Dump key table + 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-statement format. +-- For example, {test = {"Testing..."}} becomes: +-- [[{ +-- test = { +-- "Testing..." +-- } +-- }]] +-- This supports tables as keys, but not circular references. +-- It performs poorly with multiple references as it writes out the full +-- table each time. +-- The indent field specifies a indentation string, it defaults to a tab. +-- Use the empty string to disable indentation. +-- The dumped and level arguments are internal-only. + +function dump(o, indent, nested, level) + if type(o) ~= "table" then + return basic_dump(o) + end + -- Contains table -> true/nil of currently nested tables + nested = nested or {} + if nested[o] then + return "" + end + nested[o] = true + indent = indent or "\t" + level = level or 1 + local t = {} + local dumped_indexes = {} + for i, v in ipairs(o) do + table_insert(t, dump(v, indent, nested, level + 1)) + dumped_indexes[i] = true + end + for k, v in pairs(o) do + if not dumped_indexes[k] then + if type(k) ~= "string" or not is_valid_identifier(k) then + k = "["..dump(k, indent, nested, level + 1).."]" + end + v = dump(v, indent, nested, level + 1) + table_insert(t, k.." = "..v) + end + end + nested[o] = nil + if indent ~= "" then + local indent_str = "\n"..string.rep(indent, level) + local end_indent_str = "\n"..string.rep(indent, level - 1) + return string.format("{%s%s%s}", + indent_str, + table.concat(t, ","..indent_str), + end_indent_str) + end + return "{"..table.concat(t, ", ").."}" +end + +-------------------------------------------------------------------------------- +function string.split(str, delim, include_empty, max_splits, sep_is_pattern) + delim = delim or "," + max_splits = max_splits or -1 + local items = {} + local pos, len, seplen = 1, #str, #delim + local plain = not sep_is_pattern + max_splits = max_splits + 1 + repeat + local np, npe = string_find(str, delim, pos, plain) + np, npe = (np or (len+1)), (npe or (len+1)) + if (not np) or (max_splits == 1) then + np = len + 1 + npe = np + end + local s = string_sub(str, pos, np - 1) + if include_empty or (s ~= "") then + max_splits = max_splits - 1 + table_insert(items, s) + end + pos = npe + 1 + until (max_splits == 0) or (pos > (len + 1)) + return items +end + +-------------------------------------------------------------------------------- +function table.indexof(list, val) + for i = 1, #list do + if list[i] == val then + return i + end + end + return -1 +end + +assert(table.indexof({"foo", "bar"}, "foo") == 1) +assert(table.indexof({"foo", "bar"}, "baz") == -1) + +-------------------------------------------------------------------------------- +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 math.sign(x, tolerance) + tolerance = tolerance or 0 + if x > tolerance then + return 1 + elseif x < -tolerance then + return -1 + end + return 0 +end + +-------------------------------------------------------------------------------- +function get_last_folder(text,count) + local parts = text:split(DIR_DELIM) + + if count == nil then + return parts[#parts] + end + + local retval = "" + for i=1,count,1 do + retval = retval .. parts[#parts - (count-i)] .. DIR_DELIM + end + + return retval +end + +-------------------------------------------------------------------------------- +function cleanup_path(temppath) + + local parts = temppath:split("-") + temppath = "" + for i=1,#parts,1 do + if temppath ~= "" then + temppath = temppath .. "_" + end + temppath = temppath .. parts[i] + end + + parts = temppath:split(".") + temppath = "" + for i=1,#parts,1 do + if temppath ~= "" then + temppath = temppath .. "_" + end + temppath = temppath .. parts[i] + end + + parts = temppath:split("'") + temppath = "" + for i=1,#parts,1 do + if temppath ~= "" then + temppath = temppath .. "" + end + temppath = temppath .. parts[i] + end + + parts = temppath:split(" ") + temppath = "" + for i=1,#parts,1 do + if temppath ~= "" then + temppath = temppath + end + temppath = temppath .. parts[i] + end + + return temppath +end + +function core.formspec_escape(text) + if text ~= nil then + text = string.gsub(text,"\\","\\\\") + text = string.gsub(text,"%]","\\]") + text = string.gsub(text,"%[","\\[") + text = string.gsub(text,";","\\;") + text = string.gsub(text,",","\\,") + end + return text +end + + +function core.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.explode_scrollbar_event(evt) + local retval = core.explode_textlist_event(evt) + + retval.value = retval.index + retval.index = nil + + return retval +end + +-------------------------------------------------------------------------------- +function core.pos_to_string(pos, decimal_places) + local x = pos.x + local y = pos.y + local z = pos.z + if decimal_places ~= nil then + x = string.format("%." .. decimal_places .. "f", x) + y = string.format("%." .. decimal_places .. "f", y) + z = string.format("%." .. decimal_places .. "f", z) + end + return "(" .. x .. "," .. y .. "," .. z .. ")" +end + +-------------------------------------------------------------------------------- +function core.string_to_pos(value) + if value == nil then + return nil + end + + local p = {} + p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") + if p.x and p.y and p.z then + p.x = tonumber(p.x) + p.y = tonumber(p.y) + p.z = tonumber(p.z) + return p + end + local p = {} + p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$") + if p.x and p.y and p.z then + p.x = tonumber(p.x) + p.y = tonumber(p.y) + p.z = tonumber(p.z) + return p + end + return nil +end + +assert(core.string_to_pos("10.0, 5, -2").x == 10) +assert(core.string_to_pos("( 10.0, 5, -2)").z == -2) +assert(core.string_to_pos("asd, 5, -2)") == nil) + +-------------------------------------------------------------------------------- +function core.string_to_area(value) + local p1, p2 = unpack(value:split(") (")) + if p1 == nil or p2 == nil then + return nil + end + + p1 = core.string_to_pos(p1 .. ")") + p2 = core.string_to_pos("(" .. p2) + if p1 == nil or p2 == nil then + return nil + end + + return p1, p2 +end + +local function test_string_to_area() + local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2, 4, -12.53)") + assert(p1.x == 10.0 and p1.y == 5 and p1.z == -2) + assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53) + + p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53") + assert(p1 == nil and p2 == nil) + + p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53") + assert(p1 == nil and p2 == nil) +end + +test_string_to_area() + +-------------------------------------------------------------------------------- +function table.copy(t, seen) + local n = {} + seen = seen or {} + seen[t] = n + for k, v in pairs(t) do + n[(type(k) == "table" and (seen[k] or table.copy(k, seen))) or k] = + (type(v) == "table" and (seen[v] or table.copy(v, seen))) or v + end + return n +end +-------------------------------------------------------------------------------- +-- mainmenu only functions +-------------------------------------------------------------------------------- +if INIT == "mainmenu" then + function core.get_game(index) + local games = game.get_games() + + if index > 0 and index <= #games then + return games[index] + end + + return nil + end + + function fgettext_ne(text, ...) + text = core.gettext(text) + local arg = {n=select('#', ...), ...} + if arg.n >= 1 then + -- Insert positional parameters ($1, $2, ...) + local result = '' + local pos = 1 + while pos <= text:len() do + local newpos = text:find('[$]', pos) + if newpos == nil then + result = result .. text:sub(pos) + pos = text:len() + 1 + else + local paramindex = + tonumber(text:sub(newpos+1, newpos+1)) + result = result .. text:sub(pos, newpos-1) + .. tostring(arg[paramindex]) + pos = newpos + 2 + end + end + text = result + end + return text + end + + function fgettext(text, ...) + return core.formspec_escape(fgettext_ne(text, ...)) + end +end + diff --git a/builtin/common/serialize.lua b/builtin/common/serialize.lua new file mode 100644 index 000000000..90b8b2ad6 --- /dev/null +++ b/builtin/common/serialize.lua @@ -0,0 +1,218 @@ +--- Lua module to serialize values as Lua code. +-- From: https://github.com/fab13n/metalua/blob/no-dll/src/lib/serialize.lua +-- License: MIT +-- @copyright 2006-2997 Fabien Fleutot +-- @author Fabien Fleutot +-- @author ShadowNinja +-------------------------------------------------------------------------------- + +--- Serialize an object into a source code string. This string, when passed as +-- an argument to deserialize(), returns an object structurally identical to +-- the original one. The following are currently supported: +-- * Booleans, numbers, strings, and nil. +-- * Functions; uses interpreter-dependent (and sometimes platform-dependent) bytecode! +-- * Tables; they can cantain multiple references and can be recursive, but metatables aren't saved. +-- This works in two phases: +-- 1. Recursively find and record multiple references and recursion. +-- 2. Recursively dump the value into a string. +-- @param x Value to serialize (nil is allowed). +-- @return load()able string containing the value. +function core.serialize(x) + local local_index = 1 -- Top index of the "_" local table in the dump + -- table->nil/1/2 set of tables seen. + -- nil = not seen, 1 = seen once, 2 = seen multiple times. + local seen = {} + + -- nest_points are places where a table appears within itself, directly + -- or not. For instance, all of these chunks create nest points in + -- table x: "x = {}; x[x] = 1", "x = {}; x[1] = x", + -- "x = {}; x[1] = {y = {x}}". + -- To handle those, two tables are used by mark_nest_point: + -- * nested - Transient set of tables being currently traversed. + -- Used for detecting nested tables. + -- * nest_points - parent->{key=value, ...} table cantaining the nested + -- keys and values in the parent. They're all dumped after all the + -- other table operations have been performed. + -- + -- mark_nest_point(p, k, v) fills nest_points with information required + -- to remember that key/value (k, v) creates a nest point in table + -- parent. It also marks "parent" and the nested item(s) as occuring + -- multiple times, since several references to it will be required in + -- order to patch the nest points. + local nest_points = {} + local nested = {} + local function mark_nest_point(parent, k, v) + local nk, nv = nested[k], nested[v] + local np = nest_points[parent] + if not np then + np = {} + nest_points[parent] = np + end + np[k] = v + seen[parent] = 2 + if nk then seen[k] = 2 end + if nv then seen[v] = 2 end + end + + -- First phase, list the tables and functions which appear more than + -- once in x. + local function mark_multiple_occurences(x) + local tp = type(x) + if tp ~= "table" and tp ~= "function" then + -- No identity (comparison is done by value, not by instance) + return + end + if seen[x] == 1 then + seen[x] = 2 + elseif seen[x] ~= 2 then + seen[x] = 1 + end + + if tp == "table" then + nested[x] = true + for k, v in pairs(x) do + if nested[k] or nested[v] then + mark_nest_point(x, k, v) + else + mark_multiple_occurences(k) + mark_multiple_occurences(v) + end + end + nested[x] = nil + end + end + + local dumped = {} -- object->varname set + local local_defs = {} -- Dumped local definitions as source code lines + + -- Mutually recursive local functions: + local dump_val, dump_or_ref_val + + -- If x occurs multiple times, dump the local variable rather than + -- the value. If it's the first time it's dumped, also dump the + -- content in local_defs. + function dump_or_ref_val(x) + if seen[x] ~= 2 then + return dump_val(x) + end + local var = dumped[x] + if var then -- Already referenced + return var + end + -- First occurence, create and register reference + local val = dump_val(x) + local i = local_index + local_index = local_index + 1 + var = "_["..i.."]" + table.insert(local_defs, var.." = "..val) + dumped[x] = var + return var + end + + -- Second phase. Dump the object; subparts occuring multiple times + -- are dumped in local variables which can be referenced multiple + -- times. Care is taken to dump local vars in a sensible order. + function dump_val(x) + local tp = type(x) + if x == nil then return "nil" + elseif tp == "string" then return string.format("%q", x) + elseif tp == "boolean" then return x and "true" or "false" + elseif tp == "function" then + return string.format("loadstring(%q)", string.dump(x)) + elseif tp == "number" then + -- Serialize integers with string.format to prevent + -- scientific notation, which doesn't preserve + -- precision and breaks things like node position + -- hashes. Serialize floats normally. + if math.floor(x) == x then + return string.format("%d", x) + else + return tostring(x) + end + elseif tp == "table" then + local vals = {} + local idx_dumped = {} + local np = nest_points[x] + for i, v in ipairs(x) do + if not np or not np[i] then + table.insert(vals, dump_or_ref_val(v)) + end + idx_dumped[i] = true + end + for k, v in pairs(x) do + if (not np or not np[k]) and + not idx_dumped[k] then + table.insert(vals, + "["..dump_or_ref_val(k).."] = " + ..dump_or_ref_val(v)) + end + end + return "{"..table.concat(vals, ", ").."}" + else + error("Can't serialize data of type "..tp) + end + end + + local function dump_nest_points() + for parent, vals in pairs(nest_points) do + for k, v in pairs(vals) do + table.insert(local_defs, dump_or_ref_val(parent) + .."["..dump_or_ref_val(k).."] = " + ..dump_or_ref_val(v)) + end + end + end + + mark_multiple_occurences(x) + local top_level = dump_or_ref_val(x) + dump_nest_points() + + if next(local_defs) then + return "local _ = {}\n" + ..table.concat(local_defs, "\n") + .."\nreturn "..top_level + else + return "return "..top_level + end +end + +-- Deserialization + +local env = { + loadstring = loadstring, +} + +local safe_env = { + loadstring = function() end, +} + +function core.deserialize(str, safe) + if str:byte(1) == 0x1B then + return nil, "Bytecode prohibited" + end + local f, err = loadstring(str) + if not f then return nil, err end + setfenv(f, safe and safe_env or env) + + local good, data = pcall(f) + if good then + return data + else + return nil, data + end +end + + +-- Unit tests +local test_in = {cat={sound="nyan", speed=400}, dog={sound="woof"}} +local test_out = core.deserialize(core.serialize(test_in)) + +assert(test_in.cat.sound == test_out.cat.sound) +assert(test_in.cat.speed == test_out.cat.speed) +assert(test_in.dog.sound == test_out.dog.sound) + +test_in = {escape_chars="\n\r\t\v\\\"\'", non_european="θשׁ٩∂"} +test_out = core.deserialize(core.serialize(test_in)) +assert(test_in.escape_chars == test_out.escape_chars) +assert(test_in.non_european == test_out.non_european) + diff --git a/builtin/common/strict.lua b/builtin/common/strict.lua new file mode 100644 index 000000000..05ceadf7a --- /dev/null +++ b/builtin/common/strict.lua @@ -0,0 +1,53 @@ + +-- Always warn when creating a global variable, even outside of a function. +-- This ignores mod namespaces (variables with the same name as the current mod). +local WARN_INIT = false + + +function core.global_exists(name) + return rawget(_G, name) ~= nil +end + + +local meta = {} +local declared = {} +-- Key is source file, line, and variable name; seperated by NULs +local warned = {} + +function meta:__newindex(name, value) + local info = debug.getinfo(2, "Sl") + local desc = ("%s:%d"):format(info.short_src, info.currentline) + if not declared[name] then + local warn_key = ("%s\0%d\0%s"):format(info.source, + info.currentline, name) + if not warned[warn_key] and info.what ~= "main" and + info.what ~= "C" then + core.log("warning", ("Assignment to undeclared ".. + "global %q inside a function at %s.") + :format(name, desc)) + warned[warn_key] = true + end + declared[name] = true + end + -- Ignore mod namespaces + if WARN_INIT and name ~= core.get_current_modname() then + core.log("warning", ("Global variable %q created at %s.") + :format(name, desc)) + end + rawset(self, name, value) +end + + +function meta:__index(name) + local info = debug.getinfo(2, "Sl") + local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name) + if not declared[name] and not warned[warn_key] and info.what ~= "C" then + core.log("warning", ("Undeclared global variable %q accessed at %s:%s") + :format(name, info.short_src, info.currentline)) + warned[warn_key] = true + end + return rawget(self, name) +end + +setmetatable(_G, meta) + diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua new file mode 100644 index 000000000..e9ed3aab3 --- /dev/null +++ b/builtin/common/vector.lua @@ -0,0 +1,133 @@ + +vector = {} + +function vector.new(a, b, c) + if type(a) == "table" then + assert(a.x and a.y and a.z, "Invalid vector passed to vector.new()") + return {x=a.x, y=a.y, z=a.z} + elseif a then + assert(b and c, "Invalid arguments for vector.new()") + return {x=a, y=b, z=c} + end + return {x=0, y=0, z=0} +end + +function vector.equals(a, b) + return a.x == b.x and + a.y == b.y and + a.z == b.z +end + +function vector.length(v) + return math.hypot(v.x, math.hypot(v.y, v.z)) +end + +function vector.normalize(v) + local len = vector.length(v) + if len == 0 then + return {x=0, y=0, z=0} + else + return vector.divide(v, len) + end +end + +function vector.round(v) + return { + x = math.floor(v.x + 0.5), + y = math.floor(v.y + 0.5), + z = math.floor(v.z + 0.5) + } +end + +function vector.apply(v, func) + return { + x = func(v.x), + y = func(v.y), + z = func(v.z) + } +end + +function vector.distance(a, b) + local x = a.x - b.x + local y = a.y - b.y + local z = a.z - b.z + return math.hypot(x, math.hypot(y, z)) +end + +function vector.direction(pos1, pos2) + local x_raw = pos2.x - pos1.x + local y_raw = pos2.y - pos1.y + local z_raw = pos2.z - pos1.z + local x_abs = math.abs(x_raw) + local y_abs = math.abs(y_raw) + local z_abs = math.abs(z_raw) + if x_abs >= y_abs and + x_abs >= z_abs then + y_raw = y_raw * (1 / x_abs) + z_raw = z_raw * (1 / x_abs) + x_raw = x_raw / x_abs + end + if y_abs >= x_abs and + y_abs >= z_abs then + x_raw = x_raw * (1 / y_abs) + z_raw = z_raw * (1 / y_abs) + y_raw = y_raw / y_abs + end + if z_abs >= y_abs and + z_abs >= x_abs then + x_raw = x_raw * (1 / z_abs) + y_raw = y_raw * (1 / z_abs) + z_raw = z_raw / z_abs + end + return {x=x_raw, y=y_raw, z=z_raw} +end + + +function vector.add(a, b) + if type(b) == "table" then + return {x = a.x + b.x, + y = a.y + b.y, + z = a.z + b.z} + else + return {x = a.x + b, + y = a.y + b, + z = a.z + b} + end +end + +function vector.subtract(a, b) + if type(b) == "table" then + return {x = a.x - b.x, + y = a.y - b.y, + z = a.z - b.z} + else + return {x = a.x - b, + y = a.y - b, + z = a.z - b} + end +end + +function vector.multiply(a, b) + if type(b) == "table" then + return {x = a.x * b.x, + y = a.y * b.y, + z = a.z * b.z} + else + return {x = a.x * b, + y = a.y * b, + z = a.z * b} + end +end + +function vector.divide(a, b) + if type(b) == "table" then + return {x = a.x / b.x, + y = a.y / b.y, + z = a.z / b.z} + else + return {x = a.x / b, + y = a.y / b, + z = a.z / b} + end +end + diff --git a/builtin/fstk/buttonbar.lua b/builtin/fstk/buttonbar.lua new file mode 100644 index 000000000..1ad175624 --- /dev/null +++ b/builtin/fstk/buttonbar.lua @@ -0,0 +1,210 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +local function buttonbar_formspec(self) + + if self.hidden then + return "" + end + + local formspec = string.format("box[%f,%f;%f,%f;%s]", + self.pos.x,self.pos.y ,self.size.x,self.size.y,self.bgcolor) + + for i=self.startbutton,#self.buttons,1 do + local btn_name = self.buttons[i].name + local btn_pos = {} + + if self.orientation == "horizontal" then + btn_pos.x = self.pos.x + --base pos + (i - self.startbutton) * self.btn_size + --button offset + self.btn_initial_offset + else + btn_pos.x = self.pos.x + (self.btn_size * 0.05) + end + + if self.orientation == "vertical" then + btn_pos.y = self.pos.y + --base pos + (i - self.startbutton) * self.btn_size + --button offset + self.btn_initial_offset + else + btn_pos.y = self.pos.y + (self.btn_size * 0.05) + end + + if (self.orientation == "vertical" and + (btn_pos.y + self.btn_size <= self.pos.y + self.size.y)) or + (self.orientation == "horizontal" and + (btn_pos.x + self.btn_size <= self.pos.x + self.size.x)) then + + local borders="true" + + if self.buttons[i].image ~= nil then + borders="false" + end + + formspec = formspec .. + string.format("image_button[%f,%f;%f,%f;%s;%s;%s;true;%s]tooltip[%s;%s]", + btn_pos.x, btn_pos.y, self.btn_size, self.btn_size, + self.buttons[i].image, btn_name, self.buttons[i].caption, + borders, btn_name, self.buttons[i].tooltip) + else + --print("end of displayable buttons: orientation: " .. self.orientation) + --print( "button_end: " .. (btn_pos.y + self.btn_size - (self.btn_size * 0.05))) + --print( "bar_end: " .. (self.pos.x + self.size.x)) + break + end + end + + if (self.have_move_buttons) then + local btn_dec_pos = {} + btn_dec_pos.x = self.pos.x + (self.btn_size * 0.05) + btn_dec_pos.y = self.pos.y + (self.btn_size * 0.05) + local btn_inc_pos = {} + local btn_size = {} + + if self.orientation == "horizontal" then + btn_size.x = 0.5 + btn_size.y = self.btn_size + btn_inc_pos.x = self.pos.x + self.size.x - 0.5 + btn_inc_pos.y = self.pos.y + (self.btn_size * 0.05) + else + btn_size.x = self.btn_size + btn_size.y = 0.5 + btn_inc_pos.x = self.pos.x + (self.btn_size * 0.05) + btn_inc_pos.y = self.pos.y + self.size.y - 0.5 + end + + local text_dec = "<" + local text_inc = ">" + if self.orientation == "vertical" then + text_dec = "^" + text_inc = "v" + end + + formspec = formspec .. + string.format("image_button[%f,%f;%f,%f;;btnbar_dec_%s;%s;true;true]", + btn_dec_pos.x, btn_dec_pos.y, btn_size.x, btn_size.y, + self.name, text_dec) + + formspec = formspec .. + string.format("image_button[%f,%f;%f,%f;;btnbar_inc_%s;%s;true;true]", + btn_inc_pos.x, btn_inc_pos.y, btn_size.x, btn_size.y, + self.name, text_inc) + end + + return formspec +end + +local function buttonbar_buttonhandler(self, fields) + + if fields["btnbar_inc_" .. self.name] ~= nil and + self.startbutton < #self.buttons then + + self.startbutton = self.startbutton + 1 + return true + end + + if fields["btnbar_dec_" .. self.name] ~= nil and self.startbutton > 1 then + self.startbutton = self.startbutton - 1 + return true + end + + for i=1,#self.buttons,1 do + if fields[self.buttons[i].name] ~= nil then + return self.userbuttonhandler(fields) + end + end +end + +local buttonbar_metatable = { + handle_buttons = buttonbar_buttonhandler, + handle_events = function(self, event) end, + get_formspec = buttonbar_formspec, + + hide = function(self) self.hidden = true end, + show = function(self) self.hidden = false end, + + delete = function(self) ui.delete(self) end, + + add_button = function(self, name, caption, image, tooltip) + if caption == nil then caption = "" end + if image == nil then image = "" end + if tooltip == nil then tooltip = "" end + + table.insert(self.buttons,{ name=name, caption=caption, image=image, tooltip=tooltip}) + if self.orientation == "horizontal" then + if ( (self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2) + > self.size.x ) then + + self.btn_initial_offset = self.btn_size * 0.05 + 0.5 + self.have_move_buttons = true + end + else + if ((self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2) + > self.size.y ) then + + self.btn_initial_offset = self.btn_size * 0.05 + 0.5 + self.have_move_buttons = true + end + end + end, + + set_bgparams = function(self, bgcolor) + if (type(bgcolor) == "string") then + self.bgcolor = bgcolor + end + end, +} + +buttonbar_metatable.__index = buttonbar_metatable + +function buttonbar_create(name, cbf_buttonhandler, pos, orientation, size) + assert(name ~= nil) + assert(cbf_buttonhandler ~= nil) + assert(orientation == "vertical" or orientation == "horizontal") + assert(pos ~= nil and type(pos) == "table") + assert(size ~= nil and type(size) == "table") + + local self = {} + self.name = name + self.type = "addon" + self.bgcolor = "#000000" + self.pos = pos + self.size = size + self.orientation = orientation + self.startbutton = 1 + self.have_move_buttons = false + self.hidden = false + + if self.orientation == "horizontal" then + self.btn_size = self.size.y + else + self.btn_size = self.size.x + end + + if (self.btn_initial_offset == nil) then + self.btn_initial_offset = self.btn_size * 0.05 + end + + self.userbuttonhandler = cbf_buttonhandler + self.buttons = {} + + setmetatable(self,buttonbar_metatable) + + ui.add(self) + return self +end diff --git a/builtin/fstk/dialog.lua b/builtin/fstk/dialog.lua new file mode 100644 index 000000000..df887f413 --- /dev/null +++ b/builtin/fstk/dialog.lua @@ -0,0 +1,69 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--this program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +local function dialog_event_handler(self,event) + if self.user_eventhandler == nil or + self.user_eventhandler(event) == false then + + --close dialog on esc + if event == "MenuQuit" then + self:delete() + return true + end + end +end + +local dialog_metatable = { + eventhandler = dialog_event_handler, + get_formspec = function(self) + if not self.hidden then return self.formspec(self.data) end + end, + handle_buttons = function(self,fields) + if not self.hidden then return self.buttonhandler(self,fields) end + end, + handle_events = function(self,event) + if not self.hidden then return self.eventhandler(self,event) end + end, + hide = function(self) self.hidden = true end, + show = function(self) self.hidden = false end, + delete = function(self) + if self.parent ~= nil then + self.parent:show() + end + ui.delete(self) + end, + set_parent = function(self,parent) self.parent = parent end +} +dialog_metatable.__index = dialog_metatable + +function dialog_create(name,get_formspec,buttonhandler,eventhandler) + local self = {} + + self.name = name + self.type = "toplevel" + self.hidden = true + self.data = {} + + self.formspec = get_formspec + self.buttonhandler = buttonhandler + self.user_eventhandler = eventhandler + + setmetatable(self,dialog_metatable) + + ui.add(self) + return self +end diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua new file mode 100644 index 000000000..c65f6dd7f --- /dev/null +++ b/builtin/fstk/tabview.lua @@ -0,0 +1,273 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +-------------------------------------------------------------------------------- +-- A tabview implementation -- +-- Usage: -- +-- tabview.create: returns initialized tabview raw element -- +-- element.add(tab): add a tab declaration -- +-- element.handle_buttons() -- +-- element.handle_events() -- +-- element.getFormspec() returns formspec of tabview -- +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +local function add_tab(self,tab) + assert(tab.size == nil or (type(tab.size) == table and + tab.size.x ~= nil and tab.size.y ~= nil)) + assert(tab.cbf_formspec ~= nil and type(tab.cbf_formspec) == "function") + assert(tab.cbf_button_handler == nil or + type(tab.cbf_button_handler) == "function") + assert(tab.cbf_events == nil or type(tab.cbf_events) == "function") + + local newtab = { + name = tab.name, + caption = tab.caption, + button_handler = tab.cbf_button_handler, + event_handler = tab.cbf_events, + get_formspec = tab.cbf_formspec, + tabsize = tab.tabsize, + on_change = tab.on_change, + tabdata = {}, + } + + 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 diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua new file mode 100644 index 000000000..3ac0386ca --- /dev/null +++ b/builtin/fstk/ui.lua @@ -0,0 +1,208 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +ui = {} +ui.childlist = {} +ui.default = nil + +-------------------------------------------------------------------------------- +function ui.add(child) + --TODO check child + ui.childlist[child.name] = child + + return child.name +end + +-------------------------------------------------------------------------------- +function ui.delete(child) + + if ui.childlist[child.name] == nil then + return false + end + + ui.childlist[child.name] = nil + return true +end + +-------------------------------------------------------------------------------- +function ui.set_default(name) + ui.default = name +end + +-------------------------------------------------------------------------------- +function ui.find_by_name(name) + return ui.childlist[name] +end + +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- Internal functions not to be called from user +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- + +local function wordwrap_quickhack(str) + local res = "" + local ar = str:split("\n") + for i = 1, #ar do + local text = ar[i] + -- Hack to add word wrapping. + -- TODO: Add engine support for wrapping in formspecs + while #text > 80 do + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(string.sub(text, 1, 79)) + text = string.sub(text, 80, #text) + end + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(text) + end + return res +end + +-------------------------------------------------------------------------------- +function ui.update() + local formspec = "" + + -- handle errors + if gamedata ~= nil and gamedata.reconnect_requested then + formspec = wordwrap_quickhack(gamedata.errormessage or "") + formspec = "size[12,5]" .. + "label[0.5,0;" .. fgettext("The server has requested a reconnect:") .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[6,4.6;3,0.5;btn_reconnect_no;" .. fgettext("Main menu") .. "]" .. + "button[3,4.6;3,0.5;btn_reconnect_yes;" .. fgettext("Reconnect") .. "]" + elseif gamedata ~= nil and gamedata.errormessage ~= nil then + formspec = wordwrap_quickhack(gamedata.errormessage) + local error_title + if string.find(gamedata.errormessage, "ModError") then + error_title = fgettext("An error occured in a Lua script, such as a mod:") + else + error_title = fgettext("An error occured:") + end + formspec = "size[12,5]" .. + "label[0.5,0;" .. error_title .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[4.5,4.6;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" + else + local active_toplevel_ui_elements = 0 + for key,value in pairs(ui.childlist) do + if (value.type == "toplevel") then + local retval = value:get_formspec() + + if retval ~= nil and retval ~= "" then + active_toplevel_ui_elements = active_toplevel_ui_elements +1 + formspec = formspec .. retval + end + end + end + + -- no need to show addons if there ain't a toplevel element + if (active_toplevel_ui_elements > 0) then + for key,value in pairs(ui.childlist) do + if (value.type == "addon") then + local retval = value:get_formspec() + + if retval ~= nil and retval ~= "" then + formspec = formspec .. retval + end + end + end + end + + if (active_toplevel_ui_elements > 1) then + core.log("warning", "more than one active ui ".. + "element, self most likely isn't intended") + end + + if (active_toplevel_ui_elements == 0) then + core.log("warning", "no toplevel ui element ".. + "active; switching to default") + ui.childlist[ui.default]:show() + formspec = ui.childlist[ui.default]:get_formspec() + end + end + core.update_formspec(formspec) +end + +-------------------------------------------------------------------------------- +function ui.handle_buttons(fields) + for key,value in pairs(ui.childlist) do + + local retval = value:handle_buttons(fields) + + if retval then + ui.update() + return + end + end +end + + +-------------------------------------------------------------------------------- +function ui.handle_events(event) + + for key,value in pairs(ui.childlist) do + + if value.handle_events ~= nil then + local retval = value:handle_events(event) + + if retval then + return retval + end + end + end +end + +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +-- initialize callbacks +-------------------------------------------------------------------------------- +-------------------------------------------------------------------------------- +core.button_handler = function(fields) + if fields["btn_reconnect_yes"] then + gamedata.reconnect_requested = false + gamedata.errormessage = nil + gamedata.do_reconnect = true + core.start() + return + elseif fields["btn_reconnect_no"] or fields["btn_error_confirm"] then + gamedata.errormessage = nil + gamedata.reconnect_requested = false + ui.update() + return + end + + if ui.handle_buttons(fields) then + ui.update() + end +end + +-------------------------------------------------------------------------------- +core.event_handler = function(event) + if ui.handle_events(event) then + ui.update() + return + end + + if event == "Refresh" then + ui.update() + return + end +end diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua new file mode 100644 index 000000000..423eb3134 --- /dev/null +++ b/builtin/game/auth.lua @@ -0,0 +1,201 @@ +-- Minetest: builtin/auth.lua + +-- +-- Authentication handler +-- + +function core.string_to_privs(str, delim) + assert(type(str) == "string") + delim = delim or ',' + local privs = {} + for _, priv in pairs(string.split(str, delim)) do + privs[priv:trim()] = true + end + return privs +end + +function core.privs_to_string(privs, delim) + assert(type(privs) == "table") + delim = delim or ',' + local list = {} + for priv, bool in pairs(privs) do + if bool then + 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 fields = line:split(":", true) + local name, password, privilege_string, last_login = unpack(fields) + last_login = tonumber(last_login) + if not (name and password and privilege_string) then + error("Invalid line in auth.txt: "..dump(line)) + end + local privileges = core.string_to_privs(privilege_string) + newtable[name] = {password=password, privileges=privileges, last_login=last_login} + end + end + io.close(file) + core.auth_table = newtable + core.notify_authentication_modified() +end + +local function save_auth_file() + local newtable = {} + -- Check table for validness before attempting to save + for name, stuff in pairs(core.auth_table) do + assert(type(name) == "string") + assert(name ~= "") + assert(type(stuff) == "table") + assert(type(stuff.password) == "string") + assert(type(stuff.privileges) == "table") + assert(stuff.last_login == nil or type(stuff.last_login) == "number") + end + local 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 priv_string = core.privs_to_string(stuff.privileges) + local parts = {name, stuff.password, priv_string, stuff.last_login or ""} + file:write(table.concat(parts, ":").."\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, + -- Is set to nil if unknown + last_login = core.auth_table[name].last_login, + } + end, + create_auth = function(name, password) + assert(type(name) == "string") + assert(type(password) == "string") + core.log('info', "Built-in authentication handler adding player '"..name.."'") + core.auth_table[name] = { + password = password, + privileges = core.string_to_privs(core.setting_get("default_privs")), + last_login = os.time(), + } + save_auth_file() + end, + set_password = function(name, password) + assert(type(name) == "string") + assert(type(password) == "string") + if not core.auth_table[name] then + core.builtin_auth_handler.create_auth(name, password) + else + core.log('info', "Built-in authentication handler setting password of player '"..name.."'") + core.auth_table[name].password = password + save_auth_file() + end + return true + end, + set_privileges = function(name, privileges) + assert(type(name) == "string") + assert(type(privileges) == "table") + if not core.auth_table[name] then + core.builtin_auth_handler.create_auth(name, + core.get_password_hash(name, + core.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, + record_login = function(name) + assert(type(name) == "string") + assert(core.auth_table[name]).last_login = os.time() + save_auth_file() + end, +} + +function core.register_authentication_handler(handler) + if core.registered_auth_handler then + error("Add-on authentication handler already registered by "..core.registered_auth_handler_modname) + end + core.registered_auth_handler = handler + core.registered_auth_handler_modname = core.get_current_modname() + handler.mod_origin = core.registered_auth_handler_modname +end + +function core.get_auth_handler() + return core.registered_auth_handler or core.builtin_auth_handler +end + +local function auth_pass(name) + return function(...) + local auth_handler = core.get_auth_handler() + if auth_handler[name] then + return auth_handler[name](...) + end + return false + end +end + +core.set_player_password = auth_pass("set_password") +core.set_player_privs = auth_pass("set_privileges") +core.auth_reload = auth_pass("reload") + + +local record_login = auth_pass("record_login") + +core.register_on_joinplayer(function(player) + record_login(player:get_player_name()) +end) + diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua new file mode 100644 index 000000000..6a35c034e --- /dev/null +++ b/builtin/game/chatcommands.lua @@ -0,0 +1,888 @@ +-- 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 {} + def.mod_origin = core.get_current_modname() or "??" + core.chatcommands[cmd] = def +end + +if core.setting_getbool("mod_profiling") then + local tracefct = profiling_print_log + profiling_print_log = nil + core.register_chatcommand("save_mod_profile", + { + params = "", + description = "save mod profiling data to logfile " .. + "(depends on default loglevel)", + func = tracefct, + privs = { server=true } + }) +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 + core.set_last_run_mod(cmd_def.mod_origin) + local success, message = cmd_def.func(name, param) + if message then + core.chat_send_player(name, message) + end + else + core.chat_send_player(name, "You don't have permission" + .. " to run this command (missing privileges: " + .. table.concat(missing_privs, ", ") .. ")") + end + return true -- Handled chat message +end) + +-- Parses a "range" string in the format of "here (number)" or +-- "(x1, y1, z1) (x2, y2, z2)", returning two position vectors +local function parse_range_str(player_name, str) + local p1, p2 + local args = str:split(" ") + + if args[1] == "here" then + p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2])) + if p1 == nil then + return false, "Unable to get player " .. player_name .. " position" + end + else + p1, p2 = core.string_to_area(str) + if p1 == nil then + return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" + end + end + + return p1, p2 +end + +-- +-- Chat commands +-- +core.register_chatcommand("me", { + params = "", + 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/]", + 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 ' 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 = "", + 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 = " |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 = " |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 + 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 = " ", + 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 act_str_past = "?" + local act_str_pres = "?" + if not raw_password then + core.set_player_password(toname, "") + act_str_past = "cleared" + act_str_pres = "clears" + else + core.set_player_password(toname, + core.get_password_hash(toname, + raw_password)) + act_str_past = "set" + act_str_pres = "sets" + end + if toname ~= name then + core.chat_send_player(toname, "Your password was " + .. act_str_past .. " by " .. name) + end + + core.log("action", name .. " " .. act_str_pres + .. " password of " .. toname .. ".") + + return true, "Password of player \"" .. toname .. "\" " .. act_str_past + end, +}) + +core.register_chatcommand("clearpassword", { + params = "", + description = "set empty password", + privs = {password=true}, + func = function(name, param) + local toname = param + if toname == "" then + return false, "Name field required" + end + core.set_player_password(toname, '') + + core.log("action", name .. " clears password of " .. toname .. ".") + + return true, "Password of player \"" .. toname .. "\" cleared" + end, +}) + +core.register_chatcommand("auth_reload", { + params = "", + description = "reload authentication data", + privs = {server=true}, + func = function(name, param) + local done = core.auth_reload() + return done, (done and "Done." or "Failed.") + end, +}) + +core.register_chatcommand("teleport", { + params = ",, | | ,, | ", + 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 not core.check_player_privs(name, {bring=true}) then + return false, "You don't have permission to teleport other players (missing bring privilege)" + end + + local teleportee = nil + local p = {} + local teleportee_name = nil + teleportee_name, p.x, p.y, p.z = param:match( + "^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") + p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z) + if teleportee_name then + teleportee = core.get_player_by_name(teleportee_name) + end + if teleportee and p.x and p.y and p.z then + teleportee:setpos(p) + return true, "Teleporting " .. teleportee_name + .. " to " .. core.pos_to_string(p) + end + + local teleportee = nil + local p = nil + local teleportee_name = nil + local target_name = nil + teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$") + if teleportee_name then + teleportee = core.get_player_by_name(teleportee_name) + end + if target_name then + local target = core.get_player_by_name(target_name) + if target then + p = target:getpos() + end + end + if teleportee and p then + p = find_free_position_near(p) + teleportee:setpos(p) + return true, "Teleporting " .. teleportee_name + .. " to " .. target_name + .. " at " .. core.pos_to_string(p) + end + + return false, 'Invalid parameters ("' .. param + .. '") or player not found (see /help teleport)' + end, +}) + +core.register_chatcommand("set", { + params = "[-n] | ", + 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 ' 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 = "" + end + return true, setname .. " = " .. setvalue + end + return false, "Invalid parameters (see /help set)." + end, +}) + +local function emergeblocks_callback(pos, action, num_calls_remaining, ctx) + if ctx.total_blocks == 0 then + ctx.total_blocks = num_calls_remaining + 1 + ctx.current_blocks = 0 + end + ctx.current_blocks = ctx.current_blocks + 1 + + if ctx.current_blocks == ctx.total_blocks then + core.chat_send_player(ctx.requestor_name, + string.format("Finished emerging %d blocks in %.2fms.", + ctx.total_blocks, (os.clock() - ctx.start_time) * 1000)) + end +end + +local function emergeblocks_progress_update(ctx) + if ctx.current_blocks ~= ctx.total_blocks then + core.chat_send_player(ctx.requestor_name, + string.format("emergeblocks update: %d/%d blocks emerged (%.1f%%)", + ctx.current_blocks, ctx.total_blocks, + (ctx.current_blocks / ctx.total_blocks) * 100)) + + core.after(2, emergeblocks_progress_update, ctx) + end +end + +core.register_chatcommand("emergeblocks", { + params = "(here [radius]) | ( )", + description = "starts loading (or generating, if inexistent) map blocks " + .. "contained in area pos1 to pos2", + privs = {server=true}, + func = function(name, param) + local p1, p2 = parse_range_str(name, param) + if p1 == false then + return false, p2 + end + + local context = { + current_blocks = 0, + total_blocks = 0, + start_time = os.clock(), + requestor_name = name + } + + core.emerge_area(p1, p2, emergeblocks_callback, context) + core.after(2, emergeblocks_progress_update, context) + + return true, "Started emerge of area ranging from " .. + core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + end, +}) + +core.register_chatcommand("deleteblocks", { + params = "(here [radius]) | ( )", + description = "delete map blocks contained in area pos1 to pos2", + privs = {server=true}, + func = function(name, param) + local p1, p2 = parse_range_str(name, param) + if p1 == false then + return false, p2 + end + + if core.delete_area(p1, p2) then + return true, "Successfully cleared area ranging from " .. + core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + else + return false, "Failed to clear one or more blocks in area" + end + end, +}) + +core.register_chatcommand("mods", { + params = "", + description = "List mods installed on the server", + privs = {}, + func = function(name, param) + return true, table.concat(core.get_modnames(), ", ") + end, +}) + +local function handle_give_command(cmd, giver, receiver, stackstring) + core.log("action", giver .. " invoked " .. cmd + .. ', stackstring="' .. stackstring .. '"') + local itemstack = ItemStack(stackstring) + if itemstack:is_empty() then + return false, "Cannot give an empty item" + elseif not itemstack:is_known() then + return false, "Cannot give an unknown item" + end + local receiverref = core.get_player_by_name(receiver) + if receiverref == nil then + return false, receiver .. " is not a known player" + end + local leftover = receiverref:get_inventory():add_item("main", itemstack) + local partiality + if leftover:is_empty() then + partiality = "" + elseif leftover:get_count() == itemstack:get_count() then + partiality = "could not be " + else + partiality = "partially " + end + -- The actual item stack string may be different from what the "giver" + -- entered (e.g. big numbers are always interpreted as 2^16-1). + stackstring = itemstack:to_string() + if giver == receiver then + return true, ("%q %sadded to inventory.") + :format(stackstring, partiality) + else + core.chat_send_player(receiver, ("%q %sadded to inventory.") + :format(stackstring, partiality)) + return true, ("%q %sadded to %s's inventory.") + :format(stackstring, partiality, receiver) + end +end + +core.register_chatcommand("give", { + params = " ", + 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 = "", + 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 = " [,,]", + description = "Spawn entity at given (or your) position", + privs = {give=true, interact=true}, + func = function(name, param) + local entityname, p = string.match(param, "^([^ ]+) *(.*)$") + if not entityname then + return false, "EntityName required" + end + core.log("action", ("%s invokes /spawnentity, entityname=%q") + :format(name, entityname)) + local player = core.get_player_by_name(name) + if player == nil then + core.log("error", "Unable to spawn entity, player is nil") + return false, "Unable to spawn entity, player is nil" + end + if p == "" then + p = player:getpos() + else + p = core.string_to_pos(p) + if p == nil then + return false, "Invalid parameters ('" .. param .. "')" + end + end + p.y = p.y + 1 + core.add_entity(p, entityname) + return true, ("%q spawned."):format(entityname) + end, +}) + +core.register_chatcommand("pulverize", { + params = "", + description = "Destroy item in hand", + func = function(name, param) + local player = core.get_player_by_name(name) + if not player then + core.log("error", "Unable to pulverize, no player.") + return false, "Unable to pulverize, no player." + end + if player:get_wielded_item():is_empty() then + return false, "Unable to pulverize, no item in hand." + end + player:set_wielded_item(nil) + return true, "An item was pulverized." + end, +}) + +-- Key = player name +core.rollback_punch_callbacks = {} + +core.register_on_punchnode(function(pos, node, puncher) + local name = puncher: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 = "[] [] [limit]", + description = "Check who has last touched a node or near it," + .. " max. ago (default range=0," + .. " seconds=86400=24h, limit=5)", + privs = {rollback=true}, + func = function(name, param) + if not core.setting_getbool("enable_rollback_recording") then + return false, "Rollback functions are disabled." + end + local range, seconds, limit = + param:match("(%d+) *(%d*) *(%d*)") + range = tonumber(range) or 0 + seconds = tonumber(seconds) or 86400 + limit = tonumber(limit) or 5 + if limit > 100 then + return false, "That limit is too high!" + end + + core.rollback_punch_callbacks[name] = function(pos, node, puncher) + local name = puncher:get_player_name() + core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...") + local actions = core.rollback_get_node_actions(pos, range, seconds, limit) + if not actions then + core.chat_send_player(name, "Rollback functions are disabled") + return + end + local num_actions = #actions + if num_actions == 0 then + core.chat_send_player(name, "Nobody has touched" + .. " the specified location in " + .. seconds .. " seconds") + return + end + local time = os.time() + for i = num_actions, 1, -1 do + local action = actions[i] + core.chat_send_player(name, + ("%s %s %s -> %s %d seconds ago.") + :format( + core.pos_to_string(action.pos), + action.actor, + action.oldnode.name, + action.newnode.name, + time - action.time)) + end + end + + return true, "Punch a node (range=" .. range .. ", seconds=" + .. seconds .. "s, limit=" .. limit .. ")" + end, +}) + +core.register_chatcommand("rollback", { + params = " [] | : []", + description = "revert actions of a player; default for is 60", + privs = {rollback=true}, + func = function(name, param) + if not core.setting_getbool("enable_rollback_recording") then + return false, "Rollback functions are disabled." + end + local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)") + if not target_name then + local player_name = nil + player_name, seconds = string.match(param, "([^ ]+) *(%d*)") + if not player_name then + return false, "Invalid parameters. See /help rollback" + .. " and /help rollback_check." + end + target_name = "player:"..player_name + end + seconds = tonumber(seconds) or 60 + core.chat_send_player(name, "Reverting actions of " + .. target_name .. " since " + .. seconds .. " seconds.") + local success, log = core.rollback_revert_actions_by( + target_name, seconds) + local response = "" + if #log > 100 then + response = "(log is too long to show)\n" + else + for _, line in pairs(log) do + response = response .. line .. "\n" + end + end + response = response .. "Reverting actions " + .. (success and "succeeded." or "FAILED.") + return success, response + end, +}) + +core.register_chatcommand("status", { + description = "Print server status", + func = function(name, param) + return true, core.get_server_status() + end, +}) + +core.register_chatcommand("time", { + params = "<0..23>:<0..59> | <0..24000>", + description = "set time of day", + privs = {}, + func = function(name, param) + if param == "" then + local current_time = math.floor(core.get_timeofday() * 1440) + local minutes = current_time % 60 + local hour = (current_time - minutes) / 60 + return true, ("Current time is %d:%02d"):format(hour, minutes) + end + local player_privs = core.get_player_privs(name) + if not player_privs.settime then + return false, "You don't have permission to run this command " .. + "(missing privilege: settime)." + end + local hour, minute = param:match("^(%d+):(%d+)$") + if not hour then + local new_time = tonumber(param) + if not new_time then + return false, "Invalid time." + end + -- Backward compatibility. + core.set_timeofday((new_time % 24000) / 24000) + core.log("action", name .. " sets time to " .. new_time) + return true, "Time of day changed." + end + hour = tonumber(hour) + minute = tonumber(minute) + if hour < 0 or hour > 23 then + return false, "Invalid hour (must be between 0 and 23 inclusive)." + elseif minute < 0 or minute > 59 then + return false, "Invalid minute (must be between 0 and 59 inclusive)." + end + core.set_timeofday((hour * 60 + minute) / 1440) + core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute)) + return true, "Time of day changed." + end, +}) + +core.register_chatcommand("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 = "", + 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 = "", + 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 = " [reason]", + description = "kick a player", + privs = {kick=true}, + func = function(name, param) + local tokick, reason = param:match("([^ ]+) (.+)") + tokick = tokick or param + if not core.kick_player(tokick, reason) then + return false, "Failed to kick player " .. tokick + end + local log_reason = "" + if reason then + log_reason = " with reason \"" .. reason .. "\"" + end + core.log("action", name .. " kicks " .. tokick .. log_reason) + return true, "Kicked " .. tokick + end, +}) + +core.register_chatcommand("clearobjects", { + 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 = " ", + description = "Send a private message", + privs = {shout=true}, + func = function(name, param) + local sendto, message = param:match("^(%S+)%s(.+)$") + if not sendto then + return false, "Invalid usage, see /help msg." + end + if not core.get_player_by_name(sendto) then + return false, "The player " .. sendto + .. " is not online." + end + core.log("action", "PM from " .. name .. " to " .. sendto + .. ": " .. message) + core.chat_send_player(sendto, "PM from " .. name .. ": " + .. message) + return true, "Message sent." + end, +}) + +core.register_chatcommand("last-login", { + params = "[name]", + description = "Get the last login time of a player", + func = function(name, param) + if param == "" then + param = name + end + local pauth = core.get_auth_handler().get_auth(param) + if pauth and pauth.last_login then + -- Time in UTC, ISO 8601 format + return true, "Last login time was " .. + os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login) + end + return false, "Last login time is unknown" + end, +}) diff --git a/builtin/game/constants.lua b/builtin/game/constants.lua new file mode 100644 index 000000000..d0b7c753c --- /dev/null +++ b/builtin/game/constants.lua @@ -0,0 +1,17 @@ +-- Minetest: builtin/constants.lua + +-- +-- Constants values for use with the Lua API +-- + +-- Built-in Content IDs (for use with VoxelManip API) +core.CONTENT_UNKNOWN = 125 +core.CONTENT_AIR = 126 +core.CONTENT_IGNORE = 127 + +-- Block emerge status constants (for use with core.emerge_area) +core.EMERGE_CANCELLED = 0 +core.EMERGE_ERRORED = 1 +core.EMERGE_FROM_MEMORY = 2 +core.EMERGE_FROM_DISK = 3 +core.EMERGE_GENERATED = 4 diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua new file mode 100644 index 000000000..cd1cf5e2d --- /dev/null +++ b/builtin/game/deprecated.lua @@ -0,0 +1,51 @@ +-- Minetest: builtin/deprecated.lua + +-- +-- Default material types +-- +local function digprop_err() + core.log("deprecated", "The core.digprop_* functions are obsolete and need to be replaced by item groups.") +end + +core.digprop_constanttime = digprop_err +core.digprop_stonelike = digprop_err +core.digprop_dirtlike = digprop_err +core.digprop_gravellike = digprop_err +core.digprop_woodlike = digprop_err +core.digprop_leaveslike = digprop_err +core.digprop_glasslike = digprop_err + +function core.node_metadata_inventory_move_allow_all() + core.log("deprecated", "core.node_metadata_inventory_move_allow_all is obsolete and does nothing.") +end + +function core.add_to_creative_inventory(itemstring) + core.log("deprecated", "core.add_to_creative_inventory: This function is deprecated and does nothing.") +end + +-- +-- EnvRef +-- +core.env = {} +local envref_deprecation_message_printed = false +setmetatable(core.env, { + __index = function(table, key) + if not envref_deprecation_message_printed then + core.log("deprecated", "core.env:[...] is deprecated and should be replaced with core.[...]") + envref_deprecation_message_printed = true + end + local func = core[key] + if type(func) == "function" then + rawset(table, key, function(self, ...) + return func(...) + end) + else + rawset(table, key, nil) + end + return rawget(table, key) + end +}) + +function core.rollback_get_last_node_actor(pos, range, seconds) + return core.rollback_get_node_actions(pos, range, seconds, 1)[1] +end diff --git a/builtin/game/detached_inventory.lua b/builtin/game/detached_inventory.lua new file mode 100644 index 000000000..b5d106b04 --- /dev/null +++ b/builtin/game/detached_inventory.lua @@ -0,0 +1,20 @@ +-- 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 + stuff.mod_origin = core.get_current_modname() or "??" + core.detached_inventories[name] = stuff + return core.create_detached_inventory_raw(name) +end + diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua new file mode 100644 index 000000000..5b5e806f5 --- /dev/null +++ b/builtin/game/falling.lua @@ -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 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}) + if staticdata then + self:set_node({name=staticdata}) + end + 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) + -- If it's not air or liquid, remove node and replace it with + -- it's drops + if n2.name ~= "air" and (not core.registered_nodes[n2.name] or + core.registered_nodes[n2.name].liquidtype == "none") then + core.remove_node(np) + if core.registered_nodes[n2.name].buildable_to == false then + -- Add dropped items + local drops = core.get_node_drops(n2.name, "") + local _, dropped_item + for _, dropped_item in ipairs(drops) do + core.add_item(np, dropped_item) + end + end + -- Run script hook + local _, callback + for _, callback in ipairs(core.registered_on_dignodes) do + callback(np, n2, nil) + end + end + -- Create node and remove entity + core.add_node(np, self.node) + self.object:remove() + nodeupdate(np) + return + end + local vel = self.object:getvelocity() + if vector.equals(vel, {x=0,y=0,z=0}) then + local npos = self.object:getpos() + self.object:setpos(vector.round(npos)) + end + end +}) + +function spawn_falling_node(p, node) + local 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) + local n = core.get_node(p) + if core.get_item_group(n.name, "falling_node") ~= 0 then + local p_bottom = {x=p.x, y=p.y-1, z=p.z} + local 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.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) diff --git a/builtin/game/features.lua b/builtin/game/features.lua new file mode 100644 index 000000000..a5f17e540 --- /dev/null +++ b/builtin/game/features.lua @@ -0,0 +1,30 @@ +-- Minetest: builtin/features.lua + +core.features = { + glasslike_framed = true, + nodebox_as_selectionbox = true, + chat_send_player_param3 = true, + get_all_craft_recipes_works = true, + use_texture_alpha = true, + no_legacy_abms = true, + texture_names_parens = true, +} + +function core.has_feature(arg) + if type(arg) == "table" then + local missing_features = {} + local result = true + for ftr in pairs(arg) do + if not core.features[ftr] then + missing_features[ftr] = true + result = false + end + end + return result, missing_features + elseif type(arg) == "string" then + if not core.features[arg] then + return false, {[arg]=true} + end + return true, {} + end +end diff --git a/builtin/game/forceloading.lua b/builtin/game/forceloading.lua new file mode 100644 index 000000000..8c9fbf512 --- /dev/null +++ b/builtin/game/forceloading.lua @@ -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) or {} +end + +local function write_file(filename, table) + local f = io.open(filename, "w") + f:write(core.serialize(table)) + f:close() +end + +blocks_forceloaded = read_file(wpath.."/force_loaded.txt") +for _, __ in pairs(blocks_forceloaded) do + total_forceloaded = total_forceloaded + 1 +end + +core.after(5, function() + for hash, _ in pairs(blocks_forceloaded) do + local blockpos = core.get_position_from_hash(hash) + forceload_block(blockpos) + end +end) + +core.register_on_shutdown(function() + write_file(wpath.."/force_loaded.txt", blocks_forceloaded) +end) diff --git a/builtin/game/init.lua b/builtin/game/init.lua new file mode 100644 index 000000000..a6cfa3bf8 --- /dev/null +++ b/builtin/game/init.lua @@ -0,0 +1,28 @@ + +local scriptpath = core.get_builtin_path()..DIR_DELIM +local commonpath = scriptpath.."common"..DIR_DELIM +local gamepath = scriptpath.."game"..DIR_DELIM + +dofile(commonpath.."vector.lua") + +dofile(gamepath.."constants.lua") +dofile(gamepath.."item.lua") +dofile(gamepath.."register.lua") + +if core.setting_getbool("mod_profiling") then + dofile(gamepath.."mod_profiling.lua") +end + +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") diff --git a/builtin/game/item.lua b/builtin/game/item.lua new file mode 100644 index 000000000..44ec35cc9 --- /dev/null +++ b/builtin/game/item.lua @@ -0,0 +1,645 @@ +-- 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.wallmounted_to_dir(wallmounted) + -- table of dirs in wallmounted order + return ({[0] = {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}}) + + --indexed into by the wallmounted in question + [wallmounted] +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 and 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) + obj:get_luaentity().dropped_by = dropper:get_player_name() + return itemstack + end + + else + if core.add_item(pos, itemstack) then + return itemstack + end + end + -- If we reach this, adding the object to the + -- environment failed +end + +function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) + for _, callback in pairs(core.registered_on_item_eats) do + local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing) + if result then + return result + end + end + if itemstack:take_item() ~= nil then + user:set_hp(user:get_hp() + hp_change) + + if replace_with_item then + if itemstack:is_empty() then + itemstack:add_item(replace_with_item) + else + local inv = user:get_inventory() + if inv:room_for_item("main", {name=replace_with_item}) then + inv:add_item("main", replace_with_item) + else + local pos = user:getpos() + pos.y = math.floor(pos.y + 0.5) + core.add_item(pos, replace_with_item) + end + end + end + end + return itemstack +end + +function core.item_eat(hp_change, replace_with_item) + return function(itemstack, user, pointed_thing) -- closure + return core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) + 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 + local origin = core.callback_origins[callback] + if origin then + core.set_last_run_mod(origin.mod) + --print("Running " .. tostring(callback) .. + -- " (a " .. origin.name .. " callback in " .. origin.mod .. ")") + else + --print("No data associated with callback") + end + + -- Copy pos and node because callback can modify them + local pos_copy = {x=pos.x, y=pos.y, z=pos.z} + local node_copy = {name=node.name, param1=node.param1, param2=node.param2} + callback(pos_copy, node_copy, digger) + end +end + +-- This is used to allow mods to redefine core.item_place and so on +-- NOTE: This is not the preferred way. Preferred way is to provide enough +-- callbacks to not require redefining global functions. -celeron55 +local function redef_wrapper(table, name) + return function(...) + return table[name](...) + end +end + +-- +-- Item definition defaults +-- + +core.nodedef_default = { + -- Item properties + type="node", + -- name intentionally not defined here + description = "", + groups = {}, + inventory_image = "", + wield_image = "", + wield_scale = {x=1,y=1,z=1}, + stack_max = 99, + usable = false, + liquids_pointable = false, + tool_capabilities = nil, + node_placement_prediction = nil, + + -- Interaction callbacks + on_place = redef_wrapper(core, 'item_place'), -- core.item_place + on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop + on_use = nil, + can_dig = nil, + + on_punch = redef_wrapper(core, 'node_punch'), -- core.node_punch + on_rightclick = nil, + on_dig = redef_wrapper(core, 'node_dig'), -- core.node_dig + + on_receive_fields = nil, + + on_metadata_inventory_move = core.node_metadata_inventory_move_allow_all, + on_metadata_inventory_offer = core.node_metadata_inventory_offer_allow_all, + on_metadata_inventory_take = core.node_metadata_inventory_take_allow_all, + + -- Node properties + drawtype = "normal", + visual_scale = 1.0, + -- Don't define these because otherwise the old tile_images and + -- special_materials wouldn't be read + --tiles ={""}, + --special_tiles = { + -- {name="", backface_culling=true}, + -- {name="", backface_culling=true}, + --}, + alpha = 255, + post_effect_color = {a=0, r=0, g=0, b=0}, + paramtype = "none", + paramtype2 = "none", + is_ground_content = true, + sunlight_propagates = false, + walkable = true, + pointable = true, + diggable = true, + climbable = false, + buildable_to = false, + 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, +} diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua new file mode 100644 index 000000000..be158c119 --- /dev/null +++ b/builtin/game/item_entity.lua @@ -0,0 +1,216 @@ +-- Minetest: builtin/item_entity.lua + +function core.spawn_item(pos, item) + -- Take item in any format + local stack = ItemStack(item) + local obj = core.add_entity(pos, "__builtin:item") + -- Don't use obj if it couldn't be added to the map. + if obj then + obj:get_luaentity():set_item(stack:to_string()) + end + return obj +end + +-- If item_entity_ttl is not set, enity will have default life time +-- Setting it to -1 disables the feature + +local time_to_live = tonumber(core.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.3, -0.3, -0.3, 0.3, 0.3, 0.3}, + visual = "wielditem", + visual_size = {x = 0.4, y = 0.4}, + textures = {""}, + spritediv = {x = 1, y = 1}, + initial_sprite_basepos = {x = 0, y = 0}, + is_visible = false, + }, + + itemstring = '', + physical_state = true, + age = 0, + + set_item = function(self, itemstring) + self.itemstring = itemstring + local stack = ItemStack(itemstring) + local count = stack:get_count() + local max_count = stack:get_stack_max() + if count > max_count then + count = max_count + self.itemstring = stack:get_name().." "..max_count + end + local s = 0.2 + 0.1 * (count / max_count) + local c = s + local itemtable = stack:to_table() + local itemname = nil + if itemtable then + itemname = stack:to_table().name + end + local item_texture = nil + local item_type = "" + if core.registered_items[itemname] then + item_texture = core.registered_items[itemname].inventory_image + item_type = core.registered_items[itemname].type + end + local prop = { + is_visible = true, + visual = "wielditem", + textures = {itemname}, + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c}, + automatic_rotate = math.pi * 0.5, + } + self.object:set_properties(prop) + end, + + get_staticdata = function(self) + return core.serialize({ + itemstring = self.itemstring, + always_collect = self.always_collect, + age = self.age, + dropped_by = self.dropped_by + }) + end, + + on_activate = function(self, staticdata, dtime_s) + if string.sub(staticdata, 1, string.len("return")) == "return" then + local data = core.deserialize(staticdata) + if data and type(data) == "table" then + self.itemstring = data.itemstring + self.always_collect = data.always_collect + if data.age then + self.age = data.age + dtime_s + else + self.age = dtime_s + end + self.dropped_by = data.dropped_by + end + else + self.itemstring = staticdata + end + self.object:set_armor_groups({immortal = 1}) + self.object:setvelocity({x = 0, y = 2, z = 0}) + self.object:setacceleration({x = 0, y = -10, z = 0}) + self:set_item(self.itemstring) + end, + + try_merge_with = function(self, own_stack, object, obj) + 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.2 + 0.1 * (count / max_count) + c = s + object:set_properties({ + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c} + }) + self.object:remove() + -- merging succeeded + return true + else + s = 0.4 + c = 0.3 + object:set_properties({ + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c} + }) + obj.itemstring = name .. " " .. max_count + s = 0.2 + 0.1 * (count / max_count) + c = s + self.object:set_properties({ + visual_size = {x = s, y = s}, + collisionbox = {-c, -c, -c, c, c, c} + }) + self.itemstring = name .. " " .. count + end + end + -- merging didn't succeed + return false + end, + + on_step = function(self, dtime) + self.age = self.age + dtime + if time_to_live > 0 and self.age > time_to_live then + self.itemstring = '' + self.object:remove() + return + end + local p = self.object:getpos() + p.y = p.y - 0.5 + local node = core.get_node_or_nil(p) + local in_unloaded = (node == nil) + if in_unloaded then + -- Don't infinetly fall into unloaded map + 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}) + return + end + local nn = node.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) + -- Merge with close entities of the same item + for _, object in ipairs(core.get_objects_inside_radius(p, 0.8)) do + local obj = object:get_luaentity() + if obj and obj.name == "__builtin:item" + and obj.physical_state == false then + if self:try_merge_with(own_stack, object, obj) then + return + end + end + end + self.object:setvelocity({x = 0, y = 0, z = 0}) + self.object:setacceleration({x = 0, y = 0, z = 0}) + self.physical_state = false + self.object:set_properties({physical = false}) + end + else + if not self.physical_state then + self.object:setvelocity({x = 0, y = 0, z = 0}) + self.object:setacceleration({x = 0, y = -10, z = 0}) + self.physical_state = true + self.object:set_properties({physical = true}) + end + end + end, + + on_punch = function(self, hitter) + local inv = hitter:get_inventory() + if inv and self.itemstring ~= '' then + local left = inv:add_item("main", self.itemstring) + if left and not left:is_empty() then + self.itemstring = left:to_string() + return + end + end + self.itemstring = '' + self.object:remove() + end, +}) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua new file mode 100644 index 000000000..efd0f8dc7 --- /dev/null +++ b/builtin/game/misc.lua @@ -0,0 +1,206 @@ +-- Minetest: builtin/misc.lua + +-- +-- Misc. API functions +-- + +local timers = {} +local mintime +local function update_timers(delay) + mintime = false + local sub = 0 + for index = 1, #timers do + index = index - sub + local timer = timers[index] + timer.time = timer.time - delay + if timer.time <= 0 then + core.set_last_run_mod(timer.mod_origin) + timer.func(unpack(timer.args or {})) + table.remove(timers, index) + sub = sub + 1 + elseif mintime then + mintime = math.min(mintime, timer.time) + else + mintime = timer.time + end + end +end + +local timers_to_add +local function add_timers() + for _, timer in ipairs(timers_to_add) do + table.insert(timers, timer) + end + timers_to_add = false +end + +local delay = 0 +core.register_globalstep(function(dtime) + if not mintime then + -- abort if no timers are running + return + end + if timers_to_add then + add_timers() + end + delay = delay + dtime + if delay < mintime then + return + end + update_timers(delay) + delay = 0 +end) + +function core.after(time, func, ...) + assert(tonumber(time) and type(func) == "function", + "Invalid core.after invocation") + if not mintime then + mintime = time + timers_to_add = {{ + time = time+delay, + func = func, + args = {...}, + mod_origin = core.get_last_run_mod(), + }} + return + end + mintime = math.min(mintime, time) + timers_to_add = timers_to_add or {} + timers_to_add[#timers_to_add+1] = { + time = time+delay, + func = func, + args = {...}, + mod_origin = core.get_last_run_mod(), + } +end + +function core.check_player_privs(player_or_name, ...) + local name = player_or_name + -- Check if we have been provided with a Player object. + if type(name) ~= "string" then + name = name:get_player_name() + end + + local requested_privs = {...} + local player_privs = core.get_player_privs(name) + local missing_privileges = {} + + if type(requested_privs[1]) == "table" then + -- We were provided with a table like { privA = true, privB = true }. + for priv, value in pairs(requested_privs[1]) do + if value and not player_privs[priv] then + table.insert(missing_privileges, priv) + end + end + else + -- Only a list, we can process it directly. + for key, priv in pairs(requested_privs) do + if not player_privs[priv] then + 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 + +-- Returns two position vectors representing a box of `radius` in each +-- direction centered around the player corresponding to `player_name` +function core.get_player_radius_area(player_name, radius) + local player = core.get_player_by_name(player_name) + if player == nil then + return nil + end + + local p1 = player:getpos() + local p2 = p1 + + if radius then + p1 = vector.subtract(p1, radius) + p2 = vector.add(p2, radius) + end + + return p1, p2 +end + +function core.hash_node_position(pos) + return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768 +end + +function core.get_position_from_hash(hash) + local pos = {} + pos.x = (hash%65536) - 32768 + hash = math.floor(hash/65536) + pos.y = (hash%65536) - 32768 + hash = math.floor(hash/65536) + pos.z = (hash%65536) - 32768 + return pos +end + +function core.get_item_group(name, group) + if not core.registered_items[name] or not + core.registered_items[name].groups[group] then + return 0 + end + return core.registered_items[name].groups[group] +end + +function core.get_node_group(name, group) + core.log("deprecated", "Deprecated usage of get_node_group, use get_item_group instead") + return core.get_item_group(name, group) +end + +function core.setting_get_pos(name) + local value = core.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 + +local raillike_ids = {} +local raillike_cur_id = 0 +function core.raillike_group(name) + local id = raillike_ids[name] + if not id then + raillike_cur_id = raillike_cur_id + 1 + raillike_ids[name] = raillike_cur_id + id = raillike_cur_id + end + return id +end diff --git a/builtin/game/mod_profiling.lua b/builtin/game/mod_profiling.lua new file mode 100644 index 000000000..df2d10221 --- /dev/null +++ b/builtin/game/mod_profiling.lua @@ -0,0 +1,356 @@ +-- Minetest: builtin/game/mod_profiling.lua + +local mod_statistics = {} +mod_statistics.step_total = 0 +mod_statistics.data = {} +mod_statistics.stats = {} +mod_statistics.stats["total"] = { + min_us = math.huge, + max_us = 0, + avg_us = 0, + min_per = 100, + max_per = 100, + avg_per = 100 +} + +local replacement_table = { + "register_globalstep", + "register_on_placenode", + "register_on_dignode", + "register_on_punchnode", + "register_on_generated", + "register_on_newplayer", + "register_on_dieplayer", + "register_on_respawnplayer", + "register_on_prejoinplayer", + "register_on_joinplayer", + "register_on_leaveplayer", + "register_on_cheat", + "register_on_chat_message", + "register_on_player_receive_fields", + "register_on_mapgen_init", + "register_on_craft", + "register_craft_predict", + "register_on_item_eat" +} + +-------------------------------------------------------------------------------- +function mod_statistics.log_time(type, modname, time_in_us) + + if modname == nil then + modname = "builtin" + end + + if mod_statistics.data[modname] == nil then + mod_statistics.data[modname] = {} + end + + if mod_statistics.data[modname][type] == nil then + mod_statistics.data[modname][type] = 0 + end + + mod_statistics.data[modname][type] = + mod_statistics.data[modname][type] + time_in_us + mod_statistics.step_total = mod_statistics.step_total + time_in_us +end + +-------------------------------------------------------------------------------- +function mod_statistics.update_statistics(dtime) + for modname,types in pairs(mod_statistics.data) do + + if mod_statistics.stats[modname] == nil then + mod_statistics.stats[modname] = { + min_us = math.huge, + max_us = 0, + avg_us = 0, + min_per = 100, + max_per = 0, + avg_per = 0 + } + end + + local modtime = 0 + for type,time in pairs(types) do + modtime = modtime + time + if mod_statistics.stats[modname].types == nil then + mod_statistics.stats[modname].types = {} + end + if mod_statistics.stats[modname].types[type] == nil then + mod_statistics.stats[modname].types[type] = { + min_us = math.huge, + max_us = 0, + avg_us = 0, + min_per = 100, + max_per = 0, + avg_per = 0 + } + end + + local toupdate = mod_statistics.stats[modname].types[type] + + --update us values + toupdate.min_us = math.min(time, toupdate.min_us) + toupdate.max_us = math.max(time, toupdate.max_us) + --TODO find better algorithm + toupdate.avg_us = toupdate.avg_us * 0.99 + modtime * 0.01 + + --update percentage values + local cur_per = (time/mod_statistics.step_total) * 100 + toupdate.min_per = math.min(toupdate.min_per, cur_per) + + toupdate.max_per = math.max(toupdate.max_per, cur_per) + + --TODO find better algorithm + toupdate.avg_per = toupdate.avg_per * 0.99 + cur_per * 0.01 + + mod_statistics.data[modname][type] = 0 + end + + --per mod statistics + --update us values + mod_statistics.stats[modname].min_us = + math.min(modtime, mod_statistics.stats[modname].min_us) + mod_statistics.stats[modname].max_us = + math.max(modtime, mod_statistics.stats[modname].max_us) + --TODO find better algorithm + mod_statistics.stats[modname].avg_us = + mod_statistics.stats[modname].avg_us * 0.99 + modtime * 0.01 + + --update percentage values + local cur_per = (modtime/mod_statistics.step_total) * 100 + mod_statistics.stats[modname].min_per = + math.min(mod_statistics.stats[modname].min_per, cur_per) + + mod_statistics.stats[modname].max_per = + math.max(mod_statistics.stats[modname].max_per, cur_per) + + --TODO find better algorithm + mod_statistics.stats[modname].avg_per = + mod_statistics.stats[modname].avg_per * 0.99 + cur_per * 0.01 + end + + --update "total" + mod_statistics.stats["total"].min_us = + math.min(mod_statistics.step_total, mod_statistics.stats["total"].min_us) + mod_statistics.stats["total"].max_us = + math.max(mod_statistics.step_total, mod_statistics.stats["total"].max_us) + --TODO find better algorithm + mod_statistics.stats["total"].avg_us = + mod_statistics.stats["total"].avg_us * 0.99 + + mod_statistics.step_total * 0.01 + + mod_statistics.step_total = 0 +end + +-------------------------------------------------------------------------------- +local function build_callback(log_id, fct) + return function( toregister ) + local modname = core.get_current_modname() + + fct(function(...) + local starttime = core.get_us_time() + -- note maximum 10 return values are supported unless someone finds + -- a way to store a variable lenght return value list + local r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 = toregister(...) + local delta = core.get_us_time() - starttime + mod_statistics.log_time(log_id, modname, delta) + return r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 + end + ) + end +end + +-------------------------------------------------------------------------------- +function profiling_print_log(cmd, filter) + + print("Filter:" .. dump(filter)) + + core.log("action", "Values below show times/percentages per server step.") + core.log("action", "Following suffixes are used for entities:") + core.log("action", "\t#oa := on_activate, #os := on_step, #op := on_punch, #or := on_rightclick, #gs := get_staticdata") + core.log("action", + string.format("%16s | %25s | %10s | %10s | %10s | %9s | %9s | %9s", + "modname", "type" , "min µs", "max µs", "avg µs", "min %", "max %", "avg %") + ) + core.log("action", + "-----------------+---------------------------+-----------+" .. + "-----------+-----------+-----------+-----------+-----------") + for modname,statistics in pairs(mod_statistics.stats) do + if modname ~= "total" then + + if (filter == "") or (modname == filter) then + if modname:len() > 16 then + modname = "..." .. modname:sub(-13) + end + + core.log("action", + string.format("%16s | %25s | %9d | %9d | %9d | %9d | %9d | %9d", + modname, + " ", + statistics.min_us, + statistics.max_us, + statistics.avg_us, + statistics.min_per, + statistics.max_per, + statistics.avg_per) + ) + if core.setting_getbool("detailed_profiling") then + if statistics.types ~= nil then + for type,typestats in pairs(statistics.types) do + + if type:len() > 25 then + type = "..." .. type:sub(-22) + end + + core.log("action", + string.format( + "%16s | %25s | %9d | %9d | %9d | %9d | %9d | %9d", + " ", + type, + typestats.min_us, + typestats.max_us, + typestats.avg_us, + typestats.min_per, + typestats.max_per, + typestats.avg_per) + ) + end + end + end + end + end + end + core.log("action", + "-----------------+---------------------------+-----------+" .. + "-----------+-----------+-----------+-----------+-----------") + + if filter == "" then + core.log("action", + string.format("%16s | %25s | %9d | %9d | %9d | %9d | %9d | %9d", + "total", + " ", + mod_statistics.stats["total"].min_us, + mod_statistics.stats["total"].max_us, + mod_statistics.stats["total"].avg_us, + mod_statistics.stats["total"].min_per, + mod_statistics.stats["total"].max_per, + mod_statistics.stats["total"].avg_per) + ) + end + core.log("action", " ") + + return true +end + +-------------------------------------------------------------------------------- +local function initialize_profiling() + core.log("action", "Initialize tracing") + + mod_statistics.entity_callbacks = {} + + -- first register our own globalstep handler + core.register_globalstep(mod_statistics.update_statistics) + + local rp_register_entity = core.register_entity + core.register_entity = function(name, prototype) + local modname = core.get_current_modname() + local new_on_activate = nil + local new_on_step = nil + local new_on_punch = nil + local new_rightclick = nil + local new_get_staticdata = nil + + if prototype.on_activate ~= nil then + local cbid = name .. "#oa" + mod_statistics.entity_callbacks[cbid] = prototype.on_activate + new_on_activate = function(self, staticdata, dtime_s) + local starttime = core.get_us_time() + mod_statistics.entity_callbacks[cbid](self, staticdata, dtime_s) + local delta = core.get_us_time() -starttime + mod_statistics.log_time(cbid, modname, delta) + end + end + + if prototype.on_step ~= nil then + local cbid = name .. "#os" + mod_statistics.entity_callbacks[cbid] = prototype.on_step + new_on_step = function(self, dtime) + local starttime = core.get_us_time() + mod_statistics.entity_callbacks[cbid](self, dtime) + local delta = core.get_us_time() -starttime + mod_statistics.log_time(cbid, modname, delta) + end + end + + if prototype.on_punch ~= nil then + local cbid = name .. "#op" + mod_statistics.entity_callbacks[cbid] = prototype.on_punch + new_on_punch = function(self, hitter) + local starttime = core.get_us_time() + mod_statistics.entity_callbacks[cbid](self, hitter) + local delta = core.get_us_time() -starttime + mod_statistics.log_time(cbid, modname, delta) + end + end + + if prototype.rightclick ~= nil then + local cbid = name .. "#rc" + mod_statistics.entity_callbacks[cbid] = prototype.rightclick + new_rightclick = function(self, clicker) + local starttime = core.get_us_time() + mod_statistics.entity_callbacks[cbid](self, clicker) + local delta = core.get_us_time() -starttime + mod_statistics.log_time(cbid, modname, delta) + end + end + + if prototype.get_staticdata ~= nil then + local cbid = name .. "#gs" + mod_statistics.entity_callbacks[cbid] = prototype.get_staticdata + new_get_staticdata = function(self) + local starttime = core.get_us_time() + local retval = mod_statistics.entity_callbacks[cbid](self) + local delta = core.get_us_time() -starttime + mod_statistics.log_time(cbid, modname, delta) + return retval + end + end + + prototype.on_activate = new_on_activate + prototype.on_step = new_on_step + prototype.on_punch = new_on_punch + prototype.rightclick = new_rightclick + prototype.get_staticdata = new_get_staticdata + + rp_register_entity(name,prototype) + end + + for i,v in ipairs(replacement_table) do + local to_replace = core[v] + core[v] = build_callback(v, to_replace) + end + + local rp_register_abm = core.register_abm + core.register_abm = function(spec) + + local modname = core.get_current_modname() + + local replacement_spec = { + nodenames = spec.nodenames, + neighbors = spec.neighbors, + interval = spec.interval, + chance = spec.chance, + action = function(pos, node, active_object_count, active_object_count_wider) + local starttime = core.get_us_time() + spec.action(pos, node, active_object_count, active_object_count_wider) + local delta = core.get_us_time() - starttime + mod_statistics.log_time("abm", modname, delta) + end + } + rp_register_abm(replacement_spec) + end + + core.log("action", "Mod profiling initialized") +end + +initialize_profiling() diff --git a/builtin/game/privileges.lua b/builtin/game/privileges.lua new file mode 100644 index 000000000..7e6387c72 --- /dev/null +++ b/builtin/game/privileges.lua @@ -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") + diff --git a/builtin/game/register.lua b/builtin/game/register.lua new file mode 100644 index 000000000..00bb23278 --- /dev/null +++ b/builtin/game/register.lua @@ -0,0 +1,509 @@ +-- 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 + -- If the name starts with a colon, we can skip the modname prefix + -- mechanism. + return name:sub(2) + else + -- Enforce that the name starts with the correct mod name. + local expected_prefix = core.get_current_modname() .. ":" + if name:sub(1, #expected_prefix) ~= expected_prefix then + error("Name " .. name .. " does not follow naming conventions: " .. + "\"" .. expected_prefix .. "\" or \":\" prefix required") + end + + -- Enforce that the name only contains letters, numbers and underscores. + local subname = name:sub(#expected_prefix+1) + if subname:find("[^%w_]") then + error("Name " .. name .. " does not follow naming conventions: " .. + "contains unallowed characters") + end + + return name + end +end + +function core.register_abm(spec) + -- Add to core.registered_abms + core.registered_abms[#core.registered_abms+1] = spec + spec.mod_origin = core.get_current_modname() or "??" +end + +function core.register_entity(name, prototype) + -- Check name + if name == nil then + error("Unable to register entity: Name is nil") + end + name = check_modname_prefix(tostring(name)) + + prototype.name = name + prototype.__index = prototype -- so that it can be used as a metatable + + -- Add to core.registered_entities + core.registered_entities[name] = prototype + prototype.mod_origin = core.get_current_modname() or "??" +end + +function core.register_item(name, itemdef) + -- Check name + if name == nil then + error("Unable to register item: Name is nil") + end + name = check_modname_prefix(tostring(name)) + if forbidden_item_names[name] then + error("Unable to register item: Name is forbidden: " .. name) + end + itemdef.name = name + + -- 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 + + itemdef.mod_origin = core.get_current_modname() or "??" + + -- Disable all further modifications + getmetatable(itemdef).__newindex = {} + + --core.log("Registering item: " .. itemdef.name) + core.registered_items[itemdef.name] = itemdef + core.registered_aliases[itemdef.name] = nil + 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 + +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 + + +core.callback_origins = {} + +function core.run_callbacks(callbacks, mode, ...) + assert(type(callbacks) == "table") + local cb_len = #callbacks + if cb_len == 0 then + if mode == 2 or mode == 3 then + return true + elseif mode == 4 or mode == 5 then + return false + end + end + local ret = nil + for i = 1, cb_len do + local origin = core.callback_origins[callbacks[i]] + if origin then + core.set_last_run_mod(origin.mod) + --print("Running " .. tostring(callbacks[i]) .. + -- " (a " .. origin.name .. " callback in " .. origin.mod .. ")") + else + --print("No data associated with callback") + end + local cb_ret = callbacks[i](...) + + if mode == 0 and i == 1 then + ret = cb_ret + elseif mode == 1 and i == cb_len then + ret = cb_ret + elseif mode == 2 then + if not cb_ret or i == 1 then + ret = cb_ret + end + elseif mode == 3 then + if cb_ret then + return cb_ret + end + ret = cb_ret + elseif mode == 4 then + if (cb_ret and not ret) or i == 1 then + ret = cb_ret + end + elseif mode == 5 and cb_ret then + return cb_ret + end + end + return ret +end + +-- +-- Callback registration +-- + +local function make_registration() + local t = {} + local registerfunc = function(func) + table.insert(t, func) + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } + --local origin = core.callback_origins[func] + --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func)) + end + return t, registerfunc +end + +local function make_registration_reverse() + local t = {} + local registerfunc = function(func) + table.insert(t, 1, func) + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } + --local origin = core.callback_origins[func] + --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func)) + end + return t, registerfunc +end + +local function make_registration_wrap(reg_fn_name, clear_fn_name) + local list = {} + + local orig_reg_fn = core[reg_fn_name] + core[reg_fn_name] = function(def) + local retval = orig_reg_fn(def) + if retval ~= nil then + if def.name ~= nil then + list[def.name] = def + else + list[retval] = def + end + end + return retval + end + + local orig_clear_fn = core[clear_fn_name] + core[clear_fn_name] = function() + for k in pairs(list) do + list[k] = nil + end + return orig_clear_fn() + end + + return list +end + +core.registered_on_player_hpchanges = { modifiers = { }, loggers = { } } + +function core.registered_on_player_hpchange(player, hp_change) + local last = false + for i = #core.registered_on_player_hpchanges.modifiers, 1, -1 do + local func = core.registered_on_player_hpchanges.modifiers[i] + hp_change, last = func(player, hp_change) + if type(hp_change) ~= "number" then + local debuginfo = debug.getinfo(func) + error("The register_on_hp_changes function has to return a number at " .. + debuginfo.short_src .. " line " .. debuginfo.linedefined) + end + if last then + break + end + end + for i, func in ipairs(core.registered_on_player_hpchanges.loggers) do + func(player, hp_change) + end + return hp_change +end + +function core.register_on_player_hpchange(func, modifier) + if modifier then + table.insert(core.registered_on_player_hpchanges.modifiers, func) + else + table.insert(core.registered_on_player_hpchanges.loggers, func) + end + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } +end + +core.registered_biomes = make_registration_wrap("register_biome", "clear_registered_biomes") +core.registered_ores = make_registration_wrap("register_ore", "clear_registered_ores") +core.registered_decorations = make_registration_wrap("register_decoration", "clear_registered_decorations") + +core.registered_on_chat_messages, core.register_on_chat_message = make_registration() +core.registered_globalsteps, core.register_globalstep = make_registration() +core.registered_playerevents, core.register_playerevent = make_registration() +core.registered_on_shutdown, core.register_on_shutdown = make_registration() +core.registered_on_punchnodes, core.register_on_punchnode = make_registration() +core.registered_on_placenodes, core.register_on_placenode = make_registration() +core.registered_on_dignodes, core.register_on_dignode = make_registration() +core.registered_on_generateds, core.register_on_generated = make_registration() +core.registered_on_newplayers, core.register_on_newplayer = make_registration() +core.registered_on_dieplayers, core.register_on_dieplayer = make_registration() +core.registered_on_respawnplayers, core.register_on_respawnplayer = make_registration() +core.registered_on_prejoinplayers, core.register_on_prejoinplayer = make_registration() +core.registered_on_joinplayers, core.register_on_joinplayer = make_registration() +core.registered_on_leaveplayers, core.register_on_leaveplayer = make_registration() +core.registered_on_player_receive_fields, core.register_on_player_receive_fields = make_registration_reverse() +core.registered_on_cheats, core.register_on_cheat = make_registration() +core.registered_on_crafts, core.register_on_craft = make_registration() +core.registered_craft_predicts, core.register_craft_predict = make_registration() +core.registered_on_protection_violation, core.register_on_protection_violation = make_registration() +core.registered_on_item_eats, core.register_on_item_eat = make_registration() +core.registered_on_punchplayers, core.register_on_punchplayer = make_registration() + +-- +-- Compatibility for on_mapgen_init() +-- + +core.register_on_mapgen_init = function(func) func(core.get_mapgen_params()) end + diff --git a/builtin/game/statbars.lua b/builtin/game/statbars.lua new file mode 100644 index 000000000..61a8b9077 --- /dev/null +++ b/builtin/game/statbars.lua @@ -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+16)}, +} + +local breath_bar_definition = +{ + hud_elem_type = "statbar", + position = { x=0.5, y=1 }, + text = "bubble.png", + number = 20, + direction = 0, + size = { x=24, y=24 }, + offset = {x=25,y=-(48+24+16)}, +} + +local hud_ids = {} + +local function initialize_builtin_statbars(player) + + if not player:is_player() then + return + end + + local name = player:get_player_name() + + if name == "" then + return + end + + if (hud_ids[name] == nil) then + hud_ids[name] = {} + -- flags are not transmitted to client on connect, we need to make sure + -- our current flags are transmitted by sending them actively + player:hud_set_flags(player:hud_get_flags()) + end + + if player:hud_get_flags().healthbar and + 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) diff --git a/builtin/game/static_spawn.lua b/builtin/game/static_spawn.lua new file mode 100644 index 000000000..100334226 --- /dev/null +++ b/builtin/game/static_spawn.lua @@ -0,0 +1,25 @@ +-- 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(player_obj) + local static_spawnpoint = core.setting_get_pos("static_spawnpoint") + if not static_spawnpoint then + return false + end + core.log("action", "Moving " .. player_obj:get_player_name() .. + " to static spawnpoint at " .. core.pos_to_string(static_spawnpoint)) + player_obj:setpos(static_spawnpoint) + return true +end + +core.register_on_newplayer(put_player_in_spawn) +core.register_on_respawnplayer(put_player_in_spawn) diff --git a/builtin/game/voxelarea.lua b/builtin/game/voxelarea.lua new file mode 100644 index 000000000..6d926c940 --- /dev/null +++ b/builtin/game/voxelarea.lua @@ -0,0 +1,109 @@ +VoxelArea = { + MinEdge = {x=1, y=1, z=1}, + MaxEdge = {x=0, y=0, z=0}, + ystride = 0, + zstride = 0, +} + +function VoxelArea:new(o) + o = o or {} + setmetatable(o, self) + self.__index = self + + local e = o:getExtent() + o.ystride = e.x + o.zstride = e.x * e.y + + return o +end + +function VoxelArea:getExtent() + local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge + return { + x = MaxEdge.x - MinEdge.x + 1, + y = MaxEdge.y - MinEdge.y + 1, + z = MaxEdge.z - MinEdge.z + 1, + } +end + +function VoxelArea:getVolume() + local e = self:getExtent() + return e.x * e.y * e.z +end + +function VoxelArea:index(x, y, z) + local MinEdge = self.MinEdge + local i = (z - MinEdge.z) * self.zstride + + (y - MinEdge.y) * self.ystride + + (x - MinEdge.x) + 1 + return math.floor(i) +end + +function VoxelArea:indexp(p) + local MinEdge = self.MinEdge + local i = (p.z - MinEdge.z) * self.zstride + + (p.y - MinEdge.y) * self.ystride + + (p.x - MinEdge.x) + 1 + return math.floor(i) +end + +function VoxelArea:position(i) + local p = {} + local MinEdge = self.MinEdge + + i = i - 1 + + p.z = math.floor(i / self.zstride) + MinEdge.z + i = i % self.zstride + + p.y = math.floor(i / self.ystride) + MinEdge.y + i = i % self.ystride + + p.x = math.floor(i) + MinEdge.x + + return p +end + +function VoxelArea:contains(x, y, z) + local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge + return (x >= MinEdge.x) and (x <= MaxEdge.x) and + (y >= MinEdge.y) and (y <= MaxEdge.y) and + (z >= MinEdge.z) and (z <= MaxEdge.z) +end + +function VoxelArea:containsp(p) + local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge + return (p.x >= MinEdge.x) and (p.x <= MaxEdge.x) and + (p.y >= MinEdge.y) and (p.y <= MaxEdge.y) and + (p.z >= MinEdge.z) and (p.z <= MaxEdge.z) +end + +function VoxelArea:containsi(i) + return (i >= 1) and (i <= self:getVolume()) +end + +function VoxelArea:iter(minx, miny, minz, maxx, maxy, maxz) + local i = self:index(minx, miny, minz) - 1 + local 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 diff --git a/builtin/init.lua b/builtin/init.lua new file mode 100644 index 000000000..b3004468e --- /dev/null +++ b/builtin/init.lua @@ -0,0 +1,47 @@ +-- +-- This file contains built-in stuff in Minetest implemented in Lua. +-- +-- It is always loaded and executed after registration of the C API, +-- before loading and running any mods. +-- + +-- Initialize some very basic things +function core.debug(...) core.log(table.concat({...}, "\t")) end +if core.print then + local core_print = core.print + -- Override native print and use + -- terminal if that's turned on + function print(...) + core_print(table.concat({...}, "\t")) + end + core.print = nil -- don't pollute our namespace +end +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.."strict.lua") +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 + diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua new file mode 100644 index 000000000..f4020aaaf --- /dev/null +++ b/builtin/mainmenu/common.lua @@ -0,0 +1,347 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +-------------------------------------------------------------------------------- +-- Global menu data +-------------------------------------------------------------------------------- +menudata = {} + +-------------------------------------------------------------------------------- +-- Local cached values +-------------------------------------------------------------------------------- +local min_supp_proto = core.get_min_supp_proto() +local max_supp_proto = core.get_max_supp_proto() + +-------------------------------------------------------------------------------- +-- Menu helper functions +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +local function render_client_count(n) + if n > 99 then + return '99+' + elseif n >= 0 then + return tostring(n) + else + return '?' + end +end + +local function configure_selected_world_params(idx) + local worldconfig = modmgr.get_worldconfig( + menudata.worldlist:get_list()[idx].path) + + if worldconfig.creative_mode ~= nil then + core.setting_set("creative_mode", worldconfig.creative_mode) + end + if worldconfig.enable_damage ~= nil then + core.setting_set("enable_damage", worldconfig.enable_damage) + end +end + +-------------------------------------------------------------------------------- +function image_column(tooltip, flagname) + return "image," .. + "tooltip=" .. core.formspec_escape(tooltip) .. "," .. + "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," .. + "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_" .. flagname .. ".png") +end + +-------------------------------------------------------------------------------- +function order_favorite_list(list) + local res = {} + --orders the favorite list after support + for i=1,#list,1 do + local fav = list[i] + if is_server_protocol_compat(fav.proto_min, fav.proto_max) then + table.insert(res, fav) + end + end + for i=1,#list,1 do + local fav = list[i] + if not is_server_protocol_compat(fav.proto_min, fav.proto_max) then + table.insert(res, fav) + end + end + return res +end + +-------------------------------------------------------------------------------- +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 = "" + local grey_out = not is_server_protocol_compat(spec.proto_max, spec.proto_min) + + if spec.clients ~= nil and spec.clients_max ~= nil then + local clients_color = '' + local clients_percent = 100 * spec.clients / spec.clients_max + + -- Choose a color depending on how many clients are connected + -- (relatively to clients_max) + if spec.clients == 0 then + clients_color = '' -- 0 players: default/white + elseif spec.clients == spec.clients_max then + clients_color = '#dd5b5b' -- full server: red (darker) + elseif clients_percent <= 60 then + clients_color = '#a1e587' -- 0-60%: green + elseif clients_percent <= 90 then + clients_color = '#ffdc97' -- 60-90%: yellow + else + clients_color = '#ffba97' -- 90-100%: orange + end + + if grey_out then + clients_color = '#aaaaaa' + end + + details = details .. + clients_color .. ',' .. + render_client_count(spec.clients) .. ',' .. + '/,' .. + render_client_count(spec.clients_max) .. ',' + elseif grey_out then + details = details .. '#aaaaaa,?,/,?,' + else + details = details .. ',?,/,?,' + end + + if spec.creative then + details = details .. "1," + else + details = details .. "0," + end + + if spec.damage then + details = details .. "1," + else + details = details .. "0," + end + + if spec.pvp then + details = details .. "1," + else + details = details .. "0," + end + + return details .. (grey_out and '#aaaaaa,' or ',') .. text +end + +-------------------------------------------------------------------------------- +os.tempfolder = function() + if core.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)) + + configure_selected_world_params(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)) + + configure_selected_world_params(newidx) + end + + return true + end + + return false +end + +-------------------------------------------------------------------------------- +function asyncOnlineFavourites() + + if not menudata.public_known then + menudata.public_known = {{ + name = fgettext("Loading..."), + description = fgettext_ne("Try reenabling public serverlist and check your internet connection.") + }} + end + menudata.favorites = menudata.public_known + core.handle_async( + function(param) + return core.get_favorites("online") + end, + nil, + function(result) + if core.setting_getbool("public_serverlist") then + local favs = order_favorite_list(result) + if favs[1] then + menudata.public_known = favs + menudata.favorites = menudata.public_known + end + core.event_handler("Refresh") + end + 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 + +-------------------------------------------------------------------------------- +function is_server_protocol_compat(server_proto_min, server_proto_max) + return not ((min_supp_proto > (server_proto_max or 24)) or (max_supp_proto < (server_proto_min or 13))) +end +-------------------------------------------------------------------------------- +function is_server_protocol_compat_or_error(server_proto_min, server_proto_max) + if not is_server_protocol_compat(server_proto_min, server_proto_max) then + local server_prot_ver_info + local client_prot_ver_info + if server_proto_min ~= server_proto_max then + server_prot_ver_info = fgettext_ne("Server supports protocol versions between $1 and $2. ", + server_proto_min or 13, server_proto_max or 24) + else + server_prot_ver_info = fgettext_ne("Server enforces protocol version $1. ", + server_proto_min or 13) + end + if min_supp_proto ~= max_supp_proto then + client_prot_ver_info= fgettext_ne("We support protocol versions between version $1 and $2.", + min_supp_proto, max_supp_proto) + else + client_prot_ver_info = fgettext_ne("We only support protocol version $1.", min_supp_proto) + end + gamedata.errormessage = fgettext_ne("Protocol version mismatch. ") + .. server_prot_ver_info + .. client_prot_ver_info + return false + end + + return true +end +-------------------------------------------------------------------------------- +function menu_worldmt(selected, setting, value) + local world = menudata.worldlist:get_list()[selected] + if world then + local filename = world.path .. DIR_DELIM .. "world.mt" + local world_conf = Settings(filename) + + if value ~= nil then + if not world_conf:write() then + core.log("error", "Failed to write world config file") + end + world_conf:set(setting, value) + world_conf:write() + else + return world_conf:get(setting) + end + else + return nil + end +end + +function menu_worldmt_legacy(selected) + local modes_names = {"creative_mode", "enable_damage", "server_announce"} + for _, mode_name in pairs(modes_names) do + local mode_val = menu_worldmt(selected, mode_name) + if mode_val ~= nil then + core.setting_set(mode_name, mode_val) + else + menu_worldmt(selected, mode_name, core.setting_get(mode_name)) + end + end +end diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua new file mode 100644 index 000000000..4d13faea8 --- /dev/null +++ b/builtin/mainmenu/dlg_config_world.lua @@ -0,0 +1,311 @@ +--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 modname_valid(name) + return not name:find("[^a-z0-9_]") +end + +local function get_formspec(data) + + local mod = data.list:get_list()[data.selected_mod] + + local retval = + "size[11,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 + core.setting_set("world_config_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 fields["cb_hide_gamemods"] ~= nil then + if core.is_yes(fields["cb_hide_gamemods"]) then + current.hide_game = true + this.data.hide_gamemods = true + core.setting_set("world_config_hide_gamemods", "true") + else + current.hide_game = false + this.data.hide_gamemods = false + core.setting_set("world_config_hide_gamemods", "false") + end + end + + if fields["cb_hide_mpcontent"] ~= nil then + if core.is_yes(fields["cb_hide_mpcontent"]) then + current.hide_modpackcontents = true + this.data.hide_modpackcontents = true + core.setting_set("world_config_hide_modpackcontents", "true") + else + current.hide_modpackcontents = false + this.data.hide_modpackcontents = false + core.setting_set("world_config_hide_modpackcontents", "false") + end + 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 modname_valid(mod.name) then + worldfile:set("load_mod_"..mod.name, tostring(mod.enabled)) + else + if mod.enabled then + gamedata.errormessage = fgettext_ne("Failed to enable mod \"$1\" as it contains disallowed characters. Only chararacters [a-z0-9_] are allowed.", mod.name) + end + end + mods["load_mod_"..mod.name] = nil + end + end + + -- Remove mods that are not present anymore + for key,value in pairs(mods) do + if key:sub(1,9) == "load_mod_" then + worldfile:remove(key) + end + end + + if not worldfile:write() then + core.log("error", "Failed to write world config file") + end + + this:delete() + return true + end + + if fields["btn_config_world_cancel"] then + this:delete() + return true + end + + if fields["btn_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) + + dlg.data.hide_gamemods = core.setting_getbool("world_config_hide_gamemods") + dlg.data.hide_modpackcontents = core.setting_getbool("world_config_hide_modpackcontents") + dlg.data.selected_mod = tonumber(core.setting_get("world_config_selected_mod")) + if dlg.data.selected_mod == nil then + dlg.data.selected_mod = 0 + end + + dlg.data.worldspec = core.get_worlds()[worldidx] + if dlg.data.worldspec == nil then dlg:delete() return nil end + + dlg.data.worldconfig = modmgr.get_worldconfig(dlg.data.worldspec.path) + + if dlg.data.worldconfig == nil or dlg.data.worldconfig.id == nil or + dlg.data.worldconfig.id == "" then + + dlg:delete() + return nil + end + + dlg.data.list = filterlist.create( + modmgr.preparemodlist, --refresh + modmgr.comparemod, --compare + function(element,uid) --uid match + if element.name == uid then + return true + end + end, + function(element,criteria) + if criteria.hide_game and + element.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 } + ) + + + if dlg.data.selected_mod > dlg.data.list:size() then + dlg.data.selected_mod = 0 + end + + dlg.data.list:set_filtercriteria( + { + hide_game=dlg.data.hide_gamemods, + hide_modpackcontents= dlg.data.hide_modpackcontents + }) + dlg.data.list:add_sort_mechanism("alphabetic", sort_mod_list) + dlg.data.list:set_sortmode("alphabetic") + + return dlg +end diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua new file mode 100644 index 000000000..b42d119e0 --- /dev/null +++ b/builtin/mainmenu/dlg_create_world.lua @@ -0,0 +1,143 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +local function create_world_formspec(dialogdata) + local mapgens = core.get_mapgen_names() + + local current_seed = core.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 + + current_seed = core.formspec_escape(current_seed) + 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") .. "]" + + if #gamemgr.games == 0 then + retval = retval .. "box[2,4;8,1;#ff8800]label[2.25,4;" .. + fgettext("You have no subgames installed.") .. "]label[2.25,4.4;" .. + fgettext("Download one from minetest.net") .. "]" + elseif #gamemgr.games == 1 and gamemgr.games[1].id == "minimal" then + retval = retval .. "box[1.75,4;8.7,1;#ff8800]label[2,4;" .. + fgettext("Warning: The minimal development test is meant for developers.") .. "]label[2,4.4;" .. + fgettext("Download a subgame, such as minetest_game, from minetest.net") .. "]" + end + + return retval + +end + +local function create_world_buttonhandler(this, fields) + + if fields["world_create_confirm"] or + fields["key_enter"] then + + local worldname = fields["te_world_name"] + local gameindex = core.get_textlist_index("games") + + if gameindex ~= nil and + worldname ~= "" then + + local message = nil + + core.setting_set("fixed_map_seed", fields["te_seed"]) + + 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 + + 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 diff --git a/builtin/mainmenu/dlg_delete_mod.lua b/builtin/mainmenu/dlg_delete_mod.lua new file mode 100644 index 000000000..6e00b8045 --- /dev/null +++ b/builtin/mainmenu/dlg_delete_mod.lua @@ -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 diff --git a/builtin/mainmenu/dlg_delete_world.lua b/builtin/mainmenu/dlg_delete_world.lua new file mode 100644 index 000000000..aa710ef3b --- /dev/null +++ b/builtin/mainmenu/dlg_delete_world.lua @@ -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 diff --git a/builtin/mainmenu/dlg_rename_modpack.lua b/builtin/mainmenu/dlg_rename_modpack.lua new file mode 100644 index 000000000..9e252408a --- /dev/null +++ b/builtin/mainmenu/dlg_rename_modpack.lua @@ -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 diff --git a/builtin/mainmenu/gamemgr.lua b/builtin/mainmenu/gamemgr.lua new file mode 100644 index 000000000..b6faa71d9 --- /dev/null +++ b/builtin/mainmenu/gamemgr.lua @@ -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].name + + for i=2,#gamemgr.games,1 do + retval = retval .. "," .. gamemgr.games[i].name + end + end + return retval +end + +-------------------------------------------------------------------------------- +-- read initial data +-------------------------------------------------------------------------------- +gamemgr.update_gamelist() diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua new file mode 100644 index 000000000..176796bef --- /dev/null +++ b/builtin/mainmenu/init.lua @@ -0,0 +1,164 @@ +--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 .. "tab_credits.lua") +dofile(menupath .. DIR_DELIM .. "tab_mods.lua") +dofile(menupath .. DIR_DELIM .. "tab_settings.lua") +if PLATFORM ~= "Android" then + dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua") + dofile(menupath .. DIR_DELIM .. "dlg_delete_mod.lua") + dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua") + dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua") + dofile(menupath .. DIR_DELIM .. "tab_multiplayer.lua") + dofile(menupath .. DIR_DELIM .. "tab_server.lua") + dofile(menupath .. DIR_DELIM .. "tab_singleplayer.lua") + dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua") + dofile(menupath .. DIR_DELIM .. "textures.lua") +else + dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua") +end + +-------------------------------------------------------------------------------- +local function main_event_handler(tabview, event) + if event == "MenuQuit" then + core.close() + end + return true +end + +-------------------------------------------------------------------------------- +local function init_globals() + -- Init gamedata + gamedata.worldindex = 0 + + + if PLATFORM ~= "Android" then + menudata.worldlist = filterlist.create( + core.get_worlds, + compare_worlds, + -- Unique id comparison function + function(element, uid) + return element.name == uid + end, + -- Filter function + function(element, gameid) + return element.gameid == gameid + end + ) + + menudata.worldlist:add_sort_mechanism("alphabetic", sort_worlds_alphabetic) + menudata.worldlist:set_sortmode("alphabetic") + + if not core.setting_get("menu_last_game") then + local default_game = core.setting_get("default_game") or "minetest" + core.setting_set("menu_last_game", default_game ) + end + + mm_texture.init() + else + local world_list = core.get_worlds() + + local found_singleplayerworld = false + + for i,world in pairs(world_list) do + if world.name == "singleplayerworld" then + found_singleplayerworld = true + gamedata.worldindex = i + break + end + end + + if not found_singleplayerworld then + core.create_world("singleplayerworld", 1) + + local world_list = core.get_worlds() + + for i,world in pairs(world_list) do + if world.name == "singleplayerworld" then + gamedata.worldindex = i + break + end + end + end + end + + -- Create main tabview + local tv_main = tabview_create("maintab",{x=12,y=5.2},{x=0,y=0}) + if PLATFORM ~= "Android" then + tv_main:set_autosave_tab(true) + end + if PLATFORM ~= "Android" then + tv_main:add(tab_singleplayer) + tv_main:add(tab_multiplayer) + tv_main:add(tab_server) + else + tv_main:add(tab_simple_main) + end + tv_main:add(tab_settings) + if PLATFORM ~= "Android" then + tv_main:add(tab_texturepacks) + end + tv_main:add(tab_mods) + tv_main:add(tab_credits) + + tv_main:set_global_event_handler(main_event_handler) + + tv_main:set_fixed_size(false) + + if not (PLATFORM == "Android") then + tv_main:set_tab(core.setting_get("maintab_LAST")) + end + ui.set_default("maintab") + tv_main:show() + + -- Create modstore ui + if PLATFORM == "Android" then + modstore.init({x=12, y=6}, 3, 2) + else + modstore.init({x=12, y=8}, 4, 3) + end + + ui.update() + + core.sound_play("main_menu", true) +end + +init_globals() + diff --git a/builtin/mainmenu/init_simple.lua b/builtin/mainmenu/init_simple.lua new file mode 100644 index 000000000..c3891d21c --- /dev/null +++ b/builtin/mainmenu/init_simple.lua @@ -0,0 +1,4 @@ +-- helper file to be able to debug the simple menu on PC +-- without messing around with actual menu code! +PLATFORM="Android" +dofile("builtin/mainmenu/init.lua") diff --git a/builtin/mainmenu/modmgr.lua b/builtin/mainmenu/modmgr.lua new file mode 100644 index 000000000..89292ed52 --- /dev/null +++ b/builtin/mainmenu/modmgr.lua @@ -0,0 +1,566 @@ +--Minetest +--Copyright (C) 2013 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-------------------------------------------------------------------------------- +function get_mods(path,retval,modpack) + local mods = core.get_dir_list(path, true) + + for i=1, #mods, 1 do + if mods[i]:sub(1,1) ~= "." then + 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 +end + +--modmanager implementation +modmgr = {} + +-------------------------------------------------------------------------------- +function modmgr.extract(modfile) + if modfile.type == "zip" then + local tempfolder = os.tempfolder() + + if tempfolder ~= nil and + tempfolder ~= "" then + core.create_dir(tempfolder) + if core.extract_zip(modfile.name,tempfolder) then + return tempfolder + end + end + end + return nil +end + +------------------------------------------------------------------------------- +function modmgr.getbasefolder(temppath) + + if temppath == nil then + return { + type = "invalid", + path = "" + } + end + + local testfile = io.open(temppath .. DIR_DELIM .. "init.lua","r") + if testfile ~= nil then + testfile:close() + return { + type="mod", + path=temppath + } + end + + testfile = io.open(temppath .. DIR_DELIM .. "modpack.txt","r") + if testfile ~= nil then + testfile:close() + return { + type="modpack", + path=temppath + } + end + + local subdirs = core.get_dir_list(temppath, true) + + --only single mod or modpack allowed + if #subdirs ~= 1 then + return { + type = "invalid", + path = "" + } + end + + testfile = + io.open(temppath .. DIR_DELIM .. subdirs[1] ..DIR_DELIM .."init.lua","r") + if testfile ~= nil then + testfile:close() + return { + type="mod", + path= temppath .. DIR_DELIM .. subdirs[1] + } + end + + testfile = + io.open(temppath .. DIR_DELIM .. subdirs[1] ..DIR_DELIM .."modpack.txt","r") + if testfile ~= nil then + testfile:close() + return { + type="modpack", + path=temppath .. DIR_DELIM .. subdirs[1] + } + end + + return { + type = "invalid", + path = "" + } +end + +-------------------------------------------------------------------------------- +function modmgr.isValidModname(modpath) + if modpath:find("-") ~= nil then + return false + end + + return true +end + +-------------------------------------------------------------------------------- +function modmgr.parse_register_line(line) + local pos1 = line:find("\"") + local pos2 = nil + if pos1 ~= nil then + pos2 = line:find("\"",pos1+1) + end + + if pos1 ~= nil and pos2 ~= nil then + local item = line:sub(pos1+1,pos2-1) + + if item ~= nil and + item ~= "" then + local pos3 = item:find(":") + + if pos3 ~= nil then + local retval = item:sub(1,pos3-1) + if retval ~= nil and + retval ~= "" then + return retval + end + end + end + end + return nil +end + +-------------------------------------------------------------------------------- +function modmgr.parse_dofile_line(modpath,line) + local pos1 = line:find("\"") + local pos2 = nil + if pos1 ~= nil then + pos2 = line:find("\"",pos1+1) + end + + if pos1 ~= nil and pos2 ~= nil then + local filename = line:sub(pos1+1,pos2-1) + + if filename ~= nil and + filename ~= "" and + filename:find(".lua") then + return modmgr.identify_modname(modpath,filename) + end + end + return nil +end + +-------------------------------------------------------------------------------- +function modmgr.identify_modname(modpath,filename) + local testfile = io.open(modpath .. DIR_DELIM .. filename,"r") + if testfile ~= nil then + local line = testfile:read() + + while line~= nil do + local modname = nil + + if line:find("minetest.register_tool") then + modname = modmgr.parse_register_line(line) + end + + if line:find("minetest.register_craftitem") then + modname = modmgr.parse_register_line(line) + end + + + if line:find("minetest.register_node") then + modname = modmgr.parse_register_line(line) + end + + if line:find("dofile") then + modname = modmgr.parse_dofile_line(modpath,line) + end + + if modname ~= nil then + testfile:close() + return modname + end + + line = testfile:read() + end + testfile:close() + end + + return nil +end +-------------------------------------------------------------------------------- +function modmgr.render_modlist(render_list) + local retval = "" + + if render_list == nil then + if modmgr.global_mods == nil then + modmgr.refresh_globals() + end + render_list = modmgr.global_mods + end + + local list = render_list:get_list() + local last_modpack = nil + + 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 + elseif key:sub(0, 9) == "load_mod_" then + worldconfig.global_mods[key] = core.is_yes(value) + else + worldconfig[key] = value + end + end + + --read gamemods + local gamespec = gamemgr.find_by_gameid(worldconfig.id) + gamemgr.get_game_mods(gamespec, worldconfig.game_mods) + + return worldconfig +end + +-------------------------------------------------------------------------------- +function modmgr.installmod(modfilename,basename) + local modfile = modmgr.identify_filetype(modfilename) + local modpath = modmgr.extract(modfile) + + if modpath == nil then + gamedata.errormessage = fgettext("Install Mod: file: \"$1\"", modfile.name) .. + fgettext("\nInstall Mod: unsupported filetype \"$1\" or broken archive", modfile.type) + return + end + + local basefolder = modmgr.getbasefolder(modpath) + + if basefolder.type == "modpack" then + local clean_path = nil + + if basename ~= nil then + clean_path = "mp_" .. basename + end + + if clean_path == nil then + clean_path = get_last_folder(cleanup_path(basefolder.path)) + end + + if clean_path ~= nil then + local targetpath = core.get_modpath() .. DIR_DELIM .. clean_path + if not core.copy_dir(basefolder.path,targetpath) then + gamedata.errormessage = fgettext("Failed to install $1 to $2", basename, targetpath) + end + else + gamedata.errormessage = fgettext("Install Mod: unable to find suitable foldername for modpack $1", modfilename) + end + end + + if basefolder.type == "mod" then + local targetfolder = basename + + if targetfolder == nil then + targetfolder = modmgr.identify_modname(basefolder.path,"init.lua") + end + + --if heuristic failed try to use current foldername + if targetfolder == nil then + targetfolder = get_last_folder(basefolder.path) + end + + if targetfolder ~= nil and modmgr.isValidModname(targetfolder) then + local targetpath = core.get_modpath() .. DIR_DELIM .. targetfolder + core.copy_dir(basefolder.path,targetpath) + else + gamedata.errormessage = fgettext("Install Mod: unable to find real modname for: $1", modfilename) + end + end + + core.delete_dir(modpath) + + modmgr.refresh_globals() + +end + +-------------------------------------------------------------------------------- +function modmgr.preparemodlist(data) + local retval = {} + + local global_mods = {} + local game_mods = {} + + --read global mods + local modpath = core.get_modpath() + + if modpath ~= nil and + modpath ~= "" then + get_mods(modpath,global_mods) + end + + for i=1,#global_mods,1 do + global_mods[i].typ = "global_mod" + 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 diff --git a/builtin/mainmenu/store.lua b/builtin/mainmenu/store.lua new file mode 100644 index 000000000..ad861082d --- /dev/null +++ b/builtin/mainmenu/store.lua @@ -0,0 +1,614 @@ +--Minetest +--Copyright (C) 2013 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-------------------------------------------------------------------------------- + +--modstore implementation +modstore = {} + +-------------------------------------------------------------------------------- +-- @function [parent=#modstore] init +function modstore.init(size, unsortedmods, searchmods) + + modstore.mods_on_unsorted_page = unsortedmods + modstore.mods_on_search_page = searchmods + modstore.modsperpage = modstore.mods_on_unsorted_page + + modstore.basetexturedir = core.get_texturepath() .. DIR_DELIM .. "base" .. + DIR_DELIM .. "pack" .. DIR_DELIM + + modstore.lastmodtitle = "" + modstore.last_search = "" + + modstore.searchlist = filterlist.create( + function() + if modstore.modlist_unsorted ~= nil and + modstore.modlist_unsorted.data ~= nil then + return modstore.modlist_unsorted.data + end + return {} + end, + function(element,modid) + if element.id == modid then + return true + end + return false + end, --compare fct + nil, --uid match fct + function(element,substring) + if substring == nil or + substring == "" then + return false + end + substring = substring:upper() + + if element.title ~= nil and + element.title:upper():find(substring) ~= nil then + return true + end + + if element.details ~= nil and + element.details.author ~= nil and + element.details.author:upper():find(substring) ~= nil then + return true + end + + if element.details ~= nil and + element.details.description ~= nil and + element.details.description:upper():find(substring) ~= nil then + return true + end + return false + end --filter fct + ) + + modstore.current_list = nil + + modstore.tv_store = tabview_create("modstore",size,{x=0,y=0}) + + modstore.tv_store:set_global_event_handler(modstore.handle_events) + + modstore.tv_store:add( + { + name = "unsorted", + caption = fgettext("Unsorted"), + cbf_formspec = modstore.unsorted_tab, + cbf_button_handler = modstore.handle_buttons, + on_change = + function() modstore.modsperpage = modstore.mods_on_unsorted_page end + } + ) + + modstore.tv_store:add( + { + name = "search", + caption = fgettext("Search"), + cbf_formspec = modstore.getsearchpage, + cbf_button_handler = modstore.handle_buttons, + on_change = modstore.activate_search_tab + } + ) +end + +-------------------------------------------------------------------------------- +-- @function [parent=#modstore] nametoindex +function modstore.nametoindex(name) + + for i=1,#modstore.tabnames,1 do + if modstore.tabnames[i] == name then + return i + end + end + + return 1 +end + +-------------------------------------------------------------------------------- +-- @function [parent=#modstore] showdownloading +function modstore.showdownloading(title) + local new_dlg = dialog_create("store_downloading", + function(data) + return "size[6,2]label[0.25,0.75;" .. + fgettext("Downloading $1, please wait...", data.title) .. "]" + end, + function(this,fields) + if fields["btn_hidden_close_download"] ~= nil then + if fields["btn_hidden_close_download"].successfull then + modstore.lastmodentry = fields["btn_hidden_close_download"] + modstore.successfulldialog(this) + else + this.parent:show() + this:delete() + modstore.lastmodtitle = "" + end + + return true + end + + return false + end, + nil) + + new_dlg:set_parent(modstore.tv_store) + modstore.tv_store:hide() + new_dlg.data.title = title + new_dlg:show() +end + +-------------------------------------------------------------------------------- +-- @function [parent=#modstore] successfulldialog +function modstore.successfulldialog(downloading_dlg) + local new_dlg = dialog_create("store_downloading", + function(data) + local retval = "" + retval = retval .. "size[6,2,true]" + if modstore.lastmodentry ~= nil then + retval = retval .. "label[0,0.25;" .. fgettext("Successfully installed:") .. "]" + retval = retval .. "label[3,0.25;" .. modstore.lastmodentry.moddetails.title .. "]" + retval = retval .. "label[0,0.75;" .. fgettext("Shortname:") .. "]" + retval = retval .. "label[3,0.75;" .. core.formspec_escape(modstore.lastmodentry.moddetails.basename) .. "]" + end + retval = retval .. "button[2.2,1.5;1.5,0.5;btn_confirm_mod_successfull;" .. fgettext("Ok") .. "]" + return retval + end, + function(this,fields) + if fields["btn_confirm_mod_successfull"] ~= nil then + this.parent:show() + downloading_dlg:delete() + this:delete() + + return true + end + + return false + end, + nil) + + new_dlg:set_parent(modstore.tv_store) + modstore.tv_store:hide() + new_dlg:show() +end + +-------------------------------------------------------------------------------- +-- @function [parent=#modstore] handle_buttons +function modstore.handle_buttons(parent, fields, name, data) + + if fields["btn_modstore_page_up"] then + if modstore.current_list ~= nil and modstore.current_list.page > 0 then + modstore.current_list.page = modstore.current_list.page - 1 + end + return true + end + + if fields["btn_modstore_page_down"] then + if modstore.current_list ~= nil and + modstore.current_list.page 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 + diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua new file mode 100644 index 000000000..6b135b2c9 --- /dev/null +++ b/builtin/mainmenu/tab_credits.lua @@ -0,0 +1,80 @@ +--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 "label[0.5,3.2;Minetest " .. core.get_version() .. "]" .. + "label[0.5,3.5;http://minetest.net]" .. + "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" .. + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[3.5,-0.25;8.5,5.8;list_credits;" .. + "#FFFF00," .. fgettext("Core Developers") .."," .. + ",Perttu Ahola (celeron55) ,".. + ",Ryan Kwolek (kwolekr) ,".. + ",PilzAdam ," .. + ",sfan5 ,".. + ",kahrl ,".. + ",sapier,".. + ",ShadowNinja ,".. + ",Nathanael Courant (Nore/Ekdohibs) ,".. + ",BlockMen,".. + ",Craig Robbins (Zeno),".. + ",Loic Blot (nerzhul/nrz) ,".. + ",Mat Gregory (paramat),".. + ",est31 ," .. + ",,".. + "#FFFF00," .. fgettext("Active Contributors") .. "," .. + ",SmallJoker ," .. + ",Andrew Ward (rubenwardy) ," .. + ",Aaron Suen ," .. + ",Sokomine ," .. + ",Břetislav Štec (t0suj4/TBC_x)," .. + ",TeTpaAka," .. + ",Jean-Patrick G (kilbith) ," .. + ",Diego Martinez (kaeza) ," .. + ",," .. + "#FFFF00," .. fgettext("Previous Core Developers") .."," .. + ",Maciej Kasatkin (RealBadAngel) ,".. + ",Lisa Milne (darkrose) ," .. + ",proller," .. + ",Ilya Zhuravlev (xyz) ," .. + ",," .. + "#FFFF00," .. fgettext("Previous Contributors") .. "," .. + ",Vanessa Ezekowitz (VanessaE) ,".. + ",Jurgen Doser (doserj) ,".. + ",Gregory Currie (gregorycu)," .. + ",Jeija ,".. + ",MirceaKitsune ,".. + ",dannydark ,".. + ",0gb.us <0gb.us@0gb.us>,".. + ",Guiseppe Bilotta (Oblomov) ,".. + ",Jonathan Neuschafer ,".. + ",Nils Dagsson Moskopp (erlehmann) ,".. + ",Constantin Wenger (SpeedProg) ,".. + ",matttpt ,".. + ",JacobF ,".. + ",TriBlade9 ,".. + ",Zefram ,".. + ";1]" + end + } diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua new file mode 100644 index 000000000..2ddc9b07c --- /dev/null +++ b/builtin/mainmenu/tab_mods.lua @@ -0,0 +1,172 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-------------------------------------------------------------------------------- +local function get_formspec(tabview, name, tabdata) + + if modmgr.global_mods == nil then + modmgr.refresh_globals() + end + + if tabdata.selected_mod == nil then + tabdata.selected_mod = 1 + end + + local retval = + "label[0.05,-0.25;".. fgettext("Installed Mods:") .. "]" .. + "textlist[0,0.25;5.1,4.35;modlist;" .. + modmgr.render_modlist(modmgr.global_mods) .. + ";" .. tabdata.selected_mod .. "]" + + retval = retval .. +-- "label[0.8,4.2;" .. fgettext("Add mod:") .. "]" .. +-- TODO Disabled due to upcoming release 0.4.8 and irrlicht messing up localization +-- "button[0.75,4.85;1.8,0.5;btn_mod_mgr_install_local;".. fgettext("Local install") .. "]" .. + +-- TODO Disabled due to service being offline, and not likely to come online again, in this form +-- "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]" + "" + + local selected_mod = nil + + if filterlist.size(modmgr.global_mods) >= tabdata.selected_mod then + selected_mod = modmgr.global_mods:get_list()[tabdata.selected_mod] + end + + if selected_mod ~= nil then + local modscreenshot = nil + + --check for screenshot beeing available + local screenshotfilename = selected_mod.path .. DIR_DELIM .. "screenshot.png" + local error = nil + local screenshotfile,error = io.open(screenshotfilename,"r") + if error == nil then + screenshotfile:close() + modscreenshot = screenshotfilename + end + + if modscreenshot == nil then + modscreenshot = defaulttexturedir .. "no_screenshot.png" + end + + retval = retval + .. "image[5.5,0;3,2;" .. core.formspec_escape(modscreenshot) .. "]" + .. "label[8.25,0.6;" .. selected_mod.name .. "]" + + local descriptionlines = nil + error = nil + local descriptionfilename = selected_mod.path .. "description.txt" + local descriptionfile,error = io.open(descriptionfilename,"r") + if error == nil then + local descriptiontext = descriptionfile:read("*all") + + descriptionlines = core.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 .. "," .. fgettext("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 +} diff --git a/builtin/mainmenu/tab_multiplayer.lua b/builtin/mainmenu/tab_multiplayer.lua new file mode 100644 index 000000000..570259718 --- /dev/null +++ b/builtin/mainmenu/tab_multiplayer.lua @@ -0,0 +1,261 @@ +--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 = + "label[7.75,-0.15;" .. fgettext("Address / Port :") .. "]" .. + "label[7.75,1.05;" .. fgettext("Name / Password :") .. "]" .. + "field[8,0.75;3.4,0.5;te_address;;" .. + core.formspec_escape(core.setting_get("address")) .. "]" .. + "field[11.25,0.75;1.3,0.5;te_port;;" .. + core.formspec_escape(core.setting_get("remote_port")) .. "]" .. + "checkbox[0,4.85;cb_public_serverlist;" .. fgettext("Public Serverlist") .. ";" .. + dump(core.setting_getbool("public_serverlist")) .. "]" + + if not core.setting_getbool("public_serverlist") then + retval = retval .. + "button[8,4.9;2,0.5;btn_delete_favorite;" .. fgettext("Delete") .. "]" + end + + retval = retval .. + "button[10,4.9;2,0.5;btn_mp_connect;" .. fgettext("Connect") .. "]" .. + "field[8,1.95;2.95,0.5;te_name;;" .. + core.formspec_escape(core.setting_get("name")) .. "]" .. + "pwdfield[10.78,1.95;1.77,0.5;te_pwd;]" .. + "box[7.73,2.35;4.3,2.28;#999999]" .. + "textarea[8.1,2.4;4.26,2.6;;" + + 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 + if render_details then + retval = retval .. "tablecolumns[" .. + "color,span=3;" .. + "text,align=right;" .. -- clients + "text,align=center,padding=0.25;" .. -- "/" + "text,align=right,padding=0.25;" .. -- clients_max + image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" .. + image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" .. + image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" .. + "color,span=1;" .. + "text,padding=1]" -- name + else + retval = retval .. "tablecolumns[text]" + end + retval = retval .. + "table[-0.15,-0.1;7.75,5;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_table_event(fields["favourites"]) + if event.type == "DCL" then + if event.row <= #menudata.favorites then + if not is_server_protocol_compat_or_error(menudata.favorites[event.row].proto_min, + menudata.favorites[event.row].proto_max) then + return true + end + gamedata.address = menudata.favorites[event.row].address + gamedata.port = menudata.favorites[event.row].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.row].name + gamedata.serverdescription = menudata.favorites[event.row].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.row <= #menudata.favorites then + local address = menudata.favorites[event.row].address + local port = menudata.favorites[event.row].port + + if address ~= nil and + port ~= nil then + core.setting_set("address",address) + core.setting_set("remote_port",port) + end + + tabdata.fav_selected = event.row + end + + return true + end + end + + if fields["key_up"] ~= nil or + fields["key_down"] ~= nil then + + local fav_idx = core.get_table_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_table_index("favourites") + if current_favourite == nil then return end + core.delete_favorite(current_favourite) + menudata.favorites = order_favorite_list(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) and fields["te_address"] ~= nil and + fields["te_port"] ~= 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_table_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 + + if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min, + menudata.favorites[fav_idx].proto_max)then + return true + end + 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 + } diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua new file mode 100644 index 000000000..d08eecc21 --- /dev/null +++ b/builtin/mainmenu/tab_server.lua @@ -0,0 +1,195 @@ +--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.95;3.25,0.5;start_server;" .. fgettext("Start Game") .. "]" .. + "label[4,-0.25;" .. fgettext("Select World:") .. "]" .. + "checkbox[0.25,0.25;cb_creative_mode;" .. fgettext("Creative Mode") .. ";" .. + dump(core.setting_getbool("creative_mode")) .. "]" .. + "checkbox[0.25,0.7;cb_enable_damage;" .. fgettext("Enable Damage") .. ";" .. + dump(core.setting_getbool("enable_damage")) .. "]" .. + "checkbox[0.25,1.15;cb_server_announce;" .. fgettext("Public") .. ";" .. + dump(core.setting_getbool("server_announce")) .. "]" .. + "label[0.25,2.2;" .. fgettext("Name/Password") .. "]" .. + "field[0.55,3.2;3.5,0.5;te_playername;;" .. + core.formspec_escape(core.setting_get("name")) .. "]" .. + "pwdfield[0.55,4;3.5,0.5;te_passwd;]" + + local bind_addr = core.setting_get("bind_address") + if bind_addr ~= nil and bind_addr ~= "" then + retval = retval .. + "field[0.55,5.2;2.25,0.5;te_serveraddr;" .. fgettext("Bind Address") .. ";" .. + core.formspec_escape(core.setting_get("bind_address")) .. "]" .. + "field[2.8,5.2;1.25,0.5;te_serverport;" .. fgettext("Port") .. ";" .. + core.formspec_escape(core.setting_get("port")) .. "]" + else + retval = retval .. + "field[0.55,5.2;3.5,0.5;te_serverport;" .. fgettext("Server Port") .. ";" .. + core.formspec_escape(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"]) + local selected = core.get_textlist_index("srv_worlds") + + menu_worldmt_legacy(selected) + + 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"]) + local selected = core.get_textlist_index("srv_worlds") + menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"]) + + return true + end + + if fields["cb_enable_damage"] then + core.setting_set("enable_damage", fields["cb_enable_damage"]) + local selected = core.get_textlist_index("srv_worlds") + menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"]) + + return true + end + + if fields["cb_server_announce"] then + core.setting_set("server_announce", fields["cb_server_announce"]) + local selected = core.get_textlist_index("srv_worlds") + menu_worldmt(selected, "server_announce", fields["cb_server_announce"]) + + return true + end + + if fields["start_server"] ~= nil or + world_doubleclick or + fields["key_enter"] then + local selected = core.get_textlist_index("srv_worlds") + gamedata.selected_world = menudata.worldlist:get_raw_index(selected) + if selected ~= nil and gamedata.selected_world ~= 0 then + gamedata.playername = fields["te_playername"] + gamedata.password = fields["te_passwd"] + gamedata.port = fields["te_serverport"] + gamedata.address = "" + + core.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) + if world then + local game, index = gamemgr.find_by_gameid(world.gameid) + core.setting_set("menu_last_game", game.id) + end + + core.start() + else + gamedata.errormessage = + fgettext("No world created or selected!") + 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) + 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 + } diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua new file mode 100644 index 000000000..db8d08d5e --- /dev/null +++ b/builtin/mainmenu/tab_settings.lua @@ -0,0 +1,741 @@ +--Minetest +--Copyright (C) 2015 PilzAdam +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +local FILENAME = "settingtypes.txt" + +local CHAR_CLASSES = { + SPACE = "[%s]", + VARIABLE = "[%w_%-%.]", + INTEGER = "[-]?[%d]", + FLOAT = "[-]?[%d%.]", + FLAGS = "[%w_%-%.,]", +} + +-- returns error message, or nil +local function parse_setting_line(settings, line, read_all, base_level, allow_secure) + -- comment + local comment = line:match("^#" .. CHAR_CLASSES.SPACE .. "*(.*)$") + if comment then + if settings.current_comment == "" then + settings.current_comment = comment + else + settings.current_comment = settings.current_comment .. "\n" .. comment + end + return + end + + -- clear current_comment so only comments directly above a setting are bound to it + -- but keep a local reference to it for variables in the current line + local current_comment = settings.current_comment + settings.current_comment = "" + + -- empty lines + if line:match("^" .. CHAR_CLASSES.SPACE .. "*$") then + return + end + + -- category + local stars, category = line:match("^%[([%*]*)([^%]]+)%]$") + if category then + table.insert(settings, { + name = category, + level = stars:len() + base_level, + type = "category", + }) + return + end + + -- settings + local first_part, name, readable_name, setting_type = line:match("^" + -- this first capture group matches the whole first part, + -- so we can later strip it from the rest of the line + .. "(" + .. "([" .. CHAR_CLASSES.VARIABLE .. "+)" -- variable name + .. CHAR_CLASSES.SPACE + .. "%(([^%)]*)%)" -- readable name + .. CHAR_CLASSES.SPACE + .. "(" .. CHAR_CLASSES.VARIABLE .. "+)" -- type + .. CHAR_CLASSES.SPACE .. "?" + .. ")") + + if not first_part then + return "Invalid line" + end + + if name:match("secure%.[.]*") and not allow_secure then + return "Tried to add \"secure.\" setting" + end + + if readable_name == "" then + readable_name = nil + end + local remaining_line = line:sub(first_part:len() + 1) + + if setting_type == "int" then + local default, min, max = remaining_line:match("^" + -- first int is required, the last 2 are optional + .. "(" .. CHAR_CLASSES.INTEGER .. "+)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.INTEGER .. "*)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.INTEGER .. "*)" + .. "$") + + if not default or not tonumber(default) then + return "Invalid integer setting" + end + + min = tonumber(min) + max = tonumber(max) + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "int", + default = default, + min = min, + max = max, + comment = current_comment, + }) + return + end + + if setting_type == "string" or setting_type == "noise_params" + or setting_type == "key" or setting_type == "v3f" then + local default = remaining_line:match("^(.*)$") + + if not default then + return "Invalid string setting" + end + if setting_type == "key" and not read_all then + -- ignore key type if read_all is false + return + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = setting_type, + default = default, + comment = current_comment, + }) + return + end + + if setting_type == "bool" then + if remaining_line ~= "false" and remaining_line ~= "true" then + return "Invalid boolean setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "bool", + default = remaining_line, + comment = current_comment, + }) + return + end + + if setting_type == "float" then + local default, min, max = remaining_line:match("^" + -- first float is required, the last 2 are optional + .. "(" .. CHAR_CLASSES.FLOAT .. "+)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.FLOAT .. "*)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.FLOAT .. "*)" + .."$") + + if not default or not tonumber(default) then + return "Invalid float setting" + end + + min = tonumber(min) + max = tonumber(max) + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "float", + default = default, + min = min, + max = max, + comment = current_comment, + }) + return + end + + if setting_type == "enum" then + local default, values = remaining_line:match("^(.+)" .. CHAR_CLASSES.SPACE .. "(.+)$") + + if not default or values == "" then + return "Invalid enum setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "enum", + default = default, + values = values:split(",", true), + comment = current_comment, + }) + return + end + + if setting_type == "path" then + local default = remaining_line:match("^(.*)$") + + if not default then + return "Invalid path setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "path", + default = default, + comment = current_comment, + }) + return + end + + if setting_type == "flags" then + local default, possible = remaining_line:match("^" + .. "(" .. CHAR_CLASSES.FLAGS .. "+)" .. CHAR_CLASSES.SPACE .. "" + .. "(" .. CHAR_CLASSES.FLAGS .. "+)" + .. "$") + + if not default or not possible then + return "Invalid flags setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "flags", + default = default, + possible = possible, + comment = current_comment, + }) + return + end + + return "Invalid setting type \"" .. setting_type .. "\"" +end + +local function parse_single_file(file, filepath, read_all, result, base_level, allow_secure) + -- store this helper variable in the table so it's easier to pass to parse_setting_line() + result.current_comment = "" + + local line = file:read("*line") + while line do + local error_msg = parse_setting_line(result, line, read_all, base_level, allow_secure) + if error_msg then + core.log("error", error_msg .. " in " .. filepath .. " \"" .. line .. "\"") + end + line = file:read("*line") + end + + result.current_comment = nil +end + +-- read_all: whether to ignore certain setting types for GUI or not +-- parse_mods: whether to parse settingtypes.txt in mods and games +local function parse_config_file(read_all, parse_mods) + local builtin_path = core.get_builtin_path() .. DIR_DELIM .. FILENAME + local file = io.open(builtin_path, "r") + local settings = {} + if not file then + core.log("error", "Can't load " .. FILENAME) + return settings + end + + parse_single_file(file, builtin_path, read_all, settings, 0, true) + + file:close() + + if parse_mods then + -- Parse games + local games_category_initialized = false + local index = 1 + local game = gamemgr.get_game(index) + while game do + local path = game.path .. DIR_DELIM .. FILENAME + local file = io.open(path, "r") + if file then + if not games_category_initialized then + local translation = fgettext_ne("Games"), -- not used, but needed for xgettext + table.insert(settings, { + name = "Games", + level = 0, + type = "category", + }) + games_category_initialized = true + end + + table.insert(settings, { + name = game.name, + level = 1, + type = "category", + }) + + parse_single_file(file, path, read_all, settings, 2, false) + + file:close() + end + + index = index + 1 + game = gamemgr.get_game(index) + end + + -- Parse mods + local mods_category_initialized = false + local mods = {} + get_mods(core.get_modpath(), mods) + for _, mod in ipairs(mods) do + local path = mod.path .. DIR_DELIM .. FILENAME + local file = io.open(path, "r") + if file then + if not mods_category_initialized then + local translation = fgettext_ne("Mods"), -- not used, but needed for xgettext + table.insert(settings, { + name = "Mods", + level = 0, + type = "category", + }) + mods_category_initialized = true + end + + table.insert(settings, { + name = mod.name, + level = 1, + type = "category", + }) + + parse_single_file(file, path, read_all, settings, 2, false) + + file:close() + end + end + end + + return settings +end + +local settings = parse_config_file(false, true) +local selected_setting = 1 + +local function get_current_value(setting) + local value = core.setting_get(setting.name) + if value == nil then + value = setting.default + end + return value +end + +local function create_change_setting_formspec(dialogdata) + local setting = settings[selected_setting] + local formspec = "size[10,5.2,true]" .. + "button[5,4.5;2,1;btn_done;" .. fgettext("Save") .. "]" .. + "button[3,4.5;2,1;btn_cancel;" .. fgettext("Cancel") .. "]" .. + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[0,0;10,3;info;" + + if setting.readable_name then + formspec = formspec .. "#FFFF00," .. fgettext(setting.readable_name) + .. " (" .. core.formspec_escape(setting.name) .. ")," + else + formspec = formspec .. "#FFFF00," .. core.formspec_escape(setting.name) .. "," + end + + formspec = formspec .. ",," + + local comment_text = "" + + if setting.comment == "" then + comment_text = fgettext_ne("(No description of setting given)") + else + comment_text = fgettext_ne(setting.comment) + end + for _, comment_line in ipairs(comment_text:split("\n", true)) do + formspec = formspec .. "," .. core.formspec_escape(comment_line) .. "," + end + + if setting.type == "flags" then + formspec = formspec .. ",," + .. "," .. fgettext("Please enter a comma seperated list of flags.") .. "," + .. "," .. fgettext("Possible values are: ") + .. core.formspec_escape(setting.possible:gsub(",", ", ")) .. "," + elseif setting.type == "noise_params" then + formspec = formspec .. ",," + .. "," .. fgettext("Format: , , (, , ), , , ") .. "," + .. "," .. fgettext("Optionally the lacunarity can be appended with a leading comma.") .. "," + elseif setting.type == "v3f" then + formspec = formspec .. ",," + .. "," .. fgettext_ne("Format is 3 numbers separated by commas and inside brackets.") .. "," + end + + formspec = formspec:sub(1, -2) -- remove trailing comma + + formspec = formspec .. ";1]" + + if setting.type == "bool" then + local selected_index + if core.is_yes(get_current_value(setting)) then + selected_index = 2 + else + selected_index = 1 + end + formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;" + .. fgettext("Disabled") .. "," .. fgettext("Enabled") .. ";" + .. selected_index .. "]" + + elseif setting.type == "enum" then + local selected_index = 0 + formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;" + for index, value in ipairs(setting.values) do + -- translating value is not possible, since it's the value + -- that we set the setting to + formspec = formspec .. core.formspec_escape(value) .. "," + if get_current_value(setting) == value then + selected_index = index + end + end + if #setting.values > 0 then + formspec = formspec:sub(1, -2) -- remove trailing comma + end + formspec = formspec .. ";" .. selected_index .. "]" + + elseif setting.type == "path" then + local current_value = dialogdata.selected_path + if not current_value then + current_value = get_current_value(setting) + end + formspec = formspec .. "field[0.5,4;7.5,1;te_setting_value;;" + .. core.formspec_escape(current_value) .. "]" + .. "button[8,3.75;2,1;btn_browser_path;" .. fgettext("Browse") .. "]" + + else + -- TODO: fancy input for float, int, flags, noise_params, v3f + local width = 10 + local text = get_current_value(setting) + if dialogdata.error_message then + formspec = formspec .. "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[5,4;5,1;error_message;#FF0000," + .. core.formspec_escape(dialogdata.error_message) .. ";0]" + width = 5 + if dialogdata.entered_text then + text = dialogdata.entered_text + end + end + formspec = formspec .. "field[0.5,4;" .. width .. ",1;te_setting_value;;" + .. core.formspec_escape(text) .. "]" + end + return formspec +end + +local function handle_change_setting_buttons(this, fields) + if fields["btn_done"] or fields["key_enter"] then + local setting = settings[selected_setting] + if setting.type == "bool" then + local new_value = fields["dd_setting_value"] + -- Note: new_value is the actual (translated) value shown in the dropdown + core.setting_setbool(setting.name, new_value == fgettext("Enabled")) + + elseif setting.type == "enum" then + local new_value = fields["dd_setting_value"] + core.setting_set(setting.name, new_value) + + elseif setting.type == "int" then + local new_value = tonumber(fields["te_setting_value"]) + if not new_value or math.floor(new_value) ~= new_value then + this.data.error_message = fgettext_ne("Please enter a valid integer.") + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + if setting.min and new_value < setting.min then + this.data.error_message = fgettext_ne("The value must be greater than $1.", setting.min) + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + if setting.max and new_value > setting.max then + this.data.error_message = fgettext_ne("The value must be lower than $1.", setting.max) + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + core.setting_set(setting.name, new_value) + + elseif setting.type == "float" then + local new_value = tonumber(fields["te_setting_value"]) + if not new_value then + this.data.error_message = fgettext_ne("Please enter a valid number.") + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + core.setting_set(setting.name, new_value) + + elseif setting.type == "flags" then + local new_value = fields["te_setting_value"] + for _,value in ipairs(new_value:split(",", true)) do + value = value:trim() + if not value:match(CHAR_CLASSES.FLAGS .. "+") + or not setting.possible:match("[,]?" .. value .. "[,]?") then + this.data.error_message = fgettext_ne("\"$1\" is not a valid flag.", value) + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + end + core.setting_set(setting.name, new_value) + + else + local new_value = fields["te_setting_value"] + core.setting_set(setting.name, new_value) + end + core.setting_save() + this:delete() + return true + end + + if fields["btn_cancel"] then + this:delete() + return true + end + + if fields["btn_browser_path"] then + core.show_file_open_dialog("dlg_browse_path", fgettext_ne("Select path")) + end + + if fields["dlg_browse_path_accepted"] then + this.data.selected_path = fields["dlg_browse_path_accepted"] + core.update_formspec(this:get_formspec()) + end + + return false +end + +local function create_settings_formspec(tabview, name, tabdata) + local formspec = "tablecolumns[color;tree;text;text]" .. + "tableoptions[background=#00000000;border=false]" .. + "table[0,0;12,4.5;list_settings;" + + local current_level = 0 + for _, entry in ipairs(settings) do + local name + if not core.setting_getbool("main_menu_technical_settings") and entry.readable_name then + name = fgettext_ne(entry.readable_name) + else + name = entry.name + end + + if entry.type == "category" then + current_level = entry.level + formspec = formspec .. "#FFFF00," .. current_level .. "," .. fgettext(name) .. ",," + + elseif entry.type == "bool" then + local value = get_current_value(entry) + if core.is_yes(value) then + value = fgettext("Enabled") + else + value = fgettext("Disabled") + end + formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. "," + .. value .. "," + + elseif entry.type == "key" then + -- ignore key settings, since we have a special dialog for them + + else + formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. "," + .. core.formspec_escape(get_current_value(entry)) .. "," + end + end + + if #settings > 0 then + formspec = formspec:sub(1, -2) -- remove trailing comma + end + formspec = formspec .. ";" .. selected_setting .. "]" .. + "button[4,4.5;3,1;btn_change_keys;".. fgettext("Change keys") .. "]" .. + "button[10,4.5;2,1;btn_edit;" .. fgettext("Edit") .. "]" .. + "button[7,4.5;3,1;btn_restore;" .. fgettext("Restore Default") .. "]" .. + "checkbox[0,4.5;cb_tech_settings;" .. fgettext("Show technical names") .. ";" + .. dump(core.setting_getbool("main_menu_technical_settings")) .. "]" + + return formspec +end + +local function handle_settings_buttons(this, fields, tabname, tabdata) + local list_enter = false + if fields["list_settings"] then + selected_setting = core.get_table_index("list_settings") + if core.explode_table_event(fields["list_settings"]).type == "DCL" then + -- Directly toggle booleans + local setting = settings[selected_setting] + if setting.type == "bool" then + local current_value = get_current_value(setting) + core.setting_setbool(setting.name, not core.is_yes(current_value)) + core.setting_save() + return true + else + list_enter = true + end + else + return true + end + end + + if fields["btn_edit"] or list_enter then + local setting = settings[selected_setting] + if setting.type ~= "category" then + local edit_dialog = dialog_create("change_setting", create_change_setting_formspec, + handle_change_setting_buttons) + edit_dialog:set_parent(this) + this:hide() + edit_dialog:show() + end + return true + end + + if fields["btn_restore"] then + local setting = settings[selected_setting] + if setting.type ~= "category" then + core.setting_set(setting.name, setting.default) + core.setting_save() + core.update_formspec(this:get_formspec()) + end + return true + end + + if fields["btn_change_keys"] then + core.show_keys_menu() + return true + end + + if fields["cb_tech_settings"] then + core.setting_set("main_menu_technical_settings", fields["cb_tech_settings"]) + core.setting_save() + core.update_formspec(this:get_formspec()) + return true + end + + return false +end + +tab_settings = { + name = "settings", + caption = fgettext("Settings"), + cbf_formspec = create_settings_formspec, + cbf_button_handler = handle_settings_buttons, +} + +local function create_minetest_conf_example() + local result = "# This file contains a list of all available settings and their default value for minetest.conf\n" .. + "\n" .. + "# By default, all the settings are commented and not functional.\n" .. + "# Uncomment settings by removing the preceding #.\n" .. + "\n" .. + "# minetest.conf is read by default from:\n" .. + "# ../minetest.conf\n" .. + "# ../../minetest.conf\n" .. + "# Any other path can be chosen by passing the path as a parameter\n" .. + "# to the program, eg. \"minetest.exe --config ../minetest.conf.example\".\n" .. + "\n" .. + "# Further documentation:\n" .. + "# http://wiki.minetest.net/\n" .. + "\n" + + local settings = parse_config_file(true, false) + for _, entry in ipairs(settings) do + if entry.type == "category" then + if entry.level == 0 then + result = result .. "#\n# " .. entry.name .. "\n#\n\n" + else + for i = 1, entry.level do + result = result .. "#" + end + result = result .. "# " .. entry.name .. "\n\n" + end + else + if entry.comment ~= "" then + for _, comment_line in ipairs(entry.comment:split("\n", true)) do + result = result .."# " .. comment_line .. "\n" + end + end + result = result .. "# type: " .. entry.type + if entry.min then + result = result .. " min: " .. entry.min + end + if entry.max then + result = result .. " max: " .. entry.max + end + if entry.values then + result = result .. " values: " .. table.concat(entry.values, ", ") + end + if entry.possible then + result = result .. " possible values: " .. entry.possible:gsub(",", ", ") + end + result = result .. "\n" + result = result .. "# " .. entry.name .. " = ".. entry.default .. "\n\n" + end + end + return result +end + +local function create_translation_file() + local result = "// This file is automatically generated\n" .. + "// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files\n" .. + "// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua\n\n" .. + "fake_function() {\n" + + local settings = parse_config_file(true, false) + for _, entry in ipairs(settings) do + if entry.type == "category" then + local name_escaped = entry.name:gsub("\"", "\\\"") + result = result .. "\tgettext(\"" .. name_escaped .. "\");\n" + else + if entry.readable_name then + local readable_name_escaped = entry.readable_name:gsub("\"", "\\\"") + result = result .. "\tgettext(\"" .. readable_name_escaped .. "\");\n" + end + if entry.comment ~= "" then + local comment_escaped = entry.comment:gsub("\n", "\\n") + comment_escaped = comment_escaped:gsub("\"", "\\\"") + result = result .. "\tgettext(\"" .. comment_escaped .. "\");\n" + end + end + end + result = result .. "}\n" + return result +end + +if false then + local file = io.open("minetest.conf.example", "w") + if file then + file:write(create_minetest_conf_example()) + file:close() + end +end + +if false then + local file = io.open("src/settings_translation_file.cpp", "w") + if file then + file:write(create_translation_file()) + file:close() + end +end diff --git a/builtin/mainmenu/tab_simple_main.lua b/builtin/mainmenu/tab_simple_main.lua new file mode 100644 index 000000000..434113b5f --- /dev/null +++ b/builtin/mainmenu/tab_simple_main.lua @@ -0,0 +1,205 @@ +--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.formspec_escape(core.setting_get("address")) .."]" .. + "field[5.75,3.25;2.25,0.5;te_port;;" .. + core.formspec_escape(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.formspec_escape(core.setting_get("name")) .."]" .. + "pwdfield[8.75,2.3;3.5,0.5;te_pwd;]" + + if render_details then + retval = retval .. "tablecolumns[" .. + "color,span=3;" .. + "text,align=right;" .. -- clients + "text,align=center,padding=0.25;" .. -- "/" + "text,align=right,padding=0.25;" .. -- clients_max + image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" .. + image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" .. + image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" .. + "color,span=1;" .. + "text,padding=1]" -- name + else + retval = retval .. "tablecolumns[text]" + end + retval = retval .. + "table[-0.05,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.28,3.75;12.4,0.1;#FFFFFF]" + + -- checkboxes + retval = retval .. + "checkbox[8.0,3.9;cb_creative;".. fgettext("Creative Mode") .. ";" .. + dump(core.setting_getbool("creative_mode")) .. "]".. + "checkbox[8.0,4.4;cb_damage;".. fgettext("Enable Damage") .. ";" .. + dump(core.setting_getbool("enable_damage")) .. "]" + -- buttons + retval = retval .. + "button[0,3.7;8,1.5;btn_start_singleplayer;" .. fgettext("Start Singleplayer") .. "]" .. + "button[0,4.5;8,1.5;btn_config_sp_world;" .. fgettext("Config mods") .. "]" + + return retval +end + +-------------------------------------------------------------------------------- +local function main_button_handler(tabview, fields, name, tabdata) + + if fields["btn_start_singleplayer"] then + gamedata.selected_world = gamedata.worldindex + gamedata.singleplayer = true + core.start() + return true + end + + if fields["favourites"] ~= nil then + local event = core.explode_table_event(fields["favourites"]) + + if event.type == "CHG" then + if event.row <= #menudata.favorites then + local address = menudata.favorites[event.row].address + local port = menudata.favorites[event.row].port + + if address ~= nil and + port ~= nil then + core.setting_set("address",address) + core.setting_set("remote_port",port) + end + + tabdata.fav_selected = event.row + 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["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 + + if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min, + menudata.favorites[fav_idx].proto_max) then + return true + end + 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 + } diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua new file mode 100644 index 000000000..a40918af9 --- /dev/null +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -0,0 +1,250 @@ +--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.set_topleft_text(gamemgr.games[j].name) + core.setting_set("menu_last_game",gamemgr.games[j].id) + menudata.worldlist:set_filtercriteria(gamemgr.games[j].id) + local index = filterlist.get_current_index(menudata.worldlist, + tonumber(core.setting_get("mainmenu_last_selected_world"))) + if not index or index < 1 then + local selected = core.get_textlist_index("sp_worlds") + if selected ~= nil and selected < #menudata.worldlist:get_list() then + index = selected + else + index = #menudata.worldlist:get_list() + end + end + menu_worldmt_legacy(index) + return true + end + end + end + end + + local btnbar = buttonbar_create("game_button_bar", + game_buttonbar_button_handler, + {x=-0.3,y=5.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 + local tooltip = core.formspec_escape(gamemgr.games[i].name) + + if gamemgr.games[i].menuicon_path ~= nil and + gamemgr.games[i].menuicon_path ~= "" then + image = core.formspec_escape(gamemgr.games[i].menuicon_path) + else + + local part1 = gamemgr.games[i].id:sub(1,5) + local part2 = gamemgr.games[i].id:sub(6,10) + local part3 = gamemgr.games[i].id:sub(11) + + text = part1 .. "\n" .. part2 + if part3 ~= nil and + part3 ~= "" then + text = text .. "\n" .. part3 + end + end + btnbar:add_button(btn_name, text, image, tooltip) + end +end + +local function get_formspec(tabview, name, tabdata) + local retval = "" + + local index = filterlist.get_current_index(menudata.worldlist, + tonumber(core.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:") .. "]".. + "checkbox[0.25,0.25;cb_creative_mode;".. fgettext("Creative Mode") .. ";" .. + dump(core.setting_getbool("creative_mode")) .. "]".. + "checkbox[0.25,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"]) + local selected = core.get_textlist_index("sp_worlds") + + menu_worldmt_legacy(selected) + + if event.type == "DCL" then + world_doubleclick = true + end + + if event.type == "CHG" and selected ~= nil then + core.setting_set("mainmenu_last_selected_world", + menudata.worldlist:get_raw_index(selected)) + return true + end + end + + if menu_handle_key_up_down(fields,"sp_worlds","mainmenu_last_selected_world") then + return true + end + + if fields["cb_creative_mode"] then + core.setting_set("creative_mode", fields["cb_creative_mode"]) + local selected = core.get_textlist_index("sp_worlds") + menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"]) + + return true + end + + if fields["cb_enable_damage"] then + core.setting_set("enable_damage", fields["cb_enable_damage"]) + local selected = core.get_textlist_index("sp_worlds") + menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"]) + + return true + end + + if fields["play"] ~= nil or + world_doubleclick or + fields["key_enter"] then + local selected = core.get_textlist_index("sp_worlds") + gamedata.selected_world = menudata.worldlist:get_raw_index(selected) + + if selected ~= nil and gamedata.selected_world ~= 0 then + gamedata.singleplayer = true + core.start() + else + gamedata.errormessage = + fgettext("No world created or selected!") + end + return true + end + + 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 + } diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua new file mode 100644 index 000000000..5514d31f9 --- /dev/null +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -0,0 +1,126 @@ +--Minetest +--Copyright (C) 2014 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-------------------------------------------------------------------------------- +local function filter_texture_pack_list(list) + local retval = {fgettext("None")} + for _, item in ipairs(list) do + if item ~= "base" then + table.insert(retval, item) + end + end + return retval +end + +-------------------------------------------------------------------------------- +local function render_texture_pack_list(list) + local retval = "" + + for i, v in ipairs(list) do + if v:sub(1,1) ~= "." then + if retval ~= "" then + retval = retval .."," + end + + retval = retval .. core.formspec_escape(v) + end + end + + return retval +end + +-------------------------------------------------------------------------------- +local function get_formspec(tabview, name, tabdata) + + local retval = "label[4,-0.25;".. fgettext("Select texture pack:") .. "]".. + "textlist[4,0.25;7.5,5.0;TPs;" + + local current_texture_path = core.setting_get("texture_path") + local list = filter_texture_pack_list(core.get_dir_list(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.."description.txt" + -- This adds backwards compatibility for old texture pack description files named + -- "info.txt", and should be removed once all such texture packs have been updated + if not file_exists(infofile) then + infofile = current_texture_path ..DIR_DELIM.."info.txt" + if file_exists(infofile) then + core.log("info.txt is depreciated. description.txt should be used instead."); + end + end + local infotext = "" + local f = io.open(infofile, "r") + if not f then + infotext = fgettext("No information available") + else + infotext = f:read("*all") + f:close() + end + + local screenfile = current_texture_path..DIR_DELIM.."screenshot.png" + local no_screenshot = 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.25,0.25;4.0,3.7;"..core.formspec_escape(screenfile or no_screenshot).."]".. + "textarea[0.6,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_dir_list(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] == fgettext("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 + } diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua new file mode 100644 index 000000000..075f38ee0 --- /dev/null +++ b/builtin/mainmenu/textures.lua @@ -0,0 +1,185 @@ +--Minetest +--Copyright (C) 2013 sapier +-- +--This program is free software; you can redistribute it and/or modify +--it under the terms of the GNU Lesser General Public License as published by +--the Free Software Foundation; either version 2.1 of the License, or +--(at your option) any later version. +-- +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU Lesser General Public License for more details. +-- +--You should have received a copy of the GNU Lesser General Public License along +--with this program; if not, write to the Free Software Foundation, Inc., +--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +mm_texture = {} + +-------------------------------------------------------------------------------- +function mm_texture.init() + mm_texture.defaulttexturedir = core.get_texturepath() .. DIR_DELIM .. "base" .. + DIR_DELIM .. "pack" .. DIR_DELIM + mm_texture.basetexturedir = mm_texture.defaulttexturedir + + mm_texture.texturepack = core.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 + + -- Find out how many randomized textures the subgame provides + local n = 0 + local filename + local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false) + for i = 1, #menu_files do + filename = identifier .. "." .. i .. ".png" + if table.indexof(menu_files, filename) == -1 then + n = i - 1 + break + end + end + -- Select random texture, 0 means standard texture + n = math.random(0, n) + if n == 0 then + filename = identifier .. ".png" + else + filename = identifier .. "." .. n .. ".png" + end + + local path = gamedetails.path .. DIR_DELIM .. "menu" .. + DIR_DELIM .. filename + if core.set_background(identifier, path) then + return true + end + + return false +end + +function mm_texture.set_dirt_bg() + if mm_texture.texturepack ~= nil then + local path = mm_texture.texturepack .. DIR_DELIM .."default_dirt.png" + if core.set_background("background", path, true, 128) then + return true + end + end + + --use base pack + local minimalpath = defaulttexturedir .. "dirt_bg.png" + core.set_background("background", minimalpath, true, 128) +end diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt new file mode 100644 index 000000000..2929b860b --- /dev/null +++ b/builtin/settingtypes.txt @@ -0,0 +1,1087 @@ +# This file contains all settings displayed in the settings menu. +# +# General format: +# name (Readable name) type type_args +# +# Note that the parts are seperated by exactly one space +# +# `type` can be: +# - int +# - string +# - bool +# - float +# - enum +# - path +# - key (will be ignored in GUI, since a special key change dialog exists) +# - flags +# - noise_params +# +# `type_args` can be: +# * int: +# - default +# - default min max +# * string: +# - default (if default is not specified then "" is set) +# * bool: +# - default +# * float: +# - default +# - default min max +# * enum: +# - default value1,value2,... +# * path: +# - default (if default is not specified then "" is set) +# * key: +# - default +# * flags: +# Flags are always separated by comma without spaces. +# - default possible_flags +# * noise_params: +# TODO: these are currently treated like strings +# +# Comments directly above a setting are bound to this setting. +# All other comments are ignored. +# +# Comments and (Readable name) are handled by gettext. +# Comments should be complete sentences that describe the setting and possibly +# give the user additional useful insight. +# Sections are marked by a single line in the format: [Section Name] +# Sub-section are marked by adding * in front of the section name: [*Sub-section] +# Sub-sub-sections have two * etc. +# There shouldn't be too much settings per category; settings that shouldn't be +# modified by the "average user" should be in (sub-)categories called "Advanced". + +[Client] + +[*Controls] +# If enabled, you can place blocks at the position (feet + eye level) where you stand. +# This is helpful when working with nodeboxes in small areas. +enable_build_where_you_stand (Build inside player) bool false + +# Player is able to fly without being affected by gravity. +# This requires the "fly" privilege on the server. +free_move (Flying) bool false + +# Fast movement (via use key). +# This requires the "fast" privilege on the server. +fast_move (Fast movement) bool false + +# If enabled together with fly mode, player is able to fly through solid nodes. +# This requires the "noclip" privilege on the server. +noclip (Noclip) bool false + +# Smooths camera when moving and looking around. +# Useful for recording videos. +cinematic (Cinematic mode) bool false + +# Smooths rotation of camera. 0 to disable. +camera_smoothing (Camera smoothing) float 0.0 0.0 0.99 + +# Smooths rotation of camera in cinematic mode. 0 to disable. +cinematic_camera_smoothing (Camera smoothing in cinematic mode) float 0.7 0.0 0.99 + +# Invert vertical mouse movement. +invert_mouse (Invert mouse) bool false + +# Mouse sensitivity multiplier. +mouse_sensitivity (Mouse sensitivity) float 0.2 + +# If enabled, "use" key instead of "sneak" key is used for climbing down and descending. +aux1_descends (Key use for climbing/descending) bool false + +# Double-tapping the jump key toggles fly mode. +doubletap_jump (Double tap jump for fly) bool false + +# If disabled "use" key is used to fly fast if both fly and fast mode are enabled. +always_fly_fast (Always fly and fast) bool true + +# The time in seconds it takes between repeated right clicks when holding the right mouse button. +repeat_rightclick_time (Rightclick repetition interval) float 0.25 + +# Enable random user input (only used for testing). +random_input (Random input) bool false + +# Continuous forward movement (only used for testing). +continuous_forward (Continuous forward) bool false + +# Key for moving the player forward. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_forward (Forward key) key KEY_KEY_W + +# Key for moving the player backward. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_backward (Backward key) key KEY_KEY_S + +# Key for moving the player left. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_left (Left key) key KEY_KEY_A + +# Key for moving the player right. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_right (Right key) key KEY_KEY_D + +# Key for jumping. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_jump (Jump key) key KEY_SPACE + +# Key for sneaking. +# Also used for climbing down and descending in water if aux1_descends is disabled. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_sneak (Sneak key) key KEY_LSHIFT + +# Key for opening the inventory. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_inventory (Inventory key) key KEY_KEY_I + +# Key for moving fast in fast mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_special1 (Use key) key KEY_KEY_E + +# Key for opening the chat window. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_chat (Chat key) key KEY_KEY_T + +# Key for opening the chat window to type commands. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_cmd (Command key) key / + +# Key for opening the chat console. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keyman_console (Console key) key KEY_F10 + +# Key for toggling unlimited view range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_rangeselect (Range select key) key KEY_KEY_R + +# Key for toggling flying. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_freemove (Fly key) key KEY_KEY_K + +# Key for toggling fast mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_fastmove (Fast key) key KEY_KEY_J + +# Key for toggling noclip mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_noclip (Noclip key) key KEY_KEY_H + +# Key for toggling cinematic mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_cinematic (Cinematic mode key) key KEY_F8 + +# Key for toggling display of minimap. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_minimap (Minimap key) key KEY_F9 + +# Key for taking screenshots. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_screenshot (Screenshot) key KEY_F12 + +# Key for dropping the currently selected item. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_drop (Drop item key) key KEY_KEY_Q + +# Key for toggling the display of the HUD. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_hud (HUD toggle key) key KEY_F1 + +# Key for toggling the display of the chat. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_chat (Chat toggle key) key KEY_F2 + +# Key for toggling the display of the fog. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_force_fog_off (Fog toggle key) key KEY_F3 + +# Key for toggling the camrea update. Only used for development +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_update_camera (Camera update toggle key) key + +# Key for toggling the display of debug info. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_debug (Debug info toggle key) key KEY_F5 + +# Key for toggling the display of the profiler. Used for development. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_profiler (Profiler toggle key) key KEY_F6 + +# Key for switching between first- and third-person camera. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_camera_mode (Toggle camera mode key) key KEY_F7 + +# Key for increasing the viewing range. Modifies the minimum viewing range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_increase_viewing_range_min (View range increase key) key + + +# Key for decreasing the viewing range. Modifies the minimum viewing range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_decrease_viewing_range_min (View range decrease key) key - + +# Key for printing debug stacks. Used for development. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_print_debug_stacks (Print stacks) key KEY_KEY_P + +[*Network] + +# Address to connect to. +# Leave this blank to start a local server. +# Note that the address field in the main menu overrides this setting. +address (Server address) string + +# Port to connect to (UDP). +# Note that the port field in the main menu overrides this setting. +remote_port (Remote port) int 30000 1 65535 + +# Save the map received by the client on disk. +enable_local_map_saving (Saving map received from server) bool false + +# Enable usage of remote media server (if provided by server). +# Remote servers offer a significantly faster way to download media (e.g. textures) +# when connecting to the server. +enable_remote_media_server (Connect to external media server) bool true + +# URL to the server list displayed in the Multiplayer Tab. +serverlist_url (Serverlist URL) string servers.minetest.net + +# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab. +serverlist_file (Serverlist file) string favoriteservers.txt + +[*Graphics] + +[**In-Game] + +[***Basic] + +# Whether to fog out the end of the visible area. +enable_fog (Fog) bool true + +# Enable a bit lower water surface, so it doesn't "fill" the node completely. +# Note that this is not quite optimized and that smooth lighting on the +# water surface doesn't work with this. +new_style_water (New style water) bool false + +# Leaves style: +# - Fancy: all faces visible +# - Simple: only outer faces, if defined special_tiles are used +# - Opaque: disable transparency +leaves_style (Leaves style) enum fancy fancy,simple,opaque + +# Connects glass if supported by node. +connected_glass (Connect glass) bool false + +# Enable smooth lighting with simple ambient occlusion. +# Disable for speed or for different looks. +smooth_lighting (Smooth lighting) bool true + +# Clouds are a client side effect. +enable_clouds (Clouds) bool true + +# Use 3D cloud look instead of flat. +enable_3d_clouds (3D clouds) bool true + +[***Filtering] + +# Use mip mapping to scale textures. May slightly increase performance. +mip_map (Mipmapping) bool false + +# Use anisotropic filtering when viewing at textures from an angle. +anisotropic_filter (Anisotropic filtering) bool false + +# Use bilinear filtering when scaling textures. +bilinear_filter (Bilinear filtering) bool false + +# Use trilinear filtering when scaling textures. +trilinear_filter (Trilinear filtering) bool false + +# Filtered textures can blend RGB values with fully-transparent neighbors, +# which PNG optimizers usually discard, sometimes resulting in a dark or +# light edge to transparent textures. Apply this filter to clean that up +# at texture load time. +texture_clean_transparent (Clean transparent textures) bool false + +# When using bilinear/trilinear/anisotropic filters, low-resolution textures +# can be blurred, so automatically upscale them with nearest-neighbor +# interpolation to preserve crisp pixels. This sets the minimum texture size +# for the upscaled textures; higher values look sharper, but require more +# memory. Powers of 2 are recommended. Setting this higher than 1 may not +# have a visible effect unless bilinear/trilinear/anisotropic filtering is +# enabled. +texture_min_size (Minimum texture size for filters) int 64 + +# Pre-generate all item visuals used in the inventory. +# This increases startup time, but runs smoother in-game. +# The generated textures can easily exceed your VRAM, causing artifacts in the inventory. +preload_item_visuals (Preload inventory textures) bool false + +# Experimental option, might cause visible spaces between blocks +# when set to higher number than 0. +fsaa (FSAA) enum 0 0,1,2,4,8,16 + +[***Shaders] + +# Shaders allow advanced visul effects and may increase performance on some video cards. +# Thy only work with the OpenGL video backend. +enable_shaders (Shaders) bool true + +[****Bumpmapping] + +# Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack +# or need to be auto-generated. +# Requires shaders to be enabled. +enable_bumpmapping (Bumpmapping) bool false + +# Enables on the fly normalmap generation (Emboss effect). +# Requires bumpmapping to be enabled. +generate_normalmaps (Generate normalmaps) bool false + +# Strength of generated normalmaps. +normalmaps_strength (Normalmaps strength) float 0.6 + +# Defines sampling step of texture. +# A higher value results in smoother normal maps. +normalmaps_smooth (Normalmaps sampling) int 0 0 2 + +[****Parallax Occlusion] + +# Enables parallax occlusion mapping. +# Requires shaders to be enabled. +enable_parallax_occlusion (Parallax occlusion) bool false + +# 0 = parallax occlusion with slope information (faster). +# 1 = relief mapping (slower, more accurate). +parallax_occlusion_mode (Parallax occlusion mode) int 1 0 1 + +# Strength of parallax. +3d_parallax_strength (Parallax occlusion strength) float 0.025 + +# Number of parallax occlusion iterations. +parallax_occlusion_iterations (Parallax occlusion iterations) int 4 + +# Overall scale of parallax occlusion effect. +parallax_occlusion_scale (Parallax occlusion Scale) float 0.08 + +# Overall bias of parallax occlusion effect, usually scale/2. +parallax_occlusion_bias (Parallax occlusion bias) float 0.04 + +[****Waving Nodes] + +# Set to true enables waving water. +# Requires shaders to be enabled. +enable_waving_water (Waving water) bool false + +water_wave_height (Waving water height) float 1.0 + +water_wave_length (Waving water length) float 20.0 + +water_wave_speed (Waving water speed) float 5.0 + +# Set to true enables waving leaves. +# Requires shaders to be enabled. +enable_waving_leaves (Waving leaves) bool false + +# Set to true enables waving plants. +# Requires shaders to be enabled. +enable_waving_plants (Waving plants) bool false + +[***Advanced] + +# Minimum wanted FPS. +# The amount of rendered stuff is dynamically set according to this. and viewing range min and max. +wanted_fps (Wanted FPS) int 30 + +# If FPS would go higher than this, limit it by sleeping +# to not waste CPU power for no benefit. +fps_max (Maximum FPS) int 60 + +# Maximum FPS when game is paused. +pause_fps_max (FPS in pause menu) int 20 + +# The allowed adjustment range for the automatic rendering range adjustment. +# Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm. +viewing_range_nodes_max (Viewing range maximum) int 160 + +# The allowed adjustment range for the automatic rendering range adjustment. +# Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm. +viewing_range_nodes_min (Viewing range minimum) int 35 + +# Vertical initial window size. +screenW (Screen width) int 800 + +# Horizontal initial window size. +screenH (Screen height) int 600 + +# Fullscreen mode. +fullscreen (Full screen) bool false + +# Bits per pixel (aka color depth) in fullscreen mode. +fullscreen_bpp (Full screen BPP) int 24 + +# Vertical screen synchronization. +vsync (V-Sync) bool false + +# Field of view in degrees. +fov (Field of view) int 72 30 160 + +# Adjust the gamma encoding for the light tables. Lower numbers are brighter. +# This setting is for the client only and is ignored by the server. +display_gamma (Gamma) float 1.8 1.0 3.0 + +# Path to texture directory. All textures are first searched from here. +texture_path (Texture path) path + +# The rendering back-end for Irrlicht. +video_driver (Video driver) enum opengl null,software,burningsvideo,direct3d8,direct3d9,opengl + +# Height on which clouds are appearing. +cloud_height (Cloud height) int 120 + +# Radius of cloud area stated in number of 64 node cloud squares. +# Values larger than 26 will start to produce sharp cutoffs at cloud area corners. +cloud_radius (Cloud radius) int 12 + +# Multiplier for view bobbing. +# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double. +view_bobbing_amount (View bobbing) float 1.0 + +# Multiplier for fall bobbing. +# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double. +fall_bobbing_amount (Fall bobbing) float 0.0 + +# 3D support. +# Currently supported: +# - none: no 3d output. +# - anaglyph: cyan/magenta color 3d. +# - interlaced: odd/even line based polarisation screen support. +# - topbottom: split screen top/bottom. +# - sidebyside: split screen side by side. +3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside + +# In-game chat console background color (R,G,B). +console_color (Console color) string (0,0,0) + +# In-game chat console background alpha (opaqueness, between 0 and 255). +console_alpha (Console alpha) int 200 0 255 + +# Selection box border color (R,G,B). +selectionbox_color (Selection box color) string (0,0,0) + +# Width of the selectionbox's lines around nodes. +selectionbox_width (Selection box width) int 2 1 5 + +# Crosshair color (R,G,B). +crosshair_color (Crosshair color) string (255,255,255) + +# Crosshair alpha (opaqueness, between 0 and 255). +crosshair_alpha (Crosshair alpha) int 255 0 255 + +# Whether node texture animations should be desynchronized per mapblock. +desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true + +# Maximum proportion of current window to be used for hotbar. +# Useful if there's something to be displayed right or left of hotbar. +hud_hotbar_max_width (Maximum hotbar width) float 1.0 + +# Enable selection highlighting for nodes (disables selectionbox). +enable_node_highlighting (Node highlighting) bool false + +# Enables caching of facedir rotated meshes. +enable_mesh_cache (Mesh cache) bool false + +# Enables minimap. +enable_minimap (Minimap) bool true + +# Shape of the minimap. Enabled = round, disabled = square. +minimap_shape_round (Round minimap) bool true + +# True = 256 +# False = 128 +# Useable to make minimap smoother on slower machines. +minimap_double_scan_height (Minimap scan height) bool true + +# Make fog and sky colors depend on daytime (dawn/sunset) and view direction. +directional_colored_fog (Colored fog) bool true + +# The strength (darkness) of node ambient-occlusion shading. +# Lower is darker, Higher is lighter. The valid range of values for this +# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be +# set to the nearest valid value. +ambient_occlusion_gamma (Ambient occlusion gamma) float 2.2 0.25 4.0 + +[**Menus] + +# Use a cloud animation for the main menu background. +menu_clouds (Clouds in menu) bool true + +# Scale gui by a user specified value. +# Use a nearest-neighbor-anti-alias filter to scale the GUI. +# This will smooth over some of the rough edges, and blend +# pixels when scaling down, at the cost of blurring some +# edge pixels when images are scaled by non-integer sizes. +gui_scaling (GUI scaling) float 1.0 + +# When gui_scaling_filter is true, all GUI images need to be +# filtered in software, but some images are generated directly +# to hardware (e.g. render-to-texture for nodes in inventory). +gui_scaling_filter (GUI scaling filter) bool false + +# When gui_scaling_filter_txr2img is true, copy those images +# from hardware to software for scaling. When false, fall back +# to the old scaling method, for video drivers that don't +# propery support downloading textures back from hardware. +gui_scaling_filter_txr2img (GUI scaling filter txr2img) bool true + +# Delay showing tooltips, stated in milliseconds. +tooltip_show_delay (Tooltip delay) int 400 + +# Whether freetype fonts are used, requires freetype support to be compiled in. +freetype (Freetype fonts) bool true + +# Path to TrueTypeFont or bitmap. +font_path (Font path) path fonts/liberationsans.ttf + +font_size (Font size) int 15 + +# Font shadow offset, if 0 then shadow will not be drawn. +font_shadow (Font shadow) int 1 + +# Font shadow alpha (opaqueness, between 0 and 255). +font_shadow_alpha (Font shadow alpha) int 128 0 255 + +mono_font_path (Monospace font path) path fonts/liberationmono.ttf + +mono_font_size (Monospace font size) int 15 + +# This font will be used for certain languages. +fallback_font_path (Fallback font) path fonts/DroidSansFallbackFull.ttf +fallback_font_size (Fallback font size) int 15 +fallback_font_shadow (Fallback font shadow) int 1 +fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255 + +# Path to save screenshots at. +screenshot_path (Screenshot folder) path + +[**Advanced] + +# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens. +screen_dpi (DPI) int 72 + +[*Sound] + +enable_sound (Sound) bool true + +sound_volume (Volume) float 0.7 0.0 1.0 + +[*Advanced] + +# Timeout for client to remove unused map data from memory. +client_unload_unused_data_timeout (Mapblock unload timeout) int 600 + +# Maximum number of mapblocks for client to be kept in memory. +# Set to -1 for unlimited amount. +client_mapblock_limit (Mapblock limit) int 5000 + +# Whether to show the client debug info (has the same effect as hitting F5). +show_debug (Show debug info) bool false + +[Server / Singleplayer] + +# Name of the server, to be displayed when players join and in the serverlist. +server_name (Server name) string Minetest server + +# Description of server, to be displayed when players join and in the serverlist. +server_description (Server description) string mine here + +# Domain name of server, to be displayed in the serverlist. +server_address (Server address) string game.minetest.net + +# Homepage of server, to be displayed in the serverlist. +server_url (Server URL) string http://minetest.net + +# Automaticaly report to the serverlist. +server_announce (Announce server) bool false + +# Announce to this serverlist. +# If you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net. +serverlist_url (Serverlist URL) string servers.minetest.net + +[*Network] + +# Network port to listen (UDP). +# This value will be overridden when starting from the main menu. +port (Server port) int 30000 + +# The network interface that the server listens on. +bind_address (Bind address) string + +# Enable to disallow old clients from connecting. +# Older clients are compatible in the sense that they will not crash when connecting +# to new servers, but they may not support all new features that you are expecting. +strict_protocol_version_checking (Strict protocol checking) bool false + +# Specifies URL from which client fetches media instead of using UDP. +# $filename should be accessible from $remote_media$filename via cURL +# (obviously, remote_media should end with a slash). +# Files that are not present will be fetched the usual way. +remote_media (Remote media) string + +# Enable/disable running an IPv6 server. An IPv6 server may be restricted +# to IPv6 clients, depending on system configuration. +# Ignored if bind_address is set. +ipv6_server (IPv6 server) bool false + +[**Advanced] + +# How many blocks are flying in the wire simultaneously per client. +max_simultaneous_block_sends_per_client (Maximum simultaneously blocks send per client) int 10 + +# How many blocks are flying in the wire simultaneously for the whole server. +max_simultaneous_block_sends_server_total (Maximum simultaneously bocks send total) int 40 + +# To reduce lag, block transfers are slowed down when a player is building something. +# This determines how long they are slowed down after placing or removing a node. +full_block_send_enable_min_time_from_building () float 2.0 + +# Maximum number of packets sent per send step, if you have a slow connection +# try reducing it, but don't reduce it to a number below double of targeted +# client number. +max_packets_per_iteration (Max. packets per iteration) int 1024 + +[*Game] + +# Default game when creating a new world. +# This will be overridden when creating a world from the main menu. +default_game (Default game) string minetest + +# Message of the day displayed to players connecting. +motd (Message of the day) string + +# Maximum number of players that can connect simultaneously. +max_users (Maximum users) int 15 + +# World directory (everything in the world is stored here). +# Not needed if starting from the main menu. +map-dir (Map directory) path + +# Time in seconds for item entity (dropped items) to live. +# Setting it to -1 disables the feature. +item_entity_ttl (Item entity TTL) int 900 + +# Enable players getting damage and dying. +enable_damage (Damage) bool false + +# A chosen map seed for a new map, leave empty for random. +# Will be overridden when creating a new world in the main menu. +fixed_map_seed (Fixed map seed) string + +# New users need to input this password. +default_password (Default password) string + +# The privileges that new users automatically get. +# See /privs in game for a full list on your server and mod configuration. +default_privs (Default privileges) string interact, shout + +# Whether players are shown to clients without any range limit. +# Deprecated, use the setting player_transfer_distance instead. +unlimited_player_transfer_distance (Unlimited player transfer distance) bool true + +# Defines the maximal player transfer distance in blocks (0 = unlimited). +player_transfer_distance (Player transfer distance) int 0 + +# Whether to allow players to damage and kill each other. +enable_pvp (Player versus Player) bool true + +# If this is set, players will always (re)spawn at the given position. +static_spawnpoint (Static spawnpoint) string + +# Maximum distance above water level for player spawn. +# Larger values result in spawn points closer to (x = 0, z = 0). +# Smaller values may result in a suitable spawn point not being found, +# resulting in a spawn at (0, 0, 0) possibly buried underground. +vertical_spawn_range (Vertical spawn range) int 16 + +# If enabled, new players cannot join with an empty password. +disallow_empty_password (Disallow empty passwords) bool false + +# If enabled, disable cheat prevention in multiplayer. +disable_anticheat (Disable anticheat) bool false + +# If enabled, actions are recorded for rollback. +# This option is only read when server starts. +enable_rollback_recording (Rollback recording) bool false + +# A message to be displayed to all clients when the server shuts down. +kick_msg_shutdown (Shutdown message) string Server shutting down. + +# A message to be displayed to all clients when the server crashes. +kick_msg_crash (Crash message) string This server has experienced an internal error. You will now be disconnected. + +# Whether to ask clients to reconnect after a (Lua) crash. +# Set this to true if your server is set up to restart automatically. +ask_reconnect_on_crash (Ask to reconnect after crash) bool false + +# From how far clients know about objects, stated in mapblocks (16 nodes). +active_object_send_range_blocks (Active object send range) int 3 + +# How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes). +# In active blocks objects are loaded and ABMs run. +active_block_range (Active block range) int 2 + +# From how far blocks are sent to clients, stated in mapblocks (16 nodes). +max_block_send_distance (Max block send distance) int 10 + +# Maximum number of forceloaded mapblocks. +max_forceloaded_blocks (Maximum forceloaded blocks) int 16 + +# Interval of sending time of day to clients. +time_send_interval (Time send interval) int 5 + +# Controls length of day/night cycle. +# Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged. +time_speed (Time speed) int 72 + +# Interval of saving important changes in the world, stated in seconds. +server_map_save_interval (Map save interval) float 5.3 + +[**Physics] + +movement_acceleration_default (Default acceleration) float 3 +movement_acceleration_air (Acceleration in air) float 2 +movement_acceleration_fast (Fast mode acceleration) float 10 +movement_speed_walk (Walking speed) float 4 +movement_speed_crouch (Crouch speed) float 1.35 +movement_speed_fast (Fast mode speed) float 20 +movement_speed_climb (Climbing speed) float 2 +movement_speed_jump (Jumping speed) float 6.5 +movement_speed_descend (Descending speed) float 6 +movement_liquid_fluidity (Liquid fluidity) float 1 +movement_liquid_fluidity_smooth (Liquid fluidity smoothing) float 0.5 +movement_liquid_sink (Liquid sink) float 10 +movement_gravity (Gravity) float 9.81 + +[**Advanced] + +# Handling for deprecated lua api calls: +# - legacy: (try to) mimic old behaviour (default for release). +# - log: mimic and log backtrace of deprecated call (default for debug). +# - error: abort on usage of deprecated call (suggested for mod developers). +deprecated_lua_api_handling (Deprecated Lua API handling) enum legacy legacy,log,error + +# Useful for mod developers. +mod_profiling (Mod profiling) bool false + +# Detailed mod profile data. Useful for mod developers. +detailed_profiling (Detailed mod profiling) bool false + +# Profiler data print interval. 0 = disable. Useful for developers. +profiler_print_interval (Profiling print interval) int 0 + +# Number of extra blocks that can be loaded by /clearobjects at once. +# This is a trade-off between sqlite transaction overhead and +# memory consumption (4096=100MB, as a rule of thumb). +max_clearobjects_extra_loaded_blocks (Max. clearobjects extra blocks) int 4096 + +# How much the server will wait before unloading unused mapblocks. +# Higher value is smoother, but will use more RAM. +server_unload_unused_data_timeout (Unload unused server data) int 29 + +# Maximum number of statically stored objects in a block. +max_objects_per_block (Maxmimum objects per block) int 49 + +# See http://www.sqlite.org/pragma.html#pragma_synchronous +sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2 + +# Length of a server tick and the interval at which objects are generally updated over network. +dedicated_server_step (Dedicated server step) float 0.1 + +# If enabled, invalid world data won't cause the server to shut down. +# Only enable this if you know what you are doing. +ignore_world_load_errors (Ignore world errors) bool false + +# Max liquids processed per step. +liquid_loop_max (Liquid loop max) int 100000 + +# The time (in seconds) that the liquids queue may grow beyond processing +# capacity until an attempt is made to decrease its size by dumping old queue +# items. A value of 0 disables the functionality. +liquid_queue_purge_time (Liquid queue purge time) int 0 + +# Liquid update interval in seconds. +liquid_update (Liquid update tick) float 1.0 + +[*Mapgen] + +# Name of map generator to be used when creating a new world. +# Creating a world in the main menu will override this. +mg_name (Mapgen name) enum v6 v5,v6,v7,flat,fractal,singlenode + +# Water surface level of the world. +water_level (Water level) int 1 + +# From how far blocks are generated for clients, stated in mapblocks (16 nodes). +max_block_generate_distance (Max block generate distance) int 6 + +# Where the map generator stops. +# Please note: +# - Limited to 31000 (setting above has no effect) +# - The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks). +# - Those groups have an offset of -32, -32 nodes from the origin. +# - Only groups which are within the map_generation_limit are generated +map_generation_limit (Map generation limit) int 31000 0 31000 + +# Global map generation attributes. +# In Mapgen v6 the 'decorations' flag controls all decorations except trees +# and junglegrass, in all other mapgens this flag controls all decorations. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +mg_flags (Mapgen flags) flags caves,dungeons,light,decorations caves,dungeons,light,decorations,nocaves,nodungeons,nolight,nodecorations + +[**Advanced] + +# Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes). +chunksize (Chunk size) int 5 + +# Dump the mapgen debug infos. +enable_mapgen_debug_info (Mapgen debug) bool false + +# Maximum number of blocks that can be queued for loading. +emergequeue_limit_total (Absolute limit of emerge queues) int 256 + +# Maximum number of blocks to be queued that are to be loaded from file. +# Set to blank for an appropriate amount to be chosen automatically. +emergequeue_limit_diskonly (Limit of emerge queues on disk) int 32 + +# Maximum number of blocks to be queued that are to be generated. +# Set to blank for an appropriate amount to be chosen automatically. +emergequeue_limit_generate (Limit of emerge queues to generate) int 32 + +# Number of emerge threads to use. Make this field blank, or increase this number +# to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly +# at the cost of slightly buggy caves. +num_emerge_threads (Number of emerge threads) int 1 + +# Noise parameters for biome API temperature, humidity and biome blend. +mg_biome_np_heat (Mapgen biome heat noise parameters) noise_params 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 +mg_biome_np_heat_blend (Mapgen heat blend noise parameters) noise_params 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 +mg_biome_np_humidity (Mapgen biome humidity noise parameters) noise_params 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 +mg_biome_np_humidity_blend (Mapgen biome humidity blend noise parameters) noise_params 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 + +[***Mapgen v5] + +mgv5_np_filler_depth (Mapgen v5 filler depth noise parameters) noise_params 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 +mgv5_np_factor (Mapgen v5 factor noise parameters) noise_params 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0 +mgv5_np_height (Mapgen v5 height noise parameters) noise_params 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0 +mgv5_np_cave1 (Mapgen v5 cave1 noise parameters) noise_params 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0 +mgv5_np_cave2 (Mapgen v5 cave2 noise parameters) noise_params 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0 +# TODO +#mgv5_np_ground = { +# offset = 0 +# scale = 40 +# spread = (80, 80, 80) +# seed = 983240 +# octaves = 4 +# persistence = 0.55 +# lacunarity = 2.0 +# flags = "eased" +#} + +[***Mapgen v6] + +# Map generation attributes specific to Mapgen v6. +# When snowbiomes are enabled jungles are enabled and the jungles flag is ignored. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +mgv6_spflags (Mapgen v6 flags) flags jungles,biomeblend,mudflow,snowbiomes,trees jungles,biomeblend,mudflow,snowbiomes,flat,trees,nojungles,nobiomeblend,nomudflow,nosnowbiomes,noflat,notrees + +# Controls size of deserts and beaches in Mapgen v6. +# When snowbiomes are enabled 'mgv6_freq_desert' is ignored. +mgv6_freq_desert (Mapgen v6 desert frequency) float 0.45 +mgv6_freq_beach (Mapgen v6 beach frequency) float 0.15 + +mgv6_np_terrain_base (Mapgen v6 terrain base noise parameters) noise_params -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0 +mgv6_np_terrain_higher (Mapgen v6 terrain altitude noise parameters) noise_params 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0 +mgv6_np_steepness (Mapgen v6 steepness noise parameters) noise_params 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0 +mgv6_np_height_select (Mapgen v6 height select noise parameters) noise_params 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0 +mgv6_np_mud (Mapgen v6 mud noise parameters) noise_params 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0 +mgv6_np_beach (Mapgen v6 beach noise parameters) noise_params 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0 +mgv6_np_biome (Mapgen v6 biome noise parameters) noise_params 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0 +mgv6_np_cave (Mapgen v6 cave noise parameters) noise_params 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0 +mgv6_np_humidity (Mapgen v6 humidity noise parameters) noise_params 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0 +mgv6_np_trees (Mapgen v6 trees noise parameters) noise_params 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 +mgv6_np_apple_trees (Mapgen v6 apple trees noise parameters) noise_params 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 + +[***Mapgen v7] + +# Map generation attributes specific to Mapgen v7. +# 'ridges' are the rivers. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +mgv7_spflags (Mapgen v7 flags) flags mountains,ridges mountains,ridges,nomountains,noridges + +mgv7_np_terrain_base (Mapgen v7 terrain base noise parameters) noise_params 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0 +mgv7_np_terrain_alt (Mapgen v7 terrain altitude noise parameters) noise_params 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 +mgv7_np_terrain_persist (Mapgen v7 terrain persistation noise parameters) noise_params 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0 +mgv7_np_height_select (Mapgen v7 height select noise parameters) noise_params -12, 24, (500, 500, 500), 4213, 6, 0.7, 2.0 +mgv7_np_filler_depth (Mapgen v7 filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0 +mgv7_np_mount_height (Mapgen v7 mount height noise parameters) noise_params 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0 +mgv7_np_ridge_uwater (Mapgen v7 ridge water noise parameters) noise_params 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 +mgv7_np_mountain (Mapgen v7 mountain noise parameters) noise_params -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0 +mgv7_np_ridge (Mapgen v7 ridge noise parameters) noise_params 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 +mgv7_np_cave1 (Mapgen v7 cave1 noise parameters) noise_params 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 +mgv7_np_cave2 (Mapgen v7 cave2 noise parameters) noise_params 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0 + +[***Mapgen flat] + +# Map generation attributes specific to Mapgen flat. +# Occasional lakes and hills added to the flat world. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +mgflat_spflags (Mapgen flat flags) flags nolakes,nohills lakes,hills,nolakes,nohills + +# Y of flat ground. +mgflat_ground_level (Mapgen flat ground level) int 8 + +# Y of upper limit of large pseudorandom caves. +mgflat_large_cave_depth (Mapgen flat large cave depth) int -33 + +# Terrain noise threshold for lakes. +# Controls proportion of world area covered by lakes. +# Adjust towards 0.0 for a larger proportion. +mgflat_lake_threshold (Mapgen flat lake threshold) float -0.45 + +# Controls steepness/depth of lake depressions. +mgflat_lake_steepness (Mapgen flat lake steepness) float 48.0 + +# Terrain noise threshold for hills. +# Controls proportion of world area covered by hills. +# Adjust towards 0.0 for a larger proportion. +mgflat_hill_threshold (Mapgen flat hill threshold) float 0.45 + +# Controls steepness/height of hills. +mgflat_hill_steepness (Mapgen flat hill steepness) float 64.0 + +# Determines terrain shape. +# The 3 numbers in brackets control the scale of the +# terrain, the 3 numbers should be identical. +mgflat_np_terrain (Mapgen flat terrain noise parameters) noise_params 0, 1, (600, 600, 600), 7244, 5, 0.6, 2.0 + +mgflat_np_filler_depth (Mapgen flat filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0 +mgflat_np_cave1 (Mapgen flat cave1 noise parameters) noise_params 0, 12, (128, 128, 128), 52534, 4, 0.5, 2.0 +mgflat_np_cave2 (Mapgen flat cave2 noise parameters) noise_params 0, 12, (128, 128, 128), 10325, 4, 0.5, 2.0 + +[***Mapgen fractal] + +# Choice of 8 4-dimensional fractals. +# 1 = "Roundy" mandelbrot set. +# 2 = "Roundy" julia set. +# 3 = "Squarry" mandelbrot set. +# 4 = "Squarry" julia set. +# 5 = "Mandy Cousin" mandelbrot set. +# 6 = "Mandy Cousin" julia set. +# 7 = "Variation" mandelbrot set. +# 8 = "Variation" julia set. +mgfractal_formula (Mapgen fractal formula) int 1 1 8 + +# Iterations of the recursive function. +# Controls scale of finest detail. +mgfractal_iterations (Mapgen fractal iterations) int 11 + +# Approximate (X,Y,Z) scale of fractal in nodes. +mgfractal_scale (Mapgen fractal scale) v3f (4096.0, 1024.0, 4096.0) + +# (X,Y,Z) offset of fractal from world centre. +# Used to move a suitable spawn area of low land close to (0, 0). +# The default is suitable for mandelbrot sets, it needs to be edited for julia sets, +# do this by greatly reducing 'scale' and setting 'offset' initially to (0, 0, 0). +# Range roughly -2 to 2. Multiply by 'scale' for offset in nodes. +mgfractal_offset (Mapgen fractal offset) v3f (1.79, 0.0, 0.0) + +# W co-ordinate of the generated 3D slice of the 4D shape. +# Alters the generated 3D shape. +# Range roughly -2 to 2. +mgfractal_slice_w (Mapgen fractal slice w) float 0.0 + +# Julia set only: X value determining the 4D shape. +# Range roughly -2 to 2. +mgfractal_julia_x (Mapgen fractal julia x) float 0.33 + +# Julia set only: Y value determining the 4D shape. +# Range roughly -2 to 2. +mgfractal_julia_y (Mapgen fractal julia y) float 0.33 + +# Julia set only: Z value determining the 4D shape. +# Range roughly -2 to 2. +mgfractal_julia_z (Mapgen fractal julia z) float 0.33 + +# Julia set only: W value determining the 4D shape. +# Range roughly -2 to 2. +mgfractal_julia_w (Mapgen fractal julia w) float 0.33 + +mgfractal_np_seabed (Mapgen fractal seabed noise parameters) noise_params -14, 9, (600, 600, 600), 41900, 5, 0.6, 2.0 +mgfractal_np_filler_depth (Mapgen fractal filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0 +mgfractal_np_cave1 (Mapgen fractal cave1 noise parameters) noise_params 0, 12, (128, 128, 128), 52534, 4, 0.5, 2.0 +mgfractal_np_cave2 (Mapgen fractal cave2 noise parameters) noise_params 0, 12, (128, 128, 128), 10325, 4, 0.5, 2.0 + +[*Security] + +# Prevent mods from doing insecure things like running shell commands. +secure.enable_security (Enable mod security) bool false + +# Comma-separated list of trusted mods that are allowed to access insecure +# functions even when mod security is on (via request_insecure_environment()). +secure.trusted_mods (Trusted mods) string + +[Client and Server] + +# Name of the player. +# When running a server, clients connecting with this name are admins. +# When starting from the main menu, this is overridden. +name (Player name) string + +# Set the language. Leave empty to use the system language. +# A restart is required after changing this. +language (Language) enum ,be,cs,da,de,eo,es,et,fr,hu,id,it,ja,jbo,ko,ky,lt,nb,nl,pl,pt,pt_BR,ro,ru,tr,uk,zh_CN,zh_TW + +# Level of logging to be written to debug.txt: +# - (no logging) +# - none (messages with no level) +# - error +# - warning +# - action +# - info +# - verbose +debug_log_level (Debug log level) enum action ,warning,action,info,verbose + +# IPv6 support. +enable_ipv6 (IPv6) bool true + +[*Advanced] + +# Default timeout for cURL, stated in milliseconds. +# Only has an effect if compiled with cURL. +curl_timeout (cURL timeout) int 5000 + +# Limits number of parallel HTTP requests. Affects: +# - Media fetch if server uses remote_media setting. +# - Serverlist download and server announcement. +# - Downloads performed by main menu (e.g. mod manager). +# Only has an effect if compiled with cURL. +curl_parallel_limit (cURL parallel limit) int 8 + +# Maximum time in ms a file download (e.g. a mod download) may take. +curl_file_download_timeout (cURL file download timeout) int 300000 + +# Makes DirectX work with LuaJIT. Disable if it causes troubles. +high_precision_fpu (High-precision FPU) bool true + +# Replaces the default main menu with a custom one. +main_menu_script (Main menu script) string + +main_menu_game_mgr (Main menu game manager) int 0 + +main_menu_mod_mgr (Main menu mod manager) int 1 + +modstore_download_url (Modstore download URL) string https://forum.minetest.net/media/ + +modstore_listmods_url (Modstore mods list URL) string https://forum.minetest.net/mmdb/mods/ + +modstore_details_url (Modstore details URL) string https://forum.minetest.net/mmdb/mod/*/ diff --git a/client/serverlist/.gitignore b/client/serverlist/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/client/serverlist/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/client/shaders/minimap_shader/opengl_fragment.glsl b/client/shaders/minimap_shader/opengl_fragment.glsl new file mode 100644 index 000000000..fa4f9cb1a --- /dev/null +++ b/client/shaders/minimap_shader/opengl_fragment.glsl @@ -0,0 +1,32 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform vec3 yawVec; + +void main (void) +{ + vec2 uv = gl_TexCoord[0].st; + + //texture sampling rate + const float step = 1.0 / 256.0; + float tl = texture2D(normalTexture, vec2(uv.x - step, uv.y + step)).r; + float t = texture2D(normalTexture, vec2(uv.x - step, uv.y - step)).r; + float tr = texture2D(normalTexture, vec2(uv.x + step, uv.y + step)).r; + float r = texture2D(normalTexture, vec2(uv.x + step, uv.y)).r; + float br = texture2D(normalTexture, vec2(uv.x + step, uv.y - step)).r; + float b = texture2D(normalTexture, vec2(uv.x, uv.y - step)).r; + float bl = texture2D(normalTexture, vec2(uv.x - step, uv.y - step)).r; + float l = texture2D(normalTexture, vec2(uv.x - step, uv.y)).r; + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + vec4 bump = vec4 (normalize(vec3 (dX, dY, 0.1)),1.0); + float height = 2.0 * texture2D(normalTexture, vec2(uv.x, uv.y)).r - 1.0; + vec4 base = texture2D(baseTexture, uv).rgba; + vec3 L = normalize(vec3(0.0, 0.75, 1.0)); + float specular = pow(clamp(dot(reflect(L, bump.xyz), yawVec), 0.0, 1.0), 1.0); + float diffuse = dot(yawVec, bump.xyz); + + vec3 color = (1.1 * diffuse + 0.05 * height + 0.5 * specular) * base.rgb; + vec4 col = vec4(color.rgb, base.a); + col *= gl_Color; + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/minimap_shader/opengl_vertex.glsl b/client/shaders/minimap_shader/opengl_vertex.glsl new file mode 100644 index 000000000..06df5a3cf --- /dev/null +++ b/client/shaders/minimap_shader/opengl_vertex.glsl @@ -0,0 +1,11 @@ +uniform mat4 mWorldViewProj; +uniform mat4 mInvWorld; +uniform mat4 mTransWorld; +uniform mat4 mWorld; + +void main(void) +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = mWorldViewProj * gl_Vertex; + gl_FrontColor = gl_BackColor = gl_Color; +} diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl new file mode 100644 index 000000000..424d32177 --- /dev/null +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -0,0 +1,167 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D textureFlags; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; +varying float area_enable_parallax; + +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; + +void get_texture_flags() +{ + vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); + if (flags.r > 0.5) { + normalTexturePresent = true; + } +} + +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); + return bump; +} + +float find_intersection(vec2 dp, vec2 ds) +{ + const float depth_step = 1.0 / 24.0; + float depth = 1.0; + for (int i = 0 ; i < 24 ; i++) { + float h = texture2D(normalTexture, dp + ds * depth).a; + if (h >= depth) + break; + depth -= depth_step; + } + return depth; +} + +float find_intersectionRGB(vec2 dp, vec2 ds) +{ + const float depth_step = 1.0 / 24.0; + float depth = 1.0; + for (int i = 0 ; i < 24 ; i++) { + float h = get_rgb_height(dp + ds * depth); + if (h >= depth) + break; + depth -= depth_step; + } + return depth; +} + +void main(void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + get_texture_flags(); + +#ifdef ENABLE_PARALLAX_OCCLUSION + vec2 eyeRay = vec2 (tsEyeVec.x, -tsEyeVec.y); + const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; + const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; + +#if PARALLAX_OCCLUSION_MODE == 0 + // Parallax occlusion with slope information + if (normalTexturePresent && area_enable_parallax > 0.0) { + for (int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { + vec4 normal = texture2D(normalTexture, uv.xy); + float h = normal.a * scale - bias; + uv += h * normal.z * eyeRay; + } +#endif + +#if PARALLAX_OCCLUSION_MODE == 1 + // Relief mapping + if (normalTexturePresent && area_enable_parallax > 0.0) { + vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; + float dist = find_intersection(uv, ds); + uv += dist * ds; +#endif + } else if (GENERATE_NORMALMAPS == 1 && area_enable_parallax > 0.0) { + vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; + float dist = find_intersectionRGB(uv, ds); + uv += dist * ds; + } +#endif + +#if USE_NORMALMAPS == 1 + if (normalTexturePresent) { + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + + if (GENERATE_NORMALMAPS == 1 && normalTexturePresent == 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; + } + + 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), 1.0); + float diffuse = dot(-E,bump.xyz); + color = (diffuse + 0.1 * 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 +} diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl new file mode 100644 index 000000000..91536ba10 --- /dev/null +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -0,0 +1,147 @@ +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; +varying float area_enable_parallax; +varying float disp; + +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; + //TODO: make offset depending on view angle and parallax uv displacement + //thats for textures that doesnt align vertically, like dirt with grass + //gl_TexCoord[0].y += 0.008; + + //Allow parallax/relief mapping only for certain kind of nodes + //Variable is also used to control area of the effect +#if (DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) + area_enable_parallax = 1.0; +#else + area_enable_parallax = 0.0; +#endif + + +#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS) + vec4 pos2 = mWorld * gl_Vertex; + float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002; + disp = (smoothTriangleWave(animationTimer * 31.0 + tOffset) + + smoothTriangleWave(animationTimer * 29.0 + tOffset) + + smoothTriangleWave(animationTimer * 13.0 + tOffset)) - 0.9; +#endif + + +#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER + vec4 pos = gl_Vertex; + pos.y -= 2.0; + float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH); + pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT; + gl_Position = mWorldViewProj * pos; +#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES + vec4 pos = gl_Vertex; + pos.x += disp * 0.1; + pos.y += disp * 0.1; + pos.z += disp; + gl_Position = mWorldViewProj * pos; +#elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS + vec4 pos = gl_Vertex; + if (gl_TexCoord[0].y < 0.05) { + pos.z += disp; + } + gl_Position = mWorldViewProj * pos; +#else + gl_Position = mWorldViewProj * gl_Vertex; +#endif + + + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + + // Don't generate heightmaps when too far from the eye + float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); + if (dist > 150.0) { + area_enable_parallax = 0.0; + } + + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); + + vec3 normal, tangent, binormal; + normal = normalize(gl_NormalMatrix * gl_Normal); + tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz); + binormal = normalize(gl_NormalMatrix * gl_MultiTexCoord2.xyz); + + vec3 v; + + lightVec = sunPosition - worldPosition; + v.x = dot(lightVec, tangent); + v.y = dot(lightVec, binormal); + v.z = dot(lightVec, normal); + tsLightVec = normalize (v); + + eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; + v.x = dot(eyeVec, tangent); + v.y = dot(eyeVec, binormal); + v.z = dot(eyeVec, normal); + tsEyeVec = normalize (v); + + 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) / 23.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; + + color.a = gl_Color.a; + gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0); +} diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl new file mode 100644 index 000000000..75751e243 --- /dev/null +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -0,0 +1,137 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D textureFlags; + +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; +bool texTileableHorizontal = false; +bool texTileableVertical = false; +bool texSeamless = false; + +const float e = 2.718281828459; +const float BS = 10.0; + +void get_texture_flags() +{ + vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); + if (flags.r > 0.5) { + normalTexturePresent = true; + } + if (flags.g > 0.5) { + texTileableHorizontal = true; + } + if (flags.b > 0.5) { + texTileableVertical = true; + } + if (texTileableHorizontal && texTileableVertical) { + texSeamless = true; + } +} + +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; + get_texture_flags(); + +#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 + + if (GENERATE_NORMALMAPS == 1 && 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; + } + +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); + /* Mathematic optimization + * Original: color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; + * This optimization save 2 multiplications (orig: 4 multiplications + 3 additions + * end: 2 multiplications + 3 additions) + */ + color = (0.05 + diffuse + 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 +} diff --git a/client/shaders/water_surface_shader/opengl_vertex.glsl b/client/shaders/water_surface_shader/opengl_vertex.glsl new file mode 100644 index 000000000..7ae517d8a --- /dev/null +++ b/client/shaders/water_surface_shader/opengl_vertex.glsl @@ -0,0 +1,144 @@ +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; + + float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH); + + pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 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; + /* + * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition) + * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication) + * And bufferize calcul to a float + */ + float pos2XpZ = pos2.x + pos2.z; + pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4; + pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2; + pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -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) { + /* + * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition) + * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication) + * And bufferize calcul to a float + */ + float pos2XpZ = pos2.x + pos2.z; + pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8; + pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -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); + if (gl_Normal.x > 0.5) { + // 1.0, 0.0, 0.0 + 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 + 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 + 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 + 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 + 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 + 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) / 23.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; + + color.a = gl_Color.a; + gl_FrontColor = gl_BackColor = clamp(color,0.0,1.0); +} diff --git a/client/shaders/wielded_shader/opengl_fragment.glsl b/client/shaders/wielded_shader/opengl_fragment.glsl new file mode 100644 index 000000000..75dd1b674 --- /dev/null +++ b/client/shaders/wielded_shader/opengl_fragment.glsl @@ -0,0 +1,114 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D textureFlags; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 lightVec; + +bool normalTexturePresent = false; +bool texTileableHorizontal = false; +bool texTileableVertical = false; +bool texSeamless = false; + +const float e = 2.718281828459; +const float BS = 10.0; + +void get_texture_flags() +{ + vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); + if (flags.r > 0.5) { + normalTexturePresent = true; + } + if (flags.g > 0.5) { + texTileableHorizontal = true; + } + if (flags.b > 0.5) { + texTileableVertical = true; + } + if (texTileableHorizontal && texTileableVertical) { + texSeamless = true; + } +} + +float intensity(vec3 color) +{ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height(vec2 uv) +{ + if (texSeamless) { + return intensity(texture2D(baseTexture, uv).rgb); + } else { + return intensity(texture2D(baseTexture, clamp(uv, 0.0, 0.999)).rgb); + } +} + +vec4 get_normal_map(vec2 uv) +{ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 - 1.0); + return bump; +} + +void main(void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + get_texture_flags(); + +#if USE_NORMALMAPS == 1 + if (normalTexturePresent) { + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + + if (GENERATE_NORMALMAPS == 1 && normalTexturePresent == 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; + } + + 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), 1.0); + float diffuse = dot(-E,bump.xyz); + color = (diffuse + 0.1 * specular) * base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + 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); +} diff --git a/client/shaders/wielded_shader/opengl_vertex.glsl b/client/shaders/wielded_shader/opengl_vertex.glsl new file mode 100644 index 000000000..a2ab9fa5f --- /dev/null +++ b/client/shaders/wielded_shader/opengl_vertex.glsl @@ -0,0 +1,35 @@ +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; + +void main(void) +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = mWorldViewProj * gl_Vertex; + + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); + + lightVec = sunPosition - worldPosition; + eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; + + gl_FrontColor = gl_BackColor = gl_Color; +} diff --git a/cmake/Modules/FindCURL.cmake b/cmake/Modules/FindCURL.cmake new file mode 100644 index 000000000..2ec866ef9 --- /dev/null +++ b/cmake/Modules/FindCURL.cmake @@ -0,0 +1,19 @@ +mark_as_advanced(CURL_LIBRARY CURL_INCLUDE_DIR) + +find_library(CURL_LIBRARY NAMES curl) +find_path(CURL_INCLUDE_DIR NAMES curl/curl.h) + +set(CURL_REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR) + +if(WIN32) + find_file(CURL_DLL NAMES libcurl-4.dll + PATHS + "C:/Windows/System32" + DOC "Path to the cURL DLL (for installation)") + mark_as_advanced(CURL_DLL) + set(CURL_REQUIRED_VARS ${CURL_REQUIRED_VARS} CURL_DLL) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CURL DEFAULT_MSG ${CURL_REQUIRED_VARS}) + diff --git a/cmake/Modules/FindGMP.cmake b/cmake/Modules/FindGMP.cmake new file mode 100644 index 000000000..bb48289c5 --- /dev/null +++ b/cmake/Modules/FindGMP.cmake @@ -0,0 +1,28 @@ + +option(ENABLE_SYSTEM_GMP "Use GMP from system" TRUE) +mark_as_advanced(GMP_LIBRARY GMP_INCLUDE_DIR) +set(USE_SYSTEM_GMP FALSE) + +if(ENABLE_SYSTEM_GMP) + find_library(GMP_LIBRARY NAMES libgmp.so) + find_path(GMP_INCLUDE_DIR NAMES gmp.h) + + if(GMP_LIBRARY AND GMP_INCLUDE_DIR) + message (STATUS "Using GMP provided by system.") + set(USE_SYSTEM_GMP TRUE) + else() + message (STATUS "Detecting GMP from system failed.") + endif() +else() + message (STATUS "Detecting GMP from system disabled! (ENABLE_SYSTEM_GMP=0)") +endif() + +if(NOT USE_SYSTEM_GMP) + message(STATUS "Using bundled mini-gmp library.") + set(GMP_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/gmp) + set(GMP_LIBRARY gmp) + add_subdirectory(gmp) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GMP DEFAULT_MSG GMP_LIBRARY GMP_INCLUDE_DIR) diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake new file mode 100644 index 000000000..cb1ce7b91 --- /dev/null +++ b/cmake/Modules/FindGettextLib.cmake @@ -0,0 +1,78 @@ + +set(CUSTOM_GETTEXT_PATH "${PROJECT_SOURCE_DIR}/../../gettext" + CACHE FILEPATH "path to custom gettext") + +find_path(GETTEXT_INCLUDE_DIR + NAMES libintl.h + PATHS "${CUSTOM_GETTEXT_PATH}/include" + DOC "GetText include directory") + +find_program(GETTEXT_MSGFMT + NAMES msgfmt + PATHS "${CUSTOM_GETTEXT_PATH}/bin" + DOC "Path to msgfmt") + +set(GETTEXT_REQUIRED_VARS GETTEXT_INCLUDE_DIR GETTEXT_MSGFMT) + +if(APPLE) + find_library(GETTEXT_LIBRARY + NAMES libintl.a + PATHS "${CUSTOM_GETTEXT_PATH}/lib" + DOC "GetText library") + + find_library(ICONV_LIBRARY + NAMES libiconv.dylib + PATHS "/usr/lib" + DOC "IConv library") + set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_LIBRARY ICONV_LIBRARY) +endif(APPLE) + +# Modern Linux, as well as OSX, does not require special linking because +# GetText is part of glibc. +# TODO: check the requirements on other BSDs and older Linux +if(WIN32) + if(MSVC) + set(GETTEXT_LIB_NAMES + libintl.lib intl.lib libintl3.lib intl3.lib) + else() + set(GETTEXT_LIB_NAMES + libintl.dll.a intl.dll.a libintl3.dll.a intl3.dll.a) + endif() + find_library(GETTEXT_LIBRARY + NAMES ${GETTEXT_LIB_NAMES} + PATHS "${CUSTOM_GETTEXT_PATH}/lib" + DOC "GetText library") + find_file(GETTEXT_DLL + NAMES libintl.dll intl.dll libintl3.dll intl3.dll + PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib" + DOC "gettext *intl*.dll") + find_file(GETTEXT_ICONV_DLL + NAMES libiconv2.dll + PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib" + DOC "gettext *iconv*.lib") + set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_DLL GETTEXT_ICONV_DLL) +endif(WIN32) + + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GetText DEFAULT_MSG ${GETTEXT_REQUIRED_VARS}) + + +if(GETTEXT_FOUND) + # BSD variants require special linkage as they don't use glibc + if(${CMAKE_SYSTEM_NAME} MATCHES "BSD") + set(GETTEXT_LIBRARY "intl") + endif() + + set(GETTEXT_PO_PATH ${CMAKE_SOURCE_DIR}/po) + set(GETTEXT_MO_BUILD_PATH ${CMAKE_BINARY_DIR}/locale//LC_MESSAGES) + set(GETTEXT_MO_DEST_PATH ${LOCALEDIR}//LC_MESSAGES) + file(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*") + list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES minetest.pot) + list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES timestamp) + macro(SET_MO_PATHS _buildvar _destvar _locale) + string(REPLACE "" ${_locale} ${_buildvar} ${GETTEXT_MO_BUILD_PATH}) + string(REPLACE "" ${_locale} ${_destvar} ${GETTEXT_MO_DEST_PATH}) + endmacro() +endif() + diff --git a/cmake/Modules/FindIrrlicht.cmake b/cmake/Modules/FindIrrlicht.cmake new file mode 100644 index 000000000..8dda15722 --- /dev/null +++ b/cmake/Modules/FindIrrlicht.cmake @@ -0,0 +1,71 @@ + +mark_as_advanced(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL) +set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)") + + +# Find include directory + +if(NOT IRRLICHT_SOURCE_DIR STREQUAL "") + set(IRRLICHT_SOURCE_DIR_INCLUDE + "${IRRLICHT_SOURCE_DIR}/include" + ) + + set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a Irrlicht Irrlicht.lib) + + if(WIN32) + if(MSVC) + set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-visualstudio") + set(IRRLICHT_LIBRARY_NAMES Irrlicht.lib) + else() + set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-gcc") + set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a libIrrlicht.dll.a) + endif() + else() + set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Linux") + set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a) + endif() + + find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h + PATHS + ${IRRLICHT_SOURCE_DIR_INCLUDE} + NO_DEFAULT_PATH + ) + + find_library(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES} + PATHS + ${IRRLICHT_SOURCE_DIR_LIBS} + NO_DEFAULT_PATH + ) + +else() + find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h + PATHS + /usr/local/include/irrlicht + /usr/include/irrlicht + ) + + find_library(IRRLICHT_LIBRARY NAMES libIrrlicht.so libIrrlicht.a Irrlicht + PATHS + /usr/local/lib + /usr/lib + ) +endif() + + +# On Windows, find the DLL for installation +if(WIN32) + if(MSVC) + set(IRRLICHT_COMPILER "VisualStudio") + else() + set(IRRLICHT_COMPILER "gcc") + endif() + find_file(IRRLICHT_DLL NAMES Irrlicht.dll + PATHS + "${IRRLICHT_SOURCE_DIR}/bin/Win32-${IRRLICHT_COMPILER}" + DOC "Path of the Irrlicht dll (for installation)" + ) +endif(WIN32) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Irrlicht DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR) + diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake new file mode 100644 index 000000000..1558b0fcf --- /dev/null +++ b/cmake/Modules/FindJson.cmake @@ -0,0 +1,27 @@ +# Look for JSONCPP if asked to. +# We use a bundled version by default because some distros ship versions of +# JSONCPP that cause segfaults and other memory errors when we link with them. +# See https://github.com/minetest/minetest/issues/1793 + +mark_as_advanced(JSON_LIBRARY JSON_INCLUDE_DIR) +option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause segfaults and other memory errors!" FALSE) + +if(ENABLE_SYSTEM_JSONCPP) + find_library(JSON_LIBRARY NAMES jsoncpp) + find_path(JSON_INCLUDE_DIR json/features.h PATH_SUFFIXES jsoncpp) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) + + if(JSONCPP_FOUND) + message(STATUS "Using system JSONCPP library.") + endif() +endif() + +if(NOT JSONCPP_FOUND) + message(STATUS "Using bundled JSONCPP library.") + set(JSON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/json) + set(JSON_LIBRARY jsoncpp) + add_subdirectory(json) +endif() + diff --git a/cmake/Modules/FindLua.cmake b/cmake/Modules/FindLua.cmake new file mode 100644 index 000000000..479dfcf41 --- /dev/null +++ b/cmake/Modules/FindLua.cmake @@ -0,0 +1,25 @@ + +option(ENABLE_LUAJIT "Enable LuaJIT support" TRUE) +mark_as_advanced(LUA_LIBRARY LUA_INCLUDE_DIR) +set(USE_LUAJIT FALSE) + +if(ENABLE_LUAJIT) + find_library(LUA_LIBRARY luajit + NAMES luajit-5.1) + find_path(LUA_INCLUDE_DIR luajit.h + NAMES luajit.h + PATH_SUFFIXES luajit-2.0) + if(LUA_LIBRARY AND LUA_INCLUDE_DIR) + set(USE_LUAJIT TRUE) + endif() +else() + message (STATUS "LuaJIT detection disabled! (ENABLE_LUAJIT=0)") +endif() + +if(NOT USE_LUAJIT) + message(STATUS "LuaJIT not found, using bundled Lua.") + set(LUA_LIBRARY "lua") + set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src") + add_subdirectory(lua) +endif() + diff --git a/cmake/Modules/FindNcursesw.cmake b/cmake/Modules/FindNcursesw.cmake new file mode 100644 index 000000000..dcb7cdda8 --- /dev/null +++ b/cmake/Modules/FindNcursesw.cmake @@ -0,0 +1,189 @@ +#.rst: +# FindNcursesw +# ------------ +# +# Find the ncursesw (wide ncurses) include file and library. +# +# Based on FindCurses.cmake which comes with CMake. +# +# Checks for ncursesw first. If not found, it then executes the +# regular old FindCurses.cmake to look for for ncurses (or curses). +# +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables: +# +# ``CURSES_FOUND`` +# True if curses is found. +# ``NCURSESW_FOUND`` +# True if ncursesw is found. +# ``CURSES_INCLUDE_DIRS`` +# The include directories needed to use Curses. +# ``CURSES_LIBRARIES`` +# The libraries needed to use Curses. +# ``CURSES_HAVE_CURSES_H`` +# True if curses.h is available. +# ``CURSES_HAVE_NCURSES_H`` +# True if ncurses.h is available. +# ``CURSES_HAVE_NCURSES_NCURSES_H`` +# True if ``ncurses/ncurses.h`` is available. +# ``CURSES_HAVE_NCURSES_CURSES_H`` +# True if ``ncurses/curses.h`` is available. +# ``CURSES_HAVE_NCURSESW_NCURSES_H`` +# True if ``ncursesw/ncurses.h`` is available. +# ``CURSES_HAVE_NCURSESW_CURSES_H`` +# True if ``ncursesw/curses.h`` is available. +# +# Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the +# ``find_package(Ncursesw)`` call if NCurses functionality is required. +# +#============================================================================= +# Copyright 2001-2014 Kitware, Inc. +# modifications: Copyright 2015 kahrl +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the names of Kitware, Inc., the Insight Software Consortium, +# nor the names of their contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# ------------------------------------------------------------------------------ +# +# The above copyright and license notice applies to distributions of +# CMake in source and binary form. Some source files contain additional +# notices of original copyright by their contributors; see each source +# for details. Third-party software packages supplied with CMake under +# compatible licenses provide their own copyright notices documented in +# corresponding subdirectories. +# +# ------------------------------------------------------------------------------ +# +# CMake was initially developed by Kitware with the following sponsorship: +# +# * National Library of Medicine at the National Institutes of Health +# as part of the Insight Segmentation and Registration Toolkit (ITK). +# +# * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel +# Visualization Initiative. +# +# * National Alliance for Medical Image Computing (NAMIC) is funded by the +# National Institutes of Health through the NIH Roadmap for Medical Research, +# Grant U54 EB005149. +# +# * Kitware, Inc. +#============================================================================= + +include(CheckLibraryExists) + +find_library(CURSES_NCURSESW_LIBRARY NAMES ncursesw + DOC "Path to libncursesw.so or .lib or .a") + +set(CURSES_USE_NCURSES FALSE) +set(CURSES_USE_NCURSESW FALSE) + +if(CURSES_NCURSESW_LIBRARY) + set(CURSES_USE_NCURSES TRUE) + set(CURSES_USE_NCURSESW TRUE) +endif() + +if(CURSES_USE_NCURSESW) + get_filename_component(_cursesLibDir "${CURSES_NCURSESW_LIBRARY}" PATH) + get_filename_component(_cursesParentDir "${_cursesLibDir}" PATH) + + find_path(CURSES_INCLUDE_PATH + NAMES ncursesw/ncurses.h ncursesw/curses.h + HINTS "${_cursesParentDir}/include" + ) + + # Previous versions of FindCurses provided these values. + if(NOT DEFINED CURSES_LIBRARY) + set(CURSES_LIBRARY "${CURSES_NCURSESW_LIBRARY}") + endif() + + CHECK_LIBRARY_EXISTS("${CURSES_NCURSESW_LIBRARY}" + cbreak "" CURSES_NCURSESW_HAS_CBREAK) + if(NOT CURSES_NCURSESW_HAS_CBREAK) + find_library(CURSES_EXTRA_LIBRARY tinfo HINTS "${_cursesLibDir}" + DOC "Path to libtinfo.so or .lib or .a") + find_library(CURSES_EXTRA_LIBRARY tinfo ) + endif() + + # Report whether each possible header name exists in the include directory. + if(NOT DEFINED CURSES_HAVE_NCURSESW_NCURSES_H) + if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h") + set(CURSES_HAVE_NCURSESW_NCURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/ncurses.h") + else() + set(CURSES_HAVE_NCURSESW_NCURSES_H "CURSES_HAVE_NCURSESW_NCURSES_H-NOTFOUND") + endif() + endif() + if(NOT DEFINED CURSES_HAVE_NCURSESW_CURSES_H) + if(EXISTS "${CURSES_INCLUDE_PATH}/ncursesw/curses.h") + set(CURSES_HAVE_NCURSESW_CURSES_H "${CURSES_INCLUDE_PATH}/ncursesw/curses.h") + else() + set(CURSES_HAVE_NCURSESW_CURSES_H "CURSES_HAVE_NCURSESW_CURSES_H-NOTFOUND") + endif() + endif() + + find_library(CURSES_FORM_LIBRARY form HINTS "${_cursesLibDir}" + DOC "Path to libform.so or .lib or .a") + find_library(CURSES_FORM_LIBRARY form ) + + # Need to provide the *_LIBRARIES + set(CURSES_LIBRARIES ${CURSES_LIBRARY}) + + if(CURSES_EXTRA_LIBRARY) + set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_EXTRA_LIBRARY}) + endif() + + if(CURSES_FORM_LIBRARY) + set(CURSES_LIBRARIES ${CURSES_LIBRARIES} ${CURSES_FORM_LIBRARY}) + endif() + + # Provide the *_INCLUDE_DIRS result. + set(CURSES_INCLUDE_DIRS ${CURSES_INCLUDE_PATH}) + set(CURSES_INCLUDE_DIR ${CURSES_INCLUDE_PATH}) # compatibility + + # handle the QUIETLY and REQUIRED arguments and set CURSES_FOUND to TRUE if + # all listed variables are TRUE + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ncursesw DEFAULT_MSG + CURSES_LIBRARY CURSES_INCLUDE_PATH) + set(CURSES_FOUND ${NCURSESW_FOUND}) + +else() + find_package(Curses) + set(NCURSESW_FOUND FALSE) +endif() + +mark_as_advanced( + CURSES_INCLUDE_PATH + CURSES_CURSES_LIBRARY + CURSES_NCURSES_LIBRARY + CURSES_NCURSESW_LIBRARY + CURSES_EXTRA_LIBRARY + CURSES_FORM_LIBRARY + ) diff --git a/cmake/Modules/FindOpenGLES2.cmake b/cmake/Modules/FindOpenGLES2.cmake new file mode 100644 index 000000000..a8622f3b2 --- /dev/null +++ b/cmake/Modules/FindOpenGLES2.cmake @@ -0,0 +1,112 @@ +#------------------------------------------------------------------- +# 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, and Android are not tested! +# Linux tested and works + +if(WIN32) + if(CYGWIN) + find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h) + find_library(OPENGLES2_LIBRARY libGLESv2) + else() + if(BORLAND) + set(OPENGLES2_LIBRARY import32 CACHE STRING "OpenGL ES 2.x library for Win32") + else() + # TODO + # set(OPENGLES_LIBRARY ${SOURCE_DIR}/Dependencies/lib/release/libGLESv2.lib CACHE STRING "OpenGL ES 2.x library for win32" + endif() + endif() +elseif(APPLE) + create_search_paths(/Developer/Platforms) + findpkg_framework(OpenGLES2) + set(OPENGLES2_LIBRARY "-framework OpenGLES") +else() + find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h + PATHS /usr/openwin/share/include + /opt/graphics/OpenGL/include + /usr/X11R6/include + /usr/include + ) + + find_library(OPENGLES2_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 + PATHS /usr/openwin/share/include + /opt/graphics/OpenGL/include + /usr/X11R6/include + /usr/include + ) + + find_library(EGL_LIBRARY + NAMES EGL + PATHS /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib + /usr/X11R6/lib + /usr/lib + ) + + # On Unix OpenGL usually requires X11. + # It doesn't require X11 on OSX. + + if(OPENGLES2_LIBRARY) + if(NOT X11_FOUND) + include(FindX11) + endif() + if(X11_FOUND) + set(OPENGLES2_LIBRARIES ${X11_LIBRARIES}) + endif() + endif() + endif() +endif() + +set(OPENGLES2_LIBRARIES ${OPENGLES2_LIBRARIES} ${OPENGLES2_LIBRARY}) + +if(BUILD_ANDROID) + if(OPENGLES2_LIBRARY) + set(EGL_LIBRARIES) + set(OPENGLES2_FOUND TRUE) + endif() +else() + if(OPENGLES2_LIBRARY AND EGL_LIBRARY) + set(OPENGLES2_LIBRARIES ${OPENGLES2_LIBRARY} ${OPENGLES2_LIBRARIES}) + set(EGL_LIBRARIES ${EGL_LIBRARY} ${EGL_LIBRARIES}) + set(OPENGLES2_FOUND TRUE) + endif() +endif() + +mark_as_advanced( + OPENGLES2_INCLUDE_DIR + OPENGLES2_LIBRARY + EGL_INCLUDE_DIR + EGL_LIBRARY +) + +if(OPENGLES2_FOUND) + message(STATUS "Found system OpenGL ES 2 library: ${OPENGLES2_LIBRARIES}") +else() + set(OPENGLES2_LIBRARIES "") +endif() + diff --git a/cmake/Modules/FindSQLite3.cmake b/cmake/Modules/FindSQLite3.cmake new file mode 100644 index 000000000..b23553a80 --- /dev/null +++ b/cmake/Modules/FindSQLite3.cmake @@ -0,0 +1,9 @@ +mark_as_advanced(SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR) + +find_path(SQLITE3_INCLUDE_DIR sqlite3.h) + +find_library(SQLITE3_LIBRARY NAMES sqlite3) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SQLite3 DEFAULT_MSG SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR) + diff --git a/cmake/Modules/FindVorbis.cmake b/cmake/Modules/FindVorbis.cmake new file mode 100644 index 000000000..8f3813694 --- /dev/null +++ b/cmake/Modules/FindVorbis.cmake @@ -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) + diff --git a/cmake/Modules/GenerateVersion.cmake b/cmake/Modules/GenerateVersion.cmake new file mode 100644 index 000000000..ad0e38263 --- /dev/null +++ b/cmake/Modules/GenerateVersion.cmake @@ -0,0 +1,26 @@ +# Always run during 'make' + +if(DEVELOPMENT_BUILD) + execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" + OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + if(VERSION_GITHASH) + set(VERSION_GITHASH "${VERSION_STRING}-${VERSION_GITHASH}") + execute_process(COMMAND git diff-index --quiet HEAD + WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" + RESULT_VARIABLE IS_DIRTY) + if(IS_DIRTY) + set(VERSION_GITHASH "${VERSION_GITHASH}-dirty") + endif() + message(STATUS "*** Detected Git version ${VERSION_GITHASH} ***") + endif() +endif() +if(NOT VERSION_GITHASH) + set(VERSION_GITHASH "${VERSION_STRING}") +endif() + +configure_file( + ${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in + ${GENERATE_VERSION_BINARY_DIR}/cmake_config_githash.h) + diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in new file mode 100644 index 000000000..d35fbf65f --- /dev/null +++ b/doc/Doxyfile.in @@ -0,0 +1,34 @@ +DOXYFILE_ENCODING = UTF-8 + +PROJECT_NAME = "Minetest" +PROJECT_NUMBER = @VERSION_STRING@ + +STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@/src +JAVADOC_AUTOBRIEF = YES +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +SORT_MEMBERS_CTORS_1ST = YES +WARN_IF_UNDOCUMENTED = NO + +INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/ \ + @CMAKE_CURRENT_SOURCE_DIR@/src/client \ + @CMAKE_CURRENT_SOURCE_DIR@/src/network \ + @CMAKE_CURRENT_SOURCE_DIR@/src/util \ + @CMAKE_CURRENT_SOURCE_DIR@/src/script \ + @CMAKE_CURRENT_SOURCE_DIR@/src/script/common \ + @CMAKE_CURRENT_SOURCE_DIR@/src/script/cpp_api \ + @CMAKE_CURRENT_SOURCE_DIR@/src/script/lua_api +RECURSIVE = NO + +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +GENERATE_LATEX = NO +PAPER_TYPE = a4wide + +HAVE_DOT = @DOXYGEN_DOT_FOUND@ +CALL_GRAPH = YES +CALLER_GRAPH = YES +MAX_DOT_GRAPH_DEPTH = 3 +DOT_MULTI_TARGETS = YES + diff --git a/doc/README.android b/doc/README.android new file mode 100644 index 000000000..0b17647c0 --- /dev/null +++ b/doc/README.android @@ -0,0 +1,130 @@ +Minetest Android port +===================== +Date: 2014 06 28 + +Controls +-------- +The Android port doesn't support everything you can do on PC due to the +limited capabilities of common devices. What can be done is described +below: + +While you're playing the game normally (that is, no menu or inventory is +shown), the following controls are available: +* Look around: touch screen and slide finger +* double tap: place a node or use selected item +* long tap: dig node +* touch shown buttons: press button +* Buttons: +** left upper corner: chat +** right lower corner: jump +** right lower corner: crouch +** left lower corner: walk/step... + left up right + down +** left lower corner: display inventory + +When a menu or inventory is displayed: +* double tap outside menu area: close menu +* tap on an item stack: select that stack +* tap on an empty slot: if you selected a stack already, that stack is placed here +* drag and drop: touch stack and hold finger down, move the stack to another + slot, tap another finger while keeping first finger on screen + --> places a single item from dragged stack into current (first touched) slot + +Special settings +---------------- +There are some settings especially useful for Android users. Minetest's config +file can usually be found at /mnt/sdcard/Minetest. + +* gui_scaling: this is a user-specified scaling factor for the GUI- In case + main menu is too big or small on your device, try changing this + value. +* inventory_image_hack: if your inventory items are messed up, try setting + this to true + +Known issues +------------ +Not all issues are fixed by now: + +* Unable to exit from volume menu -- don't use the volume menu, use Android's + volume controls instead. +* 512 MB RAM seems to be inadequate -- this depends on the server you join. + Try to play on more lightweight servers. + +Versioning +---------- +Android version numbers are 4 digits instead of Minetest's 3 digits. The last +number of Android's version represents the Android internal version code. This +version code is strictly incremental. It's incremented for each official +Minetest Android build. + +E.g. prerelease Minetest Android builds have been 0.4.9.3, while the first +official version most likely will be 0.4.10.4 + +Requirements +------------ + +In order to build, your PC has to be set up to build Minetest in the usual +manner (see the regular Minetest documentation for how to get this done). +In addition to what is required for Minetest in general, you will need the +following software packages. The version number in parenthesis denotes the +version that was tested at the time this README was drafted; newer/older +versions may or may not work. + +* android SDK (x86_64 20131030) +* android NDK (r9d) +* wget (1.13.4) + +Additionally, you'll need to have an Internet connection available on the +build system, as the Android build will download some source packages. + +Build +----- + +Debug build: +* Enter "build/android" subdirectory +* Execute "make" +* Answer the questions about where SDK and NDK are located on your filesystem +* Wait for build to finish + +After the build is finished, the resulting apk can be fond in +build/android/bin/. It will be called Minetest-debug.apk + +Release build: + +* In order to make a release build you'll have to have a keystore setup to sign + the resulting apk package. How this is done is not part of this README. There + are different tutorials on the web explaining how to do it + - choose one yourself. + +* Once your keystore is setup, enter build/android subdirectory and create a new + file "ant.properties" there. Add following lines to that file: + + > key.store= + > key.alias=Minetest + +* Execute "make release" +* Enter your keystore as well as your Mintest key password once asked. Be + careful it's shown on console in clear text! +* The result can be found at "bin/Minetest-release.apk" + +Other things that may be nice to know +------------ +* The environment for Android development tools is saved within Android build + build folder. If you want direct access to it do: + + > make envpaths + > . and_env + + After you've done this you'll have your path and path variables set correct + to use adb and all other Android development tools + +* You can build a single dependency by calling make and the dependency's name, + e.g.: + + > make irrlicht + +* You can completely cleanup a dependency by calling make and the "clean" target, + e.g.: + + > make clean_irrlicht diff --git a/doc/fst_api.txt b/doc/fst_api.txt new file mode 100644 index 000000000..c8bcb1e91 --- /dev/null +++ b/doc/fst_api.txt @@ -0,0 +1,171 @@ +Formspec toolkit api 0.0.3 +========================== + +Formspec toolkit is a set of functions to create basic ui elements. + + +File: fst/ui.lua +---------------- + +ui.lua adds base ui interface to add additional components to. + +ui.add(component) -> returns name of added component +^ add component to ui +^ component: component to add + +ui.delete(component) -> true/false if a component was deleted or not +^ remove a component from ui +^ component: component to delete + +ui.set_default(name) +^ set component to show if not a single component is set visible +^ name: name of component to set as default + +ui.find_by_name(name) --> returns component or nil +^ find a component within ui +^ name: name of component to look for + +File: fst/tabview.lua +--------------------- + +tabview_create(name, size, tabheaderpos) --> returns tabview component +^ create a new tabview component +^ name: name of tabview (has to be unique per ui) +^ size: size of tabview + { + x, + y + } +^ tabheaderpos: upper left position of tabheader (relative to upper left fs corner) + { + x, + y + } + +Class reference tabview: + +methods: +- add_tab(tab) + ^ add a tab to this tabview + ^ tab: + { + name = "tabname", -- name of tab to create + caption = "tab caption", -- text to show for tab header + cbf_button_handler = function(tabview, fields, tabname, tabdata), -- callback for button events + --TODO cbf_events = function(tabview, event, tabname), -- callback for events + cbf_formspec = function(tabview, name, tabdata), -- get formspec + tabsize = + { + x, -- x width + y -- y height + }, -- special size for this tab (only relevant if no parent for tabview set) + on_change = function(type,old_tab,new_tab) -- called on tab chang, type is "ENTER" or "LEAVE" + } +- set_autosave_tab(value) + ^ tell tabview to automatically save current tabname as "tabview_name"_LAST + ^ value: true/false +- set_tab(name) + ^ set's tab to tab named "name", returns true/false on success + ^ name: name of tab to set +- set_global_event_handler(handler) + ^ set a handler to be called prior calling tab specific event handler + ^ handler: function(tabview,event) --> returns true to finish event processing false to continue +- set_global_button_handler(handler) + ^ set a handler to be called prior calling tab specific button handler + ^ handler: function(tabview,fields) --> returns true to finish button processing false to continue +- set_parent(parent) + ^ set parent to attach tabview to. TV's with parent are hidden if their parent + is hidden and they don't set their specified size. + ^ parent: component to attach to +- show() + ^ show tabview +- hide() + ^ hide tabview +- delete() + ^ delete tabview +- set_fixed_size(state) + ^ true/false set to fixed size, variable size + +File: fst/dialog.lua +--------------------- +Only one dialog can be shown at a time. If a dialog is closed it's parent is +gonna be activated and shown again. + +dialog_create(name, cbf_formspec, cbf_button_handler, cbf_events) +^ create a dialog component +^ name: name of component (unique per ui) +^ cbf_formspec: function to be called to get formspec + function(dialogdata) +^ cbf_button_handler: function to handle buttons + function(dialog, fields) +^ cbf_events: function to handle events + function(dialog, event) + +Class reference dialog: + +methods: +- set_parent(parent) + ^ set parent to attach a dialog to + ^ parent: component to attach to +- show() + ^ show dialog +- hide() + ^ hide dialog +- delete() + ^ delete dialog from ui + +members: +- data + ^ variable data attached to this dialog +- parent + ^ parent component to return to on exit + +File: fst/buttonbar.lua +----------------------- + +buttonbar_create(name, cbf_buttonhandler, pos, orientation, size) +^ create a buttonbar +^ name: name of component (unique per ui) +^ cbf_buttonhandler: function to be called on button pressed + function(buttonbar,buttonname,buttondata) +^ pos: position relative to upper left of current shown formspec + { + x, + y + } +^ orientation: "vertical" or "horizontal" +^ size: size of bar + { + width, + height + } + +Class reference buttonbar: + +methods: +- add_button(btn_id, caption, button_image) +- set_parent(parent) + ^ set parent to attach a buttonbar to + ^ parent: component to attach to +- show() + ^ show buttonbar +- hide() + ^ hide buttonbar +- delete() + ^ delete buttonbar from ui + +Developer doc: +============== +Skeleton for any component: +{ + name = "some id", -- unique id + type = "toplevel", -- type of component + -- toplevel: component can be show without additional components + -- addon: component is an addon to be shown along toplevel component + hide = function(this) end, -- called to hide the component + show = function(this) end, -- called to show the component + delete = function(this) end, -- called to delete component from ui + handle_buttons = function(this,fields) -- called upon button press + handle_events = function(this,event) -- called upon event reception + get_formspec = function(this) -- has to return formspec to be displayed +} diff --git a/doc/lgpl-2.1.txt b/doc/lgpl-2.1.txt new file mode 100644 index 000000000..4362b4915 --- /dev/null +++ b/doc/lgpl-2.1.txt @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library 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 library 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 library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/doc/lua_api.txt b/doc/lua_api.txt new file mode 100644 index 000000000..f82c3c2ac --- /dev/null +++ b/doc/lua_api.txt @@ -0,0 +1,3763 @@ +Minetest Lua Modding API Reference 0.4.13 +========================================= +* More information at +* Developer Wiki: + +Introduction +------------ +Content and functionality can be added to Minetest 0.4 by using Lua +scripting in run-time loaded mods. + +A mod is a self-contained bunch of scripts, textures and other related +things that is loaded by and interfaces with Minetest. + +Mods are contained and ran solely on the server side. Definitions and media +files are automatically transferred to the client. + +If you see a deficiency in the API, feel free to attempt to add the +functionality in the engine and API. You can send such improvements as +source code patches to . + +Programming in Lua +------------------ +If you have any difficulty in understanding this, please read +[Programming in Lua](http://www.lua.org/pil/). + +Startup +------- +Mods are loaded during server startup from the mod load paths by running +the `init.lua` scripts in a shared environment. + +Paths +----- +* `RUN_IN_PLACE=1` (Windows release, local build) + * `$path_user`: + * Linux: `` + * Windows: `` + * `$path_share` + * Linux: `` + * Windows: `` +* `RUN_IN_PLACE=0`: (Linux release) + * `$path_share` + * Linux: `/usr/share/minetest` + * Windows: `/minetest-0.4.x` + * `$path_user`: + * Linux: `$HOME/.minetest` + * Windows: `C:/users//AppData/minetest` (maybe) + +Games +----- +Games are looked up from: + +* `$path_share/games/gameid/` +* `$path_user/games/gameid/` + +where `gameid` is unique to each game. + +The game directory contains the file `game.conf`, which contains these fields: + + name = + +e.g. + + name = Minetest + +The game directory can contain the file minetest.conf, which will be used +to set default settings when running the particular game. +It can also contain a settingtypes.txt in the same format as the one in builtin. +This settingtypes.txt will be parsed by the menu and the settings will be displayed in the "Games" category in the settings tab. + +### Menu images + +Games can provide custom main menu images. They are put inside a `menu` directory inside the game directory. + +The images are named `$identifier.png`, where `$identifier` is one of `overlay,background,footer,header`. +If you want to specify multiple images for one identifier, add additional images named like `$identifier.$n.png`, with an ascending number $n starting with 1, +and a random image will be chosen from the provided ones. + + +Mod load path +------------- +Generic: + +* `$path_share/games/gameid/mods/` +* `$path_share/mods/` +* `$path_user/games/gameid/mods/` +* `$path_user/mods/` (User-installed mods) +* `$worldpath/worldmods/` + +In a run-in-place version (e.g. the distributed windows version): + +* `minetest-0.4.x/games/gameid/mods/` +* `minetest-0.4.x/mods/` (User-installed mods) +* `minetest-0.4.x/worlds/worldname/worldmods/` + +On an installed version on Linux: + +* `/usr/share/minetest/games/gameid/mods/` +* `$HOME/.minetest/mods/` (User-installed mods) +* `$HOME/.minetest/worlds/worldname/worldmods` + +Mod load path for world-specific games +-------------------------------------- +It is possible to include a game in a world; in this case, no mods or +games are loaded or checked from anywhere else. + +This is useful for e.g. adventure worlds. + +This happens if the following directory exists: + + $world/game/ + +Mods should be then be placed in: + + $world/game/mods/ + +Modpack support +---------------- +Mods can be put in a subdirectory, if the parent directory, which otherwise +should be a mod, contains a file named `modpack.txt`. This file shall be +empty, except for lines starting with `#`, which are comments. + +Mod directory structure +------------------------ + + mods + |-- modname + | |-- depends.txt + | |-- screenshot.png + | |-- description.txt + | |-- settingtypes.txt + | |-- init.lua + | |-- models + | |-- textures + | | |-- modname_stuff.png + | | `-- modname_something_else.png + | |-- sounds + | |-- media + | `-- + `-- another + + +### modname +The location of this directory can be fetched by using +`minetest.get_modpath(modname)`. + +### `depends.txt` +List of mods that have to be loaded before loading this mod. + +A single line contains a single modname. + +Optional dependencies can be defined by appending a question mark +to a single modname. Their meaning is that if the specified mod +is missing, that does not prevent this mod from being loaded. + +### `screenshot.png` +A screenshot shown in modmanager within mainmenu. + +### `description.txt` +A File containing description to be shown within mainmenu. + +### `settingtypes.txt` +A file in the same format as the one in builtin. It will be parsed by the +settings menu and the settings will be displayed in the "Mods" category. + +### `init.lua` +The main Lua script. Running this script should register everything it +wants to register. Subsequent execution depends on minetest calling the +registered callbacks. + +`minetest.setting_get(name)` and `minetest.setting_getbool(name)` can be used +to read custom or existing settings at load time, if necessary. + +### `models` +Models for entities or meshnodes. + +### `textures`, `sounds`, `media` +Media files (textures, sounds, whatever) that will be transferred to the +client and will be available for use by the mod. + +Naming convention for registered textual names +---------------------------------------------- +Registered names should generally be in this format: + + "modname:" ( can have characters a-zA-Z0-9_) + +This is to prevent conflicting names from corrupting maps and is +enforced by the mod loader. + +### Example +In the mod `experimental`, there is the ideal item/node/entity name `tnt`. +So the name should be `experimental:tnt`. + +Enforcement can be overridden by prefixing the name with `:`. This can +be used for overriding the registrations of some other mod. + +Example: Any mod can redefine `experimental:tnt` by using the name + + :experimental:tnt + +when registering it. +(also that mod is required to have `experimental` as a dependency) + +The `:` prefix can also be used for maintaining backwards compatibility. + +### Aliases +Aliases can be added by using `minetest.register_alias(name, convert_to)`. + +This will make Minetest to convert things called name to things called +`convert_to`. + +This can be used for maintaining backwards compatibility. + +This can be also used for setting quick access names for things, e.g. if +you have an item called `epiclylongmodname:stuff`, you could do + + minetest.register_alias("stuff", "epiclylongmodname:stuff") + +and be able to use `/giveme stuff`. + +Textures +-------- +Mods should generally prefix their textures with `modname_`, e.g. given +the mod name `foomod`, a texture could be called: + + foomod_foothing.png + +Textures are referred to by their complete name, or alternatively by +stripping out the file extension: + +* e.g. `foomod_foothing.png` +* e.g. `foomod_foothing` + +Texture modifiers +----------------- +There are various texture modifiers that can be used +to generate textures on-the-fly. + +### Texture overlaying +Textures can be overlaid by putting a `^` between them. + +Example: + + default_dirt.png^default_grass_side.png + +`default_grass_side.png` is overlayed over `default_dirt.png`. + +### Texture grouping +Textures can be grouped together by enclosing them in `(` and `)`. + +Example: `cobble.png^(thing1.png^thing2.png)` + +A texture for `thing1.png^thing2.png` is created and the resulting +texture is overlaid over `cobble.png`. + +### Advanced texture modifiers + +#### `[crack::

` +* `` = animation frame count +* `

` = current animation frame + +Draw a step of the crack animation on the texture. + +Example: + + default_cobble.png^[crack:10:1 + +#### `[combine:x:,=:,=` +* `` = width +* `` = height +* ``/`` = x positions +* ``/`` = y positions +* ``/`` = textures to combine + +Create a texture of size `` times `` and blit `` to (``,``) +and blit `` to (``,``). + +Example: + + [combine:16x32:0,0=default_cobble.png:0,16=default_wood.png + +#### `[brighten` +Brightens the texture. + +Example: + + tnt_tnt_side.png^[brighten + +#### `[noalpha` +Makes the texture completely opaque. + +Example: + + default_leaves.png^[noalpha + +#### `[makealpha:,,` +Convert one color to transparency. + +Example: + + default_cobble.png^[makealpha:128,128,128 + +#### `[transform` +* `` = transformation(s) to apply + +Rotates and/or flips the image. + +`` can be a number (between 0 and 7) or a transform name. +Rotations are counter-clockwise. + + 0 I identity + 1 R90 rotate by 90 degrees + 2 R180 rotate by 180 degrees + 3 R270 rotate by 270 degrees + 4 FX flip X + 5 FXR90 flip X then rotate by 90 degrees + 6 FY flip Y + 7 FYR90 flip Y then rotate by 90 degrees + +Example: + + default_stone.png^[transformFXR90 + +#### `[inventorycube{{{` +`^` is replaced by `&` in texture names. + +Create an inventory cube texture using the side textures. + +Example: + + [inventorycube{grass.png{dirt.png&grass_side.png{dirt.png&grass_side.png + +Creates an inventorycube with `grass.png`, `dirt.png^grass_side.png` and +`dirt.png^grass_side.png` textures + +#### `[lowpart::` +Blit the lower ``% part of `` on the texture. + +Example: + + base.png^[lowpart:25:overlay.png + +#### `[verticalframe::` +* `` = animation frame count +* `` = current animation frame + +Crops the texture to a frame of a vertical animation. + +Example: + + default_torch_animated.png^[verticalframe:16:8 + +#### `[mask:` +Apply a mask to the base image. + +The mask is applied using binary AND. + +#### `[colorize::` +Colorize the textures with the given color. +`` is specified as a `ColorString`. +`` is an int ranging from 0 to 255, and specifies how much of the +color to apply. If ommitted, the alpha will be used. + +Sounds +------ +Only Ogg Vorbis files are supported. + +For positional playing of sounds, only single-channel (mono) files are +supported. Otherwise OpenAL will play them non-positionally. + +Mods should generally prefix their sounds with `modname_`, e.g. given +the mod name "`foomod`", a sound could be called: + + foomod_foosound.ogg + +Sounds are referred to by their name with a dot, a single digit and the +file extension stripped out. When a sound is played, the actual sound file +is chosen randomly from the matching sounds. + +When playing the sound `foomod_foosound`, the sound is chosen randomly +from the available ones of the following files: + +* `foomod_foosound.ogg` +* `foomod_foosound.0.ogg` +* `foomod_foosound.1.ogg` +* (...) +* `foomod_foosound.9.ogg` + +Examples of sound parameter tables: + + -- Play location-less on all clients + { + gain = 1.0, -- default + } + -- Play location-less to a player + { + to_player = name, + gain = 1.0, -- default + } + -- Play in a location + { + pos = {x=1,y=2,z=3}, + gain = 1.0, -- default + max_hear_distance = 32, -- default, uses an euclidean metric + } + -- Play connected to an object, looped + { + object = , + gain = 1.0, -- default + max_hear_distance = 32, -- default, uses an euclidean metric + loop = true, -- only sounds connected to objects can be looped + } + +### `SimpleSoundSpec` +* e.g. `""` +* e.g. `"default_place_node"` +* e.g. `{}` +* e.g. `{name="default_place_node"}` +* e.g. `{name="default_place_node", gain=1.0}` + +Registered definitions of stuff +------------------------------- +Anything added using certain `minetest.register_*` functions get added to +the global `minetest.registered_*` tables. + +* `minetest.register_entity(name, prototype table)` + * added to `minetest.registered_entities[name]` + +* `minetest.register_node(name, node definition)` + * added to `minetest.registered_items[name]` + * added to `minetest.registered_nodes[name]` + +* `minetest.register_tool(name, item definition)` + * added to `minetest.registered_items[name]` + +* `minetest.register_craftitem(name, item definition)` + * added to `minetest.registered_items[name]` + +* `minetest.register_biome(biome definition)` + * returns an integer uniquely identifying the registered biome + * added to `minetest.registered_biome` with the key of `biome.name` + * if `biome.name` is nil, the key is the returned ID + +* `minetest.register_ore(ore definition)` + * returns an integer uniquely identifying the registered ore + * added to `minetest.registered_ores` with the key of `ore.name` + * if `ore.name` is nil, the key is the returned ID + +* `minetest.register_decoration(decoration definition)` + * returns an integer uniquely identifying the registered decoration + * added to `minetest.registered_decorations` with the key of `decoration.name` + * if `decoration.name` is nil, the key is the returned ID + +* `minetest.register_schematic(schematic definition)` + * returns an integer uniquely identifying the registered schematic + * added to `minetest.registered_schematic` with the key of `schematic.name` + * if `schematic.name` is nil, the key is the returned ID + * if the schematic is loaded from a file, schematic.name is set to the filename + * if the function is called when loading the mod, and schematic.name is a relative path, + * then the current mod path will be prepended to the schematic filename + +* `minetest.clear_registered_biomes()` + * clears all biomes currently registered + +* `minetest.clear_registered_ores()` + * clears all ores currently registered + +* `minetest.clear_registered_decorations()` + * clears all decorations currently registered + +* `minetest.clear_registered_schematics()` + * clears all schematics currently registered + +Note that in some cases you will stumble upon things that are not contained +in these tables (e.g. when a mod has been removed). Always check for +existence before trying to access the fields. + +Example: If you want to check the drawtype of a node, you could do: + + local function get_nodedef_field(nodename, fieldname) + if not minetest.registered_nodes[nodename] then + return nil + end + return minetest.registered_nodes[nodename][fieldname] + end + local drawtype = get_nodedef_field(nodename, "drawtype") + +Example: `minetest.get_item_group(name, group)` has been implemented as: + + function minetest.get_item_group(name, group) + if not minetest.registered_items[name] or not + minetest.registered_items[name].groups[group] then + return 0 + end + return minetest.registered_items[name].groups[group] + end + +Nodes +----- +Nodes are the bulk data of the world: cubes and other things that take the +space of a cube. Huge amounts of them are handled efficiently, but they +are quite static. + +The definition of a node is stored and can be accessed by name in + + minetest.registered_nodes[node.name] + +See "Registered definitions of stuff". + +Nodes are passed by value between Lua and the engine. +They are represented by a table: + + {name="name", param1=num, param2=num} + +`param1` and `param2` are 8-bit integers. The engine uses them for certain +automated functions. If you don't use these functions, you can use them to +store arbitrary values. + +The functions of `param1` and `param2` are determined by certain fields in the +node definition: + +`param1` is reserved for the engine when `paramtype != "none"`: + + paramtype = "light" + ^ The value stores light with and without sun in its upper and lower 4 bits + respectively. Allows light to propagate from or through the node with + light value falling by 1 per node. This is essential for a light source + node to spread its light. + +`param2` is reserved for the engine when any of these are used: + + liquidtype == "flowing" + ^ The level and some flags of the liquid is stored in param2 + drawtype == "flowingliquid" + ^ The drawn liquid level is read from param2 + drawtype == "torchlike" + drawtype == "signlike" + paramtype2 == "wallmounted" + ^ The rotation of the node is stored in param2. You can make this value + by using minetest.dir_to_wallmounted(). + paramtype2 == "facedir" + ^ The rotation of the node is stored in param2. Furnaces and chests are + rotated this way. Can be made by using minetest.dir_to_facedir(). + Values range 0 - 23 + facedir modulo 4 = axisdir + 0 = y+ 1 = z+ 2 = z- 3 = x+ 4 = x- 5 = y- + facedir's two less significant bits are rotation around the axis + paramtype2 == "leveled" + paramtype2 == "degrotate" + ^ The rotation of this node is stored in param2. Plants are rotated this way. + Values range 0 - 179. The value stored in param2 is multiplied by two to + get the actual rotation of the node. + collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + }, + ^ defines list of collision boxes for the node. If empty, collision boxes + will be the same as nodeboxes, in case of any other nodes will be full cube + as in the example above. + +Nodes can also contain extra data. See "Node Metadata". + +Node drawtypes +--------------- +There are a bunch of different looking node types. + +Look for examples in `games/minimal` or `games/minetest_game`. + +* `normal` +* `airlike` +* `liquid` +* `flowingliquid` +* `glasslike` +* `glasslike_framed` +* `glasslike_framed_optional` +* `allfaces` +* `allfaces_optional` +* `torchlike` +* `signlike` +* `plantlike` +* `firelike` +* `fencelike` +* `raillike` +* `nodebox` -- See below. (**Experimental!**) +* `mesh` -- use models for nodes + +`*_optional` drawtypes need less rendering time if deactivated (always client side). + +Node boxes +----------- +Node selection boxes are defined using "node boxes" + +The `nodebox` node drawtype allows defining visual of nodes consisting of +arbitrary number of boxes. It allows defining stuff like stairs. Only the +`fixed` and `leveled` box type is supported for these. + +Please note that this is still experimental, and may be incompatibly +changed in the future. + +A nodebox is defined as any of: + + { + -- A normal cube; the default in most things + type = "regular" + } + { + -- A fixed box (facedir param2 is used, if applicable) + type = "fixed", + fixed = box OR {box1, box2, ...} + } + { + -- A box like the selection box for torches + -- (wallmounted param2 is used, if applicable) + type = "wallmounted", + wall_top = box, + wall_bottom = box, + wall_side = box + } + +A `box` is defined as: + + {x1, y1, z1, x2, y2, z2} + +A box of a regular node would look like: + + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + +`type = "leveled"` is same as `type = "fixed"`, but `y2` will be automatically +set to level from `param2`. + + +Meshes +------ +If drawtype `mesh` is used, tiles should hold model materials textures. +Only static meshes are implemented. +For supported model formats see Irrlicht engine documentation. + + +Noise Parameters +---------------- +Noise Parameters, or commonly called "`NoiseParams`", define the properties of +perlin noise. + +### `offset` +Offset that the noise is translated by (i.e. added) after calculation. + +### `scale` +Factor that the noise is scaled by (i.e. multiplied) after calculation. + +### `spread` +Vector containing values by which each coordinate is divided by before calculation. +Higher spread values result in larger noise features. + +A value of `{x=250, y=250, z=250}` is common. + +### `seed` +Random seed for the noise. Add the world seed to a seed offset for world-unique noise. +In the case of `minetest.get_perlin()`, this value has the world seed automatically added. + +### `octaves` +Number of times the noise gradient is accumulated into the noise. + +Increase this number to increase the amount of detail in the resulting noise. + +A value of `6` is common. + +### `persistence` +Factor by which the effect of the noise gradient function changes with each successive octave. + +Values less than `1` make the details of successive octaves' noise diminish, while values +greater than `1` make successive octaves stronger. + +A value of `0.6` is common. + +### `lacunarity` +Factor by which the noise feature sizes change with each successive octave. + +A value of `2.0` is common. + +### `flags` +Leave this field unset for no special handling. + +Currently supported are `defaults`, `eased` and `absvalue`. + +#### `defaults` +Specify this if you would like to keep auto-selection of eased/not-eased while specifying +some other flags. + +#### `eased` +Maps noise gradient values onto a quintic S-curve before performing interpolation. +This results in smooth, rolling noise. Disable this (`noeased`) for sharp-looking noise. +If no flags are specified (or defaults is), 2D noise is eased and 3D noise is not eased. + +#### `absvalue` +Accumulates the absolute value of each noise gradient result. + +Noise parameters format example for 2D or 3D perlin noise or perlin noise maps: + np_terrain = { + offset = 0, + scale = 1, + spread = {x=500, y=500, z=500}, + seed = 571347, + octaves = 5, + persist = 0.63, + lacunarity = 2.0, + flags = "defaults, absvalue" + } + ^ A single noise parameter table can be used to get 2D or 3D noise, + when getting 2D noise spread.z is ignored. + + +Ore types +--------- +These tell in what manner the ore is generated. + +All default ores are of the uniformly-distributed scatter type. + +### `scatter` +Randomly chooses a location and generates a cluster of ore. + +If `noise_params` is specified, the ore will be placed if the 3D perlin noise at +that point is greater than the `noise_threshold`, giving the ability to create +a non-equal distribution of ore. + +### `sheet` +Creates a sheet of ore in a blob shape according to the 2D perlin noise +described by `noise_params` and `noise_threshold`. This is essentially an +improved version of the so-called "stratus" ore seen in some unofficial mods. + +This sheet consists of vertical columns of uniform randomly distributed height, +varying between the inclusive range `column_height_min` and `column_height_max`. +If `column_height_min` is not specified, this parameter defaults to 1. +If `column_height_max` is not specified, this parameter defaults to `clust_size` +for reverse compatibility. New code should prefer `column_height_max`. + +The `column_midpoint_factor` parameter controls the position of the column at which +ore eminates from. If 1, columns grow upward. If 0, columns grow downward. If 0.5, +columns grow equally starting from each direction. `column_midpoint_factor` is a +decimal number ranging in value from 0 to 1. If this parameter is not specified, +the default is 0.5. + +The ore parameters `clust_scarcity` and `clust_num_ores` are ignored for this ore type. + +### `puff` +Creates a sheet of ore in a cloud-like puff shape. + +As with the `sheet` ore type, the size and shape of puffs are described by +`noise_params` and `noise_threshold` and are placed at random vertical positions +within the currently generated chunk. + +The vertical top and bottom displacement of each puff are determined by the noise +parameters `np_puff_top` and `np_puff_bottom`, respectively. + + +### `blob` +Creates a deformed sphere of ore according to 3d perlin noise described by +`noise_params`. The maximum size of the blob is `clust_size`, and +`clust_scarcity` has the same meaning as with the `scatter` type. + +### `vein` +Creates veins of ore varying in density by according to the intersection of two +instances of 3d perlin noise with diffferent seeds, both described by +`noise_params`. `random_factor` varies the influence random chance has on +placement of an ore inside the vein, which is `1` by default. Note that +modifying this parameter may require adjusting `noise_threshhold`. +The parameters `clust_scarcity`, `clust_num_ores`, and `clust_size` are ignored +by this ore type. This ore type is difficult to control since it is sensitive +to small changes. The following is a decent set of parameters to work from: + + noise_params = { + offset = 0, + scale = 3, + spread = {x=200, y=200, z=200}, + seed = 5390, + octaves = 4, + persist = 0.5, + flags = "eased", + }, + noise_threshhold = 1.6 + +WARNING: Use this ore type *very* sparingly since it is ~200x more +computationally expensive than any other ore. + +Ore attributes +-------------- +See section "Flag Specifier Format". + +Currently supported flags: `absheight` + +### `absheight` +Also produce this same ore between the height range of `-y_max` and `-y_min`. + +Useful for having ore in sky realms without having to duplicate ore entries. + +### `puff_cliffs` +If set, puff ore generation will not taper down large differences in displacement +when approaching the edge of a puff. This flag has no effect for ore types other +than `puff`. + +### `puff_additive_composition` +By default, when noise described by `np_puff_top` or `np_puff_bottom` results in a +negative displacement, the sub-column at that point is not generated. With this +attribute set, puff ore generation will instead generate the absolute difference in +noise displacement values. This flag has no effect for ore types other than `puff`. + +Decoration types +---------------- +The varying types of decorations that can be placed. + +### `simple` +Creates a 1 times `H` times 1 column of a specified node (or a random node from +a list, if a decoration list is specified). Can specify a certain node it must +spawn next to, such as water or lava, for example. Can also generate a +decoration of random height between a specified lower and upper bound. +This type of decoration is intended for placement of grass, flowers, cacti, +papyri, waterlilies and so on. + +### `schematic` +Copies a box of `MapNodes` from a specified schematic file (or raw description). +Can specify a probability of a node randomly appearing when placed. +This decoration type is intended to be used for multi-node sized discrete +structures, such as trees, cave spikes, rocks, and so on. + + +Schematic specifier +-------------------- +A schematic specifier identifies a schematic by either a filename to a +Minetest Schematic file (`.mts`) or through raw data supplied through Lua, +in the form of a table. This table specifies the following fields: + +* The `size` field is a 3D vector containing the dimensions of the provided schematic. (required) +* The `yslice_prob` field is a table of {ypos, prob} which sets the `ypos`th vertical slice + of the schematic to have a `prob / 256 * 100` chance of occuring. (default: 255) +* The `data` field is a flat table of MapNode tables making up the schematic, + in the order of `[z [y [x]]]`. (required) + Each MapNode table contains: + * `name`: the name of the map node to place (required) + * `prob` (alias `param1`): the probability of this node being placed (default: 255) + * `param2`: the raw param2 value of the node being placed onto the map (default: 0) + * `force_place`: boolean representing if the node should forcibly overwrite any + previous contents (default: false) + +About probability values: +* A probability value of `0` or `1` means that node will never appear (0% chance). +* A probability value of `254` or `255` means the node will always appear (100% chance). +* If the probability value `p` is greater than `1`, then there is a + `(p / 256 * 100)` percent chance that node will appear when the schematic is + placed on the map. + + +Schematic attributes +-------------------- +See section "Flag Specifier Format". + +Currently supported flags: `place_center_x`, `place_center_y`, `place_center_z`, + `force_placement`. + +* `place_center_x`: Placement of this decoration is centered along the X axis. +* `place_center_y`: Placement of this decoration is centered along the Y axis. +* `place_center_z`: Placement of this decoration is centered along the Z axis. +* `force_placement`: Schematic nodes other than "ignore" will replace existing nodes. + + +HUD element types +----------------- +The position field is used for all element types. + +To account for differing resolutions, the position coordinates are the percentage +of the screen, ranging in value from `0` to `1`. + +The name field is not yet used, but should contain a description of what the +HUD element represents. The direction field is the direction in which something +is drawn. + +`0` draws from left to right, `1` draws from right to left, `2` draws from +top to bottom, and `3` draws from bottom to top. + +The `alignment` field specifies how the item will be aligned. It ranges from `-1` to `1`, +with `0` being the center, `-1` is moved to the left/up, and `1` is to the right/down. +Fractional values can be used. + +The `offset` field specifies a pixel offset from the position. Contrary to position, +the offset is not scaled to screen size. This allows for some precisely-positioned +items in the HUD. + +**Note**: `offset` _will_ adapt to screen DPI as well as user defined scaling factor! + +Below are the specific uses for fields in each type; fields not listed for that type are ignored. + +**Note**: Future revisions to the HUD API may be incompatible; the HUD API is still +in the experimental stages. + +### `image` +Displays an image on the HUD. + +* `scale`: The scale of the image, with 1 being the original texture size. + Only the X coordinate scale is used (positive values). + Negative values represent that percentage of the screen it + should take; e.g. `x=-100` means 100% (width). +* `text`: The name of the texture that is displayed. +* `alignment`: The alignment of the image. +* `offset`: offset in pixels from position. + +### `text` +Displays text on the HUD. + +* `scale`: Defines the bounding rectangle of the text. + A value such as `{x=100, y=100}` should work. +* `text`: The text to be displayed in the HUD element. +* `number`: An integer containing the RGB value of the color used to draw the text. + Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on. +* `alignment`: The alignment of the text. +* `offset`: offset in pixels from position. + +### `statbar` +Displays a horizontal bar made up of half-images. + +* `text`: The name of the texture that is used. +* `number`: The number of half-textures that are displayed. + If odd, will end with a vertically center-split texture. +* `direction` +* `offset`: offset in pixels from position. +* `size`: If used, will force full-image size to this value (override texture pack image size) + +### `inventory` +* `text`: The name of the inventory list to be displayed. +* `number`: Number of items in the inventory to be displayed. +* `item`: Position of item that is selected. +* `direction` + +### `waypoint` +Displays distance to selected world position. + +* `name`: The name of the waypoint. +* `text`: Distance suffix. Can be blank. +* `number:` An integer containing the RGB value of the color used to draw the text. +* `world_pos`: World position of the waypoint. + +Representations of simple things +-------------------------------- + +### Position/vector + + {x=num, y=num, z=num} + +For helper functions see "Vector helpers". + +### `pointed_thing` +* `{type="nothing"}` +* `{type="node", under=pos, above=pos}` +* `{type="object", ref=ObjectRef}` + +Flag Specifier Format +--------------------- +Flags using the standardized flag specifier format can be specified in either of +two ways, by string or table. + +The string format is a comma-delimited set of flag names; whitespace and +unrecognized flag fields are ignored. Specifying a flag in the string sets the +flag, and specifying a flag prefixed by the string `"no"` explicitly +clears the flag from whatever the default may be. + +In addition to the standard string flag format, the schematic flags field can +also be a table of flag names to boolean values representing whether or not the +flag is set. Additionally, if a field with the flag name prefixed with `"no"` +is present, mapped to a boolean of any value, the specified flag is unset. + +E.g. A flag field of value + + {place_center_x = true, place_center_y=false, place_center_z=true} + +is equivalent to + + {place_center_x = true, noplace_center_y=true, place_center_z=true} + +which is equivalent to + + "place_center_x, noplace_center_y, place_center_z" + +or even + + "place_center_x, place_center_z" + +since, by default, no schematic attributes are set. + +Items +----- + +### Item types +There are three kinds of items: nodes, tools and craftitems. + +* Node (`register_node`): A node from the world. +* Tool (`register_tool`): A tool/weapon that can dig and damage + things according to `tool_capabilities`. +* Craftitem (`register_craftitem`): A miscellaneous item. + +### Item formats +Items and item stacks can exist in three formats: Serializes, table format +and `ItemStack`. + +#### Serialized +This is called "stackstring" or "itemstring": + +* e.g. `'default:dirt 5'` +* e.g. `'default:pick_wood 21323'` +* e.g. `'default:apple'` + +#### Table format +Examples: + +5 dirt nodes: + + {name="default:dirt", count=5, wear=0, metadata=""} + +A wooden pick about 1/3 worn out: + + {name="default:pick_wood", count=1, wear=21323, metadata=""} + +An apple: + + {name="default:apple", count=1, wear=0, metadata=""} + +#### `ItemStack` +A native C++ format with many helper methods. Useful for converting +between formats. See the Class reference section for details. + +When an item must be passed to a function, it can usually be in any of +these formats. + + +Groups +------ +In a number of places, there is a group table. Groups define the +properties of a thing (item, node, armor of entity, capabilities of +tool) in such a way that the engine and other mods can can interact with +the thing without actually knowing what the thing is. + +### Usage +Groups are stored in a table, having the group names with keys and the +group ratings as values. For example: + + groups = {crumbly=3, soil=1} + -- ^ Default dirt + + groups = {crumbly=2, soil=1, level=2, outerspace=1} + -- ^ A more special dirt-kind of thing + +Groups always have a rating associated with them. If there is no +useful meaning for a rating for an enabled group, it shall be `1`. + +When not defined, the rating of a group defaults to `0`. Thus when you +read groups, you must interpret `nil` and `0` as the same value, `0`. + +You can read the rating of a group for an item or a node by using + + minetest.get_item_group(itemname, groupname) + +### Groups of items +Groups of items can define what kind of an item it is (e.g. wool). + +### Groups of nodes +In addition to the general item things, groups are used to define whether +a node is destroyable and how long it takes to destroy by a tool. + +### Groups of entities +For entities, groups are, as of now, used only for calculating damage. +The rating is the percentage of damage caused by tools with this damage group. +See "Entity damage mechanism". + + object.get_armor_groups() --> a group-rating table (e.g. {fleshy=100}) + object.set_armor_groups({fleshy=30, cracky=80}) + +### Groups of tools +Groups in tools define which groups of nodes and entities they are +effective towards. + +### Groups in crafting recipes +An example: Make meat soup from any meat, any water and any bowl: + + { + output = 'food:meat_soup_raw', + recipe = { + {'group:meat'}, + {'group:water'}, + {'group:bowl'}, + }, + -- preserve = {'group:bowl'}, -- Not implemented yet (TODO) + } + +Another example: Make red wool from white wool and red dye: + + { + type = 'shapeless', + output = 'wool:red', + recipe = {'wool:white', 'group:dye,basecolor_red'}, + } + +### Special groups +* `immortal`: Disables the group damage system for an entity +* `level`: Can be used to give an additional sense of progression in the game. + * A larger level will cause e.g. a weapon of a lower level make much less + damage, and get worn out much faster, or not be able to get drops + from destroyed nodes. + * `0` is something that is directly accessible at the start of gameplay + * There is no upper limit +* `dig_immediate`: (player can always pick up node without tool wear) + * `2`: node is removed without tool wear after 0.5 seconds or so + (rail, sign) + * `3`: node is removed without tool wear immediately (torch) +* `disable_jump`: Player (and possibly other things) cannot jump from node +* `fall_damage_add_percent`: damage speed = `speed * (1 + value/100)` +* `bouncy`: value is bounce speed in percent +* `falling_node`: if there is no walkable block under the node it will fall +* `attached_node`: if the node under it is not a walkable block the node will be + dropped as an item. If the node is wallmounted the wallmounted direction is + checked. +* `soil`: saplings will grow on nodes in this group +* `connect_to_raillike`: makes nodes of raillike drawtype with same group value + connect to each other + +### Known damage and digging time defining groups +* `crumbly`: dirt, sand +* `cracky`: tough but crackable stuff like stone. +* `snappy`: something that can be cut using fine tools; e.g. leaves, small + plants, wire, sheets of metal +* `choppy`: something that can be cut using force; e.g. trees, wooden planks +* `fleshy`: Living things like animals and the player. This could imply + some blood effects when hitting. +* `explody`: Especially prone to explosions +* `oddly_breakable_by_hand`: + Can be added to nodes that shouldn't logically be breakable by the + hand but are. Somewhat similar to `dig_immediate`, but times are more + like `{[1]=3.50,[2]=2.00,[3]=0.70}` and this does not override the + speed of a tool if the tool can dig at a faster speed than this + suggests for the hand. + +### Examples of custom groups +Item groups are often used for defining, well, _groups of items_. +* `meat`: any meat-kind of a thing (rating might define the size or healing + ability or be irrelevant -- it is not defined as of yet) +* `eatable`: anything that can be eaten. Rating might define HP gain in half + hearts. +* `flammable`: can be set on fire. Rating might define the intensity of the + fire, affecting e.g. the speed of the spreading of an open fire. +* `wool`: any wool (any origin, any color) +* `metal`: any metal +* `weapon`: any weapon +* `heavy`: anything considerably heavy + +### Digging time calculation specifics +Groups such as `crumbly`, `cracky` and `snappy` are used for this +purpose. Rating is `1`, `2` or `3`. A higher rating for such a group implies +faster digging time. + +The `level` group is used to limit the toughness of nodes a tool can dig +and to scale the digging times / damage to a greater extent. + +**Please do understand this**, otherwise you cannot use the system to it's +full potential. + +Tools define their properties by a list of parameters for groups. They +cannot dig other groups; thus it is important to use a standard bunch of +groups to enable interaction with tools. + +#### Tools definition +Tools define: + +* Full punch interval +* Maximum drop level +* For an arbitrary list of groups: + * Uses (until the tool breaks) + * Maximum level (usually `0`, `1`, `2` or `3`) + * Digging times + * Damage groups + +#### Full punch interval +When used as a weapon, the tool will do full damage if this time is spent +between punches. If e.g. half the time is spent, the tool will do half +damage. + +#### Maximum drop level +Suggests the maximum level of node, when dug with the tool, that will drop +it's useful item. (e.g. iron ore to drop a lump of iron). + +This is not automated; it is the responsibility of the node definition +to implement this. + +#### Uses +Determines how many uses the tool has when it is used for digging a node, +of this group, of the maximum level. For lower leveled nodes, the use count +is multiplied by `3^leveldiff`. + +* `uses=10, leveldiff=0`: actual uses: 10 +* `uses=10, leveldiff=1`: actual uses: 30 +* `uses=10, leveldiff=2`: actual uses: 90 + +#### Maximum level +Tells what is the maximum level of a node of this group that the tool will +be able to dig. + +#### Digging times +List of digging times for different ratings of the group, for nodes of the +maximum level. + +For example, as a Lua table, `times={2=2.00, 3=0.70}`. This would +result in the tool to be able to dig nodes that have a rating of `2` or `3` +for this group, and unable to dig the rating `1`, which is the toughest. +Unless there is a matching group that enables digging otherwise. + +#### Damage groups +List of damage for groups of entities. See "Entity damage mechanism". + +#### Example definition of the capabilities of a tool + + tool_capabilities = { + full_punch_interval=1.5, + max_drop_level=1, + groupcaps={ + crumbly={maxlevel=2, uses=20, times={[1]=1.60, [2]=1.20, [3]=0.80}} + } + damage_groups = {fleshy=2}, + } + +This makes the tool be able to dig nodes that fulfil both of these: + +* Have the `crumbly` group +* Have a `level` group less or equal to `2` + +Table of resulting digging times: + + crumbly 0 1 2 3 4 <- level + -> 0 - - - - - + 1 0.80 1.60 1.60 - - + 2 0.60 1.20 1.20 - - + 3 0.40 0.80 0.80 - - + + level diff: 2 1 0 -1 -2 + +Table of resulting tool uses: + + -> 0 - - - - - + 1 180 60 20 - - + 2 180 60 20 - - + 3 180 60 20 - - + +**Notes**: + +* At `crumbly==0`, the node is not diggable. +* At `crumbly==3`, the level difference digging time divider kicks in and makes + easy nodes to be quickly breakable. +* At `level > 2`, the node is not diggable, because it's `level > maxlevel` + +Entity damage mechanism +----------------------- +Damage calculation: + + damage = 0 + foreach group in cap.damage_groups: + damage += cap.damage_groups[group] * limit(actual_interval / + cap.full_punch_interval, 0.0, 1.0) + * (object.armor_groups[group] / 100.0) + -- Where object.armor_groups[group] is 0 for inexistent values + return damage + +Client predicts damage based on damage groups. Because of this, it is able to +give an immediate response when an entity is damaged or dies; the response is +pre-defined somehow (e.g. by defining a sprite animation) (not implemented; +TODO). +Currently a smoke puff will appear when an entity dies. + +The group `immortal` completely disables normal damage. + +Entities can define a special armor group, which is `punch_operable`. This +group disables the regular damage mechanism for players punching it by hand or +a non-tool item, so that it can do something else than take damage. + +On the Lua side, every punch calls: + + entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) + +This should never be called directly, because damage is usually not handled by +the entity itself. + +* `puncher` is the object performing the punch. Can be `nil`. Should never be + accessed unless absolutely required, to encourage interoperability. +* `time_from_last_punch` is time from last punch (by `puncher`) or `nil`. +* `tool_capabilities` can be `nil`. +* `direction` is a unit vector, pointing from the source of the punch to + the punched object. + +To punch an entity/object in Lua, call: + + object:punch(puncher, time_from_last_punch, tool_capabilities, direction) + +* Return value is tool wear. +* Parameters are equal to the above callback. +* If `direction` equals `nil` and `puncher` does not equal `nil`, + `direction` will be automatically filled in based on the location of `puncher`. + +Node Metadata +------------- +The instance of a node in the world normally only contains the three values +mentioned in "Nodes". However, it is possible to insert extra data into a +node. It is called "node metadata"; See "`NodeMetaRef`". + +Metadata contains two things: +* A key-value store +* An inventory + +Some of the values in the key-value store are handled specially: +* `formspec`: Defines a right-click inventory menu. See "Formspec". +* `infotext`: Text shown on the screen when the node is pointed at + +Example stuff: + + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8,9]".. + "list[context;main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Chest"); + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + print(dump(meta:to_table())) + meta:from_table({ + inventory = { + main = {[1] = "default:dirt", [2] = "", [3] = "", [4] = "", + [5] = "", [6] = "", [7] = "", [8] = "", [9] = "", + [10] = "", [11] = "", [12] = "", [13] = "", + [14] = "default:cobble", [15] = "", [16] = "", [17] = "", + [18] = "", [19] = "", [20] = "default:cobble", [21] = "", + [22] = "", [23] = "", [24] = "", [25] = "", [26] = "", + [27] = "", [28] = "", [29] = "", [30] = "", [31] = "", + [32] = ""} + }, + fields = { + formspec = "size[8,9]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", + infotext = "Chest" + } + }) + +Formspec +-------- +Formspec defines a menu. Currently not much else than inventories are +supported. It is a string, with a somewhat strange format. + +Spaces and newlines can be inserted between the blocks, as is used in the +examples. + +### Examples + +#### Chest + + size[8,9] + list[context;main;0,0;8,4;] + list[current_player;main;0,5;8,4;] + +#### Furnace + + size[8,9] + list[context;fuel;2,3;1,1;] + list[context;src;2,1;1,1;] + list[context;dst;5,1;2,2;] + list[current_player;main;0,5;8,4;] + +#### Minecraft-like player inventory + + size[8,7.5] + image[1,0.6;1,2;player.png] + list[current_player;main;0,3.5;8,4;] + list[current_player;craft;3,0;3,3;] + list[current_player;craftpreview;7,1;1,1;] + +### Elements + +#### `size[,,]` +* Define the size of the menu in inventory slots +* `fixed_size`: `true`/`false` (optional) +* deprecated: `invsize[,;]` + +#### `list[;;,;,;]` +* Show an inventory list + +#### `list[;;,;,;]` +* Show an inventory list + +#### `listring[;]` +* Allows to create a ring of inventory lists +* Shift-clicking on items in one element of the ring +* will send them to the next inventory list inside the ring +* The first occurrence of an element inside the ring will +* determine the inventory where items will be sent to + +#### `listring[]` +* Shorthand for doing `listring[;]` +* for the last two inventory lists added by list[...] + +#### `listcolors[;]` +* Sets background color of slots as `ColorString` +* Sets background color of slots on mouse hovering + +#### `listcolors[;;]` +* Sets background color of slots as `ColorString` +* Sets background color of slots on mouse hovering +* Sets color of slots border + +#### `listcolors[;;;;]` +* Sets background color of slots as `ColorString` +* Sets background color of slots on mouse hovering +* Sets color of slots border +* Sets default background color of tooltips +* Sets default font color of tooltips + +#### `tooltip[;;,]` +* Adds tooltip for an element +* `` tooltip background color as `ColorString` (optional) +* `` tooltip font color as `ColorString` (optional) + +#### `image[,;,;]` +* Show an image +* Position and size units are inventory slots + +#### `item_image[,;,;]` +* Show an inventory image of registered item/node +* Position and size units are inventory slots + +#### `bgcolor[;]` +* Sets background color of formspec as `ColorString` +* If `true`, the background color is drawn fullscreen (does not effect the size of the formspec) + +#### `background[,;,;]` +* Use a background. Inventory rectangles are not drawn then. +* Position and size units are inventory slots +* Example for formspec 8x4 in 16x resolution: image shall be sized + 8 times 16px times 4 times 16px. + +#### `background[,;,;;]` +* Use a background. Inventory rectangles are not drawn then. +* Position and size units are inventory slots +* Example for formspec 8x4 in 16x resolution: + image shall be sized 8 times 16px times 4 times 16px +* If `true` the background is clipped to formspec size + (`x` and `y` are used as offset values, `w` and `h` are ignored) + +#### `pwdfield[,;,;;

, + port = + }, +} +core.delete_favorite(id, location) -> success + +Logging: +core.debug(line) (possible in async calls) +^ Always printed to stderr and logfile (print() is redirected here) +core.log(line) (possible in async calls) +core.log(loglevel, line) (possible in async calls) +^ loglevel one of "error", "action", "info", "verbose" + +Settings: +core.setting_set(name, value) +core.setting_get(name) -> string or nil (possible in async calls) +core.setting_setbool(name, value) +core.setting_getbool(name) -> bool or nil (possible in async calls) +core.setting_save() -> nil, save all settings to config file + +Worlds: +core.get_worlds() -> list of worlds (possible in async calls) +^ returns { + [1] = { + path = , + name = , + gameid = , + }, +} +core.create_world(worldname, gameid) +core.delete_world(index) + +Helpers: +core.get_us_time() +^ returns time with microsecond precision +core.gettext(string) -> string +^ look up the translation of a string in the gettext message catalog +fgettext_ne(string, ...) +^ call core.gettext(string), replace "$1"..."$9" with the given +^ extra arguments and return the result +fgettext(string, ...) -> string +^ same as fgettext_ne(), but calls core.formspec_escape before returning result +core.parse_json(string[, nullvalue]) -> something (possible in async calls) +^ see core.parse_json (lua_api.txt) +dump(obj, dumped={}) +^ Return object serialized as a string +string:split(separator) +^ eg. string:split("a,b", ",") == {"a","b"} +string:trim() +^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar" +core.is_yes(arg) (possible in async calls) +^ returns whether arg can be interpreted as yes + +Version compat: +core.get_min_supp_proto() +^ returns the minimum supported network protocol version +core.get_max_supp_proto() +^ returns the maximum supported network protocol version + +Async: +core.handle_async(async_job,parameters,finished) +^ execute a function asynchronously +^ async_job is a function receiving one parameter and returning one parameter +^ parameters parameter table passed to async_job +^ finished function to be called once async_job has finished +^ the result of async_job is passed to this function + +Limitations of Async operations + -No access to global lua variables, don't even try + -Limited set of available functions + e.g. No access to functions modifying menu like core.start,core.close, + core.file_open_dialog + + +Class reference +---------------- +Settings: see lua_api.txt diff --git a/doc/minetest.6 b/doc/minetest.6 new file mode 100644 index 000000000..816fbbbe0 --- /dev/null +++ b/doc/minetest.6 @@ -0,0 +1,118 @@ +.TH minetest 6 "10 September 2013" "" "" + +.SH NAME +minetest, minetestserver \- Multiplayer infinite-world block sandbox + +.SH SYNOPSIS +.B minetest +[\fB--server SERVER OPTIONS\fR | \fBCLIENT OPTIONS\fR] +[\fBCOMMON OPTIONS\fR] +[\fBWORLD PATH\fR] + +.B minetestserver +[\fBSERVER OPTIONS\fR] +[\fBCOMMON OPTIONS\fR] +[\fBWORLD PATH\fR] + +.SH DESCRIPTION +.B Minetest +is one of the first InfiniMiner/Minecraft(/whatever) inspired games (started October 2010), with a goal of taking the survival multiplayer gameplay to a slightly different direction. +.PP +The main design philosophy is to keep it technically simple, stable and portable. It will be kept lightweight enough to run on fairly old hardware. + +.SH COMMON OPTIONS +.TP +.B \-\-help +Print allowed options and exit +.TP +.B \-\-version +Print version information and exit +.TP +.B \-\-config +Load configuration from specified file +.TP +.B \-\-logfile +Set logfile path (debug.txt) +.TP +.B \-\-info +Print more information to console +.TP +.B \-\-verbose +Print even more information to console +.TP +.B \-\-trace +Print enormous amounts of information to console +.TP +.B \-\-gameid +Set gameid +.TP +.B \-\-worldname +Set world path by name +.TP +.B \-\-world | list +Set world path or list worlds +.TP +.B \-\-map\-dir +Same as \-\-world (deprecated) +.TP +.B \-\-port +Set network port (UDP) to use +.TP +.B \-\-run\-unittests +Run unit tests and exit + +.SH CLIENT OPTIONS +.TP +.B \-\-address +Address to connect to +.TP +.B \-\-go +Disable main menu +.TP +.B \-\-name +Set player name +.TP +.B \-\-password +Set password +.TP +.B \-\-random\-input +Enable random user input, for testing (client only) +.TP +.B \-\-videomodes +List available video modes (client only) +.TP +.B \-\-speedtests +Run speed tests + +.SH SERVER OPTIONS +.TP +.B \-\-migrate +Migrate from current map backend to another. Possible values are sqlite3, +<<<<<<< HEAD +leveldb, redis, postgresql, and dummy. +======= +leveldb, redis, and dummy. +.TP +.B \-\-terminal +Display an interactive terminal over ncurses during execution. +>>>>>>> upstream/master + +.SH ENVIRONMENT +.TP +.B MINETEST_SUBGAME_PATH +Colon delimited list of directories to search for subgames. + +.SH BUGS +Please report all bugs to Perttu Ahola . + +.SH AUTHOR +.PP +Perttu Ahola +and contributors. +.PP +This man page was originally written by +Juhani Numminen . + +.SH WWW +http://www.minetest.net/ + diff --git a/doc/minetestserver.6 b/doc/minetestserver.6 new file mode 100644 index 000000000..db5330d3c --- /dev/null +++ b/doc/minetestserver.6 @@ -0,0 +1,2 @@ +.so man6/minetest.6 + diff --git a/doc/old/ancient_main_comment.txt b/doc/old/ancient_main_comment.txt new file mode 100644 index 000000000..d7b0e307f --- /dev/null +++ b/doc/old/ancient_main_comment.txt @@ -0,0 +1,345 @@ +------------------------------------------------------------------ +The ancient comment from the beginning of main.cpp is stored here. +------------------------------------------------------------------ + +/* +=============================== NOTES ============================== +NOTE: Things starting with TODO are sometimes only suggestions. + +NOTE: iostream.imbue(std::locale("C")) is very slow +NOTE: Global locale is now set at initialization + +NOTE: If VBO (EHM_STATIC) is used, remember to explicitly free the + hardware buffer (it is not freed automatically) + +NOTE: A random to-do list saved here as documentation: +A list of "active blocks" in which stuff happens. (+=done) + + Add a never-resetted game timer to the server + + Add a timestamp value to blocks + + The simple rule: All blocks near some player are "active" + - Do stuff in real time in active blocks + + Handle objects + - Grow grass, delete leaves without a tree + - Spawn some mobs based on some rules + - Transform cobble to mossy cobble near water + - Run a custom script + - ...And all kinds of other dynamic stuff + + Keep track of when a block becomes active and becomes inactive + + When a block goes inactive: + + Store objects statically to block + + Store timer value as the timestamp + + When a block goes active: + + Create active objects out of static objects + - Simulate the results of what would have happened if it would have + been active for all the time + - Grow a lot of grass and so on + + Initially it is fine to send information about every active object + to every player. Eventually it should be modified to only send info + about the nearest ones. + + This was left to be done by the old system and it sends only the + nearest ones. + +NOTE: Seeds in 1260:6c77e7dbfd29: +5721858502589302589: + Spawns you on a small sand island with a surface dungeon +2983455799928051958: + Enormous jungle + a surface dungeon at ~(250,0,0) + +Old, wild and random suggestions that probably won't be done: +------------------------------------------------------------- + +SUGG: If player is on ground, mainly fetch ground-level blocks + +SUGG: Expose Connection's seqnums and ACKs to server and client. + - This enables saving many packets and making a faster connection + - This also enables server to check if client has received the + most recent block sent, for example. +SUGG: Add a sane bandwidth throttling system to Connection + +SUGG: More fine-grained control of client's dumping of blocks from + memory + - ...What does this mean in the first place? + +SUGG: A map editing mode (similar to dedicated server mode) + +SUGG: Transfer more blocks in a single packet +SUGG: A blockdata combiner class, to which blocks are added and at + destruction it sends all the stuff in as few packets as possible. +SUGG: Make a PACKET_COMBINED which contains many subpackets. Utilize + it by sending more stuff in a single packet. + - Add a packet queue to RemoteClient, from which packets will be + combined with object data packets + - This is not exactly trivial: the object data packets are + sometimes very big by themselves + - This might not give much network performance gain though. + +SUGG: Precalculate lighting translation table at runtime (at startup) + - This is not doable because it is currently hand-made and not + based on some mathematical function. + - Note: This has been changing lately + +SUGG: A version number to blocks, which increments when the block is + modified (node add/remove, water update, lighting update) + - This can then be used to make sure the most recent version of + a block has been sent to client, for example + +SUGG: Make the amount of blocks sending to client and the total + amount of blocks dynamically limited. Transferring blocks is the + main network eater of this system, so it is the one that has + to be throttled so that RTTs stay low. + +SUGG: Meshes of blocks could be split into 6 meshes facing into + different directions and then only those drawn that need to be + +SUGG: Background music based on cellular automata? + http://www.earslap.com/projectslab/otomata + +SUGG: Simple light color information to air + +SUGG: Server-side objects could be moved based on nodes to enable very + lightweight operation and simple AI + - Not practical; client would still need to show smooth movement. + +SUGG: Make a system for pregenerating quick information for mapblocks, so + that the client can show them as cubes before they are actually sent + or even generated. + +SUGG: Erosion simulation at map generation time + - This might be plausible if larger areas of map were pregenerated + without lighting (which is slow) + - Simulate water flows, which would carve out dirt fast and + then turn stone into gravel and sand and relocate it. + - How about relocating minerals, too? Coal and gold in + downstream sand and gravel would be kind of cool + - This would need a better way of handling minerals, mainly + to have mineral content as a separate field. the first + parameter field is free for this. + - Simulate rock falling from cliffs when water has removed + enough solid rock from the bottom + +SUGG: For non-mapgen FarMesh: Add a per-sector database to store surface + stuff as simple flags/values + - Light? + - A building? + And at some point make the server send this data to the client too, + instead of referring to the noise functions + - Ground height + - Surface ground type + - Trees? + +Gaming ideas: +------------- + +- Aim for something like controlling a single dwarf in Dwarf Fortress +- The player could go faster by a crafting a boat, or riding an animal +- Random NPC traders. what else? + +Game content: +------------- + +- When furnace is destroyed, move items to player's inventory +- Add lots of stuff +- Glass blocks +- Growing grass, decaying leaves + - This can be done in the active blocks I guess. + - Lots of stuff can be done in the active blocks. + - Uh, is there an active block list somewhere? I think not. Add it. +- Breaking weak structures + - This can probably be accomplished in the same way as grass +- Player health points + - When player dies, throw items on map (needs better item-on-map + implementation) +- Cobble to get mossy if near water +- More slots in furnace source list, so that multiple ingredients + are possible. +- Keys to chests? + +- The Treasure Guard; a big monster with a hammer + - The hammer does great damage, shakes the ground and removes a block + - You can drop on top of it, and have some time to attack there + before he shakes you off + +- Maybe the difficulty could come from monsters getting tougher in + far-away places, and the player starting to need something from + there when time goes by. + - The player would have some of that stuff at the beginning, and + would need new supplies of it when it runs out + +- A bomb +- A spread-items-on-map routine for the bomb, and for dying players + +- Fighting: + - Proper sword swing simulation + - Player should get damage from colliding to a wall at high speed + +Documentation: +-------------- + +Build system / running: +----------------------- + +Networking and serialization: +----------------------------- + +SUGG: Fix address to be ipv6 compatible + +User Interface: +--------------- + +Graphics: +--------- + +SUGG: Combine MapBlock's face caches to so big pieces that VBO + can be used + - That is >500 vertices + - This is not easy; all the MapBlocks close to the player would + still need to be drawn separately and combining the blocks + would have to happen in a background thread + +SUGG: Make fetching sector's blocks more efficient when rendering + sectors that have very large amounts of blocks (on client) + - Is this necessary at all? + +SUGG: Draw cubes in inventory directly with 3D drawing commands, so that + animating them is easier. + +SUGG: Option for enabling proper alpha channel for textures + +TODO: Flowing water animation + +TODO: A setting for enabling bilinear filtering for textures + +TODO: Better control of draw_control.wanted_max_blocks + +TODO: Further investigate the use of GPU lighting in addition to the + current one + +TODO: Artificial (night) light could be more yellow colored than sunlight. + - This is technically doable. + - Also the actual colors of the textures could be made less colorful + in the dark but it's a bit more difficult. + +SUGG: Somehow make the night less colorful + +TODO: Occlusion culling + - At the same time, move some of the renderMap() block choosing code + to the same place as where the new culling happens. + - Shoot some rays per frame and when ready, make a new list of + blocks for usage of renderMap and give it a new pointer to it. + +Configuration: +-------------- + +Client: +------- + +TODO: Untie client network operations from framerate + - Needs some input queues or something + - This won't give much performance boost because calculating block + meshes takes so long + +SUGG: Make morning and evening transition more smooth and maybe shorter + +TODO: Don't update all meshes always on single node changes, but + check which ones should be updated + - implement Map::updateNodeMeshes() and the usage of it + - It will give almost always a 4x boost in mesh update performance. + +- A weapon engine + +- Tool/weapon visualization + +FIXME: When disconnected to the menu, memory is not freed properly + +TODO: Investigate how much the mesh generator thread gets used when + transferring map data + +Server: +------- + +SUGG: Make an option to the server to disable building and digging near + the starting position + +FIXME: Server sometimes goes into some infinite PeerNotFoundException loop + +* Fix the problem with the server constantly saving one or a few + blocks? List the first saved block, maybe it explains. + - It is probably caused by oscillating water + - TODO: Investigate if this still happens (this is a very old one) +* Make a small history check to transformLiquids to detect and log + continuous oscillations, in such detail that they can be fixed. + +FIXME: The new optimized map sending doesn't sometimes send enough blocks + from big caves and such +FIXME: Block send distance configuration does not take effect for some reason + +Environment: +------------ + +TODO: Add proper hooks to when adding and removing active blocks + +TODO: Finish the ActiveBlockModifier stuff and use it for something + +Objects: +-------- + +TODO: Get rid of MapBlockObjects and use only ActiveObjects + - Skipping the MapBlockObject data is nasty - there is no "total + length" stored; have to make a SkipMBOs function which contains + enough of the current code to skip them properly. + +SUGG: MovingObject::move and Player::move are basically the same. + combine them. + - NOTE: This is a bit tricky because player has the sneaking ability + - NOTE: Player::move is more up-to-date. + - NOTE: There is a simple move implementation now in collision.{h,cpp} + - NOTE: MovingObject will be deleted (MapBlockObject) + +TODO: Add a long step function to objects that is called with the time + difference when block activates + +Map: +---- + +TODO: Flowing water to actually contain flow direction information + - There is a space for this - it just has to be implemented. + +TODO: Consider smoothening cave floors after generating them + +TODO: Fix make_tree, make_* to use seed-position-consistent pseudorandom + - delta also + +Misc. stuff: +------------ +TODO: Make sure server handles removing grass when a block is placed (etc) + - The client should not do it by itself + - NOTE: I think nobody does it currently... +TODO: Block cube placement around player's head +TODO: Protocol version field +TODO: Think about using same bits for material for fences and doors, for + example + +SUGG: Restart irrlicht completely when coming back to main menu from game. + - This gets rid of everything that is stored in irrlicht's caches. + - This might be needed for texture pack selection in menu + +TODO: Merge bahamada's audio stuff (clean patch available) + +Making it more portable: +------------------------ + +Stuff to do before release: +--------------------------- + +Fixes to the current release: +----------------------------- + +Stuff to do after release: +--------------------------- + +Doing currently: +---------------- + +====================================================================== + +*/ diff --git a/doc/old/changelog.txt b/doc/old/changelog.txt new file mode 100644 index 000000000..1750d71d1 --- /dev/null +++ b/doc/old/changelog.txt @@ -0,0 +1,147 @@ +Minetest changelog +---------------------- +This should contain all the major changes. +For minor stuff, refer to the commit log of the repository. + +0.3.1: (released on 2011-11-09) +- Fix frustum culling (previous versions have rendered too much stuff that is not actually visible (about 180 degrees, while should have been more like 100.)) +- Add occlusion culling (improves performance a lot) +- Add “3d clouds” on/off checkbox in main menu +- Add “opaque water” on/off checkbox +- Fix some random minor stuff +- Turn mipmapping off (This makes far-away textures a bit noisier but better looking) +- Add Command-line signal handler for Windows (contributed by SpeedProg) +- Fix network layer segmentation fault introduced in 0.3.dev-20111021 +- Fix water-glass and water-lava and lava-glass surfaces + +0.3.0: (released on 2011-11-01) +- Some small fixes +0.3.dev-20111021: +- Modify dungeon masters to only try to shoot players +- Fix object duplication bug at block load/unload bug +- Improve network layer +0.3.dev-20111016: +- Locked chest (contributed) +- Server user limit setting (max_users) +- Wielded tool is shown in HUD (contributed) +- View bobbing (contributed) +- Saplings that drop from leaf blocks and when placed on ground will grow to trees (contributed) +- Optimized map saving (does not re-save everything all the time) +- New mob system and new mob: dungeon master +- Death/respawn screen + +0.2.20110922_3: +- Fix the build for MSVC2010; also released for windows using MSVC2010. + +0.2.20110922_1: +- Make client report a newer version number to the server than 2011-07-31 does and make server disallow old clients + +0.2.20110922: +- Map is saved in an SQLite database file (by Queatz) +- Ladders (MarkTraceur) +- Lava +- Apple trees (sfan5) +- Slightly better looking inventory with transparency +- /me chat command (Oblomov) +- Using chosen map seed possible through fixed_map_seed configuration option (kahrl) +- Fix the long-existed PeerNotFound loop bug +- Some translations and localization-related fixes +- Lots of small fixes + +2011-07-31_3: +- Fixes a bug that made the server to deny non-empty passwords from players connecting the first time + +2011-07-31_2: +- Fixes a bug that caused the server to always read an empty password from the client when a client connected. + +2011-07-31: +- A number of small fixes, build system stuff and such (refer to version control log) +- Map generator no longer crashes at generation limit +- Fixed mapgen producing lots of cut-down trees +- Some minor tweaks in map generator (some contributed) +- Volumetric clouds (contributed) +- Icon added (graphic contributed) +- Key configuration menu (contributed) +- Decorative blocks and items: bookshelf, sandstone, cactus, clay, brick, papyrus, rail, paper, book (contributed) +- Jungles! +- Hotbar is a bit smaller +- Health is now enabled by default; You can now eat cooked rats to heal yourself. +- Finally added sword textures, altough sword is still of no use +- Creative mode now preserves normal mode inventory + +2011-07-04: +- Many small fixes +- Code reorganizing to aid further development +- Renewed map generator + +2011-06-02: +- Password crash on windows fixed +- Optimized server CPU usage a lot +- Furnaces now work also while players are not near to them + +2011-05-29: +- Optimized smooth lighting +- A number of small fixes +- Added clouds and simple skyboxes +- The glass block added +- Added key configuration to config file +- Player privileges on server +- Slightly updated map format +- Player passwords +- All textures first searched from texture_path +- Map directory ("map") has been renamed to "world" (just rename it to load an old world) +- Mouse inversion (invert_mouse) +- Grass doesn't grow immediately anymore +- Fence added + +2011-04-24: +- Smooth lighting with simple ambient occlusion +- Updated main menu + +2011-04-23_0_test: +- Small bug fixes +- Item drop multiplication fixed +- HP added +- Added A simple monster which spawns to dark places at map generation time +- Some code refactoring and cleaning (possibly new bugs) + +2011-04-11: +- Fixed crafting a bit + +2011-04-10_0: +- Asynchronous map generation +- New object system + +2011-04-06: +- Mesh update of node addition/removal is now done asynchronously on client, removing frametime spike +- Node addition/removal is sent directly only to clients that are closer than 100 nodes to the modification. For the others, the modified blocks are set unsent. (and are re-sent when applicable) + +2011-04-05: +- Made furnace usable +- Added cobblestone +- Added wood, stone and steel tools: pickaxes, shovels and axes +- Incremented to version 0.0.2 + +2011-04-04: +- Cleaned client to be completely synchronous, except for the mesh calculation, which is now done with queues in a separate thread. +- Added node metadata support +- Added chests + +2011-02-17: +- Added better handling of textures. Now many file extensions are searched. Also too large textures are not put on the texture atlas, and the construction of the texture atlas is stopped when it is full. + +2011-02-16: +- Better handling of Ctrl-C on POSIX systems + +2011-02-15: +- Fixed a problem of not saving and loading the "lighting expired" value of MapBlocks properly. This caused high server CPU usage. +- Ctrl-C handling on POSIX systems +- Added simple command support to server +- Added settings enable_texture_atlas and texture_path + +2011-02-14: +- Created changelog.txt +- Added sneaking/crouching +- Modified the looks of the hotbar and cleaned code +- Added code to allow generating 3D cube images for inventory + diff --git a/doc/protocol.txt b/doc/protocol.txt new file mode 100644 index 000000000..b151f88d8 --- /dev/null +++ b/doc/protocol.txt @@ -0,0 +1,108 @@ +Minetest protocol (incomplete, early draft): +Updated 2011-06-18 + +A custom protocol over UDP. +Integers are big endian. +Refer to connection.{h,cpp} for further reference. + +Initialization: +- A dummy reliable packet with peer_id=PEER_ID_INEXISTENT=0 is sent to the server: + - Actually this can be sent without the reliable packet header, too, i guess, + but the sequence number in the header allows the sender to re-send the + packet without accidentally getting a double initialization. + - Packet content: + # Basic header + u32 protocol_id = PROTOCOL_ID = 0x4f457403 + u16 sender_peer_id = PEER_ID_INEXISTENT = 0 + u8 channel = 0 + # Reliable packet header + u8 type = TYPE_RELIABLE = 3 + u16 seqnum = SEQNUM_INITIAL = 65500 + # Original packet header + u8 type = TYPE_ORIGINAL = 1 + # And no actual payload. +- Server responds with something like this: + - Packet content: + # Basic header + u32 protocol_id = PROTOCOL_ID = 0x4f457403 + u16 sender_peer_id = PEER_ID_INEXISTENT = 0 + u8 channel = 0 + # Reliable packet header + u8 type = TYPE_RELIABLE = 3 + u16 seqnum = SEQNUM_INITIAL = 65500 + # Control packet header + u8 type = TYPE_CONTROL = 0 + u8 controltype = CONTROLTYPE_SET_PEER_ID = 1 + u16 peer_id_new = assigned peer id to client (other than 0 or 1) +- Then the connection can be disconnected by sending: + - Packet content: + # Basic header + u32 protocol_id = PROTOCOL_ID = 0x4f457403 + u16 sender_peer_id = whatever was gotten in CONTROLTYPE_SET_PEER_ID + u8 channel = 0 + # Control packet header + u8 type = TYPE_CONTROL = 0 + u8 controltype = CONTROLTYPE_DISCO = 3 + +- Here's a quick untested connect-disconnect done in PHP: +# host: ip of server (use gethostbyname(hostname) to get from a dns name) +# port: port of server +function check_if_minetestserver_up($host, $port) +{ + $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + $timeout = array("sec" => 1, "usec" => 0); + socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout); + $buf = "\x4f\x45\x74\x03\x00\x00\x00\x03\xff\xdc\x01"; + socket_sendto($socket, $buf, strlen($buf), 0, $host, $port); + $buf = socket_read($socket, 1000); + if($buf != "") + { + # We got a reply! read the peer id from it. + $peer_id = substr($buf, 9, 2); + + # Disconnect + $buf = "\x4f\x45\x74\x03".$peer_id."\x00\x00\x03"; + socket_sendto($socket, $buf, strlen($buf), 0, $host, $port); + socket_close($socket); + + return true; + } + return false; +} + +- Here's a Python script for checking if a minetest server is up, confirmed working +#!/usr/bin/env python +import sys, time, socket +address = "" +port = 30000 +if len(sys.argv) <= 1: + print("Usage: %s
" % sys.argv[0]) + exit() +if ':' in sys.argv[1]: + address = sys.argv[1].split(':')[0] + try: + port = int(sys.argv[1].split(':')[1]) + except ValueError: + print("Please specify a valid port") + exit() +else: + address = sys.argv[1] + +try: + start = time.time() + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.settimeout(2.0) + buf = "\x4f\x45\x74\x03\x00\x00\x00\x01" + sock.sendto(buf, (address, port)) + data, addr = sock.recvfrom(1000) + if data: + peer_id = data[12:14] + buf = "\x4f\x45\x74\x03" + peer_id + "\x00\x00\x03" + sock.sendto(buf, (address, port)) + sock.close() + end = time.time() + print("%s is up (%0.5fms)" % (sys.argv[1],end-start)) + else: + print("%s seems to be down " % sys.argv[1]) +except: + print("%s seems to be down " % sys.argv[1]) diff --git a/doc/texture_overrides.txt b/doc/texture_overrides.txt new file mode 100644 index 000000000..1a4e11a3c --- /dev/null +++ b/doc/texture_overrides.txt @@ -0,0 +1,35 @@ +Texture Overrides +================= + +You can override the textures of a node from a texture pack using +texture overrides. To do this, create a file in a texture pack +called override.txt + +Basic Format +------------ + +Each line in an override.txt file is a rule. It consists of + + nodename face-selector texture + +For example, + + default:dirt_with_grass sides default_stone.png + +You can use ^ operators as usual: + + default:dirt_with_grass sides default_stone.png^[brighten + +Face Selectors +-------------- + +| face-selector | behavior | +|---------------|---------------------------------------------------| +| left | x- | +| right | x+ | +| front | z- | +| back | z+ | +| top | y+ | +| bottom | y- | +| sides | x-, x+, z-, z+ | +| all | All faces. You can also use '*' instead of 'all'. | diff --git a/doc/world_format.txt b/doc/world_format.txt new file mode 100644 index 000000000..a6255053e --- /dev/null +++ b/doc/world_format.txt @@ -0,0 +1,609 @@ +============================= +Minetest World Format 22...25 +============================= + +This applies to a world format carrying the block serialization version +22...25, used at least in +- 0.4.dev-20120322 ... 0.4.dev-20120606 (22...23) +- 0.4.0 (23) +- 24 was never released as stable and existed for ~2 days + +The block serialization version does not fully specify every aspect of this +format; if compliance with this format is to be checked, it needs to be +done by detecting if the files and data indeed follows it. + +Legacy stuff +============= +Data can, in theory, be contained in the flat file directory structure +described below in Version 17, but it is not officially supported. Also you +may stumble upon all kinds of oddities in not-so-recent formats. + +Files +====== +Everything is contained in a directory, the name of which is freeform, but +often serves as the name of the world. + +Currently the authentication and ban data is stored on a per-world basis. +It can be copied over from an old world to a newly created world. + +World +|-- auth.txt ----- Authentication data +|-- env_meta.txt - Environment metadata +|-- ipban.txt ---- Banned ips/users +|-- map_meta.txt - Map metadata +|-- map.sqlite --- Map data +|-- players ------ Player directory +| |-- player1 -- Player file +| '-- Foo ------ Player file +`-- world.mt ----- World metadata + +auth.txt +--------- +Contains authentication data, player per line. + :: + +Legacy format (until 0.4.12) of password hash is SHA1'd, +in the base64 encoding. + +Format (since 0.4.13) of password hash is #1##, with the +parts inside <> encoded in the base64 encoding. + is an RFC 2945 compatible SRP verifier, +of the given salt, password, and the player's name lowercased, +using the 2048-bit group specified in RFC 5054 and the SHA-256 hash function. + +Example lines: +- Player "celeron55", no password, privileges "interact" and "shout": + celeron55::interact,shout +- Player "Foo", password "bar", privilege "shout", with a legacy password hash: + foo:iEPX+SQWIR3p67lj/0zigSWTKHg:shout +- Player "Foo", password "bar", privilege "shout", with a 0.4.13 pw hash: + foo:#1#hPpy4O3IAn1hsNK00A6wNw#Kpu6rj7McsrPCt4euTb5RA5ltF7wdcWGoYMcRngwDi11cZhPuuR9i5Bo7o6A877TgcEwoc//HNrj9EjR/CGjdyTFmNhiermZOADvd8eu32FYK1kf7RMC0rXWxCenYuOQCG4WF9mMGiyTPxC63VAjAMuc1nCZzmy6D9zt0SIKxOmteI75pAEAIee2hx4OkSXRIiU4Zrxo1Xf7QFxkMY4x77vgaPcvfmuzom0y/fU1EdSnZeopGPvzMpFx80ODFx1P34R52nmVl0W8h4GNo0k8ZiWtRCdrJxs8xIg7z5P1h3Th/BJ0lwexpdK8sQZWng8xaO5ElthNuhO8UQx1l6FgEA:shout +- Player "bar", no password, no privileges: + bar:: + +env_meta.txt +------------- +Simple global environment variables. +Example content (added indentation): + game_time = 73471 + time_of_day = 19118 + EnvArgsEnd + +ipban.txt +---------- +Banned IP addresses and usernames. +Example content (added indentation): + 123.456.78.9|foo + 123.456.78.10|bar + +map_meta.txt +------------- +Simple global map variables. +Example content (added indentation): + seed = 7980462765762429666 + [end_of_params] + +map.sqlite +----------- +Map data. +See Map File Format below. + +player1, Foo +------------- +Player data. +Filename can be anything. +See Player File Format below. + +world.mt +--------- +World metadata. +Example content (added indentation): + gameid = mesetint + +Player File Format +=================== + +- Should be pretty self-explanatory. +- Note: position is in nodes * 10 + +Example content (added indentation): + hp = 11 + name = celeron55 + pitch = 39.77 + position = (-5231.97,15,1961.41) + version = 1 + yaw = 101.37 + PlayerArgsEnd + List main 32 + Item default:torch 13 + Item default:pick_steel 1 50112 + Item experimental:tnt + Item default:cobble 99 + Item default:pick_stone 1 13104 + Item default:shovel_steel 1 51838 + Item default:dirt 61 + Item default:rail 78 + Item default:coal_lump 3 + Item default:cobble 99 + Item default:leaves 22 + Item default:gravel 52 + Item default:axe_steel 1 2045 + Item default:cobble 98 + Item default:sand 61 + Item default:water_source 94 + Item default:glass 2 + Item default:mossycobble + Item default:pick_steel 1 64428 + Item animalmaterials:bone + Item default:sword_steel + Item default:sapling + Item default:sword_stone 1 10647 + Item default:dirt 99 + Empty + Empty + Empty + Empty + Empty + Empty + Empty + Empty + EndInventoryList + List craft 9 + Empty + Empty + Empty + Empty + Empty + Empty + Empty + Empty + Empty + EndInventoryList + List craftpreview 1 + Empty + EndInventoryList + List craftresult 1 + Empty + EndInventoryList + EndInventory + +Map File Format +================ + +Minetest maps consist of MapBlocks, chunks of 16x16x16 nodes. + +In addition to the bulk node data, MapBlocks stored on disk also contain +other things. + +History +-------- +We need a bit of history in here. Initially Minetest stored maps in a +format called the "sectors" format. It was a directory/file structure like +this: + sectors2/XXX/ZZZ/YYYY +For example, the MapBlock at (0,1,-2) was this file: + sectors2/000/ffd/0001 + +Eventually Minetest outgrow this directory structure, as filesystems were +struggling under the amount of files and directories. + +Large servers seriously needed a new format, and thus the base of the +current format was invented, suggested by celeron55 and implemented by +JacobF. + +SQLite3 was slammed in, and blocks files were directly inserted as blobs +in a single table, indexed by integer primary keys, oddly mangled from +coordinates. + +Today we know that SQLite3 allows multiple primary keys (which would allow +storing coordinates separately), but the format has been kept unchanged for +that part. So, this is where it has come. + + +So here goes +------------- +map.sqlite is an sqlite3 database, containing a single table, called +"blocks". It looks like this: + + CREATE TABLE `blocks` (`pos` INT NOT NULL PRIMARY KEY,`data` BLOB); + +The key +-------- +"pos" is created from the three coordinates of a MapBlock using this +algorithm, defined here in Python: + + def getBlockAsInteger(p): + return int64(p[2]*16777216 + p[1]*4096 + p[0]) + + def int64(u): + while u >= 2**63: + u -= 2**64 + while u <= -2**63: + u += 2**64 + return u + +It can be converted the other way by using this code: + + def getIntegerAsBlock(i): + x = unsignedToSigned(i % 4096, 2048) + i = int((i - x) / 4096) + y = unsignedToSigned(i % 4096, 2048) + i = int((i - y) / 4096) + z = unsignedToSigned(i % 4096, 2048) + return x,y,z + + def unsignedToSigned(i, max_positive): + if i < max_positive: + return i + else: + return i - 2*max_positive + +The blob +--------- +The blob is the data that would have otherwise gone into the file. + +See below for description. + +MapBlock serialization format +============================== +NOTE: Byte order is MSB first (big-endian). +NOTE: Zlib data is in such a format that Python's zlib at least can + directly decompress. + +u8 version +- map format version number, see serialisation.h for the latest number + +u8 flags +- Flag bitmasks: + - 0x01: is_underground: Should be set to 0 if there will be no light + obstructions above the block. If/when sunlight of a block is updated + and there is no block above it, this value is checked for determining + whether sunlight comes from the top. + - 0x02: day_night_differs: Whether the lighting of the block is different + on day and night. Only blocks that have this bit set are updated when + day transforms to night. + - 0x04: lighting_expired: If true, lighting is invalid and should be + updated. If you can't calculate lighting in your generator properly, + you could try setting this 1 to everything and setting the uppermost + block in every sector as is_underground=0. I am quite sure it doesn't + work properly, though. + - 0x08: generated: True if the block has been generated. If false, block + is mostly filled with CONTENT_IGNORE and is likely to contain eg. parts + of trees of neighboring blocks. + +u8 content_width +- Number of bytes in the content (param0) fields of nodes +if map format version <= 23: + - Always 1 +if map format version >= 24: + - Always 2 + +u8 params_width +- Number of bytes used for parameters per node +- Always 2 + +zlib-compressed node data: +if content_width == 1: + - content: + u8[4096]: param0 fields + u8[4096]: param1 fields + u8[4096]: param2 fields +if content_width == 2: + - content: + u16[4096]: param0 fields + u8[4096]: param1 fields + u8[4096]: param2 fields +- The location of a node in each of those arrays is (z*16*16 + y*16 + x). + +zlib-compressed node metadata list +- content: +if map format version <= 22: + u16 version (=1) + u16 count of metadata + foreach count: + u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) + u16 type_id + u16 content_size + u8[content_size] content of metadata. Format depends on type_id, see below. +if map format version >= 23: + u8 version (=1) -- Note the type is u8, while for map format version <= 22 it's u16 + u16 count of metadata + foreach count: + u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) + u32 num_vars + foreach num_vars: + u16 key_len + u8[key_len] key + u32 val_len + u8[val_len] value + serialized inventory + +- Node timers +if map format version == 23: + u8 unused version (always 0) +if map format version == 24: (NOTE: Not released as stable) + u8 nodetimer_version + if nodetimer_version == 0: + (nothing else) + if nodetimer_version == 1: + u16 num_of_timers + foreach num_of_timers: + u16 timer position (z*16*16 + y*16 + x) + s32 timeout*1000 + s32 elapsed*1000 +if map format version >= 25: + -- Nothing right here, node timers are serialized later + +u8 static object version: +- Always 0 + +u16 static_object_count + +foreach static_object_count: + u8 type (object type-id) + s32 pos_x_nodes * 10000 + s32 pos_y_nodes * 10000 + s32 pos_z_nodes * 10000 + u16 data_size + u8[data_size] data + +u32 timestamp +- Timestamp when last saved, as seconds from starting the game. +- 0xffffffff = invalid/unknown timestamp, nothing should be done with the time + difference when loaded + +u8 name-id-mapping version +- Always 0 + +u16 num_name_id_mappings + +foreach num_name_id_mappings + u16 id + u16 name_len + u8[name_len] name + +- Node timers +if map format version == 25: + u8 length of the data of a single timer (always 2+4+4=10) + u16 num_of_timers + foreach num_of_timers: + u16 timer position (z*16*16 + y*16 + x) + s32 timeout*1000 + s32 elapsed*1000 + +EOF. + +Format of nodes +---------------- +A node is composed of the u8 fields param0, param1 and param2. + +if map format version <= 23: + The content id of a node is determined as so: + - If param0 < 0x80, + content_id = param0 + - Otherwise + content_id = (param0<<4) + (param2>>4) +if map format version >= 24: + The content id of a node is param0. + +The purpose of param1 and param2 depend on the definition of the node. + +The name-id-mapping +-------------------- +The mapping maps node content ids to node names. + +Node metadata format for map format versions <= 22 +--------------------------------------------------- +The node metadata are serialized depending on the type_id field. + +1: Generic metadata + serialized inventory + u32 len + u8[len] text + u16 len + u8[len] owner + u16 len + u8[len] infotext + u16 len + u8[len] inventory drawspec + u8 allow_text_input (bool) + u8 removal_disabled (bool) + u8 enforce_owner (bool) + u32 num_vars + foreach num_vars + u16 len + u8[len] name + u32 len + u8[len] value + +14: Sign metadata + u16 text_len + u8[text_len] text + +15: Chest metadata + serialized inventory + +16: Furnace metadata + TBD + +17: Locked Chest metadata + u16 len + u8[len] owner + serialized inventory + +Static objects +--------------- +Static objects are persistent freely moving objects in the world. + +Object types: +1: Test object +2: Item +3: Rat (deprecated) +4: Oerkki (deprecated) +5: Firefly (deprecated) +6: MobV2 (deprecated) +7: LuaEntity + +1: Item: + u8 version + version 0: + u16 len + u8[len] itemstring + +7: LuaEntity: + u8 version + version 1: + u16 len + u8[len] entity name + u32 len + u8[len] static data + s16 hp + s32 velocity.x * 10000 + s32 velocity.y * 10000 + s32 velocity.z * 10000 + s32 yaw * 1000 + +Itemstring format +------------------ +eg. 'default:dirt 5' +eg. 'default:pick_wood 21323' +eg. '"default:apple" 2' +eg. 'default:apple' +- The wear value in tools is 0...65535 +- There are also a number of older formats that you might stumble upon: +eg. 'node "default:dirt" 5' +eg. 'NodeItem default:dirt 5' +eg. 'ToolItem WPick 21323' + +Inventory serialization format +------------------------------- +- The inventory serialization format is line-based +- The newline character used is "\n" +- The end condition of a serialized inventory is always "EndInventory\n" +- All the slots in a list must always be serialized. + +Example (format does not include "---"): +--- +List foo 4 +Item default:sapling +Item default:sword_stone 1 10647 +Item default:dirt 99 +Empty +EndInventoryList +List bar 9 +Empty +Empty +Empty +Empty +Empty +Empty +Empty +Empty +Empty +EndInventoryList +EndInventory +--- + +============================================== +Minetest World Format used as of 2011-05 or so +============================================== + +Map data serialization format version 17. + +0.3.1 does not use this format, but a more recent one. This exists here for +historical reasons. + +Directory structure: +sectors/XXXXZZZZ or sectors2/XXX/ZZZ +XXXX, ZZZZ, XXX and ZZZ being the hexadecimal X and Z coordinates. +Under these, the block files are stored, called YYYY. + +There also exists files map_meta.txt and chunk_meta, that are used by the +generator. If they are not found or invalid, the generator will currently +behave quite strangely. + +The MapBlock file format (sectors2/XXX/ZZZ/YYYY): +------------------------------------------------- + +NOTE: Byte order is MSB first. + +u8 version +- map format version number, this one is version 17 + +u8 flags +- Flag bitmasks: + - 0x01: is_underground: Should be set to 0 if there will be no light + obstructions above the block. If/when sunlight of a block is updated and + there is no block above it, this value is checked for determining whether + sunlight comes from the top. + - 0x02: day_night_differs: Whether the lighting of the block is different on + day and night. Only blocks that have this bit set are updated when day + transforms to night. + - 0x04: lighting_expired: If true, lighting is invalid and should be updated. + If you can't calculate lighting in your generator properly, you could try + setting this 1 to everything and setting the uppermost block in every + sector as is_underground=0. I am quite sure it doesn't work properly, + though. + +zlib-compressed map data: +- content: + u8[4096]: content types + u8[4096]: param1 values + u8[4096]: param2 values + +zlib-compressed node metadata +- content: + u16 version (=1) + u16 count of metadata + foreach count: + u16 position (= p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) + u16 type_id + u16 content_size + u8[content_size] misc. stuff contained in the metadata + +u16 mapblockobject_count +- always write as 0. +- if read != 0, just fail. + +foreach mapblockobject_count: + - deprecated, should not be used. Length of this data can only be known by + properly parsing it. Just hope not to run into any of this. + +u8 static object version: +- currently 0 + +u16 static_object_count + +foreach static_object_count: + u8 type (object type-id) + s32 pos_x * 1000 + s32 pos_y * 1000 + s32 pos_z * 1000 + u16 data_size + u8[data_size] data + +u32 timestamp +- Timestamp when last saved, as seconds from starting the game. +- 0xffffffff = invalid/unknown timestamp, nothing will be done with the time + difference when loaded (recommended) + +Node metadata format: +--------------------- + +Sign metadata: + u16 string_len + u8[string_len] string + +Furnace metadata: + TBD + +Chest metadata: + TBD + +Locking Chest metadata: + u16 string_len + u8[string_len] string + TBD + +// END + diff --git a/fonts/DroidSansFallbackFull.ttf b/fonts/DroidSansFallbackFull.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a9df00585a4e44cf91238b7b31385e7e36e1dea7 GIT binary patch literal 4529044 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¥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⪚cx~6afie1aM&FVyTjqNxWi$0IDCY2A^Cnf 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

<{RoW5FofFrW|S@A3sGkFN*0 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%0ALkc)T^iT&Ri48db%>N&BHClyk1(aSaDuId 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

mjBU)H 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≻+MylWe5l^qM;m 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

emYMX=w58|ze#0^YPf#n14GJ+(7u;JkZd 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

{n8w|d$+x$v~b3I?t-_G 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

mLMOhe9=D)q3tG*> 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�%U+>JX(a$trxuKP!9?uJN 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