Merge branch 'master' of https://github.com/Anuken/Mindustry into crux-floor
# Conflicts: # gradle.properties
This commit is contained in:
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Show FPS & Ping
|
setting.fps.name = Show FPS & Ping
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelate
|
setting.pixelate.name = Pixelate
|
||||||
setting.minimap.name = Show Minimap
|
setting.minimap.name = Show Minimap
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat Scroll
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Drop Unit
|
keybind.drop_unit.name = Drop Unit
|
||||||
keybind.zoom_minimap.name = Zoom Minimap
|
keybind.zoom_minimap.name = Zoom Minimap
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Description of modes
|
mode.help.title = Description of modes
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
||||||
@@ -2455,8 +2459,8 @@ unit.evoke.description = Builds structures to defend the Bastion core. Repairs s
|
|||||||
unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam. Capable of carrying 2x2 structures.
|
unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam. Capable of carrying 2x2 structures.
|
||||||
unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams. Capable of carrying 2x2 structures.
|
unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams. Capable of carrying 2x2 structures.
|
||||||
|
|
||||||
lst.read = Read a number from a linked memory cell.
|
lst.read = Read a number from a linked memory cell.\nCan also read from variables in other processors.
|
||||||
lst.write = Write a number to a linked memory cell.
|
lst.write = Write a number to a linked memory cell.\nCan also write to variables in other processors.
|
||||||
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
||||||
lst.printchar = Add a UTF-16 character or content icon to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
lst.printchar = Add a UTF-16 character or content icon to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
|
||||||
lst.format = Replace next placeholder in text buffer with a value.\nDoes not do anything if placeholder pattern is invalid.\nPlaceholder pattern: "{[accent]number 0-9[]}"\nExample:\n[accent]print "test {0}"\nformat "example"
|
lst.format = Replace next placeholder in text buffer with a value.\nDoes not do anything if placeholder pattern is invalid.\nPlaceholder pattern: "{[accent]number 0-9[]}"\nExample:\n[accent]print "test {0}"\nformat "example"
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = For messages: Length of the contents.\nFor displays: Number of unprocessed graphics commands.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Каб ужыць змены можа п
|
|||||||
setting.fps.name = Паказваць FPS і пінг
|
setting.fps.name = Паказваць FPS і пінг
|
||||||
setting.console.name = Уключыць Тэрмінал
|
setting.console.name = Уключыць Тэрмінал
|
||||||
setting.smoothcamera.name = Павольная Камера
|
setting.smoothcamera.name = Павольная Камера
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Вертыкальная сінхранізацыя
|
setting.vsync.name = Вертыкальная сінхранізацыя
|
||||||
setting.pixelate.name = Пікселізацыя
|
setting.pixelate.name = Пікселізацыя
|
||||||
setting.minimap.name = Адлюстроўваць міні-карту
|
setting.minimap.name = Адлюстроўваць міні-карту
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Прагортка чата
|
|||||||
keybind.chat_mode.name = Змяніць Рэжым Чату
|
keybind.chat_mode.name = Змяніць Рэжым Чату
|
||||||
keybind.drop_unit.name = Скінуць баёў. адз.
|
keybind.drop_unit.name = Скінуць баёў. адз.
|
||||||
keybind.zoom_minimap.name = Маштабаваць міні-карту
|
keybind.zoom_minimap.name = Маштабаваць міні-карту
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Апісанне рэжымаў
|
mode.help.title = Апісанне рэжымаў
|
||||||
mode.survival.name = Выжыванне
|
mode.survival.name = Выжыванне
|
||||||
mode.survival.description = Звычайны рэжым. Неабходна здабываць рэсурсы, а хвалі наступаюць аўтаматычна. \n[gray]Патрабуецца пункт з’яўлення ворагаў на карце для гульні.
|
mode.survival.description = Звычайны рэжым. Неабходна здабываць рэсурсы, а хвалі наступаюць аўтаматычна. \n[gray]Патрабуецца пункт з’яўлення ворагаў на карце для гульні.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Може да е нужен рестар
|
|||||||
setting.fps.name = Показвай FPS & пинг
|
setting.fps.name = Показвай FPS & пинг
|
||||||
setting.console.name = Включване на конзолата
|
setting.console.name = Включване на конзолата
|
||||||
setting.smoothcamera.name = Гладка камера
|
setting.smoothcamera.name = Гладка камера
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Вертикална синхронизация (VSync)
|
setting.vsync.name = Вертикална синхронизация (VSync)
|
||||||
setting.pixelate.name = Пикселизация
|
setting.pixelate.name = Пикселизация
|
||||||
setting.minimap.name = Показвай мини-карта
|
setting.minimap.name = Показвай мини-карта
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Превъртане на чата
|
|||||||
keybind.chat_mode.name = Смени режим на чат
|
keybind.chat_mode.name = Смени режим на чат
|
||||||
keybind.drop_unit.name = Остави единица
|
keybind.drop_unit.name = Остави единица
|
||||||
keybind.zoom_minimap.name = Увеличи мини-карта
|
keybind.zoom_minimap.name = Увеличи мини-карта
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Описание на режими
|
mode.help.title = Описание на режими
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = Нормалният режим на играта. Ограничени ресурси и автоматични вълни от нападатели.\n[gray]Картата трябва да съдържа начална точка за враговете.
|
mode.survival.description = Нормалният режим на играта. Ограничени ресурси и автоматични вълни от нападатели.\n[gray]Картата трябва да съдържа начална точка за враговете.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID на единица/блок/предмет/течност.\nТази операция е обратната на търсенето.
|
laccess.id = ID на единица/блок/предмет/течност.\nТази операция е обратната на търсенето.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Неизвестно
|
lcategory.unknown = Неизвестно
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Potser caldrà reiniciar el joc per a apl
|
|||||||
setting.fps.name = Mostra els FPS i el ping
|
setting.fps.name = Mostra els FPS i el ping
|
||||||
setting.console.name = Activa la consola
|
setting.console.name = Activa la consola
|
||||||
setting.smoothcamera.name = Moviment de càmera suau
|
setting.smoothcamera.name = Moviment de càmera suau
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Sincronització vertical (VSync)
|
setting.vsync.name = Sincronització vertical (VSync)
|
||||||
setting.pixelate.name = Pixela
|
setting.pixelate.name = Pixela
|
||||||
setting.minimap.name = Mostra el minimapa
|
setting.minimap.name = Mostra el minimapa
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Historial del xat: Desplaça
|
|||||||
keybind.chat_mode.name = Canvia el mode del xat
|
keybind.chat_mode.name = Canvia el mode del xat
|
||||||
keybind.drop_unit.name = Deixa anar la unitat
|
keybind.drop_unit.name = Deixa anar la unitat
|
||||||
keybind.zoom_minimap.name = Apropa/Allunya la vista del minimapa
|
keybind.zoom_minimap.name = Apropa/Allunya la vista del minimapa
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Descripció dels modes
|
mode.help.title = Descripció dels modes
|
||||||
mode.survival.name = Supervivència
|
mode.survival.name = Supervivència
|
||||||
mode.survival.description = El mode normal. Hi ha recursos limitats i les onades són automàtiques.\n[gray]Cal que al mapa hi hagin llocs d’aparició d’enemics.
|
mode.survival.description = El mode normal. Hi ha recursos limitats i les onades són automàtiques.\n[gray]Cal que al mapa hi hagin llocs d’aparició d’enemics.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = Identificador d’unitat/bloc/element/líquid.\nÉs l’invers de l’operació lookup.
|
laccess.id = Identificador d’unitat/bloc/element/líquid.\nÉs l’invers de l’operació lookup.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Desconegut
|
lcategory.unknown = Desconegut
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Pro aplikování změn, je potřeba resta
|
|||||||
setting.fps.name = Ukázat FPS a ping
|
setting.fps.name = Ukázat FPS a ping
|
||||||
setting.console.name = Povolit Konzoli
|
setting.console.name = Povolit Konzoli
|
||||||
setting.smoothcamera.name = Plynulá kamera
|
setting.smoothcamera.name = Plynulá kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Vertikální synchronizace
|
setting.vsync.name = Vertikální synchronizace
|
||||||
setting.pixelate.name = Rozpixlovat
|
setting.pixelate.name = Rozpixlovat
|
||||||
setting.minimap.name = Ukázat Mini mapu
|
setting.minimap.name = Ukázat Mini mapu
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Rolování kanálu zpráv
|
|||||||
keybind.chat_mode.name = Změnit Chat režim
|
keybind.chat_mode.name = Změnit Chat režim
|
||||||
keybind.drop_unit.name = Zahodit jednotku
|
keybind.drop_unit.name = Zahodit jednotku
|
||||||
keybind.zoom_minimap.name = Přiblížit mapu
|
keybind.zoom_minimap.name = Přiblížit mapu
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Popis režimů
|
mode.help.title = Popis režimů
|
||||||
mode.survival.name = Hra o přežití
|
mode.survival.name = Hra o přežití
|
||||||
mode.survival.description = Klasický režim. Zdroje jsou limitované a vlny nepřátel přicházejí automaticky.\n[gray]Vyžaduje, aby v mapě bylo místo pro líhnutí nepřátel.[]
|
mode.survival.description = Klasický režim. Zdroje jsou limitované a vlny nepřátel přicházejí automaticky.\n[gray]Vyžaduje, aby v mapě bylo místo pro líhnutí nepřátel.[]
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Šířka displeje v pixelech.
|
laccess.displaywidth = Šířka displeje v pixelech.
|
||||||
laccess.displayheight = Výška displeje v pixelech.
|
laccess.displayheight = Výška displeje v pixelech.
|
||||||
laccess.bufferusage = Počet nezpracovaných příkazů ve vyrovnávací paměti displeje.
|
laccess.buffersize = Počet nezpracovaných příkazů ve vyrovnávací paměti displeje.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Neznámé
|
lcategory.unknown = Neznámé
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Vis FPS & Ping
|
setting.fps.name = Vis FPS & Ping
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Blødt kamera
|
setting.smoothcamera.name = Blødt kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixeler
|
setting.pixelate.name = Pixeler
|
||||||
setting.minimap.name = Vis minikort
|
setting.minimap.name = Vis minikort
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat-scroll
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Smid enhed
|
keybind.drop_unit.name = Smid enhed
|
||||||
keybind.zoom_minimap.name = Zoom Minikort
|
keybind.zoom_minimap.name = Zoom Minikort
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Beskrivelse af tilstande
|
mode.help.title = Beskrivelse af tilstande
|
||||||
mode.survival.name = Overlevelse
|
mode.survival.name = Overlevelse
|
||||||
mode.survival.description = Den normale tilstand. Begrænsede resurser og automatisk igangsættelse af bølger.\n[gray]Kræver fjendtlig base for at spille.
|
mode.survival.description = Den normale tilstand. Begrænsede resurser og automatisk igangsættelse af bølger.\n[gray]Kræver fjendtlig base for at spille.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Neustart vielleicht erforderlich.
|
|||||||
setting.fps.name = FPS anzeigen
|
setting.fps.name = FPS anzeigen
|
||||||
setting.console.name = Konsole freigeben
|
setting.console.name = Konsole freigeben
|
||||||
setting.smoothcamera.name = Sanfte Kamerabewegungen
|
setting.smoothcamera.name = Sanfte Kamerabewegungen
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Verpixeln [lightgray](Könnte die Leistung beeinträchtigen)
|
setting.pixelate.name = Verpixeln [lightgray](Könnte die Leistung beeinträchtigen)
|
||||||
setting.minimap.name = Zeige die Minimap
|
setting.minimap.name = Zeige die Minimap
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat scrollen
|
|||||||
keybind.chat_mode.name = Chatmodus ändern
|
keybind.chat_mode.name = Chatmodus ändern
|
||||||
keybind.drop_unit.name = Einheit absetzen
|
keybind.drop_unit.name = Einheit absetzen
|
||||||
keybind.zoom_minimap.name = Minimap-Zoom
|
keybind.zoom_minimap.name = Minimap-Zoom
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Beschreibung der Modi
|
mode.help.title = Beschreibung der Modi
|
||||||
mode.survival.name = Überleben
|
mode.survival.name = Überleben
|
||||||
mode.survival.description = Der normale Modus. Ressourcen sind limitiert und Wellen kommen automatisch.\n[gray]Gegnerische Spawns auf der Karte sind erforderlich.
|
mode.survival.description = Der normale Modus. Ressourcen sind limitiert und Wellen kommen automatisch.\n[gray]Gegnerische Spawns auf der Karte sind erforderlich.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID einer Einheit/eines Blocks/eines Materials/einer Flüssigkeit\nThis is the inverse of the lookup operation.
|
laccess.id = ID einer Einheit/eines Blocks/eines Materials/einer Flüssigkeit\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unbekannt
|
lcategory.unknown = Unbekannt
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Aplicar los cambios podría requerir un r
|
|||||||
setting.fps.name = Mostrar FPS y ping
|
setting.fps.name = Mostrar FPS y ping
|
||||||
setting.console.name = Activar consola
|
setting.console.name = Activar consola
|
||||||
setting.smoothcamera.name = Movimiento de cámara suave
|
setting.smoothcamera.name = Movimiento de cámara suave
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Sincronización vertical
|
setting.vsync.name = Sincronización vertical
|
||||||
setting.pixelate.name = Pixelar
|
setting.pixelate.name = Pixelar
|
||||||
setting.minimap.name = Mostrar minimapa
|
setting.minimap.name = Mostrar minimapa
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Historial de chat - Desplazar
|
|||||||
keybind.chat_mode.name = Cambiar modo de chat
|
keybind.chat_mode.name = Cambiar modo de chat
|
||||||
keybind.drop_unit.name = Soltar unidad
|
keybind.drop_unit.name = Soltar unidad
|
||||||
keybind.zoom_minimap.name = Zoom del minimapa
|
keybind.zoom_minimap.name = Zoom del minimapa
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Descripción
|
mode.help.title = Descripción
|
||||||
mode.survival.name = Supervivencia
|
mode.survival.name = Supervivencia
|
||||||
mode.survival.description = El modo normal. Recursos limitados y oleadas automáticas.\n[gray]Requiere puntos de aterrizaje enemigos en el mapa.
|
mode.survival.description = El modo normal. Recursos limitados y oleadas automáticas.\n[gray]Requiere puntos de aterrizaje enemigos en el mapa.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Desconocido
|
lcategory.unknown = Desconocido
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Näita kaadrite arvu sekundis
|
setting.fps.name = Näita kaadrite arvu sekundis
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Vertikaalne sünkroonimine
|
setting.vsync.name = Vertikaalne sünkroonimine
|
||||||
setting.pixelate.name = Piksel-efekt[lightgray] (lülitab animatsioonid välja)
|
setting.pixelate.name = Piksel-efekt[lightgray] (lülitab animatsioonid välja)
|
||||||
setting.minimap.name = Näita kaarti
|
setting.minimap.name = Näita kaarti
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Vestlusaken: kerimine
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Heida väeüksus
|
keybind.drop_unit.name = Heida väeüksus
|
||||||
keybind.zoom_minimap.name = Suumi kaarti
|
keybind.zoom_minimap.name = Suumi kaarti
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Mänguviiside kirjeldused
|
mode.help.title = Mänguviiside kirjeldused
|
||||||
mode.survival.name = Ellujäämine
|
mode.survival.name = Ellujäämine
|
||||||
mode.survival.description = Tavaline mänguviis. Piiratud ressursid. Lahingulainetena lähenevad vaenlased.
|
mode.survival.description = Tavaline mänguviis. Piiratud ressursid. Lahingulainetena lähenevad vaenlased.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Erakutsi FPS
|
setting.fps.name = Erakutsi FPS
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelatu[lightgray] (animazioak desgaitzen ditu)
|
setting.pixelate.name = Pixelatu[lightgray] (animazioak desgaitzen ditu)
|
||||||
setting.minimap.name = Erakutsi mapatxoa
|
setting.minimap.name = Erakutsi mapatxoa
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Korritu txata
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Lurreratu unitatea
|
keybind.drop_unit.name = Lurreratu unitatea
|
||||||
keybind.zoom_minimap.name = Mapatxoaren zooma
|
keybind.zoom_minimap.name = Mapatxoaren zooma
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Moduen deskripzioa
|
mode.help.title = Moduen deskripzioa
|
||||||
mode.survival.name = Biziraupena
|
mode.survival.name = Biziraupena
|
||||||
mode.survival.description = Modu arrunta. Baliabide mugatuak eta bolada automatikoak.\n[gray]Jolasteko etsaien sortze puntuak behar dira mapan.
|
mode.survival.description = Modu arrunta. Baliabide mugatuak eta bolada automatikoak.\n[gray]Jolasteko etsaien sortze puntuak behar dira mapan.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Uudelleenkäynnistys saatetaan vaatia muu
|
|||||||
setting.fps.name = Näytä FPS
|
setting.fps.name = Näytä FPS
|
||||||
setting.console.name = Salli konsoli
|
setting.console.name = Salli konsoli
|
||||||
setting.smoothcamera.name = Pehmeä kamera
|
setting.smoothcamera.name = Pehmeä kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixeloi[lightgray] (poistaa animaation käytöstä)
|
setting.pixelate.name = Pixeloi[lightgray] (poistaa animaation käytöstä)
|
||||||
setting.minimap.name = Näytä pienoiskartta
|
setting.minimap.name = Näytä pienoiskartta
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Kelaa keskustelua
|
|||||||
keybind.chat_mode.name = Vaihda keskustelutilaa
|
keybind.chat_mode.name = Vaihda keskustelutilaa
|
||||||
keybind.drop_unit.name = Pudota yksikkö
|
keybind.drop_unit.name = Pudota yksikkö
|
||||||
keybind.zoom_minimap.name = Zoomaa pienoiskarttaa
|
keybind.zoom_minimap.name = Zoomaa pienoiskarttaa
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Pelitilojen kuvaus
|
mode.help.title = Pelitilojen kuvaus
|
||||||
mode.survival.name = Selviytyminen
|
mode.survival.name = Selviytyminen
|
||||||
mode.survival.description = Normaali tila. Rajoitettu määrä resursseja ja tasoilla on aika.\n[gray]Vaatii vihollisten syntymispisteen kartassa.
|
mode.survival.description = Normaali tila. Rajoitettu määrä resursseja ja tasoilla on aika.\n[gray]Vaatii vihollisten syntymispisteen kartassa.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Tuntematon
|
lcategory.unknown = Tuntematon
|
||||||
|
|||||||
@@ -261,8 +261,8 @@ servers.local.steam = Buksan ang Mga Laro at Lokal na Server
|
|||||||
servers.remote = Remote Servers
|
servers.remote = Remote Servers
|
||||||
servers.global = Server ng Komunidad
|
servers.global = Server ng Komunidad
|
||||||
|
|
||||||
servers.disclaimer = Ang mga server ng komunidad ay [accent]hindi pagmamay-ari o kinokontrol[] ng developer.\n\nServers may contain user-generated content that is not appropriate for all ages.
|
servers.disclaimer = Ang mga server ng komunidad ay [accent]hindi pagmamay-ari o kinokontrol[] ng developer.\n\nAng mga Server ay may merong content na user-generated hindi bagay sa lahat ng taon.
|
||||||
servers.showhidden = Show Hidden Servers
|
servers.showhidden = Ipakita ang mga tinagong server
|
||||||
server.shown = Ipinapakita
|
server.shown = Ipinapakita
|
||||||
server.hidden = Tinatago
|
server.hidden = Tinatago
|
||||||
|
|
||||||
@@ -452,7 +452,7 @@ editor.brush = Brush
|
|||||||
editor.openin = I-Open sa Editor
|
editor.openin = I-Open sa Editor
|
||||||
editor.oregen = Ore Generation
|
editor.oregen = Ore Generation
|
||||||
editor.oregen.info = Ore Generation:
|
editor.oregen.info = Ore Generation:
|
||||||
editor.mapinfo = Map Info
|
editor.mapinfo = Inpormasyon ng Mapa
|
||||||
editor.author = Author:
|
editor.author = Author:
|
||||||
editor.description = Description:
|
editor.description = Description:
|
||||||
editor.nodescription = Dapat meron paglalarawan ng hindi bababa sa 4 na character bago i-publish.
|
editor.nodescription = Dapat meron paglalarawan ng hindi bababa sa 4 na character bago i-publish.
|
||||||
@@ -462,14 +462,14 @@ editor.generation = Pagbuo:
|
|||||||
editor.objectives = Mga Gawain
|
editor.objectives = Mga Gawain
|
||||||
editor.locales = Locale Bundles
|
editor.locales = Locale Bundles
|
||||||
editor.worldprocessors = Proseso ng Map
|
editor.worldprocessors = Proseso ng Map
|
||||||
editor.worldprocessors.editname = Edit Name
|
editor.worldprocessors.editname = Iedit ang pangalan
|
||||||
editor.worldprocessors.none = [lightgray]No world processor blocks found!\nAdd one in the map editor, or use the \ue813 Add button below.
|
editor.worldprocessors.none = [lightgray]No world processor blocks found!\nAdd one in the map editor, or use the \ue813 Add button below.
|
||||||
editor.worldprocessors.nospace = No free space to place a world processor!\nDid you fill the map with structures? Why would you do this?
|
editor.worldprocessors.nospace = No free space to place a world processor!\nDid you fill the map with structures? Why would you do this?
|
||||||
editor.worldprocessors.delete.confirm = Are you sure you want to delete this world processor?\n\nIf it is surrounded by walls, it will be replaced by an environmental wall.
|
editor.worldprocessors.delete.confirm = Sigurado ka ba na gusto ng itanggalin ang itong world processor?\n\nPag ito ay na-surround ng mga wall, ito ay papalitan ng.
|
||||||
editor.ingame = Edit In-Game
|
editor.ingame = Edit In-Game
|
||||||
editor.playtest = Playtest
|
editor.playtest = Playtest
|
||||||
editor.publish.workshop = I-Publish Sa Workshop
|
editor.publish.workshop = I-Publish Sa Workshop
|
||||||
editor.newmap = New Map
|
editor.newmap = Bagong Mapa
|
||||||
editor.center = Center
|
editor.center = Center
|
||||||
editor.search = Search maps...
|
editor.search = Search maps...
|
||||||
editor.filters = I-filter ang Maps
|
editor.filters = I-filter ang Maps
|
||||||
@@ -504,7 +504,7 @@ waves.load = I-Load mula sa Clipboard
|
|||||||
waves.invalid = Invalid waves in clipboard.
|
waves.invalid = Invalid waves in clipboard.
|
||||||
waves.copied = Waves copied.
|
waves.copied = Waves copied.
|
||||||
waves.none = Walang tinukoy na mga kaaway.\nTandaan na ang mga walang laman na wave layout ay awtomatikong papalitan ng default na layout.
|
waves.none = Walang tinukoy na mga kaaway.\nTandaan na ang mga walang laman na wave layout ay awtomatikong papalitan ng default na layout.
|
||||||
waves.sort = Sort By
|
waves.sort = Iayusin sa
|
||||||
waves.sort.reverse = Pabaliktad na Sort
|
waves.sort.reverse = Pabaliktad na Sort
|
||||||
waves.sort.begin = Simula
|
waves.sort.begin = Simula
|
||||||
waves.sort.health = Health
|
waves.sort.health = Health
|
||||||
@@ -521,14 +521,14 @@ wavemode.health = health
|
|||||||
|
|
||||||
all = Lahat
|
all = Lahat
|
||||||
editor.default = [lightgray]<Default>
|
editor.default = [lightgray]<Default>
|
||||||
details = Details...
|
details = Mga Detalya...
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
variables = Vars
|
variables = Vars
|
||||||
logic.clear.confirm = Are you sure you want to clear all code from this processor?
|
logic.clear.confirm = Sigurado ka bang na gusto mo itangal ang lahat na code sa itong processor?
|
||||||
logic.restart = Restart
|
logic.restart = Iulitin
|
||||||
logic.globals = Built-in Variables
|
logic.globals = Built-in Variables
|
||||||
|
|
||||||
editor.name = Name:
|
editor.name = Pangalan:
|
||||||
editor.spawn = Spawn Unit
|
editor.spawn = Spawn Unit
|
||||||
editor.removeunit = Remove Unit
|
editor.removeunit = Remove Unit
|
||||||
editor.teams = Teams
|
editor.teams = Teams
|
||||||
@@ -613,7 +613,7 @@ filter.ore = Ore
|
|||||||
filter.rivernoise = River Noise
|
filter.rivernoise = River Noise
|
||||||
filter.mirror = Mirror
|
filter.mirror = Mirror
|
||||||
filter.clear = Clear
|
filter.clear = Clear
|
||||||
filter.option.ignore = Ignore
|
filter.option.ignore = Ihayain
|
||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.logic = Logic
|
filter.logic = Logic
|
||||||
@@ -643,8 +643,8 @@ filter.option.percentile = Percentile
|
|||||||
filter.option.code = Code
|
filter.option.code = Code
|
||||||
filter.option.loop = Loop
|
filter.option.loop = Loop
|
||||||
|
|
||||||
locales.info = Here, you can add locale bundles for specific languages to your map. In locale bundles, each property has a name and a value. These properties can be used by world processors and objectives using their names. They support text formatting (replacing placeholders with actual values).\n\n[cyan]Example property:\n[]name: [accent]timer[]\nvalue: [accent]Example timer, time left: {0}[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable)
|
locales.info = Dito, pwede ka maglagay ng locale bundles para sa specifikong wika sa inyong mapa. Sa locale bundles, lahat na property ay may pangalan at value. Itong properties ay pwede igamit ng mga world processor at objective sa gamit ng kanilang pangalan. Sila ay sinusuportahan ang text formatting (pinapalitan ng placeholders sa totoong alues).\n\n[cyan]Halimbawang property:\n[]name: [accent]timer[]\nvalue: [accent]Halimbawang timer, time left: {0}[]\n\n[cyan]Usage:\n[]Set it as objective's text: [accent]@timer\n\n[]Print it in a world processor:\n[accent]localeprint "timer"\nformat time\n[gray](where time is a separately calculated variable)
|
||||||
locales.deletelocale = Are you sure you want to delete this locale bundle?
|
locales.deletelocale = Sigurado ka ba gusto mo tanggaling ang itong locale bundle?
|
||||||
locales.applytoall = Apply Changes To All Locales
|
locales.applytoall = Apply Changes To All Locales
|
||||||
locales.addtoother = Add To Other Locales
|
locales.addtoother = Add To Other Locales
|
||||||
locales.rollback = Rollback to last applied
|
locales.rollback = Rollback to last applied
|
||||||
@@ -654,7 +654,7 @@ locales.searchvalue = Search value...
|
|||||||
locales.searchlocale = Search locale...
|
locales.searchlocale = Search locale...
|
||||||
locales.byname = By name
|
locales.byname = By name
|
||||||
locales.byvalue = By value
|
locales.byvalue = By value
|
||||||
locales.showcorrect = Show properties that are present in all locales and have unique values everywhere
|
locales.showcorrect = Ipakitang mga property na kita sa lahat na locales at may merong unique na values kung saan
|
||||||
locales.showmissing = Show properties that are missing in some locales
|
locales.showmissing = Show properties that are missing in some locales
|
||||||
locales.showsame = Show properties that have same values in different locales
|
locales.showsame = Show properties that have same values in different locales
|
||||||
locales.viewproperty = View in all locales
|
locales.viewproperty = View in all locales
|
||||||
@@ -675,7 +675,7 @@ memory = Mem: {0}mb
|
|||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = Mangyaring i-restart ang iyong laro para magkabisa ang mga setting ng wika.
|
language.restart = Mangyaring i-restart ang iyong laro para magkabisa ang mga setting ng wika.
|
||||||
settings = Settings
|
settings = Settings
|
||||||
tutorial = Tutorial
|
tutorial = Tutoryal
|
||||||
tutorial.retake = Muling Kumuha ng Tutorial
|
tutorial.retake = Muling Kumuha ng Tutorial
|
||||||
editor = Editor
|
editor = Editor
|
||||||
mapeditor = Map Editor
|
mapeditor = Map Editor
|
||||||
@@ -701,7 +701,7 @@ objective.produce.name = Obtain
|
|||||||
objective.item.name = Obtain Item
|
objective.item.name = Obtain Item
|
||||||
objective.coreitem.name = Core Item
|
objective.coreitem.name = Core Item
|
||||||
objective.buildcount.name = Build Count
|
objective.buildcount.name = Build Count
|
||||||
objective.unitcount.name = Unit Count
|
objective.unitcount.name = Bilang ng Unit
|
||||||
objective.destroyunits.name = Destroy Units
|
objective.destroyunits.name = Destroy Units
|
||||||
objective.timer.name = Timer
|
objective.timer.name = Timer
|
||||||
objective.destroyblock.name = Destroy Block
|
objective.destroyblock.name = Destroy Block
|
||||||
@@ -711,12 +711,12 @@ objective.commandmode.name = Command Mode
|
|||||||
objective.flag.name = Flag
|
objective.flag.name = Flag
|
||||||
|
|
||||||
marker.shapetext.name = Shape Text
|
marker.shapetext.name = Shape Text
|
||||||
marker.point.name = Point
|
marker.point.name = Tuldok
|
||||||
marker.shape.name = Shape
|
marker.shape.name = Hugis
|
||||||
marker.text.name = Text
|
marker.text.name = Teksto
|
||||||
marker.line.name = Line
|
marker.line.name = Linya
|
||||||
marker.quad.name = Quad
|
marker.quad.name = Quad
|
||||||
marker.texture.name = Texture
|
marker.texture.name = Textura
|
||||||
|
|
||||||
marker.background = Background
|
marker.background = Background
|
||||||
marker.outline = Outline
|
marker.outline = Outline
|
||||||
@@ -749,7 +749,7 @@ bannedunits = Mga Pinagbabawalan na Units
|
|||||||
unbannedunits = Unbanned Units
|
unbannedunits = Unbanned Units
|
||||||
bannedunits.whitelist = Banned Units As Whitelist
|
bannedunits.whitelist = Banned Units As Whitelist
|
||||||
bannedblocks.whitelist = Banned Blocks As Whitelist
|
bannedblocks.whitelist = Banned Blocks As Whitelist
|
||||||
addall = Add All
|
addall = Ilagay Lahat
|
||||||
launch.from = Launching From: [accent]{0}
|
launch.from = Launching From: [accent]{0}
|
||||||
launch.capacity = Launching Item Capacity: [accent]{0}
|
launch.capacity = Launching Item Capacity: [accent]{0}
|
||||||
launch.destination = Destination: {0}
|
launch.destination = Destination: {0}
|
||||||
@@ -780,7 +780,7 @@ weather.fog.name = Fog
|
|||||||
campaign.playtime = \uf129 [lightgray]Sector Playtime: {0}
|
campaign.playtime = \uf129 [lightgray]Sector Playtime: {0}
|
||||||
campaign.complete = [accent]Congratulations.\n\nThe enemy on {0} has been defeated.\n[lightgray]The final sector has been conquered.
|
campaign.complete = [accent]Congratulations.\n\nThe enemy on {0} has been defeated.\n[lightgray]The final sector has been conquered.
|
||||||
|
|
||||||
sectorlist = Mga Sector
|
sectorlist = Mga Sektor
|
||||||
sectorlist.attacked = {0} ay inaatake
|
sectorlist.attacked = {0} ay inaatake
|
||||||
sectors.unexplored = [lightgray]Unexplored
|
sectors.unexplored = [lightgray]Unexplored
|
||||||
sectors.resources = Resources:
|
sectors.resources = Resources:
|
||||||
@@ -824,12 +824,12 @@ threat.low = Mababa
|
|||||||
threat.medium = Medium
|
threat.medium = Medium
|
||||||
threat.high = Mataas
|
threat.high = Mataas
|
||||||
threat.extreme = Sobra-sobra
|
threat.extreme = Sobra-sobra
|
||||||
threat.eradication = Tiyak na talo sa hind handa
|
threat.eradication = Tiyak na talo sa hindi handa
|
||||||
|
|
||||||
difficulty.casual = Casual
|
difficulty.casual = Casual
|
||||||
difficulty.easy = Easy
|
difficulty.easy = Madali
|
||||||
difficulty.normal = Normal
|
difficulty.normal = Normal
|
||||||
difficulty.hard = Hard
|
difficulty.hard = Mahirap
|
||||||
difficulty.eradication = Eradication
|
difficulty.eradication = Eradication
|
||||||
|
|
||||||
difficulty.enemyHealthMultiplier = Enemy Health: {0}
|
difficulty.enemyHealthMultiplier = Enemy Health: {0}
|
||||||
@@ -926,19 +926,19 @@ sector.karst.name = Karst
|
|||||||
sector.origin.name = Pinaggalingan
|
sector.origin.name = Pinaggalingan
|
||||||
|
|
||||||
sector.onset.description = Ang tutorial sector. Ang objective ay hindi pa nagawa. Maghintay para sa kinabukasang impormasyon.
|
sector.onset.description = Ang tutorial sector. Ang objective ay hindi pa nagawa. Maghintay para sa kinabukasang impormasyon.
|
||||||
sector.aegis.description = This sector contains deposits of tungsten.\nResearch the [accent]Impact Drill[] to mine this resource, and destroy the enemy base in the area.
|
sector.aegis.description = Itong sector ay may merong deposit ng mga tungsten.\nIresearch ang [accent]Impact Drill[] para makuha ang resource, at tanggalin ang enemy base sa lugar dito
|
||||||
sector.lake.description = This sector's slag lake greatly limits viable units. A hover unit is the only option.\nResearch the [accent]ship fabricator[] and produce an [accent]elude[] unit as soon as possible.
|
sector.lake.description = Itong sektor na lawa na slag greatly limits viable na unit. Ang hover unit ay ang huling paraan.\nIresearch ang[accent]ship fabricator[] at gumawa ng mga [accent]elude[] unit as soon as possible.
|
||||||
sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain.
|
sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain.
|
||||||
sector.atlas.description = This sector contains varied terrain and will require a variety of units to attack effectively.\nUpgraded units may also be necessary to get past some of the tougher enemy bases detected here.\nResearch the [accent]Electrolyzer[] and the [accent]Tank Refabricator[].
|
sector.atlas.description = This sector contains varied terrain and will require a variety of units to attack effectively.\nUpgraded units may also be necessary to get past some of the tougher enemy bases detected here.\nResearch the [accent]Electrolyzer[] and the [accent]Tank Refabricator[].
|
||||||
sector.split.description = The minimal enemy presence in this sector makes it perfect for testing new transport tech.
|
sector.split.description = Ang konting presence ng kalaban sa sector na ito ay ginagawang perfect sa paggamit ng bagong teknolohiyang pangtransportasyon.
|
||||||
sector.basin.description = Large enemy presence detected in this sector.\nBuild units quickly and capture enemy cores to gain a foothold.
|
sector.basin.description = Malaking presence ng kalaban nadetektuhan sa itong sektor.\nGumawa ng units na mabilis at icapture enemy cores to gain a foothold.
|
||||||
sector.marsh.description = This sector has an abundance of arkycite, but has limited vents.\nBuild [accent]Chemical Combustion Chambers[] to generate power.
|
sector.marsh.description = Itong sector ay ma karamihan ng arkycite, pero may has konting vents.\nGumawa ng[accent]Chemical Combustion Chambers[] para makagawa ng koryente.
|
||||||
sector.peaks.description = The mountainous terrain in this sector make most units useless. Flying units will be required.\nBe aware of enemy anti-air installations. It may be possible to disable some of these installations by targeting their supporting buildings.
|
sector.peaks.description = Ang Kabundukang terrain sa sector na ito ay ginagawa ang maraming unit useless. Lumilipad na unit ay kailangan.\nBe aware of enemy anti-air installations. It may be possible to disable some of these installations by targeting their supporting buildings.
|
||||||
sector.ravine.description = No enemy cores detected in the sector, although it's an important transportation route for the enemy. Expect variety of enemy forces.\nProduce [accent]surge alloy[]. Construct [accent]Afflict[] turrets.
|
sector.ravine.description = Walang mga enemy core nadetektuhan sa sektor na ito, kahit it ay isang importanteng transportasyang routa ng kalaban. Ekspetuhan na maraming enemy forces.\nGumawa ng [accent]surge alloy[]. Construct [accent]Afflict[] turrets.
|
||||||
sector.caldera-erekir.description = The resources detected in this sector are scattered across several islands.\nResearch and deploy drone-based transportation.
|
sector.caldera-erekir.description = Ang mga resource sa itong sektor ay nai-scatter sa maraming isla.\nIresearch at i-deploy drone-based transportation.
|
||||||
sector.stronghold.description = The large enemy encampment in this sector guards significant deposits of [accent]thorium[].\nUse it to develop higher tier units and turrets.
|
sector.stronghold.description = Ang malaking encampment ng kalaban sa sektor na ito ay binabantayan ng maraming deposit ng [accent]thorium[].\nGamitin ito para ma-idevelop mataas na tier unit at mga turret.
|
||||||
sector.crevice.description = The enemy will send fierce attack forces to take out your base in this sector.\nDeveloping [accent]carbide[] and the [accent]Pyrolysis Generator[] may be imperative for survival.
|
sector.crevice.description = Ang kalaban ay magsend ng fierce attack forces para makuha ang inyong base sa itong sektor.\nDeveloping [accent]carbide[] at ang [accent]Pyrolysis Generator[] baka magiging imperative for survival.
|
||||||
sector.siege.description = This sector features two parallel canyons that will force a two-pronged attack.\nResearch [accent]cyanogen[] to gain the capability to create even stronger tank units.\nCaution: enemy long-range missiles have been detected. The missiles may be shot down before impact.
|
sector.siege.description = Itong sektor ay may merong dalawang parallel na canyon na mag-force ng two-pronged attack.\nResearch [accent]cyanogen[] to gain the capability to create even stronger tank units.\nCaution: enemy long-range missiles have been detected. The missiles may be shot down before impact.
|
||||||
sector.crossroads.description = The enemy bases in this sector have been established in varying terrain. Research different units to adapt.\nAdditionally, some bases are protected by shields. Figure out how they are powered.
|
sector.crossroads.description = The enemy bases in this sector have been established in varying terrain. Research different units to adapt.\nAdditionally, some bases are protected by shields. Figure out how they are powered.
|
||||||
sector.karst.description = This sector is rich in resources, but will be attacked by the enemy once a new core lands.\nTake advantage of the resources and research [accent]phase fabric[].
|
sector.karst.description = This sector is rich in resources, but will be attacked by the enemy once a new core lands.\nTake advantage of the resources and research [accent]phase fabric[].
|
||||||
sector.origin.description = The final sector with a significant enemy presence.\nNo probable research opportunities remain - focus solely on destroying all enemy cores.
|
sector.origin.description = The final sector with a significant enemy presence.\nNo probable research opportunities remain - focus solely on destroying all enemy cores.
|
||||||
@@ -1130,7 +1130,7 @@ bar.drillspeed = Bilis ng Drill: {0}/s
|
|||||||
bar.pumpspeed = Bilis ng Pump: {0}/s
|
bar.pumpspeed = Bilis ng Pump: {0}/s
|
||||||
bar.efficiency = Kahusayan: {0}%
|
bar.efficiency = Kahusayan: {0}%
|
||||||
bar.boost = Palakas: +{0}%
|
bar.boost = Palakas: +{0}%
|
||||||
bar.powerbuffer = Batteries: {0}/{1}
|
bar.powerbuffer = Battery: {0}/{1}
|
||||||
bar.powerbalance = Kuryente: {0}/s
|
bar.powerbalance = Kuryente: {0}/s
|
||||||
bar.powerstored = Nakaimbak: {0}/{1}
|
bar.powerstored = Nakaimbak: {0}/{1}
|
||||||
bar.poweramount = Kuryente: {0}
|
bar.poweramount = Kuryente: {0}
|
||||||
@@ -1253,16 +1253,18 @@ setting.fullscreen.name = Fullscreen
|
|||||||
setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required)
|
setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required)
|
||||||
setting.borderlesswindow.name.windows = Borderless Fullscreen
|
setting.borderlesswindow.name.windows = Borderless Fullscreen
|
||||||
setting.borderlesswindow.description = Maaaring kailanganin ang pag-restart upang mailapat ang mga pagbabago.
|
setting.borderlesswindow.description = Maaaring kailanganin ang pag-restart upang mailapat ang mga pagbabago.
|
||||||
setting.fps.name = Show FPS & Ping
|
setting.fps.name = Ipakita ang FPS & Ping
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelate
|
setting.pixelate.name = Pixelate
|
||||||
setting.minimap.name = Show Minimap
|
setting.minimap.name = Ipakita ang Minimap
|
||||||
setting.coreitems.name = Display Core Items
|
setting.coreitems.name = Display Core Items
|
||||||
setting.position.name = Show Player Position
|
setting.position.name = Ipakita ang posisyon ng Player
|
||||||
setting.mouseposition.name = Show Mouse Position
|
setting.mouseposition.name = Ipakita ang Mouse Position
|
||||||
setting.musicvol.name = Music Volume
|
setting.musicvol.name = Volume ng Music
|
||||||
setting.atmosphere.name = Ipakita Planet Atmosphere
|
setting.atmosphere.name = Ipakita Planet Atmosphere
|
||||||
setting.drawlight.name = Draw Darkness/Lighting
|
setting.drawlight.name = Draw Darkness/Lighting
|
||||||
setting.ambientvol.name = Ambient Volume
|
setting.ambientvol.name = Ambient Volume
|
||||||
@@ -1283,7 +1285,7 @@ setting.showweather.name = Show Weather Graphics
|
|||||||
setting.hidedisplays.name = Hide Logic Displays
|
setting.hidedisplays.name = Hide Logic Displays
|
||||||
setting.macnotch.name = Iangkop ang interface upang ipakita ang bingaw
|
setting.macnotch.name = Iangkop ang interface upang ipakita ang bingaw
|
||||||
setting.macnotch.description = Kinakailangan ang pag-restart upang mailapat ang mga pagbabago
|
setting.macnotch.description = Kinakailangan ang pag-restart upang mailapat ang mga pagbabago
|
||||||
steam.friendsonly = Friends Only
|
steam.friendsonly = Mga Kaibigan lang
|
||||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||||
setting.minmagnificationmultiplierpercent.name = Max Camera Distance
|
setting.minmagnificationmultiplierpercent.name = Max Camera Distance
|
||||||
@@ -1304,7 +1306,7 @@ keybind.respawn.name = Respawn
|
|||||||
keybind.control.name = Control Unit
|
keybind.control.name = Control Unit
|
||||||
keybind.clear_building.name = Clear Building
|
keybind.clear_building.name = Clear Building
|
||||||
keybind.press = Press a key...
|
keybind.press = Press a key...
|
||||||
keybind.press.axis = Press an axis or key...
|
keybind.press.axis = Magpindot ng axis o key...
|
||||||
keybind.screenshot.name = Map Screenshot
|
keybind.screenshot.name = Map Screenshot
|
||||||
keybind.toggle_power_lines.name = Toggle Power Lasers
|
keybind.toggle_power_lines.name = Toggle Power Lasers
|
||||||
keybind.toggle_block_status.name = Toggle Block Statuses
|
keybind.toggle_block_status.name = Toggle Block Statuses
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat Scroll
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Drop Unit
|
keybind.drop_unit.name = Drop Unit
|
||||||
keybind.zoom_minimap.name = Zoom Minimap
|
keybind.zoom_minimap.name = Zoom Minimap
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Description of modes
|
mode.help.title = Description of modes
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = Ang normal na mode. Mga limitadong mapagkukunan at awtomatikong papasok na alon.\n[gray]Nangangailangan ng mga spawn ng kaaway sa mapa para maglaro.
|
mode.survival.description = Ang normal na mode. Mga limitadong mapagkukunan at awtomatikong papasok na alon.\n[gray]Nangangailangan ng mga spawn ng kaaway sa mapa para maglaro.
|
||||||
@@ -1404,7 +1408,7 @@ mode.attack.description = Wasakin ang base ng kalaban. \n[gray]Nangangailangan n
|
|||||||
mode.custom = Custom Rules
|
mode.custom = Custom Rules
|
||||||
|
|
||||||
rules.invaliddata = Invalid clipboard data.
|
rules.invaliddata = Invalid clipboard data.
|
||||||
rules.hidebannedblocks = Hide Banned Blocks
|
rules.hidebannedblocks = Itago ang ibinabawal na blocks
|
||||||
rules.infiniteresources = Infinite Resources
|
rules.infiniteresources = Infinite Resources
|
||||||
rules.fillitems = Fill Core With Items
|
rules.fillitems = Fill Core With Items
|
||||||
rules.onlydepositcore = Only Allow Core Depositing
|
rules.onlydepositcore = Only Allow Core Depositing
|
||||||
@@ -1428,9 +1432,9 @@ rules.buildai = Base Builder AI
|
|||||||
rules.buildaitier = Builder AI Tier
|
rules.buildaitier = Builder AI Tier
|
||||||
rules.rtsai = RTS AI
|
rules.rtsai = RTS AI
|
||||||
rules.rtsai.campaign = RTS Attack AI
|
rules.rtsai.campaign = RTS Attack AI
|
||||||
rules.rtsai.campaign.info = In attack maps, makes units group up and attack player bases in a more intelligent manner.
|
rules.rtsai.campaign.info = Sa mapang attake, ginagawa gina grupo ang mga unit at inaatake ang player bases sa mas-maraming matalinong na manner.
|
||||||
rules.rtsminsquadsize = Min Squad Size
|
rules.rtsminsquadsize = Pinakamaliit Squad Size
|
||||||
rules.rtsmaxsquadsize = Max Squad Size
|
rules.rtsmaxsquadsize = Pinakaraming Squad Size
|
||||||
rules.rtsminattackweight = Min Attack Weight
|
rules.rtsminattackweight = Min Attack Weight
|
||||||
rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP)
|
rules.cleanupdeadteams = Clean Up Defeated Team Buildings (PvP)
|
||||||
rules.corecapture = Capture Core On Destruction
|
rules.corecapture = Capture Core On Destruction
|
||||||
@@ -1489,8 +1493,8 @@ rules.weather.always = Always
|
|||||||
rules.weather.duration = Duration:
|
rules.weather.duration = Duration:
|
||||||
|
|
||||||
rules.randomwaveai.info = Makes units spawned in waves target random structures instead of directly attacking the core or power generators.
|
rules.randomwaveai.info = Makes units spawned in waves target random structures instead of directly attacking the core or power generators.
|
||||||
rules.placerangecheck.info = Prevents players from placing anything near enemy buildings. When trying to place a turret, the range is increased, so the turret will not be able to reach the enemy.
|
rules.placerangecheck.info = Ipinagbawalan ang mga player sa paglagay ng kahit ano malapit sa mga enemy buildings. Pag naitry naglagay ng turret, ang range ay nataas, para ang turret hindi makaabot ang kalaban.
|
||||||
rules.onlydepositcore.info = Prevents units from depositing items into any buildings except cores.
|
rules.onlydepositcore.info = Ipinagbawalan ang mga units sa paglagay ng items sa kahit anong buildings except cores.
|
||||||
|
|
||||||
content.item.name = Aytems
|
content.item.name = Aytems
|
||||||
content.liquid.name = Likido
|
content.liquid.name = Likido
|
||||||
@@ -2046,8 +2050,8 @@ hint.coreIncinerate = After the core is filled to capacity with an item, any ext
|
|||||||
hint.factoryControl = To set a unit factory's [accent]output destination[], click a factory block while in command mode, then right-click a location.\nUnits produced by it will automatically move there.
|
hint.factoryControl = To set a unit factory's [accent]output destination[], click a factory block while in command mode, then right-click a location.\nUnits produced by it will automatically move there.
|
||||||
hint.factoryControl.mobile = To set a unit factory's [accent]output destination[], tap a factory block while in command mode, then tap a location.\nUnits produced by it will automatically move there.
|
hint.factoryControl.mobile = To set a unit factory's [accent]output destination[], tap a factory block while in command mode, then tap a location.\nUnits produced by it will automatically move there.
|
||||||
|
|
||||||
gz.mine = Move near the :ore-copper: [accent]copper ore[] on the ground and click to begin mining.
|
gz.mine = Pumunta malapit sa :ore-copper: [accent]copper ore[] sa ground at i-click ito para magsimula magmina.
|
||||||
gz.mine.mobile = Move near the :ore-copper: [accent]copper ore[] on the ground and tap it to begin mining.
|
gz.mine.mobile = Pumunta malapit sa :ore-copper: [accent]copper ore[] sa ground at pindutin ito para magsimula magmina.
|
||||||
gz.research = Open the :tree: tech tree.\nResearch the :mechanical-drill: [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nClick on a copper patch to place it.
|
gz.research = Open the :tree: tech tree.\nResearch the :mechanical-drill: [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nClick on a copper patch to place it.
|
||||||
gz.research.mobile = Open the :tree: tech tree.\nResearch the :mechanical-drill: [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nTap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm.
|
gz.research.mobile = Open the :tree: tech tree.\nResearch the :mechanical-drill: [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nTap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm.
|
||||||
gz.conveyors = Research and place :conveyor: [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate.
|
gz.conveyors = Research and place :conveyor: [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate.
|
||||||
@@ -2183,10 +2187,10 @@ block.phase-wall.description = Isang pader na pinahiran ng espesyal na phase-bas
|
|||||||
block.phase-wall-large.description = Isang pader na pinahiran ng espesyal na phase-based na reflective compound. Pinapalihis ang karamihan sa mga bala kapag natamaan.\nGumagamit ng maraming tile.
|
block.phase-wall-large.description = Isang pader na pinahiran ng espesyal na phase-based na reflective compound. Pinapalihis ang karamihan sa mga bala kapag natamaan.\nGumagamit ng maraming tile.
|
||||||
block.surge-wall.description = Isang napakatibay na defensive block.\nNagpapalaki ng singil sa bullet contact, na ilalabas ito nang random.
|
block.surge-wall.description = Isang napakatibay na defensive block.\nNagpapalaki ng singil sa bullet contact, na ilalabas ito nang random.
|
||||||
block.surge-wall-large.description = Isang napakatibay na defensive block.\nBumubuo ng singil sa bullet contact, ilalabas ito nang random.\nGumagamit ng maraming tile.
|
block.surge-wall-large.description = Isang napakatibay na defensive block.\nBumubuo ng singil sa bullet contact, ilalabas ito nang random.\nGumagamit ng maraming tile.
|
||||||
block.scrap-wall.description = Protects structures from enemy projectiles.
|
block.scrap-wall.description = Ipinaprotektahan ang structures sa projectiles ng kalaban.
|
||||||
block.scrap-wall-large.description = Protects structures from enemy projectiles.
|
block.scrap-wall-large.description = Ipinaprotektahan ang structures sa projectiles ng kalaban.
|
||||||
block.scrap-wall-huge.description = Protects structures from enemy projectiles.
|
block.scrap-wall-huge.description = Ipinaprotektahan ang structures sa projectiles ng kalaban.
|
||||||
block.scrap-wall-gigantic.description = Protects structures from enemy projectiles.
|
block.scrap-wall-gigantic.description = Ipinaprotektahan ang structures sa projectiles ng kalaban.
|
||||||
block.door.description = Isang maliit na pinto. Maaaring buksan o isara sa pamamagitan ng pag-tap.
|
block.door.description = Isang maliit na pinto. Maaaring buksan o isara sa pamamagitan ng pag-tap.
|
||||||
block.door-large.description = Isang malaking pinto. Maaaring buksan at isara sa pamamagitan ng pag-tap.\nSpans maramihang mga tile.
|
block.door-large.description = Isang malaking pinto. Maaaring buksan at isara sa pamamagitan ng pag-tap.\nSpans maramihang mga tile.
|
||||||
block.mender.description = Pana-panahong nag-aayos ng mga blocks sa paligid nito. Pinapanatiling maayos ang mga depensa sa pagitan ng mga alon.\nOpsyonal na gumagamit ng silicon upang palakasin ang saklaw at kahusayan.
|
block.mender.description = Pana-panahong nag-aayos ng mga blocks sa paligid nito. Pinapanatiling maayos ang mga depensa sa pagitan ng mga alon.\nOpsyonal na gumagamit ng silicon upang palakasin ang saklaw at kahusayan.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -185,14 +185,14 @@ mod.folder.missing = Seuls les mods sous forme de dossiers peuvent être publié
|
|||||||
mod.scripts.disable = Votre appareil ne prend pas en charge les mods avec des scripts. Vous devez désactiver ces mods pour pouvoir jouer.
|
mod.scripts.disable = Votre appareil ne prend pas en charge les mods avec des scripts. Vous devez désactiver ces mods pour pouvoir jouer.
|
||||||
|
|
||||||
mod.dependencies.error = [scarlet]Mods are missing dependencies
|
mod.dependencies.error = [scarlet]Mods are missing dependencies
|
||||||
mod.dependencies.soft = (optional)
|
mod.dependencies.soft = (optionnel)
|
||||||
mod.dependencies.download = Import
|
mod.dependencies.download = Import
|
||||||
mod.dependencies.downloadreq = Import Required
|
mod.dependencies.downloadreq = Importer les requis
|
||||||
mod.dependencies.downloadall = Import All
|
mod.dependencies.downloadall = Importer les tous
|
||||||
mod.dependencies.status = Import Results
|
mod.dependencies.status = Résultat de l'import
|
||||||
mod.dependencies.success = Successfully downloaded:
|
mod.dependencies.success = Téléchargement réussi:
|
||||||
mod.dependencies.failure = Failed to download:
|
mod.dependencies.failure = Téléchargement en échec:
|
||||||
mod.dependencies.imported = This mod requires dependencies. Download?
|
mod.dependencies.imported = Ce mod requiert des dépendances. Voulez-vous les télécharger?
|
||||||
|
|
||||||
about.button = À propos
|
about.button = À propos
|
||||||
name = Nom :
|
name = Nom :
|
||||||
@@ -208,7 +208,7 @@ campaign.select = Sélectionnez la Campagne de Départ
|
|||||||
campaign.none = [lightgray]Sélectionnez votre planète de départ.\nCela peut être changé à tout moment.
|
campaign.none = [lightgray]Sélectionnez votre planète de départ.\nCela peut être changé à tout moment.
|
||||||
campaign.erekir = Contenu récent et mieux travaillé. Une progression dans la campagne assez linéaire.\n\nPlus difficile. Des cartes et une expérience de qualité.
|
campaign.erekir = Contenu récent et mieux travaillé. Une progression dans la campagne assez linéaire.\n\nPlus difficile. Des cartes et une expérience de qualité.
|
||||||
campaign.serpulo = Contenu ancien, l'expérience classique de Mindustry. Avec plus de contenu et de possibilités.\n\nCartes et mécaniques de campagnes possiblement moins équilibrées. Moins travaillé.
|
campaign.serpulo = Contenu ancien, l'expérience classique de Mindustry. Avec plus de contenu et de possibilités.\n\nCartes et mécaniques de campagnes possiblement moins équilibrées. Moins travaillé.
|
||||||
campaign.difficulty = Difficulty
|
campaign.difficulty = Difficulté
|
||||||
completed = [accent]Complété
|
completed = [accent]Complété
|
||||||
techtree = Arbre technologique
|
techtree = Arbre technologique
|
||||||
techtree.select = Sélection de l'Arbre technologique
|
techtree.select = Sélection de l'Arbre technologique
|
||||||
@@ -271,7 +271,7 @@ trace = Suivre le joueur
|
|||||||
trace.playername = Nom du joueur : [accent]{0}
|
trace.playername = Nom du joueur : [accent]{0}
|
||||||
trace.ip = IP : [accent]{0}
|
trace.ip = IP : [accent]{0}
|
||||||
trace.id = ID : [accent]{0}
|
trace.id = ID : [accent]{0}
|
||||||
trace.language = Language: [accent]{0}
|
trace.language = Langue: [accent]{0}
|
||||||
trace.mobile = Client Mobile : [accent]{0}
|
trace.mobile = Client Mobile : [accent]{0}
|
||||||
trace.modclient = Client personnalisé : [accent]{0}
|
trace.modclient = Client personnalisé : [accent]{0}
|
||||||
trace.times.joined = Nombre de connexions : [accent]{0}
|
trace.times.joined = Nombre de connexions : [accent]{0}
|
||||||
@@ -318,7 +318,7 @@ reconnecting = [accent]Reconnexion...
|
|||||||
connecting.data = [accent]Chargement des données du monde...
|
connecting.data = [accent]Chargement des données du monde...
|
||||||
server.port = Port :
|
server.port = Port :
|
||||||
server.invalidport = Numéro de port invalide !
|
server.invalidport = Numéro de port invalide !
|
||||||
server.error.addressinuse = [scarlet]Failed to open server on port 6567.[]\n\nMake sure no other Mindustry servers are running on your device or network!
|
server.error.addressinuse = [scarlet]Echec d'ouverture du port 6567.[]\n\nVérifier qu'aucun autre logiciel ne fonctionne sur ce port!
|
||||||
server.error = [scarlet]Erreur lors de l'hébergement du serveur.
|
server.error = [scarlet]Erreur lors de l'hébergement du serveur.
|
||||||
save.new = Nouvelle sauvegarde
|
save.new = Nouvelle sauvegarde
|
||||||
save.overwrite = Êtes-vous sûr de vouloir\nécraser cette sauvegarde ?
|
save.overwrite = Êtes-vous sûr de vouloir\nécraser cette sauvegarde ?
|
||||||
@@ -462,7 +462,7 @@ editor.generation = Génération
|
|||||||
editor.objectives = Objectifs
|
editor.objectives = Objectifs
|
||||||
editor.locales = Locale Bundles
|
editor.locales = Locale Bundles
|
||||||
editor.worldprocessors = World Processors
|
editor.worldprocessors = World Processors
|
||||||
editor.worldprocessors.editname = Edit Name
|
editor.worldprocessors.editname = Editer le nom
|
||||||
editor.worldprocessors.none = [lightgray]No world processor blocks found!\nAdd one in the map editor, or use the \ue813 Add button below.
|
editor.worldprocessors.none = [lightgray]No world processor blocks found!\nAdd one in the map editor, or use the \ue813 Add button below.
|
||||||
editor.worldprocessors.nospace = No free space to place a world processor!\nDid you fill the map with structures? Why would you do this?
|
editor.worldprocessors.nospace = No free space to place a world processor!\nDid you fill the map with structures? Why would you do this?
|
||||||
editor.worldprocessors.delete.confirm = Are you sure you want to delete this world processor?\n\nIf it is surrounded by walls, it will be replaced by an environmental wall.
|
editor.worldprocessors.delete.confirm = Are you sure you want to delete this world processor?\n\nIf it is surrounded by walls, it will be replaced by an environmental wall.
|
||||||
@@ -524,9 +524,9 @@ editor.default = [lightgray]<par défaut>
|
|||||||
details = Détails...
|
details = Détails...
|
||||||
edit = Modifier...
|
edit = Modifier...
|
||||||
variables = Variables
|
variables = Variables
|
||||||
logic.clear.confirm = Are you sure you want to clear all code from this processor?
|
logic.clear.confirm = Êtes-vous sûr de vouloir supprimer tout le code de ce processeur?
|
||||||
logic.restart = Restart
|
logic.restart = Restart
|
||||||
logic.globals = Built-in Variables
|
logic.globals = Variables prédéfinies
|
||||||
|
|
||||||
editor.name = Nom :
|
editor.name = Nom :
|
||||||
editor.spawn = Ajouter une unité
|
editor.spawn = Ajouter une unité
|
||||||
@@ -551,7 +551,7 @@ editor.sectorgenerate = Générer un Secteur
|
|||||||
editor.resize = Redimensionner
|
editor.resize = Redimensionner
|
||||||
editor.loadmap = Charger la carte
|
editor.loadmap = Charger la carte
|
||||||
editor.savemap = Sauvegarder la carte
|
editor.savemap = Sauvegarder la carte
|
||||||
editor.savechanges = [scarlet]You have unsaved changes!\n\n[]Do you want to save them?
|
editor.savechanges = [scarlet]Vous avez des changements non suvegardés!\n\n[]Voulez-vous les sauvegarder?
|
||||||
editor.saved = Sauvegardé !
|
editor.saved = Sauvegardé !
|
||||||
editor.save.noname = Votre carte n'a pas de nom !\nAjoutez un nom dans le menu 'Infos de la Carte'.
|
editor.save.noname = Votre carte n'a pas de nom !\nAjoutez un nom dans le menu 'Infos de la Carte'.
|
||||||
editor.save.overwrite = Votre carte écrase une carte de base du jeu !\nChoisissez un nom différent dans le menu 'Infos de la Carte'.
|
editor.save.overwrite = Votre carte écrase une carte de base du jeu !\nChoisissez un nom différent dans le menu 'Infos de la Carte'.
|
||||||
@@ -659,7 +659,7 @@ locales.showmissing = Show properties that are missing in some locales
|
|||||||
locales.showsame = Show properties that have same values in different locales
|
locales.showsame = Show properties that have same values in different locales
|
||||||
locales.viewproperty = View in all locales
|
locales.viewproperty = View in all locales
|
||||||
locales.viewing = Viewing property "{0}"
|
locales.viewing = Viewing property "{0}"
|
||||||
locales.addicon = Add Icon
|
locales.addicon = Ajouter une icône
|
||||||
|
|
||||||
width = Largeur :
|
width = Largeur :
|
||||||
height = Hauteur :
|
height = Hauteur :
|
||||||
@@ -812,8 +812,8 @@ sector.curlost = Secteur perdu
|
|||||||
sector.missingresources = [scarlet]Ressources du Noyau insuffisantes !
|
sector.missingresources = [scarlet]Ressources du Noyau insuffisantes !
|
||||||
sector.attacked = Secteur [accent]{0}[white] attaqué !
|
sector.attacked = Secteur [accent]{0}[white] attaqué !
|
||||||
sector.lost = Secteur [accent]{0}[white] perdu !
|
sector.lost = Secteur [accent]{0}[white] perdu !
|
||||||
sector.capture = Sector [accent]{0}[white]Captured!
|
sector.capture = Secteur [accent]{0}[white]Capturé !
|
||||||
sector.capture.current = Sector Captured!
|
sector.capture.current = Secteur Capturé !
|
||||||
sector.changeicon = Changer l'Icône
|
sector.changeicon = Changer l'Icône
|
||||||
sector.noswitch.title = Impossible de changer de Secteur
|
sector.noswitch.title = Impossible de changer de Secteur
|
||||||
sector.noswitch = Vous ne pouvez pas changer de secteur pendant qu’un autre est attaqué.\n\nSecteur: [accent]{0}[] sur [accent]{1}[]
|
sector.noswitch = Vous ne pouvez pas changer de secteur pendant qu’un autre est attaqué.\n\nSecteur: [accent]{0}[] sur [accent]{1}[]
|
||||||
@@ -826,16 +826,16 @@ threat.high = Grande
|
|||||||
threat.extreme = Extrême
|
threat.extreme = Extrême
|
||||||
threat.eradication = Éradication
|
threat.eradication = Éradication
|
||||||
|
|
||||||
difficulty.casual = Casual
|
difficulty.casual = Paisible
|
||||||
difficulty.easy = Easy
|
difficulty.easy = Facile
|
||||||
difficulty.normal = Normal
|
difficulty.normal = Normal
|
||||||
difficulty.hard = Hard
|
difficulty.hard = Difficile
|
||||||
difficulty.eradication = Eradication
|
difficulty.eradication = Éradication
|
||||||
|
|
||||||
difficulty.enemyHealthMultiplier = Enemy Health: {0}
|
difficulty.enemyHealthMultiplier = Vie des ennemis: {0}
|
||||||
difficulty.enemySpawnMultiplier = Enemy Amount: {0}
|
difficulty.enemySpawnMultiplier = Nombre d'ennemis: {0}
|
||||||
difficulty.waveTimeMultiplier = Wave Timer: {0}
|
difficulty.waveTimeMultiplier = Espacement des Vagues: {0}
|
||||||
difficulty.nomodifiers = [lightgray](No modifiers)
|
difficulty.nomodifiers = [lightgray](Sans modification)
|
||||||
|
|
||||||
planets = Planètes
|
planets = Planètes
|
||||||
|
|
||||||
@@ -1072,16 +1072,16 @@ stat.buildspeedmultiplier = Multiplicateur de vitesse de construction
|
|||||||
stat.reactive = Réactions
|
stat.reactive = Réactions
|
||||||
stat.immunities = Immunités
|
stat.immunities = Immunités
|
||||||
stat.healing = Guérison
|
stat.healing = Guérison
|
||||||
stat.efficiency = [stat]{0}% Efficiency
|
stat.efficiency = [stat]{0}% Efficacité
|
||||||
|
|
||||||
ability.forcefield = Champ de Force
|
ability.forcefield = Champ de Force
|
||||||
ability.forcefield.description = Projects a force shield that absorbs bullets
|
ability.forcefield.description = Projects a force shield that absorbs bullets
|
||||||
ability.repairfield = Champ de Réparation
|
ability.repairfield = Champ de Réparation
|
||||||
ability.repairfield.description = Repairs nearby units
|
ability.repairfield.description = Répare les unités proches
|
||||||
ability.statusfield = Champ d'Amélioration
|
ability.statusfield = Champ d'Amélioration
|
||||||
ability.statusfield.description = Applies a status effect to nearby units
|
ability.statusfield.description = Applies a status effect to nearby units
|
||||||
ability.unitspawn = Usine
|
ability.unitspawn = Usine
|
||||||
ability.unitspawn.description = Constructs units
|
ability.unitspawn.description = Construit des unités
|
||||||
ability.shieldregenfield = Champ de régénération de bouclier
|
ability.shieldregenfield = Champ de régénération de bouclier
|
||||||
ability.shieldregenfield.description = Regenerates shields of nearby units
|
ability.shieldregenfield.description = Regenerates shields of nearby units
|
||||||
ability.movelightning = Déplacement éclair
|
ability.movelightning = Déplacement éclair
|
||||||
@@ -1200,7 +1200,7 @@ unit.items = objets
|
|||||||
unit.thousands = k
|
unit.thousands = k
|
||||||
unit.millions = M
|
unit.millions = M
|
||||||
unit.billions = Md
|
unit.billions = Md
|
||||||
unit.shots = shots
|
unit.shots = tirs
|
||||||
unit.pershot = /tirs
|
unit.pershot = /tirs
|
||||||
category.purpose = Description
|
category.purpose = Description
|
||||||
category.general = Caractéristiques
|
category.general = Caractéristiques
|
||||||
@@ -1210,8 +1210,8 @@ category.items = Objets
|
|||||||
category.crafting = Fabrication
|
category.crafting = Fabrication
|
||||||
category.function = Fonction
|
category.function = Fonction
|
||||||
category.optional = Améliorations facultatives
|
category.optional = Améliorations facultatives
|
||||||
setting.alwaysmusic.name = Always Play Music
|
setting.alwaysmusic.name = Musique en continu
|
||||||
setting.alwaysmusic.description = When enabled, music will always play on loop in-game.\nWhen disabled, it only plays at random intervals.
|
setting.alwaysmusic.description = Quand activé, la musique est jouée en continu.\nSinon, la musique est jouée en intervalles aléatoires.
|
||||||
setting.skipcoreanimation.name = Ignorer l'animation du lancement du noyau et de l'atterrissage
|
setting.skipcoreanimation.name = Ignorer l'animation du lancement du noyau et de l'atterrissage
|
||||||
setting.landscape.name = Verrouiller la rotation en mode paysage
|
setting.landscape.name = Verrouiller la rotation en mode paysage
|
||||||
setting.shadows.name = Ombres
|
setting.shadows.name = Ombres
|
||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Un redémarrage peut être nécessaire po
|
|||||||
setting.fps.name = Afficher les FPS et le Ping
|
setting.fps.name = Afficher les FPS et le Ping
|
||||||
setting.console.name = Activer la Console
|
setting.console.name = Activer la Console
|
||||||
setting.smoothcamera.name = Lissage de la Caméra
|
setting.smoothcamera.name = Lissage de la Caméra
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Synchronisation Verticale
|
setting.vsync.name = Synchronisation Verticale
|
||||||
setting.pixelate.name = Pixeliser
|
setting.pixelate.name = Pixeliser
|
||||||
setting.minimap.name = Afficher la Mini-carte
|
setting.minimap.name = Afficher la Mini-carte
|
||||||
@@ -1285,9 +1287,9 @@ setting.macnotch.name = Adapter l'interface pour afficher l'encoche
|
|||||||
setting.macnotch.description = Redémarrage du jeu nécessaire pour appliquer les changements
|
setting.macnotch.description = Redémarrage du jeu nécessaire pour appliquer les changements
|
||||||
steam.friendsonly = Amis seulement
|
steam.friendsonly = Amis seulement
|
||||||
steam.friendsonly.tooltip = Indique si seuls les amis Steam peuvent rejoindre votre partie.\nSi vous décochez cette case, votre partie deviendra publique et tout le monde pourra la rejoindre.
|
steam.friendsonly.tooltip = Indique si seuls les amis Steam peuvent rejoindre votre partie.\nSi vous décochez cette case, votre partie deviendra publique et tout le monde pourra la rejoindre.
|
||||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
setting.maxmagnificationmultiplierpercent.name = Distance min de la caméra
|
||||||
setting.minmagnificationmultiplierpercent.name = Max Camera Distance
|
setting.minmagnificationmultiplierpercent.name = Distance max de la caméra
|
||||||
setting.minmagnificationmultiplierpercent.description = High values may cause performance issues.
|
setting.minmagnificationmultiplierpercent.description = Une valeur trop haute peut causer des problèmes de performance.
|
||||||
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
|
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
|
||||||
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
|
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
|
||||||
uiscale.cancel = Annuler & Quitter
|
uiscale.cancel = Annuler & Quitter
|
||||||
@@ -1373,7 +1375,7 @@ keybind.shoot.name = Tirer
|
|||||||
keybind.zoom.name = Zoomer
|
keybind.zoom.name = Zoomer
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
keybind.skip_wave.name = Skip Wave
|
keybind.skip_wave.name = Passer à la vague suivante
|
||||||
keybind.pause_building.name = Pauser/Reprendre la Construction
|
keybind.pause_building.name = Pauser/Reprendre la Construction
|
||||||
keybind.minimap.name = Mini-carte
|
keybind.minimap.name = Mini-carte
|
||||||
keybind.planet_map.name = Carte de la Planète
|
keybind.planet_map.name = Carte de la Planète
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Défilement du Tchat
|
|||||||
keybind.chat_mode.name = Changer le mode du Tchat
|
keybind.chat_mode.name = Changer le mode du Tchat
|
||||||
keybind.drop_unit.name = Larguer une Unité
|
keybind.drop_unit.name = Larguer une Unité
|
||||||
keybind.zoom_minimap.name = Zoomer la Mini-carte
|
keybind.zoom_minimap.name = Zoomer la Mini-carte
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Description des modes de jeux
|
mode.help.title = Description des modes de jeux
|
||||||
mode.survival.name = Survie
|
mode.survival.name = Survie
|
||||||
mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode.
|
mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode.
|
||||||
@@ -1473,7 +1477,7 @@ rules.title.teams = Équipes
|
|||||||
rules.title.planet = Planète
|
rules.title.planet = Planète
|
||||||
rules.lighting = Éclairage
|
rules.lighting = Éclairage
|
||||||
rules.fog = Brouillard de Guerre
|
rules.fog = Brouillard de Guerre
|
||||||
rules.invasions = Enemy Sector Invasions
|
rules.invasions = L'ennemi peut attaquer vos secteurs
|
||||||
rules.legacylaunchpads = Legacy Launch Pad Mechanics
|
rules.legacylaunchpads = Legacy Launch Pad Mechanics
|
||||||
rules.legacylaunchpads.info = Allows using launch pads without landing pads, as in 7.0.
|
rules.legacylaunchpads.info = Allows using launch pads without landing pads, as in 7.0.
|
||||||
landingpad.legacy.disabled = [scarlet]\ue815 Disabled[lightgray] (Legacy Launch Pads enabled)
|
landingpad.legacy.disabled = [scarlet]\ue815 Disabled[lightgray] (Legacy Launch Pads enabled)
|
||||||
@@ -1633,7 +1637,7 @@ block.graphite-press.name = Presse à Graphite
|
|||||||
block.multi-press.name = Multi-Presse
|
block.multi-press.name = Multi-Presse
|
||||||
block.constructing = {0} [lightgray](En Construction)
|
block.constructing = {0} [lightgray](En Construction)
|
||||||
block.spawn.name = Point d'Apparition Ennemi
|
block.spawn.name = Point d'Apparition Ennemi
|
||||||
block.remove-wall.name = Remove Wall
|
block.remove-wall.name = Supprimer le mur
|
||||||
block.remove-ore.name = Remove Ore
|
block.remove-ore.name = Remove Ore
|
||||||
block.core-shard.name = Noyau: Fragment
|
block.core-shard.name = Noyau: Fragment
|
||||||
block.core-foundation.name = Noyau: Fondation
|
block.core-foundation.name = Noyau: Fondation
|
||||||
@@ -2027,7 +2031,7 @@ hint.unitSelectControl.mobile = Pour contrôler les unités, entrez en mode [acc
|
|||||||
hint.launch = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la :map: [accent]Carte[] en bas à droite.
|
hint.launch = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la :map: [accent]Carte[] en bas à droite.
|
||||||
hint.launch.mobile = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la :map: [accent]Carte[] dans le :menu: [accent]Menu[].
|
hint.launch.mobile = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la :map: [accent]Carte[] dans le :menu: [accent]Menu[].
|
||||||
hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic molette][] pour copier un seul type de bloc.
|
hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic molette][] pour copier un seul type de bloc.
|
||||||
hint.rebuildSelect = Retenez [accent][[B][] et faites glissez pour selectionner les plans des blocs détruits.\nCela va automatiquement les reconstruire.
|
hint.rebuildSelect = Retenez [accent][[B][] et faites glisser pour selectionner les plans des blocs détruits.\nCela va automatiquement les reconstruire.
|
||||||
hint.rebuildSelect.mobile = Selectionnez le :copy: bouton de copie, ensuite tapez le :wrench: bouton de reconstruction et faites glisser pour sélectionner les plans des blocs détruits.\nCela va les reconstruire automatiquement.
|
hint.rebuildSelect.mobile = Selectionnez le :copy: bouton de copie, ensuite tapez le :wrench: bouton de reconstruction et faites glisser pour sélectionner les plans des blocs détruits.\nCela va les reconstruire automatiquement.
|
||||||
hint.conveyorPathfind = Retenez [accent][[Ctrl-gauche][] pendant que vous placez des convoyeurs, afin de générer un chemin automatiquement.
|
hint.conveyorPathfind = Retenez [accent][[Ctrl-gauche][] pendant que vous placez des convoyeurs, afin de générer un chemin automatiquement.
|
||||||
hint.conveyorPathfind.mobile = Activez le mode :diagonal: [accent]Diagonale[] et déplacez des convoyeurs, afin de générer un chemin automatiquement.
|
hint.conveyorPathfind.mobile = Activez le mode :diagonal: [accent]Diagonale[] et déplacez des convoyeurs, afin de générer un chemin automatiquement.
|
||||||
@@ -2085,7 +2089,7 @@ onset.turrets = Les unités sont efficaces, mais les [accent]tourelles[] ont de
|
|||||||
onset.turretammo = Approvisionnez les tourelles avec du [accent]béryllium[].
|
onset.turretammo = Approvisionnez les tourelles avec du [accent]béryllium[].
|
||||||
onset.walls = Les [accent]murs[] peuvent encaisser les dégâts des attaques ennemies avant qu'elles atteignent vos constructions.\nPlacez quelques :beryllium-wall: [accent]murs de béryllium[] autour de la tourelle.
|
onset.walls = Les [accent]murs[] peuvent encaisser les dégâts des attaques ennemies avant qu'elles atteignent vos constructions.\nPlacez quelques :beryllium-wall: [accent]murs de béryllium[] autour de la tourelle.
|
||||||
onset.enemies = Ennemis en approche, préparez-vous à défendre.
|
onset.enemies = Ennemis en approche, préparez-vous à défendre.
|
||||||
onset.defenses = [accent]Set up defenses:[lightgray] {0}
|
onset.defenses = [accent]Préparez vos défenses:[lightgray] {0}
|
||||||
onset.attack = L'ennemi est vulnérable. Contre-attaquez !
|
onset.attack = L'ennemi est vulnérable. Contre-attaquez !
|
||||||
onset.cores = Les noyaux peuvent être placés sur des [accent]tuiles de noyau[].\nCes nouveaux noyaux servent à faire avancer votre base et partager vos ressources avec d'autres noyaux.\nPlacez un noyau :core-bastion:.
|
onset.cores = Les noyaux peuvent être placés sur des [accent]tuiles de noyau[].\nCes nouveaux noyaux servent à faire avancer votre base et partager vos ressources avec d'autres noyaux.\nPlacez un noyau :core-bastion:.
|
||||||
onset.detect = L'ennemi sera capable de vous détecter dans 2 minutes.\nAméliorez vos défenses, vos exploitations minières ainsi que votre production.
|
onset.detect = L'ennemi sera capable de vous détecter dans 2 minutes.\nAméliorez vos défenses, vos exploitations minières ainsi que votre production.
|
||||||
@@ -2183,10 +2187,10 @@ block.phase-wall.description = Ce mur est moins puissant qu'un mur en thorium, m
|
|||||||
block.phase-wall-large.description = Ce mur est moins puissant qu'un mur en thorium, mais il peut dévier les balles, sauf si elles sont trop puissantes.
|
block.phase-wall-large.description = Ce mur est moins puissant qu'un mur en thorium, mais il peut dévier les balles, sauf si elles sont trop puissantes.
|
||||||
block.surge-wall.description = Le plus puissant bloc défensif.\nA une faible chance d'envoyer des éclairs vers les ennemis.
|
block.surge-wall.description = Le plus puissant bloc défensif.\nA une faible chance d'envoyer des éclairs vers les ennemis.
|
||||||
block.surge-wall-large.description = Le plus puissant bloc défensif.\nA une faible chance d'envoyer des éclairs vers les ennemis.
|
block.surge-wall-large.description = Le plus puissant bloc défensif.\nA une faible chance d'envoyer des éclairs vers les ennemis.
|
||||||
block.scrap-wall.description = Protects structures from enemy projectiles.
|
block.scrap-wall.description = Protège les structures des projectiles ennemis.
|
||||||
block.scrap-wall-large.description = Protects structures from enemy projectiles.
|
block.scrap-wall-large.description = Protège les structures des projectiles ennemis.
|
||||||
block.scrap-wall-huge.description = Protects structures from enemy projectiles.
|
block.scrap-wall-huge.description = Protège les structures des projectiles ennemis.
|
||||||
block.scrap-wall-gigantic.description = Protects structures from enemy projectiles.
|
block.scrap-wall-gigantic.description = Protège les structures des projectiles ennemis.
|
||||||
block.door.description = Une petite porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte, les ennemis peuvent passer à travers.
|
block.door.description = Une petite porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte, les ennemis peuvent passer à travers.
|
||||||
block.door-large.description = Une grande porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte, les ennemis peuvent passer à travers.
|
block.door-large.description = Une grande porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte, les ennemis peuvent passer à travers.
|
||||||
block.mender.description = Soigne périodiquement les bâtiments autour de lui, ce qui permet de remettre les défenses en bon état entre les vagues ennemies.\nPeut utiliser du silicium pour booster la portée et l'efficacité.
|
block.mender.description = Soigne périodiquement les bâtiments autour de lui, ce qui permet de remettre les défenses en bon état entre les vagues ennemies.\nPeut utiliser du silicium pour booster la portée et l'efficacité.
|
||||||
@@ -2484,7 +2488,7 @@ lst.spawnunit = Fait apparaître une unité à un emplacement.
|
|||||||
lst.applystatus = Ajoute ou enlève un effet de statut d'une unité.
|
lst.applystatus = Ajoute ou enlève un effet de statut d'une unité.
|
||||||
lst.weathersense = Check if a type of weather is active.
|
lst.weathersense = Check if a type of weather is active.
|
||||||
lst.weatherset = Set the current state of a type of weather.
|
lst.weatherset = Set the current state of a type of weather.
|
||||||
lst.spawnwave = Simule un déclenchement de vague à n'importe quel emplacement.\nCela n'incrémente pas le compteur de vaugues.
|
lst.spawnwave = Simule un déclenchement de vague à n'importe quel emplacement.\nCela n'incrémente pas le compteur de vagues.
|
||||||
lst.explosion = Crée une explosion à un emplacement.
|
lst.explosion = Crée une explosion à un emplacement.
|
||||||
lst.setrate = Définit la vitesse d'exécution d'un processeur en instructions/tick.
|
lst.setrate = Définit la vitesse d'exécution d'un processeur en instructions/tick.
|
||||||
lst.fetch = Cherche les unités, noyaux, joueurs ou constructions par index. Commence à 0 et termine par le nombre retourné.
|
lst.fetch = Cherche les unités, noyaux, joueurs ou constructions par index. Commence à 0 et termine par le nombre retourné.
|
||||||
@@ -2506,8 +2510,8 @@ lst.localeprint = Add map locale property value to the text buffer.\nTo set map
|
|||||||
lglobal.false = 0
|
lglobal.false = 0
|
||||||
lglobal.true = 1
|
lglobal.true = 1
|
||||||
lglobal.null = null
|
lglobal.null = null
|
||||||
lglobal.@pi = The mathematical constant pi (3.141...)
|
lglobal.@pi = La constante mathématique pi (3.141...)
|
||||||
lglobal.@e = The mathematical constant e (2.718...)
|
lglobal.@e = La constante mathématique e (2.718...)
|
||||||
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
lglobal.@degToRad = Multiply by this number to convert degrees to radians
|
||||||
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
lglobal.@radToDeg = Multiply by this number to convert radians to degrees
|
||||||
|
|
||||||
@@ -2544,7 +2548,7 @@ lglobal.@clientLocale = Locale of the client running the code. For example: en_U
|
|||||||
lglobal.@clientUnit = Unit of client running the code
|
lglobal.@clientUnit = Unit of client running the code
|
||||||
lglobal.@clientName = Player name of client running the code
|
lglobal.@clientName = Player name of client running the code
|
||||||
lglobal.@clientTeam = Team ID of client running the code
|
lglobal.@clientTeam = Team ID of client running the code
|
||||||
lglobal.@clientMobile = True is the client running the code is on mobile, false otherwise
|
lglobal.@clientMobile = True if the client running the code is on mobile, false otherwise
|
||||||
|
|
||||||
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
|
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
|
||||||
|
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = L'ID d'une unité/bloc/ressource/liquide.\nCeci est l'inverse de l'instruction de recherche.
|
laccess.id = L'ID d'une unité/bloc/ressource/liquide.\nCeci est l'inverse de l'instruction de recherche.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Inconnu
|
lcategory.unknown = Inconnu
|
||||||
|
|||||||
@@ -793,7 +793,7 @@ sectors.wave = Hullám:
|
|||||||
sectors.stored = Tárolt nyersanyagok:
|
sectors.stored = Tárolt nyersanyagok:
|
||||||
sectors.resume = Folytatás
|
sectors.resume = Folytatás
|
||||||
sectors.launch = Kilövés
|
sectors.launch = Kilövés
|
||||||
sectors.viewsubmission = \ue80d View Submissions
|
sectors.viewsubmission = \ue80d Alküldetések megtekintése
|
||||||
sectors.select = Kiválasztás
|
sectors.select = Kiválasztás
|
||||||
sectors.launchselect = Célállomás kiválasztása
|
sectors.launchselect = Célállomás kiválasztása
|
||||||
sectors.nonelaunch = [lightgray]semmi (nap)
|
sectors.nonelaunch = [lightgray]semmi (nap)
|
||||||
@@ -818,7 +818,7 @@ sector.changeicon = Ikon módosítása
|
|||||||
sector.noswitch.title = A szektorváltás nem lehetséges
|
sector.noswitch.title = A szektorváltás nem lehetséges
|
||||||
sector.noswitch = Nem válthatsz szektort, amíg egy meglévő szektor támadás alatt áll.\n\nSzektor: [accent]{0}[] a(z) [accent]{1}[] bolygón
|
sector.noswitch = Nem válthatsz szektort, amíg egy meglévő szektor támadás alatt áll.\n\nSzektor: [accent]{0}[] a(z) [accent]{1}[] bolygón
|
||||||
sector.view = A szektor megtekintése
|
sector.view = A szektor megtekintése
|
||||||
sector.foundationrequired = [lightgray] Core: Foundation Required
|
sector.foundationrequired = [lightgray] Alapítvány támaszpont szükséges
|
||||||
|
|
||||||
threat.low = Alacsony
|
threat.low = Alacsony
|
||||||
threat.medium = Közepes
|
threat.medium = Közepes
|
||||||
@@ -855,7 +855,7 @@ sector.overgrowth.name = Túlburjánzás
|
|||||||
sector.tarFields.name = Kátránymezők
|
sector.tarFields.name = Kátránymezők
|
||||||
sector.saltFlats.name = Sós síkságok
|
sector.saltFlats.name = Sós síkságok
|
||||||
sector.fungalPass.name = Gombahágó
|
sector.fungalPass.name = Gombahágó
|
||||||
sector.biomassFacility.name = Biomassza-szintetizáló-létesítmény
|
sector.biomassFacility.name = Biomasszaszintetizáló-létesítmény
|
||||||
sector.windsweptIslands.name = Szélfútta szigetek
|
sector.windsweptIslands.name = Szélfútta szigetek
|
||||||
sector.extractionOutpost.name = Kivonási helyőrség
|
sector.extractionOutpost.name = Kivonási helyőrség
|
||||||
sector.facility32m.name = 32M-es létesítmény
|
sector.facility32m.name = 32M-es létesítmény
|
||||||
@@ -953,7 +953,7 @@ status.electrified.name = Elektromos
|
|||||||
status.spore-slowed.name = Spórával lassított
|
status.spore-slowed.name = Spórával lassított
|
||||||
status.tarred.name = Kátrányozott
|
status.tarred.name = Kátrányozott
|
||||||
status.overdrive.name = Túlhajtás
|
status.overdrive.name = Túlhajtás
|
||||||
status.overclock.name = Túlhúzás
|
status.overclock.name = Túl
|
||||||
status.shocked.name = Sokkolt
|
status.shocked.name = Sokkolt
|
||||||
status.blasted.name = Felrobbant
|
status.blasted.name = Felrobbant
|
||||||
status.unmoving.name = Mozdulatlan
|
status.unmoving.name = Mozdulatlan
|
||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = A változtatások érvénybe lépéséhez
|
|||||||
setting.fps.name = FPS, memóriahasználat és ping megjelenítése
|
setting.fps.name = FPS, memóriahasználat és ping megjelenítése
|
||||||
setting.console.name = Konzol engedélyezése
|
setting.console.name = Konzol engedélyezése
|
||||||
setting.smoothcamera.name = Egyenletes kamera
|
setting.smoothcamera.name = Egyenletes kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelesítés
|
setting.pixelate.name = Pixelesítés
|
||||||
setting.minimap.name = Minitérkép megjelenítése
|
setting.minimap.name = Minitérkép megjelenítése
|
||||||
@@ -1364,8 +1366,8 @@ keybind.pick.name = Blokk kiválasztása
|
|||||||
keybind.break_block.name = Blokk törlése
|
keybind.break_block.name = Blokk törlése
|
||||||
keybind.select_all_units.name = Összes egység kijelölése
|
keybind.select_all_units.name = Összes egység kijelölése
|
||||||
keybind.select_all_unit_factories.name = Összes egységgyár kijelölése
|
keybind.select_all_unit_factories.name = Összes egységgyár kijelölése
|
||||||
keybind.select_all_unit_transport.name = Select All Unit Transports
|
keybind.select_all_unit_transport.name = Összes egységszállító kijelölése
|
||||||
keybind.select_across_screen.name = Select Across Screen (Hold)
|
keybind.select_across_screen.name = Teljes képernyős kijelölés (tartsd lenyomva)
|
||||||
keybind.deselect.name = Blokk-kijelölés törlése
|
keybind.deselect.name = Blokk-kijelölés törlése
|
||||||
keybind.pickupCargo.name = Rakomány felvétele
|
keybind.pickupCargo.name = Rakomány felvétele
|
||||||
keybind.dropCargo.name = Rakomány lerakása
|
keybind.dropCargo.name = Rakomány lerakása
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Csevegés görgetése
|
|||||||
keybind.chat_mode.name = Csevegési mód megváltoztatása
|
keybind.chat_mode.name = Csevegési mód megváltoztatása
|
||||||
keybind.drop_unit.name = Egység eldobása
|
keybind.drop_unit.name = Egység eldobása
|
||||||
keybind.zoom_minimap.name = Nagyítás a minitérképen
|
keybind.zoom_minimap.name = Nagyítás a minitérképen
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Játékmódok leírása
|
mode.help.title = Játékmódok leírása
|
||||||
mode.survival.name = Túlélés
|
mode.survival.name = Túlélés
|
||||||
mode.survival.description = A normál mód. Korlátozott nyersanyagok, és automatikusan érkező hullámok.\n[gray]Ellenséges kezdőpont szükséges hozzá a pályán.
|
mode.survival.description = A normál mód. Korlátozott nyersanyagok, és automatikusan érkező hullámok.\n[gray]Ellenséges kezdőpont szükséges hozzá a pályán.
|
||||||
@@ -1406,7 +1410,7 @@ mode.custom = Egyéni szabályok
|
|||||||
rules.invaliddata = Érvénytelen adatok vannak a vágólapon.
|
rules.invaliddata = Érvénytelen adatok vannak a vágólapon.
|
||||||
rules.hidebannedblocks = Tiltott épületek elrejtése
|
rules.hidebannedblocks = Tiltott épületek elrejtése
|
||||||
rules.infiniteresources = Végtelen nyersanyagforrás
|
rules.infiniteresources = Végtelen nyersanyagforrás
|
||||||
rules.fillitems = Fill Core With Items
|
rules.fillitems = Támaszpont feltöltése nyersanyagokkal
|
||||||
rules.onlydepositcore = Csak a támaszpontokba engedélyezett a nyersanyagok elhelyezése
|
rules.onlydepositcore = Csak a támaszpontokba engedélyezett a nyersanyagok elhelyezése
|
||||||
rules.derelictrepair = Az elhagyatott épületek javításának engedélyezése
|
rules.derelictrepair = Az elhagyatott épületek javításának engedélyezése
|
||||||
rules.reactorexplosions = Reaktorrobbanások
|
rules.reactorexplosions = Reaktorrobbanások
|
||||||
@@ -1421,14 +1425,14 @@ rules.alloweditworldprocessors = Világprocesszorok szerkesztésének engedélye
|
|||||||
rules.alloweditworldprocessors.info = Amikor engedélyezve van, a világlogikai blokkok a szerkesztőn kívül is elhelyezhetők és szerkeszthetők.
|
rules.alloweditworldprocessors.info = Amikor engedélyezve van, a világlogikai blokkok a szerkesztőn kívül is elhelyezhetők és szerkeszthetők.
|
||||||
rules.waves = Hullámok
|
rules.waves = Hullámok
|
||||||
rules.airUseSpawns = A légi egységek használjanak kezdőpontokat
|
rules.airUseSpawns = A légi egységek használjanak kezdőpontokat
|
||||||
rules.wavespawnatcores = Waves Spawn At Cores
|
rules.wavespawnatcores = Hullámok indítása a támaszpontok közeléből
|
||||||
rules.wavespawnatcores.info = When enabled in attack mode, waves spawn near all enemy cores.
|
rules.wavespawnatcores.info = Ha engedélyezve van a támadómódú pályákon, akkor a hullámok az ellenséges támaszpontok közeléből indulnak.
|
||||||
rules.attack = Támadási mód
|
rules.attack = Támadómód
|
||||||
rules.buildai = Bázisépítő MI
|
rules.buildai = Bázisépítő MI
|
||||||
rules.buildaitier = Építő MI szintje
|
rules.buildaitier = Építő MI szintje
|
||||||
rules.rtsai = RTS MI [red](WIP)
|
rules.rtsai = RTS MI
|
||||||
rules.rtsai.campaign = RTS támadó MI
|
rules.rtsai.campaign = RTS támadó-MI
|
||||||
rules.rtsai.campaign.info = A „támadó” pályákon (ahol az ellenség is rendelkezik támaszponttal) az MI által irányított\negységek csoportosulnak, és intelligensebb módon támadják a játékosok bázisait.
|
rules.rtsai.campaign.info = A „támadómódú” pályákon (ahol az ellenség is rendelkezik támaszponttal) az MI által irányított\negységek csoportosulnak, és intelligensebb módon támadják a játékosok bázisait.
|
||||||
rules.rtsminsquadsize = Minimális osztagméret
|
rules.rtsminsquadsize = Minimális osztagméret
|
||||||
rules.rtsmaxsquadsize = Maximális osztagméret
|
rules.rtsmaxsquadsize = Maximális osztagméret
|
||||||
rules.rtsminattackweight = Minimális támadási súly
|
rules.rtsminattackweight = Minimális támadási súly
|
||||||
@@ -1783,7 +1787,7 @@ block.impulse-pump.name = Impulzusszivattyú
|
|||||||
block.thermal-generator.name = Hőerőmű
|
block.thermal-generator.name = Hőerőmű
|
||||||
block.surge-smelter.name = Elektrometál-olvasztó
|
block.surge-smelter.name = Elektrometál-olvasztó
|
||||||
block.mender.name = Foltozó
|
block.mender.name = Foltozó
|
||||||
block.mend-projector.name = Foltozó-kivetítő
|
block.mend-projector.name = Foltozókivetítő
|
||||||
block.surge-wall.name = Elektrometálfal
|
block.surge-wall.name = Elektrometálfal
|
||||||
block.surge-wall-large.name = Nagy elektrometálfal
|
block.surge-wall-large.name = Nagy elektrometálfal
|
||||||
block.cyclone.name = Cyclone
|
block.cyclone.name = Cyclone
|
||||||
@@ -1905,7 +1909,7 @@ block.slag-incinerator.name = Salakos égetőkamra
|
|||||||
block.carbide-crucible.name = Karbidolvasztó
|
block.carbide-crucible.name = Karbidolvasztó
|
||||||
block.slag-centrifuge.name = Salakcentrifuga
|
block.slag-centrifuge.name = Salakcentrifuga
|
||||||
block.surge-crucible.name = Elektrometál-olvasztó
|
block.surge-crucible.name = Elektrometál-olvasztó
|
||||||
block.cyanogen-synthesizer.name = Diciánszintetizáló
|
block.cyanogen-synthesizer.name = Dicián
|
||||||
block.phase-synthesizer.name = Tóritkvarc-szintetizáló
|
block.phase-synthesizer.name = Tóritkvarc-szintetizáló
|
||||||
block.heat-reactor.name = Hőerőmű
|
block.heat-reactor.name = Hőerőmű
|
||||||
block.beryllium-wall.name = Berilliumfal
|
block.beryllium-wall.name = Berilliumfal
|
||||||
@@ -2272,8 +2276,8 @@ block.spectre.description = Nagy lövedékekkel tüzel légi és földi célpont
|
|||||||
block.meltdown.description = Feltöltődés után folyamatos lézersugarat lő a közeli ellenségekre. A működéséhez hűtőfolyadékot igényel.
|
block.meltdown.description = Feltöltődés után folyamatos lézersugarat lő a közeli ellenségekre. A működéséhez hűtőfolyadékot igényel.
|
||||||
block.foreshadow.description = Egy nagy villámot lő ki egy nagy távolságra lévő célpontra. A magasabb maximális életerővel rendelkező ellenségeket részesíti előnyben.
|
block.foreshadow.description = Egy nagy villámot lő ki egy nagy távolságra lévő célpontra. A magasabb maximális életerővel rendelkező ellenségeket részesíti előnyben.
|
||||||
block.repair-point.description = Folyamatosan javítja a hatósugarában lévő legközelebbi sérült egységet.
|
block.repair-point.description = Folyamatosan javítja a hatósugarában lévő legközelebbi sérült egységet.
|
||||||
block.segment.description = Megsemmisíti a beérkező lövedékeket. A lézerrel szemben hatástalan.
|
block.segment.description = Megsemmisíti a beérkező lövedékeket, de a lézerrel szemben hatástalan.
|
||||||
block.parallax.description = Vonónyalábot bocsát ki, amivel magához vonzza, és közben sebzi a légi egységeket.
|
block.parallax.description = Vonósugarat bocsát ki, amivel magához vonzza, és közben sebzi a légi egységeket.
|
||||||
block.tsunami.description = Erős folyadékhullámot lő az ellenségre. Eloltja a tüzeket, ha vízzel van ellátva.
|
block.tsunami.description = Erős folyadékhullámot lő az ellenségre. Eloltja a tüzeket, ha vízzel van ellátva.
|
||||||
block.silicon-crucible.description = Szilíciumot finomít homokból és szénből, piratitot igényel kiegészítő hőforrásként. Forró környezetben még hatékonyabb.
|
block.silicon-crucible.description = Szilíciumot finomít homokból és szénből, piratitot igényel kiegészítő hőforrásként. Forró környezetben még hatékonyabb.
|
||||||
block.disassembler.description = Ritka ásványi összetevőire bontja le a salakot, alacsony hatásfokkal. Képes tóriumot kinyerni.
|
block.disassembler.description = Ritka ásványi összetevőire bontja le a salakot, alacsony hatásfokkal. Képes tóriumot kinyerni.
|
||||||
@@ -2449,14 +2453,14 @@ unit.collaris.description = Nagy hatótávolságú repeszágyúval lövi az elle
|
|||||||
unit.elude.description = Célkövető golyópárokat lő ki az ellenséges célpontokra. Lebeg a folyadékfelületeket felett.
|
unit.elude.description = Célkövető golyópárokat lő ki az ellenséges célpontokra. Lebeg a folyadékfelületeket felett.
|
||||||
unit.avert.description = Forgó lövedékpárokat lő ki az ellenséges célpontokra.
|
unit.avert.description = Forgó lövedékpárokat lő ki az ellenséges célpontokra.
|
||||||
unit.obviate.description = Forgó, páros villámgömböket lő ki az ellenséges célpontokra.
|
unit.obviate.description = Forgó, páros villámgömböket lő ki az ellenséges célpontokra.
|
||||||
unit.quell.description = Nagy hatótávolságú célkövető rakétát lő ki az ellenséges célpontokra. Elnyomja az ellenséges szerkezetjavító épületeket. Csak földi célpontokat támad.
|
unit.quell.description = Instabil plazmapajzzsal felszerelt nagy hatótávolságú célkövető rakétákat lő ki az ellenséges célpontokra. Elnyomja az ellenséges szerkezetjavító épületeket. Csak földi célpontokat támad.
|
||||||
unit.disrupt.description = Nagy hatótávolságú célkövető elnyomó rakétát lő ki az ellenséges célpontokra. Elnyomja az ellenséges szerkezetjavító épületeket. Csak földi célpontokat támad.
|
unit.disrupt.description = Nagy hatótávolságú célkövető elnyomó rakétát lő ki az ellenséges célpontokra. Elnyomja az ellenséges szerkezetjavító épületeket. Csak földi célpontokat támad.
|
||||||
unit.evoke.description = A bástya védelmére szolgáló építményeket épít. Sugárral javítja az építményeket. 2×2-es épületek szállítására is alkalmas.
|
unit.evoke.description = A bástya védelmére szolgáló építményeket épít. Sugárral javítja az építményeket. 2×2-es épületek szállítására is alkalmas.
|
||||||
unit.incite.description = A citadella védelmére szolgáló építményeket épít. Sugárral javítja az építményeket. 2×2-es épületek szállítására is alkalmas.
|
unit.incite.description = A citadella védelmére szolgáló építményeket épít. Sugárral javítja az építményeket. 2×2-es épületek szállítására is alkalmas.
|
||||||
unit.emanate.description = Az akropolisz védelmére szolgáló építményeket épít. Sugárral javítja az építményeket. 2×2-es épületek szállítására is alkalmas.
|
unit.emanate.description = Az akropolisz védelmére szolgáló építményeket épít. Sugárral javítja az építményeket. 2×2-es épületek szállítására is alkalmas.
|
||||||
|
|
||||||
lst.read = Szám kiolvasása egy összekapcsolt memóriacellából.
|
lst.read = Szám kiolvasása egy összekapcsolt memóriacellából.\nMás processzorokban lévő változókból is képes olvasni.
|
||||||
lst.write = Szám beírása egy összekapcsolt memóriacellába.
|
lst.write = Szám beírása egy összekapcsolt memóriacellába.Más processzorokban lévő változókba is képes írni
|
||||||
lst.print = Szöveg hozzáadása a kiírási pufferhez.\nA [accent]Print Flush[] használatáig nem jelenít meg semmit.
|
lst.print = Szöveg hozzáadása a kiírási pufferhez.\nA [accent]Print Flush[] használatáig nem jelenít meg semmit.
|
||||||
lst.printchar = Egy UTF-16 karakter vagy tartalmi ikon hozzáadása a nyomtatási pufferhez.\nNem jelenít meg semmit, amíg a [accent]Print Flush[] használatban van.
|
lst.printchar = Egy UTF-16 karakter vagy tartalmi ikon hozzáadása a nyomtatási pufferhez.\nNem jelenít meg semmit, amíg a [accent]Print Flush[] használatban van.
|
||||||
lst.format = A szövegpufferben lévő következő helyőrző cseréje egy értékre.\nNem csinál semmit, ha a helyőrzőminta érvénytelen.\nHelyőrzőminta: „{[accent]number 0-9[]}”\nPélda:\n[accent]print „test {0}”\nformat „example”
|
lst.format = A szövegpufferben lévő következő helyőrző cseréje egy értékre.\nNem csinál semmit, ha a helyőrzőminta érvénytelen.\nHelyőrzőminta: „{[accent]number 0-9[]}”\nPélda:\n[accent]print „test {0}”\nformat „example”
|
||||||
@@ -2489,7 +2493,7 @@ lst.explosion = Robbanás létrehozása az adott helyen.
|
|||||||
lst.setrate = A processzor végrehajtási sebességének beállítása utasítás/órajelciklusban.
|
lst.setrate = A processzor végrehajtási sebességének beállítása utasítás/órajelciklusban.
|
||||||
lst.fetch = Egységek, támaszpontok, játékosok, vagy épületek lekérdezése index szerint.\nAz indexek 0-tól indulnak és a visszaadott számuknál végződnek.
|
lst.fetch = Egységek, támaszpontok, játékosok, vagy épületek lekérdezése index szerint.\nAz indexek 0-tól indulnak és a visszaadott számuknál végződnek.
|
||||||
lst.packcolor = Egyetlen számba tömöríti a [0, 1] RGBA komponenseket a rajzoláshoz vagy szabálymeghatározáshoz.
|
lst.packcolor = Egyetlen számba tömöríti a [0, 1] RGBA komponenseket a rajzoláshoz vagy szabálymeghatározáshoz.
|
||||||
lst.unpackcolor = Unpack RGBA components from a color that was packed using Pack Color.
|
lst.unpackcolor = RGBA komponensek kicsomagolása egy színből, amely a „Pack Color” segítségével lett becsomagolva.
|
||||||
lst.setrule = Játékszabály beállítása.
|
lst.setrule = Játékszabály beállítása.
|
||||||
lst.flushmessage = Üzenet megjelenítése a képernyőn a szövegpufferből. Ha a sikeres válasz változója [accent]@wait[],\nakkor, megvárja, amíg az előző üzenet befejeződik.\nMáskülönben a kimenet független attól, hogy az üzenet megjelenítése sikeres volt-e.
|
lst.flushmessage = Üzenet megjelenítése a képernyőn a szövegpufferből. Ha a sikeres válasz változója [accent]@wait[],\nakkor, megvárja, amíg az előző üzenet befejeződik.\nMáskülönben a kimenet független attól, hogy az üzenet megjelenítése sikeres volt-e.
|
||||||
lst.cutscene = A játékos kamerájának mozgatása.
|
lst.cutscene = A játékos kamerájának mozgatása.
|
||||||
@@ -2566,8 +2570,8 @@ laccess.size = Egy egység vagy épület mérete, vagy egy karakterlánc hossza.
|
|||||||
laccess.id = Egy egység/blokk/nyersanyag/folyadék azonosítója.\nEz a keresési művelet fordítottja.
|
laccess.id = Egy egység/blokk/nyersanyag/folyadék azonosítója.\nEz a keresési művelet fordítottja.
|
||||||
laccess.displaywidth = Egy kijelzőblokk szélessége pixelben.
|
laccess.displaywidth = Egy kijelzőblokk szélessége pixelben.
|
||||||
laccess.displayheight = Egy kijelzőblokk magassága pixelben.
|
laccess.displayheight = Egy kijelzőblokk magassága pixelben.
|
||||||
laccess.bufferusage = A kijelző grafikus pufferében lévő feldolgozatlan parancsok száma.
|
laccess.buffersize = A kijelző grafikus pufferében lévő feldolgozatlan parancsok száma.\nEgy üzenet tartalmának hossza.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = A blokkon végrehajtott műveletek száma.\nKijelzők esetén a drawflush-műveletek számát adja vissza.
|
||||||
|
|
||||||
lcategory.unknown = Ismeretlen
|
lcategory.unknown = Ismeretlen
|
||||||
lcategory.unknown.description = Nem kategorizált utasítások.
|
lcategory.unknown.description = Nem kategorizált utasítások.
|
||||||
@@ -2601,13 +2605,13 @@ lenum.always = Mindig igaz.
|
|||||||
lenum.idiv = Egész osztás.
|
lenum.idiv = Egész osztás.
|
||||||
lenum.div = Osztás.\nNullával való osztáskor a visszatérési érték [accent]null[].
|
lenum.div = Osztás.\nNullával való osztáskor a visszatérési érték [accent]null[].
|
||||||
lenum.mod = Modulo.
|
lenum.mod = Modulo.
|
||||||
lenum.emod = True modulo, result is always positive.
|
lenum.emod = Euklideszi modulo, az eredmény mindig pozitív.
|
||||||
lenum.equal = Egyenlő. Kényszeríti a típusokat.\nA nem null értékű objektumok értéke 1 lesz, egyébként 0.
|
lenum.equal = Egyenlő. Kényszeríti a típusokat.\nA nem null értékű objektumok értéke 1 lesz, egyébként 0.
|
||||||
lenum.notequal = Nem egyenlő. Kényszeríti a típusokat.
|
lenum.notequal = Nem egyenlő. Kényszeríti a típusokat.
|
||||||
lenum.strictequal = Szigorúan egyenlőség. Nem kényszeríti a típusokat.\nA [accent]null[] ellenőrzésére is használható.
|
lenum.strictequal = Szigorúan egyenlőség. Nem kényszeríti a típusokat.\nA [accent]null[] ellenőrzésére is használható.
|
||||||
lenum.shl = Biteltolás balra.
|
lenum.shl = Biteltolás balra.
|
||||||
lenum.shr = Biteltolás jobbra.
|
lenum.shr = Biteltolás jobbra.
|
||||||
lenum.ushr = Unsigned bit-shift right.
|
lenum.ushr = Előjel nélküli biteltolás jobbra.
|
||||||
lenum.or = Bitenkénti VAGY.
|
lenum.or = Bitenkénti VAGY.
|
||||||
lenum.land = Logikai ÉS.
|
lenum.land = Logikai ÉS.
|
||||||
lenum.and = Bitenkénti ÉS.
|
lenum.and = Bitenkénti ÉS.
|
||||||
@@ -2740,6 +2744,6 @@ lenum.rtsminsquad = A támadó osztagok minimális mérete.
|
|||||||
lenum.maparea = A játszható területe a pályának. Minden, ami a területen kívülre esik, nem lesz elérhető.
|
lenum.maparea = A játszható területe a pályának. Minden, ami a területen kívülre esik, nem lesz elérhető.
|
||||||
lenum.ambientlight = Környezeti világítás színe. Akkor használható, amikor a világítás engedélyezve van.
|
lenum.ambientlight = Környezeti világítás színe. Akkor használható, amikor a világítás engedélyezve van.
|
||||||
lenum.solarmultiplier = Megsokszorozza a napelemek teljesítményét.
|
lenum.solarmultiplier = Megsokszorozza a napelemek teljesítményét.
|
||||||
lenum.dragmultiplier = Környezet-húzási szorzó.
|
lenum.dragmultiplier = Környezethúzási szorzó.
|
||||||
lenum.ban = Épületek vagy egységek, amelyek nem építhetők meg vagy helyezhetők el a pályán.
|
lenum.ban = Épületek vagy egységek, amelyek nem építhetők meg vagy helyezhetők el a pályán.
|
||||||
lenum.unban = Egy egység vagy épület újraengedélyezése.
|
lenum.unban = Egy egység vagy épület újraengedélyezése.
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Mulai ulang mungkin diperlukan untuk mene
|
|||||||
setting.fps.name = Tunjukkan FPS & Ping
|
setting.fps.name = Tunjukkan FPS & Ping
|
||||||
setting.console.name = Hidupkan Konsol
|
setting.console.name = Hidupkan Konsol
|
||||||
setting.smoothcamera.name = Kamera Halus
|
setting.smoothcamera.name = Kamera Halus
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Mode Pixel
|
setting.pixelate.name = Mode Pixel
|
||||||
setting.minimap.name = Tunjukkan Peta Kecil
|
setting.minimap.name = Tunjukkan Peta Kecil
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Gulir Pesan
|
|||||||
keybind.chat_mode.name = Ubah Mode Pesan
|
keybind.chat_mode.name = Ubah Mode Pesan
|
||||||
keybind.drop_unit.name = Turunkan Unit
|
keybind.drop_unit.name = Turunkan Unit
|
||||||
keybind.zoom_minimap.name = Perbesar Peta Kecil
|
keybind.zoom_minimap.name = Perbesar Peta Kecil
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Deskripsi mode permainan
|
mode.help.title = Deskripsi mode permainan
|
||||||
mode.survival.name = Bertahan Hidup
|
mode.survival.name = Bertahan Hidup
|
||||||
mode.survival.description = Mode normal. Sumber daya terbatas dan gelombang otomatis.\n[gray]Membutuhkan zona pendaratan musuh di dalam peta untuk bermain.
|
mode.survival.description = Mode normal. Sumber daya terbatas dan gelombang otomatis.\n[gray]Membutuhkan zona pendaratan musuh di dalam peta untuk bermain.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Ukuran dari sebuah unit/bangunan atau panjang dari sebuah string.
|
|||||||
laccess.id = ID suatu unit/blok/bahan/cairan.\nIni adalah kebalikan dari operasi pencarian.
|
laccess.id = ID suatu unit/blok/bahan/cairan.\nIni adalah kebalikan dari operasi pencarian.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Tak Diketahui
|
lcategory.unknown = Tak Diketahui
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Potrebbe essere necessario il riavvio.
|
|||||||
setting.fps.name = Mostra FPS e Ping
|
setting.fps.name = Mostra FPS e Ping
|
||||||
setting.console.name = Attiva Console
|
setting.console.name = Attiva Console
|
||||||
setting.smoothcamera.name = Visuale fluida
|
setting.smoothcamera.name = Visuale fluida
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixellato
|
setting.pixelate.name = Pixellato
|
||||||
setting.minimap.name = Mostra Minimappa
|
setting.minimap.name = Mostra Minimappa
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Scorri Chat
|
|||||||
keybind.chat_mode.name = Cambia modalità chat
|
keybind.chat_mode.name = Cambia modalità chat
|
||||||
keybind.drop_unit.name = Lascia Materiali
|
keybind.drop_unit.name = Lascia Materiali
|
||||||
keybind.zoom_minimap.name = Esegui Zoom Minimappa
|
keybind.zoom_minimap.name = Esegui Zoom Minimappa
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Descrizione delle Modalità
|
mode.help.title = Descrizione delle Modalità
|
||||||
mode.survival.name = Sopravvivenza
|
mode.survival.name = Sopravvivenza
|
||||||
mode.survival.description = Modalità normale. Risorse limitate ed ondate in entrata automatiche.
|
mode.survival.description = Modalità normale. Risorse limitate ed ondate in entrata automatiche.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = 再起動が必要になる場合があ
|
|||||||
setting.fps.name = FPSを表示
|
setting.fps.name = FPSを表示
|
||||||
setting.console.name = コンソールを有効にする
|
setting.console.name = コンソールを有効にする
|
||||||
setting.smoothcamera.name = スムーズなカメラ
|
setting.smoothcamera.name = スムーズなカメラ
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = 垂直同期
|
setting.vsync.name = 垂直同期
|
||||||
setting.pixelate.name = ピクセル化[lightgray] (アニメーションが無効化されます)
|
setting.pixelate.name = ピクセル化[lightgray] (アニメーションが無効化されます)
|
||||||
setting.minimap.name = ミニマップを表示
|
setting.minimap.name = ミニマップを表示
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = チャットスクロール
|
|||||||
keybind.chat_mode.name = チャットモードの変更
|
keybind.chat_mode.name = チャットモードの変更
|
||||||
keybind.drop_unit.name = ユニット投下
|
keybind.drop_unit.name = ユニット投下
|
||||||
keybind.zoom_minimap.name = ミニマップのズーム
|
keybind.zoom_minimap.name = ミニマップのズーム
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = モード説明
|
mode.help.title = モード説明
|
||||||
mode.survival.name = サバイバル
|
mode.survival.name = サバイバル
|
||||||
mode.survival.description = 通常のモードです。資源も限られる中、自動的にウェーブが進行していきます。\n[gray]マップに敵の出現設定が必要です。
|
mode.survival.description = 通常のモードです。資源も限られる中、自動的にウェーブが進行していきます。\n[gray]マップに敵の出現設定が必要です。
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = 不明
|
lcategory.unknown = 不明
|
||||||
|
|||||||
@@ -378,8 +378,8 @@ stance.holdfire = 명령: 사격 중지
|
|||||||
stance.pursuetarget = 명령: 타겟 추격
|
stance.pursuetarget = 명령: 타겟 추격
|
||||||
stance.patrol = 명령: 정찰
|
stance.patrol = 명령: 정찰
|
||||||
stance.ram = 명령 : 돌격\n[lightgray] 유닛이 장애물 여부를 확인하지 않고 일직선으로 이동합니다.
|
stance.ram = 명령 : 돌격\n[lightgray] 유닛이 장애물 여부를 확인하지 않고 일직선으로 이동합니다.
|
||||||
stance.mineauto = Automatic Mining
|
stance.mineauto = 자동 채굴
|
||||||
stance.mine = Mine Item: {0}
|
stance.mine = 채굴 자원: {0}
|
||||||
openlink = 링크 열기
|
openlink = 링크 열기
|
||||||
copylink = 링크 복사
|
copylink = 링크 복사
|
||||||
back = 뒤로가기
|
back = 뒤로가기
|
||||||
@@ -525,7 +525,7 @@ details = 설명...
|
|||||||
edit = 편집...
|
edit = 편집...
|
||||||
variables = 변수
|
variables = 변수
|
||||||
logic.clear.confirm = 이 프로세서의 모든 코드를 삭제하시겠습니까?
|
logic.clear.confirm = 이 프로세서의 모든 코드를 삭제하시겠습니까?
|
||||||
logic.restart = Restart
|
logic.restart = 재시작
|
||||||
logic.globals = 내장 변수
|
logic.globals = 내장 변수
|
||||||
|
|
||||||
editor.name = 이름:
|
editor.name = 이름:
|
||||||
@@ -793,7 +793,7 @@ sectors.wave = 단계:
|
|||||||
sectors.stored = 저장량:
|
sectors.stored = 저장량:
|
||||||
sectors.resume = 재개
|
sectors.resume = 재개
|
||||||
sectors.launch = 출격
|
sectors.launch = 출격
|
||||||
sectors.viewsubmission = \ue80d View Submissions
|
sectors.viewsubmission = \ue80d 제출물 보기
|
||||||
sectors.select = 선택
|
sectors.select = 선택
|
||||||
sectors.launchselect = 발사 대상 선택
|
sectors.launchselect = 발사 대상 선택
|
||||||
sectors.nonelaunch = [lightgray]없음 (태양)[]
|
sectors.nonelaunch = [lightgray]없음 (태양)[]
|
||||||
@@ -818,7 +818,7 @@ sector.changeicon = 아이콘 바꾸기
|
|||||||
sector.noswitch.title = 지역 전환 불가능
|
sector.noswitch.title = 지역 전환 불가능
|
||||||
sector.noswitch = 기존 지역이 공격받는 동안은 지역을 전환할 수 없습니다.\n\n지역: [accent]{0}[] 중 [accent]{1}[]
|
sector.noswitch = 기존 지역이 공격받는 동안은 지역을 전환할 수 없습니다.\n\n지역: [accent]{0}[] 중 [accent]{1}[]
|
||||||
sector.view = 지역 보기
|
sector.view = 지역 보기
|
||||||
sector.foundationrequired = [lightgray] Core: Foundation Required
|
sector.foundationrequired = [lightgray] 코어: 기반 필요
|
||||||
|
|
||||||
threat.low = 낮음
|
threat.low = 낮음
|
||||||
threat.medium = 보통
|
threat.medium = 보통
|
||||||
@@ -869,10 +869,10 @@ sector.atolls.name = 환초섬
|
|||||||
sector.testingGrounds.name = 시험장
|
sector.testingGrounds.name = 시험장
|
||||||
sector.seaPort.name = 바다 항구
|
sector.seaPort.name = 바다 항구
|
||||||
sector.weatheredChannels.name = 풍화된 수로
|
sector.weatheredChannels.name = 풍화된 수로
|
||||||
sector.mycelialBastion.name = 균사 요새
|
sector.mycelialBastion.name = 균사 성채
|
||||||
sector.frontier.name = 국경 지방
|
sector.frontier.name = 국경 지방
|
||||||
sector.cruxscape.name = 크럭스케이프
|
sector.cruxscape.name = 크럭스케이프
|
||||||
sector.geothermalStronghold.name = 지열 근거지
|
sector.geothermalStronghold.name = 지열 요새
|
||||||
|
|
||||||
sector.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지녔습니다. 적은 위협적이지 않지만, 자원도 풍부하진 않습니다.\n가능한 한 많은 양의 구리와 납을 수집하십시오.\n이제 출격할 시간입니다.
|
sector.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지녔습니다. 적은 위협적이지 않지만, 자원도 풍부하진 않습니다.\n가능한 한 많은 양의 구리와 납을 수집하십시오.\n이제 출격할 시간입니다.
|
||||||
sector.frozenForest.description = 산과 가까운 이곳에도, 포자가 퍼졌습니다. 혹한의 추위조차 포자가 퍼지는 것을 억누를 수 없었습니다.\n화력 발전기를 건설하고, 멘더를 사용하는 방법을 배우세요.
|
sector.frozenForest.description = 산과 가까운 이곳에도, 포자가 퍼졌습니다. 혹한의 추위조차 포자가 퍼지는 것을 억누를 수 없었습니다.\n화력 발전기를 건설하고, 멘더를 사용하는 방법을 배우세요.
|
||||||
@@ -1009,7 +1009,7 @@ stat.itemsmoved = 이동 속도
|
|||||||
stat.launchtime = 출격 간격
|
stat.launchtime = 출격 간격
|
||||||
stat.shootrange = 사거리
|
stat.shootrange = 사거리
|
||||||
stat.size = 크기
|
stat.size = 크기
|
||||||
stat.displaysize = 화면 크기
|
stat.displaysize = 최대 화면 크기
|
||||||
stat.liquidcapacity = 액체 용량
|
stat.liquidcapacity = 액체 용량
|
||||||
stat.powerrange = 전선 길이
|
stat.powerrange = 전선 길이
|
||||||
stat.linkrange = 연결 길이
|
stat.linkrange = 연결 길이
|
||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = 적용하려면 재시작이 필요할
|
|||||||
setting.fps.name = FPS와 핑 표시
|
setting.fps.name = FPS와 핑 표시
|
||||||
setting.console.name = 콘솔 활성화
|
setting.console.name = 콘솔 활성화
|
||||||
setting.smoothcamera.name = 부드러운 시점
|
setting.smoothcamera.name = 부드러운 시점
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = 수직 동기화
|
setting.vsync.name = 수직 동기화
|
||||||
setting.pixelate.name = 픽셀화
|
setting.pixelate.name = 픽셀화
|
||||||
setting.minimap.name = 미니맵 표시
|
setting.minimap.name = 미니맵 표시
|
||||||
@@ -1364,8 +1366,8 @@ keybind.pick.name = 블록 선택
|
|||||||
keybind.break_block.name = 블록 파괴
|
keybind.break_block.name = 블록 파괴
|
||||||
keybind.select_all_units.name = 전체 유닛 선택
|
keybind.select_all_units.name = 전체 유닛 선택
|
||||||
keybind.select_all_unit_factories.name = 전체 유닛 공장 선택
|
keybind.select_all_unit_factories.name = 전체 유닛 공장 선택
|
||||||
keybind.select_all_unit_transport.name = Select All Unit Transports
|
keybind.select_all_unit_transport.name = 전체 유닛 수송 선택
|
||||||
keybind.select_across_screen.name = Select Across Screen (Hold)
|
keybind.select_across_screen.name = 화면 전체 선택 (홀드)
|
||||||
keybind.deselect.name = 선택 해제
|
keybind.deselect.name = 선택 해제
|
||||||
keybind.pickupCargo.name = 화물 집기
|
keybind.pickupCargo.name = 화물 집기
|
||||||
keybind.dropCargo.name = 화물 내려놓기
|
keybind.dropCargo.name = 화물 내려놓기
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = 채팅 스크롤
|
|||||||
keybind.chat_mode.name = 채팅 모드 변경
|
keybind.chat_mode.name = 채팅 모드 변경
|
||||||
keybind.drop_unit.name = 유닛 내려놓기
|
keybind.drop_unit.name = 유닛 내려놓기
|
||||||
keybind.zoom_minimap.name = 미니맵 확대
|
keybind.zoom_minimap.name = 미니맵 확대
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = 모드 설명
|
mode.help.title = 모드 설명
|
||||||
mode.survival.name = 생존
|
mode.survival.name = 생존
|
||||||
mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적 스폰지점이 필요합니다.
|
mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적 스폰지점이 필요합니다.
|
||||||
@@ -1406,7 +1410,7 @@ mode.custom = 사용자 정의 규칙
|
|||||||
rules.invaliddata = 잘못된 클립보드 데이터 입니다.
|
rules.invaliddata = 잘못된 클립보드 데이터 입니다.
|
||||||
rules.hidebannedblocks = 금지된 블록 숨기기
|
rules.hidebannedblocks = 금지된 블록 숨기기
|
||||||
rules.infiniteresources = 무한 자원
|
rules.infiniteresources = 무한 자원
|
||||||
rules.fillitems = Fill Core With Items
|
rules.fillitems = 코어를 자원으로 채움
|
||||||
rules.onlydepositcore = 오직 코어에만 투입 가능
|
rules.onlydepositcore = 오직 코어에만 투입 가능
|
||||||
rules.derelictrepair = 잔해 블록 수리 허용
|
rules.derelictrepair = 잔해 블록 수리 허용
|
||||||
rules.reactorexplosions = 원자로 폭발 허용
|
rules.reactorexplosions = 원자로 폭발 허용
|
||||||
@@ -1421,8 +1425,8 @@ rules.alloweditworldprocessors = 월드 프로세서 편집 허용
|
|||||||
rules.alloweditworldprocessors.info = 이 기능을 활성화하면 편집기 외부에서도 월드 로직 블록을 배치하고 편집할 수 있습니다.
|
rules.alloweditworldprocessors.info = 이 기능을 활성화하면 편집기 외부에서도 월드 로직 블록을 배치하고 편집할 수 있습니다.
|
||||||
rules.waves = 단계
|
rules.waves = 단계
|
||||||
rules.airUseSpawns = 공중 유닛 스폰 지점 사용
|
rules.airUseSpawns = 공중 유닛 스폰 지점 사용
|
||||||
rules.wavespawnatcores = Waves Spawn At Cores
|
rules.wavespawnatcores = 적 코어 근처에 스폰
|
||||||
rules.wavespawnatcores.info = When enabled in attack mode, waves spawn near all enemy cores.
|
rules.wavespawnatcores.info = 공격 모드에서 활성화되면 모든 적 코어 근처에서 적이 스폰됩니다.
|
||||||
rules.attack = 공격 모드
|
rules.attack = 공격 모드
|
||||||
rules.buildai = 기지 건설 AI
|
rules.buildai = 기지 건설 AI
|
||||||
rules.buildaitier = 건설 AI 등급
|
rules.buildaitier = 건설 AI 등급
|
||||||
@@ -2024,19 +2028,19 @@ hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 c
|
|||||||
hint.unitControl.mobile = 아군 유닛과 포탑을 조종하려면 해당 개체를 [accent]빠르게 두 번 누르십시오[].
|
hint.unitControl.mobile = 아군 유닛과 포탑을 조종하려면 해당 개체를 [accent]빠르게 두 번 누르십시오[].
|
||||||
hint.unitSelectControl = 유닛을 조종하려면, [accent]왼쪽 shift[]를 눌러 [accent]명령 모드[]를 활성화하시오.\n명령 모드가 활성화되어 있을 때 누르거나 끌어서 유닛을 선택합니다. [accent]우클릭[]으로 유닛에게 이동과 공격을 명령할 수 있습니다.
|
hint.unitSelectControl = 유닛을 조종하려면, [accent]왼쪽 shift[]를 눌러 [accent]명령 모드[]를 활성화하시오.\n명령 모드가 활성화되어 있을 때 누르거나 끌어서 유닛을 선택합니다. [accent]우클릭[]으로 유닛에게 이동과 공격을 명령할 수 있습니다.
|
||||||
hint.unitSelectControl.mobile = 유닛을 조종하려면, 왼쪽 아래에 있는 [accent]명령[]을 눌러 [accent]명령 모드[]를 활성화하시오.\n명령 모드가 활성화되어 있을 때 길게 누르거나 끌어서 유닛을 선택합니다. 눌러서 유닛에게 이동과 공격을 명령할 수 있습니다.
|
hint.unitSelectControl.mobile = 유닛을 조종하려면, 왼쪽 아래에 있는 [accent]명령[]을 눌러 [accent]명령 모드[]를 활성화하시오.\n명령 모드가 활성화되어 있을 때 길게 누르거나 끌어서 유닛을 선택합니다. 눌러서 유닛에게 이동과 공격을 명령할 수 있습니다.
|
||||||
hint.launch = 충분한 자원을 모았으면, 오른쪽 아래의 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다.
|
hint.launch = 충분한 자원을 모았으면, 오른쪽 하단에 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다.
|
||||||
hint.launch.mobile = 충분한 자원을 모았으면, 오른쪽 아래의 \ue88c [accent]메뉴[]에 있는 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다.
|
hint.launch.mobile = 충분한 자원을 모았으면, 왼쪽 상단에 \ue88c [accent]메뉴[]에 있는 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다.
|
||||||
hint.schematicSelect = [accent][[F][]를 누른 채로 끌어서 복사하고 붙여넣을 블록을 선택하십시오. \n\n [accent][[마우스 휠][]을 누르면 한 개의 블록만 복사할 수 있습니다.
|
hint.schematicSelect = [accent][[F][]를 누른 채로 끌어서 복사하고 붙여넣을 블록을 선택하십시오. \n\n [accent][[마우스 휠][]을 누르면 한 개의 블록만 복사할 수 있습니다.
|
||||||
hint.rebuildSelect = [accent][[B][]를 누르고 끌어서 파괴된 블록 흔적을 선택하세요.\n선택된 블록은 자동으로 복구됩니다.
|
hint.rebuildSelect = [accent][[B][]를 누르고 끌어서 파괴된 블록 흔적을 선택하세요.\n선택된 블록은 자동으로 복구됩니다.
|
||||||
hint.rebuildSelect.mobile = 복사 버튼 \ue874 을 선택하시고, 재건축 버튼 \ue80f 을 탭 하신 뒤, 드래그 하여 블록 흔적을 선택하세요. 선택된 블록은 자동으로 복구됩니다.
|
hint.rebuildSelect.mobile = 복사 버튼 \ue874 을 선택하시고, 재건축 버튼 \ue80f 을 탭 하신 뒤, 드래그 하여 블록 흔적을 선택하세요. 선택된 블록은 자동으로 복구됩니다.
|
||||||
hint.conveyorPathfind = [accent][[왼쪽 Ctrl][]을 누른 채로 컨베이어를 대각선으로 끌면 길을 자동으로 만들어줍니다.
|
hint.conveyorPathfind = [accent][[왼쪽 Ctrl][]을 누른 채로 컨베이어를 대각선으로 끌면 길을 자동으로 만들어줍니다.
|
||||||
hint.conveyorPathfind.mobile = \ue844 [accent]대각 모드[]를 활성화하고 컨베이어를 대각선으로 끌면 길을 자동으로 찾아줍니다.
|
hint.conveyorPathfind.mobile = \ue844 [accent]대각 모드[]를 활성화하고 컨베이어를 대각선으로 끌면 길을 자동으로 찾아줍니다.
|
||||||
hint.boost = [accent][[왼쪽 Shift][]를 눌러 탑승한 유닛으로 장애물을 넘을 수 있습니다. \n\n 일부 지상 유닛만 이륙할 수 있습니다.
|
hint.boost = [accent][[왼쪽 Shift][]를 눌러 탑승한 유닛으로 장애물을 넘을 수 있습니다. \n\n 일부 지상 유닛만 이륙할 수 있습니다.
|
||||||
hint.payloadPickup = 작은 블록이나 유닛을 집으려면 [accent][[[]를 누르십시오.
|
hint.payloadPickup = 작은 블록이나 유닛을 집으려면 해당 블록/유닛 위에 있는 상태에서 [accent][[]를 누르십시오.
|
||||||
hint.payloadPickup.mobile = 작은 블록이나 유닛을 집으려면 [accent]잠깐 누르십시오[].
|
hint.payloadPickup.mobile = 작은 블록이나 유닛을 집으려면 해당 블록/유닛을 [accent]잠깐 누르십시오[].
|
||||||
hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오.
|
hint.payloadDrop = 다시 내려놓으려면 빈 공간에서 [accent]][]를 누르십시오.
|
||||||
hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[].
|
hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 두고 싶은 곳을 [accent]잠깐 누르십시오[].
|
||||||
hint.waveFire = [accent]파도[] 포탑에 물을 공급하면 주변에 발생한 화재를 자동으로 진압합니다.
|
hint.waveFire = [accent]웨이브[] 포탑에 물을 공급하면 주변에 발생한 화재를 자동으로 진압합니다.
|
||||||
hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 블록에 전력을 전달합니다.\n\n \uf87f 더 넓은 범위의 블록에 전력을 전달하려면 [accent]전력 노드[]를 활용하십시오.
|
hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 블록에 전력을 전달합니다.\n\n \uf87f 더 넓은 범위의 블록에 전력을 전달하려면 [accent]전력 노드[]를 활용하십시오.
|
||||||
hint.guardian = [accent]수호자[] 유닛은 높은 체력과 방어력을 가졌습니다. [accent]구리[]와 [accent]납[]처럼 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n수호자를 제거하려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오.
|
hint.guardian = [accent]수호자[] 유닛은 높은 체력과 방어력을 가졌습니다. [accent]구리[]와 [accent]납[]처럼 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n수호자를 제거하려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오.
|
||||||
hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치[]하여 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지 확인하십시오.
|
hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치[]하여 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지 확인하십시오.
|
||||||
@@ -2048,8 +2052,8 @@ hint.factoryControl.mobile = 유닛 공장의 [accent]출력 목적지[]를 설
|
|||||||
|
|
||||||
gz.mine = 주변 땅에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 클릭해서 채굴을 시작하세요.
|
gz.mine = 주변 땅에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 클릭해서 채굴을 시작하세요.
|
||||||
gz.mine.mobile = 주변 땅에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
|
gz.mine.mobile = 주변 땅에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
|
||||||
gz.research = 오른쪽 하단에 \ue875 연구 기록을 클릭하거나 [J]키를 눌러 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 연구 기록을 닫아서 오른쪽 아래에 있는 메뉴에서 해당 드릴을 선택하세요.\n구리 광석 위에 클릭해서 배치합니다.\n(만약 바로 건설되는게 불편하다면, 설정에서 건설 자동 일시정지를 킬 수 있습니다.)[]
|
gz.research = 오른쪽 하단에 \ue875 연구 기록을 클릭하거나 'J'키를 눌러 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 연구 기록을 닫은 후, 오른쪽 아래에 있는 블록 메뉴에서 [accent]드릴 아이콘의 카테고리[]를 클릭하고, 해당 드릴을 선택하세요.\n구리 광석 위에 클릭해서 배치합니다.\n(만약 바로 건설되는게 불편하다면, 설정에서 건설 자동 일시정지를 킬 수 있습니다.)[]
|
||||||
gz.research.mobile = 왼쪽 상단에 \ue875 연구 기록을 눌러 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 연구 메뉴를 닫아서 오른쪽 아래에 있는 블록 메뉴에서 해당 드릴을 선택하세요.\n구리 광석 위에 눌러서 배치합니다.\n\n오른쪽 아래 \ue800 [accent]체크마크[]를 눌러 확정지으세요.
|
gz.research.mobile = 왼쪽 상단에 \ue875 연구 기록을 눌러 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 연구 메뉴를 닫아서 오른쪽 아래에 있는 블록 메뉴에 [accent]드릴 아이콘의 카테고리[]를 누르고, 해당 드릴을 선택하세요.\n구리 광석 위에 눌러서 배치합니다.\n\n오른쪽 아래 \ue800 [accent]체크마크[]를 눌러 확정지으세요.
|
||||||
gz.conveyors = \uf896 이제 연구 기록을 다시 열어 [accent]컨베이어[]를 연구하고 배치하여 채굴된 자원을 운반하세요.\n드릴에서 코어로 말이죠.\n\n컨베이어를 선택하고, 클릭하고 드래그해서 컨베이어를 길게 배치하세요.\n[accent]스크롤[]로 방향을 회전할 수 있습니다.\n자원이 부족하면 연구나 건설이 불가능해지니 참고해주세요.
|
gz.conveyors = \uf896 이제 연구 기록을 다시 열어 [accent]컨베이어[]를 연구하고 배치하여 채굴된 자원을 운반하세요.\n드릴에서 코어로 말이죠.\n\n컨베이어를 선택하고, 클릭하고 드래그해서 컨베이어를 길게 배치하세요.\n[accent]스크롤[]로 방향을 회전할 수 있습니다.\n자원이 부족하면 연구나 건설이 불가능해지니 참고해주세요.
|
||||||
gz.conveyors.mobile = \uf896 이제 연구 기록을 다시 열어 [accent]컨베이어[]를 연구하고 배치하여 채굴된 자원을 운반하세요.\n드릴에서 코어로 말이죠.\n\n손가락을 길게 누르고 끌어서 컨베이어를 길게 배치하세요.\n자원이 부족하면 연구나 건설이 불가능해지니 참고해주세요.
|
gz.conveyors.mobile = \uf896 이제 연구 기록을 다시 열어 [accent]컨베이어[]를 연구하고 배치하여 채굴된 자원을 운반하세요.\n드릴에서 코어로 말이죠.\n\n손가락을 길게 누르고 끌어서 컨베이어를 길게 배치하세요.\n자원이 부족하면 연구나 건설이 불가능해지니 참고해주세요.
|
||||||
gz.drills = 채굴 작업을 확장하세요.\n기계식 드릴을 더 배치하세요.\n[accent]새 목표:[] 드릴로 구리를 채굴하고 컨베이어를 이용해 [accent]구리 100개[]를 코어로 운반하기.
|
gz.drills = 채굴 작업을 확장하세요.\n기계식 드릴을 더 배치하세요.\n[accent]새 목표:[] 드릴로 구리를 채굴하고 컨베이어를 이용해 [accent]구리 100개[]를 코어로 운반하기.
|
||||||
@@ -2065,11 +2069,11 @@ gz.supplyturret = [accent]보급 포탑
|
|||||||
gz.zone1 = 이건 적의 착륙 지점입니다.
|
gz.zone1 = 이건 적의 착륙 지점입니다.
|
||||||
gz.zone2 = 반경에 세워진 모든 것은 단계가 시작되면 파괴됩니다.
|
gz.zone2 = 반경에 세워진 모든 것은 단계가 시작되면 파괴됩니다.
|
||||||
gz.zone3 = 단계가 지금 시작됩니다.\n준비하세요.
|
gz.zone3 = 단계가 지금 시작됩니다.\n준비하세요.
|
||||||
gz.finish = 포탑을 더 건설하고, 자원을 더 채굴하고,\n그리고 모든 단계를 막아내어 [accent]지역을 점령[]하세요. 이것으로 튜토리얼을 마칩니다. 행운을 빕니다.
|
gz.finish = 포탑을 더 건설하고, 자원을 더 채굴하고,\n그리고 모든 단계를 막아내어 [accent]이 지역을 점령[]하세요. 이것으로 튜토리얼을 마칩니다. 행운을 빕니다.
|
||||||
|
|
||||||
onset.mine = 벽에 붙어있는 \uf748 [accent]베릴륨[]을 클릭하여 채굴하세요.\n\n[accent][WASD]로 움직이세요.
|
onset.mine = 벽에 붙어있는 \uf748 [accent]베릴륨[]을 클릭하여 채굴하세요.\n\n[accent][WASD]로 움직이세요.
|
||||||
onset.mine.mobile = 벽에 붙어있는 \uf748 [accent]베릴륨[]을 눌러서 채굴하세요.
|
onset.mine.mobile = 벽에 붙어있는 \uf748 [accent]베릴륨[]을 눌러서 채굴하세요.
|
||||||
onset.research = \ue875 연구 기록을 여세요.\n \uf73e [accent]터빈 응결기[]를 연구하고, 연구 기록을 다시 닫은 다음, 구덩이 위에 배치하세요.\n[accent]전력[]을 생산합니다.
|
onset.research = \ue875 연구 기록을 여세요.\n \uf73e [accent]터빈 응결기[]를 연구하고, 연구 기록을 다시 닫은 다음, 구덩이 위에 배치하세요.\n터빈 응결기는 [accent]전력[]을 생산합니다.
|
||||||
onset.bore = 다시 연구 기록을 열어 \uf741 [accent]플라즈마 채광기[]를 연구하고 배치하세요.\n벽으로부터 자동으로 자원을 채굴합니다.
|
onset.bore = 다시 연구 기록을 열어 \uf741 [accent]플라즈마 채광기[]를 연구하고 배치하세요.\n벽으로부터 자동으로 자원을 채굴합니다.
|
||||||
onset.power = [accent]전력[]을 플라즈마 채광기로 전달하기 위해선, \uf73d [accent]빔 노드[]를 연구하고 배치하세요.\n터빈 응결기와 플라즈마 채광기를 연결하세요.
|
onset.power = [accent]전력[]을 플라즈마 채광기로 전달하기 위해선, \uf73d [accent]빔 노드[]를 연구하고 배치하세요.\n터빈 응결기와 플라즈마 채광기를 연결하세요.
|
||||||
onset.ducts = \uf799 [accent]도관[]을 연구하고 배치하여 플라즈마 채광기에서 채굴한 자원을 코어로 운반하세요.\n클릭하고 끌어서 도관을 길게 연결하세요.\n[accent]스크롤해서[]해서 방향을 회전할 수 있습니다.
|
onset.ducts = \uf799 [accent]도관[]을 연구하고 배치하여 플라즈마 채광기에서 채굴한 자원을 코어로 운반하세요.\n클릭하고 끌어서 도관을 길게 연결하세요.\n[accent]스크롤해서[]해서 방향을 회전할 수 있습니다.
|
||||||
@@ -2088,16 +2092,16 @@ onset.enemies = 적이 다가옵니다, 방어 태세를 갖추세요.
|
|||||||
onset.defenses = [accent]방어 태세 갖추기:[lightgray] {0}
|
onset.defenses = [accent]방어 태세 갖추기:[lightgray] {0}
|
||||||
onset.attack = 적은 취약한 상태입니다. 반격하세요.
|
onset.attack = 적은 취약한 상태입니다. 반격하세요.
|
||||||
onset.cores = 새로운 코어는 [accent]코어 타일[]위에 배치할 수 있습니다.\n새로운 코어는 전진기지 역할을 하며 다른 코어와 저장된 자원을 공유합니다.\n \uf725 코어를 배치하세요.
|
onset.cores = 새로운 코어는 [accent]코어 타일[]위에 배치할 수 있습니다.\n새로운 코어는 전진기지 역할을 하며 다른 코어와 저장된 자원을 공유합니다.\n \uf725 코어를 배치하세요.
|
||||||
onset.detect = 적은 2분 이내에 당신을 탐지할 것입니다.\n생산, 채굴, 방어시설을 구성하세요.
|
onset.detect = 적은 2분 이내에 당신을 감지할 것입니다.\n생산, 채굴, 방어시설을 구성하세요.
|
||||||
onset.commandmode = [accent]shift[]를 눌러 [accent]명령 모드[]를 활성화하세요.\n[accent]좌클릭과 드래그[]로 유닛을 선택하세요.\n[accent]우클릭[]으로 선택된 유닛들에게 이동 또는 공격 명령을 내리세요.
|
onset.commandmode = [accent]shift[]를 눌러 [accent]명령 모드[]를 활성화하세요.\n[accent]좌클릭과 드래그[]로 유닛을 선택하세요.\n[accent]우클릭[]으로 선택된 유닛들에게 이동 또는 공격 명령을 내리세요.
|
||||||
onset.commandmode.mobile = [accent]명령 버튼[]을 눌러 [accent]명령 모드[]를 활성화하세요.\n손가락을 꾹 누르고, [accent]드래그[]해서 유닛을 선택하세요.\n[accent]눌러서[] 선택된 유닛들에게 이동 또는 공격 명령을 내리세요. 이것으로 에르키아의 튜토리얼을 마칩니다. 행운을 빕니다.
|
onset.commandmode.mobile = [accent]명령 버튼[]을 눌러 [accent]명령 모드[]를 활성화하세요.\n손가락을 꾹 누르고, [accent]드래그[]해서 유닛을 선택하세요.\n[accent]눌러서[] 선택된 유닛들에게 이동 또는 공격 명령을 내리세요.
|
||||||
aegis.tungsten = 텅스텐을 채굴하려면 [accent]충격 드릴[]이 필요합니다.\n 충격 드릴은[accent]물[]과 [accent]전력[]을 필요로 합니다.
|
aegis.tungsten = 텅스텐을 채굴하려면 [accent]충격 드릴[]이 필요합니다.\n 충격 드릴은[accent]물[]과 [accent]전력[]을 필요로 합니다.
|
||||||
|
|
||||||
split.pickup = 일부 블록은 코어 유닛으로 집어올릴 수 있습니다.\n이 [accent]컨테이너[]를 집어올리고 [accent]화물 로더[] 속에 내려놓으세요.\n(화물을 집어올리거나 내리는 기본 키는 [ 그리고 ]입니다.)
|
split.pickup = 일부 블록은 코어 유닛으로 집어올릴 수 있습니다.\n이 [accent]컨테이너[]를 집어올리고 [accent]화물 로더[] 속에 내려놓으세요.\n(화물을 집어올리거나 내리는 기본 키는 '[', 그리고 ']' 입니다.)
|
||||||
split.pickup.mobile = 일부 블록은 코어 유닛으로 집어올릴 수 있습니다.\n이 [accent]컨테이너[]를 집어올리고 [accent]화물 로더[] 속에 내려놓으세요.\n(무언가를 집어올리거나 내려놓으려면, 길게 누르세요.)
|
split.pickup.mobile = 일부 블록은 코어 유닛으로 집어올릴 수 있습니다.\n이 [accent]컨테이너[]를 집어올리고 [accent]화물 로더[] 속에 내려놓으세요.\n(무언가를 집어올리거나 내려놓으려면, 해당 블록을 길게 누르세요.)
|
||||||
split.acquire = 유닛을 생산하려면 텅스텐을 채굴해야 합니다.
|
split.acquire = 유닛을 생산하려면 텅스텐을 채굴해야 합니다.
|
||||||
split.build = 유닛을 벽의 반대편으로 운반해야 합니다.\n두 개의 [accent]화물 매스 드라이버[]를 각 벽면에 하나씩 배치하세요.\n둘 중 하나를 누른 다음 다른 하나를 선택하여 연결을 설정합니다.
|
split.build = 유닛을 벽의 반대편으로 운반해야 합니다.\n두 개의 [accent]화물 매스 드라이버[]를 각 벽면에 하나씩 배치하세요.\n둘 중 하나를 누른 다음 다른 하나를 선택하여 연결을 설정합니다.
|
||||||
split.container = 컨테이너와 마찬가지로, 유닛도 [accent]화물 매스 드라이버[]를 사용하여 운송할 수 있습니다.\n유닛 조립대를 매스 드라이버 근처에 배치하여 유닛을 적재한 후, 벽을 가로질러 보내 적 기지를 공격하게 만듭니다.
|
split.container = 컨테이너와 마찬가지로, 유닛도 [accent]화물 매스 드라이버[]를 사용하여 운송할 수 있습니다.\n유닛 조립대를 매스 드라이버 근처에 배치하여 유닛을 적재한 후, 벽을 가로질러 보내 적 기지를 공격하게 만드세요.
|
||||||
|
|
||||||
item.copper.description = 모든 종류의 구조물 및 탄약으로 사용하는 기본 자원입니다.
|
item.copper.description = 모든 종류의 구조물 및 탄약으로 사용하는 기본 자원입니다.
|
||||||
item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포되어 있습니다. 기본적으로 보강하지 않는 한 구조적으로 약합니다.
|
item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포되어 있습니다. 기본적으로 보강하지 않는 한 구조적으로 약합니다.
|
||||||
@@ -2489,7 +2493,7 @@ lst.explosion = 특정 위치에 폭발을 생성합니다.
|
|||||||
lst.setrate = 프로세서 실행 속도를 틱당 연산량으로 설정합니다.
|
lst.setrate = 프로세서 실행 속도를 틱당 연산량으로 설정합니다.
|
||||||
lst.fetch = 유닛, 코어, 플레이어 또는 건물을 엔티티 번호로 조회합니다.\n번호는 0에서 시작하여 엔티티 번호-1에서 끝납니다.
|
lst.fetch = 유닛, 코어, 플레이어 또는 건물을 엔티티 번호로 조회합니다.\n번호는 0에서 시작하여 엔티티 번호-1에서 끝납니다.
|
||||||
lst.packcolor = 그리기 혹은 규칙 설정을 위해 [0, 1] RGBA 단일 요소로 묶습니다.
|
lst.packcolor = 그리기 혹은 규칙 설정을 위해 [0, 1] RGBA 단일 요소로 묶습니다.
|
||||||
lst.unpackcolor = Unpack RGBA components from a color that was packed using Pack Color.
|
lst.unpackcolor = Pack Color를 사용하여 패킹된 색상에서 RGBA 구성 요소를 압축 해제합니다.
|
||||||
lst.setrule = 게임 규칙을 설정합니다.
|
lst.setrule = 게임 규칙을 설정합니다.
|
||||||
lst.flushmessage = 텍스트 버퍼로부터 화면에 메세지를 표시합니다.\n이전 메세지가 완료될 때까지 기다립니다.
|
lst.flushmessage = 텍스트 버퍼로부터 화면에 메세지를 표시합니다.\n이전 메세지가 완료될 때까지 기다립니다.
|
||||||
lst.cutscene = 플레이어 카메라를 조작합니다.
|
lst.cutscene = 플레이어 카메라를 조작합니다.
|
||||||
@@ -2566,8 +2570,8 @@ laccess.size = 유닛/건물의 크기 또는 줄의 길이.
|
|||||||
laccess.id = 유닛/블록/아이템/액체의 ID.\n이것은 조회 작업의 역순입니다.
|
laccess.id = 유닛/블록/아이템/액체의 ID.\n이것은 조회 작업의 역순입니다.
|
||||||
laccess.displaywidth = 디스플레이 블록의 픽셀 단위 너비.
|
laccess.displaywidth = 디스플레이 블록의 픽셀 단위 너비.
|
||||||
laccess.displayheight = 디스플레이 블록의 픽셀 단위 높이.
|
laccess.displayheight = 디스플레이 블록의 픽셀 단위 높이.
|
||||||
laccess.bufferusage = 디스플레이의 그래픽 버퍼에 있는 처리되지 않은 명령의 수.
|
laccess.buffersize = 디스플레이의 그래픽 버퍼에 있는 처리되지 않은 명령의 수.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = 블록에서 수행된 작업 수입니다.\n디스플레이의 경우, drawflush 작업 수를 반환합니다.
|
||||||
|
|
||||||
lcategory.unknown = 알 수 없음
|
lcategory.unknown = 알 수 없음
|
||||||
lcategory.unknown.description = 분류되지 않은 설명
|
lcategory.unknown.description = 분류되지 않은 설명
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Rodyti FPS ir Ping
|
setting.fps.name = Rodyti FPS ir Ping
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pikseliavimas
|
setting.pixelate.name = Pikseliavimas
|
||||||
setting.minimap.name = Rodyti Mini Žemėlapį
|
setting.minimap.name = Rodyti Mini Žemėlapį
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Pokalbių Slinktis
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Išmesti Vienetą
|
keybind.drop_unit.name = Išmesti Vienetą
|
||||||
keybind.zoom_minimap.name = Keisti Mini Žemėlapio Mastelį
|
keybind.zoom_minimap.name = Keisti Mini Žemėlapio Mastelį
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Modifikacijų Aprašymai
|
mode.help.title = Modifikacijų Aprašymai
|
||||||
mode.survival.name = Išgyvenimas
|
mode.survival.name = Išgyvenimas
|
||||||
mode.survival.description = Normalus režimas. Riboti resursai ir automatinės priešų bangos.\n[gray]Privalomos priešų atsiradimo zonos žemėlapyje.
|
mode.survival.description = Normalus režimas. Riboti resursai ir automatinės priešų bangos.\n[gray]Privalomos priešų atsiradimo zonos žemėlapyje.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Een herstart kan vereist zijn om de wijzi
|
|||||||
setting.fps.name = Toon FPS
|
setting.fps.name = Toon FPS
|
||||||
setting.console.name = Console Inschakelen
|
setting.console.name = Console Inschakelen
|
||||||
setting.smoothcamera.name = Vloeiende Camera
|
setting.smoothcamera.name = Vloeiende Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Verpixel Spel [lightgray](mogelijk verminderde performance)
|
setting.pixelate.name = Verpixel Spel [lightgray](mogelijk verminderde performance)
|
||||||
setting.minimap.name = Toon Minimap
|
setting.minimap.name = Toon Minimap
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat Scroll
|
|||||||
keybind.chat_mode.name = Verander Chatmodus
|
keybind.chat_mode.name = Verander Chatmodus
|
||||||
keybind.drop_unit.name = Laat Eenheid Vallen
|
keybind.drop_unit.name = Laat Eenheid Vallen
|
||||||
keybind.zoom_minimap.name = Zoom Minimap
|
keybind.zoom_minimap.name = Zoom Minimap
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Beschrijving van Modi
|
mode.help.title = Beschrijving van Modi
|
||||||
mode.survival.name = Overleving
|
mode.survival.name = Overleving
|
||||||
mode.survival.description = De normale modus. Standaard grondstoffen en automatisch inkomende golven van vijanden.
|
mode.survival.description = De normale modus. Standaard grondstoffen en automatisch inkomende golven van vijanden.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Show FPS
|
setting.fps.name = Show FPS
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelate [lightgray](may decrease performance, disables animations)
|
setting.pixelate.name = Pixelate [lightgray](may decrease performance, disables animations)
|
||||||
setting.minimap.name = Show Minimap
|
setting.minimap.name = Show Minimap
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat scroll
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Drop Unit
|
keybind.drop_unit.name = Drop Unit
|
||||||
keybind.zoom_minimap.name = Zoom minimap
|
keybind.zoom_minimap.name = Zoom minimap
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Description of modes
|
mode.help.title = Description of modes
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
|
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart może być wymagany, aby zastowas
|
|||||||
setting.fps.name = Pokazuj FPS oraz ping
|
setting.fps.name = Pokazuj FPS oraz ping
|
||||||
setting.console.name = Włącz konsolę
|
setting.console.name = Włącz konsolę
|
||||||
setting.smoothcamera.name = Płynna kamera
|
setting.smoothcamera.name = Płynna kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Synchronizacja pionowa
|
setting.vsync.name = Synchronizacja pionowa
|
||||||
setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje)
|
setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje)
|
||||||
setting.minimap.name = Pokaż minimapę
|
setting.minimap.name = Pokaż minimapę
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Przewijaj Wiadomości
|
|||||||
keybind.chat_mode.name = Zmień tryb czatu
|
keybind.chat_mode.name = Zmień tryb czatu
|
||||||
keybind.drop_unit.name = Wyrzucanie przedmiot
|
keybind.drop_unit.name = Wyrzucanie przedmiot
|
||||||
keybind.zoom_minimap.name = Powiększenie mapy
|
keybind.zoom_minimap.name = Powiększenie mapy
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Opis trybów
|
mode.help.title = Opis trybów
|
||||||
mode.survival.name = Przeżycie
|
mode.survival.name = Przeżycie
|
||||||
mode.survival.description = Zwykły tryb. Limitowane surowce i fale przeciwników.\n[gray]Wymaga punktów spawnu wroga na mapie, aby móc grać w tym trybie.
|
mode.survival.description = Zwykły tryb. Limitowane surowce i fale przeciwników.\n[gray]Wymaga punktów spawnu wroga na mapie, aby móc grać w tym trybie.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID jednostki/bloku/przedmiotu/płynu.\nOdwrotnośc operacji wyszukiwania.
|
laccess.id = ID jednostki/bloku/przedmiotu/płynu.\nOdwrotnośc operacji wyszukiwania.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Inne
|
lcategory.unknown = Inne
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Pode ser necessário reiniciar para aplic
|
|||||||
setting.fps.name = Mostrar FPS e Ping
|
setting.fps.name = Mostrar FPS e Ping
|
||||||
setting.console.name = Ativar console
|
setting.console.name = Ativar console
|
||||||
setting.smoothcamera.name = Suavizar movimentos da câmera
|
setting.smoothcamera.name = Suavizar movimentos da câmera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace)
|
setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace)
|
||||||
setting.minimap.name = Mostrar minimapa
|
setting.minimap.name = Mostrar minimapa
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Rolar chat
|
|||||||
keybind.chat_mode.name = Mudar modo do chat
|
keybind.chat_mode.name = Mudar modo do chat
|
||||||
keybind.drop_unit.name = Soltar unidade
|
keybind.drop_unit.name = Soltar unidade
|
||||||
keybind.zoom_minimap.name = Ampliar minimapa
|
keybind.zoom_minimap.name = Ampliar minimapa
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Descrição dos modos
|
mode.help.title = Descrição dos modos
|
||||||
mode.survival.name = Sobrevivência
|
mode.survival.name = Sobrevivência
|
||||||
mode.survival.description = O modo normal. Recursos limitados e hordas automáticas.
|
mode.survival.description = O modo normal. Recursos limitados e hordas automáticas.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Desconhecido
|
lcategory.unknown = Desconhecido
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Pode ser necessário reiniciar para aplic
|
|||||||
setting.fps.name = Mostrar FPS e Ping
|
setting.fps.name = Mostrar FPS e Ping
|
||||||
setting.console.name = Ativar Consola
|
setting.console.name = Ativar Consola
|
||||||
setting.smoothcamera.name = Câmara Suave
|
setting.smoothcamera.name = Câmara Suave
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Sincronização Vertical (VSync)
|
setting.vsync.name = Sincronização Vertical (VSync)
|
||||||
setting.pixelate.name = Pixelização
|
setting.pixelate.name = Pixelização
|
||||||
setting.minimap.name = Mostrar Minimapa
|
setting.minimap.name = Mostrar Minimapa
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Percorrer Chat
|
|||||||
keybind.chat_mode.name = Mudar Modo de Chat
|
keybind.chat_mode.name = Mudar Modo de Chat
|
||||||
keybind.drop_unit.name = Largar Unidade
|
keybind.drop_unit.name = Largar Unidade
|
||||||
keybind.zoom_minimap.name = Zoom do Minimapa
|
keybind.zoom_minimap.name = Zoom do Minimapa
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Descrição dos mods
|
mode.help.title = Descrição dos mods
|
||||||
mode.survival.name = Sobrevivência
|
mode.survival.name = Sobrevivência
|
||||||
mode.survival.description = O modo padrão. Recursos limitados e hordas automáticas.
|
mode.survival.description = O modo padrão. Recursos limitados e hordas automáticas.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Desconhecido
|
lcategory.unknown = Desconhecido
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Repornirea poate fi necesară pt a aplica
|
|||||||
setting.fps.name = Vezi FPS & Ping
|
setting.fps.name = Vezi FPS & Ping
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Cameră Graduală
|
setting.smoothcamera.name = Cameră Graduală
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelează
|
setting.pixelate.name = Pixelează
|
||||||
setting.minimap.name = Vezi Miniharta
|
setting.minimap.name = Vezi Miniharta
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Scroll Chat
|
|||||||
keybind.chat_mode.name = Schimbă Modul Chatului
|
keybind.chat_mode.name = Schimbă Modul Chatului
|
||||||
keybind.drop_unit.name = Lasă Unitatea
|
keybind.drop_unit.name = Lasă Unitatea
|
||||||
keybind.zoom_minimap.name = Zoom Minihartă
|
keybind.zoom_minimap.name = Zoom Minihartă
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Descrierea modurilor
|
mode.help.title = Descrierea modurilor
|
||||||
mode.survival.name = Supraviețuire
|
mode.survival.name = Supraviețuire
|
||||||
mode.survival.description = Modul normal. Resurse limitate și valuri automate.\n[gray]E nevoie de locuri de lansare a inamicilor pt a juca.
|
mode.survival.description = Modul normal. Resurse limitate și valuri automate.\n[gray]E nevoie de locuri de lansare a inamicilor pt a juca.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Для вступления измене
|
|||||||
setting.fps.name = Показывать FPS и пинг
|
setting.fps.name = Показывать FPS и пинг
|
||||||
setting.console.name = Включить консоль
|
setting.console.name = Включить консоль
|
||||||
setting.smoothcamera.name = Плавная камера
|
setting.smoothcamera.name = Плавная камера
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Вертикальная синхронизация
|
setting.vsync.name = Вертикальная синхронизация
|
||||||
setting.pixelate.name = Пикселизация
|
setting.pixelate.name = Пикселизация
|
||||||
setting.minimap.name = Отображать мини-карту
|
setting.minimap.name = Отображать мини-карту
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Прокрутка чата
|
|||||||
keybind.chat_mode.name = Изменить режим чата
|
keybind.chat_mode.name = Изменить режим чата
|
||||||
keybind.drop_unit.name = Сбросить боев. ед.
|
keybind.drop_unit.name = Сбросить боев. ед.
|
||||||
keybind.zoom_minimap.name = Масштабировать мини-карту
|
keybind.zoom_minimap.name = Масштабировать мини-карту
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Описание режимов
|
mode.help.title = Описание режимов
|
||||||
mode.survival.name = Выживание
|
mode.survival.name = Выживание
|
||||||
mode.survival.description = Обычный режим. Необходимо добывать ресурсы, а волны наступают автоматически.\n[gray]Требуются точки появления врагов на карте для игры.
|
mode.survival.description = Обычный режим. Необходимо добывать ресурсы, а волны наступают автоматически.\n[gray]Требуются точки появления врагов на карте для игры.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = Идентификатор единицы/блока/предмета/жидкости.\nЭто обратная операция поиска.
|
laccess.id = Идентификатор единицы/блока/предмета/жидкости.\nЭто обратная операция поиска.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Неизвестно
|
lcategory.unknown = Неизвестно
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restartovanje je zahtevano da bi se učit
|
|||||||
setting.fps.name = Prikazuj FPS i Ping
|
setting.fps.name = Prikazuj FPS i Ping
|
||||||
setting.console.name = Osposobi Konzolu
|
setting.console.name = Osposobi Konzolu
|
||||||
setting.smoothcamera.name = Glatka Kamera
|
setting.smoothcamera.name = Glatka Kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pikselizuj
|
setting.pixelate.name = Pikselizuj
|
||||||
setting.minimap.name = Prikaži Minimapu
|
setting.minimap.name = Prikaži Minimapu
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat Scroll
|
|||||||
keybind.chat_mode.name = Menjaj Tip Četa
|
keybind.chat_mode.name = Menjaj Tip Četa
|
||||||
keybind.drop_unit.name = Spusti Jedinicu
|
keybind.drop_unit.name = Spusti Jedinicu
|
||||||
keybind.zoom_minimap.name = Zumiraj Minimapu
|
keybind.zoom_minimap.name = Zumiraj Minimapu
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Opis Modova
|
mode.help.title = Opis Modova
|
||||||
mode.survival.name = Preživljavanje
|
mode.survival.name = Preživljavanje
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Nepoznato
|
lcategory.unknown = Nepoznato
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = Show FPS
|
setting.fps.name = Show FPS
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixellera[lightgray] (disables animations)
|
setting.pixelate.name = Pixellera[lightgray] (disables animations)
|
||||||
setting.minimap.name = Visa Minikarta
|
setting.minimap.name = Visa Minikarta
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Chat scroll
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Drop Unit
|
keybind.drop_unit.name = Drop Unit
|
||||||
keybind.zoom_minimap.name = Zoom minimap
|
keybind.zoom_minimap.name = Zoom minimap
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Description of modes
|
mode.help.title = Description of modes
|
||||||
mode.survival.name = Överlevnad
|
mode.survival.name = Överlevnad
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = อาจจะต้องรีสต
|
|||||||
setting.fps.name = แสดง FPS และ Ping
|
setting.fps.name = แสดง FPS และ Ping
|
||||||
setting.console.name = เปิดใช้งานคอนโซล
|
setting.console.name = เปิดใช้งานคอนโซล
|
||||||
setting.smoothcamera.name = กล้องแบบลื่นไหล
|
setting.smoothcamera.name = กล้องแบบลื่นไหล
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = ภาพกราฟิกแบบพิกเซล
|
setting.pixelate.name = ภาพกราฟิกแบบพิกเซล
|
||||||
setting.minimap.name = แสดงมินิแมพ
|
setting.minimap.name = แสดงมินิแมพ
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = เลื่อนแชท
|
|||||||
keybind.chat_mode.name = เปลี่ยนโหมดแชท
|
keybind.chat_mode.name = เปลี่ยนโหมดแชท
|
||||||
keybind.drop_unit.name = วางยูนิต
|
keybind.drop_unit.name = วางยูนิต
|
||||||
keybind.zoom_minimap.name = ซูมมินิแมพ
|
keybind.zoom_minimap.name = ซูมมินิแมพ
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = คำอธิบายโหมด
|
mode.help.title = คำอธิบายโหมด
|
||||||
mode.survival.name = เอาชีวิตรอด
|
mode.survival.name = เอาชีวิตรอด
|
||||||
mode.survival.description = โหมดปกติ ทรัพยากรมีจำกัดและคลื่นมาโดยอัตโนมัติ\n[gray]ต้องมีจุดเกิดของศัตรูเพื่อที่จะเล่น
|
mode.survival.description = โหมดปกติ ทรัพยากรมีจำกัดและคลื่นมาโดยอัตโนมัติ\n[gray]ต้องมีจุดเกิดของศัตรูเพื่อที่จะเล่น
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID ของยูนิต/บล็อก/ไอเท็ม/ของเหลว\nคำสั่งนี้จะตรงกันข้ามกับคำสั่ง lookup
|
laccess.id = ID ของยูนิต/บล็อก/ไอเท็ม/ของเหลว\nคำสั่งนี้จะตรงกันข้ามกับคำสั่ง lookup
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = ไม่ทราบ
|
lcategory.unknown = ไม่ทราบ
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Restart may be required to apply changes.
|
|||||||
setting.fps.name = FPS'i goster
|
setting.fps.name = FPS'i goster
|
||||||
setting.console.name = Enable Console
|
setting.console.name = Enable Console
|
||||||
setting.smoothcamera.name = Smooth Camera
|
setting.smoothcamera.name = Smooth Camera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelate [lightgray](may decrease performance)
|
setting.pixelate.name = Pixelate [lightgray](may decrease performance)
|
||||||
setting.minimap.name = Haritayi goster
|
setting.minimap.name = Haritayi goster
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Konusma kaydir
|
|||||||
keybind.chat_mode.name = Change Chat Mode
|
keybind.chat_mode.name = Change Chat Mode
|
||||||
keybind.drop_unit.name = Unit birak
|
keybind.drop_unit.name = Unit birak
|
||||||
keybind.zoom_minimap.name = Haritayi yaklastir
|
keybind.zoom_minimap.name = Haritayi yaklastir
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Modlarin aciklamalari
|
mode.help.title = Modlarin aciklamalari
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
|
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Unknown
|
lcategory.unknown = Unknown
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Oyunu baştan açman gerekebilir.
|
|||||||
setting.fps.name = FPS Göster
|
setting.fps.name = FPS Göster
|
||||||
setting.console.name = Konsolu Aktifleştir
|
setting.console.name = Konsolu Aktifleştir
|
||||||
setting.smoothcamera.name = Yumuşak Geçişli Kamera
|
setting.smoothcamera.name = Yumuşak Geçişli Kamera
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pikselleştir [lightgray](animasyonları kapatır)
|
setting.pixelate.name = Pikselleştir [lightgray](animasyonları kapatır)
|
||||||
setting.minimap.name = Haritayı Göster
|
setting.minimap.name = Haritayı Göster
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Sohbet Kaydırma
|
|||||||
keybind.chat_mode.name = Konuşma Modunu Değiştir
|
keybind.chat_mode.name = Konuşma Modunu Değiştir
|
||||||
keybind.drop_unit.name = Birlik Düşürme
|
keybind.drop_unit.name = Birlik Düşürme
|
||||||
keybind.zoom_minimap.name = Haritada Yakınlaştırma/Uzaklaştırma
|
keybind.zoom_minimap.name = Haritada Yakınlaştırma/Uzaklaştırma
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Oyun Modlarının açıklamaları
|
mode.help.title = Oyun Modlarının açıklamaları
|
||||||
mode.survival.name = Hayatta Kalma
|
mode.survival.name = Hayatta Kalma
|
||||||
mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir.
|
mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = Bir birim/blok/eşya/sıvı kimliği. \nBu arama operasyonun zıttıdır.
|
laccess.id = Bir birim/blok/eşya/sıvı kimliği. \nBu arama operasyonun zıttıdır.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = ???
|
lcategory.unknown = ???
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Можливо, потрібен пере
|
|||||||
setting.fps.name = Показувати FPS і затримку до сервера
|
setting.fps.name = Показувати FPS і затримку до сервера
|
||||||
setting.console.name = Увімкнути консоль
|
setting.console.name = Увімкнути консоль
|
||||||
setting.smoothcamera.name = Гладка камера
|
setting.smoothcamera.name = Гладка камера
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Вертикальна синхронізація
|
setting.vsync.name = Вертикальна синхронізація
|
||||||
setting.pixelate.name = Пікселізація
|
setting.pixelate.name = Пікселізація
|
||||||
setting.minimap.name = Показувати мінімапу
|
setting.minimap.name = Показувати мінімапу
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Прокрутка чату
|
|||||||
keybind.chat_mode.name = Змінити режим чату
|
keybind.chat_mode.name = Змінити режим чату
|
||||||
keybind.drop_unit.name = Скинути бойову одиницю
|
keybind.drop_unit.name = Скинути бойову одиницю
|
||||||
keybind.zoom_minimap.name = Збільшити мінімапу
|
keybind.zoom_minimap.name = Збільшити мінімапу
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Опис режимів гри
|
mode.help.title = Опис режимів гри
|
||||||
mode.survival.name = Виживання
|
mode.survival.name = Виживання
|
||||||
mode.survival.description = Звичайний режим. У цьому режимі треба самим видобувати ресурси та хвилі йдуть автоматично.\n[gray]Потребуються точки появи противників для гри.
|
mode.survival.description = Звичайний режим. У цьому режимі треба самим видобувати ресурси та хвилі йдуть автоматично.\n[gray]Потребуються точки появи противників для гри.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = Ідентифікатор одиниці/блоку/предмету/рідини.\nЦе зворотна операція до операції пошуку.
|
laccess.id = Ідентифікатор одиниці/блоку/предмету/рідини.\nЦе зворотна операція до операції пошуку.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Невідома категорія
|
lcategory.unknown = Невідома категорія
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = Có thể cần khởi động lại đ
|
|||||||
setting.fps.name = Hiện FPS & Ping
|
setting.fps.name = Hiện FPS & Ping
|
||||||
setting.console.name = Bật Bảng điều khiển
|
setting.console.name = Bật Bảng điều khiển
|
||||||
setting.smoothcamera.name = Khung quay mượt mà
|
setting.smoothcamera.name = Khung quay mượt mà
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = Đồng bộ dọc (VSync)
|
setting.vsync.name = Đồng bộ dọc (VSync)
|
||||||
setting.pixelate.name = Đồ họa pixel
|
setting.pixelate.name = Đồ họa pixel
|
||||||
setting.minimap.name = Hiện bản đồ nhỏ
|
setting.minimap.name = Hiện bản đồ nhỏ
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = Cuộn trò chuyện
|
|||||||
keybind.chat_mode.name = Thay đổi chế độ trò chuyện
|
keybind.chat_mode.name = Thay đổi chế độ trò chuyện
|
||||||
keybind.drop_unit.name = Thả đơn vị
|
keybind.drop_unit.name = Thả đơn vị
|
||||||
keybind.zoom_minimap.name = Thu phóng bản đồ nhỏ
|
keybind.zoom_minimap.name = Thu phóng bản đồ nhỏ
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = Mô tả chế độ
|
mode.help.title = Mô tả chế độ
|
||||||
mode.survival.name = Sinh tồn
|
mode.survival.name = Sinh tồn
|
||||||
mode.survival.description = Chế độ bình thường. Tài nguyên hạn chế và các đợt đến tự động.\n[gray]Yêu cầu nơi xuất hiện kẻ địch trong bản đồ để chơi.
|
mode.survival.description = Chế độ bình thường. Tài nguyên hạn chế và các đợt đến tự động.\n[gray]Yêu cầu nơi xuất hiện kẻ địch trong bản đồ để chơi.
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Kích thước của đơn vị/công trình hoặc độ dài c
|
|||||||
laccess.id = Định danh của một đơn vị/khối/vật phẩm/chất lỏng.\nViệc này làm ngược lại với thao tác tra cứu.
|
laccess.id = Định danh của một đơn vị/khối/vật phẩm/chất lỏng.\nViệc này làm ngược lại với thao tác tra cứu.
|
||||||
laccess.displaywidth = Độ rộng của một khối hiển thị tính bằng pixel.
|
laccess.displaywidth = Độ rộng của một khối hiển thị tính bằng pixel.
|
||||||
laccess.displayheight = Độ cao của một khối hiển thị tính bằng pixel.
|
laccess.displayheight = Độ cao của một khối hiển thị tính bằng pixel.
|
||||||
laccess.bufferusage = Số lệnh chưa xử lý trong bộ đệm đồ họa của một hiển thị.
|
laccess.buffersize = Số lệnh chưa xử lý trong bộ đệm đồ họa của một hiển thị.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = Không xác định
|
lcategory.unknown = Không xác định
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = 可能需要重启
|
|||||||
setting.fps.name = 显示帧数和网络延迟
|
setting.fps.name = 显示帧数和网络延迟
|
||||||
setting.console.name = 启用控制台
|
setting.console.name = 启用控制台
|
||||||
setting.smoothcamera.name = 平滑镜头
|
setting.smoothcamera.name = 平滑镜头
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = 垂直同步
|
setting.vsync.name = 垂直同步
|
||||||
setting.pixelate.name = 像素画面
|
setting.pixelate.name = 像素画面
|
||||||
setting.minimap.name = 显示小地图
|
setting.minimap.name = 显示小地图
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = 聊天记录滚动
|
|||||||
keybind.chat_mode.name = 切换聊天模式
|
keybind.chat_mode.name = 切换聊天模式
|
||||||
keybind.drop_unit.name = 释放单位
|
keybind.drop_unit.name = 释放单位
|
||||||
keybind.zoom_minimap.name = 小地图缩放
|
keybind.zoom_minimap.name = 小地图缩放
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = 游戏模式说明
|
mode.help.title = 游戏模式说明
|
||||||
mode.survival.name = 生存
|
mode.survival.name = 生存
|
||||||
mode.survival.description = 通常的游戏模式,资源有限,自动生成敌人波次。\n[gray]需要地图中有敌方出生点和己方核心。
|
mode.survival.description = 通常的游戏模式,资源有限,自动生成敌人波次。\n[gray]需要地图中有敌方出生点和己方核心。
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = 单位/建筑的大小或字符串的长度
|
|||||||
laccess.id = 单位/块/物品/液体的 ID。\n这是 Lookup 的反向操作。
|
laccess.id = 单位/块/物品/液体的 ID。\n这是 Lookup 的反向操作。
|
||||||
laccess.displaywidth = 显示屏的宽度(以像素为单位)。
|
laccess.displaywidth = 显示屏的宽度(以像素为单位)。
|
||||||
laccess.displayheight = 显示屏的高度(以像素为单位)。
|
laccess.displayheight = 显示屏的高度(以像素为单位)。
|
||||||
laccess.bufferusage = 显示器图形缓冲区中未处理的命令数。
|
laccess.buffersize = 显示器图形缓冲区中未处理的命令数。
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = 未知
|
lcategory.unknown = 未知
|
||||||
|
|||||||
@@ -1256,6 +1256,8 @@ setting.borderlesswindow.description = 可能需重新啟動遊戲以變更
|
|||||||
setting.fps.name = 顯示FPS與延遲
|
setting.fps.name = 顯示FPS與延遲
|
||||||
setting.console.name = 啟用搖桿
|
setting.console.name = 啟用搖桿
|
||||||
setting.smoothcamera.name = 平滑攝影機
|
setting.smoothcamera.name = 平滑攝影機
|
||||||
|
setting.detach-camera.name = Free Camera
|
||||||
|
setting.detach-camera.description = If enabled, the camera moves independently of the player unit.\nThis setting can be assigned a hotkey.
|
||||||
setting.vsync.name = 垂直同步
|
setting.vsync.name = 垂直同步
|
||||||
setting.pixelate.name = 像素化
|
setting.pixelate.name = 像素化
|
||||||
setting.minimap.name = 顯示小地圖
|
setting.minimap.name = 顯示小地圖
|
||||||
@@ -1391,6 +1393,8 @@ keybind.chat_scroll.name = 聊天記錄捲動
|
|||||||
keybind.chat_mode.name = 變更聊天模式
|
keybind.chat_mode.name = 變更聊天模式
|
||||||
keybind.drop_unit.name = 放下單位
|
keybind.drop_unit.name = 放下單位
|
||||||
keybind.zoom_minimap.name = 縮放小地圖
|
keybind.zoom_minimap.name = 縮放小地圖
|
||||||
|
keybind.detach_camera.name = Toggle Free Camera
|
||||||
|
keybind.debug_hitboxes.name = Toggle Debug Hitboxes
|
||||||
mode.help.title = 模式說明
|
mode.help.title = 模式說明
|
||||||
mode.survival.name = 生存
|
mode.survival.name = 生存
|
||||||
mode.survival.description = 一般模式。有限的資源與自動來襲的波次。\n[gray]地圖中需要敵人生成點。
|
mode.survival.description = 一般模式。有限的資源與自動來襲的波次。\n[gray]地圖中需要敵人生成點。
|
||||||
@@ -2566,7 +2570,7 @@ laccess.size = Size of a unit/building or the length of a string.
|
|||||||
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
laccess.id = ID of a unit/block/item/liquid.\nThis is the inverse of the lookup operation.
|
||||||
laccess.displaywidth = Width of a display block in pixels.
|
laccess.displaywidth = Width of a display block in pixels.
|
||||||
laccess.displayheight = Height of a display block in pixels.
|
laccess.displayheight = Height of a display block in pixels.
|
||||||
laccess.bufferusage = Number of unprocessed commands in the graphics buffer of a display.
|
laccess.buffersize = Number of unprocessed commands in the graphics buffer of a display.
|
||||||
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
laccess.operations = Number of operations performed on the block.\nFor displays, returns the number of drawflush operations.
|
||||||
|
|
||||||
lcategory.unknown = 未知
|
lcategory.unknown = 未知
|
||||||
|
|||||||
@@ -183,3 +183,4 @@ RushieWashie
|
|||||||
ITY
|
ITY
|
||||||
Iniquit
|
Iniquit
|
||||||
DSFdsfWxp
|
DSFdsfWxp
|
||||||
|
Someone's Shadow
|
||||||
@@ -202,6 +202,10 @@ public class Vars implements Loadable{
|
|||||||
/** Whether to draw shadows of blocks at map edges and static blocks.
|
/** Whether to draw shadows of blocks at map edges and static blocks.
|
||||||
* Do not change unless you know exactly what you are doing.*/
|
* Do not change unless you know exactly what you are doing.*/
|
||||||
public static boolean enableDarkness = true;
|
public static boolean enableDarkness = true;
|
||||||
|
/** Whether to draw debug lines for collisions. */
|
||||||
|
public static boolean drawDebugHitboxes = false;
|
||||||
|
/** Whether to draw avoidance fields. */
|
||||||
|
public static boolean debugDrawAvoidance = false;
|
||||||
/** application data directory, equivalent to {@link Settings#getDataDirectory()} */
|
/** application data directory, equivalent to {@link Settings#getDataDirectory()} */
|
||||||
public static Fi dataDirectory;
|
public static Fi dataDirectory;
|
||||||
/** data subdirectory used for screenshots */
|
/** data subdirectory used for screenshots */
|
||||||
@@ -255,6 +259,7 @@ public class Vars implements Loadable{
|
|||||||
public static BaseRegistry bases;
|
public static BaseRegistry bases;
|
||||||
public static GlobalVars logicVars;
|
public static GlobalVars logicVars;
|
||||||
public static MapEditor editor;
|
public static MapEditor editor;
|
||||||
|
public static AvoidanceProcess avoidance;
|
||||||
public static GameService service = new GameService();
|
public static GameService service = new GameService();
|
||||||
|
|
||||||
public static Universe universe;
|
public static Universe universe;
|
||||||
|
|||||||
@@ -8,17 +8,26 @@ import mindustry.type.*;
|
|||||||
|
|
||||||
public class ItemUnitStance extends UnitStance{
|
public class ItemUnitStance extends UnitStance{
|
||||||
private static ObjectMap<Item, ItemUnitStance> itemToStance = new ObjectMap<>();
|
private static ObjectMap<Item, ItemUnitStance> itemToStance = new ObjectMap<>();
|
||||||
|
private static Seq<ItemUnitStance> all = new Seq<>();
|
||||||
|
|
||||||
public final Item item;
|
public final Item item;
|
||||||
|
|
||||||
public ItemUnitStance(Item item){
|
public ItemUnitStance(Item item){
|
||||||
super("item-" + item.name, "item-" + item.name, null);
|
super("item-" + item.name, "item-" + item.name, null);
|
||||||
this.item = item;
|
this.item = item;
|
||||||
|
|
||||||
|
incompatibleStances.add(UnitStance.mineAuto).addAll(UnitStance.mineAuto.incompatibleStances);
|
||||||
|
|
||||||
itemToStance.put(item, this);
|
itemToStance.put(item, this);
|
||||||
|
all.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @Nullable ItemUnitStance getByItem(Item item){
|
public static @Nullable ItemUnitStance getByItem(Item item){
|
||||||
return itemToStance.get(item);
|
return item == null ? null : itemToStance.get(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Seq<ItemUnitStance> all(){
|
||||||
|
return all;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ public class Pathfinder implements Runnable{
|
|||||||
mainList = new Seq<>();
|
mainList = new Seq<>();
|
||||||
clearCache();
|
clearCache();
|
||||||
|
|
||||||
|
|
||||||
for(int i = 0; i < tiles.length; i++){
|
for(int i = 0; i < tiles.length; i++){
|
||||||
Tile tile = world.tiles.geti(i);
|
Tile tile = world.tiles.geti(i);
|
||||||
tiles[i] = packTile(tile);
|
tiles[i] = packTile(tile);
|
||||||
@@ -253,7 +252,7 @@ public class Pathfinder implements Runnable{
|
|||||||
nearSolid,
|
nearSolid,
|
||||||
nearLegSolid,
|
nearLegSolid,
|
||||||
tile.floor().isDeep(),
|
tile.floor().isDeep(),
|
||||||
tile.floor().damageTaken > 0.00001f,
|
tile.floor().damages(),
|
||||||
allDeep,
|
allDeep,
|
||||||
nearDeep,
|
nearDeep,
|
||||||
tile.block().teamPassable
|
tile.block().teamPassable
|
||||||
@@ -359,6 +358,11 @@ public class Pathfinder implements Runnable{
|
|||||||
|
|
||||||
/** Gets next tile to travel to. Main thread only. */
|
/** Gets next tile to travel to. Main thread only. */
|
||||||
public @Nullable Tile getTargetTile(Tile tile, Flowfield path, boolean diagonals){
|
public @Nullable Tile getTargetTile(Tile tile, Flowfield path, boolean diagonals){
|
||||||
|
return getTargetTile(tile, path, diagonals, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Gets next tile to travel to. Main thread only. */
|
||||||
|
public @Nullable Tile getTargetTile(Tile tile, Flowfield path, boolean diagonals, int avoidanceId){
|
||||||
if(tile == null) return null;
|
if(tile == null) return null;
|
||||||
|
|
||||||
//uninitialized flowfields are not applicable
|
//uninitialized flowfields are not applicable
|
||||||
@@ -390,6 +394,7 @@ public class Pathfinder implements Runnable{
|
|||||||
int value = values[apos];
|
int value = values[apos];
|
||||||
|
|
||||||
var points = diagonals ? Geometry.d8 : Geometry.d4;
|
var points = diagonals ? Geometry.d8 : Geometry.d4;
|
||||||
|
int[] avoid = avoidanceId <= 0 ? null : avoidance.getAvoidance();
|
||||||
|
|
||||||
Tile current = null;
|
Tile current = null;
|
||||||
int tl = 0;
|
int tl = 0;
|
||||||
@@ -400,11 +405,13 @@ public class Pathfinder implements Runnable{
|
|||||||
if(other == null) continue;
|
if(other == null) continue;
|
||||||
|
|
||||||
int packed = dx/res + dy/res * ww;
|
int packed = dx/res + dy/res * ww;
|
||||||
|
int avoidance = avoid == null ? 0 : avoid[packed] > Integer.MAX_VALUE - avoidanceId ? 1 : 0;
|
||||||
|
int cost = values[packed] + avoidance;
|
||||||
|
|
||||||
if(values[packed] < value && (current == null || values[packed] < tl) && path.passable(packed) &&
|
if(cost < value && avoidance == 0 && (current == null || cost < tl) && path.passable(packed) &&
|
||||||
!(point.x != 0 && point.y != 0 && (!path.passable(((tile.x + point.x)/res + tile.y/res*ww)) || !path.passable((tile.x/res + (tile.y + point.y)/res*ww))))){ //diagonal corner trap
|
!(point.x != 0 && point.y != 0 && (!path.passable(((tile.x + point.x)/res + tile.y/res*ww)) || !path.passable((tile.x/res + (tile.y + point.y)/res*ww))))){ //diagonal corner trap
|
||||||
current = other;
|
current = other;
|
||||||
tl = values[packed];
|
tl = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -655,6 +662,11 @@ public class Pathfinder implements Runnable{
|
|||||||
return pathfinder.getTargetTile(from, this);
|
return pathfinder.getTargetTile(from, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return the next tile to travel to for this flowfield. Main thread only. */
|
||||||
|
public @Nullable Tile getNextTile(Tile from, int unitAvoidanceId){
|
||||||
|
return pathfinder.getTargetTile(from, this, true, unitAvoidanceId);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasCompleteWeights(){
|
public boolean hasCompleteWeights(){
|
||||||
return hasComplete && completeWeights != null;
|
return hasComplete && completeWeights != null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mindustry.ai;
|
|||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.input.*;
|
import arc.input.*;
|
||||||
import arc.scene.style.*;
|
import arc.scene.style.*;
|
||||||
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
@@ -11,17 +12,39 @@ import mindustry.input.*;
|
|||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
|
||||||
public class UnitStance extends MappableContent{
|
public class UnitStance extends MappableContent{
|
||||||
public static UnitStance stop, shoot, holdFire, pursueTarget, patrol, ram, mineAuto;
|
public static UnitStance stop, holdFire, pursueTarget, patrol, ram, mineAuto;
|
||||||
|
|
||||||
/** Name of UI icon (from Icon class). */
|
/** Name of UI icon (from Icon class). */
|
||||||
public String icon;
|
public String icon;
|
||||||
/** Key to press for this stance. */
|
/** Key to press for this stance. */
|
||||||
public @Nullable KeyBind keybind;
|
public @Nullable KeyBind keybind;
|
||||||
|
/** Stances that are mutually exclusive to this stance. This is used for convenience, for writing only! */
|
||||||
|
public Seq<UnitStance> incompatibleStances = new Seq<>();
|
||||||
|
/** Incompatible stances as a bitset for easier operations. This is where incompatibility is actually stored. */
|
||||||
|
public Bits incompatibleBits = new Bits(32);
|
||||||
|
/** If true, this stance can be toggled on or off. */
|
||||||
|
public boolean toggle = true;
|
||||||
|
|
||||||
public UnitStance(String name, String icon, KeyBind keybind){
|
public UnitStance(String name, String icon, KeyBind keybind, boolean toggle){
|
||||||
super(name);
|
super(name);
|
||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
this.keybind = keybind;
|
this.keybind = keybind;
|
||||||
|
this.toggle = toggle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnitStance(String name, String icon, KeyBind keybind){
|
||||||
|
this(name, icon, keybind, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(){
|
||||||
|
super.init();
|
||||||
|
|
||||||
|
for(var stance : incompatibleStances){
|
||||||
|
if(stance == this) continue;
|
||||||
|
incompatibleBits.set(stance.id);
|
||||||
|
stance.incompatibleBits.set(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String localized(){
|
public String localized(){
|
||||||
@@ -47,13 +70,12 @@ public class UnitStance extends MappableContent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void loadAll(){
|
public static void loadAll(){
|
||||||
stop = new UnitStance("stop", "cancel", Binding.cancelOrders);
|
stop = new UnitStance("stop", "cancel", Binding.cancelOrders, false);
|
||||||
shoot = new UnitStance("shoot", "commandAttack", Binding.unitStanceShoot);
|
|
||||||
holdFire = new UnitStance("holdfire", "none", Binding.unitStanceHoldFire);
|
holdFire = new UnitStance("holdfire", "none", Binding.unitStanceHoldFire);
|
||||||
pursueTarget = new UnitStance("pursuetarget", "right", Binding.unitStancePursueTarget);
|
pursueTarget = new UnitStance("pursuetarget", "right", Binding.unitStancePursueTarget);
|
||||||
patrol = new UnitStance("patrol", "refresh", Binding.unitStancePatrol);
|
patrol = new UnitStance("patrol", "refresh", Binding.unitStancePatrol);
|
||||||
ram = new UnitStance("ram", "rightOpen", Binding.unitStanceRam);
|
ram = new UnitStance("ram", "rightOpen", Binding.unitStanceRam);
|
||||||
mineAuto = new UnitStance("mineauto", "settings", null);
|
mineAuto = new UnitStance("mineauto", "settings", null, false);
|
||||||
|
|
||||||
//Only vanilla items are supported for now
|
//Only vanilla items are supported for now
|
||||||
for(Item item : Vars.content.items()){
|
for(Item item : Vars.content.items()){
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ public class CommandAI extends AIController{
|
|||||||
protected float payloadPickupCooldown;
|
protected float payloadPickupCooldown;
|
||||||
protected int transferState = transferStateNone;
|
protected int transferState = transferStateNone;
|
||||||
|
|
||||||
/** Stance, usually related to firing mode. */
|
|
||||||
public UnitStance stance = UnitStance.shoot;
|
|
||||||
/** Current command this unit is following. */
|
/** Current command this unit is following. */
|
||||||
public UnitCommand command;
|
public UnitCommand command;
|
||||||
|
/** Stance, usually related to firing mode. Each bit is a stance ID. */
|
||||||
|
public Bits stances = new Bits(content.unitStances().size);
|
||||||
/** Current controller instance based on command. */
|
/** Current controller instance based on command. */
|
||||||
protected @Nullable AIController commandController;
|
protected @Nullable AIController commandController;
|
||||||
/** Last command type assigned. Used for detecting command changes. */
|
/** Last command type assigned. Used for detecting command changes. */
|
||||||
@@ -63,6 +63,38 @@ public class CommandAI extends AIController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasStance(@Nullable UnitStance stance){
|
||||||
|
return stance != null && stances.get(stance.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStance(UnitStance stance, boolean enabled){
|
||||||
|
if(enabled){
|
||||||
|
setStance(stance);
|
||||||
|
}else{
|
||||||
|
disableStance(stance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStance(UnitStance stance){
|
||||||
|
//this happens when an older save reads the default "shoot" stance, or any other removed stance
|
||||||
|
if(stance == UnitStance.stop) return;
|
||||||
|
|
||||||
|
stances.andNot(stance.incompatibleBits);
|
||||||
|
stances.set(stance.id);
|
||||||
|
stanceChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disableStance(UnitStance stance){
|
||||||
|
stances.clear(stance.id);
|
||||||
|
stanceChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stanceChanged(){
|
||||||
|
if(commandController != null && !(commandController instanceof CommandAI)){
|
||||||
|
commandController.stanceChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
if(command == null){
|
if(command == null){
|
||||||
@@ -82,21 +114,18 @@ public class CommandAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateUnit(){
|
public void updateUnit(){
|
||||||
//this should not be possible
|
|
||||||
if(stance == UnitStance.stop) stance = UnitStance.shoot;
|
|
||||||
|
|
||||||
//fix incorrect stance when mining
|
if(command == UnitCommand.mineCommand && !hasStance(UnitStance.mineAuto) && !ItemUnitStance.all().contains(this::hasStance)){
|
||||||
if(command == UnitCommand.mineCommand && stance != UnitStance.mineAuto && !(stance instanceof ItemUnitStance)){
|
setStance(UnitStance.mineAuto);
|
||||||
stance = UnitStance.mineAuto;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//pursue the target if relevant
|
//pursue the target if relevant
|
||||||
if(stance == UnitStance.pursueTarget && target != null && attackTarget == null && targetPos == null){
|
if(hasStance(UnitStance.pursueTarget) && !hasStance(UnitStance.patrol) && target != null && attackTarget == null && targetPos == null){
|
||||||
commandTarget(target, false);
|
commandTarget(target, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//pursue the target for patrol, keeping the current position
|
//pursue the target for patrol, keeping the current position
|
||||||
if(stance == UnitStance.patrol && target != null && attackTarget == null){
|
if(hasStance(UnitStance.patrol) && hasStance(UnitStance.pursueTarget) && target != null && attackTarget == null){
|
||||||
//commanding a target overwrites targetPos, so add it to the queue
|
//commanding a target overwrites targetPos, so add it to the queue
|
||||||
if(targetPos != null){
|
if(targetPos != null){
|
||||||
commandQueue.add(targetPos.cpy());
|
commandQueue.add(targetPos.cpy());
|
||||||
@@ -207,6 +236,8 @@ public class CommandAI extends AIController{
|
|||||||
finishPath();
|
finishPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean ramming = hasStance(UnitStance.ram);
|
||||||
|
|
||||||
if(attackTarget != null){
|
if(attackTarget != null){
|
||||||
if(targetPos == null){
|
if(targetPos == null){
|
||||||
targetPos = new Vec2();
|
targetPos = new Vec2();
|
||||||
@@ -214,7 +245,7 @@ public class CommandAI extends AIController{
|
|||||||
}
|
}
|
||||||
targetPos.set(attackTarget);
|
targetPos.set(attackTarget);
|
||||||
|
|
||||||
if(unit.isGrounded() && attackTarget instanceof Building build && build.tile.solid() && unit.type.pathCostId != ControlPathfinder.costIdLegs && stance != UnitStance.ram){
|
if(unit.isGrounded() && attackTarget instanceof Building build && build.tile.solid() && unit.type.pathCostId != ControlPathfinder.costIdLegs && !ramming){
|
||||||
Tile best = build.findClosestEdge(unit, Tile::solid);
|
Tile best = build.findClosestEdge(unit, Tile::solid);
|
||||||
if(best != null){
|
if(best != null){
|
||||||
targetPos.set(best);
|
targetPos.set(best);
|
||||||
@@ -225,7 +256,7 @@ public class CommandAI extends AIController{
|
|||||||
boolean alwaysArrive = false;
|
boolean alwaysArrive = false;
|
||||||
|
|
||||||
float engageRange = unit.type.range - 10f;
|
float engageRange = unit.type.range - 10f;
|
||||||
boolean withinAttackRange = attackTarget != null && unit.within(attackTarget, engageRange) && stance != UnitStance.ram;
|
boolean withinAttackRange = attackTarget != null && unit.within(attackTarget, engageRange) && !ramming;
|
||||||
|
|
||||||
if(targetPos != null){
|
if(targetPos != null){
|
||||||
boolean move = true, isFinalPoint = commandQueue.size == 0;
|
boolean move = true, isFinalPoint = commandQueue.size == 0;
|
||||||
@@ -239,16 +270,17 @@ public class CommandAI extends AIController{
|
|||||||
|
|
||||||
Building targetBuild = world.buildWorld(targetPos.x, targetPos.y);
|
Building targetBuild = world.buildWorld(targetPos.x, targetPos.y);
|
||||||
|
|
||||||
|
|
||||||
//TODO: should the unit stop when it finds a target?
|
//TODO: should the unit stop when it finds a target?
|
||||||
if(
|
if(
|
||||||
(stance == UnitStance.patrol && target != null && unit.within(target, unit.type.range - 2f) && !unit.type.circleTarget) ||
|
(hasStance(UnitStance.patrol) && !hasStance(UnitStance.pursueTarget) && target != null && unit.within(target, unit.type.range - 2f) && !unit.type.circleTarget) ||
|
||||||
(command == UnitCommand.enterPayloadCommand && unit.within(targetPos, 4f) || (targetBuild != null && unit.within(targetBuild, targetBuild.block.size * tilesize/2f * 0.9f))) ||
|
(command == UnitCommand.enterPayloadCommand && unit.within(targetPos, 4f) || (targetBuild != null && unit.within(targetBuild, targetBuild.block.size * tilesize/2f * 0.9f))) ||
|
||||||
(command == UnitCommand.loopPayloadCommand && unit.within(targetPos, 10f))
|
(command == UnitCommand.loopPayloadCommand && unit.within(targetPos, 10f))
|
||||||
){
|
){
|
||||||
move = false;
|
move = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit.isGrounded() && stance != UnitStance.ram){
|
if(unit.isGrounded() && !ramming){
|
||||||
//TODO: blocking enable or disable?
|
//TODO: blocking enable or disable?
|
||||||
if(timer.get(timerTarget3, avoidInterval)){
|
if(timer.get(timerTarget3, avoidInterval)){
|
||||||
Vec2 dstPos = Tmp.v1.trns(unit.rotation, unit.hitSize/2f);
|
Vec2 dstPos = Tmp.v1.trns(unit.rotation, unit.hitSize/2f);
|
||||||
@@ -284,7 +316,7 @@ public class CommandAI extends AIController{
|
|||||||
noFound[0] = false;
|
noFound[0] = false;
|
||||||
vecOut.set(vecMovePos);
|
vecOut.set(vecMovePos);
|
||||||
}else{
|
}else{
|
||||||
move = controlPath.getPathPosition(unit, vecMovePos, targetPos, vecOut, noFound) && (!blockingUnit || timeSpentBlocked > maxBlockTime);
|
move &= controlPath.getPathPosition(unit, vecMovePos, targetPos, vecOut, noFound) && (!blockingUnit || timeSpentBlocked > maxBlockTime);
|
||||||
|
|
||||||
//TODO: what to do when there's a target and it can't be reached?
|
//TODO: what to do when there's a target and it can't be reached?
|
||||||
/*
|
/*
|
||||||
@@ -320,7 +352,7 @@ public class CommandAI extends AIController{
|
|||||||
moveTo(vecOut,
|
moveTo(vecOut,
|
||||||
withinAttackRange ? engageRange :
|
withinAttackRange ? engageRange :
|
||||||
unit.isGrounded() ? 0f :
|
unit.isGrounded() ? 0f :
|
||||||
attackTarget != null && stance != UnitStance.ram ? engageRange : 0f,
|
attackTarget != null && !ramming ? engageRange : 0f,
|
||||||
unit.isFlying() ? 40f : 100f, false, null, isFinalPoint || alwaysArrive);
|
unit.isFlying() ? 40f : 100f, false, null, isFinalPoint || alwaysArrive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,7 +444,7 @@ public class CommandAI extends AIController{
|
|||||||
commandPosition(position);
|
commandPosition(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(prev != null && (stance == UnitStance.patrol || command == UnitCommand.loopPayloadCommand)){
|
if(prev != null && (hasStance(UnitStance.patrol) || command == UnitCommand.loopPayloadCommand)){
|
||||||
commandQueue.add(prev.cpy());
|
commandQueue.add(prev.cpy());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,7 +486,7 @@ public class CommandAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldFire(){
|
public boolean shouldFire(){
|
||||||
return stance != UnitStance.holdFire;
|
return !hasStance(UnitStance.holdFire);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package mindustry.ai.types;
|
package mindustry.ai.types;
|
||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.util.*;
|
||||||
|
import mindustry.*;
|
||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
|
import mindustry.entities.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -9,11 +12,19 @@ import mindustry.world.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class GroundAI extends AIController{
|
public class GroundAI extends AIController{
|
||||||
|
float stuckTime = 0f;
|
||||||
|
float stuckX = -999f, stuckY = -999f;
|
||||||
|
|
||||||
|
static final float stuckRange = tilesize * 1.5f;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
|
|
||||||
|
//if it hasn't moved the stuck range in twice the time it should have taken, it's stuck
|
||||||
|
float stuckThreshold = Math.max(1f, stuckRange * 2f / unit.type.speed);
|
||||||
|
|
||||||
Building core = unit.closestEnemyCore();
|
Building core = unit.closestEnemyCore();
|
||||||
|
boolean moved = false;
|
||||||
|
|
||||||
if(core != null && unit.within(core, unit.range() / 1.3f + core.block.size * tilesize / 2f)){
|
if(core != null && unit.within(core, unit.range() / 1.3f + core.block.size * tilesize / 2f)){
|
||||||
target = core;
|
target = core;
|
||||||
@@ -38,7 +49,9 @@ public class GroundAI extends AIController{
|
|||||||
move = false;
|
move = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(move) pathfind(Pathfinder.fieldCore);
|
moved = move;
|
||||||
|
|
||||||
|
if(move) pathfind(Pathfinder.fieldCore, true, stuckTime >= stuckThreshold);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit.type.canBoost && unit.elevation > 0.001f && !unit.onSolid()){
|
if(unit.type.canBoost && unit.elevation > 0.001f && !unit.onSolid()){
|
||||||
@@ -46,5 +59,28 @@ public class GroundAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
faceTarget();
|
faceTarget();
|
||||||
|
|
||||||
|
if(moved){
|
||||||
|
|
||||||
|
if(unit.within(stuckX, stuckY, stuckRange)){
|
||||||
|
stuckTime += Time.delta;
|
||||||
|
if(stuckTime - Time.delta < stuckThreshold && stuckTime >= stuckThreshold){
|
||||||
|
float radius = unit.hitSize * Vars.unitCollisionRadiusScale * 2f;
|
||||||
|
Units.nearby(unit.team, unit.x, unit.y, radius, other -> {
|
||||||
|
if(other != unit && other.controller() instanceof GroundAI ai && other.within(unit.x, unit.y, radius + other.hitSize * unitCollisionRadiusScale)){
|
||||||
|
ai.stuckX = other.x;
|
||||||
|
ai.stuckY = other.y;
|
||||||
|
ai.stuckTime = Math.max(1f, stuckRange * 2f / other.type.speed) + 1f;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
stuckX = unit.x;
|
||||||
|
stuckY = unit.y;
|
||||||
|
stuckTime = 0f;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
stuckTime = 0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,14 @@ public class MinerAI extends AIController{
|
|||||||
public Item targetItem;
|
public Item targetItem;
|
||||||
public Tile ore;
|
public Tile ore;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stanceChanged(){
|
||||||
|
if(targetItem != null && unit.controller() instanceof CommandAI ai && !ai.hasStance(UnitStance.mineAuto) && !ai.hasStance(ItemUnitStance.getByItem(targetItem))){
|
||||||
|
mining = false;
|
||||||
|
targetItem = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
Building core = unit.closestCore();
|
Building core = unit.closestCore();
|
||||||
@@ -23,14 +31,16 @@ public class MinerAI extends AIController{
|
|||||||
unit.mineTile(null);
|
unit.mineTile(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item autoItem = unit.controller() instanceof CommandAI ai && ai.stance instanceof ItemUnitStance stance ? stance.item : null;
|
CommandAI ai = unit.controller() instanceof CommandAI a ? a : null;
|
||||||
|
|
||||||
if(mining){
|
if(mining){
|
||||||
if(autoItem != null){
|
if(timer.get(timerTarget2, 60 * 4) || targetItem == null){
|
||||||
targetItem = autoItem;
|
if(ai != null && !ai.hasStance(UnitStance.mineAuto)){
|
||||||
}else if(timer.get(timerTarget2, 60 * 4) || targetItem == null){
|
targetItem = content.items().min(i -> indexer.hasOre(i) && unit.canMine(i) && ai.hasStance(ItemUnitStance.getByItem(i)), i -> core.items.get(i));
|
||||||
|
}else{
|
||||||
targetItem = unit.type.mineItems.min(i -> indexer.hasOre(i) && unit.canMine(i), i -> core.items.get(i));
|
targetItem = unit.type.mineItems.min(i -> indexer.hasOre(i) && unit.canMine(i), i -> core.items.get(i));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//core full of the target item, do nothing
|
//core full of the target item, do nothing
|
||||||
if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){
|
if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ import static mindustry.Vars.*;
|
|||||||
public class AsyncCore{
|
public class AsyncCore{
|
||||||
//all processes to be executed each frame
|
//all processes to be executed each frame
|
||||||
public final Seq<AsyncProcess> processes = Seq.with(
|
public final Seq<AsyncProcess> processes = Seq.with(
|
||||||
new PhysicsProcess()
|
new PhysicsProcess(),
|
||||||
|
avoidance = new AvoidanceProcess()
|
||||||
);
|
);
|
||||||
|
|
||||||
//futures to be awaited
|
//futures to be awaited
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package mindustry.async;
|
||||||
|
|
||||||
|
import arc.math.*;
|
||||||
|
import arc.math.geom.*;
|
||||||
|
import arc.struct.*;
|
||||||
|
import arc.util.*;
|
||||||
|
import mindustry.*;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
|
public class AvoidanceProcess implements AsyncProcess{
|
||||||
|
/** cached world size */
|
||||||
|
static int wwidth, wheight;
|
||||||
|
|
||||||
|
@Nullable int[] buffer1, buffer2;
|
||||||
|
volatile boolean swap;
|
||||||
|
|
||||||
|
IntSeq requests = new IntSeq();
|
||||||
|
|
||||||
|
@Nullable int[] avoidance;
|
||||||
|
boolean modified;
|
||||||
|
boolean active;
|
||||||
|
|
||||||
|
public @Nullable int[] getAvoidance(){
|
||||||
|
if(!active){
|
||||||
|
//lazily initialize and begin processing after this first request
|
||||||
|
buffer1 = new int[wwidth * wheight];
|
||||||
|
buffer2 = new int[wwidth * wheight];
|
||||||
|
active = true;
|
||||||
|
}
|
||||||
|
return avoidance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(){
|
||||||
|
wwidth = Vars.world.width();
|
||||||
|
wheight = Vars.world.height();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset(){
|
||||||
|
buffer1 = buffer2 = avoidance = null;
|
||||||
|
swap = false;
|
||||||
|
modified = false;
|
||||||
|
active = false;
|
||||||
|
requests.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void begin(){
|
||||||
|
if(!active) return;
|
||||||
|
|
||||||
|
requests.clear();
|
||||||
|
|
||||||
|
avoidance = !swap ? buffer1 : buffer2;
|
||||||
|
|
||||||
|
for(var team : state.teams.present){
|
||||||
|
//only do avoidance if it's relevant to the team
|
||||||
|
if(team.team.isAI() && !team.team.rules().rtsAi){
|
||||||
|
for(var unit : team.units){
|
||||||
|
if(unit.collisionLayer() == PhysicsProcess.layerGround){
|
||||||
|
//scaling is oversized 2x because units need to avoid things that are at their origin tile
|
||||||
|
float scaling = 2f;
|
||||||
|
requests.add(Point2.pack(unit.tileX(), unit.tileY()), Float.floatToRawIntBits(unit.hitSize * unitCollisionRadiusScale / tilesize * scaling), unit.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(){
|
||||||
|
//double buffering; one buffer is always valid (not being updated)
|
||||||
|
var buffer = swap ? buffer1 : buffer2;
|
||||||
|
swap = !swap;
|
||||||
|
|
||||||
|
if(buffer == null) return;
|
||||||
|
//technically, this is wrong, and will lead to flickering avoidance when all units are gone, but this doesn't matter because it's not being queried either way
|
||||||
|
if(modified){
|
||||||
|
Arrays.fill(buffer, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
modified = requests.size > 0;
|
||||||
|
|
||||||
|
int total = requests.size;
|
||||||
|
int[] items = requests.items;
|
||||||
|
for(int i = 0; i < total; i += 3){
|
||||||
|
int point = items[i], id = items[i + 2];
|
||||||
|
int rx = Point2.x(point), ry = Point2.y(point);
|
||||||
|
float rad = Float.intBitsToFloat(items[i + 1]);
|
||||||
|
float rad2 = rad * rad;
|
||||||
|
|
||||||
|
int r = Math.max(1, Mathf.ceil(rad));
|
||||||
|
|
||||||
|
for(int dx = -r; dx <= r; dx++){
|
||||||
|
for(int dy = -r; dy <= r; dy++){
|
||||||
|
int x = dx + rx, y = dy + ry;
|
||||||
|
if(x >= 0 && y >= 0 && x < wwidth && y < wheight && (dx*dx + dy*dy) <= rad2){
|
||||||
|
buffer[x + y * wwidth] = Math.max(buffer[x + y * wwidth], Integer.MAX_VALUE - id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldProcess(){
|
||||||
|
return active;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6264,7 +6264,7 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
tankAssembler = new UnitAssembler("tank-assembler"){{
|
tankAssembler = new UnitAssembler("tank-assembler"){{
|
||||||
requirements(Category.units, with(Items.thorium, 500, Items.oxide, 150, Items.carbide, 80, Items.silicon, 500));
|
requirements(Category.units, with(Items.thorium, 500, Items.oxide, 150, Items.carbide, 80, Items.silicon, 650));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
size = 5;
|
size = 5;
|
||||||
plans.add(
|
plans.add(
|
||||||
@@ -6274,12 +6274,12 @@ public class Blocks{
|
|||||||
areaSize = 13;
|
areaSize = 13;
|
||||||
researchCostMultiplier = 0.4f;
|
researchCostMultiplier = 0.4f;
|
||||||
|
|
||||||
consumePower(3f);
|
consumePower(2.5f);
|
||||||
consumeLiquid(Liquids.cyanogen, 9f / 60f);
|
consumeLiquid(Liquids.cyanogen, 9f / 60f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
shipAssembler = new UnitAssembler("ship-assembler"){{
|
shipAssembler = new UnitAssembler("ship-assembler"){{
|
||||||
requirements(Category.units, with(Items.carbide, 100, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 800, Items.thorium, 400));
|
requirements(Category.units, with(Items.carbide, 100, Items.oxide, 200, Items.tungsten, 550, Items.silicon, 900, Items.thorium, 400));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
size = 5;
|
size = 5;
|
||||||
plans.add(
|
plans.add(
|
||||||
@@ -6288,12 +6288,12 @@ public class Blocks{
|
|||||||
);
|
);
|
||||||
areaSize = 13;
|
areaSize = 13;
|
||||||
|
|
||||||
consumePower(3f);
|
consumePower(2.5f);
|
||||||
consumeLiquid(Liquids.cyanogen, 12f / 60f);
|
consumeLiquid(Liquids.cyanogen, 12f / 60f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
mechAssembler = new UnitAssembler("mech-assembler"){{
|
mechAssembler = new UnitAssembler("mech-assembler"){{
|
||||||
requirements(Category.units, with(Items.carbide, 200, Items.thorium, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900));
|
requirements(Category.units, with(Items.carbide, 200, Items.thorium, 600, Items.oxide, 200, Items.tungsten, 550, Items.silicon, 1000));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
size = 5;
|
size = 5;
|
||||||
//TODO different reqs
|
//TODO different reqs
|
||||||
@@ -6303,14 +6303,14 @@ public class Blocks{
|
|||||||
);
|
);
|
||||||
areaSize = 13;
|
areaSize = 13;
|
||||||
|
|
||||||
consumePower(3.5f);
|
consumePower(3f);
|
||||||
consumeLiquid(Liquids.cyanogen, 12f / 60f);
|
consumeLiquid(Liquids.cyanogen, 12f / 60f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//TODO requirements / only accept inputs
|
//TODO requirements / only accept inputs
|
||||||
basicAssemblerModule = new UnitAssemblerModule("basic-assembler-module"){{
|
basicAssemblerModule = new UnitAssemblerModule("basic-assembler-module"){{
|
||||||
requirements(Category.units, with(Items.carbide, 300, Items.thorium, 500, Items.oxide, 200, Items.phaseFabric, 400));
|
requirements(Category.units, with(Items.carbide, 300, Items.thorium, 500, Items.oxide, 250, Items.phaseFabric, 400));
|
||||||
consumePower(4f);
|
consumePower(3.5f);
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
researchCostMultiplier = 0.75f;
|
researchCostMultiplier = 0.75f;
|
||||||
|
|
||||||
@@ -6360,7 +6360,7 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
payloadMassDriver = new PayloadMassDriver("payload-mass-driver"){{
|
payloadMassDriver = new PayloadMassDriver("payload-mass-driver"){{
|
||||||
requirements(Category.units, with(Items.tungsten, 120, Items.silicon, 120, Items.graphite, 50));
|
requirements(Category.units, with(Items.tungsten, 40, Items.silicon, 50, Items.graphite, 20));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
size = 3;
|
size = 3;
|
||||||
reload = 130f;
|
reload = 130f;
|
||||||
@@ -6372,13 +6372,13 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
largePayloadMassDriver = new PayloadMassDriver("large-payload-mass-driver"){{
|
largePayloadMassDriver = new PayloadMassDriver("large-payload-mass-driver"){{
|
||||||
requirements(Category.units, with(Items.thorium, 200, Items.tungsten, 200, Items.silicon, 200, Items.graphite, 100, Items.oxide, 30));
|
requirements(Category.units, with(Items.phaseFabric, 20, Items.tungsten, 200, Items.silicon, 200, Items.graphite, 100, Items.oxide, 30));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
size = 5;
|
size = 5;
|
||||||
reload = 130f;
|
reload = 130f;
|
||||||
chargeTime = 100f;
|
chargeTime = 100f;
|
||||||
range = 1100f;
|
range = 2100f;
|
||||||
maxPayloadSize = 3.5f;
|
maxPayloadSize = 4f;
|
||||||
consumePower(3f);
|
consumePower(3f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -6388,24 +6388,24 @@ public class Blocks{
|
|||||||
itemCapacity = 100;
|
itemCapacity = 100;
|
||||||
consumePower(1f);
|
consumePower(1f);
|
||||||
size = 3;
|
size = 3;
|
||||||
deconstructSpeed = 1f;
|
deconstructSpeed = 3f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
deconstructor = new PayloadDeconstructor("deconstructor"){{
|
deconstructor = new PayloadDeconstructor("deconstructor"){{
|
||||||
requirements(Category.units, with(Items.beryllium, 250, Items.oxide, 100, Items.silicon, 250, Items.carbide, 250));
|
requirements(Category.units, with(Items.beryllium, 250, Items.oxide, 100, Items.silicon, 250, Items.carbide, 50));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
itemCapacity = 250;
|
itemCapacity = 250;
|
||||||
consumePower(3f);
|
consumePower(3f);
|
||||||
size = 5;
|
size = 5;
|
||||||
deconstructSpeed = 2f;
|
deconstructSpeed = 6f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
constructor = new Constructor("constructor"){{
|
constructor = new Constructor("constructor"){{
|
||||||
requirements(Category.units, with(Items.silicon, 100, Items.beryllium, 150, Items.tungsten, 80));
|
requirements(Category.units, with(Items.silicon, 50, Items.beryllium, 75, Items.tungsten, 40));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
buildSpeed = 0.6f;
|
buildSpeed = 0.6f;
|
||||||
consumePower(2f);
|
consumePower(2.5f);
|
||||||
size = 3;
|
size = 3;
|
||||||
//TODO expand this list
|
//TODO expand this list
|
||||||
filter = Seq.with(Blocks.tungstenWallLarge, Blocks.berylliumWallLarge, Blocks.carbideWallLarge, Blocks.reinforcedSurgeWallLarge, Blocks.reinforcedLiquidContainer, Blocks.reinforcedContainer, Blocks.beamNode);
|
filter = Seq.with(Blocks.tungstenWallLarge, Blocks.berylliumWallLarge, Blocks.carbideWallLarge, Blocks.reinforcedSurgeWallLarge, Blocks.reinforcedLiquidContainer, Blocks.reinforcedContainer, Blocks.beamNode);
|
||||||
@@ -6413,7 +6413,7 @@ public class Blocks{
|
|||||||
|
|
||||||
//yes this block is pretty much useless
|
//yes this block is pretty much useless
|
||||||
largeConstructor = new Constructor("large-constructor"){{
|
largeConstructor = new Constructor("large-constructor"){{
|
||||||
requirements(Category.units, with(Items.silicon, 150, Items.oxide, 150, Items.tungsten, 200, Items.phaseFabric, 40));
|
requirements(Category.units, with(Items.silicon, 150, Items.oxide, 100, Items.tungsten, 200, Items.thorium, 80));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
buildSpeed = 0.75f;
|
buildSpeed = 0.75f;
|
||||||
@@ -6421,11 +6421,11 @@ public class Blocks{
|
|||||||
minBlockSize = 3;
|
minBlockSize = 3;
|
||||||
size = 5;
|
size = 5;
|
||||||
|
|
||||||
consumePower(2f);
|
consumePower(3f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
payloadLoader = new PayloadLoader("payload-loader"){{
|
payloadLoader = new PayloadLoader("payload-loader"){{
|
||||||
requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.tungsten, 80));
|
requirements(Category.units, with(Items.graphite, 80, Items.silicon, 160, Items.tungsten, 90));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
consumePower(2f);
|
consumePower(2f);
|
||||||
@@ -6434,7 +6434,7 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
payloadUnloader = new PayloadUnloader("payload-unloader"){{
|
payloadUnloader = new PayloadUnloader("payload-unloader"){{
|
||||||
requirements(Category.units, with(Items.graphite, 50, Items.silicon, 50, Items.tungsten, 30));
|
requirements(Category.units, with(Items.graphite, 140, Items.silicon, 220, Items.tungsten, 180));
|
||||||
regionSuffix = "-dark";
|
regionSuffix = "-dark";
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
consumePower(2f);
|
consumePower(2f);
|
||||||
|
|||||||
@@ -415,6 +415,10 @@ public class Renderer implements ApplicationListener{
|
|||||||
|
|
||||||
Groups.draw.draw(Drawc::draw);
|
Groups.draw.draw(Drawc::draw);
|
||||||
|
|
||||||
|
if(drawDebugHitboxes){
|
||||||
|
DebugCollisionRenderer.draw();
|
||||||
|
}
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
Draw.flush();
|
Draw.flush();
|
||||||
Draw.sort(false);
|
Draw.sort(false);
|
||||||
|
|||||||
@@ -95,6 +95,10 @@ public abstract class UnlockableContent extends MappableContent{
|
|||||||
uiIcon = Core.atlas.find(getContentType().name() + "-" + name + "-ui", fullIcon);
|
uiIcon = Core.atlas.find(getContentType().name() + "-" + name + "-ui", fullIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isBanned(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isOnPlanet(@Nullable Planet planet){
|
public boolean isOnPlanet(@Nullable Planet planet){
|
||||||
return planet == null || planet == Planets.sun || shownPlanets.isEmpty() || shownPlanets.contains(planet);
|
return planet == null || planet == Planets.sun || shownPlanets.isEmpty() || shownPlanets.contains(planet);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import mindustry.game.MapObjectives.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.io.*;
|
import mindustry.io.*;
|
||||||
|
import mindustry.logic.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.ui.dialogs.*;
|
import mindustry.ui.dialogs.*;
|
||||||
@@ -280,6 +281,15 @@ public class MapObjectivesDialog extends BaseDialog{
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
setInterpreter(Alignment.class, int.class, (cont, name, type, field, remover, indexer, get, set) -> {
|
||||||
|
Alignment align = field.getAnnotation(Alignment.class);
|
||||||
|
name(cont, name, remover, indexer);
|
||||||
|
cont.button(b -> {
|
||||||
|
b.label(() -> LStatement.alignToName.get(get.get(), "center"));
|
||||||
|
b.clicked(() -> LStatement.showAlignSelect(b, get.get(), set::get, align.hor(), align.ver()));
|
||||||
|
}, () -> {});
|
||||||
|
});
|
||||||
|
|
||||||
// Types that use the default interpreter. It would be nice if all types could use it, but I don't know how to reliably prevent classes like [? extends Content] from using it.
|
// Types that use the default interpreter. It would be nice if all types could use it, but I don't know how to reliably prevent classes like [? extends Content] from using it.
|
||||||
for(var obj : MapObjectives.allObjectiveTypes) setInterpreter(obj.get().getClass(), defaultInterpreter());
|
for(var obj : MapObjectives.allObjectiveTypes) setInterpreter(obj.get().getClass(), defaultInterpreter());
|
||||||
for(var mark : MapObjectives.allMarkerTypes) setInterpreter(mark.get().getClass(), defaultInterpreter());
|
for(var mark : MapObjectives.allMarkerTypes) setInterpreter(mark.get().getClass(), defaultInterpreter());
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class Fires{
|
|||||||
if(tile != null){
|
if(tile != null){
|
||||||
Fire fire = get(tile);
|
Fire fire = get(tile);
|
||||||
if(fire != null){
|
if(fire != null){
|
||||||
fire.time(fire.time + intensity * Time.delta);
|
fire.time += intensity * Time.delta;
|
||||||
Fx.steam.at(fire);
|
Fx.steam.at(fire);
|
||||||
if(fire.time >= fire.lifetime){
|
if(fire.time >= fire.lifetime){
|
||||||
Events.fire(Trigger.fireExtinguish);
|
Events.fire(Trigger.fireExtinguish);
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class Puddles{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void register(Puddle puddle){
|
public static void register(Puddle puddle){
|
||||||
world.tiles.setPuddle(puddle.tile().array(), puddle);
|
world.tiles.setPuddle(puddle.tile.array(), puddle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Reacts two liquids together at a location. */
|
/** Reacts two liquids together at a location. */
|
||||||
|
|||||||
@@ -438,17 +438,19 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
return heat;
|
return heat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets the time scale of the building to the given intensity, unless it's above that value */
|
||||||
public void applyBoost(float intensity, float duration){
|
public void applyBoost(float intensity, float duration){
|
||||||
//do not refresh time scale when getting a weaker intensity
|
//do not refresh time scale when getting a lower intensity
|
||||||
if(intensity >= this.timeScale - 0.001f){
|
if(intensity >= this.timeScale - 0.001f){
|
||||||
timeScaleDuration = Math.max(timeScaleDuration, duration);
|
timeScaleDuration = Math.max(timeScaleDuration, duration);
|
||||||
}
|
}
|
||||||
timeScale = Math.max(timeScale, intensity);
|
timeScale = Math.max(timeScale, intensity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets the time scale of the building to the given intensity, unless it's below that value */
|
||||||
public void applySlowdown(float intensity, float duration){
|
public void applySlowdown(float intensity, float duration){
|
||||||
//do not refresh time scale when getting a weaker intensity
|
//do not refresh time scale when getting a higher intensity
|
||||||
if(intensity <= this.timeScale - 0.001f){
|
if(intensity <= this.timeScale + 0.001f){
|
||||||
timeScaleDuration = Math.max(timeScaleDuration, duration);
|
timeScaleDuration = Math.max(timeScaleDuration, duration);
|
||||||
}
|
}
|
||||||
timeScale = Math.min(timeScale, intensity);
|
timeScale = Math.min(timeScale, intensity);
|
||||||
@@ -1215,11 +1217,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
|
|
||||||
public void drawItemSelection(@Nullable UnlockableContent selection){
|
public void drawItemSelection(@Nullable UnlockableContent selection){
|
||||||
if(selection != null){
|
if(selection != null){
|
||||||
float dx = x - block.size * tilesize/2f, dy = y + block.size * tilesize/2f, s = iconSmall / 4f;
|
float dx = x - block.size * tilesize/2f, dy = y + block.size * tilesize/2f, s = iconSmall / 4f * selection.fullIcon.ratio(), h = iconSmall / 4f;
|
||||||
Draw.mixcol(Color.darkGray, 1f);
|
Draw.mixcol(Color.darkGray, 1f);
|
||||||
Draw.rect(selection.fullIcon, dx, dy - 1, s, s);
|
Draw.rect(selection.fullIcon, dx, dy - 1, s, h);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
Draw.rect(selection.fullIcon, dx, dy, s, s);
|
Draw.rect(selection.fullIcon, dx, dy, s, h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import mindustry.world.meta.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@EntityDef(value = {Firec.class}, pooled = true)
|
@EntityDef(value = {Firec.class}, pooled = true)
|
||||||
@Component(base = true)
|
@Component(base = true, genInterface = false)
|
||||||
abstract class FireComp implements Timedc, Posc, Syncc, Drawc{
|
abstract class FireComp implements Timedc, Posc, Syncc, Drawc{
|
||||||
public static final int frames = 40, duration = 90;
|
public static final int frames = 40, duration = 90;
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ abstract class FireComp implements Timedc, Posc, Syncc, Drawc{
|
|||||||
//apply damage to nearby units & building
|
//apply damage to nearby units & building
|
||||||
if((damageTimer += Time.delta) >= damageDelay){
|
if((damageTimer += Time.delta) >= damageDelay){
|
||||||
damageTimer = 0f;
|
damageTimer = 0f;
|
||||||
Puddlec p = Puddles.get(tile);
|
Puddle p = Puddles.get(tile);
|
||||||
puddleFlammability = p != null ? p.getFlammability() / 3f : 0;
|
puddleFlammability = p != null ? p.getFlammability() / 3f : 0;
|
||||||
|
|
||||||
if(damage){
|
if(damage){
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import static mindustry.Vars.*;
|
|||||||
import static mindustry.entities.Puddles.*;
|
import static mindustry.entities.Puddles.*;
|
||||||
|
|
||||||
@EntityDef(value = {Puddlec.class}, pooled = true)
|
@EntityDef(value = {Puddlec.class}, pooled = true)
|
||||||
@Component(base = true)
|
@Component(base = true, genInterface = false)
|
||||||
abstract class PuddleComp implements Posc, Puddlec, Drawc, Syncc{
|
abstract class PuddleComp implements Posc, Puddlec, Drawc, Syncc{
|
||||||
private static final Rect rect = new Rect(), rect2 = new Rect();
|
private static final Rect rect = new Rect(), rect2 = new Rect();
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import mindustry.ui.*;
|
|||||||
|
|
||||||
/** Component/entity for labels in world space. Useful for servers. Does not save in files - create only on world load. */
|
/** Component/entity for labels in world space. Useful for servers. Does not save in files - create only on world load. */
|
||||||
@EntityDef(value = {WorldLabelc.class}, serialize = false)
|
@EntityDef(value = {WorldLabelc.class}, serialize = false)
|
||||||
@Component(base = true)
|
@Component(base = true, genInterface = false)
|
||||||
public abstract class WorldLabelComp implements Posc, Drawc, Syncc{
|
public abstract class WorldLabelComp implements Posc, Drawc, Syncc{
|
||||||
@Import int id;
|
@Import int id;
|
||||||
@Import float x, y;
|
@Import float x, y;
|
||||||
@@ -31,10 +31,10 @@ public abstract class WorldLabelComp implements Posc, Drawc, Syncc{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
drawAt(text, x, y, z, flags, fontSize);
|
drawAt(text, x, y, z, flags, fontSize, Align.center, Align.center);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawAt(String text, float x, float y, float layer, int flags, float fontSize){
|
public static void drawAt(String text, float x, float y, float layer, int flags, float fontSize, int align, int lineAlign){
|
||||||
Draw.z(layer);
|
Draw.z(layer);
|
||||||
float z = Drawf.text();
|
float z = Drawf.text();
|
||||||
|
|
||||||
@@ -46,14 +46,32 @@ public abstract class WorldLabelComp implements Posc, Drawc, Syncc{
|
|||||||
font.getData().setScale(0.25f / Scl.scl(1f) * fontSize);
|
font.getData().setScale(0.25f / Scl.scl(1f) * fontSize);
|
||||||
layout.setText(font, text);
|
layout.setText(font, text);
|
||||||
|
|
||||||
|
int border = (flags & flagBackground) != 0 ? 1 : 0;
|
||||||
|
|
||||||
|
if(Align.isBottom(align)){
|
||||||
|
y += layout.height + border * 1.5f;
|
||||||
|
}else if(Align.isTop(align)){
|
||||||
|
y -= border * 1.5f;
|
||||||
|
}else{
|
||||||
|
y += layout.height / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Align.isLeft(align)){
|
||||||
|
x += layout.width / 2 + border;
|
||||||
|
}else if(Align.isRight(align)){
|
||||||
|
x -= layout.width / 2 + border;
|
||||||
|
}
|
||||||
|
|
||||||
if((flags & flagBackground) != 0){
|
if((flags & flagBackground) != 0){
|
||||||
Draw.color(0f, 0f, 0f, 0.3f);
|
Draw.color(0f, 0f, 0f, 0.3f);
|
||||||
Fill.rect(x, y - layout.height / 2, layout.width + 2, layout.height + 3);
|
Fill.rect(x, y - layout.height / 2, layout.width + 2, layout.height + 3);
|
||||||
Draw.color();
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float tx = Align.isLeft(lineAlign) ? -layout.width * 0.5f : Align.isRight(lineAlign) ? layout.width * 0.5f : 0;
|
||||||
|
|
||||||
font.setColor(Color.white);
|
font.setColor(Color.white);
|
||||||
font.draw(text, x, y, 0, Align.center, false);
|
font.draw(text, x + tx, y, 0, lineAlign, false);
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
Pools.free(layout);
|
Pools.free(layout);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import arc.math.*;
|
|||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
|
import mindustry.async.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -51,6 +52,9 @@ public class AIController implements UnitController{
|
|||||||
updateMovement();
|
updateMovement();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Called when the parent CommandAI changes its stance. */
|
||||||
|
public void stanceChanged(){}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return whether controller state should not be reset after reading.
|
* @return whether controller state should not be reset after reading.
|
||||||
* Do not override unless you know exactly what you are doing.
|
* Do not override unless you know exactly what you are doing.
|
||||||
@@ -129,11 +133,15 @@ public class AIController implements UnitController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void pathfind(int pathTarget, boolean stopAtTargetTile){
|
public void pathfind(int pathTarget, boolean stopAtTargetTile){
|
||||||
|
pathfind(pathTarget, stopAtTargetTile, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pathfind(int pathTarget, boolean stopAtTargetTile, boolean avoidance){
|
||||||
int costType = unit.type.flowfieldPathType;
|
int costType = unit.type.flowfieldPathType;
|
||||||
|
|
||||||
Tile tile = unit.tileOn();
|
Tile tile = unit.tileOn();
|
||||||
if(tile == null) return;
|
if(tile == null) return;
|
||||||
Tile targetTile = pathfinder.getField(unit.team, costType, pathTarget).getNextTile(tile);
|
Tile targetTile = pathfinder.getField(unit.team, costType, pathTarget).getNextTile(tile, avoidance && unit.collisionLayer() == PhysicsProcess.layerGround ? unit.id : 0);
|
||||||
|
|
||||||
if((tile == targetTile && stopAtTargetTile) || !unit.canPass(targetTile.x, targetTile.y)) return;
|
if((tile == targetTile && stopAtTargetTile) || !unit.canPass(targetTile.x, targetTile.y)) return;
|
||||||
|
|
||||||
|
|||||||
@@ -757,6 +757,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
public @Multiline String text = "frog";
|
public @Multiline String text = "frog";
|
||||||
public float fontSize = 1f, textHeight = 7f;
|
public float fontSize = 1f, textHeight = 7f;
|
||||||
public @LabelFlag byte flags = WorldLabel.flagBackground | WorldLabel.flagOutline;
|
public @LabelFlag byte flags = WorldLabel.flagBackground | WorldLabel.flagOutline;
|
||||||
|
public @Alignment int textAlign = Align.center;
|
||||||
|
public @Alignment(ver = false) int lineAlign = Align.center;
|
||||||
|
|
||||||
public float radius = 6f, rotation = 0f;
|
public float radius = 6f, rotation = 0f;
|
||||||
public int sides = 4;
|
public int sides = 4;
|
||||||
@@ -791,6 +793,15 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
this.textHeight = textHeight;
|
this.textHeight = textHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ShapeTextMarker(String text, float x, float y, float radius, float rotation, float textHeight, int textAlign){
|
||||||
|
this.text = text;
|
||||||
|
this.pos.set(x, y);
|
||||||
|
this.radius = radius;
|
||||||
|
this.rotation = rotation;
|
||||||
|
this.textHeight = textHeight;
|
||||||
|
this.textAlign = textAlign;
|
||||||
|
}
|
||||||
|
|
||||||
public ShapeTextMarker(){}
|
public ShapeTextMarker(){}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -812,7 +823,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
// font size cannot be 0
|
// font size cannot be 0
|
||||||
if(Mathf.equal(fontSize, 0f)) return;
|
if(Mathf.equal(fontSize, 0f)) return;
|
||||||
|
|
||||||
WorldLabel.drawAt(fetchedText, pos.x, pos.y + radius * scaleFactor + textHeight * scaleFactor, drawLayer, flags, fontSize * scaleFactor);
|
WorldLabel.drawAt(fetchedText, pos.x, pos.y + radius * scaleFactor + textHeight * scaleFactor, drawLayer, flags, fontSize * scaleFactor, textAlign, lineAlign);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -823,6 +834,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
switch(type){
|
switch(type){
|
||||||
case fontSize -> fontSize = (float)p1;
|
case fontSize -> fontSize = (float)p1;
|
||||||
case textHeight -> textHeight = (float)p1;
|
case textHeight -> textHeight = (float)p1;
|
||||||
|
case textAlign -> textAlign = (int)p1;
|
||||||
|
case lineAlign -> lineAlign = (int)p1;
|
||||||
case outline -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagOutline, !Mathf.equal((float)p1, 0f));
|
case outline -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagOutline, !Mathf.equal((float)p1, 0f));
|
||||||
case labelFlags -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagBackground, !Mathf.equal((float)p1, 0f));
|
case labelFlags -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagBackground, !Mathf.equal((float)p1, 0f));
|
||||||
case radius -> radius = (float)p1;
|
case radius -> radius = (float)p1;
|
||||||
@@ -980,6 +993,9 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
public @Multiline String text = "uwu";
|
public @Multiline String text = "uwu";
|
||||||
public float fontSize = 1f;
|
public float fontSize = 1f;
|
||||||
public @LabelFlag byte flags = WorldLabel.flagBackground | WorldLabel.flagOutline;
|
public @LabelFlag byte flags = WorldLabel.flagBackground | WorldLabel.flagOutline;
|
||||||
|
public @Alignment int textAlign = Align.center;
|
||||||
|
public @Alignment(ver = false) int lineAlign = Align.center;
|
||||||
|
|
||||||
// Cached localized text.
|
// Cached localized text.
|
||||||
private transient String fetchedText;
|
private transient String fetchedText;
|
||||||
|
|
||||||
@@ -1006,7 +1022,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
fetchedText = fetchText(text);
|
fetchedText = fetchText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize * scaleFactor);
|
WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize * scaleFactor, textAlign, lineAlign);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1016,6 +1032,8 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
if(!Double.isNaN(p1)){
|
if(!Double.isNaN(p1)){
|
||||||
switch(type){
|
switch(type){
|
||||||
case fontSize -> fontSize = (float)p1;
|
case fontSize -> fontSize = (float)p1;
|
||||||
|
case textAlign -> textAlign = (int)p1;
|
||||||
|
case lineAlign -> lineAlign = (int)p1;
|
||||||
case outline -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagOutline, !Mathf.equal((float)p1, 0f));
|
case outline -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagOutline, !Mathf.equal((float)p1, 0f));
|
||||||
case labelFlags -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagBackground, !Mathf.equal((float)p1, 0f));
|
case labelFlags -> flags = (byte)Pack.bitmask(flags, WorldLabel.flagBackground, !Mathf.equal((float)p1, 0f));
|
||||||
}
|
}
|
||||||
@@ -1317,6 +1335,14 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
@Retention(RUNTIME)
|
@Retention(RUNTIME)
|
||||||
public @interface LabelFlag{}
|
public @interface LabelFlag{}
|
||||||
|
|
||||||
|
/** For {@code int}; treats it as an alignment from {@link Align} */
|
||||||
|
@Target(FIELD)
|
||||||
|
@Retention(RUNTIME)
|
||||||
|
public @interface Alignment{
|
||||||
|
boolean hor() default true;
|
||||||
|
boolean ver() default true;
|
||||||
|
}
|
||||||
|
|
||||||
/** For {@link UnlockableContent}; filters all un-researchable content. */
|
/** For {@link UnlockableContent}; filters all un-researchable content. */
|
||||||
@Target(FIELD)
|
@Target(FIELD)
|
||||||
@Retention(RUNTIME)
|
@Retention(RUNTIME)
|
||||||
@@ -1341,4 +1367,5 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
@Target(FIELD)
|
@Target(FIELD)
|
||||||
@Retention(RUNTIME)
|
@Retention(RUNTIME)
|
||||||
public @interface TilePos{}
|
public @interface TilePos{}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
package mindustry.graphics;
|
||||||
|
|
||||||
|
import arc.*;
|
||||||
|
import arc.graphics.*;
|
||||||
|
import arc.graphics.g2d.*;
|
||||||
|
import arc.math.*;
|
||||||
|
import arc.math.geom.*;
|
||||||
|
import arc.util.*;
|
||||||
|
import mindustry.core.*;
|
||||||
|
import mindustry.gen.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
|
import static arc.Core.*;
|
||||||
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
|
public class DebugCollisionRenderer{
|
||||||
|
static final float[] edges = {
|
||||||
|
1, -1,
|
||||||
|
1, 1,
|
||||||
|
-1, 1,
|
||||||
|
-1, -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static void draw(){
|
||||||
|
Rect rect = camera.bounds(new Rect());
|
||||||
|
Draw.draw(Layer.overlayUI, () -> {
|
||||||
|
//hitboxes
|
||||||
|
Draw.color(Color.green, 0.3f);
|
||||||
|
Groups.draw.each(d -> {
|
||||||
|
if(d instanceof Hitboxc h && rect.overlaps(Tmp.r1.setCentered(d.x(), d.y(), d.clipSize()))){
|
||||||
|
Fill.square(d.x(), d.y(), h.hitSize()/2f);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//tile hitboxes for units
|
||||||
|
Lines.stroke(0.4f, Color.magenta);
|
||||||
|
|
||||||
|
int rx = Mathf.clamp((int)(Core.camera.width / tilesize / 2) + 1, 0, world.width()/2);
|
||||||
|
int ry = Mathf.clamp((int)(Core.camera.height / tilesize / 2) + 1, 0, world.height()/2);
|
||||||
|
|
||||||
|
for(int x = -rx; x <= rx; x++){
|
||||||
|
for(int y = -ry; y <= ry; y++){
|
||||||
|
int wx = World.toTile(Core.camera.position.x) + x;
|
||||||
|
int wy = World.toTile(Core.camera.position.y) + y;
|
||||||
|
Tile tile = world.tile(wx, wy);
|
||||||
|
if(tile != null && tile.solid()){
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
Tile other = tile.nearby(i);
|
||||||
|
if(other == null || !other.solid()){
|
||||||
|
Lines.line(
|
||||||
|
wx * tilesize + edges[i*2] * tilesize/2f,
|
||||||
|
wy * tilesize + edges[i*2+1] * tilesize/2f,
|
||||||
|
wx * tilesize + edges[((i + 1) % 4)*2] * tilesize/2f,
|
||||||
|
wy * tilesize + edges[((i + 1) % 4)*2+1] * tilesize/2f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(debugDrawAvoidance && tile != null){
|
||||||
|
int[] avoid = avoidance.getAvoidance();
|
||||||
|
if(avoid != null && avoid[tile.array()] != 0){
|
||||||
|
Draw.color(0f, 1f, 1f, 0.25f);
|
||||||
|
Fill.square(tile.worldx(), tile.worldy(), 4f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Groups.draw.each(d -> {
|
||||||
|
if(d instanceof Unit u && rect.overlaps(Tmp.r1.setCentered(u.x, u.y, d.clipSize())) && !u.isFlying()){
|
||||||
|
u.hitboxTile(Tmp.r1);
|
||||||
|
|
||||||
|
Lines.rect(Tmp.r1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//physics hitboxes
|
||||||
|
Lines.stroke(0.5f);
|
||||||
|
Draw.color(Color.red, 0.5f);
|
||||||
|
Groups.draw.each(d -> {
|
||||||
|
if(d instanceof Unit u && rect.overlaps(Tmp.r1.setCentered(u.x, u.y, u.clipSize()))){
|
||||||
|
Lines.circle(u.x, u.y, u.hitSize * unitCollisionRadiusScale);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Draw.reset();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Draw.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,7 +35,6 @@ public class Binding{
|
|||||||
schematicFlipY = KeyBind.add("schematic_flip_y", KeyCode.x),
|
schematicFlipY = KeyBind.add("schematic_flip_y", KeyCode.x),
|
||||||
schematicMenu = KeyBind.add("schematic_menu", KeyCode.t),
|
schematicMenu = KeyBind.add("schematic_menu", KeyCode.t),
|
||||||
|
|
||||||
|
|
||||||
commandMode = KeyBind.add("command_mode", KeyCode.shiftLeft, "command"),
|
commandMode = KeyBind.add("command_mode", KeyCode.shiftLeft, "command"),
|
||||||
commandQueue = KeyBind.add("command_queue", KeyCode.mouseMiddle),
|
commandQueue = KeyBind.add("command_queue", KeyCode.mouseMiddle),
|
||||||
createControlGroup = KeyBind.add("create_control_group", KeyCode.controlLeft),
|
createControlGroup = KeyBind.add("create_control_group", KeyCode.controlLeft),
|
||||||
@@ -103,7 +102,8 @@ public class Binding{
|
|||||||
chatHistoryNext = KeyBind.add("chat_history_next", KeyCode.down),
|
chatHistoryNext = KeyBind.add("chat_history_next", KeyCode.down),
|
||||||
chatScroll = KeyBind.add("chat_scroll", new Axis(KeyCode.scroll)),
|
chatScroll = KeyBind.add("chat_scroll", new Axis(KeyCode.scroll)),
|
||||||
chatMode = KeyBind.add("chat_mode", KeyCode.tab),
|
chatMode = KeyBind.add("chat_mode", KeyCode.tab),
|
||||||
console = KeyBind.add("console", KeyCode.f8)
|
console = KeyBind.add("console", KeyCode.f8),
|
||||||
|
debugHitboxes = KeyBind.add("debug_hitboxes", KeyCode.unset)
|
||||||
;
|
;
|
||||||
|
|
||||||
//dummy static class initializer
|
//dummy static class initializer
|
||||||
|
|||||||
@@ -234,6 +234,10 @@ public class DesktopInput extends InputHandler{
|
|||||||
boolean detached = settings.getBool("detach-camera", false);
|
boolean detached = settings.getBool("detach-camera", false);
|
||||||
|
|
||||||
if(!scene.hasField() && !scene.hasDialog()){
|
if(!scene.hasField() && !scene.hasDialog()){
|
||||||
|
if(input.keyTap(Binding.debugHitboxes)){
|
||||||
|
drawDebugHitboxes = !drawDebugHitboxes;
|
||||||
|
}
|
||||||
|
|
||||||
if(input.keyTap(Binding.detachCamera)){
|
if(input.keyTap(Binding.detachCamera)){
|
||||||
settings.put("detach-camera", detached = !detached);
|
settings.put("detach-camera", detached = !detached);
|
||||||
if(!detached){
|
if(!detached){
|
||||||
|
|||||||
@@ -372,15 +372,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
//make sure its current stance is valid with its current command
|
//make sure its current stance is valid with its current command
|
||||||
stancesOut.clear();
|
stancesOut.clear();
|
||||||
unit.type.getUnitStances(unit, stancesOut);
|
unit.type.getUnitStances(unit, stancesOut);
|
||||||
if(stancesOut.size > 0 && !stancesOut.contains(ai.stance)){
|
for(var stance : content.unitStances()){
|
||||||
ai.stance = stancesOut.first();
|
//disable stances that the unit does not support anymore (TODO: this is slow!)
|
||||||
|
if(ai.hasStance(stance) && !stancesOut.contains(stance)){
|
||||||
|
ai.disableStance(stance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(called = Loc.server, targets = Loc.both, forward = true)
|
@Remote(called = Loc.server, targets = Loc.both, forward = true)
|
||||||
public static void setUnitStance(Player player, int[] unitIds, UnitStance stance){
|
public static void setUnitStance(Player player, int[] unitIds, UnitStance stance, boolean enable){
|
||||||
if(player == null || unitIds == null || stance == null) return;
|
if(player == null || unitIds == null || stance == null) return;
|
||||||
|
|
||||||
if(net.server() && !netServer.admins.allowAction(player, ActionType.commandUnits, event -> {
|
if(net.server() && !netServer.admins.allowAction(player, ActionType.commandUnits, event -> {
|
||||||
@@ -395,7 +398,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
if(stance == UnitStance.stop){ //not a real stance, just cancels orders
|
if(stance == UnitStance.stop){ //not a real stance, just cancels orders
|
||||||
ai.clearCommands();
|
ai.clearCommands();
|
||||||
}else if(unit.type.allowStance(unit, stance)){
|
}else if(unit.type.allowStance(unit, stance)){
|
||||||
ai.stance = stance;
|
//if toggle is not allowed, the stance will always be set to true when pressed
|
||||||
|
ai.setStance(stance, !stance.toggle || enable);
|
||||||
}
|
}
|
||||||
unit.lastCommanded = player.coloredName();
|
unit.lastCommanded = player.coloredName();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -362,7 +362,7 @@ public class TypeIO{
|
|||||||
public static UnitStance readStance(Reads read){
|
public static UnitStance readStance(Reads read){
|
||||||
int val = read.ub();
|
int val = read.ub();
|
||||||
//never returns null
|
//never returns null
|
||||||
return val == 255 || val >= content.unitStances().size ? UnitStance.shoot : content.unitStance(val);
|
return val == 255 || val >= content.unitStances().size ? UnitStance.stop : content.unitStance(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeEntity(Writes write, Entityc entity){
|
public static void writeEntity(Writes write, Entityc entity){
|
||||||
@@ -523,7 +523,7 @@ public class TypeIO{
|
|||||||
write.b(3);
|
write.b(3);
|
||||||
write.i(logic.controller.pos());
|
write.i(logic.controller.pos());
|
||||||
}else if(control instanceof CommandAI ai){
|
}else if(control instanceof CommandAI ai){
|
||||||
write.b(8);
|
write.b(9);
|
||||||
write.bool(ai.attackTarget != null);
|
write.bool(ai.attackTarget != null);
|
||||||
write.bool(ai.targetPos != null);
|
write.bool(ai.targetPos != null);
|
||||||
|
|
||||||
@@ -559,7 +559,16 @@ public class TypeIO{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writeStance(write, ai.stance);
|
int count = content.unitStances().count(ai::hasStance);
|
||||||
|
|
||||||
|
write.b(count);
|
||||||
|
|
||||||
|
for(var stance : content.unitStances()){
|
||||||
|
if(ai.hasStance(stance)){
|
||||||
|
writeStance(write, stance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}else if(control instanceof AssemblerAI){ //hate
|
}else if(control instanceof AssemblerAI){ //hate
|
||||||
write.b(5);
|
write.b(5);
|
||||||
}else{
|
}else{
|
||||||
@@ -591,8 +600,8 @@ public class TypeIO{
|
|||||||
out.controller = world.build(pos);
|
out.controller = world.build(pos);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
//type 4 is the old CommandAI with no commandIndex, type 6 is the new one with the index as a single byte, type 7 is the one with the command queue, 8 adds a stance
|
//type 4 is the old CommandAI with no commandIndex, type 6 is the new one with the index as a single byte, type 7 is the one with the command queue, 8 adds a stance, 9 adds multiple stances
|
||||||
}else if(type == 4 || type == 6 || type == 7 || type == 8){
|
}else if(type == 4 || type == 6 || type == 7 || type == 8 || type == 9){
|
||||||
CommandAI ai = prev instanceof CommandAI pai ? pai : new CommandAI();
|
CommandAI ai = prev instanceof CommandAI pai ? pai : new CommandAI();
|
||||||
|
|
||||||
boolean hasAttack = read.bool(), hasPos = read.bool();
|
boolean hasAttack = read.bool(), hasPos = read.bool();
|
||||||
@@ -616,14 +625,14 @@ public class TypeIO{
|
|||||||
ai.attackTarget = null;
|
ai.attackTarget = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type == 6 || type == 7 || type == 8){
|
if(type == 6 || type == 7 || type == 8 || type == 9){
|
||||||
byte id = read.b();
|
byte id = read.b();
|
||||||
ai.command = id < 0 ? null : content.unitCommand(id);
|
ai.command = id < 0 ? null : content.unitCommand(id);
|
||||||
if(ai.command == null) ai.command = UnitCommand.moveCommand;
|
if(ai.command == null) ai.command = UnitCommand.moveCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
//command queue only in type 7/8
|
//command queue only in type 7/8
|
||||||
if(type == 7 || type == 8){
|
if(type == 7 || type == 8 || type == 9){
|
||||||
ai.commandQueue.clear();
|
ai.commandQueue.clear();
|
||||||
int length = read.ub();
|
int length = read.ub();
|
||||||
for(int i = 0; i < length; i++){
|
for(int i = 0; i < length; i++){
|
||||||
@@ -646,7 +655,12 @@ public class TypeIO{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(type == 8){
|
if(type == 8){
|
||||||
ai.stance = readStance(read);
|
ai.setStance(readStance(read));
|
||||||
|
}else if(type == 9){
|
||||||
|
int stances = read.ub();
|
||||||
|
for(int i = 0; i < stances; i++){
|
||||||
|
ai.setStance(readStance(read));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ai;
|
return ai;
|
||||||
|
|||||||
@@ -28,6 +28,17 @@ public enum ConditionOp{
|
|||||||
this.objFunction = objFunction;
|
this.objFunction = objFunction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean test(LVar va, LVar vb){
|
||||||
|
if(this == ConditionOp.strictEqual){
|
||||||
|
return va.isobj == vb.isobj && ((va.isobj && va.objval == vb.objval) || (!va.isobj && va.numval == vb.numval));
|
||||||
|
}
|
||||||
|
if(objFunction != null && va.isobj && vb.isobj){
|
||||||
|
//use object function if both are objects
|
||||||
|
return objFunction.get(va.obj(), vb.obj());
|
||||||
|
}
|
||||||
|
return function.get(va.num(), vb.num());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(){
|
public String toString(){
|
||||||
return symbol;
|
return symbol;
|
||||||
|
|||||||
@@ -147,6 +147,8 @@ public class GlobalVars{
|
|||||||
put("@" + sensor.name(), sensor);
|
put("@" + sensor.name(), sensor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LStatement.nameToAlign.each((name, align) -> put("@" + name, align));
|
||||||
|
|
||||||
logicIdToContent = new UnlockableContent[ContentType.all.length][];
|
logicIdToContent = new UnlockableContent[ContentType.all.length][];
|
||||||
contentIdToLogicId = new int[ContentType.all.length][];
|
contentIdToLogicId = new int[ContentType.all.length][];
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public enum LAccess{
|
|||||||
cameraHeight,
|
cameraHeight,
|
||||||
displayWidth,
|
displayWidth,
|
||||||
displayHeight,
|
displayHeight,
|
||||||
bufferUsage,
|
bufferSize,
|
||||||
operations,
|
operations,
|
||||||
size,
|
size,
|
||||||
solid,
|
solid,
|
||||||
|
|||||||
@@ -25,10 +25,8 @@ import mindustry.ui.*;
|
|||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.environment.*;
|
import mindustry.world.blocks.environment.*;
|
||||||
import mindustry.world.blocks.logic.*;
|
import mindustry.world.blocks.logic.*;
|
||||||
import mindustry.world.blocks.logic.CanvasBlock.*;
|
|
||||||
import mindustry.world.blocks.logic.LogicBlock.*;
|
import mindustry.world.blocks.logic.LogicBlock.*;
|
||||||
import mindustry.world.blocks.logic.LogicDisplay.*;
|
import mindustry.world.blocks.logic.LogicDisplay.*;
|
||||||
import mindustry.world.blocks.logic.MemoryBlock.*;
|
|
||||||
import mindustry.world.blocks.logic.MessageBlock.*;
|
import mindustry.world.blocks.logic.MessageBlock.*;
|
||||||
import mindustry.world.blocks.payloads.*;
|
import mindustry.world.blocks.payloads.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
@@ -516,14 +514,14 @@ public class LExecutor{
|
|||||||
@Override
|
@Override
|
||||||
public void run(LExecutor exec){
|
public void run(LExecutor exec){
|
||||||
Object obj = target.obj();
|
Object obj = target.obj();
|
||||||
if(obj instanceof Building b && (exec.privileged || (b.team == exec.team && exec.linkIds.contains(b.id)))){
|
if(obj instanceof Building b && (exec.privileged || (exec.build != null && exec.build.validLink(b)))){
|
||||||
|
|
||||||
if(type == LAccess.enabled && !p1.bool()){
|
if(type == LAccess.enabled){
|
||||||
|
if(p1.bool()){
|
||||||
|
b.noSleep();
|
||||||
|
}else{
|
||||||
b.lastDisabler = exec.build;
|
b.lastDisabler = exec.build;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type == LAccess.enabled && p1.bool()){
|
|
||||||
b.noSleep();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type.isObj && p1.isobj){
|
if(type.isObj && p1.isobj){
|
||||||
@@ -568,22 +566,15 @@ public class LExecutor{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(LExecutor exec){
|
public void run(LExecutor exec){
|
||||||
|
Object targetObj = target.obj();
|
||||||
|
if(targetObj instanceof LReadable read){
|
||||||
|
if(!read.readable(exec)) return;
|
||||||
|
read.read(position, output);
|
||||||
|
}else{
|
||||||
int address = position.numi();
|
int address = position.numi();
|
||||||
Building from = target.building();
|
if(targetObj instanceof CharSequence str){
|
||||||
|
|
||||||
if(from instanceof MemoryBuild mem && (exec.privileged || (from.team == exec.team && !mem.block.privileged))){
|
|
||||||
output.setnum(address < 0 || address >= mem.memory.length ? 0 : mem.memory[address]);
|
|
||||||
}else if(from instanceof LogicBuild logic && (exec.privileged || (from.team == exec.team && !from.block.privileged)) && position.isobj && position.objval instanceof String name){
|
|
||||||
LVar fromVar = logic.executor.optionalVar(name);
|
|
||||||
if(fromVar != null && !output.constant){
|
|
||||||
output.objval = fromVar.objval;
|
|
||||||
output.numval = fromVar.numval;
|
|
||||||
output.isobj = fromVar.isobj;
|
|
||||||
}
|
|
||||||
}else if(target.isobj && target.objval instanceof CharSequence str){
|
|
||||||
output.setnum(address < 0 || address >= str.length() ? Double.NaN : (int)str.charAt(address));
|
output.setnum(address < 0 || address >= str.length() ? Double.NaN : (int)str.charAt(address));
|
||||||
}else if(from instanceof CanvasBuild canvas && (exec.privileged || (from.team == exec.team))){
|
}
|
||||||
output.setnum(canvas.getPixel(address));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -602,20 +593,10 @@ public class LExecutor{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(LExecutor exec){
|
public void run(LExecutor exec){
|
||||||
int address = position.numi();
|
Object targetObj = target.obj();
|
||||||
Building from = target.building();
|
if(targetObj instanceof LWritable write){
|
||||||
|
if(!write.writable(exec)) return;
|
||||||
if(from instanceof MemoryBuild mem && (exec.privileged || (from.team == exec.team && !mem.block.privileged)) && address >= 0 && address < mem.memory.length){
|
write.write(position, value);
|
||||||
mem.memory[address] = value.num();
|
|
||||||
}else if(from instanceof LogicBuild logic && (exec.privileged || (from.team == exec.team && !from.block.privileged)) && position.isobj && position.objval instanceof String name){
|
|
||||||
LVar toVar = logic.executor.optionalVar(name);
|
|
||||||
if(toVar != null && !toVar.constant){
|
|
||||||
toVar.objval = value.objval;
|
|
||||||
toVar.numval = value.numval;
|
|
||||||
toVar.isobj = value.isobj;
|
|
||||||
}
|
|
||||||
}else if(from instanceof CanvasBuild canvas && (exec.privileged || (from.team == exec.team))){
|
|
||||||
canvas.setPixel(address, value.numi());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -658,7 +639,7 @@ public class LExecutor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
if(target instanceof CharSequence seq && sense == LAccess.size){
|
if(target instanceof CharSequence seq && (sense == LAccess.size || sense == LAccess.bufferSize)){
|
||||||
to.setnum(seq.length());
|
to.setnum(seq.length());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -785,15 +766,7 @@ public class LExecutor{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(LExecutor exec){
|
public void run(LExecutor exec){
|
||||||
if(!to.constant){
|
if(!to.constant) to.set(from);
|
||||||
if(from.isobj){
|
|
||||||
to.objval = from.objval;
|
|
||||||
to.isobj = true;
|
|
||||||
}else{
|
|
||||||
to.numval = LVar.invalid(from.numval) ? 0 : from.numval;
|
|
||||||
to.isobj = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -829,6 +802,28 @@ public class LExecutor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class SelectI implements LInstruction{
|
||||||
|
public ConditionOp op = ConditionOp.notEqual;
|
||||||
|
public LVar result, comp0, comp1, a, b;
|
||||||
|
|
||||||
|
public SelectI(ConditionOp op, LVar result, LVar comp0, LVar comp1, LVar a, LVar b){
|
||||||
|
this.op = op;
|
||||||
|
this.result = result;
|
||||||
|
this.comp0 = comp0;
|
||||||
|
this.comp1 = comp1;
|
||||||
|
this.a = a;
|
||||||
|
this.b = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SelectI(){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(LExecutor exec){
|
||||||
|
if(result.constant) return;
|
||||||
|
result.set(op.test(comp0, comp1) ? a : b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class EndI implements LInstruction{
|
public static class EndI implements LInstruction{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -883,7 +878,7 @@ public class LExecutor{
|
|||||||
int advance = (int)data.spaceXadvance, lineHeight = (int)data.lineHeight;
|
int advance = (int)data.spaceXadvance, lineHeight = (int)data.lineHeight;
|
||||||
|
|
||||||
int xOffset, yOffset;
|
int xOffset, yOffset;
|
||||||
int align = p1.id; //p1 is not a variable, it's a raw align value. what a massive hack
|
int align = p1.numi();
|
||||||
|
|
||||||
int maxWidth = 0, lines = 1, lineWidth = 0;
|
int maxWidth = 0, lines = 1, lineWidth = 0;
|
||||||
for(int i = 0; i < str.length(); i++){
|
for(int i = 0; i < str.length(); i++){
|
||||||
@@ -1134,26 +1129,11 @@ public class LExecutor{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(LExecutor exec){
|
public void run(LExecutor exec){
|
||||||
if(address != -1){
|
if(address != -1 && op.test(value, compare)){
|
||||||
LVar va = value;
|
|
||||||
LVar vb = compare;
|
|
||||||
boolean cmp;
|
|
||||||
|
|
||||||
if(op == ConditionOp.strictEqual){
|
|
||||||
cmp = va.isobj == vb.isobj && ((va.isobj && va.objval == vb.objval) || (!va.isobj && va.numval == vb.numval));
|
|
||||||
}else if(op.objFunction != null && va.isobj && vb.isobj){
|
|
||||||
//use object function if both are objects
|
|
||||||
cmp = op.objFunction.get(value.obj(), compare.obj());
|
|
||||||
}else{
|
|
||||||
cmp = op.function.get(value.num(), compare.num());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(cmp){
|
|
||||||
exec.counter.numval = address;
|
exec.counter.numval = address;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static class WaitI implements LInstruction{
|
public static class WaitI implements LInstruction{
|
||||||
public LVar value;
|
public LVar value;
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ public enum LMarkerControl{
|
|||||||
flushText("fetch"),
|
flushText("fetch"),
|
||||||
fontSize("size"),
|
fontSize("size"),
|
||||||
textHeight("height"),
|
textHeight("height"),
|
||||||
|
textAlign("align"),
|
||||||
|
lineAlign("align"),
|
||||||
labelFlags("background", "outline"),
|
labelFlags("background", "outline"),
|
||||||
texture("printFlush", "name"),
|
texture("printFlush", "name"),
|
||||||
textureSize("width", "height"),
|
textureSize("width", "height"),
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package mindustry.logic;
|
||||||
|
|
||||||
|
public interface LReadable{
|
||||||
|
boolean readable(LExecutor exec);
|
||||||
|
void read(LVar position, LVar output);
|
||||||
|
}
|
||||||
@@ -23,6 +23,25 @@ import static mindustry.logic.LCanvas.*;
|
|||||||
* A statement is an intermediate representation of an instruction, to be used mostly in UI.
|
* A statement is an intermediate representation of an instruction, to be used mostly in UI.
|
||||||
* Contains all relevant variable information. */
|
* Contains all relevant variable information. */
|
||||||
public abstract class LStatement{
|
public abstract class LStatement{
|
||||||
|
|
||||||
|
private static final String[] aligns = {"topLeft", "top", "topRight", "left", "center", "right", "bottomLeft", "bottom", "bottomRight"};
|
||||||
|
public static final ObjectMap<String, Integer> nameToAlign = ObjectMap.of(
|
||||||
|
"center", Align.center,
|
||||||
|
"top", Align.top,
|
||||||
|
"bottom", Align.bottom,
|
||||||
|
"left", Align.left,
|
||||||
|
"right", Align.right,
|
||||||
|
"topLeft", Align.topLeft,
|
||||||
|
"topRight", Align.topRight,
|
||||||
|
"bottomLeft", Align.bottomLeft,
|
||||||
|
"bottomRight", Align.bottomRight
|
||||||
|
);
|
||||||
|
public static final IntMap<String> alignToName = new IntMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
nameToAlign.each((k, v) -> alignToName.put(v, k));
|
||||||
|
}
|
||||||
|
|
||||||
public transient @Nullable StatementElem elem;
|
public transient @Nullable StatementElem elem;
|
||||||
|
|
||||||
public abstract void build(Table table);
|
public abstract void build(Table table);
|
||||||
@@ -175,7 +194,36 @@ public abstract class LStatement{
|
|||||||
showSelect(b, values, current, getter, 4, c -> {});
|
showSelect(b, values, current, getter, 4, c -> {});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void showSelectTable(Button b, Cons2<Table, Runnable> hideCons){
|
protected void fieldAlignSelect(Table t, Prov<String> get, Cons<String> set, boolean hor, boolean ver) {
|
||||||
|
t.button(b -> {
|
||||||
|
b.image(Icon.pencilSmall);
|
||||||
|
b.clicked(() -> {
|
||||||
|
var current = get.get();
|
||||||
|
showAlignSelect(b, current.startsWith("@") ? nameToAlign.get(current.substring(1), -1) : -1, align -> set.get("@" + alignToName.get(align)), hor, ver);
|
||||||
|
});
|
||||||
|
}, Styles.logict, () -> {}).size(40f).color(t.color).left().padLeft(-10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showAlignSelect(Button b, int current, Intc setter, boolean hor, boolean ver) {
|
||||||
|
showSelectTable(b, (t, hide) -> {
|
||||||
|
t.defaults().size(150f, 40f);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for(String align : aligns){
|
||||||
|
int val = nameToAlign.get(align);
|
||||||
|
if(!hor && !Align.isCenterHorizontal(val)) continue;
|
||||||
|
if(!ver && !Align.isCenterVertical(val)) continue;
|
||||||
|
t.button(align, Styles.logicTogglet, () -> {
|
||||||
|
setter.get(val);
|
||||||
|
hide.run();
|
||||||
|
}).checked(current == nameToAlign.get(align)).grow();
|
||||||
|
|
||||||
|
if (++i % 3 == 0) t.row();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static void showSelectTable(Button b, Cons2<Table, Runnable> hideCons){
|
||||||
Table t = new Table(Tex.paneSolid){
|
Table t = new Table(Tex.paneSolid){
|
||||||
@Override
|
@Override
|
||||||
public float getPrefHeight(){
|
public float getPrefHeight(){
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import arc.graphics.*;
|
|||||||
import arc.scene.style.*;
|
import arc.scene.style.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
@@ -123,19 +122,6 @@ public class LStatements{
|
|||||||
|
|
||||||
@RegisterStatement("draw")
|
@RegisterStatement("draw")
|
||||||
public static class DrawStatement extends LStatement{
|
public static class DrawStatement extends LStatement{
|
||||||
static final String[] aligns = {"center", "top", "bottom", "left", "right", "topLeft", "topRight", "bottomLeft", "bottomRight"};
|
|
||||||
//yes, boxing Integer is gross but this is easier to construct and Integers <128 don't allocate anyway
|
|
||||||
static final ObjectMap<String, Integer> nameToAlign = ObjectMap.of(
|
|
||||||
"center", Align.center,
|
|
||||||
"top", Align.top,
|
|
||||||
"bottom", Align.bottom,
|
|
||||||
"left", Align.left,
|
|
||||||
"right", Align.right,
|
|
||||||
"topLeft", Align.topLeft,
|
|
||||||
"topRight", Align.topRight,
|
|
||||||
"bottomLeft", Align.bottomLeft,
|
|
||||||
"bottomRight", Align.bottomRight
|
|
||||||
);
|
|
||||||
|
|
||||||
public GraphicsType type = GraphicsType.clear;
|
public GraphicsType type = GraphicsType.clear;
|
||||||
public String x = "0", y = "0", p1 = "0", p2 = "0", p3 = "0", p4 = "0";
|
public String x = "0", y = "0", p1 = "0", p2 = "0", p3 = "0", p4 = "0";
|
||||||
@@ -165,7 +151,7 @@ public class LStatements{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(type == GraphicsType.print){
|
if(type == GraphicsType.print){
|
||||||
p1 = "bottomLeft";
|
p1 = "@bottomLeft";
|
||||||
}
|
}
|
||||||
|
|
||||||
rebuild(table);
|
rebuild(table);
|
||||||
@@ -253,13 +239,11 @@ public class LStatements{
|
|||||||
row(s);
|
row(s);
|
||||||
|
|
||||||
s.add("align ");
|
s.add("align ");
|
||||||
|
fields(s, "align", p1, v -> p1 = v);
|
||||||
s.button(b -> {
|
fieldAlignSelect(s, () -> p1, v -> {
|
||||||
b.label(() -> nameToAlign.containsKey(p1) ? p1 : "bottomLeft");
|
p1 = v;
|
||||||
b.clicked(() -> showSelect(b, aligns, p1, t -> {
|
rebuild(table);
|
||||||
p1 = t;
|
}, true, true);
|
||||||
}, 2, cell -> cell.size(165, 50)));
|
|
||||||
}, Styles.logict, () -> {}).size(165, 40).color(s.color).left().padLeft(2);
|
|
||||||
}
|
}
|
||||||
case translate, scale -> {
|
case translate, scale -> {
|
||||||
fields(s, "x", x, v -> x = v);
|
fields(s, "x", x, v -> x = v);
|
||||||
@@ -278,12 +262,15 @@ public class LStatements{
|
|||||||
if(type == GraphicsType.color && p2.equals("0")){
|
if(type == GraphicsType.color && p2.equals("0")){
|
||||||
p2 = "255";
|
p2 = "255";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(type == GraphicsType.print && nameToAlign.get(p1) != null){
|
||||||
|
p1 = "@" + p1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LInstruction build(LAssembler builder){
|
public LInstruction build(LAssembler builder){
|
||||||
return new DrawI((byte)type.ordinal(), builder.var(x), builder.var(y),
|
return new DrawI((byte)type.ordinal(), builder.var(x), builder.var(y), builder.var(p1), builder.var(p2), builder.var(p3), builder.var(p4));
|
||||||
type == GraphicsType.print ? new LVar(p1, nameToAlign.get(p1, Align.bottomLeft), true) : builder.var(p1), builder.var(p2), builder.var(p3), builder.var(p4));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -793,6 +780,55 @@ public class LStatements{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RegisterStatement("select")
|
||||||
|
public static class SelectStatement extends LStatement{
|
||||||
|
public String result = "result";
|
||||||
|
public ConditionOp op = ConditionOp.notEqual;
|
||||||
|
public String comp0 = "x", comp1 = "false", a = "a", b = "b";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void build(Table table){
|
||||||
|
rebuild(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void rebuild(Table table){
|
||||||
|
table.clearChildren();
|
||||||
|
table.left();
|
||||||
|
|
||||||
|
table.table(t -> {
|
||||||
|
t.setColor(table.color);
|
||||||
|
|
||||||
|
field(t, result, str -> result = str);
|
||||||
|
t.add(" = if ");
|
||||||
|
|
||||||
|
JumpStatement.addOp(this, t, op, o -> {
|
||||||
|
op = o;
|
||||||
|
rebuild(table);
|
||||||
|
}, comp0, str -> comp0 = str, comp1, str -> comp1 = str);
|
||||||
|
}).left();
|
||||||
|
|
||||||
|
table.row();
|
||||||
|
table.table(t -> {
|
||||||
|
t.setColor(table.color);
|
||||||
|
|
||||||
|
t.add("then ");
|
||||||
|
field(t, a, str -> a = str);
|
||||||
|
t.add(" else ");
|
||||||
|
field(t, b, str -> b = str);
|
||||||
|
}).left();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LInstruction build(LAssembler builder){
|
||||||
|
return new SelectI(op, builder.var(result), builder.var(comp0), builder.var(comp1), builder.var(a), builder.var(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LCategory category(){
|
||||||
|
return LCategory.operation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@RegisterStatement("wait")
|
@RegisterStatement("wait")
|
||||||
public static class WaitStatement extends LStatement{
|
public static class WaitStatement extends LStatement{
|
||||||
public String value = "0.5";
|
public String value = "0.5";
|
||||||
@@ -984,17 +1020,22 @@ public class LStatements{
|
|||||||
table.clearChildren();
|
table.clearChildren();
|
||||||
table.setColor(last);
|
table.setColor(last);
|
||||||
|
|
||||||
if(op != ConditionOp.always) field(table, value, str -> value = str);
|
addOp(this, table, op, o -> {
|
||||||
|
|
||||||
table.button(b -> {
|
|
||||||
b.label(() -> op.symbol);
|
|
||||||
b.clicked(() -> showSelect(b, ConditionOp.all, op, o -> {
|
|
||||||
op = o;
|
op = o;
|
||||||
rebuild(table);
|
rebuild(table);
|
||||||
}));
|
}, value, str -> value = str, compare, str -> compare = str);
|
||||||
}, Styles.logict, () -> {}).size(op == ConditionOp.always ? 80f : 48f, 40f).pad(4f).color(table.color);
|
}
|
||||||
|
|
||||||
if(op != ConditionOp.always) field(table, compare, str -> compare = str);
|
public static void addOp(LStatement st, Table t, ConditionOp op, Cons<ConditionOp> getter, String comp0, Cons<String> set0, String comp1, Cons<String> set2){
|
||||||
|
if(op != ConditionOp.always) st.field(t, comp0, set0);
|
||||||
|
|
||||||
|
t.button(b -> {
|
||||||
|
b.add(op.symbol);
|
||||||
|
b.clicked(() -> st.showSelect(b, ConditionOp.all, op, getter));
|
||||||
|
}, Styles.logict, () -> {
|
||||||
|
}).size(op == ConditionOp.always ? 80f : 48f, 40f).pad(4f).color(t.color);
|
||||||
|
|
||||||
|
if(op != ConditionOp.always) st.field(t, comp1, set2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//elements need separate conversion logic
|
//elements need separate conversion logic
|
||||||
@@ -2345,6 +2386,11 @@ public class LStatements{
|
|||||||
}).width(240f).left();
|
}).width(240f).left();
|
||||||
}));
|
}));
|
||||||
}, Styles.logict, () -> {}).size(40f).padLeft(-11).color(table.color);
|
}, Styles.logict, () -> {}).size(40f).padLeft(-11).color(table.color);
|
||||||
|
}else if(type == LMarkerControl.textAlign || type == LMarkerControl.lineAlign){
|
||||||
|
fieldAlignSelect(t, () -> p1, v -> {
|
||||||
|
p1 = v;
|
||||||
|
rebuild(table);
|
||||||
|
}, true, type != LMarkerControl.lineAlign);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,12 @@ public class LVar{
|
|||||||
isobj = true;
|
isobj = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void set(LVar other){
|
||||||
|
isobj = other.isobj;
|
||||||
|
objval = other.objval;
|
||||||
|
numval = other.numval;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean invalid(double d){
|
public static boolean invalid(double d){
|
||||||
return Double.isNaN(d) || Double.isInfinite(d);
|
return Double.isNaN(d) || Double.isInfinite(d);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package mindustry.logic;
|
||||||
|
|
||||||
|
public interface LWritable{
|
||||||
|
boolean writable(LExecutor exec);
|
||||||
|
void write(LVar position, LVar value);
|
||||||
|
}
|
||||||
@@ -798,7 +798,7 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
public void reload(){
|
public void reload(){
|
||||||
newImports.each(this::updateDependencies);
|
newImports.each(this::updateDependencies);
|
||||||
newImports.remove(m -> m.missingDependencies.isEmpty() && m.softDependencies.isEmpty());
|
newImports.removeAll(m -> m.missingDependencies.isEmpty() && m.softDependencies.isEmpty());
|
||||||
|
|
||||||
if(newImports.any()){
|
if(newImports.any()){
|
||||||
checkDependencies(newImports, newImports.contains(m -> m.softDependencies.any()));
|
checkDependencies(newImports, newImports.contains(m -> m.softDependencies.any()));
|
||||||
|
|||||||
@@ -700,6 +700,7 @@ public class UnitType extends UnlockableContent implements Senseable{
|
|||||||
return (envEnabled & env) != 0 && (envDisabled & env) == 0 && (envRequired == 0 || (envRequired & env) == envRequired);
|
return (envEnabled & env) != 0 && (envDisabled & env) == 0 && (envRequired == 0 || (envRequired & env) == envRequired);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isBanned(){
|
public boolean isBanned(){
|
||||||
return state.rules.isBanned(this);
|
return state.rules.isBanned(this);
|
||||||
}
|
}
|
||||||
@@ -1038,7 +1039,7 @@ public class UnitType extends UnlockableContent implements Senseable{
|
|||||||
|
|
||||||
if(stances.size == 0){
|
if(stances.size == 0){
|
||||||
if(canAttack){
|
if(canAttack){
|
||||||
stances.addAll(UnitStance.stop, UnitStance.shoot, UnitStance.holdFire, UnitStance.pursueTarget, UnitStance.patrol);
|
stances.addAll(UnitStance.stop, UnitStance.holdFire, UnitStance.pursueTarget, UnitStance.patrol);
|
||||||
if(!flying){
|
if(!flying){
|
||||||
stances.add(UnitStance.ram);
|
stances.add(UnitStance.ram);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import mindustry.gen.*;
|
|||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.world.*;
|
|
||||||
|
|
||||||
import static arc.Core.*;
|
import static arc.Core.*;
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@@ -95,7 +94,7 @@ public class DatabaseDialog extends BaseDialog{
|
|||||||
|
|
||||||
if(++i % 10 == 0) t.row();
|
if(++i % 10 == 0) t.row();
|
||||||
}
|
}
|
||||||
}).row();;
|
}).row();
|
||||||
|
|
||||||
for(int j = 0; j < allContent.length; j++){
|
for(int j = 0; j < allContent.length; j++){
|
||||||
ContentType type = ContentType.all[j];
|
ContentType type = ContentType.all[j];
|
||||||
@@ -106,6 +105,11 @@ public class DatabaseDialog extends BaseDialog{
|
|||||||
|
|
||||||
if(array.size == 0) continue;
|
if(array.size == 0) continue;
|
||||||
|
|
||||||
|
//sorting only makes sense when in-game; otherwise, banned blocks can't exist
|
||||||
|
if(state.isGame()){
|
||||||
|
array.sort(Structs.comps(Structs.comparingBool(UnlockableContent::isBanned), Structs.comparingInt(u -> u.id)));
|
||||||
|
}
|
||||||
|
|
||||||
all.add("@content." + type.name() + ".name").growX().left().color(Pal.accent);
|
all.add("@content." + type.name() + ".name").growX().left().color(Pal.accent);
|
||||||
all.row();
|
all.row();
|
||||||
all.image().growX().pad(5).padLeft(0).padRight(0).height(3).color(Pal.accent);
|
all.image().growX().pad(5).padLeft(0).padRight(0).height(3).color(Pal.accent);
|
||||||
@@ -116,13 +120,11 @@ public class DatabaseDialog extends BaseDialog{
|
|||||||
int cols = (int)Mathf.clamp((Core.graphics.getWidth() - Scl.scl(30)) / Scl.scl(32 + 12), 1, 22);
|
int cols = (int)Mathf.clamp((Core.graphics.getWidth() - Scl.scl(30)) / Scl.scl(32 + 12), 1, 22);
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
for(int i = 0; i < array.size; i++){
|
for(var unlock : array){
|
||||||
UnlockableContent unlock = array.get(i);
|
|
||||||
|
|
||||||
Image image = unlocked(unlock) ? new Image(new TextureRegionDrawable(unlock.uiIcon), mobile ? Color.white : Color.lightGray).setScaling(Scaling.fit) : new Image(Icon.lock, Pal.gray);
|
Image image = unlocked(unlock) ? new Image(new TextureRegionDrawable(unlock.uiIcon), mobile ? Color.white : Color.lightGray).setScaling(Scaling.fit) : new Image(Icon.lock, Pal.gray);
|
||||||
|
|
||||||
//banned cross
|
//banned cross
|
||||||
if(state.isGame() && (unlock instanceof UnitType u && u.isBanned() || unlock instanceof Block b && state.rules.isBanned(b))){
|
if(state.isGame() && unlock.isBanned()){
|
||||||
list.stack(image, new Image(Icon.cancel){{
|
list.stack(image, new Image(Icon.cancel){{
|
||||||
setColor(Color.scarlet);
|
setColor(Color.scarlet);
|
||||||
touchable = Touchable.disabled;
|
touchable = Touchable.disabled;
|
||||||
|
|||||||
@@ -1274,7 +1274,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
|
|
||||||
if(sector.isAttacked()){
|
if(sector.isAttacked()){
|
||||||
addSurvivedInfo(sector, stable, false);
|
addSurvivedInfo(sector, stable, false);
|
||||||
}else if(sector.hasBase() && sector.planet.campaignRules.sectorInvasion && sector.near().contains(Sector::hasEnemyBase)){
|
}else if(sector.hasBase() && sector.planet.campaignRules.sectorInvasion && sector.near().contains(s -> s.hasEnemyBase() && (s.preset == null || !s.preset.requireUnlock))){
|
||||||
stable.add("@sectors.vulnerable");
|
stable.add("@sectors.vulnerable");
|
||||||
stable.row();
|
stable.row();
|
||||||
}else if(!sector.hasBase() && sector.hasEnemyBase()){
|
}else if(!sector.hasBase() && sector.hasEnemyBase()){
|
||||||
|
|||||||
@@ -474,6 +474,9 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
graphics.checkPref("minimap", !mobile);
|
graphics.checkPref("minimap", !mobile);
|
||||||
graphics.checkPref("smoothcamera", true);
|
graphics.checkPref("smoothcamera", true);
|
||||||
|
if(!mobile){
|
||||||
|
graphics.checkPref("detach-camera", false);
|
||||||
|
}
|
||||||
graphics.checkPref("position", false);
|
graphics.checkPref("position", false);
|
||||||
if(!mobile){
|
if(!mobile){
|
||||||
graphics.checkPref("mouseposition", false);
|
graphics.checkPref("mouseposition", false);
|
||||||
|
|||||||
@@ -581,7 +581,7 @@ public class PlacementFragment{
|
|||||||
for(var stance : stances){
|
for(var stance : stances){
|
||||||
|
|
||||||
coms.button(stance.getIcon(), Styles.clearNoneTogglei, () -> {
|
coms.button(stance.getIcon(), Styles.clearNoneTogglei, () -> {
|
||||||
Call.setUnitStance(player, units.mapInt(un -> un.id, un -> un.type.allowStance(un, stance)).toArray(), stance);
|
Call.setUnitStance(player, units.mapInt(un -> un.id, un -> un.type.allowStance(un, stance)).toArray(), stance, !activeStances.get(stance.id));
|
||||||
}).checked(i -> activeStances.get(stance.id)).size(50f).tooltip(stance.localized(), true);
|
}).checked(i -> activeStances.get(stance.id)).size(50f).tooltip(stance.localized(), true);
|
||||||
|
|
||||||
if(++scol % 6 == 0) coms.row();
|
if(++scol % 6 == 0) coms.row();
|
||||||
@@ -604,7 +604,7 @@ public class PlacementFragment{
|
|||||||
for(var unit : control.input.selectedUnits){
|
for(var unit : control.input.selectedUnits){
|
||||||
if(unit.controller() instanceof CommandAI cmd){
|
if(unit.controller() instanceof CommandAI cmd){
|
||||||
activeCommands.set(cmd.command.id);
|
activeCommands.set(cmd.command.id);
|
||||||
activeStances.set(cmd.stance.id);
|
activeStances.set(cmd.stances);
|
||||||
}
|
}
|
||||||
|
|
||||||
stancesOut.clear();
|
stancesOut.clear();
|
||||||
@@ -631,7 +631,7 @@ public class PlacementFragment{
|
|||||||
for(UnitStance stance : stances){
|
for(UnitStance stance : stances){
|
||||||
//first stance must always be the stop stance
|
//first stance must always be the stop stance
|
||||||
if(stance.keybind != null && Core.input.keyTap(stance.keybind)){
|
if(stance.keybind != null && Core.input.keyTap(stance.keybind)){
|
||||||
Call.setUnitStance(player, control.input.selectedUnits.mapInt(un -> un.id, un -> un.type.allowStance(un, stance)).toArray(), stance);
|
Call.setUnitStance(player, control.input.selectedUnits.mapInt(un -> un.id, un -> un.type.allowStance(un, stance)).toArray(), stance, !activeStances.get(stance.id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -923,11 +923,16 @@ public class Block extends UnlockableContent implements Senseable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVisible(){
|
public boolean isVisible(){
|
||||||
return !isHidden() && (state.rules.editor || (!state.rules.hideBannedBlocks || !state.rules.isBanned(this)));
|
return !isHidden() && (state.rules.editor || (!state.rules.hideBannedBlocks || !isBanned()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPlaceable(){
|
public boolean isPlaceable(){
|
||||||
return isVisible() && (!state.rules.isBanned(this) || state.rules.editor) && supportsEnv(state.rules.env);
|
return isVisible() && (!isBanned() || state.rules.editor) && supportsEnv(state.rules.env);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBanned(){
|
||||||
|
return state.rules.isBanned(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return whether this block supports a specific environment. */
|
/** @return whether this block supports a specific environment. */
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class LiquidTurret extends Turret{
|
|||||||
var fire = Fires.get(x + tx, y + ty);
|
var fire = Fires.get(x + tx, y + ty);
|
||||||
float dst = fire == null ? 0 : dst2(fire);
|
float dst = fire == null ? 0 : dst2(fire);
|
||||||
//do not extinguish fires on other team blocks
|
//do not extinguish fires on other team blocks
|
||||||
if(other != null && fire != null && Fires.has(other.x, other.y) && dst <= range * range && (result == null || dst < mindst) && (other.build == null || other.team() == team)){
|
if(other != null && fire != null && other.build != this && Fires.has(other.x, other.y) && dst <= range * range && (result == null || dst < mindst) && (other.build == null || other.team() == team)){
|
||||||
result = fire;
|
result = fire;
|
||||||
mindst = dst;
|
mindst = dst;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,8 +96,7 @@ public class DirectionalUnloader extends Block{
|
|||||||
front.handleItem(this, item);
|
front.handleItem(this, item);
|
||||||
back.items.remove(item, 1);
|
back.items.remove(item, 1);
|
||||||
back.itemTaken(item);
|
back.itemTaken(item);
|
||||||
offset ++;
|
offset = item.id + 1;
|
||||||
offset %= itemc;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -376,6 +376,11 @@ public class Floor extends Block{
|
|||||||
return (other.realBlendId(otherTile) > realBlendId(tile) || edges(tile.x, tile.y) == null);
|
return (other.realBlendId(otherTile) > realBlendId(tile) || edges(tile.x, tile.y) == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return whether being on this floor can damage a unit */
|
||||||
|
public boolean damages(){
|
||||||
|
return damageTaken > 0f || (status != null && status.damage > 0f);
|
||||||
|
}
|
||||||
|
|
||||||
public static class UpdateRenderState{
|
public static class UpdateRenderState{
|
||||||
public Tile tile;
|
public Tile tile;
|
||||||
public Floor floor;
|
public Floor floor;
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ public class CanvasBlock extends Block{
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CanvasBuild extends Building{
|
public class CanvasBuild extends Building implements LReadable, LWritable{
|
||||||
public @Nullable Texture texture;
|
public @Nullable Texture texture;
|
||||||
public byte[] data = new byte[Mathf.ceil(canvasSize * canvasSize * bitsPerPixel / 8f)];
|
public byte[] data = new byte[Mathf.ceil(canvasSize * canvasSize * bitsPerPixel / 8f)];
|
||||||
public int blending;
|
public int blending;
|
||||||
@@ -226,6 +226,25 @@ public class CanvasBlock extends Block{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean readable(LExecutor exec){
|
||||||
|
return exec.privileged || this.team == exec.team;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(LVar position, LVar output){
|
||||||
|
output.setnum(getPixel(position.numi()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean writable(LExecutor exec){
|
||||||
|
return exec.privileged || this.team == exec.team;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(LVar position, LVar value){
|
||||||
|
setPixel(position.numi(), value.numi());
|
||||||
|
}
|
||||||
|
|
||||||
boolean blends(Tile other){
|
boolean blends(Tile other){
|
||||||
return other != null && other.build != null && other.build.block == block && other.build.tileX() == other.x && other.build.tileY() == other.y;
|
return other != null && other.build != null && other.build.block == block && other.build.tileX() == other.x && other.build.tileY() == other.y;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,17 +82,11 @@ public class LogicBlock extends Block{
|
|||||||
int x = lbuild.tileX(), y = lbuild.tileY();
|
int x = lbuild.tileX(), y = lbuild.tileY();
|
||||||
|
|
||||||
LogicLink link = entity.links.find(l -> l.x == x && l.y == y);
|
LogicLink link = entity.links.find(l -> l.x == x && l.y == y);
|
||||||
String bname = getLinkName(lbuild.block);
|
|
||||||
|
|
||||||
if(link != null){
|
if(link != null){
|
||||||
link.active = !link.active;
|
entity.links.remove(link);
|
||||||
//find a name when the base name differs (new block type)
|
|
||||||
if(!link.name.startsWith(bname)){
|
|
||||||
link.name = "";
|
|
||||||
link.name = entity.findLinkName(lbuild.block);
|
|
||||||
}
|
|
||||||
//disable when unlinking
|
//disable when unlinking
|
||||||
if(!link.active && lbuild.block.autoResetEnabled && lbuild.lastDisabler == entity){
|
if(lbuild.block.autoResetEnabled && lbuild.lastDisabler == entity){
|
||||||
lbuild.enabled = true;
|
lbuild.enabled = true;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
@@ -148,12 +142,8 @@ public class LogicBlock extends Block{
|
|||||||
stream.writeInt(bytes.length);
|
stream.writeInt(bytes.length);
|
||||||
stream.write(bytes);
|
stream.write(bytes);
|
||||||
|
|
||||||
int actives = links.count(l -> l.active);
|
stream.writeInt(links.size);
|
||||||
|
|
||||||
stream.writeInt(actives);
|
|
||||||
for(LogicLink link : links){
|
for(LogicLink link : links){
|
||||||
if(!link.active) continue;
|
|
||||||
|
|
||||||
stream.writeUTF(link.name);
|
stream.writeUTF(link.name);
|
||||||
stream.writeShort(link.x);
|
stream.writeShort(link.x);
|
||||||
stream.writeShort(link.y);
|
stream.writeShort(link.y);
|
||||||
@@ -207,11 +197,7 @@ public class LogicBlock extends Block{
|
|||||||
String name = stream.readUTF();
|
String name = stream.readUTF();
|
||||||
short x = stream.readShort(), y = stream.readShort();
|
short x = stream.readShort(), y = stream.readShort();
|
||||||
|
|
||||||
Tmp.p2.set((int)(offset / (tilesize/2)), (int)(offset / (tilesize/2)));
|
transformer.get(Tmp.p1.set(x, y));
|
||||||
transformer.get(Tmp.p1.set(x * 2, y * 2).sub(Tmp.p2));
|
|
||||||
Tmp.p1.add(Tmp.p2);
|
|
||||||
Tmp.p1.x /= 2;
|
|
||||||
Tmp.p1.y /= 2;
|
|
||||||
links.add(new LogicLink(Tmp.p1.x, Tmp.p1.y, name, true));
|
links.add(new LogicLink(Tmp.p1.x, Tmp.p1.y, name, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,7 +210,7 @@ public class LogicBlock extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class LogicLink{
|
public static class LogicLink{
|
||||||
public boolean active = true, valid;
|
public boolean valid;
|
||||||
public int x, y;
|
public int x, y;
|
||||||
public String name;
|
public String name;
|
||||||
public Building lastBuild;
|
public Building lastBuild;
|
||||||
@@ -237,13 +223,11 @@ public class LogicBlock extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public LogicLink copy(){
|
public LogicLink copy(){
|
||||||
LogicLink out = new LogicLink(x, y, name, valid);
|
return new LogicLink(x, y, name, valid);
|
||||||
out.active = active;
|
|
||||||
return out;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LogicBuild extends Building implements Ranged{
|
public class LogicBuild extends Building implements Ranged, LReadable, LWritable{
|
||||||
/** logic "source code" as list of asm statements */
|
/** logic "source code" as list of asm statements */
|
||||||
public String code = "";
|
public String code = "";
|
||||||
public LExecutor executor = new LExecutor();
|
public LExecutor executor = new LExecutor();
|
||||||
@@ -357,18 +341,19 @@ public class LogicBlock extends Block{
|
|||||||
|
|
||||||
//store connections
|
//store connections
|
||||||
for(LogicLink link : links){
|
for(LogicLink link : links){
|
||||||
if(link.active && (link.valid = validLink(world.build(link.x, link.y)))){
|
link.valid = validLink(world.build(link.x, link.y));
|
||||||
|
if(link.valid){
|
||||||
asm.putConst(link.name, world.build(link.x, link.y));
|
asm.putConst(link.name, world.build(link.x, link.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//store link objects
|
//store link objects
|
||||||
executor.links = new Building[links.count(l -> l.valid && l.active)];
|
executor.links = new Building[links.count(l -> l.valid)];
|
||||||
executor.linkIds.clear();
|
executor.linkIds.clear();
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for(LogicLink link : links){
|
for(LogicLink link : links){
|
||||||
if(link.active && link.valid){
|
if(link.valid){
|
||||||
Building build = world.build(link.x, link.y);
|
Building build = world.build(link.x, link.y);
|
||||||
executor.links[index ++] = build;
|
executor.links[index ++] = build;
|
||||||
if(build != null) executor.linkIds.add(build.id);
|
if(build != null) executor.linkIds.add(build.id);
|
||||||
@@ -387,9 +372,7 @@ public class LogicBlock extends Block{
|
|||||||
if(!var.constant){
|
if(!var.constant){
|
||||||
LVar dest = asm.getVar(var.name);
|
LVar dest = asm.getVar(var.name);
|
||||||
if(dest != null && !dest.constant){
|
if(dest != null && !dest.constant){
|
||||||
dest.isobj = var.isobj;
|
dest.set(var);
|
||||||
dest.objval = var.objval;
|
|
||||||
dest.numval = var.numval;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -497,8 +480,6 @@ public class LogicBlock extends Block{
|
|||||||
for(int i = 0; i < links.size; i++){
|
for(int i = 0; i < links.size; i++){
|
||||||
LogicLink l = links.get(i);
|
LogicLink l = links.get(i);
|
||||||
|
|
||||||
if(!l.active) continue;
|
|
||||||
|
|
||||||
var cur = world.build(l.x, l.y);
|
var cur = world.build(l.x, l.y);
|
||||||
|
|
||||||
boolean valid = validLink(cur);
|
boolean valid = validLink(cur);
|
||||||
@@ -551,6 +532,38 @@ public class LogicBlock extends Block{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean readable(LExecutor exec){
|
||||||
|
return exec.privileged || (this.team == exec.team && !this.block.privileged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(LVar position, LVar output){
|
||||||
|
if(position.isobj && position.objval instanceof String varName){
|
||||||
|
LVar ret = executor.optionalVar(varName);
|
||||||
|
if(ret == null){
|
||||||
|
output.setnum(Double.NaN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(output.constant) return;
|
||||||
|
output.set(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean writable(LExecutor exec){
|
||||||
|
return exec.privileged || (this.team == exec.team && !this.block.privileged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(LVar position, LVar value){
|
||||||
|
if(position.isobj && position.objval instanceof String varName){
|
||||||
|
LVar at = executor.optionalVar(varName);
|
||||||
|
if(at == null || at.constant) return;
|
||||||
|
at.set(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] config(){
|
public byte[] config(){
|
||||||
return compress(code, relativeConnections());
|
return compress(code, relativeConnections());
|
||||||
@@ -577,7 +590,7 @@ public class LogicBlock extends Block{
|
|||||||
|
|
||||||
for(LogicLink l : links){
|
for(LogicLink l : links){
|
||||||
Building build = world.build(l.x, l.y);
|
Building build = world.build(l.x, l.y);
|
||||||
if(l.active && validLink(build)){
|
if(validLink(build)){
|
||||||
Drawf.square(build.x, build.y, build.block.size * tilesize / 2f + 1f, Pal.place);
|
Drawf.square(build.x, build.y, build.block.size * tilesize / 2f + 1f, Pal.place);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -585,7 +598,7 @@ public class LogicBlock extends Block{
|
|||||||
//draw top text on separate layer
|
//draw top text on separate layer
|
||||||
for(LogicLink l : links){
|
for(LogicLink l : links){
|
||||||
Building build = world.build(l.x, l.y);
|
Building build = world.build(l.x, l.y);
|
||||||
if(l.active && validLink(build)){
|
if(validLink(build)){
|
||||||
build.block.drawPlaceText(l.name, build.tileX(), build.tileY(), true);
|
build.block.drawPlaceText(l.name, build.tileX(), build.tileY(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public class LogicDisplay extends Block{
|
|||||||
public double sense(LAccess sensor){
|
public double sense(LAccess sensor){
|
||||||
return switch(sensor){
|
return switch(sensor){
|
||||||
case displayWidth, displayHeight -> displaySize;
|
case displayWidth, displayHeight -> displaySize;
|
||||||
case bufferUsage -> commands.size;
|
case bufferSize -> commands.size;
|
||||||
case operations -> operations;
|
case operations -> operations;
|
||||||
default -> super.sense(sensor);
|
default -> super.sense(sensor);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class MemoryBlock extends Block{
|
|||||||
return accessible();
|
return accessible();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MemoryBuild extends Building{
|
public class MemoryBuild extends Building implements LReadable, LWritable{
|
||||||
public double[] memory = new double[memoryCapacity];
|
public double[] memory = new double[memoryCapacity];
|
||||||
|
|
||||||
//massive byte size means picking up causes sync issues
|
//massive byte size means picking up causes sync issues
|
||||||
@@ -56,6 +56,29 @@ public class MemoryBlock extends Block{
|
|||||||
return accessible();
|
return accessible();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean readable(LExecutor exec){
|
||||||
|
return exec.privileged || (this.team == exec.team && !this.block.privileged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(LVar position, LVar output){
|
||||||
|
int address = position.numi();
|
||||||
|
//Return null when out of bounds. (instead of 0)
|
||||||
|
output.setnum(address < 0 || address >= memory.length ? Double.NaN : memory[address]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean writable(LExecutor exec){
|
||||||
|
return exec.privileged || (this.team == exec.team && !this.block.privileged);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(LVar position, LVar value){
|
||||||
|
int address = position.numi();
|
||||||
|
if(address < 0 || address >= memory.length) return;
|
||||||
|
memory[address] = value.num();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double sense(LAccess sensor){
|
public double sense(LAccess sensor){
|
||||||
return switch(sensor){
|
return switch(sensor){
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import arc.util.io.*;
|
|||||||
import arc.util.pooling.*;
|
import arc.util.pooling.*;
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
import mindustry.logic.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.ui.dialogs.*;
|
import mindustry.ui.dialogs.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -67,7 +68,7 @@ public class MessageBlock extends Block{
|
|||||||
return accessible();
|
return accessible();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MessageBuild extends Building{
|
public class MessageBuild extends Building implements LReadable{
|
||||||
public StringBuilder message = new StringBuilder();
|
public StringBuilder message = new StringBuilder();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -165,6 +166,25 @@ public class MessageBlock extends Block{
|
|||||||
return !accessible() ? SystemCursor.arrow : super.getCursor();
|
return !accessible() ? SystemCursor.arrow : super.getCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean readable(LExecutor exec){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void read(LVar position, LVar output){
|
||||||
|
int address = position.numi();
|
||||||
|
output.setnum(address < 0 || address >= message.length() ? Double.NaN : message.charAt(address));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double sense(LAccess sensor){
|
||||||
|
return switch(sensor){
|
||||||
|
case bufferSize -> message.length();
|
||||||
|
default -> super.sense(sensor);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void damage(float damage){
|
public void damage(float damage){
|
||||||
if(privileged) return;
|
if(privileged) return;
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ public class PayloadLoader extends PayloadBlock{
|
|||||||
return payload != null && (
|
return payload != null && (
|
||||||
exporting ||
|
exporting ||
|
||||||
(payload.block().hasLiquids && liquids.currentAmount() >= 0.1f && payload.build.liquids.currentAmount() >= payload.block().liquidCapacity - 0.001f) ||
|
(payload.block().hasLiquids && liquids.currentAmount() >= 0.1f && payload.build.liquids.currentAmount() >= payload.block().liquidCapacity - 0.001f) ||
|
||||||
(payload.block().hasItems && items.any() && payload.block().separateItemCapacity && content.items().contains(i -> payload.build.items.get(i) >= payload.block().itemCapacity)) ||
|
(payload.block().hasItems && items.any() && payload.block().separateItemCapacity && content.items().contains(i -> (payload.build.items.get(i) >= payload.block().itemCapacity) && items.has(i))) ||
|
||||||
(hasBattery() && payload.build.power.status >= 0.999999999f));
|
(hasBattery() && payload.build.power.status >= 0.999999999f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ public class Drill extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldConsume(){
|
public boolean shouldConsume(){
|
||||||
return items.total() < itemCapacity && enabled;
|
return items.total() < itemCapacity && enabled && dominantItem != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class Incinerator extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockStatus status(){
|
public BlockStatus status(){
|
||||||
return heat > 0.5f ? BlockStatus.active : BlockStatus.noInput;
|
return !enabled ? BlockStatus.logicDisable : heat > 0.5f ? BlockStatus.active : BlockStatus.noInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class ItemIncinerator extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockStatus status(){
|
public BlockStatus status(){
|
||||||
return efficiency > 0 ? BlockStatus.active : BlockStatus.noInput;
|
return !enabled ? BlockStatus.logicDisable : efficiency > 0 ? BlockStatus.active : BlockStatus.noInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -220,6 +220,14 @@ public class UnitFactory extends UnitBlock{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawSelect(){
|
||||||
|
super.drawSelect();
|
||||||
|
if(plans.size > 1 && currentPlan != -1 && currentPlan < plans.size){
|
||||||
|
drawItemSelection(plans.get(currentPlan).unit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Vec2 getCommandPosition(){
|
public Vec2 getCommandPosition(){
|
||||||
return commandPos;
|
return commandPos;
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
A Mindustry egy gyárépítős játék, Toronyvédő és RTS elemekkel. Készíts bonyolult ellátási láncokat, hogy lőszert juttass a lövegtornyokba, termelj az építkezéshez használható nyersanyagokat, és állíts elő egységeket. Irányítsd az egységeket, hogy elfoglald az ellenséges bázisokat, és bővítsd a termelésedet. Védd meg a támaszpontodat a hullámokban támadó ellenségektől.
|
A Mindustry egy gyárépítős játék toronyvédő és RTS elemekkel. Készíts bonyolult ellátási láncokat, hogy lőszert juttass a lövegtornyokba, termelj az építkezéshez használható nyersanyagokat és állíts elő egységeket. Irányítsd az egységeket, hogy elfoglald az ellenséges bázisokat, majd bővítsd a termelésedet. Védd meg a támaszpontodat a hullámokban támadó ellenségektől.
|
||||||
|
|
||||||
Játszd végig a hadjáratokat egyedül, vagy vállvetve a barátaiddal a platformokon átívelő többjátékos módban, vagy hívd ki őket csapat alapú PvP mérkőzésekre
|
Játszd végig a hadjáratokat egyedül vagy vállvetve a barátaiddal a platformokon átívelő többjátékos módban, vagy hívd ki őket csapat alapú PvP mérkőzésekre
|
||||||
|
|
||||||
[img]{STEAM_APP_IMAGE}/extras/factory.gif[/img]
|
[img]{STEAM_APP_IMAGE}/extras/factory.gif[/img]
|
||||||
|
|
||||||
[h2]Gyárépítés[/h2]
|
[h2]Gyárépítés[/h2]
|
||||||
|
|
||||||
[list]
|
[list]
|
||||||
[*] Hozz létre bonyolult szállítószalagokból álló ellátási láncokat, hogy lőszert juttass a lövegtornyokba és termelj nyersanyagokat az építkezésekhez
|
[*] Hozz létre bonyolult szállítószalagokból álló ellátási láncokat, hogy lőszert juttass a lövegtornyokba, majd termelj nyersanyagokat az építkezésekhez
|
||||||
[*] Használd a gyártóblokkokat a legkülönfélébb fejlett nyersanyagok létrehozásához
|
[*] Használd a gyártóblokkokat a legkülönfélébb fejlett nyersanyagok létrehozásához
|
||||||
[*] Oszd szét a folyadékokat és küzdj meg az állandó kihívásokkal, mint például a tűzkitörésekkel, vagy az ellenséges repülőgépek rajtaütéseivel
|
[*] Oszd szét a folyadékokat és küzdj meg az állandó kihívásokkal, mint például a tűzkitörésekkel vagy az ellenséges repülőgépek rajtaütéseivel
|
||||||
[*] Hozd ki a legtöbbet a termelésből, az épületek hűtőfolyadék-ellátásával
|
[*] Biztosítsd az épületek hűtőfolyadék-ellátását, hogy a legtöbbet hozd ki a termelésből
|
||||||
[*] Egységek széles skáláját állíthatod elő a bázisod automatikus irányításához, és az ellenséges bázisok megtámadásához
|
[*] Egységek széles skáláját állíthatod elő a bázisod automatikus irányításához és az ellenséges bázisok megtámadásához
|
||||||
[/list]
|
[/list]
|
||||||
|
|
||||||
[h2]Toronyvédés[/h2]
|
[h2]Toronyvédés[/h2]
|
||||||
@@ -20,7 +20,7 @@ Játszd végig a hadjáratokat egyedül, vagy vállvetve a barátaiddal a platfo
|
|||||||
[*] Védd meg építményeidet a hullámokban támadó ellenségektől
|
[*] Védd meg építményeidet a hullámokban támadó ellenségektől
|
||||||
[*] Stratégiailag helyezd el a lövegtornyokat, hogy elpusztítsd a támadóidat, mielőtt elérnék a támaszpontodat
|
[*] Stratégiailag helyezd el a lövegtornyokat, hogy elpusztítsd a támadóidat, mielőtt elérnék a támaszpontodat
|
||||||
[*] Lásd el a lövegtornyokat lőszerrel, hűtőfolyadékkal és árammal
|
[*] Lásd el a lövegtornyokat lőszerrel, hűtőfolyadékkal és árammal
|
||||||
[*] Erősítsd meg a védelmedet erőpajzs- és foltozó-kivetítőkkel vagy más támogató épületekkel
|
[*] Erősítsd meg a védelmedet erőpajzs- és foltozókivetítőkkel vagy más támogató épületekkel
|
||||||
[/list]
|
[/list]
|
||||||
|
|
||||||
[img]{STEAM_APP_IMAGE}/extras/rts3.png[/img]
|
[img]{STEAM_APP_IMAGE}/extras/rts3.png[/img]
|
||||||
@@ -30,7 +30,7 @@ Játszd végig a hadjáratokat egyedül, vagy vállvetve a barátaiddal a platfo
|
|||||||
[list]
|
[list]
|
||||||
[*] Állíts fel összeszerelősorokat a gépesített egységek hadainak előállításához
|
[*] Állíts fel összeszerelősorokat a gépesített egységek hadainak előállításához
|
||||||
[*] Használd az egységeidet a hatékonyan felszerelt ellenséges bázisok ellen
|
[*] Használd az egységeidet a hatékonyan felszerelt ellenséges bázisok ellen
|
||||||
[*] Foglalj el minél több területet, hogy még több támaszpontot helyezhess el, és további erőforrásokhoz férhess hozzá a terjeszkedéshez
|
[*] Foglalj el minél több területet, hogy még több támaszpontot helyezhess el és további erőforrásokhoz férhess hozzá a terjeszkedéshez
|
||||||
[/list]
|
[/list]
|
||||||
|
|
||||||
[h2]Hadjárat[/h2]
|
[h2]Hadjárat[/h2]
|
||||||
@@ -38,11 +38,11 @@ Játszd végig a hadjáratokat egyedül, vagy vállvetve a barátaiddal a platfo
|
|||||||
[list]
|
[list]
|
||||||
[*] Játszd végig a két különböző bolygó hadjáratait
|
[*] Játszd végig a két különböző bolygó hadjáratait
|
||||||
[*] Hódítsd meg a Serpulo és az Erekir bolygót, miközben 35 kézzel készített pályán és 250+ procedurálisan előállított szektoron keresztül haladsz
|
[*] Hódítsd meg a Serpulo és az Erekir bolygót, miközben 35 kézzel készített pályán és 250+ procedurálisan előállított szektoron keresztül haladsz
|
||||||
[*] Foglalj el területeket és építs gyárakat, hogy nyersanyagokat termelhess, miközben más szektorokban játszol
|
[*] Foglalj el területeket és építs gyárakat, hogy nyersanyagokat termelhess miközben más szektorokban játszol
|
||||||
[*] Védd meg az elfoglalt szektorokat az időszakos invázióktól
|
[*] Védd meg az elfoglalt szektorokat az időszakos invázióktól
|
||||||
[*] Koordináld az erőforrások elosztását a szektorok között az indítóállások felhasználásával
|
[*] Koordináld az erőforrások elosztását a szektorok között az indítóállások felhasználásával
|
||||||
[*] Fedezz fel új épületeket, gyárakat a fejlődés elősegítése érdekében
|
[*] Fedezz fel új épületeket, gyárakat a fejlődés elősegítése érdekében
|
||||||
[*] Hívd meg barátaidat, hogy együtt teljesítsétek a küldetéseket
|
[*] Hívd meg a barátaidat, hogy együtt teljesítsétek a küldetéseket
|
||||||
[*] Sajátítsd el a 250-nél is több technológiai épület használatát
|
[*] Sajátítsd el a 250-nél is több technológiai épület használatát
|
||||||
[*] Használd az 50-nél is több különböző típusú drónt, mechet, hajót, tankot
|
[*] Használd az 50-nél is több különböző típusú drónt, mechet, hajót, tankot
|
||||||
[*] Teljesítsd a 80-nál is több feladatot
|
[*] Teljesítsd a 80-nál is több feladatot
|
||||||
@@ -51,7 +51,7 @@ Játszd végig a hadjáratokat egyedül, vagy vállvetve a barátaiddal a platfo
|
|||||||
[h2]Közösség és modolás[/h2]
|
[h2]Közösség és modolás[/h2]
|
||||||
|
|
||||||
[list]
|
[list]
|
||||||
[*] Használd a Steam Műhelyt a közösség által készített pályák és vázlatok böngészéséhez.
|
[*] Használd a Steam Műhelyt a közösség által készített pályák és vázlatok böngészéséhez
|
||||||
[*] Csatlakozz nyilvános- és közösségi kiszolgálókhoz, hogy másokkal játszhass platformokon keresztül
|
[*] Csatlakozz nyilvános- és közösségi kiszolgálókhoz, hogy másokkal játszhass platformokon keresztül
|
||||||
[*] Játssz vállvetve, PvP-ben vagy homokozóban a barátaiddal
|
[*] Játssz vállvetve, PvP-ben vagy homokozóban a barátaiddal
|
||||||
[*] A közösségi kiszolgálók támogatják az egyéni pályák és játékmódok bővítményeit
|
[*] A közösségi kiszolgálók támogatják az egyéni pályák és játékmódok bővítményeit
|
||||||
|
|||||||
+1
-1
@@ -26,4 +26,4 @@ org.gradle.caching=true
|
|||||||
org.gradle.internal.http.socketTimeout=100000
|
org.gradle.internal.http.socketTimeout=100000
|
||||||
org.gradle.internal.http.connectionTimeout=100000
|
org.gradle.internal.http.connectionTimeout=100000
|
||||||
android.enableR8.fullMode=false
|
android.enableR8.fullMode=false
|
||||||
archash=9b55a5d628
|
archash=bd8d9520a4
|
||||||
|
|||||||
+9
-27
@@ -58,15 +58,15 @@
|
|||||||
{
|
{
|
||||||
"name": "XCore",
|
"name": "XCore",
|
||||||
"address": [
|
"address": [
|
||||||
"176.9.86.158:52001",
|
"62.30.47.117:7001",
|
||||||
"176.9.86.158:52002",
|
"62.30.47.117:7002",
|
||||||
"176.9.86.158:52003",
|
"62.30.47.117:7003",
|
||||||
"176.9.86.158:52004",
|
"62.30.47.117:7004",
|
||||||
"176.9.86.158:52005",
|
"62.30.47.117:7005",
|
||||||
"176.9.86.158:52006",
|
"62.30.47.117:7006",
|
||||||
"176.9.86.158:52007",
|
"62.30.47.117:7007",
|
||||||
"176.9.86.158:52008",
|
"62.30.47.117:7008",
|
||||||
"176.9.86.158:52009"
|
"62.30.47.117:7009"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -86,18 +86,6 @@
|
|||||||
"147.45.230.117:3011"
|
"147.45.230.117:3011"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Chaotic Neutral",
|
|
||||||
"address": [
|
|
||||||
"37.187.73.180:7011",
|
|
||||||
"37.187.73.180:7012",
|
|
||||||
"37.187.73.180:7013",
|
|
||||||
"37.187.73.180:7014",
|
|
||||||
"37.187.73.180:7015",
|
|
||||||
"37.187.73.180:7016",
|
|
||||||
"37.187.73.180:7017"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "io",
|
"name": "io",
|
||||||
"address": [
|
"address": [
|
||||||
@@ -128,12 +116,6 @@
|
|||||||
"name": "OmniCorp Classic",
|
"name": "OmniCorp Classic",
|
||||||
"address": ["omnidustry.ru:6567", "omnidustry.ru:6568", "omnidustry.ru:6569", "omnidustry.ru:6570", "omnidustry.ru:6571", "omnidustry.ru:6572", "omnidustry.ru:6573", "omnidustry.ru:6574", "omnidustry.ru:6575", "omnidustry.ru:6576"]
|
"address": ["omnidustry.ru:6567", "omnidustry.ru:6568", "omnidustry.ru:6569", "omnidustry.ru:6570", "omnidustry.ru:6571", "omnidustry.ru:6572", "omnidustry.ru:6573", "omnidustry.ru:6574", "omnidustry.ru:6575", "omnidustry.ru:6576"]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "The Devil",
|
|
||||||
"address": [
|
|
||||||
"new.xem8k5.top"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Eradication Mindustry",
|
"name": "Eradication Mindustry",
|
||||||
"address": [
|
"address": [
|
||||||
|
|||||||
Reference in New Issue
Block a user