aboutsummaryrefslogtreecommitdiff
path: root/src/unittest/test_voxelalgorithms.cpp
blob: 31b9cadd56690f83e45e7a2e913d869759745a77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
/*
Minetest
Copyright (C) 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 "test.h"

#include "gamedef.h"
#include "voxelalgorithms.h"

class TestVoxelAlgorithms : public TestBase {
public:
	TestVoxelAlgorithms() { TestManager::registerTestModule(this); }
	const char *getName() { return "TestVoxelAlgorithms"; }

	void runTests(IGameDef *gamedef);

	void testPropogateSunlight(INodeDefManager *ndef);
	void testClearLightAndCollectSources(INodeDefManager *ndef);
};

static TestVoxelAlgorithms g_test_instance;

void TestVoxelAlgorithms::runTests(IGameDef *gamedef)
{
	INodeDefManager *ndef = gamedef->getNodeDefManager();

	TEST(testPropogateSunlight, ndef);
	TEST(testClearLightAndCollectSources, ndef);
}

////////////////////////////////////////////////////////////////////////////////

void TestVoxelAlgorithms::testPropogateSunlight(INodeDefManager *ndef)
{
	VoxelManipulator v;

	for (u16 z = 0; z < 3; z++)
	for (u16 y = 0; y < 3; y++)
	for (u16 x = 0; x < 3; x++) {
		v3s16 p(x,y,z);
		v.setNodeNoRef(p, MapNode(CONTENT_AIR));
	}

	VoxelArea a(v3s16(0,0,0), v3s16(2,2,2));

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, true, light_sources, ndef);
		//v.print(dstream, ndef, VOXELPRINT_LIGHT_DAY);
		UASSERT(res.bottom_sunlight_valid == true);
		UASSERT(v.getNode(v3s16(1,1,1)).getLight(LIGHTBANK_DAY, ndef)
				== LIGHT_SUN);
	}

	v.setNodeNoRef(v3s16(0,0,0), MapNode(t_CONTENT_STONE));

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, true, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
		UASSERT(v.getNode(v3s16(1,1,1)).getLight(LIGHTBANK_DAY, ndef)
				== LIGHT_SUN);
	}

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, false, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
		UASSERT(v.getNode(v3s16(2,0,2)).getLight(LIGHTBANK_DAY, ndef)
				== 0);
	}

	v.setNodeNoRef(v3s16(1,3,2), MapNode(t_CONTENT_STONE));

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, true, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
		UASSERT(v.getNode(v3s16(1,1,2)).getLight(LIGHTBANK_DAY, ndef)
				== 0);
	}

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, false, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
		UASSERT(v.getNode(v3s16(1,0,2)).getLight(LIGHTBANK_DAY, ndef)
				== 0);
	}

	{
		MapNode n(CONTENT_AIR);
		n.setLight(LIGHTBANK_DAY, 10, ndef);
		v.setNodeNoRef(v3s16(1,-1,2), n);
	}

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, true, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
	}

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, false, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
	}

	{
		MapNode n(CONTENT_AIR);
		n.setLight(LIGHTBANK_DAY, LIGHT_SUN, ndef);
		v.setNodeNoRef(v3s16(1,-1,2), n);
	}

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, true, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == false);
	}

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, false, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == false);
	}

	v.setNodeNoRef(v3s16(1,3,2), MapNode(CONTENT_IGNORE));

	{
		std::set<v3s16> light_sources;
		voxalgo::setLight(v, a, 0, ndef);
		voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
				v, a, true, light_sources, ndef);
		UASSERT(res.bottom_sunlight_valid == true);
	}
}

void TestVoxelAlgorithms::testClearLightAndCollectSources(INodeDefManager *ndef)
{
	VoxelManipulator v;

	for (u16 z = 0; z < 3; z++)
	for (u16 y = 0; y < 3; y++)
	for (u16 x = 0; x < 3; x++) {
		v3s16 p(x,y,z);
		v.setNode(p, MapNode(CONTENT_AIR));
	}

	VoxelArea a(v3s16(0,0,0), v3s16(2,2,2));
	v.setNodeNoRef(v3s16(0,0,0), MapNode(t_CONTENT_STONE));
	v.setNodeNoRef(v3s16(1,1,1), MapNode(t_CONTENT_TORCH));

	{
		MapNode n(CONTENT_AIR);
		n.setLight(LIGHTBANK_DAY, 1, ndef);
		v.setNode(v3s16(1,1,2), n);
	}

	{
		std::set<v3s16> light_sources;
		std::map<v3s16, u8> unlight_from;
		voxalgo::clearLightAndCollectSources(v, a, LIGHTBANK_DAY,
				ndef, light_sources, unlight_from);
		//v.print(dstream, ndef, VOXELPRINT_LIGHT_DAY);
		UASSERT(v.getNode(v3s16(0,1,1)).getLight(LIGHTBANK_DAY, ndef) == 0);
		UASSERT(light_sources.find(v3s16(1,1,1)) != light_sources.end());
		UASSERT(light_sources.size() == 1);
		UASSERT(unlight_from.find(v3s16(1,1,2)) != unlight_from.end());
		UASSERT(unlight_from.size() == 1);
	}
}
"hl kwa">msgstr "\"Use\" = descer" #: src/guiKeyChangeMenu.cpp:176 msgid "Double tap \"jump\" to toggle fly" msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" #: src/guiKeyChangeMenu.cpp:290 msgid "Key already in use" msgstr "Tecla já em uso" #: src/guiKeyChangeMenu.cpp:372 msgid "press key" msgstr "pressione a tecla" #: src/guiKeyChangeMenu.cpp:400 msgid "Forward" msgstr "Avançar" #: src/guiKeyChangeMenu.cpp:401 msgid "Backward" msgstr "Recuar" #: 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 "Agachar" #: src/guiKeyChangeMenu.cpp:407 msgid "Drop" msgstr "Largar" #: src/guiKeyChangeMenu.cpp:408 msgid "Inventory" msgstr "Inventário" #: src/guiKeyChangeMenu.cpp:409 msgid "Chat" msgstr "Conversa" #: src/guiKeyChangeMenu.cpp:410 msgid "Command" msgstr "Comando" #: src/guiKeyChangeMenu.cpp:411 msgid "Console" msgstr "Consola" #: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fly" msgstr "Ativar/Desativar vôo" #: src/guiKeyChangeMenu.cpp:413 msgid "Toggle fast" msgstr "Ativar/Desativar correr" #: src/guiKeyChangeMenu.cpp:414 msgid "Toggle noclip" msgstr "Ativar/Desativar noclip" #: src/guiKeyChangeMenu.cpp:415 msgid "Range select" msgstr "Seleccionar Distância" #: src/guiKeyChangeMenu.cpp:416 msgid "Print stacks" msgstr "Imprimir stacks" #: src/guiMainMenu.cpp:92 msgid "Cannot create world: Name contains invalid characters" msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" #: src/guiMainMenu.cpp:103 msgid "Cannot create world: A world by this name already exists" msgstr "Não foi possível criar mundo: Já existe um mundo com este 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 "Definições" #: src/guiMainMenu.cpp:297 msgid "Credits" msgstr "Créditos" #: src/guiMainMenu.cpp:330 msgid "Select World:" msgstr "Seleccionar Mundo:" #: src/guiMainMenu.cpp:360 src/guiMainMenu.cpp:578 src/keycode.cpp:229 msgid "Delete" msgstr "Eliminar" #: 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 "Ativar 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 "Mostrar Públicos" #: src/guiMainMenu.cpp:567 src/guiMainMenu.cpp:1337 msgid "Show Favorites" msgstr "Mostrar Favoritos" #: src/guiMainMenu.cpp:591 msgid "Connect" msgstr "Ligar" #: 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:678 msgid "Start Game / Connect" msgstr "Iniciar Jogo / Conectar" #: 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:735 msgid "Create world" msgstr "Criar mundo" #: src/guiMainMenu.cpp:773 msgid "Fancy trees" msgstr "Árvores Melhoradas" #: 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 "Filtro Anisotrópico" #: src/guiMainMenu.cpp:827 msgid "Bi-Linear Filtering" msgstr "Filtro Bi-Linear" #: src/guiMainMenu.cpp:836 msgid "Tri-Linear Filtering" msgstr "Filtro Tri-Linear" #: src/guiMainMenu.cpp:846 msgid "Shaders" msgstr "Sombras" #: src/guiMainMenu.cpp:855 msgid "Preload item visuals" msgstr "Pré-carregamento dos itens" #: src/guiMainMenu.cpp:864 msgid "Enable Particles" msgstr "Ativar 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 "Endereço necessário." #: src/guiMainMenu.cpp:1231 msgid "Cannot delete world: Nothing selected" msgstr "Não foi possível eliminar mundo: Nada seleccionado" #: src/guiMainMenu.cpp:1246 msgid "Files to be deleted" msgstr "Ficheiros para eliminar" #: src/guiMainMenu.cpp:1267 msgid "Cannot create world: No games found" msgstr "Não foi possível criar mundo: Não foram detectados jogos" #: src/guiMainMenu.cpp:1286 msgid "Cannot configure world: Nothing selected" msgstr "Não foi possível configurar mundo: Nada seleccionado" #: src/guiMainMenu.cpp:1428 msgid "Failed to delete all world files" msgstr "Falhou a remoção de todos os ficheiros dos mundos" #: src/guiPasswordChange.cpp:107 msgid "Old Password" msgstr "Senha antiga" #: src/guiPasswordChange.cpp:125 msgid "New Password" msgstr "Senha Nova" #: src/guiPasswordChange.cpp:142 msgid "Confirm Password" msgstr "Confirmar Senha" #: src/guiPasswordChange.cpp:160 msgid "Change" msgstr "Mudar" #: src/guiPasswordChange.cpp:169 msgid "Passwords do not match!" msgstr "Senhas não correspondem!" #: src/guiPauseMenu.cpp:122 msgid "Continue" msgstr "Continuar" #: src/guiPauseMenu.cpp:133 msgid "Change Password" msgstr "Mudar Senha" #: 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:161 msgid "Exit to OS" msgstr "Sair para o sistema" #: 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 "" "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" "- 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:107 msgid "Sound Volume: " msgstr "Volume do som: " #: src/guiVolumeChange.cpp:121 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 Rato" #: 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 "Voltar" #: src/keycode.cpp:224 msgid "Clear" msgstr "Limpar" #: src/keycode.cpp:224 msgid "Return" msgstr "Enter" #: src/keycode.cpp:224 msgid "Tab" msgstr "Tabulação" #: src/keycode.cpp:224 msgid "X Button 2" msgstr "Botão X 2" #: src/keycode.cpp:225 msgid "Capital" msgstr "Capital" #: 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 "Pausa" #: src/keycode.cpp:225 msgid "Shift" msgstr "Shift" #: src/keycode.cpp:226 msgid "Convert" msgstr "Converter" #: 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 "Nãoconverter" #: 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 "Próximo" #: src/keycode.cpp:227 msgid "Prior" msgstr "Prévio" #: src/keycode.cpp:227 msgid "Space" msgstr "Espaço" #: src/keycode.cpp:228 msgid "Down" msgstr "Baixo" #: src/keycode.cpp:228 msgid "Execute" msgstr "Executar" #: src/keycode.cpp:228 msgid "Print" msgstr "Print" #: src/keycode.cpp:228 msgid "Select" msgstr "Seleccionar" #: src/keycode.cpp:228 msgid "Up" msgstr "Cima" #: src/keycode.cpp:229 msgid "Help" msgstr "Ajuda" #: src/keycode.cpp:229 msgid "Insert" msgstr "Insert" #: src/keycode.cpp:229 msgid "Snapshot" msgstr "Screenshot" #: src/keycode.cpp:232 msgid "Left Windows" msgstr "WINDOWS Esq." #: src/keycode.cpp:233 msgid "Apps" msgstr "App" #: 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 "WINDOWS Dir." #: src/keycode.cpp:233 msgid "Sleep" msgstr "Suspender" #: 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 "Shift Esquerdo" #: src/keycode.cpp:240 msgid "Right Shift" msgstr "Shift Direito" #: src/keycode.cpp:241 msgid "Left Control" msgstr "Control Esq" #: src/keycode.cpp:241 msgid "Left Menu" msgstr "Menu Esquerdo" #: src/keycode.cpp:241 msgid "Right Control" msgstr "Control Direito" #: src/keycode.cpp:241 msgid "Right Menu" msgstr "Menu Direito" #: src/keycode.cpp:243 msgid "Comma" msgstr "Virgula" #: src/keycode.cpp:243 msgid "Minus" msgstr "Menos" #: src/keycode.cpp:243 msgid "Period" msgstr "Período" #: src/keycode.cpp:243 msgid "Plus" msgstr "Mais" #: src/keycode.cpp:247 msgid "Attn" msgstr "Attm" #: 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 "PAL" #: src/keycode.cpp:248 msgid "Zoom" msgstr "Zoom" #: src/main.cpp:1680 msgid "Main Menu" msgstr "Menu Principal" #: src/main.cpp:2040 msgid "Failed to initialize world" msgstr "Falha ao iniciar mundo" #: src/main.cpp:2053 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:2061 msgid "Could not find or load game \"" msgstr "Não foi possível encontrar ou carregar jogo \"" #: src/main.cpp:2075 msgid "Invalid gamespec." msgstr "gamespec inválido." #: src/main.cpp:2116 msgid "Connection error (timed out?)" msgstr "Erro de conexão (excedeu tempo?)" #~ 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" #~ msgid "" #~ "Warning: Some configured mods are missing.\n" #~ "Their setting will be removed when you save the configuration. " #~ msgstr "" #~ "Atenção: Alguns mods configurados estão em falta.\n" #~ "As suas definições vão ser removidas quando gravar a configuração. " #~ 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 estão configurados.\n" #~ "Eles vão ser ativados por predefinição quando guardar a configuração. "