Compare commits

..

334 Commits
0.4.5 ... 0.4.7

Author SHA1 Message Date
PilzAdam
6b3e553dd5 Bump version to 0.4.7 2013-06-06 17:14:26 +00:00
PilzAdam
bfa608b85e Revert "Fix multiple texture support for animated meshnodes." (broke existing models)
This reverts commit 649dca4d16.
2013-06-06 17:13:41 +00:00
Esteban I. Ruiz Moreno
7cb5217255 Close console when it loses focus but it is still on screen 2013-06-05 21:14:14 +02:00
Kahrl
4f6bec19bc Only add ^[forcesingle to get raw texture if atlas is used 2013-06-04 07:44:19 +02:00
stujones11
649dca4d16 Fix multiple texture support for animated meshnodes. 2013-06-03 23:31:08 +02:00
sweetbomber
601ab85226 Corrected segfault when registering new biomes. 2013-06-03 20:35:51 +02:00
Kahrl
e988df0fbd Add and implement setting max_clearobjects_extra_loaded_blocks.
Now Environment::clearAllObjects() unloads unused blocks in an interval
defined by max_clearobjects_extra_loaded_blocks (default 4096).
2013-06-03 20:09:32 +02:00
Kahrl
b89c79e905 Delay deleting replaced textures (m_texture_trash) 2013-06-03 15:50:14 +02:00
Kahrl
9fe74a34ea Call m_menumgr->deletingMenu from quitMenu in addition to destructor
This fixes the bug where noMenuActive() keeps returning false after
closing a menu until the mouse is moved, rendering the keyboard
unusable (the_game calls input->clear() every frame when
noMenuActive() is false).
2013-06-03 15:25:48 +02:00
bcnjr5
64befefcfc Add Code::Blocks project and build files to .gitignore 2013-06-03 04:30:59 +02:00
Kahrl
6f9d384311 Replace c55.me links 2013-06-03 01:57:42 +02:00
sapier
c25102a4f7 Fix missing find_path and line_of_sight 2013-06-01 15:07:43 +02:00
MetaDucky
c893958bb1 Fix some nullptr exceptions when handling invalid node inventories 2013-06-01 14:45:43 +02:00
Ilya Zhuravlev
db9c86d6c1 Translated using Weblate (French) 2013-06-01 13:23:00 +02:00
Weblate
1dfc2e02b3 Merge remote-tracking branch 'origin/master' 2013-06-01 13:18:52 +02:00
Frederico Guimarães
ec039a3d12 Translated using Weblate (Portuguese (Brazil)) 2013-06-01 13:18:42 +02:00
v c
77acdfed43 Translated using Weblate (Portuguese) 2013-06-01 13:18:42 +02:00
Chynggyz Jumaliev
926a47f35b Translated using Weblate (Kirghiz) 2013-06-01 13:18:42 +02:00
Pilz Adam
df2f4168e5 Translated using Weblate (German) 2013-06-01 13:18:41 +02:00
Shen Zheyu
fe560d81e7 Translated using Weblate (Chinese (China)) 2013-06-01 13:18:41 +02:00
MetaDucky
64627817fc Fix minetest.get_inventory(loc) always returning nil for "node" type loc 2013-06-01 12:15:11 +02:00
MetaDucky
a61aa6690b Fix editbox default text being pre-selected in some cases 2013-06-01 01:59:48 +02:00
Kahrl
7721948a2f Generate debug HUD text with ostringstream instead of snprintf.
This should fix #730.
2013-06-01 01:50:08 +02:00
proller
6b2c46c431 Liquid adjusting: continue to drop 2013-05-31 22:59:09 +04:00
manuel joaquim
83f1d7cd9e Translated using Weblate (Portuguese) 2013-05-30 00:03:27 +02:00
manuel duarte
13f7049d84 Translated using Weblate (Portuguese) 2013-05-29 01:32:19 +02:00
manuel duarte
503e61cf2b Translated using Weblate (Portuguese) 2013-05-29 01:31:47 +02:00
sapier
efc75db764 Bugfix: Update formname on showing new formspec while already one shown 2013-05-26 01:45:46 +02:00
MetaDucky
f62ddf9022 Fixed wrongly named invref:get_location() table members for nodes.
Makes the result compatible with the minetest.get_inventory(location) param.
2013-05-26 00:35:11 +02:00
Kahrl
96fe1de832 Add ObjectRef.hud_set_hotbar_itemcount and add TOCLIENT_HUD_SET_PARAM 2013-05-26 00:23:33 +02:00
PilzAdam
730d316efe Higher resolution menuheader 2013-05-25 20:12:51 +02:00
sapier
e464f19356 Fix itemstack:add item not working correct 2013-05-25 19:23:10 +02:00
sapier
ab43377577 Move scriptapi to separate folder (by sapier)
On the lua side, notably minetest.env:<function>(<args>) should now
be replaced by minetest.<function>(<args>).
The old way is and will stay supported for a long time.

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

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

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

Make necessary changes for split, rename files, reorganize some bits
2013-03-05 00:59:49 -05:00
Weblate
75a8312f4e Merge remote branch 'origin/master' 2013-03-01 17:13:22 +01:00
Mitori Itoshiki
48b999a8dd Translated using Weblate (Japanese) 2013-03-01 17:13:14 +01:00
266 changed files with 33396 additions and 18191 deletions

18
.gitignore vendored
View File

@@ -4,13 +4,16 @@
*bak*
tags
*.vim
*.orig
*.rej
## Non-static Minetest directories
/bin/
/games/*
!/games/minimal/
/cache/
/textures/
/textures/*
!/textures/base/
/sounds/
/mods/*
!/mods/minetest/
@@ -29,11 +32,17 @@ src/CMakeFiles/*
src/Makefile
src/cmake_config.h
src/cmake_install.cmake
src/script/CMakeFiles/*
src/script/common/CMakeFiles/*
src/script/cpp_api/CMakeFiles/*
src/script/lua_api/CMakeFiles/*
src/util/CMakeFiles/*
src/jthread/CMakeFiles/*
src/jthread/Makefile
src/jthread/cmake_config.h
src/jthread/cmake_install.cmake
src/jthread/libjthread.a
src/json/libjson.a
src/lua/build/
src/lua/CMakeFiles/
src/cguittfont/CMakeFiles/
@@ -41,11 +50,16 @@ src/cguittfont/libcguittfont.a
src/cguittfont/cmake_install.cmake
src/cguittfont/Makefile
src/json/CMakeFiles/
src/json/libjson.a
src/json/libjsoncpp.a
src/sqlite/CMakeFiles/*
src/sqlite/libsqlite3.a
CMakeCache.txt
CPackConfig.cmake
CPackSourceConfig.cmake
Makefile
cmake_install.cmake
locale/
*.cbp
*.layout
*.o

View File

@@ -12,7 +12,7 @@ set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Also remember to set PROTOCOL_VERSION in clientserver.h when releasing
set(VERSION_MAJOR 0)
set(VERSION_MINOR 4)
set(VERSION_PATCH 5)
set(VERSION_PATCH 7)
if(VERSION_EXTRA)
set(VERSION_PATCH ${VERSION_PATCH}-${VERSION_EXTRA})
endif()
@@ -85,7 +85,7 @@ elseif(UNIX) # Linux, BSD etc
set(EXAMPLE_CONF_DIR ${DOCDIR})
set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale")
set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale")
endif()
endif()
@@ -138,13 +138,14 @@ 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/minetest/mods_here.txt" DESTINATION "${SHAREDIR}/mods/minetest")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/mods/mods_here.txt" DESTINATION "${SHAREDIR}/mods")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/textures/all/textures_here.txt" DESTINATION "${SHAREDIR}/textures/all")
endif()

View File

@@ -29,13 +29,17 @@ This game is not finished
Default Controls
-----------------
- WASD: Move
- Space: Jump
- E: Go down
- Shift: Sneak
- Q: Drop item
- I: Open inventory
- Mouse: Turn/look
- WASD: move
- Space: jump/climb
- Shift: sneak/go down
- Q: drop item
- I: inventory
- Mouse: turn/look
- Mouse left: dig/punch
- Mouse right: place/use
- Mouse wheel: select item
- Esc: pause menu
- T: chat
- Settable in the configuration file, see the section below.
Paths
@@ -80,7 +84,7 @@ Compiling on GNU/Linux:
-----------------------
Install dependencies. Here's an example for Debian/Ubuntu:
$ apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev
$ apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev
Download source, extract (this is the URL to the latest of source repository, which might not work at all times):
$ wget https://github.com/minetest/minetest/tarball/master -O master.tar.gz
@@ -89,8 +93,8 @@ $ cd minetest-minetest-286edd4 (or similar)
Download minetest_game (otherwise only the "Minimal development test" game is available)
$ cd games/
$ wget https://github.com/minetest/minetest_game/tarball/master -O master.tar.gz
$ tar xf master.tar.gz
$ wget https://github.com/minetest/minetest_game/tarball/master -O minetest_game.tar.gz
$ tar xf minetest_game.tar.gz
$ mv minetest-minetest_game-* minetest_game
$ cd ..
@@ -107,6 +111,7 @@ $ ./minetest
- You can build a bare server or a bare client by specifying -DBUILD_CLIENT=0 or -DBUILD_SERVER=0
- You can select between Release and Debug build by -DCMAKE_BUILD_TYPE=<Debug or Release>
- 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
Compiling on Windows:
---------------------
@@ -254,6 +259,20 @@ distribution.
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/
Authors of media files
-----------------------
Everything not listed in here:
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
BlockMen:
textures/base/pack/menuheader.png
erlehmann:
misc/minetest-icon-24x24.png
misc/minetest-icon.ico
misc/minetest-icon.svg
textures/base/pack/logo.png
License of Minetest source code
-------------------------------
@@ -268,7 +287,7 @@ the Free Software Foundation; either version 2.1 of the License, or
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,

View File

@@ -24,4 +24,5 @@ dofile(minetest.get_modpath("__builtin").."/chatcommands.lua")
dofile(minetest.get_modpath("__builtin").."/static_spawn.lua")
dofile(minetest.get_modpath("__builtin").."/detached_inventory.lua")
dofile(minetest.get_modpath("__builtin").."/falling.lua")
dofile(minetest.get_modpath("__builtin").."/features.lua")

View File

@@ -116,6 +116,9 @@ minetest.register_chatcommand("grant", {
if not grantname or not grantprivstr then
minetest.chat_send_player(name, "Invalid parameters (see /help grant)")
return
elseif not minetest.auth_table[grantname] then
minetest.chat_send_player(name, "Player "..grantname.." does not exist.")
return
end
local grantprivs = minetest.string_to_privs(grantprivstr)
if grantprivstr == "all" then
@@ -159,6 +162,9 @@ minetest.register_chatcommand("revoke", {
if not revokename or not revokeprivstr then
minetest.chat_send_player(name, "Invalid parameters (see /help revoke)")
return
elseif not minetest.auth_table[revokename] then
minetest.chat_send_player(name, "Player "..revokename.." does not exist.")
return
end
local revokeprivs = minetest.string_to_privs(revokeprivstr)
local privs = minetest.get_player_privs(revokename)
@@ -255,7 +261,7 @@ minetest.register_chatcommand("teleport", {
}
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 = minetest.env:get_node(p)
local n = minetest.get_node(p)
if not minetest.registered_nodes[n.name].walkable then
return p, true
end
@@ -266,7 +272,7 @@ minetest.register_chatcommand("teleport", {
local teleportee = nil
local p = {}
p.x, p.y, p.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
teleportee = minetest.env:get_player_by_name(name)
teleportee = minetest.get_player_by_name(name)
if teleportee and p.x and p.y and p.z then
minetest.chat_send_player(name, "Teleporting to ("..p.x..", "..p.y..", "..p.z..")")
teleportee:setpos(p)
@@ -277,9 +283,9 @@ minetest.register_chatcommand("teleport", {
local p = nil
local target_name = nil
target_name = string.match(param, "^([^ ]+)$")
teleportee = minetest.env:get_player_by_name(name)
teleportee = minetest.get_player_by_name(name)
if target_name then
local target = minetest.env:get_player_by_name(target_name)
local target = minetest.get_player_by_name(target_name)
if target then
p = target:getpos()
end
@@ -297,7 +303,7 @@ minetest.register_chatcommand("teleport", {
local teleportee_name = nil
teleportee_name, p.x, p.y, p.z = string.match(param, "^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
if teleportee_name then
teleportee = minetest.env:get_player_by_name(teleportee_name)
teleportee = minetest.get_player_by_name(teleportee_name)
end
if teleportee and p.x and p.y and p.z then
minetest.chat_send_player(name, "Teleporting "..teleportee_name.." to ("..p.x..", "..p.y..", "..p.z..")")
@@ -311,10 +317,10 @@ minetest.register_chatcommand("teleport", {
local target_name = nil
teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$")
if teleportee_name then
teleportee = minetest.env:get_player_by_name(teleportee_name)
teleportee = minetest.get_player_by_name(teleportee_name)
end
if target_name then
local target = minetest.env:get_player_by_name(target_name)
local target = minetest.get_player_by_name(target_name)
if target then
p = target:getpos()
end
@@ -396,7 +402,7 @@ local function handle_give_command(cmd, giver, receiver, stackstring)
minetest.chat_send_player(giver, 'error: cannot give an unknown item')
return
end
local receiverref = minetest.env:get_player_by_name(receiver)
local receiverref = minetest.get_player_by_name(receiver)
if receiverref == nil then
minetest.chat_send_player(giver, receiver..' is not a known player')
return
@@ -460,14 +466,14 @@ minetest.register_chatcommand("spawnentity", {
return
end
print('/spawnentity invoked, entityname="'..entityname..'"')
local player = minetest.env:get_player_by_name(name)
local player = minetest.get_player_by_name(name)
if player == nil then
print("Unable to spawn entity, player is nil")
return true -- Handled chat message
end
local p = player:getpos()
p.y = p.y + 1
minetest.env:add_entity(p, entityname)
minetest.add_entity(p, entityname)
minetest.chat_send_player(name, '"'..entityname
..'" spawned.');
end,
@@ -477,7 +483,7 @@ minetest.register_chatcommand("pulverize", {
description = "delete item in hand",
privs = {},
func = function(name, param)
local player = minetest.env:get_player_by_name(name)
local player = minetest.get_player_by_name(name)
if player == nil then
print("Unable to pulverize, player is nil")
return true -- Handled chat message
@@ -527,7 +533,7 @@ minetest.register_chatcommand("rollback_check", {
if act_p.x ~= pos.x or act_p.y ~= pos.y or act_p.z ~= pos.z then
nodedesc = minetest.pos_to_string(act_p)
end
local nodename = minetest.env:get_node(act_p).name
local nodename = minetest.get_node(act_p).name
minetest.chat_send_player(name, "Last actor on "..nodedesc..
" was "..actor..", "..dump(act_seconds)..
"s ago (node is now "..nodename..")")
@@ -592,7 +598,7 @@ minetest.register_chatcommand("time", {
if newtime == nil then
minetest.chat_send_player(name, "Invalid time")
else
minetest.env:set_timeofday((newtime % 24000) / 24000)
minetest.set_timeofday((newtime % 24000) / 24000)
minetest.chat_send_player(name, "Time of day changed.")
minetest.log("action", name .. " sets time " .. newtime)
end
@@ -619,7 +625,7 @@ minetest.register_chatcommand("ban", {
minetest.chat_send_player(name, "Ban list: " .. minetest.get_ban_list())
return
end
if not minetest.env:get_player_by_name(param) then
if not minetest.get_player_by_name(param) then
minetest.chat_send_player(name, "No such player")
return
end
@@ -654,8 +660,28 @@ minetest.register_chatcommand("clearobjects", {
func = function(name, param)
minetest.log("action", name .. " clears all objects")
minetest.chat_send_all("Clearing all objects. This may take long. You may experience a timeout. (by " .. name .. ")")
minetest.env:clear_objects()
minetest.clear_objects()
minetest.log("action", "object clearing done")
minetest.chat_send_all("*** Cleared all objects.")
end,
})
minetest.register_chatcommand("msg", {
params = "<name> <message>",
description = "Send a private message",
privs = {shout=true},
func = function(name, param)
local found, _, sendto, message = param:find("^([^%s]+)%s(.+)$")
if found then
if minetest.get_player_by_name(sendto) then
minetest.log("action", "PM from "..name.." to "..sendto..": "..message)
minetest.chat_send_player(sendto, "PM from "..name..": "..message, false)
minetest.chat_send_player(name, "Message sent")
else
minetest.chat_send_player(name, "The player "..sendto.." is not online")
end
else
minetest.chat_send_player(name, "Invalid usage, see /help msg")
end
end,
})

View File

@@ -24,3 +24,25 @@ minetest.add_to_creative_inventory = function(itemstring)
minetest.log('info', "WARNING: minetest.add_to_creative_inventory: This function is deprecated and does nothing.")
end
--
-- EnvRef
--
minetest.env = {}
local envref_deprecation_message_printed = false
setmetatable(minetest.env, {
__index = function(table, key)
if not envref_deprecation_message_printed then
minetest.log("info", "WARNING: minetest.env:[...] is deprecated and should be replaced with minetest.[...]")
envref_deprecation_message_printed = true
end
local func = minetest[key]
if type(func) == "function" then
rawset(table, key, function(self, ...)
return func(unpack({...}))
end)
else
rawset(table, key, nil)
end
return rawget(table, key)
end
})

View File

@@ -53,23 +53,27 @@ minetest.register_entity("__builtin:falling_node", {
-- 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 = minetest.env:get_node(bcp)
local bcn = minetest.get_node(bcp)
-- Note: walkable is in the node definition, not in item groups
if minetest.registered_nodes[bcn.name] and
minetest.registered_nodes[bcn.name].walkable then
if minetest.registered_nodes[bcn.name].buildable_to then
minetest.remove_node(bcp)
return
end
local np = {x=bcp.x, y=bcp.y+1, z=bcp.z}
-- Check what's here
local n2 = minetest.env:get_node(np)
local n2 = minetest.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 minetest.registered_nodes[n2.name] or
minetest.registered_nodes[n2.name].liquidtype == "none") then
local drops = minetest.get_node_drops(n2.name, "")
minetest.env:remove_node(np)
minetest.remove_node(np)
-- Add dropped items
local _, dropped_item
for _, dropped_item in ipairs(drops) do
minetest.env:add_item(np, dropped_item)
minetest.add_item(np, dropped_item)
end
-- Run script hook
local _, callback
@@ -78,8 +82,9 @@ minetest.register_entity("__builtin:falling_node", {
end
end
-- Create node and remove entity
minetest.env:add_node(np, {name=self.nodename})
minetest.add_node(np, {name=self.nodename})
self.object:remove()
nodeupdate(np)
else
-- Do nothing
end
@@ -87,20 +92,20 @@ minetest.register_entity("__builtin:falling_node", {
})
function spawn_falling_node(p, nodename)
obj = minetest.env:add_entity(p, "__builtin:falling_node")
obj = minetest.add_entity(p, "__builtin:falling_node")
obj:get_luaentity():set_node(nodename)
end
function drop_attached_node(p)
local nn = minetest.env:get_node(p).name
minetest.env:remove_node(p)
local nn = minetest.get_node(p).name
minetest.remove_node(p)
for _,item in ipairs(minetest.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,
}
minetest.env:add_item(pos, item)
minetest.add_item(pos, item)
end
end
@@ -125,7 +130,7 @@ function check_attached_node(p, n)
d.y = -1
end
local p2 = {x=p.x+d.x, y=p.y+d.y, z=p.z+d.z}
local nn = minetest.env:get_node(p2).name
local nn = minetest.get_node(p2).name
local def2 = minetest.registered_nodes[nn]
if def2 and not def2.walkable then
return false
@@ -137,17 +142,22 @@ end
-- Some common functions
--
function nodeupdate_single(p)
n = minetest.env:get_node(p)
function nodeupdate_single(p, delay)
n = minetest.get_node(p)
if minetest.get_node_group(n.name, "falling_node") ~= 0 then
p_bottom = {x=p.x, y=p.y-1, z=p.z}
n_bottom = minetest.env:get_node(p_bottom)
n_bottom = minetest.get_node(p_bottom)
-- Note: walkable is in the node definition, not in item groups
if minetest.registered_nodes[n_bottom.name] and
not minetest.registered_nodes[n_bottom.name].walkable then
minetest.env:remove_node(p)
spawn_falling_node(p, n.name)
nodeupdate(p)
(not minetest.registered_nodes[n_bottom.name].walkable or
minetest.registered_nodes[n_bottom.name].buildable_to) then
if delay then
minetest.after(0.1, nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
else
minetest.remove_node(p)
spawn_falling_node(p, n.name)
nodeupdate(p)
end
end
end
@@ -168,8 +178,7 @@ function nodeupdate(p)
for x = -1,1 do
for y = -1,1 do
for z = -1,1 do
p2 = {x=p.x+x, y=p.y+y, z=p.z+z}
nodeupdate_single(p2)
nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, not (x==0 and y==0 and z==0))
end
end
end

28
builtin/features.lua Normal file
View File

@@ -0,0 +1,28 @@
-- Minetest: builtin/features.lua
minetest.features = {
glasslike_framed = true,
nodebox_as_selectionbox = true,
chat_send_player_param3 = true,
get_all_craft_recipes_works = true,
use_texture_alpha = true,
}
function minetest.has_feature(arg)
if type(arg) == "table" then
missing_features = {}
result = true
for ft, _ in pairs(arg) do
if not minetest.features[ftr] then
missing_features[ftr] = true
result = false
end
end
return result, missing_features
elseif type(arg) == "string" then
if not minetest.features[arg] then
return false, {[arg]=true}
end
return true, {}
end
end

View File

@@ -129,11 +129,18 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
end
local under = pointed_thing.under
local oldnode_under = minetest.env:get_node(under)
local oldnode_under = minetest.get_node_or_nil(under)
local above = pointed_thing.above
local oldnode_above = minetest.get_node_or_nil(above)
if not oldnode_under or not oldnode_above then
minetest.log("info", placer:get_player_name() .. " tried to place"
.. " node in unloaded position " .. minetest.pos_to_string(above))
return itemstack
end
local olddef_under = ItemStack({name=oldnode_under.name}):get_definition()
olddef_under = olddef_under or minetest.nodedef_default
local above = pointed_thing.above
local oldnode_above = minetest.env:get_node(above)
local olddef_above = ItemStack({name=oldnode_above.name}):get_definition()
olddef_above = olddef_above or minetest.nodedef_default
@@ -156,7 +163,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
minetest.log("action", placer:get_player_name() .. " places node "
.. def.name .. " at " .. minetest.pos_to_string(place_to))
local oldnode = minetest.env:get_node(place_to)
local oldnode = minetest.get_node(place_to)
local newnode = {name = def.name, param1 = 0, param2 = 0}
-- Calculate direction for wall mounted stuff like torches and signs
@@ -190,7 +197,7 @@ function minetest.item_place_node(itemstack, placer, pointed_thing)
end
-- Add node and update
minetest.env:add_node(place_to, newnode)
minetest.add_node(place_to, newnode)
local take_item = true
@@ -225,7 +232,7 @@ function minetest.item_place_object(itemstack, placer, pointed_thing)
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
if pos ~= nil then
local item = itemstack:take_item()
minetest.env:add_item(pos, item)
minetest.add_item(pos, item)
end
return itemstack
end
@@ -234,10 +241,10 @@ function minetest.item_place(itemstack, placer, pointed_thing)
-- 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 = minetest.env:get_node(pointed_thing.under)
local n = minetest.get_node(pointed_thing.under)
local nn = n.name
if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, placer, itemstack)
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, placer, itemstack) or itemstack
end
end
@@ -251,7 +258,7 @@ function minetest.item_drop(itemstack, dropper, pos)
if dropper.get_player_name then
local v = dropper:get_look_dir()
local p = {x=pos.x+v.x, y=pos.y+1.5+v.y, z=pos.z+v.z}
local obj = minetest.env:add_item(p, itemstack)
local obj = minetest.add_item(p, itemstack)
if obj then
v.x = v.x*2
v.y = v.y*2 + 1
@@ -259,7 +266,7 @@ function minetest.item_drop(itemstack, dropper, pos)
obj:setvelocity(v)
end
else
minetest.env:add_item(pos, itemstack)
minetest.add_item(pos, itemstack)
end
return ItemStack("")
end
@@ -297,7 +304,7 @@ function minetest.handle_node_drops(pos, drops, digger)
y = pos.y + math.random()/2-0.25,
z = pos.z + math.random()/2-0.25,
}
minetest.env:add_item(p, left)
minetest.add_item(p, left)
end
end
end
@@ -333,11 +340,11 @@ function minetest.node_dig(pos, node, digger)
local oldmetadata = nil
if def.after_dig_node then
oldmetadata = minetest.env:get_meta(pos):to_table()
oldmetadata = minetest.get_meta(pos):to_table()
end
-- Remove node and update
minetest.env:remove_node(pos)
minetest.remove_node(pos)
-- Run callback
if def.after_dig_node then

View File

@@ -3,7 +3,7 @@
function minetest.spawn_item(pos, item)
-- Take item in any format
local stack = ItemStack(item)
local obj = minetest.env:add_entity(pos, "__builtin:item")
local obj = minetest.add_entity(pos, "__builtin:item")
obj:get_luaentity():set_item(stack:to_string())
return obj
end
@@ -83,7 +83,7 @@ minetest.register_entity("__builtin:item", {
on_step = function(self, dtime)
local p = self.object:getpos()
p.y = p.y - 0.3
local nn = minetest.env:get_node(p).name
local nn = minetest.get_node(p).name
-- If node is not registered or node is walkably solid and resting on nodebox
local v = self.object:getvelocity()
if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and v.y == 0 then

View File

@@ -14,14 +14,14 @@ minetest.register_globalstep(function(dtime)
for index, timer in ipairs(minetest.timers) do
timer.time = timer.time - dtime
if timer.time <= 0 then
timer.func(timer.param)
timer.func(unpack(timer.args or {}))
table.remove(minetest.timers,index)
end
end
end)
function minetest.after(time, func, param)
table.insert(minetest.timers_to_add, {time=time, func=func, param=param})
function minetest.after(time, func, ...)
table.insert(minetest.timers_to_add, {time=time, func=func, args={...}})
end
function minetest.check_player_privs(name, privs)
@@ -43,7 +43,7 @@ end
function minetest.get_connected_players()
-- This could be optimized a bit, but leave that for later
local list = {}
for _, obj in pairs(minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 1000000)) do
for _, obj in pairs(minetest.get_objects_inside_radius({x=0,y=0,z=0}, 1000000)) do
if obj:is_player() then
table.insert(list, obj)
end
@@ -99,3 +99,10 @@ function minetest.setting_get_pos(name)
return minetest.string_to_pos(value)
end
function minetest.formspec_escape(str)
str = string.gsub(str, "\\", "\\\\")
str = string.gsub(str, "%[", "\\[")
str = string.gsub(str, "%]", "\\]")
return str
end

View File

@@ -103,6 +103,10 @@ function minetest.register_item(name, itemdef)
-- 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
end
setmetatable(itemdef, {__index = minetest.nodedef_default})
minetest.registered_nodes[itemdef.name] = itemdef
elseif itemdef.type == "craft" then
@@ -249,8 +253,8 @@ minetest.register_item(":unknown", {
minetest.register_node(":air", {
description = "Air (you hacker you!)",
inventory_image = "unknown_block.png",
wield_image = "unknown_block.png",
inventory_image = "unknown_node.png",
wield_image = "unknown_node.png",
drawtype = "airlike",
paramtype = "light",
sunlight_propagates = true,
@@ -265,8 +269,8 @@ minetest.register_node(":air", {
minetest.register_node(":ignore", {
description = "Ignore (you hacker you!)",
inventory_image = "unknown_block.png",
wield_image = "unknown_block.png",
inventory_image = "unknown_node.png",
wield_image = "unknown_node.png",
drawtype = "airlike",
paramtype = "none",
sunlight_propagates = false,

View File

@@ -197,7 +197,7 @@ local function unit_test()
unitTest("test 1b", unittest_input.cat.speed == unittest_output.cat.speed)
unitTest("test 1c", unittest_input.dog.sound == unittest_output.dog.sound)
unittest_input = {escapechars="\n\r\t\v\\\"\'\[\]", noneuropean="θשׁ٩∂"}
unittest_input = {escapechars="\n\r\t\v\\\"\'", noneuropean="θשׁ٩∂"}
unittest_output = minetest.deserialize(minetest.serialize(unittest_input))
unitTest("test 3a", unittest_input.escapechars == unittest_output.escapechars)
unitTest("test 3b", unittest_input.noneuropean == unittest_output.noneuropean)

View File

@@ -8,9 +8,7 @@ varying vec3 vPosition;
void main(void)
{
vec4 pos = gl_Vertex;
pos.y -= 2.0;
gl_Position = mWorldViewProj * pos;
gl_Position = mWorldViewProj * gl_Vertex;
vPosition = (mWorldViewProj * gl_Vertex).xyz;

View File

@@ -0,0 +1 @@
trans_alphach

View File

@@ -0,0 +1,25 @@
uniform sampler2D myTexture;
uniform float fogDistance;
varying vec3 vPosition;
void main (void)
{
vec4 col = texture2D(myTexture, vec2(gl_TexCoord[0]));
col *= gl_Color;
float a = col.a;
col = col * col; // SRGB -> Linear
col *= 1.8;
col.r = 1.0 - exp(1.0 - col.r) / exp(1.0);
col.g = 1.0 - exp(1.0 - col.g) / exp(1.0);
col.b = 1.0 - exp(1.0 - col.b) / exp(1.0);
col = sqrt(col); // Linear -> SRGB
if(fogDistance != 0.0){
float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0));
a = mix(a, 0.0, d);
}
gl_FragColor = vec4(col.r, col.g, col.b, a);
}

View File

@@ -0,0 +1,51 @@
uniform mat4 mWorldViewProj;
uniform mat4 mInvWorld;
uniform mat4 mTransWorld;
uniform float dayNightRatio;
varying vec3 vPosition;
void main(void)
{
gl_Position = mWorldViewProj * gl_Vertex;
vPosition = (mWorldViewProj * gl_Vertex).xyz;
vec4 color;
//color = vec4(1.0, 1.0, 1.0, 1.0);
float day = gl_Color.r;
float night = gl_Color.g;
float light_source = gl_Color.b;
/*color.r = mix(night, day, dayNightRatio);
color.g = color.r;
color.b = color.r;*/
float rg = mix(night, day, dayNightRatio);
rg += light_source * 1.0; // Make light sources brighter
float b = rg;
// Moonlight is blue
b += (day - night) / 13.0;
rg -= (day - night) / 13.0;
// Emphase blue a bit in darker places
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
b += max(0.0, (1.0 - abs(b - 0.13)/0.17) * 0.025);
// Artificial light is yellow-ish
// See C++ implementation in mapblock_mesh.cpp finalColorBlend()
rg += max(0.0, (1.0 - abs(rg - 0.85)/0.15) * 0.065);
color.r = rg;
color.g = rg;
color.b = b;
color.a = gl_Color.a;
gl_FrontColor = gl_BackColor = color;
gl_TexCoord[0] = gl_MultiTexCoord0;
}

View File

@@ -2,17 +2,17 @@
#FIND_PATH(JSON_INCLUDE_DIR json.h)
#FIND_LIBRARY(JSON_LIBRARY NAMES json)
#FIND_LIBRARY(JSON_LIBRARY NAMES jsoncpp)
#IF(JSON_LIBRARY AND JSON_INCLUDE_DIR)
# SET( JSON_FOUND TRUE )
#ENDIF(JSON_LIBRARY AND JSON_INCLUDE_DIR)
#IF(JSON_FOUND)
# MESSAGE(STATUS "Found system json header file in ${JSON_INCLUDE_DIR}")
# MESSAGE(STATUS "Found system json library ${JSON_LIBRARY}")
# MESSAGE(STATUS "Found system jsoncpp header file in ${JSON_INCLUDE_DIR}")
# MESSAGE(STATUS "Found system jsoncpp library ${JSON_LIBRARY}")
#ELSE(JSON_FOUND)
SET(JSON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/json)
SET(JSON_LIBRARY json)
MESSAGE(STATUS "Using project json library")
SET(JSON_LIBRARY jsoncpp)
MESSAGE(STATUS "Using project jsoncpp library")
#ENDIF(JSON_FOUND)

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -61,6 +61,9 @@ Run dedicated server
\-\-speedtests
Run speed tests
.TP
\-\-videomodes
List available video modes
.TP
\-\-info
Print more information to console
.TP
@@ -85,7 +88,7 @@ This man page was originally written by
Juhani Numminen <juhaninumminen0@gmail.com>.
.SH WWW
http://c55.me/minetest/
http://www.minetest.net/
.SH "SEE ALSO"
.BR minetestserver(6)

View File

@@ -64,7 +64,7 @@ This man page was originally written by
Juhani Numminen <juhaninumminen0@gmail.com>.
.SH WWW
http://c55.me/minetest/
http://www.minetest.net/
.SH "SEE ALSO"
.BR minetest(6)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
games/minimal/menu/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

View File

@@ -41,13 +41,13 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image)
return
end
-- Check if pointing to a liquid
n = minetest.env:get_node(pointed_thing.under)
n = minetest.get_node(pointed_thing.under)
if bucket.liquids[n.name] == nil then
-- Not a liquid
minetest.env:add_node(pointed_thing.above, {name=source})
minetest.add_node(pointed_thing.above, {name=source})
elseif n.name ~= source then
-- It's a liquid
minetest.env:add_node(pointed_thing.under, {name=source})
minetest.add_node(pointed_thing.under, {name=source})
end
return {name="bucket:bucket_empty"}
end
@@ -65,10 +65,10 @@ minetest.register_craftitem("bucket:bucket_empty", {
return
end
-- Check if pointing to a liquid source
n = minetest.env:get_node(pointed_thing.under)
n = minetest.get_node(pointed_thing.under)
liquiddef = bucket.liquids[n.name]
if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
minetest.env:add_node(pointed_thing.under, {name="air"})
minetest.add_node(pointed_thing.under, {name="air"})
return {name=liquiddef.itemname}
end
end,

View File

@@ -659,6 +659,8 @@ function default.node_sound_dirt_defaults(table)
{name="", gain=0.5}
--table.dug = table.dug or
-- {name="default_dirt_break", gain=0.5}
table.place = table.place or
{name="default_grass_footstep", gain=0.5}
default.node_sound_defaults(table)
return table
end
@@ -739,7 +741,7 @@ minetest.register_node("default:dirt_with_grass", {
description = "Dirt with grass",
tiles ={"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
is_ground_content = true,
groups = {crumbly=3},
groups = {crumbly=3, soil=1},
drop = 'default:dirt',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
@@ -750,7 +752,7 @@ minetest.register_node("default:dirt_with_grass_footsteps", {
description = "Dirt with grass and footsteps",
tiles ={"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
is_ground_content = true,
groups = {crumbly=3},
groups = {crumbly=3, soil=1},
drop = 'default:dirt',
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
@@ -761,7 +763,7 @@ minetest.register_node("default:dirt", {
description = "Dirt",
tiles ={"default_dirt.png"},
is_ground_content = true,
groups = {crumbly=3},
groups = {crumbly=3, soil=1},
sounds = default.node_sound_dirt_defaults(),
})
@@ -1131,14 +1133,14 @@ minetest.register_node("default:sign_wall", {
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
on_construct = function(pos)
--local n = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
--local n = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "field[text;;${text}]")
meta:set_string("infotext", "\"\"")
end,
on_receive_fields = function(pos, formname, fields, sender)
--print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields))
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
fields.text = fields.text or ""
print((sender:get_player_name() or "").." wrote \""..fields.text..
"\" to sign at "..minetest.pos_to_string(pos))
@@ -1156,7 +1158,7 @@ minetest.register_node("default:chest", {
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec",
"size[8,9]"..
"list[current_name;main;0,0;8,4;]"..
@@ -1166,7 +1168,7 @@ minetest.register_node("default:chest", {
inv:set_size("main", 8*4)
end,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
@@ -1188,13 +1190,13 @@ minetest.register_node("default:chest_locked", {
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name() or "")
meta:set_string("infotext", "Locked Chest (owned by "..
meta:get_string("owner")..")")
end,
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec",
"size[8,9]"..
"list[current_name;main;0,0;8,4;]"..
@@ -1205,12 +1207,12 @@ minetest.register_node("default:chest_locked", {
inv:set_size("main", 8*4)
end,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
@@ -1221,7 +1223,7 @@ minetest.register_node("default:chest_locked", {
return count
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
@@ -1232,7 +1234,7 @@ minetest.register_node("default:chest_locked", {
return stack:get_count()
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
@@ -1273,7 +1275,7 @@ minetest.register_node("default:furnace", {
legacy_facedir_simple = true,
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", default.furnace_inactive_formspec)
meta:set_string("infotext", "Furnace")
local inv = meta:get_inventory()
@@ -1282,7 +1284,7 @@ minetest.register_node("default:furnace", {
inv:set_size("dst", 4)
end,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
if not inv:is_empty("fuel") then
return false
@@ -1306,7 +1308,7 @@ minetest.register_node("default:furnace_active", {
legacy_facedir_simple = true,
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", default.furnace_inactive_formspec)
meta:set_string("infotext", "Furnace");
local inv = meta:get_inventory()
@@ -1315,7 +1317,7 @@ minetest.register_node("default:furnace_active", {
inv:set_size("dst", 4)
end,
can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local meta = minetest.get_meta(pos);
local inv = meta:get_inventory()
if not inv:is_empty("fuel") then
return false
@@ -1329,16 +1331,16 @@ minetest.register_node("default:furnace_active", {
})
function hacky_swap_node(pos,name)
local node = minetest.env:get_node(pos)
local meta = minetest.env:get_meta(pos)
local node = minetest.get_node(pos)
local meta = minetest.get_meta(pos)
local meta0 = meta:to_table()
if node.name == name then
return
end
node.name = name
local meta0 = meta:to_table()
minetest.env:set_node(pos,node)
meta = minetest.env:get_meta(pos)
minetest.set_node(pos,node)
meta = minetest.get_meta(pos)
meta:from_table(meta0)
end
@@ -1347,7 +1349,7 @@ minetest.register_abm({
interval = 1.0,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
for i, name in ipairs({
"fuel_totaltime",
"fuel_time",
@@ -1586,99 +1588,6 @@ minetest.register_alias("mapgen_stone_with_coal", "default:stone_with_coal")
minetest.register_alias("mapgen_stone_with_iron", "default:stone_with_iron")
minetest.register_alias("mapgen_mese", "default:mese")
minetest.register_biome_groups({
0.35, 0.10, 0.30
})
--
-- Register the biomes for the map generator
--
minetest.register_biome({
group_id = 0,
name = "Ocean",
terrain_type = "liquid",
node_top = "default:gravel",
node_filler = "default:stone",
num_top_nodes = 4,
height_min = -3000,
height_max = 3000,
heat_min = -20.0,
heat_max = 100.0,
humidity_min = 0.0,
humidity_max = 100.0,
scale = 10.0,
offset = -10.0,
})
minetest.register_biome({
group_id = 1,
name = "Beach",
terrain_type = "normal",
node_top = "default:sand",
node_filler = "default:stone",
num_top_nodes = 5,
height_min = -3000,
height_max = 3000,
heat_min = 5.0,
heat_max = 100.0,
humidity_min = 0.0,
humidity_max = 100.0,
scale = 5.0,
offset = 5.0,
})
minetest.register_biome({
group_id = 1,
name = "Gravel Beach",
terrain_type = "normal",
node_top = "default:gravel",
node_filler = "default:cobble",
num_top_nodes = 5,
height_min = -3000,
height_max = 3000,
heat_min = -50.0,
heat_max = 5.0,
humidity_min = 0.0,
humidity_max = 100.0,
scale = 5.0,
offset = 5.0,
})
minetest.register_biome({
group_id = 2,
name = "Land",
terrain_type = "normal",
node_top = "default:dirt_with_grass",
node_filler = "default:stone",
num_top_nodes = 5,
height_min = -3000,
height_max = 3000,
heat_min = -50.0,
heat_max = 100.0,
humidity_min = 0.0,
humidity_max = 100.0,
scale = 12.0,
offset = 20.0,
})
minetest.register_biome({
group_id = 3,
name = "Hills",
terrain_type = "normal",
node_top = "default:dirt",
node_filler = "default:stone",
num_top_nodes = 3,
height_min = -3000,
height_max = 3000,
heat_min = -50.0,
heat_max = 100.0,
humidity_min = 0.0,
humidity_max = 100.0,
scale = 60.0,
offset = 20.0,
})
-- Support old code
function default.spawn_falling_node(p, nodename)
spawn_falling_node(p, nodename)

View File

@@ -27,52 +27,74 @@ minetest.register_alias("mapgen_mese", "default:mese")
-- Ore generation
--
local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max, param2)
if maxp.y < height_min or minp.y > height_max then
return
end
local y_min = math.max(minp.y, height_min)
local y_max = math.min(maxp.y, height_max)
local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1)
local pr = PseudoRandom(seed)
local num_chunks = math.floor(chunks_per_volume * volume)
local chunk_size = 3
if ore_per_chunk <= 4 then
chunk_size = 2
end
local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk)
--print("generate_ore num_chunks: "..dump(num_chunks))
for i=1,num_chunks do
local y0 = pr:next(y_min, y_max-chunk_size+1)
if y0 >= height_min and y0 <= height_max then
local x0 = pr:next(minp.x, maxp.x-chunk_size+1)
local z0 = pr:next(minp.z, maxp.z-chunk_size+1)
local p0 = {x=x0, y=y0, z=z0}
for x1=0,chunk_size-1 do
for y1=0,chunk_size-1 do
for z1=0,chunk_size-1 do
if pr:next(1,inverse_chance) == 1 then
local x2 = x0+x1
local y2 = y0+y1
local z2 = z0+z1
local p2 = {x=x2, y=y2, z=z2}
if minetest.env:get_node(p2).name == wherein then
minetest.env:set_node(p2, {name=name, param2=param2})
end
end
end
end
end
end
end
--print("generate_ore done")
end
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_coal",
wherein = "default:stone",
clust_scarcity = 8*8*8,
clust_num_ores = 5,
clust_size = 3,
height_min = -31000,
height_max = 64,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 16*16*16,
clust_num_ores = 5,
clust_size = 3,
height_min = -5,
height_max = 7,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 12*12*12,
clust_num_ores = 5,
clust_size = 3,
height_min = -16,
height_max = -5,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 9*9*9,
clust_num_ores = 5,
clust_size = 3,
height_min = -31000,
height_max = -17,
})
-- for float islands and far scaled
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_coal",
wherein = "default:stone",
clust_scarcity = 8*8*8,
clust_num_ores = 5,
clust_size = 3,
height_min = 200,
height_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 9*9*9,
clust_num_ores = 5,
clust_size = 3,
height_min = 200,
height_max = 31000,
})
minetest.register_on_generated(function(minp, maxp, seed)
generate_ore("default:stone_with_coal", "default:stone", minp, maxp, seed, 1/8/8/8, 5, -31000, 64)
generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+1, 1/16/16/16, 5, -5, 7)
generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+2, 1/12/12/12, 5, -16, -5)
generate_ore("default:stone_with_iron", "default:stone", minp, maxp, seed+3, 1/9/9/9, 5, -31000, -17)
-- Generate clay
if maxp.y >= 2 and minp.y <= 0 then
-- Assume X and Z lengths are equal
@@ -82,17 +104,17 @@ minetest.register_on_generated(function(minp, maxp, seed)
for divz=0+1,divs-1-1 do
local cx = minp.x + math.floor((divx+0.5)*divlen)
local cz = minp.z + math.floor((divz+0.5)*divlen)
if minetest.env:get_node({x=cx,y=1,z=cz}).name == "default:water_source" and
minetest.env:get_node({x=cx,y=0,z=cz}).name == "default:sand" then
if minetest.get_node({x=cx,y=1,z=cz}).name == "default:water_source" and
minetest.get_node({x=cx,y=0,z=cz}).name == "default:sand" then
local is_shallow = true
local num_water_around = 0
if minetest.env:get_node({x=cx-divlen*2,y=1,z=cz+0}).name == "default:water_source" then
if minetest.get_node({x=cx-divlen*2,y=1,z=cz+0}).name == "default:water_source" then
num_water_around = num_water_around + 1 end
if minetest.env:get_node({x=cx+divlen*2,y=1,z=cz+0}).name == "default:water_source" then
if minetest.get_node({x=cx+divlen*2,y=1,z=cz+0}).name == "default:water_source" then
num_water_around = num_water_around + 1 end
if minetest.env:get_node({x=cx+0,y=1,z=cz-divlen*2}).name == "default:water_source" then
if minetest.get_node({x=cx+0,y=1,z=cz-divlen*2}).name == "default:water_source" then
num_water_around = num_water_around + 1 end
if minetest.env:get_node({x=cx+0,y=1,z=cz+divlen*2}).name == "default:water_source" then
if minetest.get_node({x=cx+0,y=1,z=cz+divlen*2}).name == "default:water_source" then
num_water_around = num_water_around + 1 end
if num_water_around >= 2 then
is_shallow = false
@@ -100,8 +122,8 @@ minetest.register_on_generated(function(minp, maxp, seed)
if is_shallow then
for x1=-divlen,divlen do
for z1=-divlen,divlen do
if minetest.env:get_node({x=cx+x1,y=0,z=cz+z1}).name == "default:sand" then
minetest.env:set_node({x=cx+x1,y=0,z=cz+z1}, {name="default:clay"})
if minetest.get_node({x=cx+x1,y=0,z=cz+z1}).name == "default:sand" then
minetest.set_node({x=cx+x1,y=0,z=cz+z1}, {name="default:clay"})
end
end
end
@@ -110,11 +132,5 @@ minetest.register_on_generated(function(minp, maxp, seed)
end
end
end
if minetest.setting_get("liquid_finite") then
generate_ore("default:water_source", "default:stone", minp, maxp, seed+42, 1/24/24/24, 4, -100, -10, 128)
generate_ore("default:water_source", "default:stone", minp, maxp, seed+42, 1/28/28/28, 3, -10000, -101, 128)
generate_ore("default:lava_source", "default:stone", minp, maxp, seed+43, 1/38/38/38, 2, -500, -100, 128)
generate_ore("default:lava_source", "default:stone", minp, maxp, seed+43, 1/30/30/30, 4, -31000, -501, 128)
end
end)

View File

@@ -28,10 +28,10 @@ minetest.after(1.0, switch_player_visual)
]]
minetest.register_node("experimental:soundblock", {
tile_images = {"unknown_block.png", "default_tnt_bottom.png",
tile_images = {"unknown_node.png", "default_tnt_bottom.png",
"default_tnt_side.png", "default_tnt_side.png",
"default_tnt_side.png", "default_tnt_side.png"},
inventory_image = minetest.inventorycube("unknown_block.png",
inventory_image = minetest.inventorycube("unknown_node.png",
"default_tnt_side.png", "default_tnt_side.png"),
groups = {dig_immediate=3},
})
@@ -66,7 +66,7 @@ test_sound()
function on_step(dtime)
-- print("experimental on_step")
--[[
objs = minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 10)
objs = minetest.get_objects_inside_radius({x=0,y=0,z=0}, 10)
for k, obj in pairs(objs) do
name = obj:get_player_name()
if name then
@@ -86,17 +86,17 @@ function on_step(dtime)
experimental.t1 = experimental.t1 + dtime
if experimental.t1 >= 2 then
experimental.t1 = experimental.t1 - 2
minetest.log("time of day is "..minetest.env:get_timeofday())
minetest.log("time of day is "..minetest.get_timeofday())
if experimental.day then
minetest.log("forcing day->night")
experimental.day = false
minetest.env:set_timeofday(0.0)
minetest.set_timeofday(0.0)
else
minetest.log("forcing night->day")
experimental.day = true
minetest.env:set_timeofday(0.5)
minetest.set_timeofday(0.5)
end
minetest.log("time of day is "..minetest.env:get_timeofday())
minetest.log("time of day is "..minetest.get_timeofday())
end
--]]
end
@@ -133,8 +133,8 @@ minetest.register_node("experimental:tnt", {
minetest.register_on_punchnode(function(p, node)
if node.name == "experimental:tnt" then
minetest.env:remove_node(p)
minetest.env:add_entity(p, "experimental:tnt")
minetest.remove_node(p)
minetest.add_entity(p, "experimental:tnt")
nodeupdate(p)
end
end)
@@ -262,7 +262,7 @@ minetest.register_on_chat_message(function(name, message)
minetest.chat_send_player(name, "you don't have permission to interact")
return true -- Handled chat message
end
local player = minetest.env:get_player_by_name(name)
local player = minetest.get_player_by_name(name)
if player == nil then
print("Unable to spawn entity, player is nil")
return true -- Handled chat message
@@ -270,7 +270,7 @@ minetest.register_on_chat_message(function(name, message)
local entityname = "experimental:dummyball"
local p = player:getpos()
p.y = p.y + 1
minetest.env:add_entity(p, entityname)
minetest.add_entity(p, entityname)
minetest.chat_send_player(name, '"'..entityname
..'" spawned.');
return true -- Handled chat message
@@ -323,7 +323,7 @@ end)
minetest.register_on_generated(function(minp, maxp)
--print("on_generated: minp="..dump(minp).." maxp="..dump(maxp))
--cp = {x=(minp.x+maxp.x)/2, y=(minp.y+maxp.y)/2, z=(minp.z+maxp.z)/2}
--minetest.env:add_node(cp, {name="sand"})
--minetest.add_node(cp, {name="sand"})
end)
-- Example setting get
@@ -353,7 +353,7 @@ end)
action = function(pos, node, active_object_count, active_object_count_wider)
print("TNT ABM action")
pos.y = pos.y + 1
minetest.env:add_node(pos, {name="papyrus"})
minetest.add_node(pos, {name="papyrus"})
end,
})]]
@@ -364,7 +364,7 @@ end)
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
print("ABM: Sign text changed")
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_text("foo")
end,
})]]
@@ -395,7 +395,7 @@ minetest.register_abm({
end
pos.y = pos.y + 1
n = minetest.env:get_node(pos)
n = minetest.get_node(pos)
print(dump(n))
if n.name ~= "air" then
return
@@ -404,7 +404,7 @@ minetest.register_abm({
pos.y = pos.y + 2
ncpos = pos
nctime = os.clock()
minetest.env:add_node(ncpos, {name="nyancat"})
minetest.add_node(ncpos, {name="nyancat"})
end
})
@@ -431,12 +431,12 @@ minetest.register_abm({
p2 = {x = p1.x + s1[2], y = p1.y, z = p1.z + s1[3]}
table.insert(ncold, 1, p0)
while #ncold >= 10 do
minetest.env:add_node(ncold[#ncold], {name="air"})
minetest.add_node(ncold[#ncold], {name="air"})
table.remove(ncold, #ncold)
end
minetest.env:add_node(p0, {name="nyancat_rainbow"})
minetest.env:add_node(p1, {name="nyancat", param1=s0[4]})
minetest.env:add_node(p2, {name="air"})
minetest.add_node(p0, {name="nyancat_rainbow"})
minetest.add_node(p1, {name="nyancat", param1=s0[4]})
minetest.add_node(p2, {name="air"})
ncpos = p1
end
end,
@@ -448,20 +448,20 @@ minetest.register_node("experimental:tester_node_1", {
groups = {oddly_breakable_by_hand=2},
sounds = default.node_sound_wood_defaults(),
-- This was known to cause a bug in minetest.item_place_node() when used
-- via minetest.env:place_node(), causing a placer with no position
-- via minetest.place_node(), causing a placer with no position
paramtype2 = "facedir",
on_construct = function(pos)
experimental.print_to_everything("experimental:tester_node_1:on_construct("..minetest.pos_to_string(pos)..")")
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
meta:set_string("mine", "test")
local timer = minetest.env:get_node_timer(pos)
local timer = minetest.get_node_timer(pos)
timer:start(4, 3)
end,
after_place_node = function(pos, placer)
experimental.print_to_everything("experimental:tester_node_1:after_place_node("..minetest.pos_to_string(pos)..")")
local meta = minetest.env:get_meta(pos)
local meta = minetest.get_meta(pos)
if meta:get_string("mine") == "test" then
experimental.print_to_everything("correct metadata found")
else
@@ -493,14 +493,14 @@ minetest.register_craftitem("experimental:tester_tool_1", {
on_use = function(itemstack, user, pointed_thing)
--print(dump(pointed_thing))
if pointed_thing.type == "node" then
if minetest.env:get_node(pointed_thing.under).name == "experimental:tester_node_1" then
if minetest.get_node(pointed_thing.under).name == "experimental:tester_node_1" then
local p = pointed_thing.under
minetest.log("action", "Tester tool used at "..minetest.pos_to_string(p))
minetest.env:dig_node(p)
minetest.dig_node(p)
else
local p = pointed_thing.above
minetest.log("action", "Tester tool used at "..minetest.pos_to_string(p))
minetest.env:place_node(p, {name="experimental:tester_node_1"})
minetest.place_node(p, {name="experimental:tester_node_1"})
end
end
end,
@@ -556,7 +556,7 @@ minetest.register_chatcommand("test1", {
params = "",
description = "Test 1: Modify player's inventory view",
func = function(name, param)
local player = minetest.env:get_player_by_name(name)
local player = minetest.get_player_by_name(name)
if not player then
return
end

View File

@@ -79,14 +79,12 @@ minetest.register_craftitem(":rat", {
description = "Rat",
inventory_image = "rat.png",
on_drop = function(item, dropper, pos)
minetest.env:add_rat(pos)
item:take_item()
return item
end,
on_place = function(item, dropped, pointed)
pos = minetest.get_pointed_thing_position(pointed, true)
if pos ~= nil then
minetest.env:add_rat(pos)
item:take_item()
return item
end
@@ -103,14 +101,12 @@ minetest.register_craftitem(":firefly", {
description = "Firefly",
inventory_image = "firefly.png",
on_drop = function(item, dropper, pos)
minetest.env:add_firefly(pos)
item:take_item()
return item
end,
on_place = function(item, dropped, pointed)
pos = minetest.get_pointed_thing_position(pointed, true)
if pos ~= nil then
minetest.env:add_firefly(pos)
item:take_item()
return item
end

View File

@@ -8,11 +8,11 @@
# Uncomment settings by removing the preceding #.
#
# Further documentation:
# http://c55.me/minetest/wiki/doku.php
# http://wiki.minetest.com/
#
# NOTE: This file might not be up-to-date, refer to the
# defaultsettings.cpp file for an up-to-date list:
# https://bitbucket.org/celeron55/minetest/src/tip/src/defaultsettings.cpp
# https://github.com/minetest/minetest/blob/master/src/defaultsettings.cpp
#
# A vim command to convert most of defaultsettings.cpp to conf file format:
# :'<,'>s/\tsettings->setDefault("\([^"]*\)", "\([^"]*\)");.*/#\1 = \2/g
@@ -80,6 +80,7 @@
# when set to higher number than 0
#fsaa = 0
#vsync = false
#fov = 72
# Address to connect to (#blank = start local server)
#address =
# Enable random user input, for testing
@@ -95,9 +96,11 @@
# Update liquids every .. recommend for finite: 0.2
#liquid_update = 1.0
# When finite liquid: relax flowing blocks to source if level near max and N nearby source blocks, more realistic, but not true constant. values: 0,1,2,3,4 : 0 - disable, 1 - most aggresive
#liquid_relax = 1
# optimization: faster cave flood (and not true constant)
#liquid_relax = 2
# Optimization: faster cave flood (and not true constant)
#liquid_fast_flood = 1
# Underground water and lava springs, its infnity sources if liquid_finite enabled
#underground_springs = 1
# Enable nice leaves; disable for speed
#new_style_leaves = true
# Enable smooth lighting with simple ambient occlusion;
@@ -125,10 +128,16 @@
#farmesh_distance = 40
# Enable/disable clouds
#enable_clouds = true
#cloud_height = 120
#enable_3d_clouds = true
# Use a cloud animation for the main menu background
#menu_clouds = true
# Path for screenshots
#screenshot_path = .
# Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double)
#view_bobbing_amount = 1.0
# Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double)
#fall_bobbing_amount = 0.0
# Anaglyph stereo
#anaglyph = false
#anaglyph_strength = 0.1
@@ -142,6 +151,8 @@
#crosshair_color = (255,255,255)
# Cross alpha (opaqueness, between 0 and 255)
#crosshair_alpha = 255
# Sensitivity multiplier
#mouse_sensitivity = 0.2
# Sound settings
#enable_sound = true
#sound_volume = 0.7
@@ -243,6 +254,10 @@
#max_block_send_distance = 10
# From how far blocks are generated for clients (value * 16 nodes)
#max_block_generate_distance = 6
# 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 = 4096
# Interval of sending time of day to clients
#time_send_interval = 5
# Length of day/night cycle. 72=20min, 360=4min, 1=24hour, 0=day/night/whatever stays unchanged
@@ -304,29 +319,45 @@
# Mapgen stuff
#
# Name of map generator to be used. Currently only v6 is supported.
# Name of map generator to be used. Currently v6, indev and singlenode are supported.
#mg_name = v6
# Water level of map.
#water_level = 1
# Size of chunks to be generated.
#chunksize = 5
# Map generation attributes. Currently supported: trees, caves, flat, v6_biome_blend
# Map generation attributes. Currently supported: trees, caves, flat, v6_biome_blend, v6_jungles, dungeons
#mg_flags = trees, caves, v6_biome_blend
# How large deserts and beaches are
#mgv6_freq_desert = 0.45
#mgv6_freq_beach = 0.15
# Perlin noise attributes for different map generation parameters
# Offset, scale, spread factor, seed offset, number of octaves, persistence
#mgv6_np_terrain_base = -4, 20, (250.0, 250, 250), 82341, 5, 0.6
#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6
#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6
#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7
#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69
#mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66
#mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55
#mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50
#mgv6_np_biome = 0, 1, (250, 250, 250), 9130, 3, 0.50
#mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50
#mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 4, 0.66
#mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66
#mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45
#mgv7_np_terrain = 10, 12, (350, 350, 350), 82341, 5, 0.6
#mgv7_np_bgroup = 0.5, 0.3125, (350, 350, 350), 5923, 2, 0.6
#mgv7_np_heat = 25, 50, (500, 500, 500), 35293, 1, 0
#mgv7_np_humidity = 50, 31.25, (750, 750, 750), 12094, 2, 0.6
# Offset, scale, spread factor, seed offset, number of octaves, persistence, farscale, farspread
#mgindev_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 10, 10
#mgindev_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6, 10, 10
#mgindev_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2, 10
#mgindev_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55, 1, 1
#mgindev_np_float_islands1 = 0, 1, (64, 64, 64 ), 3683, 5, 0.5, 1, 1.5
#mgindev_np_float_islands2 = 0, 1, (8, 8, 8 ), 9292, 2, 0.5, 1, 1.5
#mgindev_np_float_islands3 = 0, 1, (256, 256, 256), 6412, 2, 0.5, 1, 0.5
#mgindev_np_biome = 0, 1, (250, 250, 250), 9130, 3, 0.50, 1, 10
# Float islands starts from height, 0 to disable
#mgindev_float_islands = 500

View File

@@ -1 +0,0 @@
You can install Minetest mods by copying (and extracting) them into this folder.

4
mods/mods_here.txt Normal file
View File

@@ -0,0 +1,4 @@
You can install Minetest mods by copying (and extracting) them into this folder.
To enable them, go to the configure world window in the main menu or write
load_mod_<modname> = true
in world.mt in the world directory.

View File

@@ -1,90 +0,0 @@
# Makefile for Irrlicht Examples
# It's usually sufficient to change just the target name and source file list
# and be sure that CXX is set to a valid compiler
SOURCE_FILES = porting.cpp guiMessageMenu.cpp materials.cpp guiTextInputMenu.cpp guiInventoryMenu.cpp irrlichtwrapper.cpp guiPauseMenu.cpp defaultsettings.cpp mapnode.cpp tile.cpp voxel.cpp mapblockobject.cpp inventory.cpp debug.cpp serialization.cpp light.cpp filesys.cpp connection.cpp environment.cpp client.cpp server.cpp socket.cpp mapblock.cpp mapsector.cpp heightmap.cpp map.cpp player.cpp utility.cpp main.cpp test.cpp
DEBUG_TARGET = debugtest
DEBUG_SOURCES = $(addprefix src/, $(SOURCE_FILES))
DEBUG_BUILD_DIR = debugbuild
DEBUG_OBJECTS = $(addprefix $(DEBUG_BUILD_DIR)/, $(SOURCE_FILES:.cpp=.o))
FAST_TARGET = fasttest
FAST_SOURCES = $(addprefix src/, $(SOURCE_FILES))
FAST_BUILD_DIR = fastbuild
FAST_OBJECTS = $(addprefix $(FAST_BUILD_DIR)/, $(SOURCE_FILES:.cpp=.o))
SERVER_TARGET = server
SERVER_SOURCE_FILES = porting.cpp materials.cpp defaultsettings.cpp mapnode.cpp voxel.cpp mapblockobject.cpp inventory.cpp debug.cpp serialization.cpp light.cpp filesys.cpp connection.cpp environment.cpp server.cpp socket.cpp mapblock.cpp mapsector.cpp heightmap.cpp map.cpp player.cpp utility.cpp servermain.cpp test.cpp
SERVER_SOURCES = $(addprefix src/, $(SERVER_SOURCE_FILES))
SERVER_BUILD_DIR = serverbuild
SERVER_OBJECTS = $(addprefix $(SERVER_BUILD_DIR)/, $(SERVER_SOURCE_FILES:.cpp=.o))
IRRLICHTPATH = ../irrlicht/irrlicht-1.7.1
JTHREADPATH = ../jthread/jthread-1.2.1
all: fast
ifeq ($(HOSTTYPE), x86_64)
LIBSELECT=64
endif
debug: CXXFLAGS = -Wall -g -O1
debug: CPPFLAGS = -I$(IRRLICHTPATH)/include -I/usr/X11R6/include -I$(JTHREADPATH)/src -DDEBUG -DRUN_IN_PLACE
debug: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L$(IRRLICHTPATH)/lib/Linux -L$(JTHREADPATH)/src/.libs -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -ljthread -lz
fast: CXXFLAGS = -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops -mtune=i686
fast: CPPFLAGS = -I$(IRRLICHTPATH)/include -I/usr/X11R6/include -I$(JTHREADPATH)/src -DUNITTEST_DISABLE -DRUN_IN_PLACE
fast: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L$(IRRLICHTPATH)/lib/Linux -L$(JTHREADPATH)/src/.libs -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -ljthread -lz
server: CXXFLAGS = -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops -mtune=i686
server: CPPFLAGS = -I$(IRRLICHTPATH)/include -I/usr/X11R6/include -I$(JTHREADPATH)/src -DSERVER -DUNITTEST_DISABLE -DRUN_IN_PLACE
server: LDFLAGS = -L$(JTHREADPATH)/src/.libs -ljthread -lz -lpthread
DEBUG_DESTPATH = bin/$(DEBUG_TARGET)
FAST_DESTPATH = bin/$(FAST_TARGET)
SERVER_DESTPATH = bin/$(SERVER_TARGET)
# Build commands
debug: $(DEBUG_BUILD_DIR) $(DEBUG_DESTPATH)
fast: $(FAST_BUILD_DIR) $(FAST_DESTPATH)
server: $(SERVER_BUILD_DIR) $(SERVER_DESTPATH)
$(DEBUG_BUILD_DIR):
mkdir -p $(DEBUG_BUILD_DIR)
$(FAST_BUILD_DIR):
mkdir -p $(FAST_BUILD_DIR)
$(SERVER_BUILD_DIR):
mkdir -p $(SERVER_BUILD_DIR)
$(DEBUG_DESTPATH): $(DEBUG_OBJECTS)
$(CXX) -o $@ $(DEBUG_OBJECTS) $(LDFLAGS)
$(FAST_DESTPATH): $(FAST_OBJECTS)
$(CXX) -o $@ $(FAST_OBJECTS) $(LDFLAGS)
$(SERVER_DESTPATH): $(SERVER_OBJECTS)
$(CXX) -o $@ $(SERVER_OBJECTS) $(LDFLAGS)
$(DEBUG_BUILD_DIR)/%.o: src/%.cpp
$(CXX) -c -o $@ $< $(CPPFLAGS) $(CXXFLAGS)
$(FAST_BUILD_DIR)/%.o: src/%.cpp
$(CXX) -c -o $@ $< $(CPPFLAGS) $(CXXFLAGS)
$(SERVER_BUILD_DIR)/%.o: src/%.cpp
$(CXX) -c -o $@ $< $(CPPFLAGS) $(CXXFLAGS)
clean: clean_debug clean_fast clean_server
clean_debug:
@$(RM) $(DEBUG_OBJECTS) $(DEBUG_DESTPATH)
clean_fast:
@$(RM) $(FAST_OBJECTS) $(FAST_DESTPATH)
clean_server:
@$(RM) $(SERVER_OBJECTS) $(SERVER_DESTPATH)
.PHONY: all all_win32 clean clean_debug clean_win32 clean_fast clean_server

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-02-17 00:41+0200\n"
"Last-Translator: Rune Biskopstö Christensen <lakersforce@gmail.com>\n"
"Language-Team: \n"
@@ -18,7 +18,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Tjek debug.txt for detaljer."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
@@ -26,7 +62,7 @@ msgstr ""
"Advarsel: nogle modifikationer er endnu ikke konfigureret.\n"
"De vil blive aktiveret som standard når du gemmer konfigurationen. "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -38,56 +74,56 @@ msgstr ""
msgid "enabled"
msgstr "aktiveret"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Aktivér alle"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Deaktivér alle"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "afhænger af:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "er påkrævet af:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Anuller"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Gem"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Konfiguration gemt. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Advarsel: konfigurationen er ikke sammenhængende. "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Ja"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Nej"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Verdens navn"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Spil"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Skab"
@@ -99,268 +135,286 @@ msgstr "Du døde."
msgid "Respawn"
msgstr "Genopstå"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Fortsæt"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra "
"minetest.conf)"
"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest."
"conf)"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Brug\" = klatre ned"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-"
"tilstand"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Tast allerede i brug"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "Tryk på en tast"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Fremad"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Baglæns"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Venstre"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Højre"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Brug"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Hop"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Snige"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Slip"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Beholdning"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Snak"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Kommando"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Konsol"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Omstil flyvning"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Omstil hurtig"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Omstil fylde"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Afstands vælg"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Udskriv stakke"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Kan ikke skabe verden: en verden med dette navn eksisterer allerede"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Enligspiller"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Flerspiller"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Avanceret"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Indstillinger"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Skabt af"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Vælg verden:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Slet"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Ny"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Konfigurér"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Afspil"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Kreativ tilstand"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Aktivér skade"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Navn/kodeord"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
#, fuzzy
msgid "Favorites:"
msgstr "Vis favoritter"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Adresse/port"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Vis offentlig"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Vis favoritter"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Forbind"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Lad adresse-feltet være tomt for at starte en lokal server."
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Start spil / Forbind"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
#, fuzzy
msgid "Public"
msgstr "Vis offentlig"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Slet verden"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Skab verden"
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "\"Smarte\" træer"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Glat belysning"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3D skyer"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Opakt (uigennemsigtigt) vand"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-mapping"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Anisotropisk filtréring"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Bi-lineær filtréring"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Tri-lineær filtréring"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Shadere"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "For-indlæs elementernes grafik"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Aktivér partikler"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Skift bindinger"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Adresse påkrævet."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Kan ikke slette verden: ingenting valgt"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Filer som slettes"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Kan ikke skabe verden: ingen spil fundet"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Kan ikke konfigurere verden: ingenting valgt"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Mislykkedes i at slette alle verdenens filer"
@@ -368,63 +422,64 @@ msgstr "Mislykkedes i at slette alle verdenens filer"
msgid "Old Password"
msgstr "Gammelt kodeord"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nyt kodeord"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Bekræft kodeord"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Skift"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Kodeordene er ikke ens!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Fortsæt"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Skift kodeord"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Afslut til menu"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Afslut til operativsystemet"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
"Standard bindinger:\n"
"- WASD: bevægelse\n"
"- Venstre musetast: grav/slå\n"
"- Højre musetast: anbring/brug\n"
"- Musehjul: vælg genstand\n"
"- 0...9: vælg genstand\n"
"- Shift: snige\n"
"- R: omstil se alle indlæste klumper\n"
"- I: beholdning\n"
"- ESC: denne menu\n"
"- T: snak\n"
#: src/keycode.cpp:223
msgid "Left Button"
@@ -721,37 +776,54 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Hovedmenu"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Mislykkedes i at initialisere verden"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave."
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Kunne ikke finde eller indlæse spil \""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Ugyldig spilspecifikationer."
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Forbindelses fejl (udløbelse af tidsfrist?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Tjek debug.txt for detaljer."
#~ msgid "Delete map"
#~ msgstr "Slet mappen"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Standard bindinger:\n"
#~ "- WASD: bevægelse\n"
#~ "- Venstre musetast: grav/slå\n"
#~ "- Højre musetast: anbring/brug\n"
#~ "- Musehjul: vælg genstand\n"
#~ "- 0...9: vælg genstand\n"
#~ "- Shift: snige\n"
#~ "- R: omstil se alle indlæste klumper\n"
#~ "- I: beholdning\n"
#~ "- ESC: denne menu\n"
#~ "- T: snak\n"

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-23 18:24+0200\n"
"PO-Revision-Date: 2013-02-21 17:34+0200\n"
"Last-Translator: Sfan5 . <sfan5@live.de>\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-14 12:51+0200\n"
"Last-Translator: Pilz Adam <PilzAdam@gmx.de>\n"
"Language-Team: Deutsch <>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "Inventarbilder..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "Lädt..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "Erstelle Server..."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "Erstelle Client..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "Löse Adresse auf..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "Verbinde zum Server..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "Herunterfahren..."
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Siehe debug.txt für Details."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
@@ -26,7 +62,7 @@ msgstr ""
"Warnung: Einige Mods sind noch nicht konfiguriert.\n"
"Sie werden aktiviert wenn die Konfiguration gespeichert wird. "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -38,56 +74,56 @@ msgstr ""
msgid "enabled"
msgstr "Aktiviert"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Alle an"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Alle aus"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "abhängig von:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "wird benötigt von:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Abbrechen"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Speichern"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Konfiguration gespeichert. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Warnung: Konfiguration nicht konsistent. "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Ja"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Nein"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Weltname"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Spiel"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Erstellen"
@@ -99,329 +135,358 @@ msgstr "Sie sind gestorben."
msgid "Respawn"
msgstr "Wiederbeleben"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Fortsetzen"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "Steuerung"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Benutzen\" = herunterklettern"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Doppelt \"springen\" zum fliegen"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Taste bereits in Benutzung"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "Taste drücken"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Vorwärts"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Rückwärts"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Links"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Rechts"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Benutzen"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Springen"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Schleichen"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Wegwerfen"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Inventar"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Chat"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Befehl"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Konsole"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Fliegen umsch."
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Speed umsch."
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Noclip umsch."
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Entfernung wählen"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Stack ausgeben"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Kann Welt nicht erstellen: Name enthält ungülige Zeichen"
msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
"Kann Welt nicht erstellen: Eine Welt mit diesem Namen existiert bereits"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Einzelspieler"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Mehrspieler"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Erweitert"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Einstellungen"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Credits"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Welt wählen:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Entfernen"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Neu"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Konfigurieren"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Spielen"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Kreativitätsmodus"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Schaden einschalten"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Name/Passwort"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favoriten:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Öffentliche Server Liste:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Adresse / Port"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Zeige öffentliche"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Zeige Favoriten"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Verbinden"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Lasse die Adresse frei um einen eigenen Server zu starten."
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Spiel starten / Verbinden"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Öffentlich"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Welt löschen"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Welt erstellen"
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Schöne Bäume"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Besseres Licht"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3D Wolken"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Undurchs. Wasser"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Anisotroper Filter"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Bi-Linearer Filter"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Tri-Linearer Filter"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Shader"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Lade Inventarbilder vor"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Aktiviere Partikel"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Realistiches Wasser"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Tasten ändern"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Adresse benötigt."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Kann Welt nicht löschen: Nichts ausgewählt"
msgstr "Kann Welt nicht löchen: Nichts ausgewählt"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Zu löschende Dateien"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Welt Dateien löschen gescheitert"
msgstr "Es konnten nicht alle Welt Dateien gescht werden"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Altes Passwort"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Neues Passwort"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Passwort wiederholen"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Ändern"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Passwörter passen nicht zusammen!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Weiter"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Passwort ändern"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Sound Lautstärke"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Hauptmenü"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Programm beenden"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
"Steuerung:\n"
"- WASD: Gehen\n"
"- Linksklick: Graben/Schlagen\n"
"- Rechtsklick: Platzieren\n"
"- Mausrad: Item auswählen\n"
"- 0...9: Item auswählen\n"
"- Shift: Schleichen\n"
"- R: alle geladenen Blöcke anzeigen (wechseln)\n"
"Standard Tastaturebelegung:\n"
"- WASD: Bewegen\n"
"- Leertaste: Springen/Klettern\n"
"- Umschalt: Kriechen/herunterklettern\n"
"- Q: Item droppen\n"
"- I: Inventar\n"
"- Maus: drehen/umschauen\n"
"- Maus links: Abbauen/Schlagen\n"
"- Maus rechts: Platzieren/Benutzen\n"
"- Mausrad: Item auswählen\n"
"- T: Chat\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Sound Lautstärke: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Zurück"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Linke Taste"
@@ -714,40 +779,56 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Hauptmenü"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Kann Welt nicht initialisieren"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun."
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Kann Spiel nicht finden/laden\""
msgstr "Kann Spiel nicht finden/laden \""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Invalide Spielspezif."
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Verbindungsfehler (Zeitüberschreitung?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Siehe debug.txt für Details."
#~ msgid "KEYBINDINGS"
#~ msgstr "TASTEN EINST."
#~ msgid "Delete map"
#~ msgstr "Karte löschen"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Steuerung:\n"
#~ "- WASD: Gehen\n"
#~ "- Linksklick: Graben/Schlagen\n"
#~ "- Rechtsklick: Platzieren\n"
#~ "- Mausrad: Item auswählen\n"
#~ "- 0...9: Item auswählen\n"
#~ "- Shift: Schleichen\n"
#~ "- R: alle geladenen Blöcke anzeigen (wechseln)\n"
#~ "- I: Inventar\n"
#~ "- T: Chat\n"

818
po/du/minetest.po Normal file
View File

@@ -0,0 +1,818 @@
# SOME DESCRIPTIVE TITLE. DUTCH TRANSLATION
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-04-18 15:28+0100\n"
"Last-Translator: LS-Steeef \n"
"Language-Team: \n"
"Language: dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.5\n"
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Check debug.txt for details."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"Let op: Nog niet alle mods zijn geconfigueerd. \n"
"De mods zullen automatisch worden ingeschakeld als je de configuratie "
"bewaard."
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"LEt op: Sommige ingestelde mods zijn vermist.\n"
"Hun instellingen worden verwijderd als je de configuratie opslaat."
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "ingeschakeld"
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Allen inschakelen"
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Allen uitschakelen"
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "heeft nodig:"
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "is benodigd voor:"
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Annuleer"
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Bewaar"
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Instellingen bewaard."
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Waarschuwing: Instellingen niet consistent."
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Ja"
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Nee"
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Naam wereld"
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Spel"
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Maak aan"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Je bent gestorven."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Respawn"
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item."
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Volgende"
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "Sneltoetsen."
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Use\" = Omlaag klimmen"
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Dubbelklik op \"jump\" om te vliegen"
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Toets is al in gebruik"
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "druk op"
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Vooruit"
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Achteruit"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Links"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Rechts"
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Gebruikwn"
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Springen"
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Kruipen"
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Weggooien"
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Rugzak"
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Chat"
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Opdracht"
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Console"
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Vliegen aan/uit"
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Snel bewegen aan/uit"
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Noclip aan/uit"
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Range instellen"
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Print stacks"
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens."
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Kan geen nieuwe wereld aanmaken: De naam bestaat al."
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Singleplayer"
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Multiplayer"
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Geavanceerd"
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Instellingen"
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Credits"
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Selecteer Wereld:"
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Verwijderen"
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Nieuw"
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Instellingen"
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Speel!"
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Creative Modus"
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Schade inschakelen"
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Naam/Wachtwoord"
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favourieten:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Publieke Server lijst:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "IP-Adres/Poort"
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Publieke server"
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Favourieten"
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Verbinden"
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Laat het adres leeg om een lokale server te starten."
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Start het spel / Verbind"
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Publiek"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Verwijder wereld"
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Maak wereld aan"
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Mooie bomen"
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Mooie verlichting"
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3D wolken"
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Doorzichtig water"
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Bi-Linear Filtering"
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Bi-Linear Filtering"
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Tri-Linear Filtering"
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Shaders"
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Preload item visuals"
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Enable Particles"
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Finite liquid"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Sneltoetsen veranderen"
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "IP-adres nodig."
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Kan niets verwijderen: Geen wereld geselecteerd."
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Deze bestanden worden verwijderd"
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Kan geen wereld aanmaken: Geen games gevonden"
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Kan instellingen niet aanpassen: Niets geselecteerd"
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Niet alle bestanden zijn verwijderd"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Huidig wachtwoord"
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nieuw wachtwoord"
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Herhaal wachtwoord"
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Veranderen"
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Wachtwoorden zijn niet gelijk!"
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Volgende"
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Verander wachtwoord"
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Volume"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Exit naar menu"
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Afsluiten"
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Volume:"
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Exit"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Linkermuisknop"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr "Muiswielknop"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr "Rechtmuisknop"
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr "X knop 1"
#: src/keycode.cpp:224
msgid "Back"
msgstr "Terug"
#: src/keycode.cpp:224
msgid "Clear"
msgstr "Wissen"
#: src/keycode.cpp:224
msgid "Return"
msgstr "Return"
#: src/keycode.cpp:224
msgid "Tab"
msgstr "Tab"
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr "X knop 2"
#: src/keycode.cpp:225
msgid "Capital"
msgstr "Kapitaal"
#: src/keycode.cpp:225
msgid "Control"
msgstr "Control"
#: src/keycode.cpp:225
msgid "Kana"
msgstr "Kana"
#: src/keycode.cpp:225
msgid "Menu"
msgstr "Menu"
#: src/keycode.cpp:225
msgid "Pause"
msgstr "Pauze"
#: src/keycode.cpp:225
msgid "Shift"
msgstr "Shift"
#: src/keycode.cpp:226
msgid "Convert"
msgstr "Converteren"
#: src/keycode.cpp:226
msgid "Escape"
msgstr "Escape"
#: src/keycode.cpp:226
msgid "Final"
msgstr "Final"
#: src/keycode.cpp:226
msgid "Junja"
msgstr "Junja"
#: src/keycode.cpp:226
msgid "Kanji"
msgstr "Kanji"
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr "Nonconvert"
#: src/keycode.cpp:227
msgid "Accept"
msgstr "Accepteren"
#: src/keycode.cpp:227
msgid "End"
msgstr "End"
#: src/keycode.cpp:227
msgid "Home"
msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr "Modus veranderen"
#: src/keycode.cpp:227
msgid "Next"
msgstr "Volgende"
#: src/keycode.cpp:227
msgid "Prior"
msgstr "Eerste"
#: src/keycode.cpp:227
msgid "Space"
msgstr "Spatie"
#: src/keycode.cpp:228
msgid "Down"
msgstr "Omlaag"
#: src/keycode.cpp:228
msgid "Execute"
msgstr "Uitvoeren"
#: src/keycode.cpp:228
msgid "Print"
msgstr "Print"
#: src/keycode.cpp:228
msgid "Select"
msgstr "Selecteren"
#: src/keycode.cpp:228
msgid "Up"
msgstr "Omhoog"
#: src/keycode.cpp:229
msgid "Help"
msgstr "Help"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "Insert"
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr "Screenshot"
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr "Linker Windowstoets"
#: src/keycode.cpp:233
msgid "Apps"
msgstr "Apps"
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr "Numpad 0"
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr "Numpad 1"
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr "Rechter Windowstoets"
#: src/keycode.cpp:233
msgid "Sleep"
msgstr "Slaapknop"
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr "Numpad 2"
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr "Numpad 3"
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr "Numpad 4"
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr "Numpad 5"
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr "Numpad 6"
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr "Numpad 7"
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr "Numpad *"
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr "Numpad +"
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr "Numpad -"
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr "Numpad /"
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr "Numpad 8"
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr "Numpad 9"
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr "Num Lock"
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr "Scroll Lock"
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr "Linker Shift"
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr "Rechter Shift"
#: src/keycode.cpp:241
msgid "Left Control"
msgstr "Linker Ctrl"
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr "Linker Menu"
#: src/keycode.cpp:241
msgid "Right Control"
msgstr "Rechter Ctrl"
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr "Rechter Menu"
#: src/keycode.cpp:243
msgid "Comma"
msgstr "Komma"
#: src/keycode.cpp:243
msgid "Minus"
msgstr "Min"
#: src/keycode.cpp:243
msgid "Period"
msgstr "Punt"
#: src/keycode.cpp:243
msgid "Plus"
msgstr "Plus"
#: src/keycode.cpp:247
msgid "Attn"
msgstr "Attn"
#: src/keycode.cpp:247
msgid "CrSel"
msgstr "CrSel"
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr "Erase OEF"
#: src/keycode.cpp:248
msgid "ExSel"
msgstr "ExSel"
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr "OEM Clear"
#: src/keycode.cpp:248
msgid "PA1"
msgstr "PA1"
#: src/keycode.cpp:248
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Hoofdmenu"
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Laden van wereld is mislukt"
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Geen wereld en adres geselecteerd. Niks te doen."
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Kan niet de game laden of vinden."
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Onjuiste gamespec."
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Connection error (timed out?)"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Default Besturing:\n"
#~ "- WASD: Lopen\n"
#~ "- Linkermuisknop: Graaf/Sla\n"
#~ "- Rechtmuisknop: Plaats/Gebruik\n"
#~ "- Muiswiel: selecteer item\n"
#~ "- 0...9: selecteer item\n"
#~ "- Shift: kruipen\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Rugzak\n"
#~ "- ESC: Menu\n"
#~ "- T: Chat\n"

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-23 18:24+0200\n"
"PO-Revision-Date: 2013-02-07 22:14+0200\n"
"Last-Translator: Francizca Rodriguez <joaoadriano3@gmail.com>\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-16 14:51+0200\n"
"Last-Translator: Diego Martínez <lkaezadl3@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "Texturas de objetos..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "Cargando..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "Creando servidor..."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "Creando cliente..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "Resolviendo dirección..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "Conectando al servidor..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "Apagando cosas..."
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Consulta debug.txt para obtener más detalles."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
@@ -26,7 +62,7 @@ msgstr ""
"ADVERTENCIA: Algunos mods no están aún configurados.\n"
"Se habilitarán de forma predeterminada al guardar la configuración. "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -38,328 +74,344 @@ msgstr ""
msgid "enabled"
msgstr "Activado"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Activar todos"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Desactivar todos"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "Dependencia:"
msgstr "Dependencias:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "Requiere:"
msgstr "es requerido por:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Cancelar"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Guardar"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Configuración guardada. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "ADVERTENCIA: La configuración no corresponde. "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Sí"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "No"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Nombre del mundo"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Juego"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Crear"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Estas Muerto."
msgstr "Has muerto."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Respawn"
msgstr "Revivir"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Click izquierdo: Mover todos los objetos. Click derecho: Mover un objeto."
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Continuar"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
"Combinaciones de teclas.(Si este menú da error, cambiar configuración en "
"minetest.conf)"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Usar\" = Descender"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Pulsar dos veces \"saltar\" para activar volar"
msgstr "Dos veces \"saltar\" para volar"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "La tecla se está utilizando"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "Pulsa una tecla"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Adelante"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Atras"
msgstr "Atrás"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Izquierda"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Derecha"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Usar"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Saltar"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Agacharse"
msgstr "Caminar"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Tirar"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Inventario"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Chat"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Comando"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Consola"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Activar Volar"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Activar Modo Rápido"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Activar noclip"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Seleccionar rango"
msgstr "Seleccionar distancia"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Imprimir Stacks"
msgstr "Imprimir Pilas"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "No se puede crear el mundo: El nombre contiene caracteres no válidos"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "No se puede crear el mundo: Hay un mundo con este nombre"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Un jugador"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Multijugador"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Server"
msgstr "Avanzado"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Configuración"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Créditos"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Selecciona un mundo:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Borrar"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Nuevo"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Configurar"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Jugar"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Modo creativo"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Permitir daños"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Nombre/Clave"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favoritos:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Lista de Servidores Públicos:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Dirección/Puerto"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Servidores Públicos"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Mostrar Favoritos"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Conectar"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Dejar la dirección en blanco para iniciar un servidor local."
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Iniciar juego/Conectar"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Público"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Eliminar Mundo"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Crear Mundo"
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Árboles detallados"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Iluminación Suave"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "Nubes 3D"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Agua Opaca"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Filtrado Anisotrópico"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Filtrado Bi-Lineal"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Filtrado Tri-Lineal"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Habilitar Shaders"
msgstr "Sombreadores"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Precarga elementos visuales"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Partículas"
msgstr "Habilitar partículas"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Líquidos Finitos"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Configurar Teclas"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Requiere una dirección."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "No se puede eliminar el mundo: ninguno ha sido seleccionado"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Archivos que se eliminarán"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "No se puede crear el mundo: No se encontraron juegos"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "No se puede configurar el mundo: Ninguno seleccionado"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "No se pudo eliminar todos los archivos del mundo"
@@ -367,63 +419,75 @@ msgstr "No se pudo eliminar todos los archivos del mundo"
msgid "Old Password"
msgstr "Contraseña anterior"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nueva contraseña"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Confirmar contraseña"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Cambiar"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "¡Las contraseñas no coinciden!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Continuar"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Modificar contraseña"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Volúmen del Sonido"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Salir al menú"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Salir al S.O."
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
"Controles predeterminados:\n"
"- WASD: Caminar \n"
"- Ratón, izquierdo: Cavar/Golpear\n"
"- Ratón, derecho: Poner bloque/Usar\n"
"- Ratón, rueda: seleccionar objecto\n"
"- 0... 9: Seleccionar objecto\n"
"- Mayúscula: caminar despacio\n"
"- R: Ajustar distancia de los chunks cargados\n"
"- I: Inventario \n"
"- ESC: Este Menu\n"
"- T: Chat\n"
"Controles Pred.:\n"
"- WASD: moverse\n"
"- Espacio: saltar/subir\n"
"- Mayús.: puntillas/bajar\n"
"- Q: soltar objeto\n"
"- I: inventario\n"
"- Ratón: girar/mirar\n"
"- Ratón izq.: cavar/golpear\n"
"- Ratón der.: colocar/usar\n"
"- Rueda ratón: elegir objeto\n"
"- T: conversar\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Volúmen del Sonido: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Salir"
#: src/keycode.cpp:223
msgid "Left Button"
@@ -491,7 +555,7 @@ msgstr "Convertir"
#: src/keycode.cpp:226
msgid "Escape"
msgstr "Esc"
msgstr "Escape"
#: src/keycode.cpp:226
msgid "Final"
@@ -507,7 +571,7 @@ msgstr "Kanji"
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr "Nonconvert"
msgstr "No convertir"
#: src/keycode.cpp:227
msgid "Accept"
@@ -651,27 +715,27 @@ msgstr "Bloq Despl"
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr "Mayúscula Izquierda"
msgstr "Mayús Izqda"
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr "Mayúscula Derecha"
msgstr "Mayús Dcha"
#: src/keycode.cpp:241
msgid "Left Control"
msgstr "Control Izquierdo"
msgstr "Control Izqdo"
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr "Menú Izquierda"
msgstr "Menú Izquierdo"
#: src/keycode.cpp:241
msgid "Right Control"
msgstr "Control Derecho"
msgstr "Control Dcho"
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr "Menú Derecha"
msgstr "Menú Derecho"
#: src/keycode.cpp:243
msgid "Comma"
@@ -717,36 +781,52 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Menú Principal"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Fallo al iniciar el mundo"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"No se seleccionó mundo y no se ha especificado una dirección. Nada que "
"hacer."
"No se seleccionó mundo y no se ha especificado una dirección. Nada que hacer."
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "No se puede encontrar o cargar el juego \""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Juego especificado no válido."
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Error de conexión (¿tiempo agotado?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Consulta debug.txt para obtener más detalles."
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Controles predeterminados:\n"
#~ "- WASD: Caminar \n"
#~ "- Ratón, izquierdo: Cavar/Golpear\n"
#~ "- Ratón, derecho: Poner bloque/Usar\n"
#~ "- Ratón, rueda: seleccionar objecto\n"
#~ "- 0... 9: Seleccionar objecto\n"
#~ "- Mayúscula: caminar despacio\n"
#~ "- R: Ajustar distancia de los pedazos cargados\n"
#~ "- I: Inventario \n"
#~ "- ESC: Este Menu\n"
#~ "- T: Conversar\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.0.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-23 18:24+0200\n"
"PO-Revision-Date: 2013-02-28 17:44+0200\n"
"Last-Translator: we prefer instagib metl3 <calinou9999spam@gmail.com>\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-06-01 13:22+0200\n"
"Last-Translator: Ilya Zhuravlev <zhuravlevilya@ya.ru>\n"
"Language-Team: Français <>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "Textures d'objets..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "Chargement..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "Création du serveur..."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "Création du client..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "Résolution de l'adresse..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "Connexion au serveur..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "Quitter le jeu..."
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Voir debug.txt pour plus d'information."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
@@ -26,68 +62,68 @@ msgstr ""
"Attention : certains mods ne sont pas encore configurés.\n"
"Ils seront activés par défaut quand vous enregistrerez la configuration. "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"Attention : certains mods configurés sont introuvables.\n"
"Leur réglages seront effacés quand vous enregistrerez la configuration. "
"Leurs réglages seront effacés quand vous enregistrerez la configuration. "
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "activé"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Tout activer"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Tout désactiver"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "dépend de :"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "est requis par :"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Annuler"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Enregistrer"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Configuration enregistrée. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Attention : configuration incorrecte. "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Oui"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Non"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Nom du monde"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Jeu"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Créer"
@@ -99,264 +135,282 @@ msgstr "Vous êtes mort."
msgid "Respawn"
msgstr "Réapparaître"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Clic gauche: déplacer tous les objets -- Clic droit: déplacer un objet"
msgstr ""
"Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "OK"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "Affectation des touches"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Use\" = descendre (escalade)"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Double appui sur \"saut\" pour voler"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Touche déjà utilisée"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "appuyez sur la touche"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Avancer"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Reculer"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Gauche"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Droite"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Utiliser"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Sauter"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Marcher"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Lâcher"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Inventaire"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Parler"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Commande"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Console"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Voler"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Mode rapide"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Mode noclip"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Distance de rendu"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Imprimer stacks"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Impossible de créer le monde: le nom contient des caractères invalides"
msgstr ""
"Impossible de créer le monde : le nom contient des caractères invalides"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Impossible de créer le monde: ce nom est déjà utilisé"
msgstr "Impossible de créer le monde : ce nom est déjà utilisé"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Solo"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Multijoueur"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Avancé"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Réglages"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Crédits"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Sélectionner le monde :"
msgstr "Sélectionner un monde :"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Supprimer"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Nouveau"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Configurer"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Jouer"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Mode créatif"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Activer blessures"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Nom / MdP"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favoris :"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Liste de serveurs publics :"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Adresse / Port"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Voir serveurs publics"
msgstr "Voir les serveurs publics"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Voir serveurs favoris"
msgstr "Voir les serveurs favoris"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Rejoindre"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Laisser l'adresse vide pour lancer un serveur local."
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Démarrer / Connecter"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
msgid "Delete world"
msgstr "Supprimer monde"
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Public"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Supprimer ce monde"
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Créer un monde"
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Arbres spéciaux"
msgstr "Feuilles transparentes"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Lumière douce"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "Nuages 3D"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Eau opaque"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-mapping"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Filtrage anisotropique"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Filtrage bilinéaire"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Filtrage trilinéaire"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Shaders"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Précharger les visuels d'objets"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Activer les particules"
msgstr "Particules"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Liquides limités"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Changer touches"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Adresse requise."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Impossible de supprimer le monde : rien n'est sélectionné"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Fichiers à effacer"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Impossible de créer le monde : aucun jeu n'est présent"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Impossible de configurer ce monde : aucune sélection active"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Tous les fichiers du monde n'ont pu être effacés"
@@ -364,63 +418,76 @@ msgstr "Tous les fichiers du monde n'ont pu être effacés"
msgid "Old Password"
msgstr "Ancien mot de passe"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nouveau mot de passe"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Confirmer mot de passe"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Changer"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Mot de passe incorrect !"
msgstr "Les mots de passe ne correspondent pas !"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Continuer"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Changer mot de passe"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Volume sonore"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Quitter vers le menu"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Quitter le jeu"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
"Touches :\n"
"- ZQSD : courir\n"
"- Clic gauche : Creuser bloc\n"
"- Clic droite : Insérer bloc\n"
"- Roulette : Sélection objet\n"
"- 0...9 : Sélection objet\n"
"- Shift : marcher\n"
"- R : active la vue de tous les blocs\n"
"Contrôles:\n"
"- ZQSD : se déplacer\n"
"- Espace : sauter/grimper\n"
"- Maj. : marcher prudemment/descendre\n"
"- A : lâcher l'objet en main\n"
"- I : inventaire\n"
"- Souris : tourner/regarder\n"
"- Souris gauche : creuser/attaquer\n"
"- Souris droite : placer/utiliser\n"
"- Molette souris : sélectionner objet\n"
"- T : parler\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Volume sonore :"
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "OK"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Bouton gauche"
@@ -527,7 +594,7 @@ msgstr "Suivant"
#: src/keycode.cpp:227
msgid "Prior"
msgstr "Précèdent"
msgstr "Précédent"
#: src/keycode.cpp:227
msgid "Space"
@@ -539,7 +606,7 @@ msgstr "Bas"
#: src/keycode.cpp:228
msgid "Execute"
msgstr "Éxécuter"
msgstr "Exécuter"
#: src/keycode.cpp:228
msgid "Print"
@@ -713,37 +780,54 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoomer"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Menu principal"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Le monde n'a pas pu être initialisé"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Pas de monde sélectionné et pas d'adresse. Rien à faire."
msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire."
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "N'a pas pu trouver ou charger le jeu \""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "gamespec invalide."
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Erreur de connexion (perte de connexion ?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Voir debug.txt pour plus d'information."
#~ msgid "Delete map"
#~ msgstr "Supprimer carte"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Touches par défaut :\n"
#~ "- ZQSD : se déplacer\n"
#~ "- Clic gauche : creuser bloc\n"
#~ "- Clic droite : insérer bloc\n"
#~ "- Roulette : sélectionner objet\n"
#~ "- 0...9 : sélectionner objet\n"
#~ "- Shift : déplacement prudent\n"
#~ "- R : active la vue de tous les blocs\n"
#~ "- I : inventaire\n"
#~ "- Échap : ce menu\n"
#~ "- T : discuter\n"

File diff suppressed because it is too large Load Diff

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"PO-Revision-Date: 2013-02-22 03:27+0200\n"
"Last-Translator: Tomona Nanase <alpha.sohoh@gmail.com>\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-03-07 23:06+0200\n"
"Last-Translator: Mitori Itoshiki <mito551@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
@@ -18,347 +18,398 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"警告: いくつかのMODが未構成です.\n"
"これらは構成を保存するとデフォルトで有効化されます. "
"警告: マインテストの改造がいくつか設定されていません。\n"
"これらを設定を保存すると自動で有効化されます "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"警告: いくつかの構成済みMODが見つかりません.\n"
"これらの設定は構成を保存すると削除されます. "
"警告: いくつかの設定みの改造ファイルが見つかりません.\n"
"これらの情報は設定を保存すると削除されます. "
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "有効しました"
msgstr "有効しました"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "全部を有効する"
msgstr "全部を有効にしました"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "全部を無効する"
msgstr "全部を無効にしました"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "結合度は:"
msgstr "この改造ファイルが必要です:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "必要され:"
msgstr "この改造に必要されます:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "キャンセル"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "保存"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "設定を保存しました. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr ""
msgstr "注意:設定が一定でわありません。"
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "はい"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "いいえ"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "ワールド名"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "ゲーム"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "設ける"
msgstr "作成"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "死んでしまいました。"
msgstr "死亡しました。"
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "生まれて帰る"
msgstr "リスポーン"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "左クリックは全部のアイテムを動かす,右クリックは一つのアイテムを動かす"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "続く"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
msgstr "キーバインド"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
msgstr "「使う」は下りる"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
msgstr "「ジャンプ」を二回押すと飛べる"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "既に使われているキーです"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "キー入力待ち"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "前進"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "後退"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "左へ進む"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "右へ進む"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr ""
msgstr "使う"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "ジャンプ"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "こっそり進む"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "落とす"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "インベントリ"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "チャット"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "コマンド"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "コンソール"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr ""
msgstr "飛べるモードをトグル"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr ""
msgstr "ファストモードをトグル"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
msgstr "ノクリップモードをトグル"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "範囲選択"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "スタックの表示"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "ワールドを作成できません: 名前に無効な文字が含まれています"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "ワールドを作成できません: 同名のワールドが既に存在しています"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "シングルプレイヤー"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "マルチプレイヤー"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "高度"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "設定"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "クレジット"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "ワールド選択:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "削除"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "新規作成"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "設定"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr ""
msgstr "選択した世界に入る"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "クリエイティブモード"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "ダメージ有効"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "名前/パスワード"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
#, fuzzy
msgid "Favorites:"
msgstr "お気に入りを見せる"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "アドレス/ポート"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr ""
msgstr "公共を見せる"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr ""
msgstr "お気に入りを見せる"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "接続"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr ""
msgstr "アドレスを入力しないかぎりロカルサーバーを開始。"
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "ゲーム開始 / 接続"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
#, fuzzy
msgid "Public"
msgstr "公共を見せる"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "ワールド削除"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "ワールド作成"
#: src/guiMainMenu.cpp:611
#, fuzzy
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "風変わりな木"
msgstr "きれいな木"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
#, fuzzy
msgid "Smooth Lighting"
msgstr "自然な光表現"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3Dの雲"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "不透明な水面"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "ミップマップ"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "異方性フィルタリング"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "バイリニアフィルタリング"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "トリリニアフィルタリング"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "シェーダー"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "アイテム外観のプリロード"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "破片表現の有効化"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "キー割当て変更"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "アドレスが必要です."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "ワールドを削除できません: 何も選択されていません"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "削除されるファイル"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "ワールドを作成できません: ゲームが見つかりませんでした"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "ワールドの設定ができません: 何も選択されていません"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "ワールドファイルの全ての削除に失敗"
@@ -366,64 +417,76 @@ msgstr "ワールドファイルの全ての削除に失敗"
msgid "Old Password"
msgstr "古いパスワード"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "新しいパスワード"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "パスワードの確認"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "変更"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "新しいパスワードが一致しません!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "続ける"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "パスワードの変更"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "メニューへ戻る"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "終了"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
msgid "Left Button"
msgstr ""
msgstr "左ボタン"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr ""
msgstr "中ボタン"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr ""
msgstr "右ボタン"
#: src/keycode.cpp:223
msgid "X Button 1"
@@ -435,7 +498,7 @@ msgstr "Back Space"
#: src/keycode.cpp:224
msgid "Clear"
msgstr ""
msgstr "消す"
#: src/keycode.cpp:224
msgid "Return"
@@ -463,7 +526,7 @@ msgstr "カタカナ/ひらがな"
#: src/keycode.cpp:225
msgid "Menu"
msgstr ""
msgstr "メニュー"
#: src/keycode.cpp:225
msgid "Pause"
@@ -498,8 +561,9 @@ msgid "Nonconvert"
msgstr "無変換"
#: src/keycode.cpp:227
#, fuzzy
msgid "Accept"
msgstr ""
msgstr "Accept"
#: src/keycode.cpp:227
msgid "End"
@@ -511,7 +575,7 @@ msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr ""
msgstr "モードを変更"
#: src/keycode.cpp:227
msgid "Next"
@@ -522,112 +586,138 @@ msgid "Prior"
msgstr "Page Up"
#: src/keycode.cpp:227
#, fuzzy
msgid "Space"
msgstr ""
msgstr "Space"
#: src/keycode.cpp:228
#, fuzzy
msgid "Down"
msgstr ""
msgstr "Down"
#: src/keycode.cpp:228
#, fuzzy
msgid "Execute"
msgstr ""
msgstr "Execute"
#: src/keycode.cpp:228
#, fuzzy
msgid "Print"
msgstr ""
msgstr "Print"
#: src/keycode.cpp:228
#, fuzzy
msgid "Select"
msgstr ""
msgstr "Select"
#: src/keycode.cpp:228
#, fuzzy
msgid "Up"
msgstr ""
msgstr "Up"
#: src/keycode.cpp:229
#, fuzzy
msgid "Help"
msgstr ""
msgstr "Help"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "Insert"
#: src/keycode.cpp:229
#, fuzzy
msgid "Snapshot"
msgstr ""
msgstr "Snapshot"
#: src/keycode.cpp:232
#, fuzzy
msgid "Left Windows"
msgstr ""
msgstr "Left Windows"
#: src/keycode.cpp:233
#, fuzzy
msgid "Apps"
msgstr ""
msgstr "Apps"
#: src/keycode.cpp:233
#, fuzzy
msgid "Numpad 0"
msgstr ""
msgstr "Numpad 0"
#: src/keycode.cpp:233
#, fuzzy
msgid "Numpad 1"
msgstr ""
msgstr "Numpad 1"
#: src/keycode.cpp:233
#, fuzzy
msgid "Right Windows"
msgstr ""
msgstr "Right Windows"
#: src/keycode.cpp:233
#, fuzzy
msgid "Sleep"
msgstr ""
msgstr "Sleep"
#: src/keycode.cpp:234
#, fuzzy
msgid "Numpad 2"
msgstr ""
msgstr "Numpad 2"
#: src/keycode.cpp:234
#, fuzzy
msgid "Numpad 3"
msgstr ""
msgstr "Numpad 3"
#: src/keycode.cpp:234
#, fuzzy
msgid "Numpad 4"
msgstr ""
msgstr "Numpad 4"
#: src/keycode.cpp:234
#, fuzzy
msgid "Numpad 5"
msgstr ""
msgstr "Numpad 5"
#: src/keycode.cpp:234
#, fuzzy
msgid "Numpad 6"
msgstr ""
msgstr "Numpad 6"
#: src/keycode.cpp:234
#, fuzzy
msgid "Numpad 7"
msgstr ""
msgstr "Numpad 7"
#: src/keycode.cpp:235
#, fuzzy
msgid "Numpad *"
msgstr ""
msgstr "Numpad *"
#: src/keycode.cpp:235
#, fuzzy
msgid "Numpad +"
msgstr ""
msgstr "Numpad +"
#: src/keycode.cpp:235
#, fuzzy
msgid "Numpad -"
msgstr ""
msgstr "Numpad -"
#: src/keycode.cpp:235
#, fuzzy
msgid "Numpad /"
msgstr ""
msgstr "Numpad /"
#: src/keycode.cpp:235
#, fuzzy
msgid "Numpad 8"
msgstr ""
msgstr "Numpad 8"
#: src/keycode.cpp:235
#, fuzzy
msgid "Numpad 9"
msgstr ""
msgstr "Numpad 9"
#: src/keycode.cpp:239
msgid "Num Lock"
@@ -651,7 +741,7 @@ msgstr "左Ctrl"
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr ""
msgstr "左メニュー"
#: src/keycode.cpp:241
msgid "Right Control"
@@ -659,78 +749,81 @@ msgstr "右Ctrl"
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr ""
msgstr "右メニュー"
#: src/keycode.cpp:243
msgid "Comma"
msgstr ""
msgstr "読点"
#: src/keycode.cpp:243
#, fuzzy
msgid "Minus"
msgstr ""
msgstr "Minus"
#: src/keycode.cpp:243
#, fuzzy
msgid "Period"
msgstr ""
msgstr "Period"
#: src/keycode.cpp:243
#, fuzzy
msgid "Plus"
msgstr ""
msgstr "Plus"
#: src/keycode.cpp:247
#, fuzzy
msgid "Attn"
msgstr ""
msgstr "Attn"
#: src/keycode.cpp:247
#, fuzzy
msgid "CrSel"
msgstr ""
msgstr "CrSel"
#: src/keycode.cpp:248
#, fuzzy
msgid "Erase OEF"
msgstr ""
msgstr "Erase OEF"
#: src/keycode.cpp:248
#, fuzzy
msgid "ExSel"
msgstr ""
msgstr "ExSel"
#: src/keycode.cpp:248
#, fuzzy
msgid "OEM Clear"
msgstr ""
msgstr "OEM Clear"
#: src/keycode.cpp:248
#, fuzzy
msgid "PA1"
msgstr ""
msgstr "PA1"
#: src/keycode.cpp:248
msgid "Zoom"
msgstr ""
msgstr "ズーム"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "メインメニュー"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "ワールドの初期化に失敗"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr ""
msgstr "ゲームをロードか見つかるのに失敗"
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "接続エラー (タイムアウト?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
msgstr "接続エラー (タイムアウト?)"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,13 +17,47 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -33,56 +67,56 @@ msgstr ""
msgid "enabled"
msgstr ""
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr ""
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr ""
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr ""
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr ""
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr ""
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr ""
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr ""
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr ""
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr ""
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr ""
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr ""
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr ""
@@ -94,264 +128,280 @@ msgstr ""
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr ""
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr ""
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr ""
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr ""
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr ""
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr ""
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr ""
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr ""
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr ""
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr ""
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr ""
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr ""
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr ""
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr ""
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr ""
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr ""
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr ""
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr ""
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr ""
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr ""
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr ""
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr ""
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr ""
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr ""
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr ""
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr ""
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr ""
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr ""
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr ""
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr ""
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr ""
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr ""
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr ""
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr ""
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr ""
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr ""
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr ""
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr ""
@@ -359,51 +409,63 @@ msgstr ""
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr ""
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr ""
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr ""
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr ""
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr ""
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
@@ -698,32 +760,26 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr ""
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr ""
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""

824
po/ky/minetest.po Normal file
View File

@@ -0,0 +1,824 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-18 14:59+0200\n"
"Last-Translator: Chynggyz Jumaliev <translatorky@lavabit.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: ky\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "Буюм текстуралары..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "Жүктөлүүдө..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "Сервер жаратылууда...."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "Клиент жаратылууда..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "Дареги чечилүүдө..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "Серверге туташтырылууда..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "Оюн өчүрүлүүдө..."
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Толугураак маалымат үчүн debug.txt файлын текшериңиз."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "күйгүзүлгөн"
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Баарын күйгүзүү"
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Баарын өчүрүү"
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "көз карандылыктары:"
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "талап кылынганы:"
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Жокко чыгаруу"
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Сактоо"
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Конфигурация сакталды. "
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Эскертүү: Туура эмес конфигурация. "
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Ооба"
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Жок"
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Дүйнө аты"
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Оюн"
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Жаратуу"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Сиз өлдүңүз."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Кайтадан жаралуу"
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу"
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Улантуу"
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "баскычты басыңыз"
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Алга"
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Артка"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Солго"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Оңго"
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Колдонуу"
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Секирүү"
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Уурданып басуу"
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Ыргытуу"
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Мүлк-шайман"
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Маек"
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Команда"
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Консоль"
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Учууга которуу"
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Тез басууга которуу"
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr ""
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr ""
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Бир кишилик"
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Көп кишилик"
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Кошумча"
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Ырастоолор"
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Алкыштар"
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Дүйнөнү тандаңыз:"
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Өчүрүү"
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Жаңы"
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Ырастоо"
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Ойноо"
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Жаратуу режими"
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Убалды күйгүзүү"
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Аты/сырсөзү"
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Тандалмалар:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Жалпылык серверлердин тизмеси:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Дареги/порту"
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Жалпылыкты көрсөтүү"
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Тандалмаларды көрсөтүү"
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Туташуу"
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз."
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Оюнду баштоо/туташуу"
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Жалпылык"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Дүйнөнү өчүрүү"
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Дүйнөнү жаратуу"
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Кооз бактар"
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Тегиз жарык"
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3D-булуттар"
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Күңүрт суу"
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-текстуралоо"
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Анизатропия чыпкалоосу"
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Экисызык чыпкалоосу"
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Үчсызык чыпкалоосу"
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Көлөкөлөгүчтөр"
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr ""
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Бөлүкчөлөрдү күйгүзүү"
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Чектүү суюктук"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Баскычтарды өзгөртүү"
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Дареги талап кылынат."
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок"
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Өчүрүлө турган файлдар"
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок"
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок"
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Эски сырсөз"
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Жаңы сырсөз"
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Сырсөздү аныктоо"
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Өзгөртүү"
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Сырсөздөр дал келген жок!"
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Улантуу"
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Сырсөздү өзгөртүү"
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Үн көлөмү"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Менюга чыгуу"
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Оюндан чыгуу"
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
"Жарыяланбас башкаруу:\n"
"- WASD: басуу\n"
"- Боштугу: секирүү/өйдө чыгуу\n"
"- Shift: уурданып басуу/ылдый түшүү\n"
"- Q: буюмду таштоо\n"
"- I: мүлк-шайман\n"
"- Чычканы: бурулуу/кароо\n"
"- Сол чычкан баскычы: казуу/согуу\n"
"- Оң чычкан баскычы: коюу/колдонуу\n"
"- Чычкан дөңгөлөгү: буюмду тандоо\n"
"- T: маек\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Үн көлөмү: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Чыгуу"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Сол баскыч"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr "Ортоңку баскыч"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr "Оң баскыч"
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr ""
#: src/keycode.cpp:224
msgid "Back"
msgstr "Артка"
#: src/keycode.cpp:224
msgid "Clear"
msgstr "Тазалоо"
#: src/keycode.cpp:224
msgid "Return"
msgstr ""
#: src/keycode.cpp:224
msgid "Tab"
msgstr "Tab"
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr ""
#: src/keycode.cpp:225
msgid "Capital"
msgstr "Caps Lock"
#: src/keycode.cpp:225
msgid "Control"
msgstr "Ctrl"
#: src/keycode.cpp:225
msgid "Kana"
msgstr "Кана"
#: src/keycode.cpp:225
msgid "Menu"
msgstr "Меню"
#: src/keycode.cpp:225
msgid "Pause"
msgstr "Пауза"
#: src/keycode.cpp:225
msgid "Shift"
msgstr "Shift"
#: src/keycode.cpp:226
msgid "Convert"
msgstr ""
#: src/keycode.cpp:226
msgid "Escape"
msgstr "Esc"
#: src/keycode.cpp:226
msgid "Final"
msgstr ""
#: src/keycode.cpp:226
msgid "Junja"
msgstr "Junja"
#: src/keycode.cpp:226
msgid "Kanji"
msgstr "Кандзи"
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr ""
#: src/keycode.cpp:227
msgid "Accept"
msgstr "Кабыл алуу"
#: src/keycode.cpp:227
msgid "End"
msgstr "End"
#: src/keycode.cpp:227
msgid "Home"
msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr "Режимди өзгөртүү"
#: src/keycode.cpp:227
msgid "Next"
msgstr "Кийинки"
#: src/keycode.cpp:227
msgid "Prior"
msgstr ""
#: src/keycode.cpp:227
msgid "Space"
msgstr "Боштук"
#: src/keycode.cpp:228
msgid "Down"
msgstr "Ылдый"
#: src/keycode.cpp:228
msgid "Execute"
msgstr "Аткаруу"
#: src/keycode.cpp:228
msgid "Print"
msgstr "Басма"
#: src/keycode.cpp:228
msgid "Select"
msgstr "Тандоо"
#: src/keycode.cpp:228
msgid "Up"
msgstr "Өйдө"
#: src/keycode.cpp:229
msgid "Help"
msgstr "Жардам"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "Insert"
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr "Тез сүрөт"
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr "Сол Windows"
#: src/keycode.cpp:233
msgid "Apps"
msgstr "Тиркемелер"
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr "Кош. клав. 0"
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr "Кош. клав. 1"
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr "Оң Windows"
#: src/keycode.cpp:233
msgid "Sleep"
msgstr "Уйку"
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr "Кош. клав. 2"
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr "Кош. клав. 3"
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr "Кош. клав. 4"
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr "Кош. клав. 5"
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr "Кош. клав. 6"
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr "Кош. клав. 7"
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr "Кош. клав. *"
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr "Кош. клав. +"
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr "Кош. клав. -"
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr "Кош. клав. /"
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr "Кош. клав. 8"
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr "Кош. клав. 9"
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr "Num Lock"
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr "Scroll Lock"
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr "Сол Shift"
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr "Оң Shift"
#: src/keycode.cpp:241
msgid "Left Control"
msgstr "Сол Ctrl"
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr "Сол меню"
#: src/keycode.cpp:241
msgid "Right Control"
msgstr "Оң Ctrl"
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr "Оң меню"
#: src/keycode.cpp:243
msgid "Comma"
msgstr "Үтүр"
#: src/keycode.cpp:243
msgid "Minus"
msgstr "Кемитүү белгиси"
#: src/keycode.cpp:243
msgid "Period"
msgstr "Айланма сан"
#: src/keycode.cpp:243
msgid "Plus"
msgstr "Кошуу белгиси"
#: src/keycode.cpp:247
msgid "Attn"
msgstr ""
#: src/keycode.cpp:247
msgid "CrSel"
msgstr ""
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr ""
#: src/keycode.cpp:248
msgid "ExSel"
msgstr ""
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr ""
#: src/keycode.cpp:248
msgid "PA1"
msgstr ""
#: src/keycode.cpp:248
msgid "Zoom"
msgstr "Масштаб"
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Башкы меню"
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr ""
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок."
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Оюнду табуу же жүктөө мүмкүн эмес \""
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Жарыяланбас башкаруу:\n"
#~ "- WASD: Басуу\n"
#~ "- Сол кнопкасы: казуу/согуу\n"
#~ "- Оң кнопкасы: коюу/колдонуу\n"
#~ "- Чычкан дөңгөлөгү: буюмду тандоо\n"
#~ "- 0...9: буюмду тандоо\n"
#~ "- Shift: уурданып басуу\n"
#~ "- R: алыс кароо\n"
#~ "- I: мүлк-шайман\n"
#~ "- ESC: бул меню\n"
#~ "- T: маек\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,13 +17,47 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -33,56 +67,56 @@ msgstr ""
msgid "enabled"
msgstr ""
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr ""
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr ""
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr ""
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr ""
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr ""
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr ""
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr ""
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr ""
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr ""
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr ""
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr ""
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr ""
@@ -94,264 +128,280 @@ msgstr ""
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr ""
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr ""
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr ""
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr ""
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr ""
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr ""
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr ""
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr ""
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr ""
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr ""
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr ""
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr ""
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr ""
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr ""
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr ""
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr ""
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr ""
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr ""
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr ""
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr ""
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr ""
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr ""
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr ""
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr ""
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr ""
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr ""
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr ""
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr ""
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr ""
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr ""
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr ""
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr ""
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr ""
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr ""
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr ""
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr ""
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr ""
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr ""
@@ -359,51 +409,63 @@ msgstr ""
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr ""
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr ""
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr ""
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr ""
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr ""
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
@@ -698,32 +760,26 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr ""
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr ""
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""

790
po/nb/minetest.po Normal file
View File

@@ -0,0 +1,790 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-02 08:17+0200\n"
"Last-Translator: Sindre Tellevik <graknol@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: nb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n"
"De vil bli aktivert som standard når du lagrer konfigurasjonen."
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"Advarsel: Noen konfigurerte modifikasjoner mangler. \n"
"Instillingene deres vil bli fjernet når du lagrer konfigurasjonen."
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "aktivert"
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Aktiver Alle"
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Deaktiver Alle"
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "Avhenger av:"
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "trengs av:"
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Avbryt"
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Lagre"
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Konfigurasjon lagret.…"
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr ""
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Ja"
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Nei"
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Navnet på verdenen"
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Spill"
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Opprett"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Du døde."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr ""
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr ""
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr ""
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr ""
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr ""
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr ""
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr ""
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr ""
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr ""
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr ""
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr ""
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr ""
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr ""
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr ""
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr ""
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr ""
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr ""
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr ""
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr ""
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr ""
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr ""
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr ""
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr ""
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr ""
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr ""
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr ""
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr ""
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr ""
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr ""
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr ""
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr ""
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr ""
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr ""
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr ""
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr ""
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr ""
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr ""
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr ""
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr ""
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr ""
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr ""
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr ""
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr ""
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
msgid "Left Button"
msgstr ""
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr ""
#: src/keycode.cpp:223
msgid "Right Button"
msgstr ""
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr ""
#: src/keycode.cpp:224
msgid "Back"
msgstr ""
#: src/keycode.cpp:224
msgid "Clear"
msgstr ""
#: src/keycode.cpp:224
msgid "Return"
msgstr ""
#: src/keycode.cpp:224
msgid "Tab"
msgstr ""
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr ""
#: src/keycode.cpp:225
msgid "Capital"
msgstr ""
#: src/keycode.cpp:225
msgid "Control"
msgstr ""
#: src/keycode.cpp:225
msgid "Kana"
msgstr ""
#: src/keycode.cpp:225
msgid "Menu"
msgstr ""
#: src/keycode.cpp:225
msgid "Pause"
msgstr ""
#: src/keycode.cpp:225
msgid "Shift"
msgstr ""
#: src/keycode.cpp:226
msgid "Convert"
msgstr ""
#: src/keycode.cpp:226
msgid "Escape"
msgstr ""
#: src/keycode.cpp:226
msgid "Final"
msgstr ""
#: src/keycode.cpp:226
msgid "Junja"
msgstr ""
#: src/keycode.cpp:226
msgid "Kanji"
msgstr ""
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr ""
#: src/keycode.cpp:227
msgid "Accept"
msgstr ""
#: src/keycode.cpp:227
msgid "End"
msgstr ""
#: src/keycode.cpp:227
msgid "Home"
msgstr ""
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr ""
#: src/keycode.cpp:227
msgid "Next"
msgstr ""
#: src/keycode.cpp:227
msgid "Prior"
msgstr ""
#: src/keycode.cpp:227
msgid "Space"
msgstr ""
#: src/keycode.cpp:228
msgid "Down"
msgstr ""
#: src/keycode.cpp:228
msgid "Execute"
msgstr ""
#: src/keycode.cpp:228
msgid "Print"
msgstr ""
#: src/keycode.cpp:228
msgid "Select"
msgstr ""
#: src/keycode.cpp:228
msgid "Up"
msgstr ""
#: src/keycode.cpp:229
msgid "Help"
msgstr ""
#: src/keycode.cpp:229
msgid "Insert"
msgstr ""
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr ""
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr ""
#: src/keycode.cpp:233
msgid "Apps"
msgstr ""
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr ""
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr ""
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr ""
#: src/keycode.cpp:233
msgid "Sleep"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr ""
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr ""
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr ""
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr ""
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr ""
#: src/keycode.cpp:241
msgid "Left Control"
msgstr ""
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr ""
#: src/keycode.cpp:241
msgid "Right Control"
msgstr ""
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr ""
#: src/keycode.cpp:243
msgid "Comma"
msgstr ""
#: src/keycode.cpp:243
msgid "Minus"
msgstr ""
#: src/keycode.cpp:243
msgid "Period"
msgstr ""
#: src/keycode.cpp:243
msgid "Plus"
msgstr ""
#: src/keycode.cpp:247
msgid "Attn"
msgstr ""
#: src/keycode.cpp:247
msgid "CrSel"
msgstr ""
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr ""
#: src/keycode.cpp:248
msgid "ExSel"
msgstr ""
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr ""
#: src/keycode.cpp:248
msgid "PA1"
msgstr ""
#: src/keycode.cpp:248
msgid "Zoom"
msgstr ""
#: src/main.cpp:1680
msgid "Main Menu"
msgstr ""
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr ""
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr ""

819
po/nl/minetest.po Normal file
View File

@@ -0,0 +1,819 @@
# SOME DESCRIPTIVE TITLE. DUTCH TRANSLATION
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-01 22:18+0200\n"
"Last-Translator: Sfan5 . <sfan5@live.de>\n"
"Language-Team: \n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Check debug.txt for details."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"Let op: Nog niet alle mods zijn geconfigueerd. \n"
"De mods zullen automatisch worden ingeschakeld als je de configuratie "
"bewaard. "
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"LEt op: Sommige ingestelde mods zijn vermist.\n"
"Hun instellingen worden verwijderd als je de configuratie opslaat. "
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "ingeschakeld"
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Allen inschakelen"
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Allen uitschakelen"
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "heeft nodig:"
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "is benodigd voor:"
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Annuleer"
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Bewaar"
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Instellingen bewaard. "
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Waarschuwing: Instellingen niet consistent. "
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Ja"
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Nee"
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Naam wereld"
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Spel"
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Maak aan"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Je bent gestorven."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Respawn"
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item"
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Volgende"
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "Sneltoetsen."
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Use\" = Omlaag klimmen"
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Dubbelklik op \"jump\" om te vliegen"
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Toets is al in gebruik"
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "druk op"
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Vooruit"
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Achteruit"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Links"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Rechts"
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Gebruikwn"
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Springen"
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Kruipen"
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Weggooien"
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Rugzak"
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Chat"
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Opdracht"
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Console"
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Vliegen aan/uit"
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Snel bewegen aan/uit"
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Noclip aan/uit"
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Range instellen"
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Print stacks"
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens"
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Kan geen nieuwe wereld aanmaken: De naam bestaat al"
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Singleplayer"
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Multiplayer"
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Geavanceerd"
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Instellingen"
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Credits"
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Selecteer Wereld:"
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Verwijderen"
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Nieuw"
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Instellingen"
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Speel"
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Creative Modus"
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Schade inschakelen"
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Naam/Wachtwoord"
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favourieten:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Publieke Server lijst:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "IP-Adres/Poort"
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Publieke server"
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Favourieten"
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Verbinden"
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Laat het adres leeg om een lokale server te starten."
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Start het spel / Verbind"
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Publiek"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Verwijder wereld"
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Maak wereld aan"
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Mooie bomen"
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Mooie verlichting"
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3D wolken"
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Doorzichtig water"
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Bi-Linear Filtering"
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Bi-Linear Filtering"
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Tri-Linear Filtering"
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Shaders"
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Preload item visuals"
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Enable Particles"
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Finite liquid"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Sneltoetsen veranderen"
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "IP-adres nodig."
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Kan niets verwijderen: Geen wereld geselecteerd"
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Deze bestanden worden verwijderd"
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Kan geen wereld aanmaken: Geen games gevonden"
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Kan instellingen niet aanpassen: Niets geselecteerd"
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Niet alle bestanden zijn verwijderd"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Huidig wachtwoord"
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nieuw wachtwoord"
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Herhaal wachtwoord"
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Veranderen"
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Wachtwoorden zijn niet gelijk!"
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Volgende"
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Verander wachtwoord"
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Volume"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Exit naar menu"
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Afsluiten"
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Volume: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Exit"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Linkermuisknop"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr "Muiswielknop"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr "Rechtmuisknop"
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr "X knop 1"
#: src/keycode.cpp:224
msgid "Back"
msgstr "Terug"
#: src/keycode.cpp:224
msgid "Clear"
msgstr "Wissen"
#: src/keycode.cpp:224
msgid "Return"
msgstr "Return"
#: src/keycode.cpp:224
msgid "Tab"
msgstr "Tab"
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr "X knop 2"
#: src/keycode.cpp:225
msgid "Capital"
msgstr "Kapitaal"
#: src/keycode.cpp:225
msgid "Control"
msgstr "Control"
#: src/keycode.cpp:225
msgid "Kana"
msgstr "Kana"
#: src/keycode.cpp:225
msgid "Menu"
msgstr "Menu"
#: src/keycode.cpp:225
msgid "Pause"
msgstr "Pauze"
#: src/keycode.cpp:225
msgid "Shift"
msgstr "Shift"
#: src/keycode.cpp:226
msgid "Convert"
msgstr "Converteren"
#: src/keycode.cpp:226
msgid "Escape"
msgstr "Escape"
#: src/keycode.cpp:226
msgid "Final"
msgstr "Final"
#: src/keycode.cpp:226
msgid "Junja"
msgstr "Junja"
#: src/keycode.cpp:226
msgid "Kanji"
msgstr "Kanji"
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr "Nonconvert"
#: src/keycode.cpp:227
msgid "Accept"
msgstr "Accepteren"
#: src/keycode.cpp:227
msgid "End"
msgstr "End"
#: src/keycode.cpp:227
msgid "Home"
msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr "Modus veranderen"
#: src/keycode.cpp:227
msgid "Next"
msgstr "Volgende"
#: src/keycode.cpp:227
msgid "Prior"
msgstr "Eerste"
#: src/keycode.cpp:227
msgid "Space"
msgstr "Spatie"
#: src/keycode.cpp:228
msgid "Down"
msgstr "Omlaag"
#: src/keycode.cpp:228
msgid "Execute"
msgstr "Uitvoeren"
#: src/keycode.cpp:228
msgid "Print"
msgstr "Print"
#: src/keycode.cpp:228
msgid "Select"
msgstr "Selecteren"
#: src/keycode.cpp:228
msgid "Up"
msgstr "Omhoog"
#: src/keycode.cpp:229
msgid "Help"
msgstr "Help"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "Insert"
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr "Screenshot"
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr "Linker Windowstoets"
#: src/keycode.cpp:233
msgid "Apps"
msgstr "Apps"
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr "Numpad 0"
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr "Numpad 1"
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr "Rechter Windowstoets"
#: src/keycode.cpp:233
msgid "Sleep"
msgstr "Slaapknop"
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr "Numpad 2"
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr "Numpad 3"
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr "Numpad 4"
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr "Numpad 5"
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr "Numpad 6"
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr "Numpad 7"
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr "Numpad *"
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr "Numpad +"
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr "Numpad -"
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr "Numpad /"
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr "Numpad 8"
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr "Numpad 9"
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr "Num Lock"
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr "Scroll Lock"
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr "Linker Shift"
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr "Rechter Shift"
#: src/keycode.cpp:241
msgid "Left Control"
msgstr "Linker Ctrl"
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr "Linker Menu"
#: src/keycode.cpp:241
msgid "Right Control"
msgstr "Rechter Ctrl"
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr "Rechter Menu"
#: src/keycode.cpp:243
msgid "Comma"
msgstr "Komma"
#: src/keycode.cpp:243
msgid "Minus"
msgstr "Min"
#: src/keycode.cpp:243
msgid "Period"
msgstr "Punt"
#: src/keycode.cpp:243
msgid "Plus"
msgstr "Plus"
#: src/keycode.cpp:247
msgid "Attn"
msgstr "Attn"
#: src/keycode.cpp:247
msgid "CrSel"
msgstr "CrSel"
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr "Erase OEF"
#: src/keycode.cpp:248
msgid "ExSel"
msgstr "ExSel"
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr "OEM Clear"
#: src/keycode.cpp:248
msgid "PA1"
msgstr "PA1"
#: src/keycode.cpp:248
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Hoofdmenu"
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Laden van wereld is mislukt"
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Geen wereld en adres geselecteerd. Niks te doen."
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Kan niet de game laden of vinden \""
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Onjuiste gamespec."
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Connection error (timed out?)"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Default Besturing:\n"
#~ "- WASD: Lopen\n"
#~ "- Linkermuisknop: Graaf/Sla\n"
#~ "- Rechtmuisknop: Plaats/Gebruik\n"
#~ "- Muiswiel: selecteer item\n"
#~ "- 0...9: selecteer item\n"
#~ "- Shift: kruipen\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Rugzak\n"
#~ "- ESC: Menu\n"
#~ "- T: Chat\n"

View File

@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-23 18:24+0200\n"
"PO-Revision-Date: 2013-02-22 16:59+0200\n"
"Last-Translator: Maciej Kasatkin <maciej.kasatkin@yahoo.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-04-21 23:38+0200\n"
"Last-Translator: Daniel \"Tracerneo\" Ziółkowski <ziolkoneo@gmail.com>\n"
"Language-Team: Polish <>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,15 +19,51 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Sprawdź plik debug.txt by uzyskać więcej informacji."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"Ostrzeżenie: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n"
"Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n"
"Zostaną domyślnie włączone gdy zapiszesz konfigurację. "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -39,56 +75,56 @@ msgstr ""
msgid "enabled"
msgstr "włączone"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Włącz wszystkie"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Wyłącz wszystkie"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "zależne od:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "wymagane przez:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Anuluj"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Zapisz"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Konfiguracja zapisana. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Tak"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Nie"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Nazwa świata"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Gra"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Utwórz"
@@ -100,344 +136,361 @@ msgstr "Zginąłeś."
msgid "Respawn"
msgstr "Wróć do gry"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
"Lewy klik: Przenieś wszystkie przedmioty, Prawy klik: przenieś pojedynczy "
"przedmiot"
"Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: "
"przenieś pojedynczy przedmiot"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Kontynuuj"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
"Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane "
"klawisze z pliku minetest.conf)"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Użyj\" = wspinaj się"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Klawisz już zdefiniowany"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "naciśnij klawisz"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Do przodu"
msgstr "Przód"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Do tu"
msgstr "Tył"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Lewo"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Prawo"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Użyj"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Skok"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Skradanie"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Upuść"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Inwentarz"
msgstr "Ekwipunek"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Czat"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Komenda"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Konsola"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Przełącz tryb latania"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Przełącz tryb szybki"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Przełącz tryb noclip"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Zasięg widzenia"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Print stacks"
msgstr "Drukuj stosy"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Nie można stworzyć świata: nazwa zawiera niedozwolone znaki"
msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Nie można stworzyć świata: Istnieje już świat o takiej nazwie"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Pojedynczy gracz"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Gra wieloosobowa"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Zaawansowane"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Ustawienia"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Autorzy"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Wybierz świat:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Skasuj"
msgstr "Usuń"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Nowy"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Ustaw"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Graj"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Tryb kreatywny"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Włącz obrażenia"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Nazwa gracza/Hasło"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Ulubione:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Lista publicznych serwerów:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Adres/Port"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Pokaż publiczne"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Pokaż ulubione"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Połącz"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Nie wpisuj adresu by uruchomić lokalny serwer."
msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny."
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Rozpocznij grę/Połącz"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
msgid "Delete world"
msgstr "Skasuj świat"
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Publiczne"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Usuń świat"
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Stwórz świat"
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Ozdobne drzewa"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Płynne oświetlenie"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "Chmury 3D"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Nieprzeźroczysta woda"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mappowanie"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Filtrowanie anizotropowe"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Dwuliniowe filtrowanie"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Trójliniowe filtrowanie"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Shadery"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Ładuj obrazy przedmiotów"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Włącz cząstki"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Realistyczne ciecze"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Zmień klawisze"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Wymagany adres."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Nie można skasować świata: nic nie zaznaczono"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Pliki do skasowania"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Nie można skonfigurować świata: Nic nie zaznaczono"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Nie można skasować wszystkich plików świata"
msgstr "Nie udało się skasować wszystkich plików świata"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Stare hasło"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nowe hasło"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Potwierdź hasło"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Zmień"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Hasła nie są jednakowe!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Dalej"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Zmień hasło"
#: src/guiPauseMenu.cpp:135
msgid "Exit to Menu"
msgstr "Wyjdź do menu"
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Głośność"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Wyjście do menu"
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Wyjście z gry"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
"Domyślne ustawienia:\n"
"- WASD: poruszanie\n"
"- Lewy przycisk myszki: kop/uderz\n"
"- Prawy przycisk myszki: połóż/użyj\n"
"- Kółko myszki: wybieranie przedmiotu\n"
"- 0...9: wybieranie przedmiotu\n"
"- Shift: skradanie\n"
"- R: przełączanie trybu widoczności\n"
"- I: menu posiadanych przedmiotów\n"
"- ESC: to menu\n"
"- T: Czat\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Głośność: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Wyjście"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Lewy przycisk myszki"
msgstr "Lewy przycisk myszy"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr "Środkowy przycisk myszki"
msgstr "Środkowy przycisk myszy"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr "Prawy przycisk myszki"
msgstr "Prawy przycisk myszy"
#: src/keycode.cpp:223
msgid "X Button 1"
@@ -561,7 +614,7 @@ msgstr "Góra"
#: src/keycode.cpp:229
msgid "Help"
msgstr "Help"
msgstr "Pomoc"
#: src/keycode.cpp:229
msgid "Insert"
@@ -719,34 +772,51 @@ msgstr "PA1"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Menu główne"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Inicjalizacja świata nie powiodła się"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "Nie wybrano świata ani adresu."
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Nie można znaleźć lub wczytać trybu gry \""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Nieprawidłowa specyfikacja trybu gry."
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Błąd połączenia (brak odpowiedzi?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Sprawdź plik debug.txt by uzyskać więcej informacji."
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Domyślne ustawienia:\n"
#~ "- WASD: poruszanie\n"
#~ "- Lewy przycisk myszki: kop/uderz\n"
#~ "- Prawy przycisk myszki: połóż/użyj\n"
#~ "- Kółko myszy: wybieranie przedmiotu\n"
#~ "- 0...9: wybieranie przedmiotu\n"
#~ "- Shift: skradanie\n"
#~ "- R: przełączanie trybu widoczności\n"
#~ "- I: menu ekwipunku\n"
#~ "- ESC: to menu\n"
#~ "- T: czat\n"

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"PO-Revision-Date: 2013-02-26 20:10+0200\n"
"Last-Translator: Francizca Rodriguez <joaoadriano3@gmail.com>\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-30 00:13+0200\n"
"Last-Translator: v c <vicente.camolas@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
@@ -18,409 +18,473 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "Texturas dos items..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "A carregar..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "A criar servidor..."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "A criar cliente..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "A resolver endereço..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "A conectar ao servidor..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "A desligar..."
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Consulte debug.txt para mais detalhes."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"Alerta: Alguns mods ainda não estão configurados.\n"
"Eles vão ser ativos por predefinição quando guardar a configuração. "
"Atenção: Alguns mods ainda não estão configurados.\n"
"Eles vão ser ativados por predefinição quando guardar a configuração. "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"Alerta: Alguns mods configurados estão em falta.\n"
"As definições vão ser removidas quando gravar a configuração. "
"Atenção: Alguns mods configurados estão em falta.\n"
"As suas definições vão ser removidas quando gravar a configuração. "
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "ativo"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Ativar Tudo"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Desativar Tudo"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "depende de:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "é necessário pelo:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Cancelar"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Guardar"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Configuração gravada. "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Alerta: Configuração não compativel. "
msgstr "Atenção: Configuração não compatível. "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Sim"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Não"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Nome do Mundo"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Jogo"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Criar"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Estás morto."
msgstr "Morreste."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Renascer"
msgstr "Reaparecer"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Botão esq.: Mover todos os items, Botão dir.: Mover um item"
msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Continuar"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "Teclas. (Se este menu estragar-se, remova as linhas do minetest.conf)"
msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Use\" = ir para baixo"
msgstr "\"Use\" = descer"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Duas vezes \"saltar\" para ativar vôo"
msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Tecla já em uso"
#: src/guiKeyChangeMenu.cpp:347
msgid "press key"
msgstr "pressione tecla"
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "pressione a tecla"
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Avançar"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Para trás"
msgstr "Recuar"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Esquerda"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Direita"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Usar"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Saltar"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Agachar"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Dropar"
msgstr "Largar"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Inventário"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "CHAT"
msgstr "Conversa"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Comando"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Consola"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Ativar vôo"
msgstr "Ativar/Desativar vôo"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Ativar correr"
msgstr "Ativar/Desativar correr"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Ativar noclip"
msgstr "Ativar/Desativar noclip"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Seleccionar Distância"
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Imprimir stacks"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Não foi possível criar mundo: Nome com carácteres inválidos"
msgstr "Não foi possível criar mundo: Nome com caracteres inválidos"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Não foi possivel criar mundo: Mundo com este nome já existente"
msgstr "Não foi possível criar mundo: Já existe um mundo com este nome"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Um Jogador"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Multijogador"
msgstr "Vários jogadores"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Avançado"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Definições"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Créditos"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Seleccionar Mundo:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Eliminar"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Novo"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Configurar"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Jogar"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Modo Criativo"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Ativar Dano"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Nome/Senha"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favoritos:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Lista de servidores públicos:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Endereço/Porta"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Mostrar Públicos"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Mostrar Favoritos"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Conectar"
msgstr "Ligar"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Deixe endereço em branco para iniciar servidor local."
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Iniciar Jogo / Conectar"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Público"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Eliminar mundo"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Criar mundo"
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Árvores Melhoradas"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Iluminação Suave"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "Nuvens 3D"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Água Opaca"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Filtro Anisotropico"
msgstr "Filtro Anisotrópico"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Filtro Bi-Linear"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Filtro Tri-Linear"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Sombras"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Precarregamento dos items"
msgstr "Pré-carregamento dos itens"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Ativar Particulas"
msgstr "Ativar Partículas"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Líquido finito"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Mudar teclas"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "Endereço necessário."
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Não foi possível eliminar mundo: Nada seleccionado"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Ficheiros para eliminar"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Não foi possivel criar mundo: Jogos não detectados"
msgstr "Não foi possível criar mundo: Não foram detectados jogos"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Não foi possivel configurar mundo: Nada seleccionado"
msgstr "Não foi possível configurar mundo: Nada seleccionado"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Remoção dos ficheiros dos mundos falhada"
msgstr "Falhou a remoção de todos os ficheiros dos mundos"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Senha antiga"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Senha Nova"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Confirmar Senha"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Mudar"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "Senhas não correspondem!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Continuar"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Mudar Senha"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Volume do som"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Sair para Menu"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Sair para SO"
msgstr "Sair para o sistema"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
"Controlos Normais:\n"
"- WASD: Andar\n"
"- Botão esq.: partir/atacar\n"
"- Botão dir.: colocar/usar\n"
"- Roda do Rato: seleccionar item\n"
"- 0...9: seleccionar item\n"
"- Shift: agachar\n"
"- R: Mudar visualização de todos os chunks\n"
"Teclas por defeito:\n"
"- WASD: mover\n"
"- Barra de espaço: saltar/subir\n"
"- Shift: andar cuidadosamente/descer\n"
"- Q: Largar item\n"
"- I: Inventário\n"
"- ESC: Este menu\n"
"- T: Chat\n"
"- Rato: virar/olhar\n"
"- Clique esquerdo: cavar/bater\n"
"- Clique direito: colocar/utilizar\n"
"- Roda do rato: seleccionar item\n"
"- T: conversação\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Volume do som: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Sair"
#: src/keycode.cpp:223
msgid "Left Button"
@@ -480,7 +544,7 @@ msgstr "Pausa"
#: src/keycode.cpp:225
msgid "Shift"
msgstr "SHIFT"
msgstr "Shift"
#: src/keycode.cpp:226
msgid "Convert"
@@ -512,15 +576,15 @@ msgstr "Aceitar"
#: src/keycode.cpp:227
msgid "End"
msgstr "END"
msgstr "End"
#: src/keycode.cpp:227
msgid "Home"
msgstr "HOME"
msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr "MODE Change"
msgstr "Mode Change"
#: src/keycode.cpp:227
msgid "Next"
@@ -544,7 +608,7 @@ msgstr "Executar"
#: src/keycode.cpp:228
msgid "Print"
msgstr "PRINT"
msgstr "Print"
#: src/keycode.cpp:228
msgid "Select"
@@ -560,7 +624,7 @@ msgstr "Ajuda"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "INSERT"
msgstr "Insert"
#: src/keycode.cpp:229
msgid "Snapshot"
@@ -714,35 +778,52 @@ msgstr "PAL"
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Menu Principal"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Falha ao iniciar mundo"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer."
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Não foi possível encontrar ou carregar jogo \""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "gamespec inválido."
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Erro de conexão (excedeu tempo?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Verifique debug.txt para mais detalhes."
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Controlos Normais:\n"
#~ "- WASD: Andar\n"
#~ "- Botão esq.: partir/atacar\n"
#~ "- Botão dir.: colocar/usar\n"
#~ "- Roda do Rato: seleccionar item\n"
#~ "- 0...9: seleccionar item\n"
#~ "- Shift: agachar\n"
#~ "- R: Mudar visualização de todos os chunks\n"
#~ "- I: Inventário\n"
#~ "- ESC: Este menu\n"
#~ "- T: Chat\n"

831
po/pt_BR/minetest.po Normal file
View File

@@ -0,0 +1,831 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-15 18:58+0200\n"
"Last-Translator: Frederico Guimarães <frederico@teia.bio.br>\n"
"Language-Team: LANGUAGE <contato@ejweb.com.br>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "Texturas dos itens..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "Carregando..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "Criando o servidor..."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "Criando o cliente..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "Resolvendo os endereços..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "Conectando ao servidor..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "Desligando tudo..."
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"Verifique o debug.txt para mais detalhes."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
"Atenção: Alguns mods ainda não foram configurados.\n"
"E eles serão ativados por padrão, quando você salvar a configuração."
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
"Atenção: Alguns mods configurados não foram encontrados.\n"
"Suas definições serão removidas quando você salvar a configuração."
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr "habilitado"
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Habilitar tudo"
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Desabilitar tudo"
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "depende de:"
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "é necessário para:"
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "Cancelar"
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Salvar"
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "A configuração foi salva. "
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Atenção: A configuração não está consistente."
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "Sim"
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "Não"
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "Nome do mundo"
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "Jogo"
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "Criar"
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr "Você morreu."
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr "Reviver"
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "Botão esq.: Move todos os itens, Botão dir.: Move um item"
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "Continuar"
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
"Teclas. (Se este menu estiver com problema, remova itens do minetest.conf)"
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "\"Usar\" = desce"
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "Aperte duas vezes \"saltar\" para ativar o voo"
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "Essa tecla já está em uso"
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "pressione uma tecla"
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Avançar"
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Voltar"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Esquerda"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "Direita"
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Usar"
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "Saltar"
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Esgueirar"
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Soltar"
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "Inventário"
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "Bate-papo"
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "Comando"
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "Console"
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "Alternar voo"
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "Alternar corrida"
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "Alternar mov.livre"
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "Selecionar distância"
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "Imprimir pilha (log)"
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos"
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "Não foi possivel criar o mundo: Já existe um mundo com esse nome"
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "Um jogador"
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "Vários jogadores"
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "Avançado"
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "Configurações"
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "Créditos"
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "Selecione um mundo:"
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "Excluir"
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "Novo"
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "Configurar"
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "Jogar"
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "Modo criativo"
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "Habilitar dano"
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "Nome/Senha"
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "Favoritos:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "Lista de servidores públicos:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "Endereço/Porta"
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "Exibir públicos"
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "Exibir favoritos"
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "Conectar"
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "Deixe o endereço em branco para iniciar um servidor local."
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "Iniciar o jogo/Conectar"
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "Público"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "Excluir o mundo"
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "Criar o mundo"
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "Árvores mais detalhadas"
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "Iluminação suave"
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "Nuvens 3D"
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "Água opaca"
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "Mip-Mapping"
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "Filtragem anisotrópica"
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "Filtragem bi-linear"
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "Filtragem tri-linear"
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "Sombreadores"
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "Precarga dos elementos visuais"
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "Habilitar partículas"
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "Líquido finito"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "Mudar teclas"
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "É necessário um endereço."
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado"
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "Arquivos a serem excluídos"
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo"
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "Não foi possível configurar o mundo: Nada foi selecionado"
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "Não foi possível excluir todos os arquivos do mundo"
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr "Senha antiga"
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "Nova senha"
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "Confirmar a senha"
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "Alterar"
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "As senhas não correspondem!"
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "Continuar"
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "Alterar a senha"
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "Volume do som"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "Sair para o menu"
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "Sair do Minetest"
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
"Controles padrão:\n"
"- WASD: mover\n"
"- Espaço: pular/escalar\n"
"- Shift: esgueirar/descer\n"
"- Q: descartar o item\n"
"- I: inventário\n"
"- Mouse: virar/olhar\n"
"- Botão esq. do mouse: cavar/atingir\n"
"- Botão dir. do mouse: colocar/usar\n"
"- Roda do mouse: selecionar item\n"
"- T: bate-papo\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "Volume do som: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "Sair"
#: src/keycode.cpp:223
msgid "Left Button"
msgstr "Botão esquerdo"
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr "Roda do mouse"
#: src/keycode.cpp:223
msgid "Right Button"
msgstr "Botão direito"
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr "Botão X 1"
#: src/keycode.cpp:224
msgid "Back"
msgstr "Backspace"
#: src/keycode.cpp:224
msgid "Clear"
msgstr "Limpar"
#: src/keycode.cpp:224
msgid "Return"
msgstr "Enter"
#: src/keycode.cpp:224
msgid "Tab"
msgstr "Tab"
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr "Botão X 2"
#: src/keycode.cpp:225
msgid "Capital"
msgstr "Caps Lock"
#: src/keycode.cpp:225
msgid "Control"
msgstr "Ctrl"
#: src/keycode.cpp:225
msgid "Kana"
msgstr "Kana"
#: src/keycode.cpp:225
msgid "Menu"
msgstr "Menu"
#: src/keycode.cpp:225
msgid "Pause"
msgstr "Pause"
#: src/keycode.cpp:225
msgid "Shift"
msgstr "Shift"
#: src/keycode.cpp:226
msgid "Convert"
msgstr "Convert"
#: src/keycode.cpp:226
msgid "Escape"
msgstr "Esc"
#: src/keycode.cpp:226
msgid "Final"
msgstr "Final"
#: src/keycode.cpp:226
msgid "Junja"
msgstr "Junja"
#: src/keycode.cpp:226
msgid "Kanji"
msgstr "Kanji"
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr "Nonconvert"
#: src/keycode.cpp:227
msgid "Accept"
msgstr "Aceitar"
#: src/keycode.cpp:227
msgid "End"
msgstr "End"
#: src/keycode.cpp:227
msgid "Home"
msgstr "Home"
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr "Mode Change"
#: src/keycode.cpp:227
msgid "Next"
msgstr "Page Down"
#: src/keycode.cpp:227
msgid "Prior"
msgstr "Page Up"
#: src/keycode.cpp:227
msgid "Space"
msgstr "Espaço"
#: src/keycode.cpp:228
msgid "Down"
msgstr "Abaixo"
#: src/keycode.cpp:228
msgid "Execute"
msgstr "Executar"
#: src/keycode.cpp:228
msgid "Print"
msgstr "Print Screen"
#: src/keycode.cpp:228
msgid "Select"
msgstr "Select"
#: src/keycode.cpp:228
msgid "Up"
msgstr "Acima"
#: src/keycode.cpp:229
msgid "Help"
msgstr "Ajuda"
#: src/keycode.cpp:229
msgid "Insert"
msgstr "Insert"
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr "Captura de tela"
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr "Windows esq."
#: src/keycode.cpp:233
msgid "Apps"
msgstr "Apps"
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr "Tecl.num.0"
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr "Tecl.num.1"
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr "Windows dir."
#: src/keycode.cpp:233
msgid "Sleep"
msgstr "Sleep"
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr "Tecl.num.2"
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr "Tecl.num.3"
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr "Tecl.num.4"
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr "Tecl.num.5"
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr "Tecl.num.6"
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr "Tecl.num.7"
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr "Tecl.num.*"
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr "Tecl.num.+"
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr "Tecl.num.-"
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr "Tecl.num./"
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr "Tecl.num.8"
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr "Tecl.num.9"
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr "Num Lock"
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr "Scroll Lock"
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr "Shift esq."
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr "Shift dir."
#: src/keycode.cpp:241
msgid "Left Control"
msgstr "Ctrl esq."
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr "Menu esq."
#: src/keycode.cpp:241
msgid "Right Control"
msgstr "Ctrl dir."
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr "Menu dir."
#: src/keycode.cpp:243
msgid "Comma"
msgstr "Vírgula"
#: src/keycode.cpp:243
msgid "Minus"
msgstr "Menos"
#: src/keycode.cpp:243
msgid "Period"
msgstr "Ponto"
#: src/keycode.cpp:243
msgid "Plus"
msgstr "Mais"
#: src/keycode.cpp:247
msgid "Attn"
msgstr "Attn"
#: src/keycode.cpp:247
msgid "CrSel"
msgstr "CrSel"
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr "Apagar OEF"
#: src/keycode.cpp:248
msgid "ExSel"
msgstr "ExSel"
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr "Limpar OEM"
#: src/keycode.cpp:248
msgid "PA1"
msgstr "PA1"
#: src/keycode.cpp:248
msgid "Zoom"
msgstr "Zoom"
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "Menu principal"
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "Não foi possível iniciar o mundo"
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
"Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a "
"ser feito."
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "Não foi possível localizar ou carregar jogo \""
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "Especificação do jogo inválida."
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "Erro de conexão (tempo excedido?)"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "Controles padrão:\n"
#~ "- WASD: andar\n"
#~ "- Botão esquerdo: cavar/golpear\n"
#~ "- Botão direito: colocar/usar\n"
#~ "- Roda do mouse: selecionar item\n"
#~ "- 0...9: selecionar item\n"
#~ "- Shift: esgueirar\n"
#~ "- R: alternar a distância de visualização\n"
#~ "- I: inventário\n"
#~ "- ESC: este menu\n"
#~ "- T: bate-papo\n"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,13 +17,47 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -33,56 +67,56 @@ msgstr ""
msgid "enabled"
msgstr ""
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr ""
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr ""
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr ""
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr ""
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr ""
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr ""
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr ""
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr ""
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr ""
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr ""
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr ""
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr ""
@@ -94,264 +128,280 @@ msgstr ""
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr ""
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr ""
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr ""
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr ""
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr ""
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:388
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr ""
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr ""
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr ""
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr ""
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr ""
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr ""
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr ""
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr ""
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr ""
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr ""
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr ""
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr ""
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr ""
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr ""
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr ""
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr ""
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr ""
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr ""
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr ""
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr ""
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr ""
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr ""
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr ""
#: src/guiMainMenu.cpp:611
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr ""
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr ""
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr ""
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr ""
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr ""
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr ""
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr ""
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr ""
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr ""
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr ""
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr ""
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr ""
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr ""
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr ""
@@ -359,51 +409,63 @@ msgstr ""
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr ""
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr ""
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr ""
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr ""
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr ""
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
@@ -698,32 +760,26 @@ msgstr ""
msgid "Zoom"
msgstr ""
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr ""
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr ""
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:1667
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr ""
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""

File diff suppressed because it is too large Load Diff

787
po/uk/minetest.po Normal file
View File

@@ -0,0 +1,787 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-04-23 17:00+0200\n"
"Last-Translator: ?????? ???????? <Martin_Devil@mail.ru>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/client.cpp:2846
msgid "Item textures..."
msgstr ""
#: src/game.cpp:912
msgid "Loading..."
msgstr ""
#: src/game.cpp:972
msgid "Creating server...."
msgstr ""
#: src/game.cpp:988
msgid "Creating client..."
msgstr ""
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr ""
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr ""
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr ""
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr "\nДеталі у файлі debug.txt."
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
msgstr ""
#: src/guiConfigureWorld.cpp:208
msgid "enabled"
msgstr ""
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "Увімкнути Все"
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "Вимкнути Усе"
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "залежить від:"
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr ""
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr ""
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "Зберегти"
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "Налаштування Збережено!"
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "Попередження: Помилкова конфігурація."
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr ""
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr ""
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr ""
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr ""
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr ""
#: src/guiDeathScreen.cpp:96
msgid "You died."
msgstr ""
#: src/guiDeathScreen.cpp:104
msgid "Respawn"
msgstr ""
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr ""
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr ""
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr ""
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr ""
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr ""
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "Уперед"
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "Назад"
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "Уліво"
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr ""
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "Використовувата"
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr ""
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "Крастися"
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "Викинути"
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr ""
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr ""
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr ""
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr ""
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr ""
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr ""
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr ""
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr ""
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr ""
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr ""
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr ""
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr ""
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr ""
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr ""
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr ""
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr ""
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr ""
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr ""
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr ""
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr ""
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr ""
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr ""
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr ""
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr ""
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr ""
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr ""
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr ""
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr ""
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr ""
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr ""
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr ""
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr ""
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr ""
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr ""
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr ""
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr ""
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr ""
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr ""
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr ""
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr ""
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr ""
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr ""
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr ""
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr ""
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr ""
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr ""
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr ""
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr ""
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr ""
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr ""
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr ""
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr ""
#: src/guiPasswordChange.cpp:108
msgid "Old Password"
msgstr ""
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr ""
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr ""
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr ""
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr ""
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr ""
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr ""
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr ""
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr ""
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr ""
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- T: chat\n"
msgstr ""
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr ""
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr ""
#: src/keycode.cpp:223
msgid "Left Button"
msgstr ""
#: src/keycode.cpp:223
msgid "Middle Button"
msgstr ""
#: src/keycode.cpp:223
msgid "Right Button"
msgstr ""
#: src/keycode.cpp:223
msgid "X Button 1"
msgstr ""
#: src/keycode.cpp:224
msgid "Back"
msgstr ""
#: src/keycode.cpp:224
msgid "Clear"
msgstr ""
#: src/keycode.cpp:224
msgid "Return"
msgstr ""
#: src/keycode.cpp:224
msgid "Tab"
msgstr ""
#: src/keycode.cpp:224
msgid "X Button 2"
msgstr ""
#: src/keycode.cpp:225
msgid "Capital"
msgstr ""
#: src/keycode.cpp:225
msgid "Control"
msgstr ""
#: src/keycode.cpp:225
msgid "Kana"
msgstr ""
#: src/keycode.cpp:225
msgid "Menu"
msgstr ""
#: src/keycode.cpp:225
msgid "Pause"
msgstr ""
#: src/keycode.cpp:225
msgid "Shift"
msgstr ""
#: src/keycode.cpp:226
msgid "Convert"
msgstr ""
#: src/keycode.cpp:226
msgid "Escape"
msgstr ""
#: src/keycode.cpp:226
msgid "Final"
msgstr ""
#: src/keycode.cpp:226
msgid "Junja"
msgstr ""
#: src/keycode.cpp:226
msgid "Kanji"
msgstr ""
#: src/keycode.cpp:226
msgid "Nonconvert"
msgstr ""
#: src/keycode.cpp:227
msgid "Accept"
msgstr ""
#: src/keycode.cpp:227
msgid "End"
msgstr ""
#: src/keycode.cpp:227
msgid "Home"
msgstr ""
#: src/keycode.cpp:227
msgid "Mode Change"
msgstr ""
#: src/keycode.cpp:227
msgid "Next"
msgstr ""
#: src/keycode.cpp:227
msgid "Prior"
msgstr ""
#: src/keycode.cpp:227
msgid "Space"
msgstr ""
#: src/keycode.cpp:228
msgid "Down"
msgstr ""
#: src/keycode.cpp:228
msgid "Execute"
msgstr ""
#: src/keycode.cpp:228
msgid "Print"
msgstr ""
#: src/keycode.cpp:228
msgid "Select"
msgstr ""
#: src/keycode.cpp:228
msgid "Up"
msgstr ""
#: src/keycode.cpp:229
msgid "Help"
msgstr ""
#: src/keycode.cpp:229
msgid "Insert"
msgstr ""
#: src/keycode.cpp:229
msgid "Snapshot"
msgstr ""
#: src/keycode.cpp:232
msgid "Left Windows"
msgstr ""
#: src/keycode.cpp:233
msgid "Apps"
msgstr ""
#: src/keycode.cpp:233
msgid "Numpad 0"
msgstr ""
#: src/keycode.cpp:233
msgid "Numpad 1"
msgstr ""
#: src/keycode.cpp:233
msgid "Right Windows"
msgstr ""
#: src/keycode.cpp:233
msgid "Sleep"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 2"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 3"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 4"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 5"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 6"
msgstr ""
#: src/keycode.cpp:234
msgid "Numpad 7"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad *"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad +"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad -"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad /"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad 8"
msgstr ""
#: src/keycode.cpp:235
msgid "Numpad 9"
msgstr ""
#: src/keycode.cpp:239
msgid "Num Lock"
msgstr ""
#: src/keycode.cpp:239
msgid "Scroll Lock"
msgstr ""
#: src/keycode.cpp:240
msgid "Left Shift"
msgstr ""
#: src/keycode.cpp:240
msgid "Right Shift"
msgstr ""
#: src/keycode.cpp:241
msgid "Left Control"
msgstr ""
#: src/keycode.cpp:241
msgid "Left Menu"
msgstr ""
#: src/keycode.cpp:241
msgid "Right Control"
msgstr ""
#: src/keycode.cpp:241
msgid "Right Menu"
msgstr ""
#: src/keycode.cpp:243
msgid "Comma"
msgstr ""
#: src/keycode.cpp:243
msgid "Minus"
msgstr ""
#: src/keycode.cpp:243
msgid "Period"
msgstr ""
#: src/keycode.cpp:243
msgid "Plus"
msgstr ""
#: src/keycode.cpp:247
msgid "Attn"
msgstr ""
#: src/keycode.cpp:247
msgid "CrSel"
msgstr ""
#: src/keycode.cpp:248
msgid "Erase OEF"
msgstr ""
#: src/keycode.cpp:248
msgid "ExSel"
msgstr ""
#: src/keycode.cpp:248
msgid "OEM Clear"
msgstr ""
#: src/keycode.cpp:248
msgid "PA1"
msgstr ""
#: src/keycode.cpp:248
msgid "Zoom"
msgstr ""
#: src/main.cpp:1680
msgid "Main Menu"
msgstr ""
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr ""
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr ""
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr ""
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr ""

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-01-30 20:25+0100\n"
"PO-Revision-Date: 2013-02-23 03:40+0200\n"
"POT-Creation-Date: 2013-05-13 18:26+0200\n"
"PO-Revision-Date: 2013-05-18 16:23+0200\n"
"Last-Translator: Shen Zheyu <arsdragonfly@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: zh_CN\n"
@@ -18,7 +18,43 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 1.4-dev\n"
#: src/guiConfigureWorld.cpp:125
#: src/client.cpp:2846
msgid "Item textures..."
msgstr "物品材质..."
#: src/game.cpp:912
msgid "Loading..."
msgstr "载入中..."
#: src/game.cpp:972
msgid "Creating server...."
msgstr "正在建立服务器...."
#: src/game.cpp:988
msgid "Creating client..."
msgstr "正在建立客户端..."
#: src/game.cpp:1003
msgid "Resolving address..."
msgstr "正在解析地址..."
#: src/game.cpp:1079
msgid "Connecting to server..."
msgstr "正在连接服务器..."
#: src/game.cpp:3348
msgid "Shutting down stuff..."
msgstr "关闭中......"
#: src/game.cpp:3378 src/guiConfigureWorld.cpp:426
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"查看 debug.txt 以获得详细信息。"
#: src/guiConfigureWorld.cpp:123
msgid ""
"Warning: Some mods are not configured yet.\n"
"They will be enabled by default when you save the configuration. "
@@ -26,7 +62,7 @@ msgstr ""
"警告一些MOD仍未设定。\n"
"它们会在你保存配置的时候自动启用。 "
#: src/guiConfigureWorld.cpp:144
#: src/guiConfigureWorld.cpp:143
msgid ""
"Warning: Some configured mods are missing.\n"
"Their setting will be removed when you save the configuration. "
@@ -38,56 +74,56 @@ msgstr ""
msgid "enabled"
msgstr "启用"
#: src/guiConfigureWorld.cpp:215
#: src/guiConfigureWorld.cpp:218
msgid "Enable All"
msgstr "全部启用"
#: src/guiConfigureWorld.cpp:222
#: src/guiConfigureWorld.cpp:227
msgid "Disable All"
msgstr "全部禁用"
#: src/guiConfigureWorld.cpp:228
#: src/guiConfigureWorld.cpp:235
msgid "depends on:"
msgstr "依赖于:"
#: src/guiConfigureWorld.cpp:240
#: src/guiConfigureWorld.cpp:248
msgid "is required by:"
msgstr "需要:"
msgstr "需要:"
#: src/guiConfigureWorld.cpp:262 src/guiCreateWorld.cpp:165
#: src/guiKeyChangeMenu.cpp:179 src/keycode.cpp:223
#: src/guiConfigureWorld.cpp:270 src/guiCreateWorld.cpp:177
#: src/guiKeyChangeMenu.cpp:195 src/keycode.cpp:223
msgid "Cancel"
msgstr "取消"
#: src/guiConfigureWorld.cpp:268 src/guiKeyChangeMenu.cpp:173
#: src/guiConfigureWorld.cpp:277 src/guiKeyChangeMenu.cpp:187
msgid "Save"
msgstr "保存"
#: src/guiConfigureWorld.cpp:394
#: src/guiConfigureWorld.cpp:403
msgid "Configuration saved. "
msgstr "配置已保存。 "
#: src/guiConfigureWorld.cpp:402
#: src/guiConfigureWorld.cpp:415
msgid "Warning: Configuration not consistent. "
msgstr "警告:配置不一致。 "
#: src/guiConfirmMenu.cpp:120
#: src/guiConfirmMenu.cpp:119
msgid "Yes"
msgstr "是"
#: src/guiConfirmMenu.cpp:126
#: src/guiConfirmMenu.cpp:127
msgid "No"
msgstr "否"
#: src/guiCreateWorld.cpp:116
#: src/guiCreateWorld.cpp:125
msgid "World name"
msgstr "世界名称"
#: src/guiCreateWorld.cpp:135
#: src/guiCreateWorld.cpp:145
msgid "Game"
msgstr "游戏"
#: src/guiCreateWorld.cpp:159
#: src/guiCreateWorld.cpp:169
msgid "Create"
msgstr "创建"
@@ -99,267 +135,280 @@ msgstr "你死了。"
msgid "Respawn"
msgstr "重生"
#: src/guiFormSpecMenu.cpp:572
#: src/guiFormSpecMenu.cpp:582
msgid "Left click: Move all items, Right click: Move single item"
msgstr "左键:移动所有物品,右键:移动单个物品"
#: src/guiFormSpecMenu.cpp:597 src/guiMessageMenu.cpp:109
#: src/guiTextInputMenu.cpp:123
#: src/guiFormSpecMenu.cpp:608 src/guiMessageMenu.cpp:107
#: src/guiTextInputMenu.cpp:130
msgid "Proceed"
msgstr "继续游戏"
#: src/guiKeyChangeMenu.cpp:114
#: src/guiKeyChangeMenu.cpp:121
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr "键位配置。如果这个菜单被弄乱从minetest.conf中删掉点东西"
#: src/guiKeyChangeMenu.cpp:151
#: src/guiKeyChangeMenu.cpp:161
msgid "\"Use\" = climb down"
msgstr "“使用” = 向下爬"
#: src/guiKeyChangeMenu.cpp:164
#: src/guiKeyChangeMenu.cpp:176
msgid "Double tap \"jump\" to toggle fly"
msgstr "连按两次“跳”切换飞行状态"
#: src/guiKeyChangeMenu.cpp:269
#: src/guiKeyChangeMenu.cpp:290
msgid "Key already in use"
msgstr "按键已被占用"
#: src/guiKeyChangeMenu.cpp:347
#: src/guiKeyChangeMenu.cpp:372
msgid "press key"
msgstr "按键"
#: src/guiKeyChangeMenu.cpp:372
#: src/guiKeyChangeMenu.cpp:400
msgid "Forward"
msgstr "向前"
#: src/guiKeyChangeMenu.cpp:373
#: src/guiKeyChangeMenu.cpp:401
msgid "Backward"
msgstr "向后"
#: src/guiKeyChangeMenu.cpp:374 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228
msgid "Left"
msgstr "向左"
#: src/guiKeyChangeMenu.cpp:375 src/keycode.cpp:228
#: src/guiKeyChangeMenu.cpp:403 src/keycode.cpp:228
msgid "Right"
msgstr "向右"
#: src/guiKeyChangeMenu.cpp:376
#: src/guiKeyChangeMenu.cpp:404
msgid "Use"
msgstr "使用"
#: src/guiKeyChangeMenu.cpp:377
#: src/guiKeyChangeMenu.cpp:405
msgid "Jump"
msgstr "跳"
#: src/guiKeyChangeMenu.cpp:378
#: src/guiKeyChangeMenu.cpp:406
msgid "Sneak"
msgstr "潜行"
#: src/guiKeyChangeMenu.cpp:379
#: src/guiKeyChangeMenu.cpp:407
msgid "Drop"
msgstr "丢出"
#: src/guiKeyChangeMenu.cpp:380
#: src/guiKeyChangeMenu.cpp:408
msgid "Inventory"
msgstr "物品栏"
#: src/guiKeyChangeMenu.cpp:381
#: src/guiKeyChangeMenu.cpp:409
msgid "Chat"
msgstr "聊天"
#: src/guiKeyChangeMenu.cpp:382
#: src/guiKeyChangeMenu.cpp:410
msgid "Command"
msgstr "命令"
#: src/guiKeyChangeMenu.cpp:383
#: src/guiKeyChangeMenu.cpp:411
msgid "Console"
msgstr "控制台"
#: src/guiKeyChangeMenu.cpp:384
#: src/guiKeyChangeMenu.cpp:412
msgid "Toggle fly"
msgstr "切换飞行状态"
#: src/guiKeyChangeMenu.cpp:385
#: src/guiKeyChangeMenu.cpp:413
msgid "Toggle fast"
msgstr "切换快速移动状态"
#: src/guiKeyChangeMenu.cpp:386
#: src/guiKeyChangeMenu.cpp:414
msgid "Toggle noclip"
msgstr "切换穿墙模式"
#: src/guiKeyChangeMenu.cpp:387
#: src/guiKeyChangeMenu.cpp:415
msgid "Range select"
msgstr "选择范围"
#: src/guiKeyChangeMenu.cpp:388
#, fuzzy
#: src/guiKeyChangeMenu.cpp:416
msgid "Print stacks"
msgstr "打印栈"
#: src/guiMainMenu.cpp:55
#: src/guiMainMenu.cpp:92
msgid "Cannot create world: Name contains invalid characters"
msgstr "无法创建世界:名字包含非法字符"
#: src/guiMainMenu.cpp:64
#: src/guiMainMenu.cpp:103
msgid "Cannot create world: A world by this name already exists"
msgstr "无法创建世界:同名世界已经存在"
#: src/guiMainMenu.cpp:245
#: src/guiMainMenu.cpp:285
msgid "Singleplayer"
msgstr "单人游戏"
#: src/guiMainMenu.cpp:246
#: src/guiMainMenu.cpp:288
msgid "Multiplayer"
msgstr "多人游戏"
#: src/guiMainMenu.cpp:247
#: src/guiMainMenu.cpp:291
msgid "Advanced"
msgstr "高级联机设置"
#: src/guiMainMenu.cpp:248
#: src/guiMainMenu.cpp:294
msgid "Settings"
msgstr "设置"
#: src/guiMainMenu.cpp:249
#: src/guiMainMenu.cpp:297
msgid "Credits"
msgstr "关于"
#: src/guiMainMenu.cpp:280
#: src/guiMainMenu.cpp:330
msgid "Select World:"
msgstr "选择世界:"
#: src/guiMainMenu.cpp:302 src/guiMainMenu.cpp:449 src/keycode.cpp:229
#: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229
msgid "Delete"
msgstr "删除"
#: src/guiMainMenu.cpp:309
#: src/guiMainMenu.cpp:369
msgid "New"
msgstr "新建"
#: src/guiMainMenu.cpp:317
#: src/guiMainMenu.cpp:379
msgid "Configure"
msgstr "配置"
#: src/guiMainMenu.cpp:332 src/keycode.cpp:248
#: src/guiMainMenu.cpp:396 src/keycode.cpp:248
msgid "Play"
msgstr "开始游戏"
#: src/guiMainMenu.cpp:343 src/guiMainMenu.cpp:557
#: src/guiMainMenu.cpp:409 src/guiMainMenu.cpp:699
msgid "Creative Mode"
msgstr "创造模式"
#: src/guiMainMenu.cpp:349 src/guiMainMenu.cpp:563
#: src/guiMainMenu.cpp:417 src/guiMainMenu.cpp:707
msgid "Enable Damage"
msgstr "开启伤害"
#: src/guiMainMenu.cpp:369 src/guiMainMenu.cpp:479
#: src/guiMainMenu.cpp:459 src/guiMainMenu.cpp:614
msgid "Name/Password"
msgstr "名字/密码"
#: src/guiMainMenu.cpp:408 src/guiMainMenu.cpp:506
#: src/guiMainMenu.cpp:498 src/guiMainMenu.cpp:519 src/guiMainMenu.cpp:1324
msgid "Favorites:"
msgstr "最爱的服务器:"
#: src/guiMainMenu.cpp:508 src/guiMainMenu.cpp:1338
msgid "Public Server List:"
msgstr "公共服务器列表:"
#: src/guiMainMenu.cpp:532 src/guiMainMenu.cpp:643
msgid "Address/Port"
msgstr "地址/端口"
#: src/guiMainMenu.cpp:435 src/guiMainMenu.cpp:1075
#, fuzzy
#: src/guiMainMenu.cpp:560 src/guiMainMenu.cpp:1323
msgid "Show Public"
msgstr "显示公共"
#: src/guiMainMenu.cpp:439 src/guiMainMenu.cpp:1083
#: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337
msgid "Show Favorites"
msgstr "显示最爱"
#: src/guiMainMenu.cpp:459
#: src/guiMainMenu.cpp:591
msgid "Connect"
msgstr "连接"
#: src/guiMainMenu.cpp:529
#: src/guiMainMenu.cpp:668
msgid "Leave address blank to start a local server."
msgstr "地址栏留空可启动本地服务器。"
#: src/guiMainMenu.cpp:538
#: src/guiMainMenu.cpp:678
msgid "Start Game / Connect"
msgstr "启动游戏/连接"
#: src/guiMainMenu.cpp:570 src/guiMainMenu.cpp:1006
#: src/guiMainMenu.cpp:716
msgid "Public"
msgstr "公共服务器"
#: src/guiMainMenu.cpp:726 src/guiMainMenu.cpp:1245
msgid "Delete world"
msgstr "删除世界"
#: src/guiMainMenu.cpp:577
#: src/guiMainMenu.cpp:735
msgid "Create world"
msgstr "创造世界"
#: src/guiMainMenu.cpp:611
#, fuzzy
#: src/guiMainMenu.cpp:773
msgid "Fancy trees"
msgstr "更好看的树"
msgstr "更漂亮的树"
#: src/guiMainMenu.cpp:617
#: src/guiMainMenu.cpp:781
msgid "Smooth Lighting"
msgstr "平滑光照"
#: src/guiMainMenu.cpp:623
#: src/guiMainMenu.cpp:789
msgid "3D Clouds"
msgstr "3D云彩"
#: src/guiMainMenu.cpp:629
#: src/guiMainMenu.cpp:797
msgid "Opaque water"
msgstr "不反光的水"
msgstr "不透明的水"
#: src/guiMainMenu.cpp:639
#: src/guiMainMenu.cpp:809
msgid "Mip-Mapping"
msgstr "贴图处理"
#: src/guiMainMenu.cpp:646
#: src/guiMainMenu.cpp:818
msgid "Anisotropic Filtering"
msgstr "各向异性过滤"
#: src/guiMainMenu.cpp:653
#: src/guiMainMenu.cpp:827
msgid "Bi-Linear Filtering"
msgstr "双线性过滤"
#: src/guiMainMenu.cpp:660
#: src/guiMainMenu.cpp:836
msgid "Tri-Linear Filtering"
msgstr "三线性过滤"
#: src/guiMainMenu.cpp:668
#: src/guiMainMenu.cpp:846
msgid "Shaders"
msgstr "着色器"
#: src/guiMainMenu.cpp:675
#: src/guiMainMenu.cpp:855
msgid "Preload item visuals"
msgstr "预先加载物品图像"
#: src/guiMainMenu.cpp:682
#: src/guiMainMenu.cpp:864
msgid "Enable Particles"
msgstr "启用粒子效果"
#: src/guiMainMenu.cpp:692
#: src/guiMainMenu.cpp:873
msgid "Finite liquid"
msgstr "液体有限延伸"
#: src/guiMainMenu.cpp:885
msgid "Change keys"
msgstr "改变键位设置"
#: src/guiMainMenu.cpp:977
#: src/guiMainMenu.cpp:1211 src/guiMainMenu.cpp:1372
msgid "Address required."
msgstr "需要地址。"
#: src/guiMainMenu.cpp:995
#: src/guiMainMenu.cpp:1231
msgid "Cannot delete world: Nothing selected"
msgstr "无法删除世界:没有选择世界"
#: src/guiMainMenu.cpp:1010
#: src/guiMainMenu.cpp:1246
msgid "Files to be deleted"
msgstr "将被删除的文件"
#: src/guiMainMenu.cpp:1026
#: src/guiMainMenu.cpp:1267
msgid "Cannot create world: No games found"
msgstr "无法创造世界:未找到游戏模式"
#: src/guiMainMenu.cpp:1042
#: src/guiMainMenu.cpp:1286
msgid "Cannot configure world: Nothing selected"
msgstr "无法配置世界:没有选择世界"
#: src/guiMainMenu.cpp:1146
#: src/guiMainMenu.cpp:1428
msgid "Failed to delete all world files"
msgstr "无法删除所有该世界的文件"
@@ -367,64 +416,75 @@ msgstr "无法删除所有该世界的文件"
msgid "Old Password"
msgstr "旧密码"
#: src/guiPasswordChange.cpp:125
#: src/guiPasswordChange.cpp:126
msgid "New Password"
msgstr "新密码"
#: src/guiPasswordChange.cpp:141
#: src/guiPasswordChange.cpp:143
msgid "Confirm Password"
msgstr "确认密码"
#: src/guiPasswordChange.cpp:158
#: src/guiPasswordChange.cpp:161
msgid "Change"
msgstr "更改"
#: src/guiPasswordChange.cpp:167
#: src/guiPasswordChange.cpp:170
msgid "Passwords do not match!"
msgstr "密码不匹配!"
#: src/guiPauseMenu.cpp:118
#: src/guiPauseMenu.cpp:122
msgid "Continue"
msgstr "继续"
#: src/guiPauseMenu.cpp:127
#: src/guiPauseMenu.cpp:133
msgid "Change Password"
msgstr "更改密码"
#: src/guiPauseMenu.cpp:135
#: src/guiPauseMenu.cpp:143
msgid "Sound Volume"
msgstr "音量"
#: src/guiPauseMenu.cpp:152
msgid "Exit to Menu"
msgstr "退出至菜单"
#: src/guiPauseMenu.cpp:142
#: src/guiPauseMenu.cpp:161
msgid "Exit to OS"
msgstr "退出至操作系统"
#: src/guiPauseMenu.cpp:149
#: src/guiPauseMenu.cpp:170
msgid ""
"Default Controls:\n"
"- WASD: Walk\n"
"- Mouse left: dig/hit\n"
"- WASD: move\n"
"- Space: jump/climb\n"
"- Shift: sneak/go down\n"
"- Q: drop item\n"
"- I: inventory\n"
"- Mouse: turn/look\n"
"- Mouse left: dig/punch\n"
"- Mouse right: place/use\n"
"- Mouse wheel: select item\n"
"- 0...9: select item\n"
"- Shift: sneak\n"
"- R: Toggle viewing all loaded chunks\n"
"- I: Inventory menu\n"
"- ESC: This menu\n"
"- T: Chat\n"
"- T: chat\n"
msgstr ""
"默认控制:\n"
"W/A/S/D: \n"
"空格: 跳\n"
"鼠标左键: 挖方块/攻击\n"
"鼠标右键: 放置/使用\n"
"W/A/S/D: 移动\n"
"空格: 跳/爬\n"
"Shift: 潜行/向下\n"
"Q: 丢物品\n"
"I: 物品栏\n"
"鼠标:转身/环顾\n"
"鼠标左键: 挖\n"
"鼠标右键: 放/使用\n"
"鼠标滚轮: 选择物品\n"
"0-9: 选择物品\n"
"Shift: 潜行\n"
"R切换查看所有已载入区块\n"
"I物品栏\n"
"ESC菜单\n"
"T聊天\n"
"T: 聊天\n"
#: src/guiVolumeChange.cpp:108
msgid "Sound Volume: "
msgstr "音量: "
#: src/guiVolumeChange.cpp:122
msgid "Exit"
msgstr "退出"
#: src/keycode.cpp:223
msgid "Left Button"
@@ -439,7 +499,6 @@ msgid "Right Button"
msgstr "右键"
#: src/keycode.cpp:223
#, fuzzy
msgid "X Button 1"
msgstr "X键1"
@@ -448,9 +507,8 @@ msgid "Back"
msgstr "退格"
#: src/keycode.cpp:224
#, fuzzy
msgid "Clear"
msgstr "清除"
msgstr "Clear键"
#: src/keycode.cpp:224
msgid "Return"
@@ -473,7 +531,6 @@ msgid "Control"
msgstr "Ctrl"
#: src/keycode.cpp:225
#, fuzzy
msgid "Kana"
msgstr "假名"
@@ -498,22 +555,18 @@ msgid "Escape"
msgstr "Escape键"
#: src/keycode.cpp:226
#, fuzzy
msgid "Final"
msgstr "最终"
msgstr "Final键"
#: src/keycode.cpp:226
#, fuzzy
msgid "Junja"
msgstr "Junja"
msgstr "Junja"
#: src/keycode.cpp:226
#, fuzzy
msgid "Kanji"
msgstr "汉字"
msgstr "Kanji键"
#: src/keycode.cpp:226
#, fuzzy
msgid "Nonconvert"
msgstr "无变换"
@@ -538,9 +591,8 @@ msgid "Next"
msgstr "下一个"
#: src/keycode.cpp:227
#, fuzzy
msgid "Prior"
msgstr "前一个"
msgstr "Prior键"
#: src/keycode.cpp:227
msgid "Space"
@@ -671,17 +723,14 @@ msgid "Left Control"
msgstr "左Control键"
#: src/keycode.cpp:241
#, fuzzy
msgid "Left Menu"
msgstr "左菜单"
#: src/keycode.cpp:241
#, fuzzy
msgid "Right Control"
msgstr "右控制"
msgstr "右Control键"
#: src/keycode.cpp:241
#, fuzzy
msgid "Right Menu"
msgstr "右菜单"
@@ -702,68 +751,79 @@ msgid "Plus"
msgstr "加号"
#: src/keycode.cpp:247
#, fuzzy
msgid "Attn"
msgstr "注意"
msgstr "Attn键"
#: src/keycode.cpp:247
#, fuzzy
msgid "CrSel"
msgstr "CrSel"
msgstr "CrSel"
#: src/keycode.cpp:248
#, fuzzy
msgid "Erase OEF"
msgstr "Erase OEF"
msgstr "Erase OEF"
#: src/keycode.cpp:248
#, fuzzy
msgid "ExSel"
msgstr "不选"
msgstr "ExSel键"
#: src/keycode.cpp:248
#, fuzzy
msgid "OEM Clear"
msgstr "默认设置"
msgstr "OEM Clear键"
#: src/keycode.cpp:248
#, fuzzy
msgid "PA1"
msgstr "PA1"
msgstr "PA1"
#: src/keycode.cpp:248
msgid "Zoom"
msgstr "缩放"
#: src/main.cpp:1384
#: src/main.cpp:1680
msgid "Main Menu"
msgstr "主菜单"
#: src/main.cpp:1633
#: src/main.cpp:2035
msgid "Failed to initialize world"
msgstr "无法初始化世界"
#: src/main.cpp:1645
#: src/main.cpp:2048
msgid "No world selected and no address provided. Nothing to do."
msgstr "没有选择世界或提供地址。未执行操作。"
#: src/main.cpp:1653
#: src/main.cpp:2056
msgid "Could not find or load game \""
msgstr "无法找到或载入游戏模式“"
#: src/main.cpp:1667
#, fuzzy
#: src/main.cpp:2070
msgid "Invalid gamespec."
msgstr "非法游戏模式规格。"
#: src/main.cpp:1707
#: src/main.cpp:2111
msgid "Connection error (timed out?)"
msgstr "连接出错(超时?)"
#: src/main.cpp:1718
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
"\n"
"查看 debug.txt 以获得详细信息。"
#~ msgid ""
#~ "Default Controls:\n"
#~ "- WASD: Walk\n"
#~ "- Mouse left: dig/hit\n"
#~ "- Mouse right: place/use\n"
#~ "- Mouse wheel: select item\n"
#~ "- 0...9: select item\n"
#~ "- Shift: sneak\n"
#~ "- R: Toggle viewing all loaded chunks\n"
#~ "- I: Inventory menu\n"
#~ "- ESC: This menu\n"
#~ "- T: Chat\n"
#~ msgstr ""
#~ "默认控制:\n"
#~ "W/A/S/D: 走\n"
#~ "空格: 跳\n"
#~ "鼠标左键: 挖方块/攻击\n"
#~ "鼠标右键: 放置/使用\n"
#~ "鼠标滚轮: 选择物品\n"
#~ "0-9: 选择物品\n"
#~ "Shift: 潜行\n"
#~ "R切换查看所有已载入区块\n"
#~ "I物品栏\n"
#~ "ESC菜单\n"
#~ "T聊天\n"

View File

@@ -161,7 +161,7 @@ else()
endif(APPLE)
endif(BUILD_CLIENT)
find_package(ZLIB REQUIRED)
set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
set(PLATFORM_LIBS -lpthread -lrt ${CMAKE_DL_LIBS})
#set(CLIENT_PLATFORM_LIBS -lXxf86vm)
# This way Xxf86vm is found on OpenBSD too
find_library(XXF86VM_LIBRARY Xxf86vm)
@@ -172,6 +172,7 @@ endif()
find_package(Jthread REQUIRED)
find_package(Sqlite3 REQUIRED)
find_package(Json REQUIRED)
find_package(OpenGLES2)
if(USE_FREETYPE)
find_package(Freetype REQUIRED)
@@ -179,16 +180,35 @@ if(USE_FREETYPE)
set(CGUITTFONT_LIBRARY cguittfont)
endif(USE_FREETYPE)
# Do not use system-wide installation of Lua, because it'll likely be a
# different version and/or has different build options.
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
set(LUA_LIBRARY "lua")
find_library(LUA_LIBRARY luajit
NAMES luajit-5.1)
find_path(LUA_INCLUDE_DIR luajit.h
NAMES luajit.h
PATH_SUFFIXES luajit-2.0)
message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
message (STATUS "LuaJIT found.")
else(LUA_LIBRARY AND LUA_INCLUDE_DIR)
message (STATUS "LuaJIT not found, using bundled Lua.")
set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
set(LUA_LIBRARY "lua")
add_subdirectory(lua)
endif(LUA_LIBRARY AND LUA_INCLUDE_DIR)
mark_as_advanced(LUA_LIBRARY)
mark_as_advanced(LUA_INCLUDE_DIR)
configure_file(
"${PROJECT_SOURCE_DIR}/cmake_config.h.in"
"${PROJECT_BINARY_DIR}/cmake_config.h"
)
add_subdirectory(script)
add_subdirectory(util)
set(common_SRCS
rollback_interface.cpp
rollback.cpp
@@ -205,14 +225,17 @@ set(common_SRCS
itemdef.cpp
nodedef.cpp
object_properties.cpp
scriptapi.cpp
script.cpp
log.cpp
content_sao.cpp
emerge.cpp
mapgen.cpp
mapgen_v6.cpp
mapgen_v7.cpp
mapgen_indev.cpp
mapgen_singlenode.cpp
treegen.cpp
dungeongen.cpp
cavegen.cpp
content_nodemeta.cpp
content_mapnode.cpp
collision.cpp
@@ -246,12 +269,9 @@ set(common_SRCS
clientserver.cpp
staticobject.cpp
serverlist.cpp
util/serialize.cpp
util/directiontables.cpp
util/numeric.cpp
util/pointedthing.cpp
util/string.cpp
util/timetaker.cpp
pathfinder.cpp
${SCRIPT_SRCS}
${UTIL_SRCS}
)
# This gives us the icon
@@ -291,6 +311,7 @@ set(minetest_SRCS
particles.cpp
clientobject.cpp
chat.cpp
hud.cpp
guiMainMenu.cpp
guiKeyChangeMenu.cpp
guiMessageMenu.cpp
@@ -327,6 +348,7 @@ set(minetestserver_SRCS
include_directories(
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
${IRRLICHT_INCLUDE_DIR}
${ZLIB_INCLUDE_DIR}
${CMAKE_BUILD_TYPE}
@@ -337,6 +359,7 @@ include_directories(
${SQLITE3_INCLUDE_DIR}
${LUA_INCLUDE_DIR}
${JSON_INCLUDE_DIR}
${PROJECT_SOURCE_DIR}/script
)
if(USE_FREETYPE)
@@ -371,6 +394,7 @@ if(BUILD_CLIENT)
${SQLITE3_LIBRARY}
${LUA_LIBRARY}
${JSON_LIBRARY}
${OPENGLES2_LIBRARIES}
${PLATFORM_LIBS}
${CLIENT_PLATFORM_LIBS}
)
@@ -580,11 +604,6 @@ if (BUILD_CLIENT AND USE_FREETYPE)
add_subdirectory(cguittfont)
endif (BUILD_CLIENT AND USE_FREETYPE)
if (LUA_FOUND)
else (LUA_FOUND)
add_subdirectory(lua)
endif (LUA_FOUND)
if (JSON_FOUND)
else (JSON_FOUND)
add_subdirectory(json)

View File

@@ -61,7 +61,7 @@ class ActiveObject
}
virtual u8 getType() const = 0;
virtual bool getCollisionBox(aabb3f *toset) = 0;
protected:
u16 m_id; // 0 is invalid, "no id"
};

View File

@@ -1,6 +1,6 @@
/*
Minetest
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr2@cs.scranton.edu>
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
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
@@ -23,68 +23,50 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "main.h"
#define BT_NONE 0
#define BT_OCEAN 1
#define BT_LAKE 2
#define BT_SBEACH 3
#define BT_GBEACH 4
#define BT_PLAINS 5
#define BT_HILLS 6
#define BT_EXTREMEHILLS 7
#define BT_MOUNTAINS 8
#define BT_DESERT 9
#define BT_DESERTHILLS 10
#define BT_HELL 11
#define BT_AETHER 12
#define BT_BTMASK 0x3F
#define BTF_SNOW 0x40
#define BTF_FOREST 0x80
#define BGFREQ_1 ( 0.40)
#define BGFREQ_2 (BGFREQ_1 + 0.05)
#define BGFREQ_3 (BGFREQ_2 + 0.08)
#define BGFREQ_4 (BGFREQ_3 + 0.35)
#define BGFREQ_5 (BGFREQ_4 + 0.18)
//BGFREQ_5 is not checked as an upper bound; it ought to sum up to 1.00, but it's okay if it doesn't.
NoiseParams nparams_biome_def_heat =
{50, 50, v3f(500.0, 500.0, 500.0), 5349, 3, 0.70};
NoiseParams nparams_biome_def_humidity =
{50, 50, v3f(500.0, 500.0, 500.0), 842, 3, 0.55};
/*float bg1_temps[] = {0.0};
int bg1_biomes[] = {BT_OCEAN};
BiomeDefManager::BiomeDefManager() {
biome_registration_finished = false;
np_heat = &nparams_biome_def_heat;
np_humidity = &nparams_biome_def_humidity;
float bg2_temps[] = {10.0};
int bg2_biomes[] = {BT_GBEACH, BT_SBEACH};
// Create default biome to be used in case none exist
Biome *b = new Biome;
b->id = 0;
b->name = "Default";
b->flags = 0;
float bg3_temps[] = {30.0, 40.0};
int bg3_biomes[] = {BT_HILLS, BT_EXTREMEHILLS, BT_MOUNTAINS};
b->c_top = CONTENT_AIR;
b->top_depth = 0;
b->c_filler = b->c_top;
b->filler_height = MAP_GENERATION_LIMIT;
float bg4_temps[] = {25.0, 30.0, 35.0, 40.0};
int bg4_biomes[] = {BT_HILLS, BT_EXTREMEHILLS, BT_MOUNTAINS, BT_DESERT, BT_DESERTHILLS};
b->height_min = -MAP_GENERATION_LIMIT;
b->height_max = MAP_GENERATION_LIMIT;
b->heat_point = 0.0;
b->humidity_point = 0.0;
float bg5_temps[] = {5.0, 40.0};
int bg5_biomes[] = {BT_LAKE, BT_PLAINS, BT_DESERT};*/
NoiseParams np_default = {20.0, 15.0, v3f(250., 250., 250.), 82341, 5, 0.6};
BiomeDefManager::BiomeDefManager(IGameDef *gamedef) {
this->m_gamedef = gamedef;
this->ndef = gamedef->ndef();
//the initial biome group
bgroups.push_back(new std::vector<Biome *>);
biomes.push_back(b);
}
BiomeDefManager::~BiomeDefManager() {
for (unsigned int i = 0; i != bgroups.size(); i++)
delete bgroups[i];
//if (biomecache)
// delete[] biomecache;
for (size_t i = 0; i != biomes.size(); i++)
delete biomes[i];
}
Biome *BiomeDefManager::createBiome(BiomeTerrainType btt) {
switch (btt) {
/*switch (btt) {
case BIOME_TERRAIN_NORMAL:
return new Biome;
case BIOME_TERRAIN_LIQUID:
@@ -92,142 +74,97 @@ Biome *BiomeDefManager::createBiome(BiomeTerrainType btt) {
case BIOME_TERRAIN_NETHER:
return new BiomeHell;
case BIOME_TERRAIN_AETHER:
return new BiomeAether;
return new BiomeSky;
case BIOME_TERRAIN_FLAT:
return new BiomeSuperflat;
}
return NULL;
return NULL;*/
return new Biome;
}
void BiomeDefManager::addBiomeGroup(float freq) {
int size = bgroup_freqs.size();
float newfreq = freq;
// just a PoC, obviously needs optimization later on (precalculate this)
void BiomeDefManager::calcBiomes(BiomeNoiseInput *input, u8 *biomeid_map) {
int i = 0;
for (int y = 0; y != input->mapsize.Y; y++) {
for (int x = 0; x != input->mapsize.X; x++, i++) {
float heat = (input->heat_map[i] + 1) * 50;
float humidity = (input->humidity_map[i] + 1) * 50;
biomeid_map[i] = getBiome(heat, humidity, input->height_map[i])->id;
}
}
}
if (size)
newfreq += bgroup_freqs[size - 1];
bgroup_freqs.push_back(newfreq);
bgroups.push_back(new std::vector<Biome *>);
verbosestream << "BiomeDefManager: added biome group with frequency " <<
newfreq << std::endl;
void BiomeDefManager::resolveNodeNames(INodeDefManager *ndef) {
Biome *b;
biome_registration_finished = true;
for (size_t i = 0; i != biomes.size(); i++) {
b = biomes[i];
if (b->c_top == CONTENT_IGNORE) {
b->c_top = ndef->getId(b->top_nodename);
if (b->c_top == CONTENT_IGNORE) {
errorstream << "BiomeDefManager::resolveNodeNames: node '"
<< b->top_nodename << "' not defined" << std::endl;
b->c_top = CONTENT_AIR;
b->top_depth = 0;
}
}
if (b->c_filler == CONTENT_IGNORE) {
b->c_filler = ndef->getId(b->filler_nodename);
if (b->c_filler == CONTENT_IGNORE) {
errorstream << "BiomeDefManager::resolveNodeNames: node '"
<< b->filler_nodename << "' not defined" << std::endl;
b->c_filler = CONTENT_AIR;
b->filler_height = MAP_GENERATION_LIMIT;
}
}
}
}
void BiomeDefManager::addBiome(Biome *b) {
std::vector<Biome *> *bgroup;
if ((unsigned int)b->groupid >= bgroups.size()) {
errorstream << "BiomeDefManager: attempted to add biome '" << b->name
<< "' to nonexistent biome group " << b->groupid << std::endl;
if (biome_registration_finished) {
errorstream << "BIomeDefManager: biome registration already finished, dropping " << b->name <<std::endl;
delete b;
return;
}
size_t nbiomes = biomes.size();
if (nbiomes >= 0xFF) {
errorstream << "BiomeDefManager: too many biomes, dropping " << b->name << std::endl;
delete b;
return;
}
bgroup = bgroups[b->groupid];
bgroup->push_back(b);
verbosestream << "BiomeDefManager: added biome '" << b->name <<
"' to biome group " << (int)b->groupid << std::endl;
b->id = (u8)nbiomes;
biomes.push_back(b);
verbosestream << "BiomeDefManager: added biome " << b->name << std::endl;
}
void BiomeDefManager::addDefaultBiomes() {
Biome *b;
Biome *BiomeDefManager::getBiome(float heat, float humidity, s16 y) {
Biome *b, *biome_closest = NULL;
float dist_min = FLT_MAX;
b = new Biome;
b->name = "Default";
b->n_top = MapNode(ndef->getId("mapgen_stone"));
b->n_filler = b->n_top;
b->ntopnodes = 0;
b->height_min = -MAP_GENERATION_LIMIT;
b->height_max = MAP_GENERATION_LIMIT;
b->heat_min = FLT_MIN;
b->heat_max = FLT_MAX;
b->humidity_min = FLT_MIN;
b->humidity_max = FLT_MAX;
b->np = &np_default;
biome_default = b;
}
for (size_t i = 1; i < biomes.size(); i++) {
b = biomes[i];
if (y > b->height_max || y < b->height_min)
continue;
Biome *BiomeDefManager::getBiome(float bgfreq, float heat, float humidity) {
std::vector<Biome *> *bgroup;
Biome *b;
int i;
int ngroups = bgroup_freqs.size();
if (!ngroups)
return biome_default;
for (i = 0; (i != ngroups) && (bgfreq > bgroup_freqs[i]); i++);
bgroup = bgroups[i];
int nbiomes = bgroup->size();
for (i = 0; i != nbiomes; i++) {
b = bgroup->operator[](i);
if (heat >= b->heat_min && heat <= b->heat_max &&
humidity >= b->humidity_min && humidity <= b->humidity_max)
return b;
float d_heat = heat - b->heat_point;
float d_humidity = humidity - b->humidity_point;
float dist = (d_heat * d_heat) +
(d_humidity * d_humidity);
if (dist < dist_min) {
dist_min = dist;
biome_closest = b;
}
}
return biome_default;
}
//////////////////////////// [ Generic biome ] ////////////////////////////////
int Biome::getSurfaceHeight(float noise_terrain) {
return np->offset + np->scale * noise_terrain;
}
void Biome::genColumn(Mapgen *mapgen, int x, int z, int y1, int y2) {
}
///////////////////////////// [ Ocean biome ] /////////////////////////////////
void BiomeLiquid::genColumn(Mapgen *mapgen, int x, int z, int y1, int y2) {
}
///////////////////////////// [ Nether biome ] /////////////////////////////////
int BiomeHell::getSurfaceHeight(float noise_terrain) {
return np->offset + np->scale * noise_terrain;
}
void BiomeHell::genColumn(Mapgen *mapgen, int x, int z, int y1, int y2) {
}
///////////////////////////// [ Aether biome ] ////////////////////////////////
int BiomeAether::getSurfaceHeight(float noise_terrain) {
return np->offset + np->scale * noise_terrain;
}
void BiomeAether::genColumn(Mapgen *mapgen, int x, int z, int y1, int y2) {
}
/////////////////////////// [ Superflat biome ] ///////////////////////////////
int BiomeSuperflat::getSurfaceHeight(float noise_terrain) {
return ntopnodes;
}
void BiomeSuperflat::genColumn(Mapgen *mapgen, int x, int z, int y1, int y2) {
return biome_closest ? biome_closest : biomes[0];
}

View File

@@ -1,6 +1,6 @@
/*
Minetest
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr2@cs.scranton.edu>
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
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
@@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "noise.h"
#include "mapgen.h"
enum BiomeTerrainType
{
BIOME_TERRAIN_NORMAL,
@@ -37,62 +36,54 @@ enum BiomeTerrainType
BIOME_TERRAIN_FLAT
};
extern NoiseParams nparams_biome_def_heat;
extern NoiseParams nparams_biome_def_humidity;
class Biome {
public:
MapNode n_top;
MapNode n_filler;
s16 ntopnodes;
s8 groupid;
s8 flags;
u8 id;
std::string name;
u32 flags;
std::string top_nodename;
std::string filler_nodename;
content_t c_top;
s16 top_depth;
content_t c_filler;
s16 filler_height;
s16 height_min;
s16 height_max;
float heat_min;
float heat_max;
float humidity_min;
float humidity_max;
std::string name;
NoiseParams *np;
virtual void genColumn(Mapgen *mg, int x, int z, int y1, int y2);
virtual int getSurfaceHeight(float noise_terrain);
float heat_point;
float humidity_point;
};
class BiomeLiquid : public Biome {
virtual void genColumn(Mapgen *mg, int x, int z, int y1, int y2);
};
class BiomeHell : public Biome {
virtual void genColumn(Mapgen *mg, int x, int z, int y1, int y2);
virtual int getSurfaceHeight(float noise_terrain);
};
class BiomeAether : public Biome {
virtual void genColumn(Mapgen *mg, int x, int z, int y1, int y2);
virtual int getSurfaceHeight(float noise_terrain);
};
class BiomeSuperflat : public Biome {
virtual void genColumn(Mapgen *mg, int x, int z, int y1, int y2);
virtual int getSurfaceHeight(float noise_terrain);
struct BiomeNoiseInput {
v2s16 mapsize;
float *heat_map;
float *humidity_map;
s16 *height_map;
};
class BiomeDefManager {
public:
std::vector<float> bgroup_freqs;
std::vector<std::vector<Biome *> *> bgroups;
Biome *biome_default;
IGameDef *m_gamedef;
INodeDefManager *ndef;
std::vector<Biome *> biomes;
BiomeDefManager(IGameDef *gamedef);
bool biome_registration_finished;
NoiseParams *np_heat;
NoiseParams *np_humidity;
BiomeDefManager();
~BiomeDefManager();
Biome *createBiome(BiomeTerrainType btt);
Biome *getBiome(float bgfreq, float heat, float humidity);
void calcBiomes(BiomeNoiseInput *input, u8 *biomeid_map);
Biome *getBiome(float heat, float humidity, s16 y);
void addBiomeGroup(float freq);
void addBiome(Biome *b);
void addDefaultBiomes();
void resolveNodeNames(INodeDefManager *ndef);
};
#endif

View File

@@ -67,9 +67,16 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
m_view_bobbing_anim(0),
m_view_bobbing_state(0),
m_view_bobbing_speed(0),
m_view_bobbing_fall(0),
m_digging_anim(0),
m_digging_button(-1)
m_digging_button(-1),
m_dummymesh(createCubeMesh(v3f(1,1,1))),
m_wield_change_timer(0.125),
m_wield_mesh_next(NULL),
m_previous_playeritem(-1),
m_previous_itemname("")
{
//dstream<<__FUNCTION_NAME<<std::endl;
@@ -84,13 +91,14 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
// all other 3D scene nodes and before the GUI.
m_wieldmgr = smgr->createNewSceneManager();
m_wieldmgr->addCameraSceneNode();
m_wieldnode = m_wieldmgr->addMeshSceneNode(createCubeMesh(v3f(1,1,1)), NULL); // need a dummy mesh
m_wieldnode = m_wieldmgr->addMeshSceneNode(m_dummymesh, NULL); // need a dummy mesh
}
Camera::~Camera()
{
m_wieldnode->setMesh(NULL);
m_wieldmgr->drop();
delete m_dummymesh;
}
bool Camera::successfullyCreated(std::wstring& error_message)
@@ -132,6 +140,29 @@ inline f32 my_modf(f32 x)
void Camera::step(f32 dtime)
{
if(m_view_bobbing_fall > 0)
{
m_view_bobbing_fall -= 3 * dtime;
if(m_view_bobbing_fall <= 0)
m_view_bobbing_fall = -1; // Mark the effect as finished
}
bool was_under_zero = m_wield_change_timer < 0;
if(m_wield_change_timer < 0.125)
m_wield_change_timer += dtime;
if(m_wield_change_timer > 0.125)
m_wield_change_timer = 0.125;
if(m_wield_change_timer >= 0 && was_under_zero) {
if(m_wield_mesh_next) {
m_wieldnode->setMesh(m_wield_mesh_next);
m_wieldnode->setVisible(true);
} else {
m_wieldnode->setVisible(false);
}
m_wield_mesh_next = NULL;
}
if (m_view_bobbing_state != 0)
{
//f32 offset = dtime * m_view_bobbing_speed * 0.035;
@@ -218,6 +249,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize,
// Smooth the movement when walking up stairs
v3f old_player_position = m_playernode->getPosition();
v3f player_position = player->getPosition();
if (player->isAttached && player->parent)
player_position = player->parent->getPosition();
//if(player->touching_ground && player_position.Y > old_player_position.Y)
if(player->touching_ground &&
player_position.Y > old_player_position.Y)
@@ -233,11 +266,30 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize,
m_playernode->setRotation(v3f(0, -1 * player->getYaw(), 0));
m_playernode->updateAbsolutePosition();
//Get camera tilt timer (hurt animation)
// Get camera tilt timer (hurt animation)
float cameratilt = fabs(fabs(player->hurt_tilt_timer-0.75)-0.75);
// Fall bobbing animation
float fall_bobbing = 0;
if(player->camera_impact >= 1)
{
if(m_view_bobbing_fall == -1) // Effect took place and has finished
player->camera_impact = m_view_bobbing_fall = 0;
else if(m_view_bobbing_fall == 0) // Initialize effect
m_view_bobbing_fall = 1;
// Convert 0 -> 1 to 0 -> 1 -> 0
fall_bobbing = m_view_bobbing_fall < 0.5 ? m_view_bobbing_fall * 2 : -(m_view_bobbing_fall - 0.5) * 2 + 1;
// Smoothen and invert the above
fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1;
// Amplify according to the intensity of the impact
fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5;
fall_bobbing *= g_settings->getFloat("fall_bobbing_amount");
}
// Set head node transformation
m_headnode->setPosition(player->getEyeOffset()+v3f(0,cameratilt*-player->hurt_tilt_strength,0));
m_headnode->setPosition(player->getEyeOffset()+v3f(0,cameratilt*-player->hurt_tilt_strength+fall_bobbing,0));
m_headnode->setRotation(v3f(player->getPitch(), 0, cameratilt*player->hurt_tilt_strength));
m_headnode->updateAbsolutePosition();
@@ -311,8 +363,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize,
m_fov_y = fov_degrees * M_PI / 180.0;
// Increase vertical FOV on lower aspect ratios (<16:10)
m_fov_y *= MYMAX(1.0, MYMIN(1.4, sqrt(16./10. / m_aspect)));
// WTF is this? It can't be right
m_fov_x = 2 * atan(0.5 * m_aspect * tan(m_fov_y));
m_fov_x = 2 * atan(m_aspect * tan(0.5 * m_fov_y));
m_cameranode->setAspectRatio(m_aspect);
m_cameranode->setFOV(m_fov_y);
@@ -321,6 +372,10 @@ void Camera::update(LocalPlayer* player, f32 frametime, v2u32 screensize,
v3f wield_position = v3f(55, -35, 65);
//v3f wield_rotation = v3f(-100, 120, -100);
v3f wield_rotation = v3f(-100, 120, -100);
if(m_wield_change_timer < 0)
wield_position.Y -= 40 + m_wield_change_timer*320;
else
wield_position.Y -= 40 - m_wield_change_timer*320;
if(m_digging_anim < 0.05 || m_digging_anim > 0.5){
f32 frac = 1.0;
if(m_digging_anim > 0.5)
@@ -529,18 +584,34 @@ void Camera::setDigging(s32 button)
m_digging_button = button;
}
void Camera::wield(const ItemStack &item)
void Camera::wield(const ItemStack &item, u16 playeritem)
{
IItemDefManager *idef = m_gamedef->idef();
scene::IMesh *wield_mesh = idef->getWieldMesh(item.getDefinition(idef).name, m_gamedef);
if(wield_mesh)
{
m_wieldnode->setMesh(wield_mesh);
m_wieldnode->setVisible(true);
}
else
{
m_wieldnode->setVisible(false);
std::string itemname = item.getDefinition(idef).name;
m_wield_mesh_next = idef->getWieldMesh(itemname, m_gamedef);
if(playeritem != m_previous_playeritem &&
!(m_previous_itemname == "" && itemname == "")) {
m_previous_playeritem = playeritem;
m_previous_itemname = itemname;
if(m_wield_change_timer >= 0.125)
m_wield_change_timer = -0.125;
else if(m_wield_change_timer > 0) {
m_wield_change_timer = -m_wield_change_timer;
}
} else {
if(m_wield_mesh_next) {
m_wieldnode->setMesh(m_wield_mesh_next);
m_wieldnode->setVisible(true);
} else {
m_wieldnode->setVisible(false);
}
m_wield_mesh_next = NULL;
if(m_previous_itemname != itemname) {
m_previous_itemname = itemname;
m_wield_change_timer = 0;
}
else
m_wield_change_timer = 0.125;
}
}

View File

@@ -117,7 +117,7 @@ class Camera
void setDigging(s32 button);
// Replace the wielded item mesh
void wield(const ItemStack &item);
void wield(const ItemStack &item, u16 playeritem);
// Draw the wielded tool.
// This has to happen *after* the main scene is drawn.
@@ -166,6 +166,8 @@ class Camera
s32 m_view_bobbing_state;
// Speed of view bobbing animation
f32 m_view_bobbing_speed;
// Fall view bobbing
f32 m_view_bobbing_fall;
// Digging animation frame (0 <= m_digging_anim < 1)
f32 m_digging_anim;
@@ -173,6 +175,15 @@ class Camera
// If 0, left-click digging animation
// If 1, right-click digging animation
s32 m_digging_button;
//dummymesh for camera
irr::scene::IAnimatedMesh* m_dummymesh;
// Animation when changing wielded item
f32 m_wield_change_timer;
scene::IMesh *m_wield_mesh_next;
u16 m_previous_playeritem;
std::string m_previous_itemname;
};
#endif

533
src/cavegen.cpp Normal file
View File

@@ -0,0 +1,533 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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.
*/
#include "util/numeric.h"
#include "map.h"
#include "mapgen.h"
#include "mapgen_v6.h"
#include "mapgen_v7.h"
#include "cavegen.h"
CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_cave) {
this->mg = mg;
this->vm = mg->vm;
this->ndef = mg->ndef;
this->water_level = mg->water_level;
this->large_cave = is_large_cave;
this->ps = ps;
this->ps2 = ps2;
this->c_water_source = mg->c_water_source;
this->c_lava_source = mg->c_lava_source;
min_tunnel_diameter = 2;
max_tunnel_diameter = ps->range(2, 6);
dswitchint = ps->range(1, 14);
flooded = true;
if (large_cave) {
part_max_length_rs = ps->range(2,4);
tunnel_routepoints = ps->range(5, ps->range(15,30));
min_tunnel_diameter = 5;
max_tunnel_diameter = ps->range(7, ps->range(8,24));
} else {
part_max_length_rs = ps->range(2,9);
tunnel_routepoints = ps->range(10, ps->range(15,30));
}
large_cave_is_flat = (ps->range(0,1) == 0);
}
void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) {
node_min = nmin;
node_max = nmax;
max_stone_y = max_stone_height;
main_direction = v3f(0, 0, 0);
// Allowed route area size in nodes
ar = node_max - node_min + v3s16(1, 1, 1);
// Area starting point in nodes
of = node_min;
// Allow a bit more
//(this should be more than the maximum radius of the tunnel)
const s16 max_spread_amount = MAP_BLOCKSIZE;
s16 insure = 10;
s16 more = max_spread_amount - max_tunnel_diameter / 2 - insure;
ar += v3s16(1,0,1) * more * 2;
of -= v3s16(1,0,1) * more;
route_y_min = 0;
// Allow half a diameter + 7 over stone surface
route_y_max = -of.Y + max_stone_y + max_tunnel_diameter / 2 + 7;
// Limit maximum to area
route_y_max = rangelim(route_y_max, 0, ar.Y - 1);
if (large_cave) {
s16 min = 0;
if (node_min.Y < water_level && node_max.Y > water_level) {
min = water_level - max_tunnel_diameter/3 - of.Y;
route_y_max = water_level + max_tunnel_diameter/3 - of.Y;
}
route_y_min = ps->range(min, min + max_tunnel_diameter);
route_y_min = rangelim(route_y_min, 0, route_y_max);
}
s16 route_start_y_min = route_y_min;
s16 route_start_y_max = route_y_max;
route_start_y_min = rangelim(route_start_y_min, 0, ar.Y-1);
route_start_y_max = rangelim(route_start_y_max, route_start_y_min, ar.Y-1);
// Randomize starting position
orp = v3f(
(float)(ps->next() % ar.X) + 0.5,
(float)(ps->range(route_start_y_min, route_start_y_max)) + 0.5,
(float)(ps->next() % ar.Z) + 0.5
);
// Generate some tunnel starting from orp
for (u16 j = 0; j < tunnel_routepoints; j++)
makeTunnel(j % dswitchint == 0);
}
void CaveV6::makeTunnel(bool dirswitch) {
if (dirswitch && !large_cave) {
main_direction = v3f(
((float)(ps->next() % 20) - (float)10) / 10,
((float)(ps->next() % 20) - (float)10) / 30,
((float)(ps->next() % 20) - (float)10) / 10
);
main_direction *= (float)ps->range(0, 10) / 10;
}
// Randomize size
s16 min_d = min_tunnel_diameter;
s16 max_d = max_tunnel_diameter;
rs = ps->range(min_d, max_d);
v3s16 maxlen;
if (large_cave) {
maxlen = v3s16(
rs * part_max_length_rs,
rs * part_max_length_rs / 2,
rs * part_max_length_rs
);
} else {
maxlen = v3s16(
rs * part_max_length_rs,
ps->range(1, rs * part_max_length_rs),
rs * part_max_length_rs
);
}
v3f vec(
(float)(ps->next() % (maxlen.X * 1)) - (float)maxlen.X / 2,
(float)(ps->next() % (maxlen.Y * 1)) - (float)maxlen.Y / 2,
(float)(ps->next() % (maxlen.Z * 1)) - (float)maxlen.Z / 2
);
// Jump downward sometimes
if (!large_cave && ps->range(0, 12) == 0) {
vec = v3f(
(float)(ps->next() % (maxlen.X * 1)) - (float)maxlen.X / 2,
(float)(ps->next() % (maxlen.Y * 2)) - (float)maxlen.Y,
(float)(ps->next() % (maxlen.Z * 1)) - (float)maxlen.Z / 2
);
}
vec += main_direction;
v3f rp = orp + vec;
if (rp.X < 0)
rp.X = 0;
else if (rp.X >= ar.X)
rp.X = ar.X - 1;
if (rp.Y < route_y_min)
rp.Y = route_y_min;
else if (rp.Y >= route_y_max)
rp.Y = route_y_max - 1;
if (rp.Z < 0)
rp.Z = 0;
else if (rp.Z >= ar.Z)
rp.Z = ar.Z - 1;
vec = rp - orp;
float veclen = vec.getLength();
// As odd as it sounds, veclen is *exactly* 0.0 sometimes, causing a FPE
if (veclen < 0.05)
veclen = 1.0;
// Every second section is rough
bool randomize_xz = (ps2->range(1, 2) == 1);
// Carve routes
for (float f = 0; f < 1.0; f += 1.0 / veclen)
carveRoute(vec, f, randomize_xz);
orp = rp;
}
void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) {
MapNode airnode(CONTENT_AIR);
MapNode waternode(c_water_source);
MapNode lavanode(c_lava_source);
v3s16 startp(orp.X, orp.Y, orp.Z);
startp += of;
v3f fp = orp + vec * f;
fp.X += 0.1 * ps->range(-10, 10);
fp.Z += 0.1 * ps->range(-10, 10);
v3s16 cp(fp.X, fp.Y, fp.Z);
s16 d0 = -rs/2;
s16 d1 = d0 + rs;
if (randomize_xz) {
d0 += ps->range(-1, 1);
d1 += ps->range(-1, 1);
}
for (s16 z0 = d0; z0 <= d1; z0++) {
s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1);
for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) {
s16 maxabsxz = MYMAX(abs(x0), abs(z0));
s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1);
for (s16 y0 = -si2; y0 <= si2; y0++) {
if (large_cave_is_flat) {
// Make large caves not so tall
if (rs > 7 && abs(y0) >= rs / 3)
continue;
}
v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0);
p += of;
if (vm->m_area.contains(p) == false)
continue;
u32 i = vm->m_area.index(p);
if (large_cave) {
int full_ymin = node_min.Y - MAP_BLOCKSIZE;
int full_ymax = node_max.Y + MAP_BLOCKSIZE;
if (flooded && full_ymin < water_level && full_ymax > water_level) {
vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode;
} else if (flooded && full_ymax < water_level) {
vm->m_data[i] = (p.Y < startp.Y - 2) ? lavanode : airnode;
} else {
vm->m_data[i] = airnode;
}
} else {
// Don't replace air or water or lava or ignore
content_t c = vm->m_data[i].getContent();
if (c == CONTENT_IGNORE || c == CONTENT_AIR ||
c == c_water_source || c == c_lava_source)
continue;
vm->m_data[i] = airnode;
vm->m_flags[i] |= VMANIP_FLAG_CAVE;
}
}
}
}
}
///////////////////////////////////////// Caves V7
CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps, bool is_large_cave) {
this->mg = mg;
this->vm = mg->vm;
this->ndef = mg->ndef;
this->water_level = mg->water_level;
this->large_cave = is_large_cave;
this->ps = ps;
this->c_water_source = mg->c_water_source;
this->c_lava_source = mg->c_lava_source;
dswitchint = ps->range(1, 14);
flooded = ps->range(1, 2) == 2;
if (large_cave) {
part_max_length_rs = ps->range(2, 4);
tunnel_routepoints = ps->range(5, ps->range(15, 30));
min_tunnel_diameter = 5;
max_tunnel_diameter = ps->range(7, ps->range(8, 24));
} else {
part_max_length_rs = ps->range(2, 9);
tunnel_routepoints = ps->range(10, ps->range(15, 30));
min_tunnel_diameter = 2;
max_tunnel_diameter = ps->range(2, 6);
}
large_cave_is_flat = (ps->range(0, 1) == 0);
}
void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) {
node_min = nmin;
node_max = nmax;
max_stone_y = max_stone_height;
main_direction = v3f(0, 0, 0);
// Allowed route area size in nodes
ar = node_max - node_min + v3s16(1, 1, 1);
// Area starting point in nodes
of = node_min;
// Allow a bit more
//(this should be more than the maximum radius of the tunnel)
s16 insure = 10;
s16 more = MAP_BLOCKSIZE - max_tunnel_diameter / 2 - insure;
ar += v3s16(1,0,1) * more * 2;
of -= v3s16(1,0,1) * more;
route_y_min = 0;
// Allow half a diameter + 7 over stone surface
route_y_max = -of.Y + max_stone_y + max_tunnel_diameter / 2 + 7;
// Limit maximum to area
route_y_max = rangelim(route_y_max, 0, ar.Y - 1);
if (large_cave) {
s16 min = 0;
if (node_min.Y < water_level && node_max.Y > water_level) {
min = water_level - max_tunnel_diameter/3 - of.Y;
route_y_max = water_level + max_tunnel_diameter/3 - of.Y;
}
route_y_min = ps->range(min, min + max_tunnel_diameter);
route_y_min = rangelim(route_y_min, 0, route_y_max);
}
s16 route_start_y_min = route_y_min;
s16 route_start_y_max = route_y_max;
route_start_y_min = rangelim(route_start_y_min, 0, ar.Y - 1);
route_start_y_max = rangelim(route_start_y_max, route_start_y_min, ar.Y - 1);
// Randomize starting position
orp = v3f(
(float)(ps->next() % ar.X) + 0.5,
(float)(ps->range(route_start_y_min, route_start_y_max)) + 0.5,
(float)(ps->next() % ar.Z) + 0.5
);
// Generate some tunnel starting from orp
for (u16 j = 0; j < tunnel_routepoints; j++)
makeTunnel(j % dswitchint == 0);
}
void CaveV7::makeTunnel(bool dirswitch) {
if (dirswitch && !large_cave) {
main_direction = v3f(
((float)(ps->next() % 20) - (float)10) / 10,
((float)(ps->next() % 20) - (float)10) / 30,
((float)(ps->next() % 20) - (float)10) / 10
);
main_direction *= (float)ps->range(0, 10) / 10;
}
// Randomize size
s16 min_d = min_tunnel_diameter;
s16 max_d = max_tunnel_diameter;
rs = ps->range(min_d, max_d);
v3s16 maxlen;
if (large_cave) {
maxlen = v3s16(
rs * part_max_length_rs,
rs * part_max_length_rs / 2,
rs * part_max_length_rs
);
} else {
maxlen = v3s16(
rs * part_max_length_rs,
ps->range(1, rs * part_max_length_rs),
rs * part_max_length_rs
);
}
v3f vec;
// Jump downward sometimes
if (!large_cave && ps->range(0, 12) == 0) {
vec = v3f(
(float)(ps->next() % (maxlen.X * 1)) - (float)maxlen.X / 2,
(float)(ps->next() % (maxlen.Y * 2)) - (float)maxlen.Y,
(float)(ps->next() % (maxlen.Z * 1)) - (float)maxlen.Z / 2
);
} else {
vec = v3f(
(float)(ps->next() % (maxlen.X * 1)) - (float)maxlen.X / 2,
(float)(ps->next() % (maxlen.Y * 1)) - (float)maxlen.Y / 2,
(float)(ps->next() % (maxlen.Z * 1)) - (float)maxlen.Z / 2
);
}
// Do not make large caves that are above ground.
// It is only necessary to check the startpoint and endpoint.
if (large_cave) {
v3s16 orpi(orp.X, orp.Y, orp.Z);
v3s16 veci(vec.X, vec.Y, vec.Z);
v3s16 p;
p = orpi + veci + of + rs / 2;
if (p.Z >= node_min.Z && p.Z <= node_max.Z &&
p.X >= node_min.X && p.X <= node_max.X) {
u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X);
s16 h = mg->ridge_heightmap[index];
if (h < p.Y)
return;
} else if (p.Y > water_level) {
return; // If it's not in our heightmap, use a simple heuristic
}
p = orpi + of + rs / 2;
if (p.Z >= node_min.Z && p.Z <= node_max.Z &&
p.X >= node_min.X && p.X <= node_max.X) {
u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X);
s16 h = mg->ridge_heightmap[index];
if (h < p.Y)
return;
} else if (p.Y > water_level) {
return;
}
}
vec += main_direction;
v3f rp = orp + vec;
if (rp.X < 0)
rp.X = 0;
else if (rp.X >= ar.X)
rp.X = ar.X - 1;
if (rp.Y < route_y_min)
rp.Y = route_y_min;
else if (rp.Y >= route_y_max)
rp.Y = route_y_max - 1;
if (rp.Z < 0)
rp.Z = 0;
else if (rp.Z >= ar.Z)
rp.Z = ar.Z - 1;
vec = rp - orp;
float veclen = vec.getLength();
if (veclen < 0.05)
veclen = 1.0;
// Every second section is rough
bool randomize_xz = (ps->range(1, 2) == 1);
// Make a ravine every once in a while if it's long enough
float xylen = vec.X * vec.X + vec.Z * vec.Z;
bool is_ravine = (xylen > 500.0) && !large_cave && (ps->range(1, 8) == 1);
// Carve routes
for (float f = 0; f < 1.0; f += 1.0 / veclen)
carveRoute(vec, f, randomize_xz, is_ravine);
orp = rp;
}
void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) {
MapNode airnode(CONTENT_AIR);
MapNode waternode(c_water_source);
MapNode lavanode(c_lava_source);
MapNode liquidnode = ps->range(0, 4) ? lavanode : waternode;
v3s16 startp(orp.X, orp.Y, orp.Z);
startp += of;
v3f fp = orp + vec * f;
fp.X += 0.1 * ps->range(-10, 10);
fp.Z += 0.1 * ps->range(-10, 10);
v3s16 cp(fp.X, fp.Y, fp.Z);
s16 d0 = -rs/2;
s16 d1 = d0 + rs;
if (randomize_xz) {
d0 += ps->range(-1, 1);
d1 += ps->range(-1, 1);
}
bool flat_cave_floor = !large_cave && ps->range(0, 2) == 2;
for (s16 z0 = d0; z0 <= d1; z0++) {
s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1);
for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) {
s16 maxabsxz = MYMAX(abs(x0), abs(z0));
s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) :
rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1);
for (s16 y0 = -si2; y0 <= si2; y0++) {
// Make better floors in small caves
if(flat_cave_floor && y0 <= -rs/2 && rs<=7)
continue;
if (large_cave_is_flat) {
// Make large caves not so tall
if (rs > 7 && abs(y0) >= rs / 3)
continue;
}
v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0);
p += of;
if (vm->m_area.contains(p) == false)
continue;
u32 i = vm->m_area.index(p);
// Don't replace air or water or lava
content_t c = vm->m_data[i].getContent();
if (c == CONTENT_AIR || c == c_water_source || c == c_lava_source)
continue;
if (large_cave) {
int full_ymin = node_min.Y - MAP_BLOCKSIZE;
int full_ymax = node_max.Y + MAP_BLOCKSIZE;
if (flooded && full_ymin < water_level && full_ymax > water_level)
vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode;
else if (flooded && full_ymax < water_level)
vm->m_data[i] = (p.Y < startp.Y - 4) ? liquidnode : airnode;
else
vm->m_data[i] = airnode;
} else {
vm->m_data[i] = airnode;
vm->m_flags[i] |= VMANIP_FLAG_CAVE;
}
}
}
}
}

115
src/cavegen.h Normal file
View File

@@ -0,0 +1,115 @@
/*
Minetest
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
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.
*/
#ifndef CAVEGEN_HEADER
#define CAVEGEN_HEADER
#define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1
class MapgenV6;
class MapgenV7;
class CaveV6 {
public:
MapgenV6 *mg;
ManualMapVoxelManipulator *vm;
INodeDefManager *ndef;
s16 min_tunnel_diameter;
s16 max_tunnel_diameter;
u16 tunnel_routepoints;
int dswitchint;
int part_max_length_rs;
bool large_cave;
bool large_cave_is_flat;
bool flooded;
s16 max_stone_y;
v3s16 node_min;
v3s16 node_max;
v3f orp; // starting point, relative to caved space
v3s16 of; // absolute coordinates of caved space
v3s16 ar; // allowed route area
s16 rs; // tunnel radius size
v3f main_direction;
s16 route_y_min;
s16 route_y_max;
PseudoRandom *ps;
PseudoRandom *ps2;
content_t c_water_source;
content_t c_lava_source;
int water_level;
CaveV6() {}
CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool large_cave);
void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height);
void makeTunnel(bool dirswitch);
void carveRoute(v3f vec, float f, bool randomize_xz);
};
class CaveV7 {
public:
MapgenV7 *mg;
ManualMapVoxelManipulator *vm;
INodeDefManager *ndef;
s16 min_tunnel_diameter;
s16 max_tunnel_diameter;
u16 tunnel_routepoints;
int dswitchint;
int part_max_length_rs;
bool large_cave;
bool large_cave_is_flat;
bool flooded;
s16 max_stone_y;
v3s16 node_min;
v3s16 node_max;
v3f orp; // starting point, relative to caved space
v3s16 of; // absolute coordinates of caved space
v3s16 ar; // allowed route area
s16 rs; // tunnel radius size
v3f main_direction;
s16 route_y_min;
s16 route_y_max;
PseudoRandom *ps;
content_t c_water_source;
content_t c_lava_source;
int water_level;
CaveV7() {}
CaveV7(MapgenV7 *mg, PseudoRandom *ps, bool large_cave);
void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height);
void makeTunnel(bool dirswitch);
void carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine);
};
#endif

View File

@@ -117,8 +117,8 @@ void ChatBuffer::deleteOldest(u32 count)
--count;
}
m_unformatted.erase(0, del_unformatted);
m_formatted.erase(0, del_formatted);
m_unformatted.erase(m_unformatted.begin(), m_unformatted.begin() + del_unformatted);
m_formatted.erase(m_formatted.begin(), m_formatted.begin() + del_formatted);
}
void ChatBuffer::deleteByAge(f32 maxAge)
@@ -232,10 +232,10 @@ void ChatBuffer::scrollTop()
}
u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols,
core::array<ChatFormattedLine>& destination) const
std::vector<ChatFormattedLine>& destination) const
{
u32 num_added = 0;
core::array<ChatFormattedFragment> next_frags;
std::vector<ChatFormattedFragment> next_frags;
ChatFormattedLine next_line;
ChatFormattedFragment temp_frag;
u32 out_column = 0;
@@ -292,7 +292,7 @@ u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols,
frag.column = out_column;
next_line.fragments.push_back(frag);
out_column += frag.text.size();
next_frags.erase(0, 1);
next_frags.erase(next_frags.begin());
}
else
{
@@ -414,7 +414,7 @@ std::wstring ChatPrompt::submit()
if (!line.empty())
m_history.push_back(line);
if (m_history.size() > m_history_limit)
m_history.erase(0);
m_history.erase(m_history.begin());
m_history_index = m_history.size();
m_view = 0;
m_cursor = 0;
@@ -464,7 +464,7 @@ void ChatPrompt::historyNext()
}
}
void ChatPrompt::nickCompletion(const core::list<std::wstring>& names, bool backwards)
void ChatPrompt::nickCompletion(const std::list<std::string>& names, bool backwards)
{
// Two cases:
// (a) m_nick_completion_start == m_nick_completion_end == 0
@@ -492,14 +492,14 @@ void ChatPrompt::nickCompletion(const core::list<std::wstring>& names, bool back
std::wstring prefix = m_line.substr(prefix_start, prefix_end - prefix_start);
// find all names that start with the selected prefix
core::array<std::wstring> completions;
for (core::list<std::wstring>::ConstIterator
std::vector<std::wstring> completions;
for (std::list<std::string>::const_iterator
i = names.begin();
i != names.end(); i++)
i != names.end(); ++i)
{
if (str_starts_with(*i, prefix, true))
if (str_starts_with(narrow_to_wide(*i), prefix, true))
{
std::wstring completion = *i;
std::wstring completion = narrow_to_wide(*i);
if (prefix_start == 0)
completion += L":";
completions.push_back(completion);

View File

@@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include <string>
#include <vector>
#include <list>
// Chat console related classes, only used by the client
@@ -55,7 +57,7 @@ struct ChatFormattedFragment
struct ChatFormattedLine
{
// Array of text fragments
core::array<ChatFormattedFragment> fragments;
std::vector<ChatFormattedFragment> fragments;
// true if first line of one formatted ChatLine
bool first;
};
@@ -110,7 +112,7 @@ class ChatBuffer
// Appends the formatted lines to the destination array and
// returns the number of formatted lines.
u32 formatChatLine(const ChatLine& line, u32 cols,
core::array<ChatFormattedLine>& destination) const;
std::vector<ChatFormattedLine>& destination) const;
protected:
s32 getTopScrollPos() const;
@@ -120,7 +122,7 @@ class ChatBuffer
// Scrollback size
u32 m_scrollback;
// Array of unformatted chat lines
core::array<ChatLine> m_unformatted;
std::vector<ChatLine> m_unformatted;
// Number of character columns in console
u32 m_cols;
@@ -129,7 +131,7 @@ class ChatBuffer
// Scroll position (console's top line index into m_formatted)
s32 m_scroll;
// Array of formatted lines
core::array<ChatFormattedLine> m_formatted;
std::vector<ChatFormattedLine> m_formatted;
// Empty formatted line, for error returns
ChatFormattedLine m_empty_formatted_line;
};
@@ -158,7 +160,7 @@ class ChatPrompt
void historyNext();
// Nick completion
void nickCompletion(const core::list<std::wstring>& names, bool backwards);
void nickCompletion(const std::list<std::string>& names, bool backwards);
// Update console size and reformat the visible portion of the prompt
void reformat(u32 cols);
@@ -209,7 +211,7 @@ class ChatPrompt
// Currently edited line
std::wstring m_line;
// History buffer
core::array<std::wstring> m_history;
std::vector<std::wstring> m_history;
// History index (0 <= m_history_index <= m_history.size())
u32 m_history_index;
// Maximum number of history entries

View File

@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "settings.h"
#include "profiler.h"
#include "gettext.h"
#include "log.h"
#include "nodemetadata.h"
#include "nodedef.h"
@@ -45,6 +46,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "IMeshCache.h"
#include "util/serialize.h"
#include "config.h"
#include "util/directiontables.h"
#if USE_CURL
#include <curl/curl.h>
@@ -232,8 +234,8 @@ void * MediaFetchThread::Thread()
#if USE_CURL
CURL *curl;
CURLcode res;
for (core::list<MediaRequest>::Iterator i = m_file_requests.begin();
i != m_file_requests.end(); i++) {
for (std::list<MediaRequest>::iterator i = m_file_requests.begin();
i != m_file_requests.end(); ++i) {
curl = curl_easy_init();
assert(curl);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
@@ -348,6 +350,11 @@ Client::~Client()
m_mesh_update_thread.setRun(false);
while(m_mesh_update_thread.IsRunning())
sleep_ms(100);
while(!m_mesh_update_thread.m_queue_out.empty()) {
MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_front();
delete r.mesh;
}
delete m_inventory_from_server;
@@ -360,9 +367,18 @@ Client::~Client()
}
}
for (core::list<MediaFetchThread*>::Iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); i++)
for (std::list<MediaFetchThread*>::iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); ++i)
delete *i;
// cleanup 3d model meshes on client shutdown
while (m_device->getSceneManager()->getMeshCache()->getMeshCount() != 0) {
scene::IAnimatedMesh * mesh =
m_device->getSceneManager()->getMeshCache()->getMeshByIndex(0);
if (mesh != NULL)
m_device->getSceneManager()->getMeshCache()->removeMesh(mesh);
}
}
void Client::connect(Address address)
@@ -585,7 +601,7 @@ void Client::step(float dtime)
if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime))
{
ScopeProfiler sp(g_profiler, "Client: map timer and unload");
core::list<v3s16> deleted_blocks;
std::list<v3s16> deleted_blocks;
m_env.getMap().timerUpdate(map_timer_and_unload_dtime,
g_settings->getFloat("client_unload_unused_data_timeout"),
&deleted_blocks);
@@ -599,8 +615,8 @@ void Client::step(float dtime)
NOTE: This loop is intentionally iterated the way it is.
*/
core::list<v3s16>::Iterator i = deleted_blocks.begin();
core::list<v3s16> sendlist;
std::list<v3s16>::iterator i = deleted_blocks.begin();
std::list<v3s16> sendlist;
for(;;)
{
if(sendlist.size() == 255 || i == deleted_blocks.end())
@@ -619,9 +635,9 @@ void Client::step(float dtime)
writeU16(&reply[0], TOSERVER_DELETEDBLOCKS);
reply[2] = sendlist.size();
u32 k = 0;
for(core::list<v3s16>::Iterator
for(std::list<v3s16>::iterator
j = sendlist.begin();
j != sendlist.end(); j++)
j != sendlist.end(); ++j)
{
writeV3S16(&reply[2+1+6*k], *j);
k++;
@@ -635,7 +651,7 @@ void Client::step(float dtime)
}
sendlist.push_back(*i);
i++;
++i;
}
}
@@ -727,7 +743,7 @@ void Client::step(float dtime)
<<std::endl;*/
int num_processed_meshes = 0;
while(m_mesh_update_thread.m_queue_out.size() > 0)
while(!m_mesh_update_thread.m_queue_out.empty())
{
num_processed_meshes++;
MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_front();
@@ -746,6 +762,8 @@ void Client::step(float dtime)
// Replace with the new mesh
block->mesh = r.mesh;
} else {
delete r.mesh;
}
if(r.ack_block_to_server)
{
@@ -779,10 +797,10 @@ void Client::step(float dtime)
*/
if (m_media_receive_started) {
bool all_stopped = true;
for (core::list<MediaFetchThread*>::Iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); thread++) {
for (std::list<MediaFetchThread*>::iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); ++thread) {
all_stopped &= !(*thread)->IsRunning();
while ((*thread)->m_file_data.size() > 0) {
while (!(*thread)->m_file_data.empty()) {
std::pair <std::string, std::string> out = (*thread)->m_file_data.pop_front();
++m_media_received_count;
@@ -803,9 +821,9 @@ void Client::step(float dtime)
}
{
core::map<std::string, std::string>::Node *n;
std::map<std::string, std::string>::iterator n;
n = m_media_name_sha1_map.find(out.first);
if(n == NULL)
if(n == m_media_name_sha1_map.end())
errorstream<<"The server sent a file that has not "
<<"been announced."<<std::endl;
else
@@ -814,11 +832,11 @@ void Client::step(float dtime)
}
}
if (all_stopped) {
core::list<MediaRequest> fetch_failed;
for (core::list<MediaFetchThread*>::Iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); thread++) {
for (core::list<MediaRequest>::Iterator request = (*thread)->m_failed.begin();
request != (*thread)->m_failed.end(); request++)
std::list<MediaRequest> fetch_failed;
for (std::list<MediaFetchThread*>::iterator thread = m_media_fetch_threads.begin();
thread != m_media_fetch_threads.end(); ++thread) {
for (std::list<MediaRequest>::iterator request = (*thread)->m_failed.begin();
request != (*thread)->m_failed.end(); ++request)
fetch_failed.push_back(*request);
(*thread)->m_failed.clear();
}
@@ -976,16 +994,28 @@ bool Client::loadMedia(const std::string &data, const std::string &filename)
{
verbosestream<<"Client: Storing model into Irrlicht: "
<<"\""<<filename<<"\""<<std::endl;
scene::ISceneManager *smgr = m_device->getSceneManager();
//check if mesh was already cached
scene::IAnimatedMesh *mesh =
smgr->getMeshCache()->getMeshByName(filename.c_str());
if (mesh != NULL) {
errorstream << "Multiple models with name: " << filename.c_str() <<
" found replacing previous model!" << std::endl;
smgr->getMeshCache()->removeMesh(mesh);
mesh = 0;
}
io::IFileSystem *irrfs = m_device->getFileSystem();
io::IReadFile *rfile = irrfs->createMemoryReadFile(
*data_rw, data_rw.getSize(), filename.c_str());
assert(rfile);
scene::ISceneManager *smgr = m_device->getSceneManager();
scene::IAnimatedMesh *mesh = smgr->getMesh(rfile);
mesh = smgr->getMesh(rfile);
smgr->getMeshCache()->addMesh(filename.c_str(), mesh);
rfile->drop();
return true;
}
@@ -1015,14 +1045,14 @@ void Client::deletingPeer(con::Peer *peer, bool timeout)
string name
}
*/
void Client::request_media(const core::list<MediaRequest> &file_requests)
void Client::request_media(const std::list<MediaRequest> &file_requests)
{
std::ostringstream os(std::ios_base::binary);
writeU16(os, TOSERVER_REQUEST_MEDIA);
writeU16(os, file_requests.size());
for(core::list<MediaRequest>::ConstIterator i = file_requests.begin();
i != file_requests.end(); i++) {
for(std::list<MediaRequest>::const_iterator i = file_requests.begin();
i != file_requests.end(); ++i) {
os<<serializeString(i->name);
}
@@ -1622,7 +1652,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
infostream<<"Client: Received media announcement: packet size: "
<<datasize<<std::endl;
core::list<MediaRequest> file_requests;
std::list<MediaRequest> file_requests;
for(int i=0; i<num_files; i++)
{
@@ -1641,7 +1671,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
std::string sha1_hex = hex_encode(sha1_raw);
std::ostringstream tmp_os(std::ios_base::binary);
bool found_in_cache = m_media_cache.load_sha1(sha1_raw, tmp_os);
m_media_name_sha1_map.set(name, sha1_raw);
m_media_name_sha1_map[name] = sha1_raw;
// If found in cache, try to load it from there
if(found_in_cache)
@@ -1677,16 +1707,16 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
request_media(file_requests);
} else {
#if USE_CURL
core::list<MediaFetchThread*>::Iterator cur = m_media_fetch_threads.begin();
for(core::list<MediaRequest>::Iterator i = file_requests.begin();
i != file_requests.end(); i++) {
std::list<MediaFetchThread*>::iterator cur = m_media_fetch_threads.begin();
for(std::list<MediaRequest>::iterator i = file_requests.begin();
i != file_requests.end(); ++i) {
(*cur)->m_file_requests.push_back(*i);
cur++;
if (cur == m_media_fetch_threads.end())
cur = m_media_fetch_threads.begin();
}
for (core::list<MediaFetchThread*>::Iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); i++) {
for (std::list<MediaFetchThread*>::iterator i = m_media_fetch_threads.begin();
i != m_media_fetch_threads.end(); ++i) {
(*i)->m_remote_url = remote_media;
(*i)->Start();
}
@@ -1762,9 +1792,9 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
}
{
core::map<std::string, std::string>::Node *n;
std::map<std::string, std::string>::iterator n;
n = m_media_name_sha1_map.find(name);
if(n == NULL)
if(n == m_media_name_sha1_map.end())
errorstream<<"The server sent a file that has not "
<<"been announced."<<std::endl;
else
@@ -1936,6 +1966,193 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)
event.show_formspec.formname = new std::string(formname);
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_SPAWN_PARTICLE)
{
std::string datastring((char*)&data[2], datasize-2);
std::istringstream is(datastring, std::ios_base::binary);
v3f pos = readV3F1000(is);
v3f vel = readV3F1000(is);
v3f acc = readV3F1000(is);
float expirationtime = readF1000(is);
float size = readF1000(is);
bool collisiondetection = readU8(is);
std::string texture = deSerializeLongString(is);
ClientEvent event;
event.type = CE_SPAWN_PARTICLE;
event.spawn_particle.pos = new v3f (pos);
event.spawn_particle.vel = new v3f (vel);
event.spawn_particle.acc = new v3f (acc);
event.spawn_particle.expirationtime = expirationtime;
event.spawn_particle.size = size;
event.spawn_particle.collisiondetection =
collisiondetection;
event.spawn_particle.texture = new std::string(texture);
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_ADD_PARTICLESPAWNER)
{
std::string datastring((char*)&data[2], datasize-2);
std::istringstream is(datastring, std::ios_base::binary);
u16 amount = readU16(is);
float spawntime = readF1000(is);
v3f minpos = readV3F1000(is);
v3f maxpos = readV3F1000(is);
v3f minvel = readV3F1000(is);
v3f maxvel = readV3F1000(is);
v3f minacc = readV3F1000(is);
v3f maxacc = readV3F1000(is);
float minexptime = readF1000(is);
float maxexptime = readF1000(is);
float minsize = readF1000(is);
float maxsize = readF1000(is);
bool collisiondetection = readU8(is);
std::string texture = deSerializeLongString(is);
u32 id = readU32(is);
ClientEvent event;
event.type = CE_ADD_PARTICLESPAWNER;
event.add_particlespawner.amount = amount;
event.add_particlespawner.spawntime = spawntime;
event.add_particlespawner.minpos = new v3f (minpos);
event.add_particlespawner.maxpos = new v3f (maxpos);
event.add_particlespawner.minvel = new v3f (minvel);
event.add_particlespawner.maxvel = new v3f (maxvel);
event.add_particlespawner.minacc = new v3f (minacc);
event.add_particlespawner.maxacc = new v3f (maxacc);
event.add_particlespawner.minexptime = minexptime;
event.add_particlespawner.maxexptime = maxexptime;
event.add_particlespawner.minsize = minsize;
event.add_particlespawner.maxsize = maxsize;
event.add_particlespawner.collisiondetection = collisiondetection;
event.add_particlespawner.texture = new std::string(texture);
event.add_particlespawner.id = id;
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_DELETE_PARTICLESPAWNER)
{
std::string datastring((char*)&data[2], datasize-2);
std::istringstream is(datastring, std::ios_base::binary);
u32 id = readU16(is);
ClientEvent event;
event.type = CE_DELETE_PARTICLESPAWNER;
event.delete_particlespawner.id = id;
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_HUDADD)
{
std::string datastring((char *)&data[2], datasize - 2);
std::istringstream is(datastring, std::ios_base::binary);
u32 id = readU32(is);
u8 type = readU8(is);
v2f pos = readV2F1000(is);
std::string name = deSerializeString(is);
v2f scale = readV2F1000(is);
std::string text = deSerializeString(is);
u32 number = readU32(is);
u32 item = readU32(is);
u32 dir = readU32(is);
v2f align = readV2F1000(is);
v2f offset = readV2F1000(is);
ClientEvent event;
event.type = CE_HUDADD;
event.hudadd.id = id;
event.hudadd.type = type;
event.hudadd.pos = new v2f(pos);
event.hudadd.name = new std::string(name);
event.hudadd.scale = new v2f(scale);
event.hudadd.text = new std::string(text);
event.hudadd.number = number;
event.hudadd.item = item;
event.hudadd.dir = dir;
event.hudadd.align = new v2f(align);
event.hudadd.offset = new v2f(offset);
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_HUDRM)
{
std::string datastring((char *)&data[2], datasize - 2);
std::istringstream is(datastring, std::ios_base::binary);
u32 id = readU32(is);
ClientEvent event;
event.type = CE_HUDRM;
event.hudrm.id = id;
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_HUDCHANGE)
{
std::string sdata;
v2f v2fdata;
u32 intdata = 0;
std::string datastring((char *)&data[2], datasize - 2);
std::istringstream is(datastring, std::ios_base::binary);
u32 id = readU32(is);
u8 stat = (HudElementStat)readU8(is);
if (stat == HUD_STAT_POS || stat == HUD_STAT_SCALE ||
stat == HUD_STAT_ALIGN || stat == HUD_STAT_OFFSET)
v2fdata = readV2F1000(is);
else if (stat == HUD_STAT_NAME || stat == HUD_STAT_TEXT)
sdata = deSerializeString(is);
else
intdata = readU32(is);
ClientEvent event;
event.type = CE_HUDCHANGE;
event.hudchange.id = id;
event.hudchange.stat = (HudElementStat)stat;
event.hudchange.v2fdata = new v2f(v2fdata);
event.hudchange.sdata = new std::string(sdata);
event.hudchange.data = intdata;
m_client_event_queue.push_back(event);
}
else if(command == TOCLIENT_HUD_SET_FLAGS)
{
std::string datastring((char *)&data[2], datasize - 2);
std::istringstream is(datastring, std::ios_base::binary);
Player *player = m_env.getLocalPlayer();
assert(player != NULL);
u32 flags = readU32(is);
u32 mask = readU32(is);
player->hud_flags &= ~mask;
player->hud_flags |= flags;
}
else if(command == TOCLIENT_HUD_SET_PARAM)
{
std::string datastring((char *)&data[2], datasize - 2);
std::istringstream is(datastring, std::ios_base::binary);
Player *player = m_env.getLocalPlayer();
assert(player != NULL);
u16 param = readU16(is);
std::string value = deSerializeString(is);
if(param == HUD_PARAM_HOTBAR_ITEMCOUNT && value.size() == 4){
s32 hotbar_itemcount = readS32((u8*) value.c_str());
if(hotbar_itemcount > 0 && hotbar_itemcount <= HUD_HOTBAR_ITEMCOUNT_MAX)
player->hud_hotbar_itemcount = hotbar_itemcount;
}
}
else
{
infostream<<"Client: Ignoring unknown command "
@@ -2231,7 +2448,7 @@ void Client::sendPlayerItem(u16 item)
void Client::removeNode(v3s16 p)
{
core::map<v3s16, MapBlock*> modified_blocks;
std::map<v3s16, MapBlock*> modified_blocks;
try
{
@@ -2245,12 +2462,11 @@ void Client::removeNode(v3s16 p)
// add urgent task to update the modified node
addUpdateMeshTaskForNode(p, false, true);
for(core::map<v3s16, MapBlock * >::Iterator
i = modified_blocks.getIterator();
i.atEnd() == false; i++)
for(std::map<v3s16, MapBlock * >::iterator
i = modified_blocks.begin();
i != modified_blocks.end(); ++i)
{
v3s16 p = i.getNode()->getKey();
addUpdateMeshTaskWithEdge(p);
addUpdateMeshTaskWithEdge(i->first);
}
}
@@ -2258,7 +2474,7 @@ void Client::addNode(v3s16 p, MapNode n)
{
TimeTaker timer1("Client::addNode()");
core::map<v3s16, MapBlock*> modified_blocks;
std::map<v3s16, MapBlock*> modified_blocks;
try
{
@@ -2268,12 +2484,11 @@ void Client::addNode(v3s16 p, MapNode n)
catch(InvalidPositionException &e)
{}
for(core::map<v3s16, MapBlock * >::Iterator
i = modified_blocks.getIterator();
i.atEnd() == false; i++)
for(std::map<v3s16, MapBlock * >::iterator
i = modified_blocks.begin();
i != modified_blocks.end(); ++i)
{
v3s16 p = i.getNode()->getKey();
addUpdateMeshTaskWithEdge(p);
addUpdateMeshTaskWithEdge(i->first);
}
}
@@ -2365,6 +2580,9 @@ void Client::inventoryAction(InventoryAction *a)
Predict some local inventory changes
*/
a->clientApply(this, this);
// Remove it
delete a;
}
ClientActiveObject * Client::getSelectedActiveObject(
@@ -2373,7 +2591,7 @@ ClientActiveObject * Client::getSelectedActiveObject(
core::line3d<f32> shootline_on_map
)
{
core::array<DistanceSortedActiveObject> objects;
std::vector<DistanceSortedActiveObject> objects;
m_env.getActiveObjects(from_pos_f_on_map, max_d, objects);
@@ -2381,7 +2599,7 @@ ClientActiveObject * Client::getSelectedActiveObject(
// Sort them.
// After this, the closest object is the first in the array.
objects.sort();
std::sort(objects.begin(), objects.end());
for(u32 i=0; i<objects.size(); i++)
{
@@ -2420,18 +2638,9 @@ void Client::printDebugInfo(std::ostream &os)
<<std::endl;*/
}
core::list<std::wstring> Client::getConnectedPlayerNames()
std::list<std::string> Client::getConnectedPlayerNames()
{
core::list<Player*> players = m_env.getPlayers(true);
core::list<std::wstring> playerNames;
for(core::list<Player*>::Iterator
i = players.begin();
i != players.end(); i++)
{
Player *player = *i;
playerNames.push_back(narrow_to_wide(player->getName()));
}
return playerNames;
return m_env.getPlayerNames();
}
float Client::getAnimationTime()
@@ -2558,21 +2767,14 @@ void Client::addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server, bool
}
catch(InvalidPositionException &e){}
// Leading edge
try{
v3s16 p = blockpos + v3s16(-1,0,0);
addUpdateMeshTask(p, false, urgent);
for (int i=0;i<6;i++)
{
try{
v3s16 p = blockpos + g_6dirs[i];
addUpdateMeshTask(p, false, urgent);
}
catch(InvalidPositionException &e){}
}
catch(InvalidPositionException &e){}
try{
v3s16 p = blockpos + v3s16(0,-1,0);
addUpdateMeshTask(p, false, urgent);
}
catch(InvalidPositionException &e){}
try{
v3s16 p = blockpos + v3s16(0,0,-1);
addUpdateMeshTask(p, false, urgent);
}
catch(InvalidPositionException &e){}
}
void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool urgent)
@@ -2627,7 +2829,10 @@ ClientEvent Client::getClientEvent()
return m_client_event_queue.pop_front();
}
void Client::afterContentReceived()
void draw_load_screen(const std::wstring &text,
IrrlichtDevice* device, gui::IGUIFont* font,
float dtime=0 ,int percent=0, bool clouds=true);
void Client::afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font)
{
infostream<<"Client::afterContentReceived() started"<<std::endl;
assert(m_itemdef_received);
@@ -2662,13 +2867,23 @@ void Client::afterContentReceived()
if(g_settings->getBool("preload_item_visuals"))
{
verbosestream<<"Updating item textures and meshes"<<std::endl;
wchar_t* text = wgettext("Item textures...");
draw_load_screen(text,device,font,0,0);
std::set<std::string> names = m_itemdef->getAll();
size_t size = names.size();
size_t count = 0;
int percent = 0;
for(std::set<std::string>::const_iterator
i = names.begin(); i != names.end(); ++i){
// Asking for these caches the result
m_itemdef->getInventoryTexture(*i, this);
m_itemdef->getWieldMesh(*i, this);
count++;
percent = count*100/size;
if (count%50 == 0) // only update every 50 item
draw_load_screen(text,device,font,0,percent);
}
delete[] text;
}
// Start mesh update thread after setting up content definitions

View File

@@ -36,6 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server.h"
#include "particles.h"
#include "util/pointedthing.h"
#include <algorithm>
struct MeshMakeData;
class MapBlockMesh;
@@ -142,9 +143,9 @@ class MediaFetchThread : public SimpleThread
void * Thread();
core::list<MediaRequest> m_file_requests;
std::list<MediaRequest> m_file_requests;
MutexedQueue<std::pair<std::string, std::string> > m_file_data;
core::list<MediaRequest> m_failed;
std::list<MediaRequest> m_failed;
std::string m_remote_url;
IGameDef *m_gamedef;
};
@@ -156,7 +157,13 @@ enum ClientEventType
CE_PLAYER_FORCE_MOVE,
CE_DEATHSCREEN,
CE_TEXTURES_UPDATED,
CE_SHOW_FORMSPEC
CE_SHOW_FORMSPEC,
CE_SPAWN_PARTICLE,
CE_ADD_PARTICLESPAWNER,
CE_DELETE_PARTICLESPAWNER,
CE_HUDADD,
CE_HUDRM,
CE_HUDCHANGE
};
struct ClientEvent
@@ -179,11 +186,63 @@ struct ClientEvent
f32 camera_point_target_z;
} deathscreen;
struct{
std::string* formspec;
std::string* formname;
std::string *formspec;
std::string *formname;
} show_formspec;
struct{
} textures_updated;
struct{
v3f *pos;
v3f *vel;
v3f *acc;
f32 expirationtime;
f32 size;
bool collisiondetection;
std::string *texture;
} spawn_particle;
struct{
u16 amount;
f32 spawntime;
v3f *minpos;
v3f *maxpos;
v3f *minvel;
v3f *maxvel;
v3f *minacc;
v3f *maxacc;
f32 minexptime;
f32 maxexptime;
f32 minsize;
f32 maxsize;
bool collisiondetection;
std::string *texture;
u32 id;
} add_particlespawner;
struct{
u32 id;
} delete_particlespawner;
struct{
u32 id;
u8 type;
v2f *pos;
std::string *name;
v2f *scale;
std::string *text;
u32 number;
u32 item;
u32 dir;
v2f *align;
v2f *offset;
} hudadd;
struct{
u32 id;
} hudrm;
struct{
u32 id;
HudElementStat stat;
v2f *v2fdata;
std::string *sdata;
u32 data;
} hudchange;
};
};
@@ -282,7 +341,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
// Prints a line or two of info
void printDebugInfo(std::ostream &os);
core::list<std::wstring> getConnectedPlayerNames();
std::list<std::string> getConnectedPlayerNames();
float getAnimationTime();
@@ -326,7 +385,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
bool nodedefReceived()
{ return m_nodedef_received; }
void afterContentReceived();
void afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font);
float getRTT(void);
@@ -347,7 +406,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
// Insert a media file appropriately into the appropriate manager
bool loadMedia(const std::string &data, const std::string &filename);
void request_media(const core::list<MediaRequest> &file_requests);
void request_media(const std::list<MediaRequest> &file_requests);
// Virtual methods from con::PeerHandler
void peerAdded(con::Peer *peer);
@@ -377,7 +436,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
MtEventManager *m_event;
MeshUpdateThread m_mesh_update_thread;
core::list<MediaFetchThread*> m_media_fetch_threads;
std::list<MediaFetchThread*> m_media_fetch_threads;
ClientEnvironment m_env;
con::Connection m_con;
IrrlichtDevice *m_device;
@@ -387,7 +446,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
bool m_inventory_updated;
Inventory *m_inventory_from_server;
float m_inventory_from_server_age;
core::map<v3s16, bool> m_active_blocks;
std::set<v3s16> m_active_blocks;
PacketCounter m_packetcounter;
// Block mesh animation parameters
float m_animation_time;
@@ -405,7 +464,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
Queue<ClientEvent> m_client_event_queue;
FileCache m_media_cache;
// Mapping from media file name to SHA1 checksum
core::map<std::string, std::string> m_media_name_sha1_map;
std::map<std::string, std::string> m_media_name_sha1_map;
bool m_media_receive_started;
u32 m_media_count;
u32 m_media_received_count;

View File

@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "profiler.h"
#include "settings.h"
#include "util/mathconstants.h"
#include <algorithm>
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
@@ -83,7 +84,7 @@ MapSector * ClientMap::emergeSector(v2s16 p2d)
{
//JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out
m_sectors.insert(p2d, sector);
m_sectors[p2d] = sector;
}
return sector;
@@ -164,11 +165,11 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
INodeDefManager *nodemgr = m_gamedef->ndef();
for(core::map<v3s16, MapBlock*>::Iterator
i = m_drawlist.getIterator();
i.atEnd() == false; i++)
for(std::map<v3s16, MapBlock*>::iterator
i = m_drawlist.begin();
i != m_drawlist.end(); ++i)
{
MapBlock *block = i.getNode()->getValue();
MapBlock *block = i->second;
block->refDrop();
}
m_drawlist.clear();
@@ -215,11 +216,11 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
// Blocks from which stuff was actually drawn
//u32 blocks_without_stuff = 0;
for(core::map<v2s16, MapSector*>::Iterator
si = m_sectors.getIterator();
si.atEnd() == false; si++)
for(std::map<v2s16, MapSector*>::iterator
si = m_sectors.begin();
si != m_sectors.end(); ++si)
{
MapSector *sector = si.getNode()->getValue();
MapSector *sector = si->second;
v2s16 sp = sector->getPos();
if(m_control.range_all == false)
@@ -231,7 +232,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
continue;
}
core::list< MapBlock * > sectorblocks;
std::list< MapBlock * > sectorblocks;
sector->getBlocks(sectorblocks);
/*
@@ -240,7 +241,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
u32 sector_blocks_drawn = 0;
core::list< MapBlock * >::Iterator i;
std::list< MapBlock * >::iterator i;
for(i=sectorblocks.begin(); i!=sectorblocks.end(); i++)
{
MapBlock *block = *i;
@@ -350,7 +351,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
} // foreach sectorblocks
if(sector_blocks_drawn != 0)
m_last_drawn_sectors[sp] = true;
m_last_drawn_sectors.insert(sp);
}
m_control.blocks_would_have_drawn = blocks_would_have_drawn;
@@ -368,12 +369,12 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
struct MeshBufList
{
video::SMaterial m;
core::list<scene::IMeshBuffer*> bufs;
std::list<scene::IMeshBuffer*> bufs;
};
struct MeshBufListList
{
core::list<MeshBufList> lists;
std::list<MeshBufList> lists;
void clear()
{
@@ -382,8 +383,8 @@ struct MeshBufListList
void add(scene::IMeshBuffer *buf)
{
for(core::list<MeshBufList>::Iterator i = lists.begin();
i != lists.end(); i++){
for(std::list<MeshBufList>::iterator i = lists.begin();
i != lists.end(); ++i){
MeshBufList &l = *i;
if(l.m == buf->getMaterial()){
l.bufs.push_back(buf);
@@ -487,11 +488,11 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
MeshBufListList drawbufs;
for(core::map<v3s16, MapBlock*>::Iterator
i = m_drawlist.getIterator();
i.atEnd() == false; i++)
for(std::map<v3s16, MapBlock*>::iterator
i = m_drawlist.begin();
i != m_drawlist.end(); ++i)
{
MapBlock *block = i.getNode()->getValue();
MapBlock *block = i->second;
// If the mesh of the block happened to get deleted, ignore it
if(block->mesh == NULL)
@@ -569,11 +570,11 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
}
}
core::list<MeshBufList> &lists = drawbufs.lists;
std::list<MeshBufList> &lists = drawbufs.lists;
int timecheck_counter = 0;
for(core::list<MeshBufList>::Iterator i = lists.begin();
i != lists.end(); i++)
for(std::list<MeshBufList>::iterator i = lists.begin();
i != lists.end(); ++i)
{
{
timecheck_counter++;
@@ -595,8 +596,8 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
driver->setMaterial(list.m);
for(core::list<scene::IMeshBuffer*>::Iterator j = list.bufs.begin();
j != list.bufs.end(); j++)
for(std::list<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
j != list.bufs.end(); ++j)
{
scene::IMeshBuffer *buf = *j;
driver->drawMeshBuffer(buf);
@@ -769,7 +770,7 @@ int ClientMap::getBackgroundBrightness(float max_d, u32 daylight_factor,
float sunlight_min_d = max_d*0.8;
if(sunlight_min_d > 35*BS)
sunlight_min_d = 35*BS;
core::array<int> values;
std::vector<int> values;
for(u32 i=0; i<sizeof(z_directions)/sizeof(*z_directions); i++){
v3f z_dir = z_directions[i];
z_dir.normalize();
@@ -798,7 +799,7 @@ int ClientMap::getBackgroundBrightness(float max_d, u32 daylight_factor,
}
int brightness_sum = 0;
int brightness_count = 0;
values.sort();
std::sort(values.begin(), values.end());
u32 num_values_to_use = values.size();
if(num_values_to_use >= 10)
num_values_to_use -= num_values_to_use/2;

View File

@@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_extrabloated.h"
#include "map.h"
#include <set>
#include <map>
struct MapDrawControl
{
@@ -128,7 +130,7 @@ class ClientMap : public Map, public scene::ISceneNode
// Check if sector was drawn on last render()
bool sectorWasDrawn(v2s16 p)
{
return (m_last_drawn_sectors.find(p) != NULL);
return (m_last_drawn_sectors.find(p) != m_last_drawn_sectors.end());
}
private:
@@ -143,9 +145,9 @@ class ClientMap : public Map, public scene::ISceneNode
f32 m_camera_fov;
JMutex m_camera_mutex;
core::map<v3s16, MapBlock*> m_drawlist;
std::map<v3s16, MapBlock*> m_drawlist;
core::map<v2s16, bool> m_last_drawn_sectors;
std::set<v2s16> m_last_drawn_sectors;
};
#endif

View File

@@ -43,9 +43,9 @@ ClientActiveObject* ClientActiveObject::create(u8 type, IGameDef *gamedef,
ClientEnvironment *env)
{
// Find factory function
core::map<u16, Factory>::Node *n;
std::map<u16, Factory>::iterator n;
n = m_types.find(type);
if(n == NULL)
if(n == m_types.end())
{
// If factory is not found, just return.
dstream<<"WARNING: ClientActiveObject: No factory for type="
@@ -53,18 +53,18 @@ ClientActiveObject* ClientActiveObject::create(u8 type, IGameDef *gamedef,
return NULL;
}
Factory f = n->getValue();
Factory f = n->second;
ClientActiveObject *object = (*f)(gamedef, env);
return object;
}
void ClientActiveObject::registerType(u16 type, Factory f)
{
core::map<u16, Factory>::Node *n;
std::map<u16, Factory>::iterator n;
n = m_types.find(type);
if(n)
if(n != m_types.end())
return;
m_types.insert(type, f);
m_types[type] = f;
}

View File

@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_extrabloated.h"
#include "activeobject.h"
#include <map>
/*
@@ -96,7 +97,7 @@ class ClientActiveObject : public ActiveObject
ClientEnvironment *m_env;
private:
// Used for creating objects based on type
static core::map<u16, Factory> m_types;
static std::map<u16, Factory> m_types;
};
struct DistanceSortedActiveObject
@@ -110,7 +111,7 @@ struct DistanceSortedActiveObject
d = a_d;
}
bool operator < (DistanceSortedActiveObject &other)
bool operator < (const DistanceSortedActiveObject &other) const
{
return d < other.d;
}

View File

@@ -79,9 +79,25 @@ SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
Serialization format changes
PROTOCOL_VERSION 16:
TOCLIENT_SHOW_FORMSPEC
PROTOCOL_VERSION 17:
Serialization format change: include backface_culling flag in TileDef
Added rightclickable field in nodedef
TOCLIENT_SPAWN_PARTICLE
TOCLIENT_ADD_PARTICLESPAWNER
TOCLIENT_DELETE_PARTICLESPAWNER
PROTOCOL_VERSION 18:
damageGroups added to ToolCapabilities
sound_place added to ItemDefinition
PROTOCOL_VERSION 19:
GENERIC_CMD_SET_PHYSICS_OVERRIDE
PROTOCOL_VERSION 20:
TOCLIENT_HUDADD
TOCLIENT_HUDRM
TOCLIENT_HUDCHANGE
TOCLIENT_HUD_SET_FLAGS
*/
#define LATEST_PROTOCOL_VERSION 16
#define LATEST_PROTOCOL_VERSION 20
// Server's supported network protocol range
#define SERVER_PROTOCOL_VERSION_MIN 13
@@ -356,6 +372,7 @@ enum ToClientCommand
u8[len] name
[2] serialized inventory
*/
TOCLIENT_SHOW_FORMSPEC = 0x44,
/*
[0] u16 command
@@ -381,6 +398,96 @@ enum ToClientCommand
f1000 movement_liquid_sink
f1000 movement_gravity
*/
TOCLIENT_SPAWN_PARTICLE = 0x46,
/*
u16 command
v3f1000 pos
v3f1000 velocity
v3f1000 acceleration
f1000 expirationtime
f1000 size
u8 bool collisiondetection
u32 len
u8[len] texture
*/
TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
/*
u16 command
u16 amount
f1000 spawntime
v3f1000 minpos
v3f1000 maxpos
v3f1000 minvel
v3f1000 maxvel
v3f1000 minacc
v3f1000 maxacc
f1000 minexptime
f1000 maxexptime
f1000 minsize
f1000 maxsize
u8 bool collisiondetection
u32 len
u8[len] texture
u32 id
*/
TOCLIENT_DELETE_PARTICLESPAWNER = 0x48,
/*
u16 command
u32 id
*/
TOCLIENT_HUDADD = 0x49,
/*
u16 command
u32 id
u8 type
v2f1000 pos
u32 len
u8[len] name
v2f1000 scale
u32 len2
u8[len2] text
u32 number
u32 item
u32 dir
v2f1000 align
v2f1000 offset
*/
TOCLIENT_HUDRM = 0x4a,
/*
u16 command
u32 id
*/
TOCLIENT_HUDCHANGE = 0x4b,
/*
u16 command
u32 id
u8 stat
[v2f1000 data |
u32 len
u8[len] data |
u32 data]
*/
TOCLIENT_HUD_SET_FLAGS = 0x4c,
/*
u16 command
u32 flags
u32 mask
*/
TOCLIENT_HUD_SET_PARAM = 0x4d,
/*
u16 command
u16 param
u16 len
u8[len] value
*/
};
enum ToServerCommand

View File

@@ -29,7 +29,8 @@ Clouds::Clouds(
scene::ISceneNode* parent,
scene::ISceneManager* mgr,
s32 id,
u32 seed
u32 seed,
s16 cloudheight
):
scene::ISceneNode(parent, mgr, id),
m_seed(seed),
@@ -45,7 +46,8 @@ Clouds::Clouds(
//m_material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA;
m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
m_cloud_y = BS * g_settings->getS16("cloud_height");
m_cloud_y = BS * (cloudheight ? cloudheight :
g_settings->getS16("cloud_height"));
m_box = core::aabbox3d<f32>(-BS*1000000,m_cloud_y-BS,-BS*1000000,
BS*1000000,m_cloud_y+BS,BS*1000000);

View File

@@ -30,7 +30,8 @@ class Clouds : public scene::ISceneNode
scene::ISceneNode* parent,
scene::ISceneManager* mgr,
s32 id,
u32 seed
u32 seed,
s16 cloudheight=0
);
~Clouds();

View File

@@ -23,7 +23,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "nodedef.h"
#include "gamedef.h"
#include "log.h"
#include "environment.h"
#include "serverobject.h"
#include <vector>
#include <set>
#include "util/timetaker.h"
#include "main.h" // g_profiler
#include "profiler.h"
@@ -186,11 +189,12 @@ bool wouldCollideWithCeiling(
}
collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
f32 pos_max_d, const aabb3f &box_0,
f32 stepheight, f32 dtime,
v3f &pos_f, v3f &speed_f, v3f &accel_f)
v3f &pos_f, v3f &speed_f, v3f &accel_f,ActiveObject* self)
{
Map *map = &env->getMap();
//TimeTaker tt("collisionMoveSimple");
ScopeProfiler sp(g_profiler, "collisionMoveSimple avg", SPT_AVG);
@@ -205,16 +209,22 @@ collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
}
speed_f += accel_f * dtime;
// If there is no speed, there are no collisions
// If there is no speed, there are no collisions
if(speed_f.getLength() == 0)
return result;
// Limit speed for avoiding hangs
speed_f.Y=rangelim(speed_f.Y,-5000,5000);
speed_f.X=rangelim(speed_f.X,-5000,5000);
speed_f.Z=rangelim(speed_f.Z,-5000,5000);
/*
Collect node boxes in movement range
*/
std::vector<aabb3f> cboxes;
std::vector<bool> is_unloaded;
std::vector<bool> is_step_up;
std::vector<bool> is_object;
std::vector<int> bouncy_values;
std::vector<v3s16> node_positions;
{
@@ -256,6 +266,7 @@ collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
is_step_up.push_back(false);
bouncy_values.push_back(n_bouncy_value);
node_positions.push_back(p);
is_object.push_back(false);
}
}
catch(InvalidPositionException &e)
@@ -267,14 +278,76 @@ collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
is_step_up.push_back(false);
bouncy_values.push_back(0);
node_positions.push_back(p);
is_object.push_back(false);
}
}
} // tt2
{
ScopeProfiler sp(g_profiler, "collisionMoveSimple objects avg", SPT_AVG);
//TimeTaker tt3("collisionMoveSimple collect object boxes");
/* add object boxes to cboxes */
std::list<ActiveObject*> objects;
#ifndef SERVER
ClientEnvironment *c_env = dynamic_cast<ClientEnvironment*>(env);
if (c_env != 0)
{
f32 distance = speed_f.getLength();
std::vector<DistanceSortedActiveObject> clientobjects;
c_env->getActiveObjects(pos_f,distance * 1.5,clientobjects);
for (size_t i=0; i < clientobjects.size(); i++)
{
if ((self == 0) || (self != clientobjects[i].obj)) {
objects.push_back((ActiveObject*)clientobjects[i].obj);
}
}
}
else
#endif
{
ServerEnvironment *s_env = dynamic_cast<ServerEnvironment*>(env);
if (s_env != 0)
{
f32 distance = speed_f.getLength();
std::set<u16> s_objects = s_env->getObjectsInsideRadius(pos_f,distance * 1.5);
for (std::set<u16>::iterator iter = s_objects.begin(); iter != s_objects.end(); iter++)
{
ServerActiveObject *current = s_env->getActiveObject(*iter);
if ((self == 0) || (self != current)) {
objects.push_back((ActiveObject*)current);
}
}
}
}
for (std::list<ActiveObject*>::const_iterator iter = objects.begin();iter != objects.end(); ++iter)
{
ActiveObject *object = *iter;
if (object != NULL)
{
aabb3f object_collisionbox;
if (object->getCollisionBox(&object_collisionbox))
{
cboxes.push_back(object_collisionbox);
is_unloaded.push_back(false);
is_step_up.push_back(false);
bouncy_values.push_back(0);
node_positions.push_back(v3s16(0,0,0));
is_object.push_back(true);
}
}
}
} //tt3
assert(cboxes.size() == is_unloaded.size());
assert(cboxes.size() == is_step_up.size());
assert(cboxes.size() == bouncy_values.size());
assert(cboxes.size() == node_positions.size());
assert(cboxes.size() == is_object.size());
/*
Collision detection
@@ -386,7 +459,12 @@ collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
is_collision = false;
CollisionInfo info;
info.type = COLLISION_NODE;
if (is_object[nearest_boxindex]) {
info.type = COLLISION_OBJECT;
}
else {
info.type = COLLISION_NODE;
}
info.node_p = node_positions[nearest_boxindex];
info.bouncy = bouncy;
info.old_speed = speed_f;

View File

@@ -25,10 +25,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class Map;
class IGameDef;
class Environment;
class ActiveObject;
enum CollisionType
{
COLLISION_NODE
COLLISION_NODE,
COLLISION_OBJECT,
};
struct CollisionInfo
@@ -65,10 +68,10 @@ struct collisionMoveResult
};
// Moves using a single iteration; speed should not exceed pos_max_d/dtime
collisionMoveResult collisionMoveSimple(Map *map, IGameDef *gamedef,
collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef,
f32 pos_max_d, const aabb3f &box_0,
f32 stepheight, f32 dtime,
v3f &pos_f, v3f &speed_f, v3f &accel_f);
v3f &pos_f, v3f &speed_f, v3f &accel_f,ActiveObject* self=0);
#if 0
// This doesn't seem to work and isn't used

View File

@@ -76,19 +76,20 @@ SharedBuffer<u8> makeOriginalPacket(
return b;
}
core::list<SharedBuffer<u8> > makeSplitPacket(
std::list<SharedBuffer<u8> > makeSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 seqnum)
{
// Chunk packets, containing the TYPE_SPLIT header
core::list<SharedBuffer<u8> > chunks;
std::list<SharedBuffer<u8> > chunks;
u32 chunk_header_size = 7;
u32 maximum_data_size = chunksize_max - chunk_header_size;
u32 start = 0;
u32 end = 0;
u32 chunk_num = 0;
u16 chunk_count = 0;
do{
end = start + maximum_data_size - 1;
if(end > data.getSize() - 1)
@@ -106,16 +107,15 @@ core::list<SharedBuffer<u8> > makeSplitPacket(
memcpy(&chunk[chunk_header_size], &data[start], payload_size);
chunks.push_back(chunk);
chunk_count++;
start = end + 1;
chunk_num++;
}
while(end != data.getSize() - 1);
u16 chunk_count = chunks.getSize();
core::list<SharedBuffer<u8> >::Iterator i = chunks.begin();
for(; i != chunks.end(); i++)
for(std::list<SharedBuffer<u8> >::iterator i = chunks.begin();
i != chunks.end(); ++i)
{
// Write chunk_count
writeU16(&((*i)[3]), chunk_count);
@@ -124,13 +124,13 @@ core::list<SharedBuffer<u8> > makeSplitPacket(
return chunks;
}
core::list<SharedBuffer<u8> > makeAutoSplitPacket(
std::list<SharedBuffer<u8> > makeAutoSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 &split_seqnum)
{
u32 original_header_size = 1;
core::list<SharedBuffer<u8> > list;
std::list<SharedBuffer<u8> > list;
if(data.getSize() + original_header_size > chunksize_max)
{
list = makeSplitPacket(data, chunksize_max, split_seqnum);
@@ -170,11 +170,13 @@ SharedBuffer<u8> makeReliablePacket(
ReliablePacketBuffer
*/
ReliablePacketBuffer::ReliablePacketBuffer(): m_list_size(0) {}
void ReliablePacketBuffer::print()
{
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
for(; i != m_list.end(); i++)
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end();
++i)
{
u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
dout_con<<s<<" ";
@@ -186,13 +188,12 @@ bool ReliablePacketBuffer::empty()
}
u32 ReliablePacketBuffer::size()
{
return m_list.getSize();
return m_list_size;
}
RPBSearchResult ReliablePacketBuffer::findPacket(u16 seqnum)
{
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
for(; i != m_list.end(); i++)
std::list<BufferedPacket>::iterator i = m_list.begin();
for(; i != m_list.end(); ++i)
{
u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
/*dout_con<<"findPacket(): finding seqnum="<<seqnum
@@ -218,8 +219,8 @@ BufferedPacket ReliablePacketBuffer::popFirst()
if(empty())
throw NotFoundException("Buffer is empty");
BufferedPacket p = *m_list.begin();
core::list<BufferedPacket>::Iterator i = m_list.begin();
m_list.erase(i);
m_list.erase(m_list.begin());
--m_list_size;
return p;
}
BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
@@ -231,6 +232,7 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
}
BufferedPacket p = *r;
m_list.erase(r);
--m_list_size;
return p;
}
void ReliablePacketBuffer::insert(BufferedPacket &p)
@@ -240,6 +242,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p)
assert(type == TYPE_RELIABLE);
u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]);
++m_list_size;
// Find the right place for the packet and insert it there
// If list is empty, just add it
@@ -250,12 +253,12 @@ void ReliablePacketBuffer::insert(BufferedPacket &p)
return;
}
// Otherwise find the right place
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
std::list<BufferedPacket>::iterator i = m_list.begin();
// Find the first packet in the list which has a higher seqnum
for(; i != m_list.end(); i++){
for(; i != m_list.end(); ++i){
u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
if(s == seqnum){
--m_list_size;
throw AlreadyExistsException("Same seqnum in list");
}
if(seqnum_higher(s, seqnum)){
@@ -271,14 +274,14 @@ void ReliablePacketBuffer::insert(BufferedPacket &p)
return;
}
// Insert before i
m_list.insert_before(i, p);
m_list.insert(i, p);
}
void ReliablePacketBuffer::incrementTimeouts(float dtime)
{
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
for(; i != m_list.end(); i++){
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end(); ++i)
{
i->time += dtime;
i->totaltime += dtime;
}
@@ -286,9 +289,9 @@ void ReliablePacketBuffer::incrementTimeouts(float dtime)
void ReliablePacketBuffer::resetTimedOuts(float timeout)
{
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
for(; i != m_list.end(); i++){
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end(); ++i)
{
if(i->time >= timeout)
i->time = 0.0;
}
@@ -296,21 +299,20 @@ void ReliablePacketBuffer::resetTimedOuts(float timeout)
bool ReliablePacketBuffer::anyTotaltimeReached(float timeout)
{
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
for(; i != m_list.end(); i++){
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end(); ++i)
{
if(i->totaltime >= timeout)
return true;
}
return false;
}
core::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout)
std::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout)
{
core::list<BufferedPacket> timed_outs;
core::list<BufferedPacket>::Iterator i;
i = m_list.begin();
for(; i != m_list.end(); i++)
std::list<BufferedPacket> timed_outs;
for(std::list<BufferedPacket>::iterator i = m_list.begin();
i != m_list.end(); ++i)
{
if(i->time >= timeout)
timed_outs.push_back(*i);
@@ -324,11 +326,10 @@ core::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout)
IncomingSplitBuffer::~IncomingSplitBuffer()
{
core::map<u16, IncomingSplitPacket*>::Iterator i;
i = m_buf.getIterator();
for(; i.atEnd() == false; i++)
for(std::map<u16, IncomingSplitPacket*>::iterator i = m_buf.begin();
i != m_buf.end(); ++i)
{
delete i.getNode()->getValue();
delete i->second;
}
}
/*
@@ -346,7 +347,7 @@ SharedBuffer<u8> IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable)
u16 chunk_num = readU16(&p.data[BASE_HEADER_SIZE+5]);
// Add if doesn't exist
if(m_buf.find(seqnum) == NULL)
if(m_buf.find(seqnum) == m_buf.end())
{
IncomingSplitPacket *sp = new IncomingSplitPacket();
sp->chunk_count = chunk_count;
@@ -369,7 +370,7 @@ SharedBuffer<u8> IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable)
// If chunk already exists, ignore it.
// Sometimes two identical packets may arrive when there is network
// lag and the server re-sends stuff.
if(sp->chunks.find(chunk_num) != NULL)
if(sp->chunks.find(chunk_num) != sp->chunks.end())
return SharedBuffer<u8>();
// Cut chunk data out of packet
@@ -386,11 +387,10 @@ SharedBuffer<u8> IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable)
// Calculate total size
u32 totalsize = 0;
core::map<u16, SharedBuffer<u8> >::Iterator i;
i = sp->chunks.getIterator();
for(; i.atEnd() == false; i++)
for(std::map<u16, SharedBuffer<u8> >::iterator i = sp->chunks.begin();
i != sp->chunks.end(); ++i)
{
totalsize += i.getNode()->getValue().getSize();
totalsize += i->second.getSize();
}
SharedBuffer<u8> fulldata(totalsize);
@@ -407,34 +407,32 @@ SharedBuffer<u8> IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable)
}
// Remove sp from buffer
m_buf.remove(seqnum);
m_buf.erase(seqnum);
delete sp;
return fulldata;
}
void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout)
{
core::list<u16> remove_queue;
core::map<u16, IncomingSplitPacket*>::Iterator i;
i = m_buf.getIterator();
for(; i.atEnd() == false; i++)
std::list<u16> remove_queue;
for(std::map<u16, IncomingSplitPacket*>::iterator i = m_buf.begin();
i != m_buf.end(); ++i)
{
IncomingSplitPacket *p = i.getNode()->getValue();
IncomingSplitPacket *p = i->second;
// Reliable ones are not removed by timeout
if(p->reliable == true)
continue;
p->time += dtime;
if(p->time >= timeout)
remove_queue.push_back(i.getNode()->getKey());
remove_queue.push_back(i->first);
}
core::list<u16>::Iterator j;
j = remove_queue.begin();
for(; j != remove_queue.end(); j++)
for(std::list<u16>::iterator j = remove_queue.begin();
j != remove_queue.end(); ++j)
{
dout_con<<"NOTE: Removing timed out unreliable split packet"
<<std::endl;
delete m_buf[*j];
m_buf.remove(*j);
m_buf.erase(*j);
}
}
@@ -556,12 +554,11 @@ Connection::~Connection()
{
stop();
// Delete peers
for(core::map<u16, Peer*>::Iterator
j = m_peers.getIterator();
j.atEnd() == false; j++)
for(std::map<u16, Peer*>::iterator
j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
delete peer;
delete j->second;
}
}
@@ -591,7 +588,7 @@ void * Connection::Thread()
runTimeouts(dtime);
while(m_command_queue.size() != 0){
while(!m_command_queue.empty()){
ConnectionCommand c = m_command_queue.pop_front();
processCommand(c);
}
@@ -648,18 +645,18 @@ void Connection::processCommand(ConnectionCommand &c)
void Connection::send(float dtime)
{
for(core::map<u16, Peer*>::Iterator
j = m_peers.getIterator();
j.atEnd() == false; j++)
for(std::map<u16, Peer*>::iterator
j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
peer->m_sendtime_accu += dtime;
peer->m_num_sent = 0;
peer->m_max_num_sent = peer->m_sendtime_accu *
peer->m_max_packets_per_second;
}
Queue<OutgoingPacket> postponed_packets;
while(m_outgoing_queue.size() != 0){
while(!m_outgoing_queue.empty()){
OutgoingPacket packet = m_outgoing_queue.pop_front();
Peer *peer = getPeerNoEx(packet.peer_id);
if(!peer)
@@ -674,14 +671,14 @@ void Connection::send(float dtime)
postponed_packets.push_back(packet);
}
}
while(postponed_packets.size() != 0){
while(!postponed_packets.empty()){
m_outgoing_queue.push_back(postponed_packets.pop_front());
}
for(core::map<u16, Peer*>::Iterator
j = m_peers.getIterator();
j.atEnd() == false; j++)
for(std::map<u16, Peer*>::iterator
j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
peer->m_sendtime_accu -= (float)peer->m_num_sent /
peer->m_max_packets_per_second;
if(peer->m_sendtime_accu > 10. / peer->m_max_packets_per_second)
@@ -751,11 +748,11 @@ void Connection::receive()
Allow only entries that have has_sent_with_id==false.
*/
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
std::map<u16, Peer*>::iterator j;
j = m_peers.begin();
for(; j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
if(peer->has_sent_with_id)
continue;
if(peer->address == sender)
@@ -766,14 +763,14 @@ void Connection::receive()
If no peer was found with the same address and port,
we shall assume it is a new peer and create an entry.
*/
if(j.atEnd())
if(j == m_peers.end())
{
// Pass on to adding the peer
}
// Else: A peer was found.
else
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
peer_id = peer->id;
PrintInfo(derr_con);
derr_con<<"WARNING: Assuming unknown peer to be "
@@ -797,7 +794,7 @@ void Connection::receive()
for(;;)
{
// Check if exists
if(m_peers.find(peer_id_new) == NULL)
if(m_peers.find(peer_id_new) == m_peers.end())
break;
// Check for overflow
if(peer_id_new == 65535){
@@ -817,7 +814,7 @@ void Connection::receive()
// Create a peer
Peer *peer = new Peer(peer_id_new, sender);
m_peers.insert(peer->id, peer);
m_peers[peer->id] = peer;
// Create peer addition event
ConnectionEvent e;
@@ -837,9 +834,9 @@ void Connection::receive()
// Go on and process whatever it sent
}
core::map<u16, Peer*>::Node *node = m_peers.find(peer_id);
std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
if(node == NULL)
if(node == m_peers.end())
{
// Peer not found
// This means that the peer id of the sender is not PEER_ID_INEXISTENT
@@ -849,7 +846,7 @@ void Connection::receive()
throw InvalidIncomingDataException("Peer not found (possible timeout)");
}
Peer *peer = node->getValue();
Peer *peer = node->second;
// Validate peer address
if(peer->address != sender)
@@ -902,12 +899,11 @@ void Connection::runTimeouts(float dtime)
float congestion_control_min_rate
= g_settings->getFloat("congestion_control_min_rate");
core::list<u16> timeouted_peers;
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
std::list<u16> timeouted_peers;
for(std::map<u16, Peer*>::iterator j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
// Update congestion control values
peer->congestion_control_aim_rtt = congestion_control_aim_rtt;
@@ -934,8 +930,7 @@ void Connection::runTimeouts(float dtime)
float resend_timeout = peer->resend_timeout;
for(u16 i=0; i<CHANNEL_COUNT; i++)
{
core::list<BufferedPacket> timed_outs;
core::list<BufferedPacket>::Iterator j;
std::list<BufferedPacket> timed_outs;
Channel *channel = &peer->channels[i];
@@ -966,8 +961,8 @@ void Connection::runTimeouts(float dtime)
channel->outgoing_reliables.resetTimedOuts(resend_timeout);
j = timed_outs.begin();
for(; j != timed_outs.end(); j++)
for(std::list<BufferedPacket>::iterator j = timed_outs.begin();
j != timed_outs.end(); ++j)
{
u16 peer_id = readPeerId(*(j->data));
u8 channel = readChannel(*(j->data));
@@ -1012,8 +1007,8 @@ void Connection::runTimeouts(float dtime)
}
// Remove timed out peers
core::list<u16>::Iterator i = timeouted_peers.begin();
for(; i != timeouted_peers.end(); i++)
for(std::list<u16>::iterator i = timeouted_peers.begin();
i != timeouted_peers.end(); ++i)
{
PrintInfo(derr_con);
derr_con<<"RunTimeouts(): Removing peer "<<(*i)<<std::endl;
@@ -1041,13 +1036,13 @@ void Connection::connect(Address address)
dout_con<<getDesc()<<" connecting to "<<address.serializeString()
<<":"<<address.getPort()<<std::endl;
core::map<u16, Peer*>::Node *node = m_peers.find(PEER_ID_SERVER);
if(node != NULL){
std::map<u16, Peer*>::iterator node = m_peers.find(PEER_ID_SERVER);
if(node != m_peers.end()){
throw ConnectionException("Already connected to a server");
}
Peer *peer = new Peer(PEER_ID_SERVER, address);
m_peers.insert(peer->id, peer);
m_peers[peer->id] = peer;
// Create event
ConnectionEvent e;
@@ -1072,22 +1067,20 @@ void Connection::disconnect()
writeU8(&data[1], CONTROLTYPE_DISCO);
// Send to all
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
for(std::map<u16, Peer*>::iterator j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
rawSendAsPacket(peer->id, 0, data, false);
}
}
void Connection::sendToAll(u8 channelnum, SharedBuffer<u8> data, bool reliable)
{
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
for(std::map<u16, Peer*>::iterator j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
send(peer->id, channelnum, data, reliable);
}
}
@@ -1108,13 +1101,12 @@ void Connection::send(u16 peer_id, u8 channelnum,
if(reliable)
chunksize_max -= RELIABLE_HEADER_SIZE;
core::list<SharedBuffer<u8> > originals;
std::list<SharedBuffer<u8> > originals;
originals = makeAutoSplitPacket(data, chunksize_max,
channel->next_outgoing_split_seqnum);
core::list<SharedBuffer<u8> >::Iterator i;
i = originals.begin();
for(; i != originals.end(); i++)
for(std::list<SharedBuffer<u8> >::iterator i = originals.begin();
i != originals.end(); ++i)
{
SharedBuffer<u8> original = *i;
@@ -1187,40 +1179,39 @@ void Connection::rawSend(const BufferedPacket &packet)
Peer* Connection::getPeer(u16 peer_id)
{
core::map<u16, Peer*>::Node *node = m_peers.find(peer_id);
std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
if(node == NULL){
if(node == m_peers.end()){
throw PeerNotFoundException("GetPeer: Peer not found (possible timeout)");
}
// Error checking
assert(node->getValue()->id == peer_id);
assert(node->second->id == peer_id);
return node->getValue();
return node->second;
}
Peer* Connection::getPeerNoEx(u16 peer_id)
{
core::map<u16, Peer*>::Node *node = m_peers.find(peer_id);
std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
if(node == NULL){
if(node == m_peers.end()){
return NULL;
}
// Error checking
assert(node->getValue()->id == peer_id);
assert(node->second->id == peer_id);
return node->getValue();
return node->second;
}
core::list<Peer*> Connection::getPeers()
std::list<Peer*> Connection::getPeers()
{
core::list<Peer*> list;
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
std::list<Peer*> list;
for(std::map<u16, Peer*>::iterator j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
list.push_back(peer);
}
return list;
@@ -1228,11 +1219,10 @@ core::list<Peer*> Connection::getPeers()
bool Connection::getFromBuffers(u16 &peer_id, SharedBuffer<u8> &dst)
{
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
for(std::map<u16, Peer*>::iterator j = m_peers.begin();
j != m_peers.end(); ++j)
{
Peer *peer = j.getNode()->getValue();
Peer *peer = j->second;
for(u16 i=0; i<CHANNEL_COUNT; i++)
{
Channel *channel = &peer->channels[i];
@@ -1538,7 +1528,7 @@ SharedBuffer<u8> Connection::processPacket(Channel *channel,
bool Connection::deletePeer(u16 peer_id, bool timeout)
{
if(m_peers.find(peer_id) == NULL)
if(m_peers.find(peer_id) == m_peers.end())
return false;
Peer *peer = m_peers[peer_id];
@@ -1549,7 +1539,7 @@ bool Connection::deletePeer(u16 peer_id, bool timeout)
putEvent(e);
delete m_peers[peer_id];
m_peers.remove(peer_id);
m_peers.erase(peer_id);
return true;
}
@@ -1557,7 +1547,7 @@ bool Connection::deletePeer(u16 peer_id, bool timeout)
ConnectionEvent Connection::getEvent()
{
if(m_event_queue.size() == 0){
if(m_event_queue.empty()){
ConnectionEvent e;
e.type = CONNEVENT_NONE;
return e;
@@ -1602,8 +1592,8 @@ bool Connection::Connected()
if(m_peers.size() != 1)
return false;
core::map<u16, Peer*>::Node *node = m_peers.find(PEER_ID_SERVER);
if(node == NULL)
std::map<u16, Peer*>::iterator node = m_peers.find(PEER_ID_SERVER);
if(node == m_peers.end())
return false;
if(m_peer_id == PEER_ID_INEXISTENT)

View File

@@ -29,6 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/thread.h"
#include <iostream>
#include <fstream>
#include <list>
#include <map>
namespace con
{
@@ -142,14 +144,14 @@ SharedBuffer<u8> makeOriginalPacket(
SharedBuffer<u8> data);
// Split data in chunks and add TYPE_SPLIT headers to them
core::list<SharedBuffer<u8> > makeSplitPacket(
std::list<SharedBuffer<u8> > makeSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 seqnum);
// Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet
// Increments split_seqnum if a split packet is made
core::list<SharedBuffer<u8> > makeAutoSplitPacket(
std::list<SharedBuffer<u8> > makeAutoSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 &split_seqnum);
@@ -167,7 +169,7 @@ struct IncomingSplitPacket
reliable = false;
}
// Key is chunk number, value is data without headers
core::map<u16, SharedBuffer<u8> > chunks;
std::map<u16, SharedBuffer<u8> > chunks;
u32 chunk_count;
float time; // Seconds from adding
bool reliable; // If true, isn't deleted on timeout
@@ -268,12 +270,12 @@ with a buffer in the receiving and transmitting end.
for fast access to the smallest one.
*/
typedef core::list<BufferedPacket>::Iterator RPBSearchResult;
typedef std::list<BufferedPacket>::iterator RPBSearchResult;
class ReliablePacketBuffer
{
public:
ReliablePacketBuffer();
void print();
bool empty();
u32 size();
@@ -286,10 +288,11 @@ class ReliablePacketBuffer
void incrementTimeouts(float dtime);
void resetTimedOuts(float timeout);
bool anyTotaltimeReached(float timeout);
core::list<BufferedPacket> getTimedOuts(float timeout);
std::list<BufferedPacket> getTimedOuts(float timeout);
private:
core::list<BufferedPacket> m_list;
std::list<BufferedPacket> m_list;
u16 m_list_size;
};
/*
@@ -310,7 +313,7 @@ class IncomingSplitBuffer
private:
// Key is seqnum
core::map<u16, IncomingSplitPacket*> m_buf;
std::map<u16, IncomingSplitPacket*> m_buf;
};
class Connection;
@@ -589,7 +592,7 @@ class Connection: public SimpleThread
void rawSend(const BufferedPacket &packet);
Peer* getPeer(u16 peer_id);
Peer* getPeerNoEx(u16 peer_id);
core::list<Peer*> getPeers();
std::list<Peer*> getPeers();
bool getFromBuffers(u16 &peer_id, SharedBuffer<u8> &dst);
// Returns next data from a buffer if possible
// If found, returns true; if not, false.
@@ -619,7 +622,7 @@ class Connection: public SimpleThread
UDPSocket m_socket;
u16 m_peer_id;
core::map<u16, Peer*> m_peers;
std::map<u16, Peer*> m_peers;
JMutex m_peers_mutex;
// Backwards compatibility

View File

@@ -51,11 +51,15 @@ class GrowGrassABM : public ActiveBlockModifier
ServerMap *map = &env->getServerMap();
MapNode n_top = map->getNodeNoEx(p+v3s16(0,1,0));
content_t c_snow = ndef->getId("snow");
if(ndef->get(n_top).light_propagates &&
!ndef->get(n_top).isLiquid() &&
n_top.getLightBlend(env->getDayNightRatio(), ndef) >= 13)
{
n.setContent(ndef->getId("mapgen_dirt_with_grass"));
if(c_snow != CONTENT_IGNORE && n_top.getContent() == c_snow)
n.setContent(ndef->getId("dirt_with_snow"));
else
n.setContent(ndef->getId("mapgen_dirt_with_grass"));
map->addNodeWithEvent(p, n);
}
}
@@ -94,11 +98,18 @@ class RemoveGrassABM : public ActiveBlockModifier
class MakeTreesFromSaplingsABM : public ActiveBlockModifier
{
private:
content_t c_junglesapling;
public:
MakeTreesFromSaplingsABM(ServerEnvironment *env, INodeDefManager *nodemgr) {
c_junglesapling = nodemgr->getId("junglesapling");
}
virtual std::set<std::string> getTriggerContents()
{
std::set<std::string> s;
s.insert("sapling");
s.insert("junglesapling");
return s;
}
virtual float getTriggerInterval()
@@ -111,37 +122,45 @@ class MakeTreesFromSaplingsABM : public ActiveBlockModifier
INodeDefManager *ndef = env->getGameDef()->ndef();
ServerMap *map = &env->getServerMap();
actionstream<<"A sapling grows into a tree at "
<<PP(p)<<std::endl;
MapNode n_below = map->getNodeNoEx(p - v3s16(0, 1, 0));
if (!((ItemGroupList) ndef->get(n_below).groups)["soil"])
return;
bool is_jungle_tree = n.getContent() == c_junglesapling;
actionstream <<"A " << (is_jungle_tree ? "jungle " : "")
<< "sapling grows into a tree at "
<< PP(p) << std::endl;
core::map<v3s16, MapBlock*> modified_blocks;
std::map<v3s16, MapBlock*> modified_blocks;
v3s16 tree_p = p;
ManualMapVoxelManipulator vmanip(map);
v3s16 tree_blockp = getNodeBlockPos(tree_p);
vmanip.initialEmerge(tree_blockp - v3s16(1,1,1), tree_blockp + v3s16(1,1,1));
bool is_apple_tree = myrand()%4 == 0;
treegen::make_tree(vmanip, tree_p, is_apple_tree, ndef, myrand());
if (is_jungle_tree) {
treegen::make_jungletree(vmanip, tree_p, ndef, myrand());
} else {
bool is_apple_tree = myrand() % 4 == 0;
treegen::make_tree(vmanip, tree_p, is_apple_tree, ndef, myrand());
}
vmanip.blitBackAll(&modified_blocks);
// update lighting
core::map<v3s16, MapBlock*> lighting_modified_blocks;
for(core::map<v3s16, MapBlock*>::Iterator
i = modified_blocks.getIterator();
i.atEnd() == false; i++)
{
lighting_modified_blocks.insert(i.getNode()->getKey(), i.getNode()->getValue());
}
std::map<v3s16, MapBlock*> lighting_modified_blocks;
lighting_modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
map->updateLighting(lighting_modified_blocks, modified_blocks);
// Send a MEET_OTHER event
MapEditEvent event;
event.type = MEET_OTHER;
for(core::map<v3s16, MapBlock*>::Iterator
i = modified_blocks.getIterator();
i.atEnd() == false; i++)
// event.modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
for(std::map<v3s16, MapBlock*>::iterator
i = modified_blocks.begin();
i != modified_blocks.end(); ++i)
{
v3s16 p = i.getNode()->getKey();
event.modified_blocks.insert(p, true);
event.modified_blocks.insert(i->first);
}
map->dispatchEvent(&event);
}
@@ -172,17 +191,58 @@ class LiquidFlowABM : public ActiveBlockModifier
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n)
{
ServerMap *map = &env->getServerMap();
if (map->transforming_liquid_size() < 500)
map->transforming_liquid_add(p);
if (map->transforming_liquid_size() > 500)
return;
map->transforming_liquid_add(p);
//if ((*map).m_transforming_liquid.size() < 500) (*map).m_transforming_liquid.push_back(p);
}
};
class LiquidDropABM : public ActiveBlockModifier
{
private:
std::set<std::string> contents;
public:
LiquidDropABM(ServerEnvironment *env, INodeDefManager *nodemgr)
{
std::set<content_t> liquids;
nodemgr->getIds("group:liquid", liquids);
for(std::set<content_t>::const_iterator k = liquids.begin(); k != liquids.end(); k++)
contents.insert(nodemgr->get(*k).liquid_alternative_source);
}
virtual std::set<std::string> getTriggerContents()
{ return contents; }
virtual std::set<std::string> getRequiredNeighbors()
{
std::set<std::string> neighbors;
neighbors.insert("mapgen_air");
return neighbors;
}
virtual float getTriggerInterval()
{ return 20.0; }
virtual u32 getTriggerChance()
{ return 10; }
virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n)
{
ServerMap *map = &env->getServerMap();
if (map->transforming_liquid_size() > 500)
return;
//todo: look around except top
MapNode n_below = map->getNodeNoEx(p - v3s16(0, 1, 0));
if (n_below.getContent() != CONTENT_AIR)
return;
map->transforming_liquid_add(p);
}
};
void add_legacy_abms(ServerEnvironment *env, INodeDefManager *nodedef)
{
env->addActiveBlockModifier(new GrowGrassABM());
env->addActiveBlockModifier(new RemoveGrassABM());
env->addActiveBlockModifier(new MakeTreesFromSaplingsABM());
if (g_settings->getBool("liquid_finite"))
env->addActiveBlockModifier(new MakeTreesFromSaplingsABM(env, nodedef));
if (g_settings->getBool("liquid_finite")) {
env->addActiveBlockModifier(new LiquidFlowABM(env, nodedef));
env->addActiveBlockModifier(new LiquidDropABM(env, nodedef));
}
}

View File

@@ -50,7 +50,7 @@ struct ToolCapabilities;
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
core::map<u16, ClientActiveObject::Factory> ClientActiveObject::m_types;
std::map<u16, ClientActiveObject::Factory> ClientActiveObject::m_types;
/*
SmoothTranslator
@@ -174,6 +174,7 @@ class TestCAO : public ClientActiveObject
void processMessage(const std::string &data);
bool getCollisionBox(aabb3f *toset) { return false; }
private:
scene::IMeshSceneNode *m_node;
v3f m_position;
@@ -329,6 +330,7 @@ class ItemCAO : public ClientActiveObject
std::string infoText()
{return m_infotext;}
bool getCollisionBox(aabb3f *toset) { return false; }
private:
core::aabbox3d<f32> m_selection_box;
scene::IMeshSceneNode *m_node;
@@ -643,6 +645,22 @@ class GenericCAO : public ClientActiveObject
ClientActiveObject::registerType(getType(), create);
}
bool getCollisionBox(aabb3f *toset) {
if (m_prop.physical) {
aabb3f retval;
//update collision box
toset->MinEdge = m_prop.collisionbox.MinEdge * BS;
toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS;
toset->MinEdge += m_position;
toset->MaxEdge += m_position;
return true;
}
return false;
}
void initialize(const std::string &data)
{
infostream<<"GenericCAO: Got init data"<<std::endl;
@@ -690,11 +708,15 @@ class GenericCAO : public ClientActiveObject
if(player && player->isLocal()){
m_is_local_player = true;
}
m_env->addPlayerName(m_name.c_str());
}
}
~GenericCAO()
{
if(m_is_player){
m_env->removePlayerName(m_name.c_str());
}
}
static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env)
@@ -842,7 +864,7 @@ class GenericCAO : public ClientActiveObject
m_spritenode = smgr->addBillboardSceneNode(
NULL, v2f(1, 1), v3f(0,0,0), -1);
m_spritenode->setMaterialTexture(0,
tsrc->getTextureRaw("unknown_block.png"));
tsrc->getTextureRaw("unknown_node.png"));
m_spritenode->setMaterialFlag(video::EMF_LIGHTING, false);
m_spritenode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
m_spritenode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
@@ -1111,6 +1133,7 @@ class GenericCAO : public ClientActiveObject
{
LocalPlayer *player = m_env->getLocalPlayer();
player->overridePosition = getParent()->getPosition();
m_env->getLocalPlayer()->parent = getParent();
}
}
else
@@ -1127,10 +1150,9 @@ class GenericCAO : public ClientActiveObject
v3f p_pos = m_position;
v3f p_velocity = m_velocity;
v3f p_acceleration = m_acceleration;
IGameDef *gamedef = env->getGameDef();
moveresult = collisionMoveSimple(&env->getMap(), gamedef,
moveresult = collisionMoveSimple(env,env->getGameDef(),
pos_max_d, box, stepheight, dtime,
p_pos, p_velocity, p_acceleration);
p_pos, p_velocity, p_acceleration,this);
// Apply results
m_position = p_pos;
m_velocity = p_velocity;
@@ -1246,7 +1268,7 @@ class GenericCAO : public ClientActiveObject
{
if(m_prop.visual == "sprite")
{
std::string texturestring = "unknown_block.png";
std::string texturestring = "unknown_node.png";
if(m_prop.textures.size() >= 1)
texturestring = m_prop.textures[0];
texturestring += mod;
@@ -1312,7 +1334,7 @@ class GenericCAO : public ClientActiveObject
{
for (u32 i = 0; i < 6; ++i)
{
std::string texturestring = "unknown_block.png";
std::string texturestring = "unknown_node.png";
if(m_prop.textures.size() > i)
texturestring = m_prop.textures[i];
texturestring += mod;
@@ -1661,6 +1683,19 @@ class GenericCAO : public ClientActiveObject
updateTexturePos();
}
else if(cmd == GENERIC_CMD_SET_PHYSICS_OVERRIDE)
{
float override_speed = readF1000(is);
float override_jump = readF1000(is);
float override_gravity = readF1000(is);
if(m_is_local_player)
{
LocalPlayer *player = m_env->getLocalPlayer();
player->physics_override_speed = override_speed;
player->physics_override_jump = override_jump;
player->physics_override_gravity = override_gravity;
}
}
else if(cmd == GENERIC_CMD_SET_ANIMATION)
{
m_animation_range = readV2F1000(is);

View File

@@ -42,14 +42,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// (compatible with ContentFeatures). If you specified 0,0,1,1
// for each face, that would be the same as passing NULL.
void makeCuboid(MeshCollector *collector, const aabb3f &box,
const TileSpec *tiles, int tilecount,
TileSpec *tiles, int tilecount,
video::SColor &c, const f32* txc)
{
assert(tilecount >= 1 && tilecount <= 6);
v3f min = box.MinEdge;
v3f max = box.MaxEdge;
if(txc == NULL)
{
static const f32 txc_default[24] = {
@@ -97,15 +99,70 @@ void makeCuboid(MeshCollector *collector, const aabb3f &box,
video::S3DVertex(min.X,min.Y,min.Z, 0,0,-1, c, txc[20],txc[23]),
};
for(s32 j=0; j<24; j++)
v2f t;
for(int i = 0; i < tilecount; i++)
{
switch (tiles[i].rotation)
{
case 0:
break;
case 1: //R90
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(90,irr::core::vector2df(0, 0));
break;
case 2: //R180
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(180,irr::core::vector2df(0, 0));
break;
case 3: //R270
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(270,irr::core::vector2df(0, 0));
break;
case 4: //FXR90
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(90,irr::core::vector2df(0, 0));
tiles[i].texture.pos.Y += tiles[i].texture.size.Y;
tiles[i].texture.size.Y *= -1;
break;
case 5: //FXR270
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(270,irr::core::vector2df(0, 0));
t=vertices[i*4].TCoords;
tiles[i].texture.pos.Y += tiles[i].texture.size.Y;
tiles[i].texture.size.Y *= -1;
break;
case 6: //FYR90
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(90,irr::core::vector2df(0, 0));
tiles[i].texture.pos.X += tiles[i].texture.size.X;
tiles[i].texture.size.X *= -1;
break;
case 7: //FYR270
for (int x = 0; x < 4; x++)
vertices[i*4+x].TCoords.rotateBy(270,irr::core::vector2df(0, 0));
tiles[i].texture.pos.X += tiles[i].texture.size.X;
tiles[i].texture.size.X *= -1;
break;
case 8: //FX
tiles[i].texture.pos.Y += tiles[i].texture.size.Y;
tiles[i].texture.size.Y *= -1;
break;
case 9: //FY
tiles[i].texture.pos.X += tiles[i].texture.size.X;
tiles[i].texture.size.X *= -1;
break;
default:
break;
}
}
for(s32 j=0; j<24; j++)
{
int tileindex = MYMIN(j/4, tilecount-1);
vertices[j].TCoords *= tiles[tileindex].texture.size;
vertices[j].TCoords += tiles[tileindex].texture.pos;
}
u16 indices[] = {0,1,2,2,3,0};
// Add to mesh collector
for(s32 j=0; j<24; j+=4)
{
@@ -160,18 +217,145 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
Add water sources to mesh if using new style
*/
TileSpec tile_liquid = f.special_tiles[0];
TileSpec tile_liquid_bfculled = getNodeTile(n, p, v3s16(0,0,0), data);
AtlasPointer &pa_liquid = tile_liquid.texture;
bool top_is_air = false;
MapNode n = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x,y+1,z));
if(n.getContent() == CONTENT_AIR)
top_is_air = true;
if(top_is_air == false)
continue;
bool top_is_same_liquid = false;
MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x,y+1,z));
content_t c_flowing = nodedef->getId(f.liquid_alternative_flowing);
content_t c_source = nodedef->getId(f.liquid_alternative_source);
if(ntop.getContent() == c_flowing || ntop.getContent() == c_source)
top_is_same_liquid = true;
u16 l = getInteriorLight(n, 0, data);
video::SColor c = MapBlock_LightColor(f.alpha, l, decode_light(f.light_source));
/*
Generate sides
*/
v3s16 side_dirs[4] = {
v3s16(1,0,0),
v3s16(-1,0,0),
v3s16(0,0,1),
v3s16(0,0,-1),
};
for(u32 i=0; i<4; i++)
{
v3s16 dir = side_dirs[i];
MapNode neighbor = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dir);
content_t neighbor_content = neighbor.getContent();
const ContentFeatures &n_feat = nodedef->get(neighbor_content);
MapNode n_top = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dir+ v3s16(0,1,0));
content_t n_top_c = n_top.getContent();
if(neighbor_content == CONTENT_IGNORE)
continue;
/*
If our topside is liquid and neighbor's topside
is liquid, don't draw side face
*/
if(top_is_same_liquid && (n_top_c == c_flowing ||
n_top_c == c_source || n_top_c == CONTENT_IGNORE))
continue;
// Don't draw face if neighbor is blocking the view
if(n_feat.solidness == 2)
continue;
bool neighbor_is_same_liquid = (neighbor_content == c_source
|| neighbor_content == c_flowing);
// Don't draw any faces if neighbor same is liquid and top is
// same liquid
if(neighbor_is_same_liquid && !top_is_same_liquid)
continue;
// Use backface culled material if neighbor doesn't have a
// solidness of 0
const TileSpec *current_tile = &tile_liquid;
if(n_feat.solidness != 0 || n_feat.visual_solidness != 0)
current_tile = &tile_liquid_bfculled;
video::S3DVertex vertices[4] =
{
video::S3DVertex(-BS/2,0,BS/2,0,0,0, c,
pa_liquid.x0(), pa_liquid.y1()),
video::S3DVertex(BS/2,0,BS/2,0,0,0, c,
pa_liquid.x1(), pa_liquid.y1()),
video::S3DVertex(BS/2,0,BS/2, 0,0,0, c,
pa_liquid.x1(), pa_liquid.y0()),
video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c,
pa_liquid.x0(), pa_liquid.y0()),
};
/*
If our topside is liquid, set upper border of face
at upper border of node
*/
if(top_is_same_liquid)
{
vertices[2].Pos.Y = 0.5*BS;
vertices[3].Pos.Y = 0.5*BS;
}
/*
Otherwise upper position of face is liquid level
*/
else
{
vertices[2].Pos.Y = (node_liquid_level-0.5)*BS;
vertices[3].Pos.Y = (node_liquid_level-0.5)*BS;
}
/*
If neighbor is liquid, lower border of face is liquid level
*/
if(neighbor_is_same_liquid)
{
vertices[0].Pos.Y = (node_liquid_level-0.5)*BS;
vertices[1].Pos.Y = (node_liquid_level-0.5)*BS;
}
/*
If neighbor is not liquid, lower border of face is
lower border of node
*/
else
{
vertices[0].Pos.Y = -0.5*BS;
vertices[1].Pos.Y = -0.5*BS;
}
for(s32 j=0; j<4; j++)
{
if(dir == v3s16(0,0,1))
vertices[j].Pos.rotateXZBy(0);
if(dir == v3s16(0,0,-1))
vertices[j].Pos.rotateXZBy(180);
if(dir == v3s16(-1,0,0))
vertices[j].Pos.rotateXZBy(90);
if(dir == v3s16(1,0,-0))
vertices[j].Pos.rotateXZBy(-90);
// Do this to not cause glitches when two liquids are
// side-by-side
/*if(neighbor_is_same_liquid == false){
vertices[j].Pos.X *= 0.98;
vertices[j].Pos.Z *= 0.98;
}*/
vertices[j].Pos += intToFloat(p, BS);
}
u16 indices[] = {0,1,2,2,3,0};
// Add to mesh collector
collector.append(*current_tile, vertices, 4, indices, 6);
}
/*
Generate top
*/
if(top_is_same_liquid)
continue;
video::S3DVertex vertices[4] =
{
@@ -185,7 +369,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
pa_liquid.x0(), pa_liquid.y0()),
};
v3f offset(p.X, p.Y + (-0.5+node_liquid_level)*BS, p.Z);
v3f offset(p.X*BS, p.Y*BS + (-0.5+node_liquid_level)*BS, p.Z*BS);
for(s32 i=0; i<4; i++)
{
vertices[i].Pos += offset;
@@ -230,9 +414,9 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
// Neighbor liquid levels (key = relative position)
// Includes current node
core::map<v3s16, f32> neighbor_levels;
core::map<v3s16, content_t> neighbor_contents;
core::map<v3s16, u8> neighbor_flags;
std::map<v3s16, f32> neighbor_levels;
std::map<v3s16, content_t> neighbor_contents;
std::map<v3s16, u8> neighbor_flags;
const u8 neighborflag_top_is_same_liquid = 0x01;
v3s16 neighbor_dirs[9] = {
v3s16(0,0,0),
@@ -273,9 +457,9 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
flags |= neighborflag_top_is_same_liquid;
}
neighbor_levels.insert(neighbor_dirs[i], level);
neighbor_contents.insert(neighbor_dirs[i], content);
neighbor_flags.insert(neighbor_dirs[i], flags);
neighbor_levels[neighbor_dirs[i]] = level;
neighbor_contents[neighbor_dirs[i]] = content;
neighbor_flags[neighbor_dirs[i]] = flags;
}
// Corner heights (average between four liquids)
@@ -324,7 +508,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
}
}
if(air_count >= 2)
cornerlevel = -0.5*BS+0.1;
cornerlevel = -0.5*BS+0.2;
else if(valid_count > 0)
cornerlevel /= valid_count;
corner_levels[i] = cornerlevel;
@@ -556,8 +740,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
continue;
// The face at Z+
video::S3DVertex vertices[4] =
{
video::S3DVertex vertices[4] = {
video::S3DVertex(-BS/2,-BS/2,BS/2, 0,0,0, c,
ap.x0(), ap.y1()),
video::S3DVertex(BS/2,-BS/2,BS/2, 0,0,0, c,
@@ -597,6 +780,132 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
collector.append(tile, vertices, 4, indices, 6);
}
break;}
case NDT_GLASSLIKE_FRAMED:
{
static const v3s16 dirs[6] = {
v3s16( 0, 1, 0),
v3s16( 0,-1, 0),
v3s16( 1, 0, 0),
v3s16(-1, 0, 0),
v3s16( 0, 0, 1),
v3s16( 0, 0,-1)
};
TileSpec tiles[2];
tiles[0] = getNodeTile(n, p, dirs[0], data);
tiles[1] = getNodeTile(n, p, dirs[1], data);
u16 l = getInteriorLight(n, 1, data);
video::SColor c = MapBlock_LightColor(255, l, decode_light(f.light_source));
v3f pos = intToFloat(p, BS);
static const float a=BS/2;
static const float b=.876*(BS/2);
static const aabb3f frame_edges[12] = {
aabb3f( b, b,-a, a, a, a), // y+
aabb3f(-a, b,-a,-b, a, a), // y+
aabb3f( b,-a,-a, a,-b, a), // y-
aabb3f(-a,-a,-a,-b,-b, a), // y-
aabb3f( b,-a, b, a, a, a), // x+
aabb3f( b,-a,-a, a, a,-b), // x+
aabb3f(-a,-a, b,-b, a, a), // x-
aabb3f(-a,-a,-a,-b, a,-b), // x-
aabb3f(-a, b, b, a, a, a), // z+
aabb3f(-a,-a, b, a,-b, a), // z+
aabb3f(-a,-a,-a, a,-b,-b), // z-
aabb3f(-a, b,-a, a, a,-b) // z-
};
aabb3f glass_faces[6] = {
aabb3f(-a, a,-a, a, a, a), // y+
aabb3f(-a,-a,-a, a,-a, a), // y-
aabb3f( a,-a,-a, a, a, a), // x+
aabb3f(-a,-a,-a,-a, a, a), // x-
aabb3f(-a,-a, a, a, a, a), // z+
aabb3f(-a,-a,-a, a, a,-a) // z-
};
int visible_faces[6] = {0,0,0,0,0,0};
int nb[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
u8 i;
content_t current = n.getContent();
content_t content;
MapNode n2;
v3s16 n2p;
for(i=0; i<18; i++)
{
n2p = blockpos_nodes + p + g_26dirs[i];
n2 = data->m_vmanip.getNodeNoEx(n2p);
content_t n2c = n2.getContent();
//TODO: remove CONTENT_IGNORE check when getNodeNoEx is fixed
if (n2c == current || n2c == CONTENT_IGNORE)
nb[i]=1;
}
for(i=0; i<6; i++)
{
n2p = blockpos_nodes + p + dirs[i];
n2 = data->m_vmanip.getNodeNoEx(n2p);
content = n2.getContent();
const ContentFeatures &f2 = nodedef->get(content);
if (content == CONTENT_AIR || f2.isLiquid())
visible_faces[i]=1;
}
static const u8 nb_triplet[12*3] = {
1,2, 7, 1,5, 6, 4,2,15, 4,5,14,
2,0,11, 2,3,13, 5,0,10, 5,3,12,
0,1, 8, 0,4,16, 3,4,17, 3,1, 9
};
f32 tx1,ty1,tz1,tx2,ty2,tz2;
aabb3f box;
for(i=0; i<12; i++)
{
int edge_invisible;
if (nb[nb_triplet[i*3+2]]==1)
edge_invisible=nb[nb_triplet[i*3]] & nb[nb_triplet[i*3+1]];
else
edge_invisible=nb[nb_triplet[i*3]] ^ nb[nb_triplet[i*3+1]];
if (edge_invisible)
continue;
box=frame_edges[i];
box.MinEdge += pos;
box.MaxEdge += pos;
tx1 = (box.MinEdge.X/BS)+0.5;
ty1 = (box.MinEdge.Y/BS)+0.5;
tz1 = (box.MinEdge.Z/BS)+0.5;
tx2 = (box.MaxEdge.X/BS)+0.5;
ty2 = (box.MaxEdge.Y/BS)+0.5;
tz2 = (box.MaxEdge.Z/BS)+0.5;
f32 txc1[24] = {
tx1, 1-tz2, tx2, 1-tz1,
tx1, tz1, tx2, tz2,
tz1, 1-ty2, tz2, 1-ty1,
1-tz2, 1-ty2, 1-tz1, 1-ty1,
1-tx2, 1-ty2, 1-tx1, 1-ty1,
tx1, 1-ty2, tx2, 1-ty1,
};
makeCuboid(&collector, box, &tiles[0], 1, c, txc1);
}
for(i=0; i<6; i++)
{
if (visible_faces[i]==0)
continue;
box=glass_faces[i];
box.MinEdge += pos;
box.MaxEdge += pos;
tx1 = (box.MinEdge.X/BS)+0.5;
ty1 = (box.MinEdge.Y/BS)+0.5;
tz1 = (box.MinEdge.Z/BS)+0.5;
tx2 = (box.MaxEdge.X/BS)+0.5;
ty2 = (box.MaxEdge.Y/BS)+0.5;
tz2 = (box.MaxEdge.Z/BS)+0.5;
f32 txc2[24] = {
tx1, 1-tz2, tx2, 1-tz1,
tx1, tz1, tx2, tz2,
tz1, 1-ty2, tz2, 1-ty1,
1-tz2, 1-ty2, 1-tz1, 1-ty1,
1-tx2, 1-ty2, 1-tx1, 1-ty1,
tx1, 1-ty2, tx2, 1-ty1,
};
makeCuboid(&collector, box, &tiles[1], 1, c, txc2);
}
break;}
case NDT_ALLFACES:
{
TileSpec tile_leaves = getNodeTile(n, p,
@@ -879,34 +1188,81 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
MapNode n_minus_z_plus_y = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x, y+1, z-1));
MapNode n_plus_z_minus_y = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x, y-1, z+1));
MapNode n_minus_z_minus_y = data->m_vmanip.getNodeNoEx(blockpos_nodes + v3s16(x, y-1, z-1));
content_t thiscontent = n.getContent();
if(n_minus_x.getContent() == thiscontent)
std::string groupname = "connect_to_raillike"; // name of the group that enables connecting to raillike nodes of different kind
bool self_connect_to_raillike = ((ItemGroupList) nodedef->get(n).groups)[groupname] != 0;
if ((nodedef->get(n_minus_x).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_x).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_minus_x.getContent() == thiscontent)
is_rail_x[0] = true;
if (n_minus_x_minus_y.getContent() == thiscontent)
if ((nodedef->get(n_minus_x_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_x_minus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_minus_x_minus_y.getContent() == thiscontent)
is_rail_x_minus_y[0] = true;
if(n_minus_x_plus_y.getContent() == thiscontent)
if ((nodedef->get(n_minus_x_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_x_plus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_minus_x_plus_y.getContent() == thiscontent)
is_rail_x_plus_y[0] = true;
if(n_plus_x.getContent() == thiscontent)
if ((nodedef->get(n_plus_x).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_x).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_plus_x.getContent() == thiscontent)
is_rail_x[1] = true;
if (n_plus_x_minus_y.getContent() == thiscontent)
if ((nodedef->get(n_plus_x_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_x_minus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_plus_x_minus_y.getContent() == thiscontent)
is_rail_x_minus_y[1] = true;
if(n_plus_x_plus_y.getContent() == thiscontent)
if ((nodedef->get(n_plus_x_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_x_plus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_plus_x_plus_y.getContent() == thiscontent)
is_rail_x_plus_y[1] = true;
if(n_minus_z.getContent() == thiscontent)
if ((nodedef->get(n_minus_z).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_z).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_minus_z.getContent() == thiscontent)
is_rail_z[0] = true;
if (n_minus_z_minus_y.getContent() == thiscontent)
if ((nodedef->get(n_minus_z_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_z_minus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_minus_z_minus_y.getContent() == thiscontent)
is_rail_z_minus_y[0] = true;
if(n_minus_z_plus_y.getContent() == thiscontent)
if ((nodedef->get(n_minus_z_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_z_plus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_minus_z_plus_y.getContent() == thiscontent)
is_rail_z_plus_y[0] = true;
if(n_plus_z.getContent() == thiscontent)
if ((nodedef->get(n_plus_z).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_z).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_plus_z.getContent() == thiscontent)
is_rail_z[1] = true;
if (n_plus_z_minus_y.getContent() == thiscontent)
if ((nodedef->get(n_plus_z_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_z_minus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_plus_z_minus_y.getContent() == thiscontent)
is_rail_z_minus_y[1] = true;
if(n_plus_z_plus_y.getContent() == thiscontent)
if ((nodedef->get(n_plus_z_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_z_plus_y).groups)[groupname] != 0
&& self_connect_to_raillike)
|| n_plus_z_plus_y.getContent() == thiscontent)
is_rail_z_plus_y[1] = true;
bool is_rail_x_all[] = {false, false};
@@ -946,7 +1302,8 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
if(is_rail_x_all[0] && is_rail_x_all[1])
angle = 90;
if(is_rail_z_all[0] && is_rail_z_all[1]){
if (n_minus_z_plus_y.getContent() == thiscontent) angle = 180;
if (is_rail_z_plus_y[0])
angle = 180;
}
else if(is_rail_x_all[0] && is_rail_z_all[0])
angle = 270;
@@ -1027,14 +1384,8 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
v3s16(0, 0, 1),
v3s16(0, 0, -1)
};
TileSpec tiles[6];
for(int i = 0; i < 6; i++)
{
// Handles facedir rotation for textures
tiles[i] = getNodeTile(n, p, tile_dirs[i], data);
}
u16 l = getInteriorLight(n, 0, data);
video::SColor c = MapBlock_LightColor(255, l, decode_light(f.light_source));
@@ -1045,17 +1396,43 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
i = boxes.begin();
i != boxes.end(); i++)
{
for(int j = 0; j < 6; j++)
{
// Handles facedir rotation for textures
tiles[j] = getNodeTile(n, p, tile_dirs[j], data);
}
aabb3f box = *i;
box.MinEdge += pos;
box.MaxEdge += pos;
f32 temp;
if (box.MinEdge.X > box.MaxEdge.X)
{
temp=box.MinEdge.X;
box.MinEdge.X=box.MaxEdge.X;
box.MaxEdge.X=temp;
}
if (box.MinEdge.Y > box.MaxEdge.Y)
{
temp=box.MinEdge.Y;
box.MinEdge.Y=box.MaxEdge.Y;
box.MaxEdge.Y=temp;
}
if (box.MinEdge.Z > box.MaxEdge.Z)
{
temp=box.MinEdge.Z;
box.MinEdge.Z=box.MaxEdge.Z;
box.MaxEdge.Z=temp;
}
//
// Compute texture coords
f32 tx1 = (i->MinEdge.X/BS)+0.5;
f32 ty1 = (i->MinEdge.Y/BS)+0.5;
f32 tz1 = (i->MinEdge.Z/BS)+0.5;
f32 tx2 = (i->MaxEdge.X/BS)+0.5;
f32 ty2 = (i->MaxEdge.Y/BS)+0.5;
f32 tz2 = (i->MaxEdge.Z/BS)+0.5;
f32 tx1 = (box.MinEdge.X/BS)+0.5;
f32 ty1 = (box.MinEdge.Y/BS)+0.5;
f32 tz1 = (box.MinEdge.Z/BS)+0.5;
f32 tx2 = (box.MaxEdge.X/BS)+0.5;
f32 ty2 = (box.MaxEdge.Y/BS)+0.5;
f32 tz2 = (box.MaxEdge.Z/BS)+0.5;
f32 txc[24] = {
// up
tx1, 1-tz2, tx2, 1-tz1,
@@ -1070,7 +1447,6 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
// front
tx1, 1-ty2, tx2, 1-ty1,
};
makeCuboid(&collector, box, tiles, 6, c, txc);
}
break;}

View File

@@ -27,11 +27,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "tool.h" // For ToolCapabilities
#include "gamedef.h"
#include "player.h"
#include "scriptapi.h"
#include "cpp_api/scriptapi.h"
#include "genericobject.h"
#include "util/serialize.h"
core::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
/*
DummyLoadSAO
@@ -64,6 +64,10 @@ class DummyLoadSAO : public ServerActiveObject
infostream<<"DummyLoadSAO step"<<std::endl;
}
bool getCollisionBox(aabb3f *toset) {
return false;
}
private:
};
@@ -132,6 +136,10 @@ class TestSAO : public ServerActiveObject
}
}
bool getCollisionBox(aabb3f *toset) {
return false;
}
private:
float m_timer1;
float m_age;
@@ -208,8 +216,7 @@ class ItemSAO : public ServerActiveObject
v3f pos_f_old = pos_f;
v3f accel_f = v3f(0,0,0);
f32 stepheight = 0;
IGameDef *gamedef = m_env->getGameDef();
moveresult = collisionMoveSimple(&m_env->getMap(), gamedef,
moveresult = collisionMoveSimple(m_env,m_env->getGameDef(),
pos_max_d, box, stepheight, dtime,
pos_f, m_speed_f, accel_f);
@@ -314,6 +321,10 @@ class ItemSAO : public ServerActiveObject
return 0;
}
bool getCollisionBox(aabb3f *toset) {
return false;
}
private:
std::string m_itemstring;
@@ -370,15 +381,13 @@ LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos,
}
// Initialize something to armor groups
m_armor_groups["fleshy"] = 3;
m_armor_groups["snappy"] = 2;
m_armor_groups["fleshy"] = 100;
}
LuaEntitySAO::~LuaEntitySAO()
{
if(m_registered){
lua_State *L = m_env->getLua();
scriptapi_luaentity_rm(L, m_id);
ENV_TO_SA(m_env)->luaentity_Remove(m_id);
}
}
@@ -387,16 +396,15 @@ void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
ServerActiveObject::addedToEnvironment(dtime_s);
// Create entity from name
lua_State *L = m_env->getLua();
m_registered = scriptapi_luaentity_add(L, m_id, m_init_name.c_str());
m_registered = ENV_TO_SA(m_env)->luaentity_Add(m_id, m_init_name.c_str());
if(m_registered){
// Get properties
scriptapi_luaentity_get_properties(L, m_id, &m_prop);
ENV_TO_SA(m_env)->luaentity_GetProperties(m_id, &m_prop);
// Initialize HP from properties
m_hp = m_prop.hp_max;
// Activate entity, supplying serialized state
scriptapi_luaentity_activate(L, m_id, m_init_state.c_str(), dtime_s);
ENV_TO_SA(m_env)->luaentity_Activate(m_id, m_init_state.c_str(), dtime_s);
}
}
@@ -490,10 +498,9 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
v3f p_pos = m_base_position;
v3f p_velocity = m_velocity;
v3f p_acceleration = m_acceleration;
IGameDef *gamedef = m_env->getGameDef();
moveresult = collisionMoveSimple(&m_env->getMap(), gamedef,
moveresult = collisionMoveSimple(m_env,m_env->getGameDef(),
pos_max_d, box, stepheight, dtime,
p_pos, p_velocity, p_acceleration);
p_pos, p_velocity, p_acceleration,this);
// Apply results
m_base_position = p_pos;
m_velocity = p_velocity;
@@ -506,8 +513,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
}
if(m_registered){
lua_State *L = m_env->getLua();
scriptapi_luaentity_step(L, m_id, dtime);
ENV_TO_SA(m_env)->luaentity_Step(m_id, dtime);
}
if(send_recommended == false)
@@ -617,8 +623,7 @@ std::string LuaEntitySAO::getStaticData()
os<<serializeString(m_init_name);
// state
if(m_registered){
lua_State *L = m_env->getLua();
std::string state = scriptapi_luaentity_get_staticdata(L, m_id);
std::string state = ENV_TO_SA(m_env)->luaentity_GetStaticdata(m_id);
os<<serializeLongString(state);
} else {
os<<serializeLongString(m_init_state);
@@ -664,8 +669,14 @@ int LuaEntitySAO::punch(v3f dir,
{
setHP(getHP() - result.damage);
std::string punchername = "nil";
if ( puncher != 0 )
punchername = puncher->getDescription();
actionstream<<getDescription()<<" punched by "
<<puncher->getDescription()<<", damage "<<result.damage
<<punchername<<", damage "<<result.damage
<<" hp, health now "<<getHP()<<" hp"<<std::endl;
{
@@ -679,8 +690,7 @@ int LuaEntitySAO::punch(v3f dir,
m_removed = true;
}
lua_State *L = m_env->getLua();
scriptapi_luaentity_punch(L, m_id, puncher,
ENV_TO_SA(m_env)->luaentity_Punch(m_id, puncher,
time_from_last_punch, toolcap, dir);
return result.wear;
@@ -693,8 +703,7 @@ void LuaEntitySAO::rightClick(ServerActiveObject *clicker)
// It's best that attachments cannot be clicked
if(isAttached())
return;
lua_State *L = m_env->getLua();
scriptapi_luaentity_rightclick(L, m_id, clicker);
ENV_TO_SA(m_env)->luaentity_Rightclick(m_id, clicker);
}
void LuaEntitySAO::setPos(v3f pos)
@@ -880,6 +889,22 @@ void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end)
m_messages_out.push_back(aom);
}
bool LuaEntitySAO::getCollisionBox(aabb3f *toset) {
if (m_prop.physical)
{
//update collision box
toset->MinEdge = m_prop.collisionbox.MinEdge * BS;
toset->MaxEdge = m_prop.collisionbox.MaxEdge * BS;
toset->MinEdge += m_base_position;
toset->MaxEdge += m_base_position;
return true;
}
return false;
}
/*
PlayerSAO
*/
@@ -910,14 +935,17 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_,
m_moved(false),
m_inventory_not_sent(false),
m_hp_not_sent(false),
m_wielded_item_not_sent(false)
m_wielded_item_not_sent(false),
m_physics_override_speed(1),
m_physics_override_jump(1),
m_physics_override_gravity(1),
m_physics_override_sent(false)
{
assert(m_player);
assert(m_peer_id != 0);
setBasePosition(m_player->getPosition());
m_inventory = &m_player->inventory;
m_armor_groups["choppy"] = 2;
m_armor_groups["fleshy"] = 3;
m_armor_groups["fleshy"] = 100;
m_prop.hp_max = PLAYER_MAX_HP;
m_prop.physical = false;
@@ -995,7 +1023,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
writeF1000(os, m_player->getYaw());
writeS16(os, getHP());
writeU8(os, 4 + m_bone_position.size()); // number of messages stuffed in here
writeU8(os, 5 + m_bone_position.size()); // number of messages stuffed in here
os<<serializeLongString(getPropertyPacket()); // message 1
os<<serializeLongString(gob_cmd_update_armor_groups(m_armor_groups)); // 2
os<<serializeLongString(gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend)); // 3
@@ -1003,6 +1031,7 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version)
os<<serializeLongString(gob_cmd_update_bone_position((*ii).first, (*ii).second.X, (*ii).second.Y)); // m_bone_position.size
}
os<<serializeLongString(gob_cmd_update_attachment(m_attachment_parent_id, m_attachment_bone, m_attachment_position, m_attachment_rotation)); // 4
os<<serializeLongString(gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity)); // 5
}
else
{
@@ -1172,6 +1201,14 @@ void PlayerSAO::step(float dtime, bool send_recommended)
m_messages_out.push_back(aom);
}
if(m_physics_override_sent == false){
m_physics_override_sent = true;
std::string str = gob_cmd_update_physics_override(m_physics_override_speed, m_physics_override_jump, m_physics_override_gravity);
// create message and add to list
ActiveObjectMessage aom(getId(), true, str);
m_messages_out.push_back(aom);
}
if(m_animation_sent == false){
m_animation_sent = true;
std::string str = gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend);
@@ -1230,6 +1267,20 @@ void PlayerSAO::moveTo(v3f pos, bool continuous)
m_moved = true;
}
void PlayerSAO::setYaw(float yaw)
{
m_player->setYaw(yaw);
// Force change on client
m_moved = true;
}
void PlayerSAO::setPitch(float pitch)
{
m_player->setPitch(pitch);
// Force change on client
m_moved = true;
}
int PlayerSAO::punch(v3f dir,
const ToolCapabilities *toolcap,
ServerActiveObject *puncher,
@@ -1256,8 +1307,13 @@ int PlayerSAO::punch(v3f dir,
HitParams hitparams = getHitParams(m_armor_groups, toolcap,
time_from_last_punch);
std::string punchername = "nil";
if ( puncher != 0 )
punchername = puncher->getDescription();
actionstream<<"Player "<<m_player->getName()<<" punched by "
<<puncher->getDescription()<<", damage "<<hitparams.hp
<<punchername<<", damage "<<hitparams.hp
<<" HP"<<std::endl;
setHP(getHP() - hitparams.hp);
@@ -1420,3 +1476,12 @@ std::string PlayerSAO::getPropertyPacket()
return gob_cmd_set_properties(m_prop);
}
bool PlayerSAO::getCollisionBox(aabb3f *toset) {
//update collision box
*toset = m_player->getCollisionbox();
toset->MinEdge += m_base_position;
toset->MaxEdge += m_base_position;
return true;
}

View File

@@ -78,6 +78,7 @@ class LuaEntitySAO : public ServerActiveObject
void setSprite(v2s16 p, int num_frames, float framelength,
bool select_horiz_by_yawpitch);
std::string getName();
bool getCollisionBox(aabb3f *toset);
private:
std::string getPropertyPacket();
void sendPosition(bool do_interpolate, bool is_movement_end);
@@ -100,7 +101,7 @@ class LuaEntitySAO : public ServerActiveObject
float m_last_sent_position_timer;
float m_last_sent_move_precision;
bool m_armor_groups_sent;
v2f m_animation_range;
float m_animation_speed;
float m_animation_blend;
@@ -147,6 +148,8 @@ class PlayerSAO : public ServerActiveObject
void setBasePosition(const v3f &position);
void setPos(v3f pos);
void moveTo(v3f pos, bool continuous);
void setYaw(float);
void setPitch(float);
/*
Interaction interface
@@ -233,6 +236,8 @@ class PlayerSAO : public ServerActiveObject
m_is_singleplayer = is_singleplayer;
}
bool getCollisionBox(aabb3f *toset);
private:
std::string getPropertyPacket();
@@ -252,8 +257,6 @@ class PlayerSAO : public ServerActiveObject
ItemGroupList m_armor_groups;
bool m_armor_groups_sent;
bool m_properties_sent;
struct ObjectProperties m_prop;
// Cached privileges for enforcement
@@ -280,6 +283,11 @@ class PlayerSAO : public ServerActiveObject
bool m_inventory_not_sent;
bool m_hp_not_sent;
bool m_wielded_item_not_sent;
float m_physics_override_speed;
float m_physics_override_jump;
float m_physics_override_gravity;
bool m_physics_override_sent;
};
#endif

View File

@@ -987,6 +987,43 @@ class CCraftDefManager: public IWritableCraftDefManager
}
return false;
}
virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
IGameDef *gamedef) const
{
std::vector<CraftDefinition*> recipes_list;
CraftInput input;
CraftOutput tmpout;
tmpout.item = "";
tmpout.time = 0;
for(std::vector<CraftDefinition*>::const_reverse_iterator
i = m_craft_definitions.rbegin();
i != m_craft_definitions.rend(); i++)
{
CraftDefinition *def = *i;
/*infostream<<"Checking "<<input.dump()<<std::endl
<<" against "<<def->dump()<<std::endl;*/
try {
tmpout = def->getOutput(input, gamedef);
if(tmpout.item.substr(0,output.item.length()) == output.item)
{
// Get output, then decrement input (if requested)
input = def->getInput(output, gamedef);
recipes_list.push_back(*i);
}
}
catch(SerializationError &e)
{
errorstream<<"getCraftResult: ERROR: "
<<"Serialization error in recipe "
<<def->dump()<<std::endl;
// then go on with the next craft definition
}
}
return recipes_list;
}
virtual std::string dump() const
{
std::ostringstream os(std::ios::binary);

View File

@@ -358,6 +358,8 @@ class ICraftDefManager
bool decrementInput, IGameDef *gamedef) const=0;
virtual bool getCraftRecipe(CraftInput &input, CraftOutput &output,
IGameDef *gamedef) const=0;
virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
IGameDef *gamedef) const=0;
// Print crafting recipes for debugging
virtual std::string dump() const=0;
@@ -376,6 +378,8 @@ class IWritableCraftDefManager : public ICraftDefManager
bool decrementInput, IGameDef *gamedef) const=0;
virtual bool getCraftRecipe(CraftInput &input, CraftOutput &output,
IGameDef *gamedef) const=0;
virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
IGameDef *gamedef) const=0;
// Print crafting recipes for debugging
virtual std::string dump() const=0;

View File

@@ -130,7 +130,7 @@ void DebugStack::print(std::ostream &os, bool everything)
os<<"Probably overflown."<<std::endl;
}
core::map<threadid_t, DebugStack*> g_debug_stacks;
std::map<threadid_t, DebugStack*> g_debug_stacks;
JMutex g_debug_stacks_mutex;
void debug_stacks_init()
@@ -144,12 +144,11 @@ void debug_stacks_print_to(std::ostream &os)
os<<"Debug stacks:"<<std::endl;
for(core::map<threadid_t, DebugStack*>::Iterator
i = g_debug_stacks.getIterator();
i.atEnd() == false; i++)
for(std::map<threadid_t, DebugStack*>::iterator
i = g_debug_stacks.begin();
i != g_debug_stacks.end(); ++i)
{
DebugStack *stack = i.getNode()->getValue();
stack->print(os, false);
i->second->print(os, false);
}
}
@@ -159,11 +158,11 @@ void debug_stacks_print()
DEBUGPRINT("Debug stacks:\n");
for(core::map<threadid_t, DebugStack*>::Iterator
i = g_debug_stacks.getIterator();
i.atEnd() == false; i++)
for(std::map<threadid_t, DebugStack*>::iterator
i = g_debug_stacks.begin();
i != g_debug_stacks.end(); ++i)
{
DebugStack *stack = i.getNode()->getValue();
DebugStack *stack = i->second;
for(int i=0; i<DEBUGSTREAM_COUNT; i++)
{
@@ -179,18 +178,18 @@ DebugStacker::DebugStacker(const char *text)
JMutexAutoLock lock(g_debug_stacks_mutex);
core::map<threadid_t, DebugStack*>::Node *n;
std::map<threadid_t, DebugStack*>::iterator n;
n = g_debug_stacks.find(threadid);
if(n != NULL)
if(n != g_debug_stacks.end())
{
m_stack = n->getValue();
m_stack = n->second;
}
else
{
/*DEBUGPRINT("Creating new debug stack for thread %x\n",
(unsigned int)threadid);*/
m_stack = new DebugStack(threadid);
g_debug_stacks.insert(threadid, m_stack);
g_debug_stacks[threadid] = m_stack;
}
if(m_stack->stack_i >= DEBUG_STACK_SIZE)
@@ -224,7 +223,7 @@ DebugStacker::~DebugStacker()
/*DEBUGPRINT("Deleting debug stack for thread %x\n",
(unsigned int)threadid);*/
delete m_stack;
g_debug_stacks.remove(threadid);
g_debug_stacks.erase(threadid);
}
}

View File

@@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "threads.h"
#include "gettime.h"
#include "exceptions.h"
#include <map>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
@@ -165,7 +166,7 @@ struct DebugStack
int stack_max_i; // Highest i that was seen
};
extern core::map<threadid_t, DebugStack*> g_debug_stacks;
extern std::map<threadid_t, DebugStack*> g_debug_stacks;
extern JMutex g_debug_stacks_mutex;
extern void debug_stacks_init();
@@ -205,42 +206,42 @@ class PacketCounter
void add(u16 command)
{
core::map<u16, u16>::Node *n = m_packets.find(command);
if(n == NULL)
std::map<u16, u16>::iterator n = m_packets.find(command);
if(n == m_packets.end())
{
m_packets[command] = 1;
}
else
{
n->setValue(n->getValue()+1);
n->second++;
}
}
void clear()
{
for(core::map<u16, u16>::Iterator
i = m_packets.getIterator();
i.atEnd() == false; i++)
for(std::map<u16, u16>::iterator
i = m_packets.begin();
i != m_packets.end(); ++i)
{
i.getNode()->setValue(0);
i->second = 0;
}
}
void print(std::ostream &o)
{
for(core::map<u16, u16>::Iterator
i = m_packets.getIterator();
i.atEnd() == false; i++)
for(std::map<u16, u16>::iterator
i = m_packets.begin();
i != m_packets.end(); ++i)
{
o<<"cmd "<<i.getNode()->getKey()
<<" count "<<i.getNode()->getValue()
o<<"cmd "<<i->first
<<" count "<<i->second
<<std::endl;
}
}
private:
// command, count
core::map<u16, u16> m_packets;
std::map<u16, u16> m_packets;
};
/*

View File

@@ -107,14 +107,17 @@ void set_default_settings(Settings *settings)
settings->setDefault("enable_clouds", "true");
settings->setDefault("screenshot_path", ".");
settings->setDefault("view_bobbing_amount", "1.0");
settings->setDefault("fall_bobbing_amount", "0.0");
settings->setDefault("enable_3d_clouds", "true");
settings->setDefault("cloud_height", "120");
settings->setDefault("menu_clouds", "true");
settings->setDefault("opaque_water", "false");
settings->setDefault("console_color", "(0,0,0)");
settings->setDefault("console_alpha", "200");
settings->setDefault("selectionbox_color", "(0,0,0)");
settings->setDefault("crosshair_color", "(255,255,255)");
settings->setDefault("crosshair_alpha", "255");
settings->setDefault("mouse_sensitivity", "0.2");
settings->setDefault("enable_sound", "true");
settings->setDefault("sound_volume", "0.8");
settings->setDefault("desynchronize_mapblock_texture_animation", "true");
@@ -172,6 +175,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("max_simultaneous_block_sends_server_total", "20");
settings->setDefault("max_block_send_distance", "9");
settings->setDefault("max_block_generate_distance", "7");
settings->setDefault("max_clearobjects_extra_loaded_blocks", "4096");
settings->setDefault("time_send_interval", "5");
settings->setDefault("time_speed", "72");
settings->setDefault("server_unload_unused_data_timeout", "29");
@@ -202,34 +206,58 @@ void set_default_settings(Settings *settings)
settings->setDefault("movement_liquid_fluidity_smooth", "0.5");
settings->setDefault("movement_liquid_sink", "10");
settings->setDefault("movement_gravity", "9.81");
//liquid stuff
settings->setDefault("liquid_finite", "false");
settings->setDefault("liquid_update", "1.0");
settings->setDefault("liquid_relax", "1");
settings->setDefault("liquid_relax", "2");
settings->setDefault("liquid_fast_flood", "1");
settings->setDefault("underground_springs", "1");
//mapgen stuff
settings->setDefault("mg_name", "v6");
settings->setDefault("water_level", "1");
settings->setDefault("water_level", "1");
settings->setDefault("chunksize", "5");
settings->setDefault("mg_flags", "trees, caves, v6_biome_blend");
settings->setDefault("mgv6_freq_desert", "0.45");
settings->setDefault("mgv6_freq_beach", "0.15");
settings->setDefault("mgv6_np_terrain_base", "-4, 20, (250.0, 250, 250), 82341, 5, 0.6");
settings->setDefault("mgv6_np_terrain_base", "-4, 20, (250, 250, 250), 82341, 5, 0.6");
settings->setDefault("mgv6_np_terrain_higher", "20, 16, (500, 500, 500), 85039, 5, 0.6");
settings->setDefault("mgv6_np_steepness", "0.85, 0.5, (125, 125, 125), -932, 5, 0.7");
settings->setDefault("mgv6_np_height_select", "0.5, 1, (250, 250, 250), 4213, 5, 0.69");
settings->setDefault("mgv6_np_trees", "0, 1, (125, 125, 125), 2, 4, 0.66");
settings->setDefault("mgv6_np_mud", "4, 2, (200, 200, 200), 91013, 3, 0.55");
settings->setDefault("mgv6_np_beach", "0, 1, (250, 250, 250), 59420, 3, 0.50");
settings->setDefault("mgv6_np_biome", "0, 1, (250, 250, 250), 9130, 3, 0.50");
settings->setDefault("mgv6_np_cave", "6, 6, (250, 250, 250), 34329, 3, 0.50");
settings->setDefault("mgv6_np_humidity", "0.5, 0.5, (500, 500, 500), 72384, 4, 0.66");
settings->setDefault("mgv6_np_trees", "0, 1, (125, 125, 125), 2, 4, 0.66");
settings->setDefault("mgv6_np_apple_trees", "0, 1, (100, 100, 100), 342902, 3, 0.45");
settings->setDefault("mgv7_np_terrain", "10, 12, (350, 350, 350), 82341, 5, 0.6");
settings->setDefault("mgv7_np_bgroup", "0.5, 0.3125, (350, 350, 350), 5923, 2, 0.6");
settings->setDefault("mgv7_np_heat", "25, 50, (500, 500, 500), 35293, 1, 0");
settings->setDefault("mgv7_np_humidity", "50, 31.25, (750, 750, 750), 12094, 2, 0.6");
settings->setDefault("mgv7_np_terrain_base", "0, 80, (250, 250, 250), 82341, 5, 0.6");
settings->setDefault("mgv7_np_terrain_alt", "0, 20, (250, 250, 250), 5934, 5, 0.6");
settings->setDefault("mgv7_np_terrain_mod", "0, 1, (350, 350, 350), 85039, 5, 0.6");
settings->setDefault("mgv7_np_terrain_persist", "0, 1, (500, 500, 500), 539, 3, 0.6");
settings->setDefault("mgv7_np_height_select", "0.5, 0.5, (250, 250, 250), 4213, 5, 0.69");
settings->setDefault("mgv7_np_ridge", "0.5, 1, (100, 100, 100), 6467, 4, 0.75");
settings->setDefault("mgindev_np_terrain_base", "-4, 20, (250, 250, 250), 82341, 5, 0.6, 10, 10");
settings->setDefault("mgindev_np_terrain_higher", "20, 16, (500, 500, 500), 85039, 5, 0.6, 10, 10");
settings->setDefault("mgindev_np_steepness", "0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2, 10");
settings->setDefault("mgindev_np_mud", "4, 2, (200, 200, 200), 91013, 3, 0.55, 1, 1");
settings->setDefault("mgindev_np_float_islands1", "0, 1, (64, 64, 64 ), 3683, 5, 0.5, 1, 1.5");
settings->setDefault("mgindev_np_float_islands2", "0, 1, (8, 8, 8 ), 9292, 2, 0.5, 1, 1.5");
settings->setDefault("mgindev_np_float_islands3", "0, 1, (256, 256, 256), 6412, 2, 0.5, 1, 0.5");
settings->setDefault("mgindev_np_biome", "0, 1, (250, 250, 250), 9130, 3, 0.50, 1, 10");
settings->setDefault("mgindev_float_islands", "500");
}
void override_default_settings(Settings *settings, Settings *from)
{
std::vector<std::string> names = from->getNames();
for(size_t i=0; i<names.size(); i++){
const std::string &name = names[i];
settings->setDefault(name, from->get(name));
}
}

View File

@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class Settings;
void set_default_settings(Settings *settings);
void override_default_settings(Settings *settings, Settings *from);
#endif

634
src/dungeongen.cpp Normal file
View File

@@ -0,0 +1,634 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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.
*/
#include "dungeongen.h"
#include "mapgen.h"
#include "voxel.h"
#include "noise.h"
#include "mapblock.h"
#include "mapnode.h"
#include "map.h"
#include "nodedef.h"
#include "profiler.h"
#include "settings.h" // For g_settings
#include "main.h" // For g_profiler
NoiseParams nparams_dungeon_rarity =
{0.0, 1.0, v3f(500.0, 500.0, 500.0), 0, 2, 0.8};
NoiseParams nparams_dungeon_wetness =
{0.0, 1.0, v3f(40.0, 40.0, 40.0), 32474, 4, 1.1};
NoiseParams nparams_dungeon_density =
{0.0, 1.0, v3f(2.5, 2.5, 2.5), 0, 2, 1.4};
///////////////////////////////////////////////////////////////////////////////
DungeonGen::DungeonGen(INodeDefManager *ndef, u64 seed, s16 waterlevel) {
this->ndef = ndef;
this->mapseed = seed;
this->water_level = waterlevel;
np_rarity = &nparams_dungeon_rarity;
np_wetness = &nparams_dungeon_wetness;
np_density = &nparams_dungeon_density;
/*
cid_water_source = ndef->getId("mapgen_water_source");
cid_cobble = ndef->getId("mapgen_cobble");
cid_mossycobble = ndef->getId("mapgen_mossycobble");
cid_torch = ndef->getId("default:torch");
*/
}
void DungeonGen::generate(ManualMapVoxelManipulator *vm, u32 bseed,
v3s16 nmin, v3s16 nmax) {
//TimeTaker t("gen dungeons");
int approx_groundlevel = 10 + water_level;
if ((nmin.Y + nmax.Y) / 2 >= approx_groundlevel ||
NoisePerlin3D(np_rarity, nmin.X, nmin.Y, nmin.Z, mapseed) < 0.2)
return;
this->vmanip = vm;
this->blockseed = bseed;
random.seed(bseed + 2);
cid_water_source = ndef->getId("mapgen_water_source");
cid_cobble = ndef->getId("mapgen_cobble");
cid_mossycobble = ndef->getId("mapgen_mossycobble");
//cid_torch = ndef->getId("default:torch");
cid_cobblestair = ndef->getId("stairs:stair_cobble");
// Dungeon generator doesn't modify places which have this set
vmanip->clearFlag(VMANIP_FLAG_DUNGEON_INSIDE | VMANIP_FLAG_DUNGEON_PRESERVE);
// Set all air and water to be untouchable to make dungeons open
// to caves and open air
for (s16 z = nmin.Z; z <= nmax.Z; z++) {
for (s16 y = nmin.Y; y <= nmax.Y; y++) {
u32 i = vmanip->m_area.index(nmin.X, y, z);
for (s16 x = nmin.X; x <= nmax.X; x++) {
content_t c = vmanip->m_data[i].getContent();
if (c == CONTENT_AIR || c == cid_water_source)
vmanip->m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE;
i++;
}
}
}
// Add it
makeDungeon(v3s16(1,1,1) * MAP_BLOCKSIZE);
// Convert some cobble to mossy cobble
for (s16 z = nmin.Z; z <= nmax.Z; z++) {
for (s16 y = nmin.Y; y <= nmax.Y; y++) {
u32 i = vmanip->m_area.index(nmin.X, y, z);
for (s16 x = nmin.X; x <= nmax.X; x++) {
if (vmanip->m_data[i].getContent() == cid_cobble) {
float wetness = NoisePerlin3D(np_wetness, x, y, z, mapseed);
float density = NoisePerlin3D(np_density, x, y, z, blockseed);
if (density < wetness / 3.0)
vmanip->m_data[i].setContent(cid_mossycobble);
}
i++;
}
}
}
//printf("== gen dungeons: %dms\n", t.stop());
}
void DungeonGen::makeDungeon(v3s16 start_padding)
{
v3s16 areasize = vmanip->m_area.getExtent();
v3s16 roomsize;
v3s16 roomplace;
/*
Find place for first room
*/
bool fits = false;
for (u32 i = 0; i < 100; i++)
{
bool is_large_room = ((random.next() & 3) == 1);
roomsize = is_large_room ?
v3s16(random.range(8, 16),random.range(8, 16),random.range(8, 16)) :
v3s16(random.range(4, 8),random.range(4, 6),random.range(4, 8));
// start_padding is used to disallow starting the generation of
// a dungeon in a neighboring generation chunk
roomplace = vmanip->m_area.MinEdge + start_padding + v3s16(
random.range(0,areasize.X-roomsize.X-1-start_padding.X),
random.range(0,areasize.Y-roomsize.Y-1-start_padding.Y),
random.range(0,areasize.Z-roomsize.Z-1-start_padding.Z));
/*
Check that we're not putting the room to an unknown place,
otherwise it might end up floating in the air
*/
fits = true;
for (s16 z = 1; z < roomsize.Z - 1; z++)
for (s16 y = 1; y < roomsize.Y - 1; y++)
for (s16 x = 1; x < roomsize.X - 1; x++)
{
v3s16 p = roomplace + v3s16(x, y, z);
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_INSIDE)
{
fits = false;
break;
}
if (vmanip->m_data[vi].getContent() == CONTENT_IGNORE)
{
fits = false;
break;
}
}
if (fits)
break;
}
// No place found
if (fits == false)
return;
/*
Stores the center position of the last room made, so that
a new corridor can be started from the last room instead of
the new room, if chosen so.
*/
v3s16 last_room_center = roomplace + v3s16(roomsize.X / 2, 1, roomsize.Z / 2);
u32 room_count = random.range(2, 16);
for (u32 i = 0; i < room_count; i++)
{
// Make a room to the determined place
makeRoom(roomsize, roomplace);
v3s16 room_center = roomplace + v3s16(roomsize.X / 2, 1, roomsize.Z / 2);
// Place torch at room center (for testing)
//vmanip->m_data[vmanip->m_area.index(room_center)] = MapNode(cid_torch);
// Quit if last room
if (i == room_count - 1)
break;
// Determine walker start position
bool start_in_last_room = (random.range(0, 2) != 0);
v3s16 walker_start_place;
if(start_in_last_room)
{
walker_start_place = last_room_center;
}
else
{
walker_start_place = room_center;
// Store center of current room as the last one
last_room_center = room_center;
}
// Create walker and find a place for a door
v3s16 doorplace;
v3s16 doordir;
m_pos = walker_start_place;
bool r = findPlaceForDoor(doorplace, doordir);
if (r == false)
return;
if (random.range(0,1) == 0)
// Make the door
makeDoor(doorplace, doordir);
else
// Don't actually make a door
doorplace -= doordir;
// Make a random corridor starting from the door
v3s16 corridor_end;
v3s16 corridor_end_dir;
makeCorridor(doorplace, doordir, corridor_end, corridor_end_dir);
// Find a place for a random sized room
roomsize = v3s16(random.range(4,8),random.range(4,6),random.range(4,8));
m_pos = corridor_end;
m_dir = corridor_end_dir;
r = findPlaceForRoomDoor(roomsize, doorplace, doordir, roomplace);
if (r == false)
return;
if (random.range(0,1) == 0)
// Make the door
makeDoor(doorplace, doordir);
else
// Don't actually make a door
roomplace -= doordir;
}
}
void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace)
{
MapNode n_cobble(cid_cobble);
MapNode n_air(CONTENT_AIR);
// Make +-X walls
for (s16 z = 0; z < roomsize.Z; z++)
for (s16 y = 0; y < roomsize.Y; y++)
{
{
v3s16 p = roomplace + v3s16(0, y, z);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE)
continue;
vmanip->m_data[vi] = n_cobble;
}
{
v3s16 p = roomplace + v3s16(roomsize.X - 1, y, z);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE)
continue;
vmanip->m_data[vi] = n_cobble;
}
}
// Make +-Z walls
for (s16 x = 0; x < roomsize.X; x++)
for (s16 y = 0; y < roomsize.Y; y++)
{
{
v3s16 p = roomplace + v3s16(x, y, 0);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE)
continue;
vmanip->m_data[vi] = n_cobble;
}
{
v3s16 p = roomplace + v3s16(x, y, roomsize.Z - 1);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE)
continue;
vmanip->m_data[vi] = n_cobble;
}
}
// Make +-Y walls (floor and ceiling)
for (s16 z = 0; z < roomsize.Z; z++)
for (s16 x = 0; x < roomsize.X; x++)
{
{
v3s16 p = roomplace + v3s16(x, 0, z);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE)
continue;
vmanip->m_data[vi] = n_cobble;
}
{
v3s16 p = roomplace + v3s16(x,roomsize. Y - 1, z);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE)
continue;
vmanip->m_data[vi] = n_cobble;
}
}
// Fill with air
for (s16 z = 1; z < roomsize.Z - 1; z++)
for (s16 y = 1; y < roomsize.Y - 1; y++)
for (s16 x = 1; x < roomsize.X - 1; x++)
{
v3s16 p = roomplace + v3s16(x, y, z);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
vmanip->m_flags[vi] |= VMANIP_FLAG_DUNGEON_UNTOUCHABLE;
vmanip->m_data[vi] = n_air;
}
}
void DungeonGen::makeFill(v3s16 place, v3s16 size,
u8 avoid_flags, MapNode n, u8 or_flags)
{
for (s16 z = 0; z < size.Z; z++)
for (s16 y = 0; y < size.Y; y++)
for (s16 x = 0; x < size.X; x++)
{
v3s16 p = place + v3s16(x, y, z);
if (vmanip->m_area.contains(p) == false)
continue;
u32 vi = vmanip->m_area.index(p);
if (vmanip->m_flags[vi] & avoid_flags)
continue;
vmanip->m_flags[vi] |= or_flags;
vmanip->m_data[vi] = n;
}
}
void DungeonGen::makeHole(v3s16 place)
{
makeFill(place, v3s16(1, 2, 1), 0, MapNode(CONTENT_AIR),
VMANIP_FLAG_DUNGEON_INSIDE);
}
void DungeonGen::makeDoor(v3s16 doorplace, v3s16 doordir)
{
makeHole(doorplace);
// Place torch (for testing)
//vmanip->m_data[vmanip->m_area.index(doorplace)] = MapNode(cid_torch);
}
void DungeonGen::makeCorridor(v3s16 doorplace,
v3s16 doordir, v3s16 &result_place, v3s16 &result_dir)
{
makeHole(doorplace);
v3s16 p0 = doorplace;
v3s16 dir = doordir;
u32 length;
/*if (random.next() % 2)
length = random.range(1, 13);
else
length = random.range(1, 6);*/
length = random.range(1, 13);
u32 partlength = random.range(1, 13);
u32 partcount = 0;
s16 make_stairs = 0;
if (random.next() % 2 == 0 && partlength >= 3)
make_stairs = random.next() % 2 ? 1 : -1;
for (u32 i = 0; i < length; i++) {
v3s16 p = p0 + dir;
if (partcount != 0)
p.Y += make_stairs;
if (vmanip->m_area.contains(p) == true &&
vmanip->m_area.contains(p + v3s16(0, 1, 0)) == true) {
if (make_stairs) {
makeFill(p + v3s16(-1, -1, -1), v3s16(3, 5, 3),
VMANIP_FLAG_DUNGEON_UNTOUCHABLE, MapNode(cid_cobble), 0);
makeHole(p);
makeHole(p - dir);
// TODO: fix stairs code so it works 100% (quite difficult)
// exclude stairs from the bottom step
if (((make_stairs == 1) && i != 0) ||
((make_stairs == -1) && i != length - 1)) {
// rotate face 180 deg if making stairs backwards
int facedir = dir_to_facedir(dir * make_stairs);
u32 vi = vmanip->m_area.index(p.X - dir.X, p.Y - 1, p.Z - dir.Z);
if (vmanip->m_data[vi].getContent() == cid_cobble)
vmanip->m_data[vi] = MapNode(cid_cobblestair, 0, facedir);
vi = vmanip->m_area.index(p.X, p.Y, p.Z);
if (vmanip->m_data[vi].getContent() == cid_cobble)
vmanip->m_data[vi] = MapNode(cid_cobblestair, 0, facedir);
}
} else {
makeFill(p + v3s16(-1, -1, -1), v3s16(3, 4, 3),
VMANIP_FLAG_DUNGEON_UNTOUCHABLE, MapNode(cid_cobble), 0);
makeHole(p);
}
p0 = p;
} else {
// Can't go here, turn away
dir = turn_xz(dir, random.range(0, 1));
make_stairs = -make_stairs;
partcount = 0;
partlength = random.range(1, length);
continue;
}
partcount++;
if (partcount >= partlength) {
partcount = 0;
dir = random_turn(random, dir);
partlength = random.range(1,length);
make_stairs = 0;
if (random.next() % 2 == 0 && partlength >= 3)
make_stairs = random.next() % 2 ? 1 : -1;
}
}
result_place = p0;
result_dir = dir;
}
bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir)
{
for (u32 i = 0; i < 100; i++)
{
v3s16 p = m_pos + m_dir;
v3s16 p1 = p + v3s16(0, 1, 0);
if (vmanip->m_area.contains(p) == false
|| vmanip->m_area.contains(p1) == false
|| i % 4 == 0)
{
randomizeDir();
continue;
}
if (vmanip->getNodeNoExNoEmerge(p).getContent() == cid_cobble
&& vmanip->getNodeNoExNoEmerge(p1).getContent() == cid_cobble)
{
// Found wall, this is a good place!
result_place = p;
result_dir = m_dir;
// Randomize next direction
randomizeDir();
return true;
}
/*
Determine where to move next
*/
// Jump one up if the actual space is there
if (vmanip->getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent() == cid_cobble
&& vmanip->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() == CONTENT_AIR
&& vmanip->getNodeNoExNoEmerge(p+v3s16(0,2,0)).getContent() == CONTENT_AIR)
p += v3s16(0,1,0);
// Jump one down if the actual space is there
if (vmanip->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() == cid_cobble
&& vmanip->getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent() == CONTENT_AIR
&& vmanip->getNodeNoExNoEmerge(p+v3s16(0,-1,0)).getContent() == CONTENT_AIR)
p += v3s16(0,-1,0);
// Check if walking is now possible
if (vmanip->getNodeNoExNoEmerge(p).getContent() != CONTENT_AIR
|| vmanip->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() != CONTENT_AIR)
{
// Cannot continue walking here
randomizeDir();
continue;
}
// Move there
m_pos = p;
}
return false;
}
bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace,
v3s16 &result_doordir, v3s16 &result_roomplace)
{
for (s16 trycount = 0; trycount < 30; trycount++)
{
v3s16 doorplace;
v3s16 doordir;
bool r = findPlaceForDoor(doorplace, doordir);
if (r == false)
continue;
v3s16 roomplace;
// X east, Z north, Y up
#if 1
if (doordir == v3s16(1, 0, 0)) // X+
roomplace = doorplace +
v3s16(0, -1, random.range(-roomsize.Z + 2, -2));
if (doordir == v3s16(-1, 0, 0)) // X-
roomplace = doorplace +
v3s16(-roomsize.X + 1, -1, random.range(-roomsize.Z + 2, -2));
if (doordir == v3s16(0, 0, 1)) // Z+
roomplace = doorplace +
v3s16(random.range(-roomsize.X + 2, -2), -1, 0);
if (doordir == v3s16(0, 0, -1)) // Z-
roomplace = doorplace +
v3s16(random.range(-roomsize.X + 2, -2), -1, -roomsize.Z + 1);
#endif
#if 0
if (doordir == v3s16(1, 0, 0)) // X+
roomplace = doorplace + v3s16(0, -1, -roomsize.Z / 2);
if (doordir == v3s16(-1, 0, 0)) // X-
roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z / 2);
if (doordir == v3s16(0, 0, 1)) // Z+
roomplace = doorplace + v3s16(-roomsize.X / 2, -1, 0);
if (doordir == v3s16(0, 0, -1)) // Z-
roomplace = doorplace + v3s16(-roomsize.X / 2, -1, -roomsize.Z + 1);
#endif
// Check fit
bool fits = true;
for (s16 z = 1; z < roomsize.Z - 1; z++)
for (s16 y = 1; y < roomsize.Y - 1; y++)
for (s16 x = 1; x < roomsize.X - 1; x++)
{
v3s16 p = roomplace + v3s16(x, y, z);
if (vmanip->m_area.contains(p) == false)
{
fits = false;
break;
}
if (vmanip->m_flags[vmanip->m_area.index(p)]
& VMANIP_FLAG_DUNGEON_INSIDE)
{
fits = false;
break;
}
}
if(fits == false)
{
// Find new place
continue;
}
result_doorplace = doorplace;
result_doordir = doordir;
result_roomplace = roomplace;
return true;
}
return false;
}
v3s16 rand_ortho_dir(PseudoRandom &random)
{
if (random.next() % 2 == 0)
return random.next() % 2 ? v3s16(-1, 0, 0) : v3s16(1, 0, 0);
else
return random.next() % 2 ? v3s16(0, 0, -1) : v3s16(0, 0, 1);
}
v3s16 turn_xz(v3s16 olddir, int t)
{
v3s16 dir;
if (t == 0)
{
// Turn right
dir.X = olddir.Z;
dir.Z = -olddir.X;
dir.Y = olddir.Y;
}
else
{
// Turn left
dir.X = -olddir.Z;
dir.Z = olddir.X;
dir.Y = olddir.Y;
}
return dir;
}
v3s16 random_turn(PseudoRandom &random, v3s16 olddir)
{
int turn = random.range(0, 2);
v3s16 dir;
if (turn == 0)
{
// Go straight
dir = olddir;
}
else if (turn == 1)
// Turn right
dir = turn_xz(olddir, 0);
else
// Turn left
dir = turn_xz(olddir, 1);
return dir;
}
int dir_to_facedir(v3s16 d) {
if (abs(d.X) > abs(d.Z))
return d.X < 0 ? 3 : 1;
else
return d.Z < 0 ? 2 : 0;
}

128
src/dungeongen.h Normal file
View File

@@ -0,0 +1,128 @@
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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.
*/
#ifndef DUNGEONGEN_HEADER
#define DUNGEONGEN_HEADER
#include "voxel.h"
#include "noise.h"
#define VMANIP_FLAG_DUNGEON_INSIDE VOXELFLAG_CHECKED1
#define VMANIP_FLAG_DUNGEON_PRESERVE VOXELFLAG_CHECKED2
#define VMANIP_FLAG_DUNGEON_UNTOUCHABLE (\
VMANIP_FLAG_DUNGEON_INSIDE|VMANIP_FLAG_DUNGEON_PRESERVE)
class ManualMapVoxelManipulator;
class INodeDefManager;
v3s16 rand_ortho_dir(PseudoRandom &random);
v3s16 turn_xz(v3s16 olddir, int t);
v3s16 random_turn(PseudoRandom &random, v3s16 olddir);
int dir_to_facedir(v3s16 d);
class DungeonGen {
public:
u32 blockseed;
u64 mapseed;
ManualMapVoxelManipulator *vmanip;
INodeDefManager *ndef;
PseudoRandom random;
v3s16 csize;
s16 water_level;
NoiseParams *np_rarity;
NoiseParams *np_wetness;
NoiseParams *np_density;
content_t cid_water_source;
content_t cid_cobble;
content_t cid_mossycobble;
content_t cid_torch;
content_t cid_cobblestair;
//RoomWalker
v3s16 m_pos;
v3s16 m_dir;
DungeonGen(INodeDefManager *ndef, u64 seed, s16 waterlevel);
void generate(ManualMapVoxelManipulator *vm, u32 bseed,
v3s16 full_node_min, v3s16 full_node_max);
//void generate(v3s16 full_node_min, v3s16 full_node_max, u32 bseed);
void makeDungeon(v3s16 start_padding);
void makeRoom(v3s16 roomsize, v3s16 roomplace);
void makeCorridor(v3s16 doorplace, v3s16 doordir,
v3s16 &result_place, v3s16 &result_dir);
void makeDoor(v3s16 doorplace, v3s16 doordir);
void makeFill(v3s16 place, v3s16 size, u8 avoid_flags, MapNode n, u8 or_flags);
void makeHole(v3s16 place);
bool findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir);
bool findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace,
v3s16 &result_doordir, v3s16 &result_roomplace);
void randomizeDir()
{
m_dir = rand_ortho_dir(random);
}
};
class RoomWalker
{
public:
RoomWalker(VoxelManipulator &vmanip_, v3s16 pos, PseudoRandom &random,
INodeDefManager *ndef):
vmanip(vmanip_),
m_pos(pos),
m_random(random),
m_ndef(ndef)
{
randomizeDir();
}
void randomizeDir()
{
m_dir = rand_ortho_dir(m_random);
}
void setPos(v3s16 pos)
{
m_pos = pos;
}
void setDir(v3s16 dir)
{
m_dir = dir;
}
//bool findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir);
//bool findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace,
// v3s16 &result_doordir, v3s16 &result_roomplace);
private:
VoxelManipulator &vmanip;
v3s16 m_pos;
v3s16 m_dir;
PseudoRandom &m_random;
INodeDefManager *m_ndef;
};
#endif

View File

@@ -1,6 +1,7 @@
/*
Minetest-c55
Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
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
@@ -31,23 +32,29 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapblock.h"
#include "serverobject.h"
#include "settings.h"
#include "script.h"
#include "scriptapi.h"
#include "cpp_api/scriptapi.h"
#include "profiler.h"
#include "log.h"
#include "nodedef.h"
#include "biome.h"
#include "emerge.h"
#include "mapgen_v6.h"
#include "mapgen_v7.h"
#include "mapgen_indev.h"
#include "mapgen_singlenode.h"
/////////////////////////////// Emerge Manager ////////////////////////////////
EmergeManager::EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef) {
EmergeManager::EmergeManager(IGameDef *gamedef) {
//register built-in mapgens
registerMapgen("v6", new MapgenFactoryV6());
registerMapgen("v7", new MapgenFactoryV7());
registerMapgen("indev", new MapgenFactoryIndev());
registerMapgen("singlenode", new MapgenFactorySinglenode());
this->biomedef = bdef ? bdef : new BiomeDefManager(gamedef);
this->ndef = gamedef->getNodeDefManager();
this->biomedef = new BiomeDefManager();
this->params = NULL;
mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info");
@@ -88,9 +95,20 @@ EmergeManager::~EmergeManager() {
delete emergethread[i];
delete mapgen[i];
}
emergethread.clear();
mapgen.clear();
for (unsigned int i = 0; i < ores.size(); i++)
delete ores[i];
ores.clear();
for (std::map<std::string, MapgenFactory *>::iterator iter = mglist.begin();
iter != mglist.end(); iter ++) {
delete iter->second;
}
mglist.clear();
delete biomedef;
delete params;
}
@@ -100,6 +118,8 @@ void EmergeManager::initMapgens(MapgenParams *mgparams) {
if (mapgen.size())
return;
biomedef->resolveNodeNames(ndef);
this->params = mgparams;
for (unsigned int i = 0; i != emergethread.size(); i++) {
mg = createMapgen(params->mg_name, 0, params);
@@ -233,6 +253,8 @@ MapgenParams *EmergeManager::createMapgenParams(std::string mgname) {
MapgenParams *EmergeManager::getParamsFromSettings(Settings *settings) {
std::string mg_name = settings->get("mg_name");
MapgenParams *mgparams = createMapgenParams(mg_name);
if (!mgparams)
return NULL;
mgparams->mg_name = mg_name;
mgparams->seed = settings->getU64(settings == g_settings ? "fixed_map_seed" : "seed");
@@ -326,7 +348,7 @@ bool EmergeThread::getBlockOrStartGen(v3s16 p, MapBlock **b,
void *EmergeThread::Thread() {
ThreadStarted();
log_register_thread("EmergeThread" + id);
log_register_thread("EmergeThread" + itos(id));
DSTACK(__FUNCTION_NAME);
BEGIN_DEBUG_EXCEPTION_HANDLER
@@ -359,7 +381,7 @@ void *EmergeThread::Thread() {
*/
BlockMakeData data;
MapBlock *block = NULL;
core::map<v3s16, MapBlock *> modified_blocks;
std::map<v3s16, MapBlock *> modified_blocks;
if (getBlockOrStartGen(p, &block, &data, allow_generate)) {
{
@@ -395,7 +417,7 @@ void *EmergeThread::Thread() {
ign(&m_server->m_ignore_map_edit_events_area,
VoxelArea(minp, maxp));
{ // takes about 90ms with -O1 on an e3-1230v2
scriptapi_environment_on_generated(m_server->m_lua,
SERVER_TO_SA(m_server)->environment_OnGenerated(
minp, maxp, emerge->getBlockSeed(minp));
}
@@ -415,13 +437,13 @@ void *EmergeThread::Thread() {
JMutexAutoLock lock(m_server->m_con_mutex);
// Add the originally fetched block to the modified list
if (block)
modified_blocks.insert(p, block);
modified_blocks[p] = block;
// Set the modified blocks unsent for all the clients
for (core::map<u16, RemoteClient*>::Iterator
i = m_server->m_clients.getIterator();
i.atEnd() == false; i++) {
RemoteClient *client = i.getNode()->getValue();
for (std::map<u16, RemoteClient*>::iterator
i = m_server->m_clients.begin();
i != m_server->m_clients.end(); ++i) {
RemoteClient *client = i->second;
if (modified_blocks.size() > 0) {
// Remove block from sent history
client->SetBlocksNotSent(modified_blocks);

View File

@@ -1,3 +1,22 @@
/*
Minetest
Copyright (C) 2010-2013 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
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.
*/
#ifndef EMERGE_HEADER
#define EMERGE_HEADER
@@ -12,8 +31,8 @@
infostream << "EmergeThread: " x << std::endl; }
class Mapgen;
class MapgenParams;
class MapgenFactory;
struct MapgenParams;
struct MapgenFactory;
class Biome;
class BiomeDefManager;
class EmergeThread;
@@ -46,6 +65,8 @@ struct BlockEmergeData {
class EmergeManager {
public:
INodeDefManager *ndef;
std::map<std::string, MapgenFactory *> mglist;
std::vector<Mapgen *> mapgen;
@@ -63,10 +84,11 @@ class EmergeManager {
std::map<v3s16, BlockEmergeData *> blocks_enqueued;
std::map<u16, u16> peer_queue_count;
//biome manager
//Mapgen-related structures
BiomeDefManager *biomedef;
std::vector<Ore *> ores;
EmergeManager(IGameDef *gamedef, BiomeDefManager *bdef);
EmergeManager(IGameDef *gamedef);
~EmergeManager();
void initMapgens(MapgenParams *mgparams);

File diff suppressed because it is too large Load Diff

View File

@@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include <set>
#include <list>
#include "irrlichttypes_extrabloated.h"
#include "player.h"
#include <ostream>
@@ -49,6 +50,7 @@ class IGameDef;
class Map;
class ServerMap;
class ClientMap;
class ScriptApi;
class Environment
{
@@ -73,8 +75,8 @@ class Environment
Player * getPlayer(const char *name);
Player * getRandomConnectedPlayer();
Player * getNearestConnectedPlayer(v3f pos);
core::list<Player*> getPlayers();
core::list<Player*> getPlayers(bool ignore_disconnected);
std::list<Player*> getPlayers();
std::list<Player*> getPlayers(bool ignore_disconnected);
void printPlayers(std::ostream &o);
u32 getDayNightRatio();
@@ -102,7 +104,7 @@ class Environment
protected:
// peer_ids in here should be unique, except that there may be many 0s
core::list<Player*> m_players;
std::list<Player*> m_players;
// Time of day in milli-hours (0-23999); determines day and night
u32 m_time_of_day;
// Time of day in 0...1
@@ -156,20 +158,20 @@ struct ABMWithState
class ActiveBlockList
{
public:
void update(core::list<v3s16> &active_positions,
void update(std::list<v3s16> &active_positions,
s16 radius,
core::map<v3s16, bool> &blocks_removed,
core::map<v3s16, bool> &blocks_added);
std::set<v3s16> &blocks_removed,
std::set<v3s16> &blocks_added);
bool contains(v3s16 p){
return (m_list.find(p) != NULL);
return (m_list.find(p) != m_list.end());
}
void clear(){
m_list.clear();
}
core::map<v3s16, bool> m_list;
std::set<v3s16> m_list;
private:
};
@@ -189,7 +191,7 @@ class IBackgroundBlockEmerger
class ServerEnvironment : public Environment
{
public:
ServerEnvironment(ServerMap *map, lua_State *L, IGameDef *gamedef,
ServerEnvironment(ServerMap *map, ScriptApi *iface, IGameDef *gamedef,
IBackgroundBlockEmerger *emerger);
~ServerEnvironment();
@@ -197,8 +199,9 @@ class ServerEnvironment : public Environment
ServerMap & getServerMap();
lua_State* getLua()
{ return m_lua; }
//TODO find way to remove this fct!
ScriptApi* getScriptIface()
{ return m_script; }
IGameDef *getGameDef()
{ return m_gamedef; }
@@ -249,16 +252,16 @@ class ServerEnvironment : public Environment
inside a radius around a position
*/
void getAddedActiveObjects(v3s16 pos, s16 radius,
core::map<u16, bool> &current_objects,
core::map<u16, bool> &added_objects);
std::set<u16> &current_objects,
std::set<u16> &added_objects);
/*
Find out what new objects have been removed from
inside a radius around a position
*/
void getRemovedActiveObjects(v3s16 pos, s16 radius,
core::map<u16, bool> &current_objects,
core::map<u16, bool> &removed_objects);
std::set<u16> &current_objects,
std::set<u16> &removed_objects);
/*
Get the next message emitted by some active object.
@@ -297,6 +300,9 @@ class ServerEnvironment : public Environment
// This makes stuff happen
void step(f32 dtime);
//check if there's a line of sight between two positions
bool line_of_sight(v3f pos1, v3f pos2, float stepsize=1.0);
private:
/*
@@ -344,13 +350,13 @@ class ServerEnvironment : public Environment
// The map
ServerMap *m_map;
// Lua state
lua_State *m_lua;
ScriptApi* m_script;
// Game definition
IGameDef *m_gamedef;
// Background block emerger (the server, in practice)
IBackgroundBlockEmerger *m_emerger;
// Active object list
core::map<u16, ServerActiveObject*> m_active_objects;
std::map<u16, ServerActiveObject*> m_active_objects;
// Outgoing network message buffer for active objects
Queue<ActiveObjectMessage> m_active_object_messages;
// Some timers
@@ -368,7 +374,7 @@ class ServerEnvironment : public Environment
u32 m_game_time;
// A helper variable for incrementing the latter
float m_game_time_fraction_counter;
core::list<ABMWithState> m_abms;
std::list<ABMWithState> m_abms;
// An interval for generally sending object positions and stuff
float m_recommended_send_interval;
};
@@ -463,12 +469,19 @@ class ClientEnvironment : public Environment
// Get all nearby objects
void getActiveObjects(v3f origin, f32 max_d,
core::array<DistanceSortedActiveObject> &dest);
std::vector<DistanceSortedActiveObject> &dest);
// Get event from queue. CEE_NONE is returned if queue is empty.
ClientEnvEvent getClientEvent();
std::vector<core::vector2d<int> > attachment_list; // X is child ID, Y is parent ID
std::list<std::string> getPlayerNames()
{ return m_player_names; }
void addPlayerName(std::string name)
{ m_player_names.push_back(name); }
void removePlayerName(std::string name)
{ m_player_names.remove(name); }
private:
ClientMap *m_map;
@@ -476,11 +489,12 @@ class ClientEnvironment : public Environment
ITextureSource *m_texturesource;
IGameDef *m_gamedef;
IrrlichtDevice *m_irr;
core::map<u16, ClientActiveObject*> m_active_objects;
core::list<ClientSimpleObject*> m_simple_objects;
std::map<u16, ClientActiveObject*> m_active_objects;
std::list<ClientSimpleObject*> m_simple_objects;
Queue<ClientEnvEvent> m_client_event_queue;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;
std::list<std::string> m_player_names;
};
#endif

View File

@@ -112,13 +112,13 @@ struct HeightPoint
float have_sand;
float tree_amount;
};
core::map<v2s16, HeightPoint> g_heights;
std::map<v2s16, HeightPoint> g_heights;
HeightPoint ground_height(u64 seed, v2s16 p2d)
{
core::map<v2s16, HeightPoint>::Node *n = g_heights.find(p2d);
if(n)
return n->getValue();
std::map<v2s16, HeightPoint>::iterator n = g_heights.find(p2d);
if(n != g_heights.end())
return n->second;
HeightPoint hp;
s16 level = Mapgen::find_ground_level_from_noise(seed, p2d, 3);
hp.gh = (level-4)*BS;

File diff suppressed because it is too large Load Diff

View File

@@ -23,17 +23,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_extrabloated.h"
#include <string>
#include "keycode.h"
#include <list>
class KeyList : protected core::list<KeyPress>
class KeyList : protected std::list<KeyPress>
{
typedef core::list<KeyPress> super;
typedef super::Iterator Iterator;
typedef super::ConstIterator ConstIterator;
typedef std::list<KeyPress> super;
typedef super::iterator iterator;
typedef super::const_iterator const_iterator;
virtual ConstIterator find(const KeyPress &key) const
virtual const_iterator find(const KeyPress &key) const
{
ConstIterator f(begin());
ConstIterator e(end());
const_iterator f(begin());
const_iterator e(end());
while (f!=e) {
if (*f == key)
return f;
@@ -42,10 +43,10 @@ class KeyList : protected core::list<KeyPress>
return e;
}
virtual Iterator find(const KeyPress &key)
virtual iterator find(const KeyPress &key)
{
Iterator f(begin());
Iterator e(end());
iterator f(begin());
iterator e(end());
while (f!=e) {
if (*f == key)
return f;
@@ -65,14 +66,14 @@ class KeyList : protected core::list<KeyPress>
void unset(const KeyPress &key)
{
Iterator p(find(key));
iterator p(find(key));
if (p != end())
erase(p);
}
void toggle(const KeyPress &key)
{
Iterator p(this->find(key));
iterator p(this->find(key));
if (p != end())
erase(p);
else

View File

@@ -117,6 +117,18 @@ std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups)
return os.str();
}
std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump, float physics_override_gravity)
{
std::ostringstream os(std::ios::binary);
// command
writeU8(os, GENERIC_CMD_SET_PHYSICS_OVERRIDE);
// parameters
writeF1000(os, physics_override_speed);
writeF1000(os, physics_override_jump);
writeF1000(os, physics_override_gravity);
return os.str();
}
std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend)
{
std::ostringstream os(std::ios::binary);

View File

@@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define GENERIC_CMD_SET_ANIMATION 6
#define GENERIC_CMD_SET_BONE_POSITION 7
#define GENERIC_CMD_SET_ATTACHMENT 8
#define GENERIC_CMD_SET_PHYSICS_OVERRIDE 9
#include "object_properties.h"
std::string gob_cmd_set_properties(const ObjectProperties &prop);
@@ -62,6 +63,8 @@ std::string gob_cmd_punched(s16 damage, s16 result_hp);
#include "itemgroup.h"
std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups);
std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump, float physics_override_gravity);
std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend);
std::string gob_cmd_update_bone_position(std::string bone, v3f position, v3f rotation);

View File

@@ -31,7 +31,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Normal build: main.cpp
Server build: servermain.cpp
*/
enum TimePrecision {
PRECISION_SECONDS,
PRECISION_MILLI,
PRECISION_MICRO,
PRECISION_NANO
};
extern u32 getTimeMs();
extern u32 getTime(TimePrecision prec);
/*
Timestamp stuff

View File

@@ -121,6 +121,9 @@ GUIChatConsole::GUIChatConsole(
GUIChatConsole::~GUIChatConsole()
{
#if USE_FREETYPE
m_font->drop();
#endif
}
void GUIChatConsole::openConsole(f32 height)
@@ -131,6 +134,11 @@ void GUIChatConsole::openConsole(f32 height)
reformatConsole();
}
bool GUIChatConsole::isOpen() const
{
return m_open;
}
bool GUIChatConsole::isOpenInhibited() const
{
return m_open_inhibited > 0;
@@ -535,7 +543,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// Tab or Shift-Tab pressed
// Nick completion
core::list<std::wstring> names = m_client->getConnectedPlayerNames();
std::list<std::string> names = m_client->getConnectedPlayerNames();
bool backwards = event.KeyInput.Shift;
m_chat_backend->getPrompt().nickCompletion(names, backwards);
return true;

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