aboutsummaryrefslogtreecommitdiff
path: root/advtrains/helpers.lua
blob: ce059de02097ba96b9673362f5a0139f8f4bc431 (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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
--advtrains by orwell96, see readme.txt

local dir_trans_tbl={
	[0]={x=0, z=1, y=0},
	[1]={x=1, z=2, y=0},
	[2]={x=1, z=1, y=0},
	[3]={x=2, z=1, y=0},
	[4]={x=1, z=0, y=0},
	[5]={x=2, z=-1, y=0},
	[6]={x=1, z=-1, y=0},
	[7]={x=1, z=-2, y=0},
	[8]={x=0, z=-1, y=0},
	[9]={x=-1, z=-2, y=0},
	[10]={x=-1, z=-1, y=0},
	[11]={x=-2, z=-1, y=0},
	[12]={x=-1, z=0, y=0},
	[13]={x=-2, z=1, y=0},
	[14]={x=-1, z=1, y=0},
	[15]={x=-1, z=2, y=0},
}

local dir_angle_tbl={}
for d,v in pairs(dir_trans_tbl) do
	local uvec = vector.normalize(v)
	dir_angle_tbl[d] = math.atan2(-uvec.x, uvec.z)
end


function advtrains.dir_to_angle(dir)
	return dir_angle_tbl[dir] or error("advtrains: in helpers.lua/dir_to_angle() given dir="..(dir or "nil"))
end

function advtrains.dirCoordSet(coord, dir)
	return vector.add(coord, advtrains.dirToCoord(dir))
end
advtrains.pos_add_dir = advtrains.dirCoordSet

function advtrains.pos_add_angle(pos, ang)
	-- 0 is +Z -> meaning of sin/cos swapped
	return vector.add(pos, {x = -math.sin(ang), y = 0, z = math.cos(ang)})
end

function advtrains.dirToCoord(dir)
	return dir_trans_tbl[dir] or error("advtrains: in helpers.lua/dir_to_vector() given dir="..(dir or "nil"))
end
advtrains.dir_to_vector = advtrains.dirToCoord

function advtrains.maxN(list, expectstart)
	local n=expectstart or 0
	while list[n] do
		n=n+1
	end
	return n-1
end

function advtrains.minN(list, expectstart)
	local n=expectstart or 0
	while list[n] do
		n=n-1
	end
	return n+1
end

function atround(number)
	return math.floor(number+0.5)
end
atfloor = math.floor


function advtrains.round_vector_floor_y(vec)
	return {x=math.floor(vec.x+0.5), y=math.floor(vec.y), z=math.floor(vec.z+0.5)}
end

function advtrains.yawToDirection(yaw, conn1, conn2)
	if not conn1 or not conn2 then
		error("given nil to yawToDirection: conn1="..(conn1 or "nil").." conn2="..(conn1 or "nil"))
	end
	local yaw1 = advtrains.dir_to_angle(conn1)
	local yaw2 = advtrains.dir_to_angle(conn2)
	local adiff1 = advtrains.minAngleDiffRad(yaw, yaw1)
	local adiff2 = advtrains.minAngleDiffRad(yaw, yaw2)
	
	if math.abs(adiff2)<math.abs(adiff1) then
		return conn2
	else
		return conn1
	end
end

function advtrains.yawToAnyDir(yaw)
	local min_conn, min_diff=0, 10
	for conn, vec in pairs(advtrains.dir_trans_tbl) do
		local yaw1 = advtrains.dir_to_angle(conn)
		local diff = math.abs(advtrains.minAngleDiffRad(yaw, yaw1))
		if diff < min_diff then
			min_conn = conn
			min_diff = diff
		end
	end
	return min_conn
end
function advtrains.yawToClosestConn(yaw, conns)
	local min_connid, min_diff=1, 10
	for connid, conn in ipairs(conns) do
		local yaw1 = advtrains.dir_to_angle(conn.c)
		local diff = math.abs(advtrains.minAngleDiffRad(yaw, yaw1))
		if diff < min_diff then
			min_connid = connid
			min_diff = diff
		end
	end
	return min_connid
end

local pi, pi2 = math.pi, 2*math.pi
function advtrains.minAngleDiffRad(r1, r2)
	while r1>pi2 do
		r1=r1-pi2
	end
	while r1<0 do
		r1=r1+pi2
	end
	while r2>pi2 do
		r2=r2-pi2
	end
	while r1<0 do
		r2=r2+pi2
	end
	local try1=r2-r1
	local try2=r2+pi2-r1
	local try3=r2-pi2-r1
	
	local minabs = math.min(math.abs(try1), math.abs(try2), math.abs(try3))
	if minabs==math.abs(try1) then
		return try1
	end
	if minabs==math.abs(try2) then
		return try2
	end
	if minabs==math.abs(try3) then
		return try3
	end
end


-- Takes 2 connections (0...AT_CMAX) as argument
-- Returns the angle median of those 2 positions from the pov
-- of standing on the cdir1 side and looking towards cdir2
-- cdir1 - >NODE> - cdir2
function advtrains.conn_angle_median(cdir1, cdir2)
	local ang1 = advtrains.dir_to_angle(advtrains.oppd(cdir1))
	local ang2 = advtrains.dir_to_angle(cdir2)
	return ang1 + advtrains.minAngleDiffRad(ang1, ang2)/2
end

function advtrains.merge_tables(a, ...)
	local new={}
	for _,t in ipairs({a,...}) do
		for k,v in pairs(t) do new[k]=v end
	end
	return new
end
function advtrains.save_keys(tbl, keys)
	local new={}
	for _,key in ipairs(keys) do
		new[key] = tbl[key]
	end
	return new
end

function advtrains.get_real_index_position(path, index)
	if not path or not index then return end
	
	local first_pos=path[math.floor(index)]
	local second_pos=path[math.floor(index)+1]
	
	if not first_pos or not second_pos then return nil end
	
	local factor=index-math.floor(index)
	local actual_pos={x=first_pos.x-(first_pos.x-second_pos.x)*factor, y=first_pos.y-(first_pos.y-second_pos.y)*factor, z=first_pos.z-(first_pos.z-second_pos.z)*factor,}
	return actual_pos
end
function advtrains.pos_median(pos1, pos2)
	return {x=pos1.x-(pos1.x-pos2.x)*0.5, y=pos1.y-(pos1.y-pos2.y)*0.5, z=pos1.z-(pos1.z-pos2.z)*0.5}
end
function advtrains.abs_ceil(i)
	return math.ceil(math.abs(i))*math.sign(i)
end

function advtrains.serialize_inventory(inv)
	local ser={}
	local liszts=inv:get_lists()
	for lisztname, liszt in pairs(liszts) do
		ser[lisztname]={}
		for idx, item in ipairs(liszt) do
			local istring=item:to_string()
			if istring~="" then
				ser[lisztname][idx]=istring
			end
		end
	end
	return minetest.serialize(ser)
end
function advtrains.deserialize_inventory(sers, inv)
	local ser=minetest.deserialize(sers)
	if ser then
		inv:set_lists(ser)
		return true
	end
	return false
end

--is_protected wrapper that checks for protection_bypass privilege
function advtrains.is_protected(pos, name)
	if not name then
		error("advtrains.is_protected() called without name parameter!")
	end
	if minetest.check_player_privs(name, {protection_bypass=true}) then
		--player can bypass protection
		return false
	end
	return minetest.is_protected(pos, name)
end

function advtrains.is_creative(name)
	if not name then
		error("advtrains.is_creative() called without name parameter!")
	end
	if minetest.check_player_privs(name, {creative=true}) then
		return true
	end
	return minetest.settings:get_bool("creative_mode")
end

function advtrains.ms_to_kmh(speed)
	return speed * 3.6
end

-- 4 possible inputs:
-- integer: just do that modulo calculation
-- table with c set: rotate c
-- table with tables: rotate each
-- table with integers: rotate each (probably no use case)
function advtrains.rotate_conn_by(conn, rotate)
	if tonumber(conn) then
		return (conn+rotate)%AT_CMAX
	elseif conn.c then
		return { c = (conn.c+rotate)%AT_CMAX, y = conn.y}
	end
	local tmp={}
	for connid, data in ipairs(conn) do
		tmp[connid]=advtrains.rotate_conn_by(data, rotate)
	end
	return tmp
end


function advtrains.oppd(dir)
	return advtrains.rotate_conn_by(dir, AT_CMAX/2)
end
--conn_to_match like rotate_conn_by
--other_conns have to be a table of conn tables!
function advtrains.conn_matches_to(conn, other_conns)
	if tonumber(conn) then
		for connid, data in ipairs(other_conns) do
			if advtrains.oppd(conn) == data.c then return connid end
		end
		return false
	elseif conn.c then
		for connid, data in ipairs(other_conns) do
			local cmp = advtrains.oppd(conn)
			if cmp.c == data.c and (cmp.y or 0) == (data.y or 0) then return connid end
		end
		return false
	end
	local tmp={}
	for connid, data in ipairs(conn) do
		local backmatch = advtrains.conn_matches_to(data, other_conns)
		if backmatch then return backmatch, connid end --returns <connid of other rail> <connid of this rail>
	end
	return false
end


-- returns: <adjacent pos>, <conn index of adjacent>, <my conn index>, <railheight of adjacent>
function advtrains.get_adjacent_rail(this_posnr, this_conns_p, conn_idx, drives_on)
	local this_pos = advtrains.round_vector_floor_y(this_posnr)
	local this_conns = this_conns_p
	if not this_conns then
		_, this_conns = advtrains.get_rail_info_at(this_pos)
	end
	if not conn_idx then
		for coni, _ in ipairs(this_conns) do
			local adj_pos, adj_conn_idx, _, nry, nco = advtrains.get_adjacent_rail(this_pos, this_conns, coni)
			if adj_pos then return adj_pos,adj_conn_idx,coni,nry, nco end
		end
		return nil
	end
	
	local conn = this_conns[conn_idx]
	local conn_y = conn.y or 0
	local adj_pos = advtrains.dirCoordSet(this_pos, conn.c);
	
	while conn_y>=1 do
		conn_y = conn_y - 1
		adj_pos.y = adj_pos.y + 1
	end
	
	local nextnode_ok, nextconns, nextrail_y=advtrains.get_rail_info_at(adj_pos, drives_on)
	if not nextnode_ok then
		adj_pos.y = adj_pos.y - 1
		conn_y = conn_y + 1
		nextnode_ok, nextconns, nextrail_y=advtrains.get_rail_info_at(adj_pos, drives_on)
		if not nextnode_ok then
			return nil
		end
	end
	local adj_connid = advtrains.conn_matches_to({c=conn.c, y=conn_y}, nextconns)
	if adj_connid then
		return adj_pos, adj_connid, conn_idx, nextrail_y, nextconns
	end
	return nil
end

local connlku={[2]={2,1}, [3]={2,1,1}, [4]={2,1,4,3}}
function advtrains.get_matching_conn(conn, nconns)
	return connlku[nconns][conn]
end

function advtrains.random_id()
	local idst=""
	for i=0,5 do
		idst=idst..(math.random(0,9))
	end
	return idst
end

n/mainmenu/modmgr.lua:345 msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" #: builtin/mainmenu/modmgr.lua:365 #, fuzzy msgid "Failed to install $1 to $2" msgstr "Не вдалося ініціалізувати світ" #: builtin/mainmenu/modmgr.lua:368 msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" #: builtin/mainmenu/modmgr.lua:388 msgid "Install Mod: unable to find real modname for: $1" msgstr "" #: builtin/mainmenu/store.lua:88 msgid "Unsorted" msgstr "" #: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 msgid "Search" msgstr "" #: builtin/mainmenu/store.lua:126 msgid "Downloading $1, please wait..." msgstr "" #: builtin/mainmenu/store.lua:160 msgid "Successfully installed:" msgstr "" #: builtin/mainmenu/store.lua:162 #, fuzzy msgid "Shortname:" msgstr "Назва Світу" #: builtin/mainmenu/store.lua:472 msgid "Rating" msgstr "" #: builtin/mainmenu/store.lua:497 msgid "re-Install" msgstr "" #: builtin/mainmenu/store.lua:499 msgid "Install" msgstr "" #: builtin/mainmenu/store.lua:518 msgid "Close store" msgstr "" #: builtin/mainmenu/store.lua:526 msgid "Page $1 of $2" msgstr "" #: builtin/mainmenu/tab_credits.lua:22 msgid "Credits" msgstr "Подяка" #: builtin/mainmenu/tab_credits.lua:31 msgid "Core Developers" msgstr "" #: builtin/mainmenu/tab_credits.lua:47 msgid "Active Contributors" msgstr "" #: builtin/mainmenu/tab_credits.lua:54 msgid "Previous Core Developers" msgstr "" #: builtin/mainmenu/tab_credits.lua:59 msgid "Previous Contributors" msgstr "" #: builtin/mainmenu/tab_mods.lua:30 msgid "Installed Mods:" msgstr "" #: builtin/mainmenu/tab_mods.lua:39 msgid "Online mod repository" msgstr "" #: builtin/mainmenu/tab_mods.lua:78 msgid "No mod description available" msgstr "" #: builtin/mainmenu/tab_mods.lua:82 msgid "Mod information:" msgstr "" #: builtin/mainmenu/tab_mods.lua:93 msgid "Rename" msgstr "" #: builtin/mainmenu/tab_mods.lua:95 msgid "Uninstall selected modpack" msgstr "" #: builtin/mainmenu/tab_mods.lua:106 msgid "Uninstall selected mod" msgstr "" #: builtin/mainmenu/tab_mods.lua:121 #, fuzzy msgid "Select Mod File:" msgstr "Виберіть світ:" #: builtin/mainmenu/tab_mods.lua:165 msgid "Mods" msgstr "" #: builtin/mainmenu/tab_multiplayer.lua:23 #, fuzzy msgid "Address / Port :" msgstr "Адреса/Порт" #: builtin/mainmenu/tab_multiplayer.lua:24 #, fuzzy msgid "Name / Password :" msgstr "Ім'я/Пароль" #: builtin/mainmenu/tab_multiplayer.lua:29 #: builtin/mainmenu/tab_simple_main.lua:30 #, fuzzy msgid "Public Serverlist" msgstr "Список публічних серверів:" #: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 #: builtin/mainmenu/tab_singleplayer.lua:96 src/keycode.cpp:229 msgid "Delete" msgstr "Видалити" #: builtin/mainmenu/tab_multiplayer.lua:38 #: builtin/mainmenu/tab_simple_main.lua:34 msgid "Connect" msgstr "Підключитися" #: builtin/mainmenu/tab_multiplayer.lua:62 #: builtin/mainmenu/tab_simple_main.lua:45 #, fuzzy msgid "Creative mode" msgstr "Режим Створення" #: builtin/mainmenu/tab_multiplayer.lua:63 #: builtin/mainmenu/tab_simple_main.lua:46 #, fuzzy msgid "Damage enabled" msgstr "Увімкнено" #: builtin/mainmenu/tab_multiplayer.lua:64 #: builtin/mainmenu/tab_simple_main.lua:47 #, fuzzy msgid "PvP enabled" msgstr "Увімкнено" #: builtin/mainmenu/tab_multiplayer.lua:257 msgid "Client" msgstr "" #: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:97 msgid "New" msgstr "Новий" #: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:98 msgid "Configure" msgstr "Налаштувати" #: builtin/mainmenu/tab_server.lua:29 #, fuzzy msgid "Start Game" msgstr "Почати гру / Підключитися" #: builtin/mainmenu/tab_server.lua:30 #: builtin/mainmenu/tab_singleplayer.lua:100 msgid "Select World:" msgstr "Виберіть світ:" #: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 #: builtin/mainmenu/tab_singleplayer.lua:101 msgid "Creative Mode" msgstr "Режим Створення" #: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 #: builtin/mainmenu/tab_singleplayer.lua:103 msgid "Enable Damage" msgstr "Ввімкнути урон" #: builtin/mainmenu/tab_server.lua:35 msgid "Public" msgstr "Публичний" #: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 msgid "Name/Password" msgstr "Ім'я/Пароль" #: builtin/mainmenu/tab_server.lua:45 msgid "Bind Address" msgstr "" #: builtin/mainmenu/tab_server.lua:47 msgid "Port" msgstr "" #: builtin/mainmenu/tab_server.lua:51 msgid "Server Port" msgstr "" #: builtin/mainmenu/tab_server.lua:138 #: builtin/mainmenu/tab_singleplayer.lua:165 msgid "No world created or selected!" msgstr "" #: builtin/mainmenu/tab_server.lua:191 msgid "Server" msgstr "" #: builtin/mainmenu/tab_settings.lua:21 #, fuzzy msgid "Opaque Leaves" msgstr "Непрозора вода" #: builtin/mainmenu/tab_settings.lua:22 msgid "Simple Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua:23 #, fuzzy msgid "Fancy Leaves" msgstr "Гарні дерева" #: builtin/mainmenu/tab_settings.lua:32 msgid "No Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua:33 #, fuzzy msgid "Bilinear Filter" msgstr "Білінійна фільтрація" #: builtin/mainmenu/tab_settings.lua:34 #, fuzzy msgid "Trilinear Filter" msgstr "Трилінійна фільтрація" #: builtin/mainmenu/tab_settings.lua:43 msgid "No Mipmap" msgstr "" #: builtin/mainmenu/tab_settings.lua:44 msgid "Mipmap" msgstr "" #: builtin/mainmenu/tab_settings.lua:45 msgid "Mipmap + Aniso. Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua:98 msgid "Are you sure to reset your singleplayer world?" msgstr "" #: builtin/mainmenu/tab_settings.lua:102 msgid "No!!!" msgstr "" #: builtin/mainmenu/tab_settings.lua:202 msgid "Smooth Lighting" msgstr "Рівне освітлення" #: builtin/mainmenu/tab_settings.lua:204 msgid "Enable Particles" msgstr "Ввімкнути частки" #: builtin/mainmenu/tab_settings.lua:206 msgid "3D Clouds" msgstr "3D Хмари" #: builtin/mainmenu/tab_settings.lua:208 #, fuzzy msgid "Opaque Water" msgstr "Непрозора вода" #: builtin/mainmenu/tab_settings.lua:210 #, fuzzy msgid "Connected Glass" msgstr "Підключитися" #: builtin/mainmenu/tab_settings.lua:212 msgid "Node Highlighting" msgstr "" #: builtin/mainmenu/tab_settings.lua:217 msgid "Texturing:" msgstr "" #: builtin/mainmenu/tab_settings.lua:222 msgid "Rendering:" msgstr "" #: builtin/mainmenu/tab_settings.lua:226 msgid "Restart minetest for driver change to take effect" msgstr "" #: builtin/mainmenu/tab_settings.lua:228 msgid "Shaders" msgstr "Шейдери" #: builtin/mainmenu/tab_settings.lua:233 msgid "Change keys" msgstr "Змінити клавіши" #: builtin/mainmenu/tab_settings.lua:236 #, fuzzy msgid "Reset singleplayer world" msgstr "Одиночна гра" #: builtin/mainmenu/tab_settings.lua:240 msgid "GUI scale factor" msgstr "" #: builtin/mainmenu/tab_settings.lua:244 msgid "Scaling factor applied to menu elements: " msgstr "" #: builtin/mainmenu/tab_settings.lua:250 msgid "Touch free target" msgstr "" #: builtin/mainmenu/tab_settings.lua:256 msgid "Touchthreshold (px)" msgstr "" #: builtin/mainmenu/tab_settings.lua:263 builtin/mainmenu/tab_settings.lua:277 #, fuzzy msgid "Bumpmapping" msgstr "MIP-текстурування" #: builtin/mainmenu/tab_settings.lua:265 builtin/mainmenu/tab_settings.lua:278 msgid "Generate Normalmaps" msgstr "" #: builtin/mainmenu/tab_settings.lua:267 builtin/mainmenu/tab_settings.lua:279 msgid "Parallax Occlusion" msgstr "" #: builtin/mainmenu/tab_settings.lua:269 builtin/mainmenu/tab_settings.lua:280 msgid "Waving Water" msgstr "" #: builtin/mainmenu/tab_settings.lua:271 builtin/mainmenu/tab_settings.lua:281 msgid "Waving Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua:273 builtin/mainmenu/tab_settings.lua:282 msgid "Waving Plants" msgstr "" #: builtin/mainmenu/tab_settings.lua:308 msgid "To enable shaders the OpenGL driver needs to be used." msgstr "" #: builtin/mainmenu/tab_settings.lua:430 msgid "Settings" msgstr "Налаштування" #: builtin/mainmenu/tab_simple_main.lua:82 #, fuzzy msgid "Start Singleplayer" msgstr "Одиночна гра" #: builtin/mainmenu/tab_simple_main.lua:83 #, fuzzy msgid "Config mods" msgstr "Налаштувати" #: builtin/mainmenu/tab_simple_main.lua:201 #, fuzzy msgid "Main" msgstr "Головне Меню" #: builtin/mainmenu/tab_singleplayer.lua:99 src/keycode.cpp:248 msgid "Play" msgstr "Грати" #: builtin/mainmenu/tab_singleplayer.lua:246 msgid "Singleplayer" msgstr "Одиночна гра" #: builtin/mainmenu/tab_texturepacks.lua:49 msgid "Select texture pack:" msgstr "" #: builtin/mainmenu/tab_texturepacks.lua:69 msgid "No information available" msgstr "" #: builtin/mainmenu/tab_texturepacks.lua:114 msgid "Texturepacks" msgstr "" #: src/client.cpp:1721 #, fuzzy msgid "Loading textures..." msgstr "Завантаження..." #: src/client.cpp:1736 #, fuzzy msgid "Rebuilding shaders..." msgstr "Отримання адреси..." #: src/client.cpp:1743 msgid "Initializing nodes..." msgstr "" #: src/client.cpp:1760 msgid "Initializing nodes" msgstr "" #: src/client.cpp:1768 msgid "Item textures..." msgstr "Текстура предметів..." #: src/client.cpp:1793 msgid "Done!" msgstr "" #: src/client/clientlauncher.cpp:185 msgid "Main Menu" msgstr "Головне Меню" #: src/client/clientlauncher.cpp:223 msgid "Player name too long." msgstr "" #: src/client/clientlauncher.cpp:261 msgid "Connection error (timed out?)" msgstr "Помилка з'єднання (час вийшов?)" #: src/client/clientlauncher.cpp:425 msgid "No world selected and no address provided. Nothing to do." msgstr "Жоден світ не вибрано та не надано адреси. Нічого не робити." #: src/client/clientlauncher.cpp:432 msgid "Provided world path doesn't exist: " msgstr "" #: src/client/clientlauncher.cpp:441 msgid "Could not find or load game \"" msgstr "Неможливо знайти, або завантажити гру \"" #: src/client/clientlauncher.cpp:459 msgid "Invalid gamespec." msgstr "Помилкова конфігурація гри." #: src/fontengine.cpp:70 src/fontengine.cpp:226 msgid "needs_fallback_font" msgstr "" #: src/game.cpp:1052 src/guiFormSpecMenu.cpp:2065 msgid "Proceed" msgstr "Далі" #: src/game.cpp:1072 msgid "You died." msgstr "Ви загинули." #: src/game.cpp:1073 msgid "Respawn" msgstr "Народитися" #: src/game.cpp:1092 msgid "" "Default Controls:\n" "No menu visible:\n" "- single tap: button activate\n" "- double tap: place/use\n" "- slide finger: look around\n" "Menu/Inventory visible:\n" "- double tap (outside):\n" " -->close\n" "- touch stack, touch slot:\n" " --> move stack\n" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" #: src/game.cpp:1106 #, fuzzy 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" "- Space: стрибок/лізти в гору\n" "- Shift: крастися/лізти в низ\n" "- Q: кинути предмет\n" "- I: інвентар\n" "- Мишка: поворот/дивитися\n" "- Ліва клавіша миші: копати/удар\n" "- Права клавіша миші: поставити/використовувати\n" "- Колесо миші: вибір предмета\n" "- T: чат\n" #: src/game.cpp:1125 msgid "Continue" msgstr "Продовжити" #: src/game.cpp:1129 msgid "Change Password" msgstr "Змінити Пароль" #: src/game.cpp:1134 msgid "Sound Volume" msgstr "Гучність звуку" #: src/game.cpp:1136 #, fuzzy msgid "Change Keys" msgstr "Змінити клавіши" #: src/game.cpp:1139 msgid "Exit to Menu" msgstr "Вихід в меню" #: src/game.cpp:1141 msgid "Exit to OS" msgstr "Вихід з гри" #: src/game.cpp:1841 msgid "Shutting down..." msgstr "" #: src/game.cpp:1948 #, fuzzy msgid "Creating server..." msgstr "Створення сервера..." #: src/game.cpp:1984 msgid "Creating client..." msgstr "Створення клієнта..." #: src/game.cpp:2159 msgid "Resolving address..." msgstr "Отримання адреси..." #: src/game.cpp:2261 msgid "Connecting to server..." msgstr "Підключення до сервера..." #: src/game.cpp:2317 msgid "Item definitions..." msgstr "" #: src/game.cpp:2322 msgid "Node definitions..." msgstr "" #: src/game.cpp:2329 msgid "Media..." msgstr "" #: src/game.cpp:2334 msgid "KiB/s" msgstr "" #: src/game.cpp:2338 msgid "MiB/s" msgstr "" #: src/game.cpp:4363 msgid "" "\n" "Check debug.txt for details." msgstr "" "\n" "Деталі у файлі debug.txt." #: src/guiFormSpecMenu.cpp:2855 msgid "Enter " msgstr "" #: src/guiFormSpecMenu.cpp:2875 msgid "ok" msgstr "" #: src/guiKeyChangeMenu.cpp:125 msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Комбінації клавіш. (Якщо це меню зламалося, видаліть налаштування з minetest." "conf)" #: src/guiKeyChangeMenu.cpp:165 #, fuzzy msgid "\"Use\" = climb down" msgstr "\"Використовувати\" = підніматися в гору" #: src/guiKeyChangeMenu.cpp:180 msgid "Double tap \"jump\" to toggle fly" msgstr "Подвійний \"Стрибок\" щоб полетіти" #: src/guiKeyChangeMenu.cpp:295 msgid "Key already in use" msgstr "Клавіша вже використовується" #: src/guiKeyChangeMenu.cpp:373 msgid "press key" msgstr "Натисніть клавішу" #: src/guiKeyChangeMenu.cpp:399 msgid "Forward" msgstr "Уперед" #: src/guiKeyChangeMenu.cpp:400 msgid "Backward" msgstr "Назад" #: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:228 msgid "Left" msgstr "Ліворуч" #: src/guiKeyChangeMenu.cpp:402 src/keycode.cpp:228 msgid "Right" msgstr "Праворуч" #: src/guiKeyChangeMenu.cpp:403 msgid "Use" msgstr "Використовувати" #: src/guiKeyChangeMenu.cpp:404 msgid "Jump" msgstr "Стрибок" #: src/guiKeyChangeMenu.cpp:405 msgid "Sneak" msgstr "Крастися" #: src/guiKeyChangeMenu.cpp:406 msgid "Drop" msgstr "Викинути" #: src/guiKeyChangeMenu.cpp:407 msgid "Inventory" msgstr "Інвентар" #: src/guiKeyChangeMenu.cpp:408 msgid "Chat" msgstr "Чат" #: src/guiKeyChangeMenu.cpp:409 msgid "Command" msgstr "Комманда" #: src/guiKeyChangeMenu.cpp:410 msgid "Console" msgstr "Консоль" #: src/guiKeyChangeMenu.cpp:411 msgid "Toggle fly" msgstr "Переключити режим польоту" #: src/guiKeyChangeMenu.cpp:412 msgid "Toggle fast" msgstr "Переключити швидкий режим" #: src/guiKeyChangeMenu.cpp:413 #, fuzzy msgid "Toggle Cinematic" 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/guiPasswordChange.cpp:108 msgid "Old Password" msgstr "Старий Пароль" #: src/guiPasswordChange.cpp:124 msgid "New Password" msgstr "Новий Пароль" #: src/guiPasswordChange.cpp:139 msgid "Confirm Password" msgstr "Підтвердження нового пароля" #: src/guiPasswordChange.cpp:155 msgid "Change" msgstr "Змінити" #: src/guiPasswordChange.cpp:164 msgid "Passwords do not match!" msgstr "Паролі не збігаються!" #: src/guiVolumeChange.cpp:105 msgid "Sound Volume: " msgstr "Гучність Звуку: " #: src/guiVolumeChange.cpp:119 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 "Додаткова кнопка 1" #: src/keycode.cpp:224 #, fuzzy msgid "Back"