Merge branch 'master' into do-you-hear-the-voices-too

This commit is contained in:
Mythril382
2024-05-28 00:40:31 +08:00
committed by GitHub
129 changed files with 3164 additions and 1263 deletions

View File

@@ -72,3 +72,5 @@ body:
required: true
- label: I have searched the closed and open issues to make sure that this problem has not already been reported.
required: true
- label: "I am not using Foo's Client, and have made sure the bug is not caused by mods I have installed."
required: true

View File

@@ -34,6 +34,7 @@ jobs:
if [ -n "$(git status --porcelain)" ]; then
git config --global user.name "Github Actions"
git config --global user.email "actions@github.com"
git add core/assets/bundles/*
git commit -m "Automatic bundle update"
git push
@@ -42,7 +43,7 @@ jobs:
if: ${{ github.repository == 'Anuken/Mindustry' }}
run: |
git config --global user.name "Github Actions"
git config --global user.email "cli@github.com"
git config --global user.email "actions@github.com"
cd ../
cp -r ./Mindustry ./MindustryJitpack
cd MindustryJitpack

View File

@@ -184,6 +184,7 @@ public class AndroidLauncher extends AndroidApplication{
}, new AndroidApplicationConfiguration(){{
useImmersiveMode = true;
hideStatusBar = true;
useGL30 = true;
}});
checkFiles(getIntent());

View File

@@ -57,6 +57,9 @@ public class AssetsProcess extends BaseProcessor{
ichtype.addField(FieldSpec.builder(ParameterizedTypeName.get(ObjectIntMap.class, String.class),
"codes", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("new ObjectIntMap<>()").build());
ichtype.addField(FieldSpec.builder(ParameterizedTypeName.get(IntMap.class, String.class),
"codeToName", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("new IntMap<>()").build());
ObjectSet<String> used = new ObjectSet<>();
for(Jval val : icons.get("glyphs").asArray()){
@@ -67,7 +70,9 @@ public class AssetsProcess extends BaseProcessor{
int code = val.getInt("code", 0);
iconcAll.append((char)code);
ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).addJavadoc(String.format("\\u%04x", code)).initializer("'" + ((char)code) + "'").build());
ichinit.addStatement("codes.put($S, $L)", name, code);
ichinit.addStatement("codeToName.put($L, $S)", code, name);
ictype.addField(TextureRegionDrawable.class, name + "Small", Modifier.PUBLIC, Modifier.STATIC);
icload.addStatement(name + "Small = mindustry.ui.Fonts.getGlyph(mindustry.ui.Fonts.def, (char)" + code + ")");

View File

@@ -102,7 +102,7 @@ public class StructProcess extends BaseProcessor{
//bools: single bit, needs special case to clear things
setter.beginControlFlow("if(value)");
setter.addStatement("return ($T)(($L & ~(1L << $LL)) | (1L << $LL))", structType, structParam, offset, offset);
setter.addStatement("return ($T)($L | (1L << $LL))", structType, structParam, offset);
setter.nextControlFlow("else");
setter.addStatement("return ($T)(($L & ~(1L << $LL)))", structType, structParam, offset);
setter.endControlFlow();

View File

@@ -445,6 +445,11 @@ editor.rules = Rules
editor.generation = Generation
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edit In-Game
editor.playtest = Playtest
editor.publish.workshop = Publish On Workshop
@@ -501,7 +506,9 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawn Unit
editor.removeunit = Remove Unit
@@ -590,6 +597,7 @@ filter.clear = Clear
filter.option.ignore = Ignore
filter.scatter = Scatter
filter.terrain = Terrain
filter.logic = Logic
filter.option.scale = Scale
filter.option.chance = Chance
@@ -613,6 +621,8 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
@@ -989,6 +999,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1090,7 +1101,7 @@ bullet.pierce = [stat]{0}x[lightgray] pierce
bullet.infinitepierce = [stat]pierce
bullet.healpercent = [stat]{0}%[lightgray] repair
bullet.healamount = [stat]{0}[lightgray] direct repair
bullet.multiplier = [stat]{0}x[lightgray] ammo multiplier
bullet.multiplier = [stat]{0}[lightgray] ammo/item
bullet.reload = [stat]{0}%[lightgray] fire rate
bullet.range = [stat]{0}[lightgray] tiles range
@@ -1115,6 +1126,7 @@ unit.items = items
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = General

View File

@@ -434,6 +434,11 @@ editor.rules = Правілы:
editor.generation = Генерацыя:
editor.objectives = Мэты
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Рэдагаваць ў гульні
editor.playtest = Тэставаць
editor.publish.workshop = Апублікаваць у майстэрні
@@ -489,6 +494,7 @@ editor.default = [lightgray]<Па змаўчанні>
details = Падрабязнасці...
edit = Рэдагаваць...
variables = Пераменныя
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Назва:
editor.spawn = Стварыць баявую адзінку
@@ -576,6 +582,7 @@ filter.clear = Ачысціць
filter.option.ignore = Ігнараваць
filter.scatter = Сеяцель
filter.terrain = Ландшафт
filter.logic = Logic
filter.option.scale = Маштаб фільтра
filter.option.chance = Шанец
filter.option.mag = Сіла прымянення
@@ -598,6 +605,8 @@ filter.option.floor2 = Другая паверхню
filter.option.threshold2 = Другасны гранічны парог
filter.option.radius = Радыус
filter.option.percentile = Процентль
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -962,6 +971,7 @@ stat.abilities = Здольнасйі
stat.canboost = Можа Узлятаць
stat.flying = Паветраны
stat.ammouse = Выкарыстанне Боезапасу
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Множнік Пашкоджанняў
stat.healthmultiplier = Множнік Здароўя
stat.speedmultiplier = Множнік Хуткасці
@@ -1087,6 +1097,7 @@ unit.items = прадметаў
unit.thousands = Тыс.
unit.millions = М.
unit.billions = Б.
unit.shots = shots
unit.pershot = /стрэл
category.purpose = Апісанне
category.general = Асноўныя

View File

@@ -439,6 +439,11 @@ editor.rules = Правила:
editor.generation = Генериране:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Редактирай в игра
editor.playtest = Playtest
editor.publish.workshop = Публикувай в Работилницата
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Стандартно>
details = Детайли...
edit = Редактирай...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Име:
editor.spawn = Създай Единица
@@ -582,6 +588,7 @@ filter.clear = Изчисти
filter.option.ignore = Игнорирай
filter.scatter = Разпръскване
filter.terrain = Терен
filter.logic = Logic
filter.option.scale = Мащаб
filter.option.chance = Вероятност
filter.option.mag = Магнитут
@@ -604,6 +611,8 @@ filter.option.floor2 = Втори под
filter.option.threshold2 = Втори праг
filter.option.radius = Радиус
filter.option.percentile = Перцентил
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -972,6 +981,7 @@ stat.abilities = Способности
stat.canboost = Може да ускорява
stat.flying = Летящ
stat.ammouse = Употребе на Боеприпаси
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Множител на Щети
stat.healthmultiplier = Множител на Точки живот
stat.speedmultiplier = Множител на Скорост
@@ -1098,6 +1108,7 @@ unit.items = предмети
unit.thousands = хил
unit.millions = млн
unit.billions = млр
unit.shots = shots
unit.pershot = /изстрел
category.purpose = Предназначение
category.general = Обща информация

View File

@@ -439,6 +439,11 @@ editor.rules = Regles
editor.generation = Generació
editor.objectives = Objectius
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edita des de la partida
editor.playtest = Prova el mapa
editor.publish.workshop = Publica al Workshop
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Per defecte>
details = Detalls
edit = Edita
variables = Variables
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nom:
editor.spawn = Genera una unitat
@@ -584,6 +590,7 @@ filter.clear = Neteja
filter.option.ignore = Ignora
filter.scatter = Dispersió
filter.terrain = Terreny
filter.logic = Logic
filter.option.scale = Escala
filter.option.chance = Probabilitat
@@ -607,6 +614,8 @@ filter.option.floor2 = Terra secundari
filter.option.threshold2 = Llindar secundari
filter.option.radius = Radi
filter.option.percentile = Percentil
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -976,6 +985,7 @@ stat.abilities = Habilitats
stat.canboost = Pot sobrevolar.
stat.flying = Està volant.
stat.ammouse = Ús de munició
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Multiplicador de dany
stat.healthmultiplier = Multiplicador de salut
stat.speedmultiplier = Multiplicador de velocitat
@@ -1101,6 +1111,7 @@ unit.items = elements
unit.thousands = k
unit.millions = M
unit.billions = kM
unit.shots = shots
unit.pershot = /dispar
category.purpose = Funció
category.general = General

View File

@@ -440,6 +440,11 @@ editor.rules = Pravidla:
editor.generation = Generace:
editor.objectives = Úkoly:
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Upravit ve hře
editor.playtest = Playtest
editor.publish.workshop = Publikovat do Workshopu na Steamu
@@ -496,6 +501,7 @@ editor.default = [lightgray]<Výchozí>[]
details = Podrobnosti...
edit = Upravit...
variables = Hodnoty
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Jméno:
editor.spawn = Zrodit jednotku
@@ -583,6 +589,7 @@ filter.clear = Vyčistit
filter.option.ignore = Ignorovat
filter.scatter = Rozptýlení
filter.terrain = Terén
filter.logic = Logic
filter.option.scale = Měřítko
filter.option.chance = Náhoda
@@ -606,6 +613,8 @@ filter.option.floor2 = Druhotný povrch
filter.option.threshold2 = Druhotný práh
filter.option.radius = Poloměr
filter.option.percentile = Percentil
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -974,6 +983,7 @@ stat.abilities = Schopnosti
stat.canboost = Umí posilovat
stat.flying = Létající
stat.ammouse = Spotřeba Munice
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Násobič Poškození
stat.healthmultiplier = Násobič Životů
stat.speedmultiplier = Násobič Rychlostí
@@ -1100,6 +1110,7 @@ unit.items = předměty
unit.thousands = tis
unit.millions = mio
unit.billions = mld
unit.shots = shots
unit.pershot = /střela
category.purpose = Účel
category.general = Všeobecné

View File

@@ -435,6 +435,11 @@ editor.rules = Regler:
editor.generation = Generering:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Ændr i spil
editor.playtest = Playtest
editor.publish.workshop = Publicer på Workshop
@@ -490,6 +495,7 @@ editor.default = [lightgray]<standard>
details = Detaljer...
edit = Rediger...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Navn:
editor.spawn = Påkald enhed
@@ -577,6 +583,7 @@ filter.clear = Ryd
filter.option.ignore = Ignorer
filter.scatter = Spreder
filter.terrain = Terræn
filter.logic = Logic
filter.option.scale = Skaler
filter.option.chance = Chance
filter.option.mag = Størrelse
@@ -599,6 +606,8 @@ filter.option.floor2 = Sekundært gulv
filter.option.threshold2 = Sekundær terskel
filter.option.radius = Radius
filter.option.percentile = Percentil
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Evner
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = genstande
unit.thousands = t
unit.millions = mio
unit.billions = mia
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = Generel

View File

@@ -442,6 +442,11 @@ editor.rules = Regeln
editor.generation = Generator
editor.objectives = Ziele
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Im Spiel bearbeiten
editor.playtest = Playtest
editor.publish.workshop = Im Workshop veröffentlichen
@@ -498,6 +503,7 @@ editor.default = [lightgray]<Standard>
details = Details
edit = Bearbeiten
variables = Variablen
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawnbereich
@@ -587,6 +593,7 @@ filter.clear = Löschen
filter.option.ignore = Ignorieren
filter.scatter = Streuen
filter.terrain = Landschaft
filter.logic = Logic
filter.option.scale = Skalierung
filter.option.chance = Wahrscheinlichkeit
@@ -610,6 +617,8 @@ filter.option.floor2 = Sekundärer Boden
filter.option.threshold2 = Sekundärer Grenzwert
filter.option.radius = Radius
filter.option.percentile = Perzentil
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -985,6 +994,7 @@ stat.abilities = Fähigkeiten
stat.canboost = Kann boosten
stat.flying = Flug
stat.ammouse = Muntionsverbrauch
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Schaden-Multiplikator
stat.healthmultiplier = Lebenspunkte-Multiplikator
stat.speedmultiplier = Geschwindigkeit-Multiplikator
@@ -1111,6 +1121,7 @@ unit.items = Materialeinheiten
unit.thousands = k
unit.millions = Mio
unit.billions = Mrd
unit.shots = shots
unit.pershot = /Schuss
category.purpose = Beschreibung
category.general = Allgemeines

View File

@@ -439,6 +439,11 @@ editor.rules = Normas:
editor.generation = Generación:
editor.objectives = Objetivos
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Editar desde la nave
editor.playtest = Probar mapa
editor.publish.workshop = Publicar en Steam Workshop
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Por defecto>
details = Detalles...
edit = Editar...
variables = Variables
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nombre:
editor.spawn = Generar unidad
@@ -584,6 +590,7 @@ filter.clear = Despejar
filter.option.ignore = Ignorar
filter.scatter = Dispersión
filter.terrain = Terreno
filter.logic = Logic
filter.option.scale = Escala
filter.option.chance = Probabilidad
@@ -607,6 +614,8 @@ filter.option.floor2 = Terreno secundario
filter.option.threshold2 = Umbral secundario
filter.option.radius = Radio
filter.option.percentile = Percentil
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -982,6 +991,7 @@ stat.abilities = Habilidades
stat.canboost = Puede volar
stat.flying = Aéreo
stat.ammouse = Uso de munición
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Multiplicador de daño
stat.healthmultiplier = Multiplicador de vida
stat.speedmultiplier = Multiplicador de velocidad
@@ -1107,6 +1117,7 @@ unit.items = objetos
unit.thousands = k
unit.millions = M
unit.billions = B
unit.shots = shots
unit.pershot = /disparo
category.purpose = Objetivo
category.general = General
@@ -2030,8 +2041,8 @@ block.separator.description = Separa el magma en sus componentes minerales.
block.spore-press.description = Comprime vainas de esporas en petróleo.
block.pulverizer.description = Prensa chatarra hasta obtener arena.
block.coal-centrifuge.description = Solidifica petróleo en trozos de carbón.
block.incinerator.description = Vaporiza cualquier líquido o material que recive.
block.power-void.description = Elimina toda la energía que recive. Solo disponible en el modo Libre.
block.incinerator.description = Vaporiza cualquier líquido o material que recibe.
block.power-void.description = Elimina toda la energía que recibe. Solo disponible en el modo Libre.
block.power-source.description = Genera energía infinita. Solo disponible en el modo Libre.
block.item-source.description = Genera objetos de forma infinita. Solo disponible en el modo Libre.
block.item-void.description = Destruye los objetos que entran en él. Solo disponible en el modo Libre.

View File

@@ -435,6 +435,11 @@ editor.rules = Reeglid:
editor.generation = Genereerimine:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Redigeeri mängus
editor.playtest = Playtest
editor.publish.workshop = Avalda Workshop'is
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Vaikimisi>
details = Üksikasjad...
edit = Muuda...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nimi:
editor.spawn = Tekita väeüksus
@@ -577,6 +583,7 @@ filter.clear = Kustutamine
filter.option.ignore = Eira
filter.scatter = Puistamine
filter.terrain = Maastik
filter.logic = Logic
filter.option.scale = Ulatus
filter.option.chance = Tõenäosus
filter.option.mag = Suurusjärk
@@ -599,6 +606,8 @@ filter.option.floor2 = Teine põrand
filter.option.threshold2 = Teine lävi
filter.option.radius = Raadius
filter.option.percentile = Protsentiil
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = ressursiühikut
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = Üldinfo

View File

@@ -437,6 +437,11 @@ editor.rules = Arauak:
editor.generation = Sorrarazi:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Editatu jolasean
editor.playtest = Playtest
editor.publish.workshop = Argitaratu lantegian
@@ -492,6 +497,7 @@ editor.default = [lightgray]<Lehenetsia>
details = Xehetasunak...
edit = Editatu...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Izena:
editor.spawn = Sortu unitatea
@@ -579,6 +585,7 @@ filter.clear = Garbitu
filter.option.ignore = Ezikusi
filter.scatter = Sakabanaketa
filter.terrain = Lursaila
filter.logic = Logic
filter.option.scale = Eskala
filter.option.chance = Zoria
filter.option.mag = Magnitudea
@@ -601,6 +608,8 @@ filter.option.floor2 = Bigarren zorua
filter.option.threshold2 = Bigarren atalasea
filter.option.radius = Erradioa
filter.option.percentile = Pertzentila
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -965,6 +974,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1091,6 +1101,7 @@ unit.items = elementu
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = Orokorra

View File

@@ -435,6 +435,11 @@ editor.rules = Säännöt:
editor.generation = Generaatio:
editor.objectives = Tehtävät
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Muokka pelin sisällä
editor.playtest = Testaa pelin sisällä
editor.publish.workshop = Julkaise Workshoppiin
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Oletus>
details = Yksityiskohdat...
edit = Muokkaa...
variables = Muuttujat
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nimi:
editor.spawn = Luo yksikkö
@@ -577,6 +583,7 @@ filter.clear = Selkeä
filter.option.ignore = Ohitta
filter.scatter = Hajauta
filter.terrain = Maasto
filter.logic = Logic
filter.option.scale = Mittakaava
filter.option.chance = Mahdollisuus
filter.option.mag = Suuruus
@@ -599,6 +606,8 @@ filter.option.floor2 = Toinen lattia
filter.option.threshold2 = Toissijainen raja-arvo
filter.option.radius = Säde
filter.option.percentile = Prosentti
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -962,6 +971,7 @@ stat.abilities = Erikoisvoimat
stat.canboost = Voi tehostaa
stat.flying = Lentävä
stat.ammouse = Ammusten käyttö
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Vahinkokerroin
stat.healthmultiplier = Elmäpistekerroin
stat.speedmultiplier = Nopeuskerroin
@@ -1088,6 +1098,7 @@ unit.items = esinettä
unit.thousands = t
unit.millions = milj
unit.billions = mrd
unit.shots = shots
unit.pershot = /laukaisu
category.purpose = Tarkoitus
category.general = Yleinen

View File

@@ -435,6 +435,11 @@ editor.rules = Rules:
editor.generation = Generation:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edit In-Game
editor.playtest = Playtest
editor.publish.workshop = I-Publish Sa Workshop
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawn Unit
@@ -577,6 +583,7 @@ filter.clear = Clear
filter.option.ignore = Ignore
filter.scatter = Scatter
filter.terrain = Terrain
filter.logic = Logic
filter.option.scale = Scale
filter.option.chance = Chance
filter.option.mag = Magnitude
@@ -599,6 +606,8 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -962,6 +971,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1088,6 +1098,7 @@ unit.items = items
unit.thousands = k
unit.millions = mil
unit.billions = bil
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = General

View File

@@ -445,6 +445,11 @@ editor.rules = Règles
editor.generation = Génération
editor.objectives = Objectifs
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Éditer dans le jeu
editor.playtest = Tester
editor.publish.workshop = Publier sur le Workshop
@@ -501,6 +506,7 @@ editor.default = [lightgray]<par défaut>
details = Détails...
edit = Modifier...
variables = Variables
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nom :
editor.spawn = Ajouter une unité
@@ -590,6 +596,7 @@ filter.clear = Effacer
filter.option.ignore = Ignorer
filter.scatter = Disperser
filter.terrain = Terrain
filter.logic = Logic
filter.option.scale = Échelle
filter.option.chance = Chance
@@ -613,6 +620,8 @@ filter.option.floor2 = Sol secondaire
filter.option.threshold2 = Seuil secondaire
filter.option.radius = Rayon
filter.option.percentile = Pourcentage
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -988,6 +997,7 @@ stat.abilities = Habilités
stat.canboost = Boost
stat.flying = Unité volante
stat.ammouse = Utilisation de munitions
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Multiplicateur de dégâts
stat.healthmultiplier = Multiplicateur de santé
stat.speedmultiplier = Multiplicateur de vitesse
@@ -1113,6 +1123,7 @@ unit.items = objets
unit.thousands = k
unit.millions = M
unit.billions = Md
unit.shots = shots
unit.pershot = /tirs
category.purpose = Description
category.general = Caractéristiques

View File

@@ -46,7 +46,7 @@ mods.browser.selected = Mod kiválasztása
mods.browser.add = Letöltés
mods.browser.reinstall = Újratelepítés
mods.browser.view-releases = Kiadások megtekintése
mods.browser.noreleases = [scarlet]Nem találhatóak a kiadások\n[accent]Nem találhatók kiadások ehhez a modhoz. Nézd meg a tárolóját, hogy vannak-e kiadásai.
mods.browser.noreleases = [scarlet]Nem találhatóak a kiadások\n[accent]Nem találhatóak kiadások ehhez a modhoz. Nézd meg a tárolóját, hogy vannak-e kiadásai.
mods.browser.latest = [lightgray][Legújabb]
mods.browser.releases = Kiadások
mods.github.open = Tároló
@@ -198,14 +198,14 @@ campaign.none = [lightgray]Válassz egy bolygót a kezdéshez.\nEzt bármikor me
campaign.erekir = Újabb, csiszoltabb tartalom. Többnyire lineáris játékmenet.\n\nSokkal nehezebb. Magasabb minőségű pályák és élmények.
campaign.serpulo = Régebbi tartalom. A klasszikus élmény. Nyíltabb végű, több tartalommal.\n\nPotenciálisan kiegyensúlyozatlan pályák és hadjárat. Kevésbé csiszolt.
completed = [accent]Kész
techtree = Fejlesztési fa
techtree.select = Fejlesztési fa kiválasztása
techtree = Technológia fa
techtree.select = Technológia fa kiválasztása
techtree.serpulo = Serpulo
techtree.erekir = Erekir
research.load = Betöltés
research.discard = Eldobás
research.list = [lightgray]Fejleszd ki:
research = Fejlesztési fa
research = Fejlesztés
researched = [lightgray]{0} kifejlesztve.
research.progress = {0}% kész
players = {0} játékos
@@ -309,7 +309,7 @@ server.invalidport = Érvénytelen port!
server.error = [scarlet]Kiszolgálási hiba.
save.new = Új mentés
save.overwrite = Biztosan felülírod\nezt a mentést?
save.nocampaign = A hadjáratból származó egyes mentési fájlok nem importálhatók.
save.nocampaign = A hadjáratból származó egyes mentési fájlok nem importálhatóak.
overwrite = Felülírás
save.none = Nem található mentés!
savefail = Nem sikerült elmenteni a játékot!
@@ -332,7 +332,7 @@ on = Be
off = Ki
save.search = Keresés a mentett játékok között...
save.autosave = Automatikus mentés: {0}
save.map = Térkép: {0}
save.map = Pálya: {0}
save.wave = Hullám: {0}
save.mode = Játékmód: {0}
save.date = Utolsó mentés: {0}
@@ -445,6 +445,11 @@ editor.rules = Szabályok
editor.generation = Előállítás
editor.objectives = Célok
editor.locales = Helyi csomagok
editor.worldprocessors = Világprocesszorok
editor.worldprocessors.editname = Név szerkesztése
editor.worldprocessors.none = [lightgray]Nem találhatóak világprocesszor blokkok!\nAdj hozzá egyet a pályaszerkesztőben, vagy használd az alábbi \ue813 hozzáadás gombot.
editor.worldprocessors.nospace = Nincs szabad hely egy világprocesszor elhelyezéséhez!\nKitöltötted a pályát struktúrákkal? Miért tetted ezt?
editor.worldprocessors.delete.confirm = Biztos, hogy törölni akarod ezt a világprocesszort?\n\nHa falakkal van körülvéve, akkor egy környezeti fal fog a helyére kerülni.
editor.ingame = Szerkesztés a játékban
editor.playtest = Teszt a játékban
editor.publish.workshop = Közzététel a Steam Műhelyben
@@ -501,7 +506,9 @@ editor.default = [lightgray]<Alapbeállítás>
details = Részletek...
edit = Szerkesztés
variables = Változók
logic.clear.confirm = Biztos, hogy törölni akarod az összes kódot ebből a processzorból?
logic.globals = Beépített változók
editor.name = Név:
editor.spawn = Egység létrehozása
editor.removeunit = Egység eltávolítása
@@ -590,6 +597,7 @@ filter.clear = Törlés
filter.option.ignore = Elutasítás
filter.scatter = Szétszórás
filter.terrain = Domborzat
filter.logic = Logika
filter.option.scale = Méretezés
filter.option.chance = Gyakoriság
@@ -613,8 +621,10 @@ filter.option.floor2 = Másodlagos talaj
filter.option.threshold2 = Másodlagos küszöbérték
filter.option.radius = Sugár
filter.option.percentile = Százalék
filter.option.code = Kód
filter.option.loop = Hurok
locales.info = Itt adhatsz hozzá különböző nyelvi csomagokat a pályádhoz. A nyelvi csomagokban minden tulajdonságnak van egy neve és egy értéke. Ezeket a tulajdonságokat a világfeldolgozók és a célkitűzések is használhatják a saját neveikkel. Támogatják a szövegformázást (a helyőrzőket a tényleges értékükkel helyettesítik).\n\n[cyan]Példa tulajdonság:\n[]name: [accent]időzítő[]\nvalue: [accent]Példa időzítő, hátralévő idő: {0}[]\n\n[cyan]Használat:\n[]Beállítás célkitűzés szövegeként: [accent]@időzítő\n\n[]Írd be egy világfeldolgozóba:\n[accent]localeprint "időzítő"\nformat time\n[gray](ahol az idő egy külön számított változó)
locales.info = Itt adhatsz hozzá különböző nyelvi csomagokat a pályádhoz. A nyelvi csomagokban minden tulajdonságnak van egy neve és egy értéke. Ezeket a tulajdonságokat a világprocesszorok és a célkitűzések is használhatják a saját neveikkel. Támogatják a szövegformázást (a helyőrzőket a tényleges értékükkel helyettesítik).\n\n[cyan]Példa tulajdonság:\n[]name: [accent]időzítő[]\nvalue: [accent]Példa időzítő, hátralévő idő: {0}[]\n\n[cyan]Használat:\n[]Beállítás célkitűzés szövegeként: [accent]@időzítő\n\n[]Írd be egy világprocesszorba:\n[accent]localeprint "időzítő"\nformat time\n[gray](ahol az idő egy külön számított változó)
locales.deletelocale = Biztos, hogy törölni akarod ezt a nyelvi csomagot?
locales.applytoall = Változások alkalmazása az összes nyelvi csomagra
locales.addtoother = Hozzáadás más nyelvi csomagokhoz
@@ -688,7 +698,7 @@ marker.shape.name = Alakzat
marker.text.name = Szöveg
marker.line.name = Vonal
marker.quad.name = Négyzet
marker.texture.name = Texture
marker.texture.name = Textúra
marker.background = Háttér
marker.outline = Körvonal
@@ -699,9 +709,9 @@ objective.destroyblock = [accent]Semmisítsd meg:\n[]{0}[lightgray]{1}
objective.destroyblocks = [accent]Semmisítsd meg: [lightgray]{0}[white]/{1}\n{2}[lightgray]{3}
objective.item = [accent]Termelj: [][lightgray]{0}[]/{1}\n{2}[lightgray]{3}
objective.coreitem = [accent]Szállítás a támaszpontba:\n[][lightgray]{0}[]/{1}\n{2}[lightgray]{3}
objective.build = [accent]Építs: [][lightgray]{0}[]\n{1}[lightgray]{2}
objective.buildunit = [accent]Gyárts egységeket: [][lightgray]{0}[]\n{1}[lightgray]{2}
objective.destroyunits = [accent]Semmisíts meg: [][lightgray]{0}[] egységet
objective.build = [accent]Építs: [][lightgray]{0}[]db\n{1}[lightgray]{2}
objective.buildunit = [accent]Gyárts egységeket: [][lightgray]{0}[]db\n{1}[lightgray]{2}
objective.destroyunits = [accent]Semmisíts meg: [][lightgray]{0}[]db egységet
objective.enemiesapproaching = [accent]Ellenség érkezik: [lightgray]{0}[] mp múlva
objective.enemyescelating = [accent]Az ellenséges gyártás fokozódik: [lightgray]{0}[] mp múlva
objective.enemyairunits = [accent]Az ellenséges légi egységek gyártása elkezdődik: [lightgray]{0}[] mp múlva
@@ -817,12 +827,12 @@ sector.navalFortress.name = Tengerészeti erőd
sector.groundZero.description = Az ideális helyszín, hogy ismét belekezdjünk. Alacsony ellenséges fenyegetés. Kevés nyersanyag.\nGyűjts annyi rezet és ólmot, amennyit csak tudsz.\nHaladj tovább.
sector.frozenForest.description = Még itt, a hegyekhez közel is elterjedtek a spórák. A fagypont alatti hőmérséklet nem tudja örökké fogva tartani őket.\n\nFedezd fel az elektromosság erejét! Építs égetőerőműveket! Tanuld meg a foltozók használatát!
sector.saltFlats.description = A sivatag peremén terülnek el a Sós síkságok. Kevés nyersanyag található errefelé.\n\nAz ellenség egy raktárkomplexumot létesített itt. Pusztítsd el a támaszpontjukat! Kő kövön ne maradjon!
sector.craters.description = Víz gyűjt össze ebben a kráterben, amely régi háborúk emlékét őrzi. Szerezd vissza a területet. Gyűjts homokot! Olvassz üveget! Pumpálj vizet, hogy lehűtsd a fúróidat és lövegtornyaidat.
sector.craters.description = Víz gyűlt össze ebben a kráterben, amely régi háborúk emlékét őrzi. Szerezd vissza a területet. Gyűjts homokot! Olvassz üveget! Szivattyúzz vizet, hogy lehűtsd a fúróidat és lövegtornyaidat.
sector.ruinousShores.description = A pusztaság mögött a partvonal húzódik. Valaha ezen a helyen egy partvédelmi rendszer állt. Nem sok minden maradt belőle. Csak a legalapvetőbb védelmi szerkezetek maradtak érintetlenül, minden más csak törmelék lett.\nFolytasd a terjeszkedést! Fedezd fel újra a technológiát!
sector.stainedMountains.description = Mélyebben a szárazföldön fekszenek a hegyek, a spóráktól még érintetlenül.\nTermeld ki a bőséges titán készleteket a körzetben. Tanuld meg felhasználni!.\n\nAz ellenség itt nagyobb létszámban van jelen. Ne hagyj nekik időt, hogy a legerősebb egységeiket hadba állíthassák!
sector.overgrowth.description = Ez a terület közelebb esik a spórák forrásához, a spórák már kinőtték.\nAz ellenség egy helyőrséget létesített itt. Építs Mace egységeket! Pusztítsd el a bázist!
sector.tarFields.description = Egy olajtermelő övezet peremvidéke a hegyek és a sivatag között. Egy azon kevés szektorok közül, ahol még hasznosítható kátránykészletek találhatók.\nBár a terület elhagyatott, veszélyes ellenséges erők fészkelnek a közelben. Ne becsüld alá őket!\n\n[lightgray]Fedezd fel az olajfeldolgozási lehetőségeket, ha tudod!
sector.desolateRift.description = Egy extrém veszélyes zóna. Nyersanyagokban gazdag, de szűkös a hely. Magas a kockázat. Építsd szárazföldi és légvédelmet, amint csak tudsz. Ne tévesszen meg a hosszú szünet az ellenség támadásai között.
sector.tarFields.description = Egy olajtermelő övezet peremvidéke a hegyek és a sivatag között. Egy azon kevés szektorok közül, ahol még hasznosítható kátránykészletek találhatóak.\nBár a terület elhagyatott, veszélyes ellenséges erők fészkelnek a közelben. Ne becsüld alá őket!\n\n[lightgray]Fedezd fel az olajfeldolgozási lehetőségeket, ha tudod!
sector.desolateRift.description = Egy extrém veszélyes zóna. Nyersanyagokban gazdag, de szűkös a hely. Magas a kockázat. Építs szárazföldi és légvédelmet, amint csak tudsz. Ne tévesszen meg a hosszú szünet az ellenség támadásai között.
sector.nuclearComplex.description = Egy néhai tóriumkitermelő és feldolgozó létesítmény, romokban.\n[lightgray]Fedezd fel a tóriumot és a sokrétű felhasználását!\n\nAz ellenség nagy létszámban van jelen, és folyamatosan megfigyelés alatt tartják a környéket.
sector.fungalPass.description = Átmeneti terület a magas hegyek és a mélyebben fekvő, spórák uralta lapály között. Egy kisebb ellenséges megfigyelő állomás található itt.\nSemmisítsd meg!\nHasználj Dagger és Crawler egységeket! Pusztítsd el a két támaszpontot!
sector.biomassFacility.description = A spórák származási helye. Ebben a létesítményben fejlesztették ki őket, és eredetileg itt is gyártották őket.\nFedezd fel az itt található technológiákat. Tenyészd ki a spórákat üzemanyag és műanyagok gyártásához.\n\n[lightgray]A létesítmény pusztulása nyomán a spórák elszabadultak és szétszóródtak a légkörben. A helyi ökoszisztémában semmi sem tudta felvenni a versenyt egy ennyire invazív életformával.
@@ -853,9 +863,9 @@ sector.origin.name = Eredet
sector.onset.description = Kezdd meg az Erekir meghódítását. Gyűjts nyersanyagokat, állíts elő egységeket, és kezdd el a technológiai fejlesztéseket.
sector.aegis.description = Ez a szektor volfrám-lelőhelyeket tartalmaz.\nFejleszd ki az [accent]Ütvefúrót[], hogy ki tudd bányászni ezt a nyersanyagot, és pusztítsd el az ellenséges bázist a szektorban.
sector.lake.description = Az ebben a szektorban lévő salakos tó nagymértékben korlátozza a használható egységeket. A lebegőegységek használata az egyetlen lehetőség.\nFejleszd ki a [accent]Repülőgépgyárat[], és állíts elő egy [accent]Elude[] egységet, amilyen hamar csak lehet.
sector.lake.description = Az ebben a szektorban lévő salakos tó nagymértékben korlátozza a használható egységeket. A lebegőegységek használata az egyetlen lehetőség.\nFejleszd ki a [accent]Repülőgépgyárt[], és állíts elő egy [accent]Elude[] egységet, amilyen hamar csak lehet.
sector.intersect.description = A letapogatások arra utalnak, hogy ezt a szektort a leszállás után hamarosan több oldalról is megtámadják.\nÁllítsd fel gyorsan a védelmedet, és terjeszkedj minél hamarabb.\n[accent]Mech[] egységekre lesz szükség a terület zord terepviszonyai miatt.
sector.atlas.description = Ez a szektor változatos terepet tartalmaz, és az ütőképes támadáshoz többféle egységre lesz szükség.\nAz itt felfedezett ellenséges bázisok némelyikén való átjutáshoz is továbbfejlesztett egységekre lehet szükség.\nFejleszd ki az [accent]Elektrolizátort[] és a [accent]Tank újratervezőt[].
sector.atlas.description = Ez a szektor változatos terepet tartalmaz, és az ütőképes támadáshoz többféle egységre lesz szükség.\nAz itt felfedezett ellenséges bázisok némelyikén való átjutáshoz is továbbfejlesztett egységekre lehet szükség.\nFejleszd ki az [accent]Elektrolizátort[] és a [accent]Tankújratervezőt[].
sector.split.description = A minimális ellenséges jelenlét miatt ez a szektor tökéletes az új nyersanyagszállító technológiák tesztelésére.
sector.basin.description = Jelentős ellenséges jelenlét lett érzékelve ebben a szektorban.\nÉpíts gyorsan egységeket, és foglald el az ellenséges támaszpontokat, hogy megvethesd a lábad.
sector.marsh.description = Ebben a szektorban rengeteg arkicit található, de kevés a kürtő.\nÉpíts [accent]Kémiai égetőkamrát[] az áramfejlesztéshez.
@@ -863,8 +873,8 @@ sector.peaks.description = A hegyvidéki terep ebben a szektorban a legtöbb egy
sector.ravine.description = A szektorban nem észlelhető ellenséges támaszpont, de ez egy fontos szállítási útvonal az ellenség számára, így változatos ellenséges erőkkel kell számolni.\nTermelj [accent]elektrometált[]. Építs [accent]Afflict[] lövegtornyokat.
sector.caldera-erekir.description = Ebben a szektorban a feltárható nyersanyagok több szigeten szétszóródva találhatóak.\nFejleszd ki és helyezd üzembe a drónalapú szállítmányozást.
sector.stronghold.description = A nagy ellenséges tábor ebben a szektorban jelentős mennyiségű [accent]tóriumot[] őriz.\nHasználd magasabb szintű egységek és lövegtornyok fejlesztésére.
sector.crevice.description = Ebben a szektorban az ellenség kegyetlen támadóerőket fog mozgósítani, hogy kiiktassa a bázisodat.\nA [accent]karbid[] és a [accent]Pirolízis erőmű[] kifejlesztése nélkülözhetetlen lehet a túléléshez.
sector.siege.description = Ebben a szektorban két párhuzamos kanyon található, amelyek két irányból érkező támadásokat tesznek lehetővé.\nFejleszd ki a [accent]diciánt[], hogy még erősebb tankegységeket hozhass létre.\nVigyázat: ellenséges, nagy hatótávolságú rakéták észlelve. A rakéták a becsapódásuk előtt megsemmisíthetők.
sector.crevice.description = Ebben a szektorban az ellenség kegyetlen támadóerőket fog mozgósítani, hogy kiiktassa a bázisodat.\nA [accent]karbid[] és a [accent]Pirolízis-erőmű[] kifejlesztése nélkülözhetetlen lehet a túléléshez.
sector.siege.description = Ebben a szektorban két párhuzamos kanyon található, amelyek két irányból érkező támadásokat tesznek lehetővé.\nFejleszd ki a [accent]diciánt[], hogy még erősebb tankegységeket hozhass létre.\nVigyázat: ellenséges, nagy hatótávolságú rakéták észlelve. A rakéták a becsapódásuk előtt megsemmisíthetőek.
sector.crossroads.description = Az ellenséges támaszpontok ebben a szektorban változó terepviszonyok között alakultak ki. Ahhoz, hogy alkalmazkodni tudj, fejlessz ki különböző egységeket.\nEzenkívül egyes bázisokat pajzsok védenek. Találd ki, hogyan táplálják őket.
sector.karst.description = Ez a szektor gazdag a nyersanyagokban, de amint egy új támaszpont leszáll, az ellenség megtámadja azt.\nHasználd ki a nyersanyagokat és fedezd fel a [accent]tóritkvarcot[].
sector.origin.description = Az utolsó szektor, jelentős ellenséges jelenléttel.\nNem valószínű, hogy maradtak további fejlesztési lehetőségek koncentrálj az ellenséges támaszpontok elpusztítására.
@@ -955,7 +965,7 @@ stat.moduletier = Modul szintje
stat.unittype = Egység típusa
stat.speedincrease = Gyorsítás
stat.range = Hatótáv
stat.drilltier = Kitermelhetők
stat.drilltier = Kitermelhetőek
stat.drillspeed = Alap termelési sebesség
stat.boosteffect = Erősítés hatása
stat.maxunits = Max. aktív egységek
@@ -989,6 +999,7 @@ stat.abilities = Képességek
stat.canboost = Erősíthető
stat.flying = Repül
stat.ammouse = Lőszerhasználat
stat.ammocapacity = Lőszerkapacitás
stat.damagemultiplier = Sebzésszorzó
stat.healthmultiplier = Életerőszorzó
stat.speedmultiplier = Sebességszorzó
@@ -1027,6 +1038,7 @@ ability.spawndeath = Szétesés
ability.spawndeath.description = Megsemmisülésekor egységeket bocsát ki
ability.liquidexplode = Szétömlés
ability.liquidexplode.description = Megsemmisülésekor folyadék ömlik ki belőle
ability.stat.firingrate = [stat]{0}/mp[lightgray] tüzelési sebesség
ability.stat.regen = [stat]{0}[lightgray] életerő/mp
ability.stat.shield = [stat]{0}[lightgray] pajzs
@@ -1080,16 +1092,16 @@ bullet.homing = [stat]nyomkövető
bullet.armorpierce = [stat]páncéltörő
bullet.maxdamagefraction = [stat]{0}%[lightgray] sebzési határérték
bullet.suppression = [stat]{0} mp[lightgray] javításelnyomás ~[stat]{1}[lightgray] csempe
bullet.interval = [stat]{0}/mp[lightgray] lövedékek időköze:
bullet.frags = [stat]{0}[lightgray]x repeszlövedék:
bullet.lightning = [stat]{0}[lightgray]x villámcsapás ~[stat]{1}[lightgray] sebzés
bullet.interval = [stat]{0}/mp[lightgray] gyakoriságú lövedékek:
bullet.frags = [stat]{0}[lightgray]db repeszlövedék:
bullet.lightning = [stat]{0}[lightgray]db villámcsapás ~[stat]{1}[lightgray] sebzés
bullet.buildingdamage = [stat]{0}%[lightgray] épületsebzés
bullet.knockback = [stat]{0}[lightgray] hátralökés
bullet.pierce = [stat]{0}[lightgray]x átütő erő
bullet.infinitepierce = [stat]átütő erő
bullet.healpercent = [stat]{0}%[lightgray] javítás
bullet.healamount = [stat]{0}[lightgray] közvetlen javítás
bullet.multiplier = [stat]{0}[lightgray]x lőszerszorzó
bullet.multiplier = [stat]{0}[lightgray] lőszer/nyersanyag
bullet.reload = [stat]{0}%[lightgray] tüzelési sebesség
bullet.range = [stat]{0}[lightgray] csempés hatótáv
@@ -1114,8 +1126,9 @@ unit.items = nyersanyag
unit.thousands = k
unit.millions = mil
unit.billions = Mrd
unit.shots = lövés
unit.pershot = /lövés
category.purpose = Cél
category.purpose = Rendeltetés
category.general = Általános
category.power = Áram
category.liquids = Folyadékok
@@ -1235,16 +1248,17 @@ keybind.unit_stance_hold_fire.name = Egység viselkedése: tüzet szüntess
keybind.unit_stance_pursue_target.name = Egység viselkedése: célpont követése
keybind.unit_stance_patrol.name = Egység viselkedése: járőrözés
keybind.unit_stance_ram.name = Egység viselkedése: ütközés
keybind.unit_command_move.name = Unit Command: Move
keybind.unit_command_repair.name = Unit Command: Repair
keybind.unit_command_rebuild.name = Unit Command: Rebuild
keybind.unit_command_assist.name = Unit Command: Assist
keybind.unit_command_mine.name = Unit Command: Mine
keybind.unit_command_boost.name = Unit Command: Boost
keybind.unit_command_load_units.name = Unit Command: Load Units
keybind.unit_command_load_blocks.name = Unit Command: Load Blocks
keybind.unit_command_unload_payload.name = Unit Command: Unload Payload
keybind.unit_command_enter_payload.name = Unit Command: Enter Payload
keybind.unit_command_move.name = Egységparancs: mozgás
keybind.unit_command_repair.name = Egységparancs: javítás
keybind.unit_command_rebuild.name = Egységparancs: újjáépítés
keybind.unit_command_assist.name = Egységparancs: támogatás
keybind.unit_command_mine.name = Egységparancs: bányászás
keybind.unit_command_boost.name = Egységparancs: erősítés
keybind.unit_command_load_units.name = Egységparancs: egységek berakodása
keybind.unit_command_load_blocks.name = Egységparancs: blokkok berakodása
keybind.unit_command_unload_payload.name = Egységparancs: kirakodás
keybind.unit_command_enter_payload.name = Egységparancs: berakodás
keybind.rebuild_select.name = Régió újjáépítése
keybind.schematic_select.name = Terület kijelölése
@@ -1376,8 +1390,9 @@ rules.weather = Időjárás
rules.weather.frequency = Gyakoriság:
rules.weather.always = Mindig
rules.weather.duration = Időtartam:
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.onlydepositcore.info = Prevents units from depositing items into any buildings except cores.
rules.placerangecheck.info = Megakadályozza, hogy a játékosok lövegtornyokat helyezzenek el az ellenséges épületek közelében. Amikor megpróbálnak egy lövegtornyot elhelyezni, az építési távolság megnő, így a lövegtorony nem fogja elérni az ellenséget.
rules.onlydepositcore.info = Megakadályozza, hogy az egységek nyersanyagokat helyezzenek el a támaszponton kívül más épületekbe.
content.item.name = Nyersanyagok
content.liquid.name = Folyadékok
@@ -1823,13 +1838,13 @@ block.beam-tower.name = Sugártorony
block.beam-link.name = Sugárhálózat
block.turbine-condenser.name = Kondenzációs turbina
block.chemical-combustion-chamber.name = Kémiai égetőkamra
block.pyrolysis-generator.name = Pirolíziserőmű
block.pyrolysis-generator.name = Pirolízis-erőmű
block.vent-condenser.name = Vízleválasztó
block.cliff-crusher.name = Sziklazúzó
block.plasma-bore.name = Plazmafúró
block.large-plasma-bore.name = Nagy plazmafúró
block.impact-drill.name = Ütvefúró
block.eruption-drill.name = Kitörési fúró
block.eruption-drill.name = Kitöréses fúró
block.core-bastion.name = Bástya
block.core-citadel.name = Citadella
block.core-acropolis.name = Akropolisz
@@ -1895,10 +1910,10 @@ hint.breaking = [accent]Jobb egérgombbal[] és húzással lebonthatod a blokkok
hint.breaking.mobile = Használd a jobb alsó sarokban lévő \ue817 [accent]kalapács[] gombot a blokkok törléséhez.\n\nTartsd lenyomva az ujjad és húzd, hogy nagyobb területet tudj kijelölni.
hint.blockInfo = Egy blokk információinak megtekintéséhez válaszd ki az épületet az [accent]építési menüben[], majd válaszd a [accent][[?][] gomb jobb oldalt.
hint.derelict = Az [accent]elhagyatott[] szerkezetek régi bázisok maradványai, amelyek már nem működnek.\n\nEzeket az épületeket le lehet [accent]bontani[] nyersanyagokért, vagy meg is lehet javítani őket.
hint.research = Használd a \ue875 [accent]Fejlesztési fa[] gombot, hogy új technológiákat fedezz fel.
hint.research.mobile = Használd a \ue875 [accent]Fejlesztési fa[] gombot a \ue88c [accent]menüben[], hogy új technológiákat fedezz fel.
hint.research = Használd a \ue875 [accent]Technológia fa[] gombot, hogy új technológiákat fedezz fel.
hint.research.mobile = Használd a \ue875 [accent]Technológia fa[] gombot a \ue88c [accent]menüben[], hogy új technológiákat fedezz fel.
hint.unitControl = Nyomd le a [accent][[bal Ctrl][] gombot, és kattints [accent]jobb egérgombbal[] a baráti egység vagy lövegtorony irányításához.
hint.unitControl.mobile = [accent][[Dupla koppintással][] irányíthatók kézileg a szövetséges egységek vagy lövegtornyok.
hint.unitControl.mobile = [accent][[Dupla koppintással][] a szövetséges egységek vagy lövegtornyok kézileg irányíthatóak.
hint.unitSelectControl = Az egységek irányításához lépj be [accent]parancs módba[] a [accent]bal Shift[] lenyomva tartásával.\nParancs módban az egységek kijelöléséhez kattints, és húzd az egeret. A [accent]jobb egérgombbal[] küldd az egységeket a helyszínre vagy a célponthoz.
hint.unitSelectControl.mobile = Az egységek irányításához lépj be [accent]parancs módba[] a bal alsó sarokban lévő [accent]parancs[] gombbal.\nParancs módban az egységek kiválasztásához érintsd meg a kijelzőt és húzással jelöld ki az egységeket. Koppintással küldd az egységeket a helyszínre vagy a célponthoz.
hint.launch = Ha elegendő nyersanyagot gyűjtöttél össze, akkor [accent]lődd ki[] a támaszpontot a következő szektorba, úgy, hogy megnyitod a \ue827 [accent]Bolygótérképet[] a jobb alsó sarokban, és átforgatod az új helyszínre.
@@ -1925,16 +1940,16 @@ hint.factoryControl.mobile = Egy egységgyár [accent]kimeneti célpontjának[]
gz.mine = Menj a földön lévő \uf8c4 [accent]rézérc[] közelébe, és kattints a bányászat megkezdéséhez.
gz.mine.mobile = Menj a földön lévő \uf8c4 [accent]rézérc[] közelébe, és koppints a bányászat megkezdéséhez.
gz.research = Nyisd meg a \ue875 Fejlesztési fát.\nFejleszd ki a \uf870 [accent]Mechanikus fúrót[], majd válaszd ki a jobb alsó sarokban lévő menüből.\nKattints egy rézfoltra az elhelyezéséhez.
gz.research.mobile = Nyisd meg a \ue875 Fejlesztési fát.\nFejleszd ki a \uf870 [accent]Mechanikus fúrót[], majd válaszd ki a jobb alsó sarokban lévő menüből.\nKattints egy rézfoltra az elhelyezéséhez.\n\nA megerősítéshez nyomd meg a jobb alsó sarokban lévő \ue800 [accent]pipát[].
gz.conveyors = Fejleszd ki, és építs \uf896 [accent]szállítószalagokat[], hogy a kitermelt\nnyersanyagokat eljuttasd a fúróktól a támaszpontba.\n\nKattints és húzd az egeret, hogy több szállítószalagot helyezz el.\nHasználd a [accent]görgőt[] a forgatáshoz.
gz.conveyors.mobile = Fejleszd ki, és építs \uf896 [accent]szállítószalagokat[], hogy a kitermelt\nnyersanyagokat eljuttasd a fúróktól a támaszpontba.\n\nTartsd lenyomva az ujjad és húzd el, hogy több szállítószalagot helyezz el.
gz.research = Nyisd meg a \ue875 Technológia fát.\nFejleszd ki a \uf870 [accent]Mechanikus fúrót[], majd válaszd ki a jobb alsó sarokban lévő menüből.\nKattints egy rézfoltra az elhelyezéséhez.
gz.research.mobile = Nyisd meg a \ue875 Technológia fát.\nFejleszd ki a \uf870 [accent]Mechanikus fúrót[], majd válaszd ki a jobb alsó sarokban lévő menüből.\nKattints egy rézfoltra az elhelyezéséhez.\n\nA megerősítéshez nyomd meg a jobb alsó sarokban lévő \ue800 [accent]pipát[].
gz.conveyors = Fejleszd ki, és építs \uf896 [accent]Szállítószalagokat[], hogy a kitermelt\nnyersanyagokat eljuttasd a fúróktól a támaszpontba.\n\nKattints és húzd az egeret, hogy több szállítószalagot helyezz el.\nHasználd a [accent]görgőt[] a forgatáshoz.
gz.conveyors.mobile = Fejleszd ki, és építs \uf896 [accent]Szállítószalagokat[], hogy a kitermelt\nnyersanyagokat eljuttasd a fúróktól a támaszpontba.\n\nTartsd lenyomva az ujjad és húzd el, hogy több szállítószalagot helyezz el.
gz.drills = Bővítsd a bányászati kapacitást.\nÉpíts több mechanikus fúrót.\nBányássz 100 rezet.
gz.lead = Az \uf837 [accent]ólom[] egy másik gyakran használt nyersanyag.\nÉpíts fúrókat az ólom kitermelésére.
gz.moveup = \ue804 Menj tovább a további utasításokért.
gz.turrets = Fejleszd ki, és építs 2 \uf861 [accent]Duo[] lövegtornyot, hogy megvédd a támaszpontot.\nA Duo lövegtornyoknak \uf838 [accent]lőszerre[] van szükségük, mely szállítószalaggal juttatható el hozzájuk.
gz.turrets = Fejleszd ki, és építs két \uf861 [accent]Duo[] lövegtornyot, hogy megvédd a támaszpontot.\nA Duo lövegtornyoknak \uf838 [accent]lőszerre[] van szükségük, mely szállítószalaggal juttatható el hozzájuk.
gz.duoammo = Szállítószalagok segítségével lásd el [accent]rézzel[] a Duo lövegtornyokat.
gz.walls = A [accent]falak[] megakadályozhatják, hogy az épületekben károk keletkezzenek.\nÉpíts \uf8ae [accent]rézfalakat[] a lövegtornyok köré.
gz.walls = A [accent]falak[] megakadályozhatják, hogy az épületekben károk keletkezzenek.\nÉpíts \uf8ae [accent]Rézfalakat[] a lövegtornyok köré.
gz.defend = Az ellenség közeledik, készülj fel a védekezésre.
gz.aa = A repülő egységeket nem lehet könnyen elintézni a hagyományos lövegtornyokkal.\nA \uf860 [accent]Scatter[] lövegtornyok kiváló légelhárítást biztosítanak, de lőszerként \uf837 [accent]ólomra[] van szükségük.
gz.scatterammo = Szállítószalagok segítségével lásd el \uf837 [accent]ólommal[] a Scatter lövegtornyokat.
@@ -1946,17 +1961,17 @@ gz.finish = Építs több lövegtornyot, bányássz több nyersanyagot,\nés vé
onset.mine = Kattints bal egérgombbal a \uf748 [accent]berillium[] kibányászáshoz a falakból.\n\nA mozgáshoz használd a [accent][[WASD] gombokat.
onset.mine.mobile = Koppints a \uf748 [accent]berillium[] kibányászáshoz a falakból.
onset.research = Nyisd meg a \ue875 fejlesztési fát.\nFejleszd ki, és építs egy \uf73e [accent]kondenzációs turbinát[] a kürtőn.\nEz [accent]áramot[] fog termelni.
onset.bore = Fejleszd ki, és építs egy \uf741 [accent]plazmafúrót[].\nEz automatikusan bányássza ki a nyersanyagokat a falakból.
onset.power = Ahhoz, hogy [accent]árammal[] lásd el a plazmafúrót, fejleszd ki, és helyezz el egy \uf73d [accent]sugárcsomópontot[].\nSegítségükkel összekötheted a kondenzációs turbinát a plazmafúróval.
onset.ducts = Fejleszd ki, és építs \uf799 [accent]szállítószalagot[], hogy a kitermelt nyersanyagokat eljuttasd a plazmafúrótól a támaszpontba.\nKattints, és húzd az egeret több szállítószalag elhelyezéséhez.\nHasználd a [accent]görgőt[] a forgatáshoz.
onset.ducts.mobile = Fejleszd ki, és építs \uf799 [accent]szállítószalagot[], hogy a kitermelt nyersanyagokat eljuttasd a plazmafúrótól a támaszpontba.\n\nTartsd lenyomva az ujjad és húzd el, hogy több szállítószalagot helyezz el.
onset.research = Nyisd meg a \ue875 Technológia fát.\nFejleszd ki, és építs egy \uf73e [accent]Kondenzációs turbinát[] a kürtőn.\nEz [accent]áramot[] fog termelni.
onset.bore = Fejleszd ki, és építs egy \uf741 [accent]Plazmafúrót[].\nEz automatikusan bányássza ki a nyersanyagokat a falakból.
onset.power = Ahhoz, hogy [accent]árammal[] lásd el a plazmafúrót, fejleszd ki, és helyezz el egy \uf73d [accent]Sugárcsomópontot[].\nSegítségükkel összekötheted a kondenzációs turbinát a plazmafúróval.
onset.ducts = Fejleszd ki, és építs \uf799 [accent]Szállítószalagot[], hogy a kitermelt nyersanyagokat eljuttasd a plazmafúrótól a támaszpontba.\nKattints, és húzd az egeret több szállítószalag elhelyezéséhez.\nHasználd a [accent]görgőt[] a forgatáshoz.
onset.ducts.mobile = Fejleszd ki, és építs \uf799 [accent]Szállítószalagot[], hogy a kitermelt nyersanyagokat eljuttasd a plazmafúrótól a támaszpontba.\n\nTartsd lenyomva az ujjad és húzd el, hogy több szállítószalagot helyezz el.
onset.moremine = Bővítsd a bányászati kapacitást.\nHelyezz el több plazmavágót, és a támogatásukhoz használj sugárcsomópontokat és szállítószalagokat.\nBányássz 200 berilliumot.
onset.graphite = Az összetettebb épületekhez \uf835 [accent]grafit[] szükséges.\nÉpíts plazmavágókat a grafit kibányászásához.
onset.research2 = Kezdd el a [accent]gyárak[] fejlesztését.\nFejleszd ki a \uf74d [accent]sziklazúzót[] és a \uf779 [accent]szilícium ívkemencét[].
onset.arcfurnace = A Szilícium ívkemencének \uf834 [accent]homokra[] és \uf835 [accent]grafitra[] van szüksége, hogy \uf82f [accent]szilíciumot[] gyártson.\nTovábbá [accent]áram[] is szükséges a működéséhez.
onset.crusher = Használj \uf74d [accent]sziklazúzókat[], hogy homokot bányász.
onset.fabricator = Használd az [accent]egységeket[], hogy felfedezd a pályát, megvédd az épületeket, és megtámadhasd velük az ellenséget. Fejleszd ki, és helyezz el egy \uf6a2 [accent]tankgyárat[].
onset.research2 = Kezdd el a [accent]gyárak[] fejlesztését.\nFejleszd ki a \uf74d [accent]Sziklazúzót[] és a \uf779 [accent]Szilícium ívkemencét[].
onset.arcfurnace = A szilícium ívkemencének \uf834 [accent]homokra[] és \uf835 [accent]grafitra[] van szüksége, hogy \uf82f [accent]szilíciumot[] gyártson.\nTovábbá [accent]áram[] is szükséges a működéséhez.
onset.crusher = Használj \uf74d [accent]Sziklazúzókat[], hogy homokot bányász.
onset.fabricator = Használd az [accent]egységeket[], hogy felfedezd a pályát, megvédd az épületeket, és megtámadhasd velük az ellenséget. Fejleszd ki, és helyezz el egy \uf6a2 [accent]Tankgyárt[].
onset.makeunit = Állíts elő egy egységet.\nHasználd a „?” gombot, hogy megnézd a kiválasztott gyár követelményeit.
onset.turrets = Az egységek hatékonyak, de hatásosan alkalmazva a [accent]lövegtornyok[] jobb védelmi képességeket biztosítanak.\nHelyezz el egy \uf6eb [accent]Breach[] lövegtornyot.\nA lövegtornyoknak \uf748 [accent]lőszerre[] van szüksége.
onset.turretammo = Szállítótalagok használatával lásd el a lövegtornyokat [accent]berillium[] lőszerrel.
@@ -1966,18 +1981,18 @@ onset.defenses = [accent]Állíts fel védelmet:[lightgray] {0}
onset.attack = Az ellenség most sebezhető. Indítsd ellentámadást.
onset.cores = Új támaszpont csak a [accent]támaszpontcsempére[] helyezhető.\nAz új támaszpontok előretolt bázisként működnek, és megosztják a nyersanyagkészletüket más támaszpontokkal.\nHelyezz el egy \uf725 támaszpontot.
onset.detect = Az ellenség 2 percen belül észrevesz téged.\nÁllíts fel védelmet, bányászatot és termelést.
onset.commandmode = Tartsd nyomva a [accent]Shift[] gombot, hogy [accent]parancs módba[] lépj.\n[accent]Bal egérgombbal és húzással[] lehet egységeket kijelölni.\n[accent]Jobb egérgombbal[] utasíthatók az egységek mozgásra vagy támadásra.
onset.commandmode.mobile = Nyomd meg a [accent]parancs gombot[], hogy [accent]parancs módba[] lépj.\nTartsd nyomva az ujjad, majd [accent]húzd[] az egységek kiválasztásához.\n[accent]Koppintással[] utasíthatók az egységek mozgásra vagy támadásra.
aegis.tungsten = Volfrámot [accent]ütvefúróval[] lehet bányászni.\nEnnek az épületnek [accent]vízre[] és [accent]áramra[] van szüksége.
onset.commandmode = Tartsd nyomva a [accent]Shift[] gombot, hogy [accent]parancs módba[] lépj.\n[accent]Bal egérgombbal és húzással[] lehet egységeket kijelölni.\n[accent]Jobb egérgombbal[] az egységek mozgásra vagy támadásra utasíthatóak.
onset.commandmode.mobile = Nyomd meg a [accent]parancs gombot[], hogy [accent]parancs módba[] lépj.\nTartsd nyomva az ujjad, majd [accent]húzd[] az egységek kiválasztásához.\n[accent]Koppintással[] az egységek mozgásra vagy támadásra utasíthatóak.
aegis.tungsten = Volfrámot [accent]Ütvefúróval[] lehet bányászni.\nEnnek az épületnek [accent]vízre[] és [accent]áramra[] van szüksége.
split.pickup = Egyes blokkok a támaszpont drónjával is felvehetők.\nVedd fel ezt a [accent]konténert[] és helyezd egy [accent]rakománycsomagolóba[].\n(A felvétel és lerakás alapértelmezett gombjai: [[ és ].)
split.pickup.mobile = Egyes blokkok a támaszpont drónjával is felvehetők.\nVedd fel ezt a [accent]konténert[] és helyezd egy [accent]rakománycsomagolóba[].\n(A felvételhez és lerakáshoz nyomd meg hosszan.)
split.pickup = Egyes blokkok a támaszpont drónjával is felvehetőek.\nVedd fel ezt a [accent]konténert[] és helyezd egy [accent]rakománycsomagolóba[].\n(A felvétel és lerakás alapértelmezett gombjai: [[ és ].)
split.pickup.mobile = Egyes blokkok a támaszpont drónjával is felvehetőek.\nVedd fel ezt a [accent]konténert[] és helyezd egy [accent]rakománycsomagolóba[].\n(A felvételhez és lerakáshoz nyomd meg hosszan.)
split.acquire = Az egységek építéséhez volfrámot kell szerezned.
split.build = Az egységeket a fal másik oldalára kell eljuttatni.\nÉpíts két [accent]rakomány-tömegmozgatót[], egyet-egyet a fal mindkét oldalán.\nÁllítsd be a szállítási kapcsolatukat úgy, hogy kiválasztod az egyiket, majd kiválasztod a másikat.
split.container = A konténerekhez hasonlóan, az egységek is szállíthatók a [accent]rakomány-tömegmozgatóval[].\nÉpíts egy egységgyárat egy tömegmozgató mellé, hogy feltöltsd őket, majd küldd át őket a falon, hogy megtámadják az ellenséges bázist.
split.build = Az egységeket a fal másik oldalára kell eljuttatni.\nÉpíts két [accent]Rakomány-tömegmozgatót[], egyet-egyet a fal mindkét oldalán.\nÁllítsd be a szállítási kapcsolatukat úgy, hogy kiválasztod az egyiket, majd kiválasztod a másikat.
split.container = A konténerekhez hasonlóan, az egységek is szállíthatóak a [accent]Rakomány-tömegmozgatóval[].\nÉpíts egy egységgyárat egy tömegmozgató mellé, hogy feltöltsd őket, majd küldd át őket a falon, hogy megtámadják az ellenséges bázist.
item.copper.description = Széleskörűen használatos építkezésnél és lőszerként.
item.copper.details = Réz. Szokatlanul bőséges fém a Serpulón. Megerősítés nélkül strukturálisan gyenge.
item.copper.details = Réz. Szokatlanul bőségesen elterjedt fém a Serpulón. Megerősítés nélkül strukturálisan gyenge.
item.lead.description = Folyadékszállításnál és elektromos eszközökben használatos.
item.lead.details = Sűrű. Közömbös. Széles körben használatos az akkumulátorokban.\nMegjegyzés: Valószínűleg mérgező a biológiai életformákra. Nem mintha sok maradt volna errefelé.
item.metaglass.description = Folyadékszállító és -tárolóépületeknél használatos.
@@ -2025,15 +2040,15 @@ block.message.description = Üzenetet tárol a szövetségesek kommunikációjá
block.reinforced-message.description = Üzenetet tárol a szövetségesek közötti kommunikációhoz.
block.world-message.description = A pályakészítésben használható üzenetblokk. Nem lehet megsemmisíteni.
block.graphite-press.description = Grafittá préseli a szenet.
block.multi-press.description = Grafittá préseli a szenet. Hűtése vizet igényel.
block.silicon-smelter.description = A homokot és szenet szilíciummá finomítja.
block.multi-press.description = Grafittá sajtolja a szenet. Hűtése vizet igényel.
block.silicon-smelter.description = A homokot és a szenet szilíciummá finomítja.
block.kiln.description = Ólomüveget olvaszt az ólomból és a homokból.
block.plastanium-compressor.description = Olaj és titán felhasználásával műanyagot gyárt.
block.phase-weaver.description = Tórium és homok keverékéből tóritkvarcot állít elő.
block.surge-smelter.description = Titán, ólom, szilícium és réz ötvözésével elektrometált állít elő.
block.cryofluid-mixer.description = Finom titánpor vízhez keverésével hűtőfolyadékot állít elő.
block.blast-mixer.description = Robbanóelegyet készít a piratitból és a spórakapszulákból.
block.pyratite-mixer.description = Piratittá vegyíti a szenet, homokot és ólmot.
block.pyratite-mixer.description = Piratittá vegyíti a szenet, a homokot és az ólmot.
block.melter.description = Salakká olvasztja a törmeléket.
block.separator.description = Ásványi összetevőire bontja a salakot.
block.spore-press.description = Olajat sajtol a spórakapszulából.
@@ -2084,7 +2099,7 @@ block.mass-driver.description = Nagy hatótávolságú nyersanyagszállító esz
block.mechanical-pump.description = Folyadékot szivattyúz és ad ki. Nem igényel áramot.
block.rotary-pump.description = Folyadékot szivattyúz és ad ki. Áramot igényel.
block.impulse-pump.description = Folyadékot szivattyúz és ad ki.
block.conduit.description = Folyadékot szállít. Pumpákkal és egyéb csővezetékekkel együtt használatos.
block.conduit.description = Folyadékot szállít. Szivattyúkkal és egyéb csővezetékekkel együtt használatos.
block.pulse-conduit.description = Folyadékot szállít. Gyorsabban szállít, és nagyobb tárolókapacitású, mint a szokásos csővezeték.
block.plated-conduit.description = Folyadékot szállít. Nem fogad el folyadékot oldalról. Nem szivárog, ha nincs a végén semmi.
block.liquid-router.description = Egyenletesen háromfelé osztja szét a beérkező folyadékot. Bizonyos mennyiség tárolására is képes.
@@ -2149,11 +2164,11 @@ block.tsunami.description = Erős folyadékhullámot lő az ellenségre. Eloltja
block.silicon-crucible.description = Szilíciumot finomít homokból és szénből, piratitot használ kiegészítő hőforrásként. Forró környezetben még hatékonyabb.
block.disassembler.description = Ritka ásványi összetevőket válogat ki a salakból, alacsony hatékonysággal. Képes tóriumot kiválogatni.
block.overdrive-dome.description = Megnöveli a környező épületek termelési sebességét. A működtetése tóritkvarcot és szilíciumot igényel.
block.payload-conveyor.description = Nagy mennyiségű terhet mozgatni, például gyárakból érkező nyersanyagokat. Mágneses. Használható súlytalanságban.
block.payload-conveyor.description = Nagy méretű terhet mozgat, például gyárakból érkező egységeket. Mágneses. Használható súlytalanságban.
block.payload-router.description = Háromfelé osztja szét a beérkező terhet. Rendezőként is szolgál, ha van megadva szűrő. Mágneses. Használható súlytalanságban.
block.ground-factory.description = Földi egységeket gyárt. A kész egységek azonnal hadra foghatók, vagy újratervezőkben továbbfejleszthetők.
block.air-factory.description = Légi egységeket gyárt. A kész egységek azonnal hadra foghatók, vagy újratervezőkben továbbfejleszthetők.
block.naval-factory.description = Vízi egységeket gyárt. A kész egységek azonnal hadra foghatók, vagy újratervezőkben továbbfejleszthetők.
block.ground-factory.description = Földi egységeket gyárt. Az elkészült egységek azonnal hadra foghatóak, vagy újratervezőkben továbbfejleszthetőek.
block.air-factory.description = Légi egységeket gyárt. Az elkészült egységek azonnal hadra foghatóak, vagy újratervezőkben továbbfejleszthetőek.
block.naval-factory.description = Vízi egységeket gyárt. Az elkészült egységek azonnal hadra foghatóak, vagy újratervezőkben továbbfejleszthetőek.
block.additive-reconstructor.description = Kettes szintre fejleszti a beérkező egységeket.
block.multiplicative-reconstructor.description = Hármas szintre fejleszti a beérkező egységeket.
block.exponential-reconstructor.description = Négyes szintre fejleszti a beérkező egységeket.
@@ -2183,7 +2198,7 @@ block.lustre.description = Lassan mozgó, egyszerre egy célpontra ható lézert
block.scathe.description = Nagy erejű rakétát indít jelentős távolságokra lévő földi célpontok ellen.
block.smite.description = Átütő erejű, villámló lövedékeket lő ki.
block.malign.description = Lézertöltetekből álló célzott sortüzet zúdít az ellenséges célpontokra. Jelentős fűtést igényel.
block.silicon-arc-furnace.description = A homokot és grafitot szilíciummá finomítja.
block.silicon-arc-furnace.description = A homokot és a grafitot szilíciummá finomítja.
block.oxidation-chamber.description = A berilliumot és az ózont oxiddá alakítja. Melléktermékként hőt bocsát ki.
block.electric-heater.description = Fűti a vele szemben álló épületeket. Nagy mennyiségű áramot igényel.
block.slag-heater.description = Fűti a vele szemben álló épületeket. Salakot igényel.
@@ -2242,9 +2257,9 @@ block.build-tower.description = Automatikusan újjáépíti a hatósugarában l
block.regen-projector.description = Lassan javítja a szövetséges építményeket egy négyzet alakú területen. Hidrogént igényel.\nTóritkvarc felhasználásával növelhető a hatékonysága.
block.reinforced-container.description = Kis mennyiségű nyersanyagot tud tárolni. A tartalma kirakodók segítségével nyerhető ki. Nem növeli a támaszpont tárolókapacitását.
block.reinforced-vault.description = Nagy mennyiségű nyersanyagot tud tárolni. A tartalma kirakodók segítségével nyerhető ki. Nem növeli a támaszpont tárolókapacitását.
block.tank-fabricator.description = Stell egységeket épít. A kimeneti egységek közvetlenül használhatók, vagy fejlesztésre újratervezőkbe küldhetők.
block.ship-fabricator.description = Elude egységeket épít. A kimeneti egységek közvetlenül használhatók, vagy fejlesztésre újratervezőkbe küldhetők.
block.mech-fabricator.description = Merui egységeket épít. A kimeneti egységek közvetlenül használhatók, vagy fejlesztésre újratervezőkbe küldhetők.
block.tank-fabricator.description = Stell egységeket épít. Az elkészült egységek azonnal hadra foghatóak, vagy újratervezőkben továbbfejleszthetőek.
block.ship-fabricator.description = Elude egységeket épít. Az elkészült egységek azonnal hadra foghatóak, vagy újratervezőkben továbbfejleszthetőek.
block.mech-fabricator.description = Merui egységeket épít. Az elkészült egységek azonnal hadra foghatóak, vagy újratervezőkben továbbfejleszthetőek.
block.tank-assembler.description = Nagy méretű tankokat állít össze a beadott blokkokból és egységekből. A kimeneti szint modulok hozzáadásával növelhető.
block.ship-assembler.description = Nagy méretű hajókat állít össze a beadott blokkokból és egységekből. A kimeneti szint modulok hozzáadásával növelhető.
block.mech-assembler.description = Nagy méretű mecheket állít össze a beadott blokkokból és egységekből. A kimeneti szint modulok hozzáadásával növelhető.
@@ -2452,7 +2467,7 @@ graphicstype.poly = Egy szabályos sokszög kitöltése.
graphicstype.linepoly = Szabályos sokszög körvonalának rajzolása.
graphicstype.triangle = Egy háromszög kitöltése.
graphicstype.image = Kép rajzolása valamilyen tartalomról.\nPéldául: [accent]@router[] vagy [accent]@dagger[].
graphicstype.print = Szöveget rajzol a kiírási pufferből.\nCsak ASCII karakterek használhatók.\nTörli a kiírás puffert.
graphicstype.print = Szöveget rajzol a kiírási pufferből.\nCsak ASCII karakterek használhatóak.\nTörli a kiírás puffert.
lenum.always = Mindig igaz.
lenum.idiv = Egész osztás.

View File

@@ -439,6 +439,11 @@ editor.rules = Peraturan:
editor.generation = Generasi:
editor.objectives = Tujuan
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Sunting dalam Permainan
editor.playtest = Tes Bermain
editor.publish.workshop = Terbitkan di Workshop
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Standar>
details = Detail...
edit = Sunting...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nama:
editor.spawn = Munculkan Unit
@@ -584,6 +590,7 @@ filter.clear = Bersih
filter.option.ignore = Biarkan
filter.scatter = Penebaran
filter.terrain = Lahan
filter.logic = Logic
filter.option.scale = Ukuran
filter.option.chance = Kemungkinan
@@ -607,6 +614,8 @@ filter.option.floor2 = Lantai Sekunder
filter.option.threshold2 = Ambang Sekunder
filter.option.radius = Radius
filter.option.percentile = Perseratus
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -982,6 +991,7 @@ stat.abilities = Kemampuan
stat.canboost = Dapat Dipercepat
stat.flying = Terbang
stat.ammouse = Penggunaan Amunisi
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Penggandaan Kekuatan (dmg)
stat.healthmultiplier = Penggandaan Darah
stat.speedmultiplier = Penggandaan Kecepatan
@@ -1107,6 +1117,7 @@ unit.items = bahan
unit.thousands = rb
unit.millions = jt
unit.billions = m
unit.shots = shots
unit.pershot = /tembakan
category.purpose = Kegunaan
category.general = Umum

View File

@@ -437,6 +437,11 @@ editor.rules = Regole:
editor.generation = Generazione:
editor.objectives = Obbiettivi
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Modifica in Gioco
editor.playtest = Playtest
editor.publish.workshop = Pubblica nel Workshop
@@ -493,6 +498,7 @@ editor.default = [lightgray]<Predefinito>
details = Dettagli...
edit = Modifica...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nome:
editor.spawn = Piazza un'Unità
@@ -580,6 +586,7 @@ filter.clear = Resetta Filtro
filter.option.ignore = Ignora
filter.scatter = Dispersione
filter.terrain = Terreno
filter.logic = Logic
filter.option.scale = Scala
filter.option.chance = Probabilità
filter.option.mag = Magnitudine
@@ -602,6 +609,8 @@ filter.option.floor2 = Terreno Secondario
filter.option.threshold2 = Soglia Secondaria
filter.option.radius = Raggio
filter.option.percentile = Percentuale
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -968,6 +977,7 @@ stat.abilities = Abilità
stat.canboost = Capace di Potenziamento
stat.flying = Volo
stat.ammouse = Consumo di munizioni
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Moltiplicatore danni
stat.healthmultiplier = Moltiplicatore salute
stat.speedmultiplier = Moltiplicatore velocità
@@ -1094,6 +1104,7 @@ unit.items = oggetti
unit.thousands = k
unit.millions = mln
unit.billions = mld
unit.shots = shots
unit.pershot = /colpo
category.purpose = Scopo
category.general = Generali

View File

@@ -439,6 +439,11 @@ editor.rules = ルール:
editor.generation = 生成:
editor.objectives = オブジェクティブ
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = ゲーム内で編集する
editor.playtest = Playtest
editor.publish.workshop = ワークショップで公開
@@ -495,6 +500,7 @@ editor.default = [lightgray]<デフォルト>
details = 詳細...
edit = 編集...
variables = 変数
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = 名前:
editor.spawn = ユニットを出す
@@ -583,6 +589,7 @@ filter.clear = クリア
filter.option.ignore = 無視
filter.scatter = 分散
filter.terrain = 地形
filter.logic = Logic
filter.option.scale = スケール
filter.option.chance = 確率
@@ -606,6 +613,8 @@ filter.option.floor2 = 2番目の地面
filter.option.threshold2 = 2番目の閾値
filter.option.radius = 半径
filter.option.percentile = パーセンタイル
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -974,6 +983,7 @@ stat.abilities = 能力
stat.canboost = ブースト可能
stat.flying = 飛行
stat.ammouse = 使用弾薬
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = ダメージ倍率
stat.healthmultiplier = 体力倍率
stat.speedmultiplier = スピード倍率
@@ -1100,6 +1110,7 @@ unit.items = アイテム
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /発
category.purpose = 説明
category.general = 一般

View File

@@ -438,6 +438,11 @@ editor.rules = 규칙
editor.generation = 지형 생성
editor.objectives = 목표
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = 인게임 편집
editor.playtest = 맵 테스트
editor.publish.workshop = 창작마당 게시
@@ -494,6 +499,7 @@ editor.default = [lightgray]<기본값>
details = 설명...
edit = 편집...
variables = 변수
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = 이름:
editor.spawn = 기체 생성
@@ -583,6 +589,7 @@ filter.clear = 초기화
filter.option.ignore = 무시
filter.scatter = 흩뿌리기
filter.terrain = 지형
filter.logic = Logic
filter.option.scale = 크기
filter.option.chance = 배치 빈도
@@ -606,6 +613,8 @@ filter.option.floor2 = 2번째 타일
filter.option.threshold2 = 2번째 경계선
filter.option.radius = 반경
filter.option.percentile = 백분율
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -974,6 +983,7 @@ stat.abilities = 능력
stat.canboost = 이륙 가능
stat.flying = 비행
stat.ammouse = 탄약 사용
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = 피해량 배수
stat.healthmultiplier = 체력 배수
stat.speedmultiplier = 이동속도 배수
@@ -1099,6 +1109,7 @@ unit.items = 자원
unit.thousands = k
unit.millions = m
unit.billions = b
unit.shots = shots
unit.pershot = /발
category.purpose = 목적
category.general = 일반

View File

@@ -435,6 +435,11 @@ editor.rules = Taisyklės:
editor.generation = Generacija:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Redaguoti žaidime
editor.playtest = Playtest
editor.publish.workshop = Publikuoti Dirbtuvėje
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Numatytasis>
details = Detaliau...
edit = Redaguoti...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Pavadinimas:
editor.spawn = Atradinti vienetą
@@ -577,6 +583,7 @@ filter.clear = Išvalyti
filter.option.ignore = ignoruoti
filter.scatter = Išsklaidyti
filter.terrain = Reljefas
filter.logic = Logic
filter.option.scale = Mastelis
filter.option.chance = Tikimybė
filter.option.mag = Didumas
@@ -599,6 +606,8 @@ filter.option.floor2 = Antrasis sluoksnis
filter.option.threshold2 = Antrasis slenkstis
filter.option.radius = Spindulys
filter.option.percentile = Procentilė
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = daiktai
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = Bendra

View File

@@ -443,6 +443,11 @@ editor.rules = Regels:
editor.generation = Generatie:
editor.objectives = Doelen
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Bewerk In-Spel
editor.playtest = Speeltest
editor.publish.workshop = Publiceer in Werkplaats
@@ -498,6 +503,7 @@ editor.default = [lightgray]<Standaard>
details = Details...
edit = Bewerk...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Naam:
editor.spawn = Voeg Eenheid toe
@@ -586,6 +592,7 @@ filter.clear = Verwijder
filter.option.ignore = Negeer
filter.scatter = Verstrooi
filter.terrain = Terrein
filter.logic = Logic
filter.option.scale = Schaal
filter.option.chance = Verander
@@ -609,6 +616,8 @@ filter.option.floor2 = Secundaire Vloer
filter.option.threshold2 = Secundaire Drempel
filter.option.radius = Straal
filter.option.percentile = percentiel
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -975,6 +984,7 @@ stat.abilities = Capaciteiten
stat.canboost = Kan Boosten
stat.flying = Vliegende
stat.ammouse = Ammunitie gebruik
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Schade Vermenigvuldiger
stat.healthmultiplier = Levenspunten Vermenigvuldiger
stat.speedmultiplier = Snelheids Vermenigvuldiger
@@ -1101,6 +1111,7 @@ unit.items = materialen
unit.thousands = k
unit.millions = mln
unit.billions = mjd
unit.shots = shots
unit.pershot = /schot
category.purpose = Doel
category.general = Algemeen

View File

@@ -435,6 +435,11 @@ editor.rules = Rules:
editor.generation = Generation:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edit In-Game
editor.playtest = Playtest
editor.publish.workshop = Publish On Workshop
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Name:
editor.spawn = Spawn Unit
@@ -577,6 +583,7 @@ filter.clear = Clear
filter.option.ignore = Ignore
filter.scatter = Scatter
filter.terrain = Terrain
filter.logic = Logic
filter.option.scale = Scale
filter.option.chance = Chance
filter.option.mag = Magnitude
@@ -599,6 +606,8 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = items
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = General

View File

@@ -439,6 +439,11 @@ editor.rules = Zasady:
editor.generation = Generacja:
editor.objectives = Cele
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edytuj w Grze
editor.playtest = Testuj Mapę
editor.publish.workshop = Opublikuj w Warsztacie
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Domyślne>
details = Detale...
edit = Edytuj...
variables = Zmienne
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nazwa:
editor.spawn = Stwórz Jednostkę
@@ -582,6 +588,7 @@ filter.clear = Oczyść
filter.option.ignore = Ignoruj
filter.scatter = Rozprosz
filter.terrain = Teren
filter.logic = Logic
filter.option.scale = Skala
filter.option.chance = Szansa
filter.option.mag = Wielkość
@@ -604,6 +611,8 @@ filter.option.floor2 = Druga Podłoga
filter.option.threshold2 = Drugi Próg
filter.option.radius = Zasięg
filter.option.percentile = Procent
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -972,6 +981,7 @@ stat.abilities = Umiejętności
stat.canboost = Może przyspieszyć
stat.flying = Może latać
stat.ammouse = Zużycie Amunicji
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Mnożnik Obrażeń
stat.healthmultiplier = Mnożnik Zdrowia
stat.speedmultiplier = Mnożnik Prędkości
@@ -1098,6 +1108,7 @@ unit.items = przedmioty
unit.thousands = tys.
unit.millions = mln.
unit.billions = mld.
unit.shots = shots
unit.pershot = /strzał
category.purpose = Opis
category.general = Główne

View File

@@ -439,6 +439,11 @@ editor.rules = Regras:
editor.generation = Geração:
editor.objectives = Objetivos:
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Editar em jogo
editor.playtest = Jogar Teste
editor.publish.workshop = Publicar na oficina
@@ -495,6 +500,7 @@ editor.default = [lightgray]<padrão>
details = Detalhes...
edit = Editar...
variables = Variáveis
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nome:
editor.spawn = Spawnar unidade
@@ -584,6 +590,7 @@ filter.clear = Excluir
filter.option.ignore = Ignorar
filter.scatter = Dispersão
filter.terrain = Terreno
filter.logic = Logic
filter.option.scale = Escala
filter.option.chance = Chance
@@ -607,6 +614,8 @@ filter.option.floor2 = Chão secundário
filter.option.threshold2 = Margem secundária
filter.option.radius = Raio
filter.option.percentile = Percentual
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -983,6 +992,7 @@ stat.abilities = Habilidades
stat.canboost = Pode impulsionar
stat.flying = Voador
stat.ammouse = Consumo de Munição
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Multiplicador de Dano
stat.healthmultiplier = Multiplicador de Vida
stat.speedmultiplier = Multiplicador de Velocidade
@@ -1108,6 +1118,7 @@ unit.items = itens
unit.thousands = k
unit.millions = m
unit.billions = b
unit.shots = shots
unit.pershot = /disparo
category.purpose = Propósito
category.general = Geral

View File

@@ -435,6 +435,11 @@ editor.rules = Regras:
editor.generation = Geração:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Editar em jogo
editor.playtest = Playtest
editor.publish.workshop = Publicar na oficina
@@ -490,6 +495,7 @@ editor.default = [lightgray]<padrão>
details = Detalhes...
edit = Editar...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nome:
editor.spawn = Criar unidade
@@ -577,6 +583,7 @@ filter.clear = Excluir
filter.option.ignore = Ignorar
filter.scatter = Dispersão
filter.terrain = Terreno
filter.logic = Logic
filter.option.scale = Escala
filter.option.chance = Chance
filter.option.mag = Magnitude
@@ -599,6 +606,8 @@ filter.option.floor2 = Chão secundário
filter.option.threshold2 = Margem secundária
filter.option.radius = Raio
filter.option.percentile = Percentual
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = itens
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = Geral

View File

@@ -439,6 +439,11 @@ editor.rules = Reguli:
editor.generation = Generare:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Editează în Joc
editor.playtest = Playtest
editor.publish.workshop = Publică pe Workshop
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Prestabilit>
details = Detalii...
edit = Editează...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Nume:
editor.spawn = Adaugă Unitate
@@ -583,6 +589,7 @@ filter.clear = Curăță
filter.option.ignore = Ignoră
filter.scatter = Împrăștie
filter.terrain = Teren
filter.logic = Logic
filter.option.scale = Scară
filter.option.chance = Șansă
@@ -606,6 +613,8 @@ filter.option.floor2 = Podea Secundară
filter.option.threshold2 = Cantitate Secundară
filter.option.radius = Rază
filter.option.percentile = Procent
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -974,6 +983,7 @@ stat.abilities = Abilități
stat.canboost = Are Propulsor
stat.flying = Zboară
stat.ammouse = Consum muniție
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Multiplicator Forță
stat.healthmultiplier = Multiplicator Viață
stat.speedmultiplier = Multiplicator Viteză
@@ -1100,6 +1110,7 @@ unit.items = materiale
unit.thousands = mii
unit.millions = mil
unit.billions = mld
unit.shots = shots
unit.pershot = /lovitură
category.purpose = Utilizare
category.general = General

View File

@@ -439,6 +439,11 @@ editor.rules = Правила:
editor.generation = Генерация:
editor.objectives = Цели
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Редактировать в игре
editor.playtest = Опробовать карту
editor.publish.workshop = Опубликовать в Мастерской
@@ -495,6 +500,7 @@ editor.default = [lightgray]<По умолчанию>
details = Подробности…
edit = Редактировать…
variables = Переменные
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Название:
editor.spawn = Создать боевую единицу
@@ -583,6 +589,7 @@ filter.clear = Очистить
filter.option.ignore = Игнорировать
filter.scatter = Сеятель
filter.terrain = Ландшафт
filter.logic = Logic
filter.option.scale = Масштаб фильтра
filter.option.chance = Шанс
@@ -606,6 +613,8 @@ filter.option.floor2 = Вторая поверхность
filter.option.threshold2 = Вторичный предельный порог
filter.option.radius = Радиус
filter.option.percentile = Процентиль
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -975,6 +984,7 @@ stat.abilities = Способности
stat.canboost = Может взлететь
stat.flying = Летающий
stat.ammouse = Использование боеприпасов
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Множитель урона
stat.healthmultiplier = Множитель прочности
stat.speedmultiplier = Множитель скорости
@@ -1100,6 +1110,7 @@ unit.items = предметов
unit.thousands = к
unit.millions = М
unit.billions = кM
unit.shots = shots
unit.pershot = /выстрел
category.purpose = Назначение
category.general = Основные

View File

@@ -439,6 +439,11 @@ editor.rules = Pravila:
editor.generation = Generisanje:
editor.objectives = Zadaci
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Izmeni "U Igri"
editor.playtest = Testiranje
editor.publish.workshop = Objavi u Radionicu
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Default>
details = Detalji...
edit = Izmeni...
variables = Varijabla
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Ime:
editor.spawn = Prizovi Jedinicu
@@ -583,6 +589,7 @@ filter.clear = Očisti
filter.option.ignore = Ignoriši
filter.scatter = Razbaci
filter.terrain = Teren
filter.logic = Logic
filter.option.scale = Razmera
filter.option.chance = Šansa
@@ -606,6 +613,8 @@ filter.option.floor2 = Drugi Pod
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -976,6 +985,7 @@ stat.abilities = Spospbnosti
stat.canboost = Može lebdeti
stat.flying = Leteća jedinica
stat.ammouse = Upotreba municije
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Umnožavač štete
stat.healthmultiplier = Umnožavač izdržljivosti
stat.speedmultiplier = Umnožavač brzine
@@ -1102,6 +1112,7 @@ unit.items = materijali
unit.thousands = hiljade
unit.millions = milioni
unit.billions = milijarde
unit.shots = shots
unit.pershot = /pucnju
category.purpose = Namena
category.general = Opšte

View File

@@ -435,6 +435,11 @@ editor.rules = Regler:
editor.generation = Generering:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edit In-Game
editor.playtest = Playtest
editor.publish.workshop = Publish On Workshop
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Redigera...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Namn:
editor.spawn = Spawn Unit
@@ -577,6 +583,7 @@ filter.clear = Rensa
filter.option.ignore = Ignorera
filter.scatter = Sprid
filter.terrain = Terräng
filter.logic = Logic
filter.option.scale = Skala
filter.option.chance = Chans
filter.option.mag = Magnitud
@@ -599,6 +606,8 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radie
filter.option.percentile = Percentile
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = föremål
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = Allmänt

View File

@@ -439,6 +439,11 @@ editor.rules = กฎ
editor.generation = เจนเนอเรชั่น
editor.objectives = เป้าหมาย
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = แก้ไขในเกม
editor.playtest = เล่นทดสอบ
editor.publish.workshop = เผยแพร่บนเวิร์กช็อป
@@ -495,6 +500,7 @@ editor.default = [lightgray]<ค่าเริ่มต้น>
details = รายละเอียด...
edit = แก้ไข...
variables = ตัวแปร
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = ชื่อ:
editor.spawn = สร้างยูนิต
@@ -583,6 +589,7 @@ filter.clear = เคลียร์
filter.option.ignore = เพิกเฉย
filter.scatter = กระจาย
filter.terrain = พื้นผิว
filter.logic = Logic
filter.option.scale = มาตราส่วน
filter.option.chance = โอกาส
@@ -606,6 +613,8 @@ filter.option.floor2 = พื้นชั้นสอง
filter.option.threshold2 = เกณฑ์ชั้นสอง
filter.option.radius = รัศมี
filter.option.percentile = เปอร์เซ็นต์ไทล์
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -976,6 +985,7 @@ stat.abilities = ทักษะ
stat.canboost = บูสต์ได้
stat.flying = บินได้
stat.ammouse = การใช้กระสุน
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = พหุคูณดาเมจ
stat.healthmultiplier = พหุคูณพลังชีวิต
stat.speedmultiplier = พหุคูณความเร็ว
@@ -1101,6 +1111,7 @@ unit.items = ไอเท็ม
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /การยิง
category.purpose = วัตถุประสงค์
category.general = ทั่วไป

View File

@@ -435,6 +435,11 @@ editor.rules = Rules:
editor.generation = Generation:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Edit In-Game
editor.playtest = Playtest
editor.publish.workshop = Publish On Workshop
@@ -490,6 +495,7 @@ editor.default = [lightgray]<Default>
details = Details...
edit = Edit...
variables = Vars
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = isim:
editor.spawn = Spawn Unit
@@ -577,6 +583,7 @@ filter.clear = Clear
filter.option.ignore = Ignore
filter.scatter = Scatter
filter.terrain = Terrain
filter.logic = Logic
filter.option.scale = Scale
filter.option.chance = Chance
filter.option.mag = Magnitude
@@ -599,6 +606,8 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -963,6 +972,7 @@ stat.abilities = Abilities
stat.canboost = Can Boost
stat.flying = Flying
stat.ammouse = Ammo Use
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
@@ -1089,6 +1099,7 @@ unit.items = esya
unit.thousands = k
unit.millions = mil
unit.billions = b
unit.shots = shots
unit.pershot = /shot
category.purpose = Purpose
category.general = General

View File

@@ -439,6 +439,11 @@ editor.rules = Kurallar:
editor.generation = Oluşum:
editor.objectives = Görevler:
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Oyun içinde düzenle
editor.playtest = Test Et
editor.publish.workshop = Atölyede Yayınla
@@ -495,6 +500,7 @@ editor.default = [lightgray]<Varsayılan>
details = Detaylar...
edit = Düzenle...
variables = Değişkenler
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = İsim:
editor.spawn = Birim Oluştur
@@ -583,6 +589,7 @@ filter.clear = Temizle
filter.option.ignore = Yoksay
filter.scatter = Saç
filter.terrain = Arazi
filter.logic = Logic
filter.option.scale = Ölçek
filter.option.chance = Şans
@@ -606,6 +613,8 @@ filter.option.floor2 = İkincil Duvar
filter.option.threshold2 = İkincil Eşik
filter.option.radius = Yarıçap
filter.option.percentile = Yüzdelik
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -973,6 +982,7 @@ stat.abilities = Kabiliyetler
stat.canboost = İstekli Uçabilir
stat.flying = Uçuyor
stat.ammouse = Mermi Kullanıyor
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Hasar Çarpanı
stat.healthmultiplier = Can Çarpanı
stat.speedmultiplier = Hız Çarpanı
@@ -1098,6 +1108,7 @@ unit.items = eşya
unit.thousands = k
unit.millions = m
unit.billions = b
unit.shots = shots
unit.pershot = /vuruş
category.purpose = ıklama
category.general = Genel

View File

@@ -441,6 +441,11 @@ editor.rules = Правила
editor.generation = Генерація
editor.objectives = Завдання
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = Редагувати в грі
editor.playtest = Протестувати в грі
editor.publish.workshop = Опублікувати в Майстерні Steam
@@ -497,6 +502,7 @@ editor.default = [lightgray]<За замовчуванням>
details = Подробиці…
edit = Змінити…
variables = Змінні
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = Ім’я:
editor.spawn = Створити бойову одиницю
@@ -586,6 +592,7 @@ filter.clear = Очистити
filter.option.ignore = Ігнорувати
filter.scatter = Розсіювач
filter.terrain = Ландшафт
filter.logic = Logic
filter.option.scale = Масштаб фільтра
filter.option.chance = Шанс
@@ -609,6 +616,8 @@ filter.option.floor2 = Друга поверхня
filter.option.threshold2 = Вторинний граничний поріг
filter.option.radius = Радіус
filter.option.percentile = Спад
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -984,6 +993,7 @@ stat.abilities = Здібності
stat.canboost = Можна прискорити
stat.flying = Літає
stat.ammouse = Патронів використовує
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = Множник шкоди
stat.healthmultiplier = Множник здоров’я
stat.speedmultiplier = Множник швидкості
@@ -1109,6 +1119,7 @@ unit.items = предм.
unit.thousands = тис
unit.millions = млн
unit.billions = млрд
unit.shots = shots
unit.pershot = за постріл
category.purpose = Призначення
category.general = Загальне

File diff suppressed because it is too large Load Diff

View File

@@ -442,6 +442,11 @@ editor.rules = 规则
editor.generation = 生成
editor.objectives = 目标
editor.locales = 本地化语言包
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = 游戏内编辑
editor.playtest = 游戏内测试
editor.publish.workshop = 上传到创意工坊
@@ -498,6 +503,7 @@ editor.default = [lightgray]<默认>
details = 详情…
edit = 编辑…
variables = 变量
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = 内置变量
editor.name = 名称:
editor.spawn = 生成单位
@@ -587,6 +593,7 @@ filter.clear = 替换
filter.option.ignore = 忽略
filter.scatter = 散布
filter.terrain = 地图边界
filter.logic = Logic
filter.option.scale = 缩放
filter.option.chance = 散布数量
@@ -610,6 +617,8 @@ filter.option.floor2 = 内层地形
filter.option.threshold2 = 内层比例
filter.option.radius = 半径
filter.option.percentile = 百分比
filter.option.code = Code
filter.option.loop = Loop
locales.info = 在这里,您可以为特定语言添加本地化语言包到您的地图中。在本地化语言包中,每个文本属性都有一个名称和一个值。这些文本属性可以由世界处理器和游戏目标使用它们的名称。它们支持文本格式化(用实际值替换占位符)。\n\n[cyan]示例文本属性:\n[]名称: [accent]timer[]值: [accent]示例计时器, 剩余时间: {0}[]\n\n[cyan]用法:\n[]将其设置为目标的文本: [accent]@timer\n\n[]在世界处理器中打印它:\n[accent]localeprint "timer"\n格式化时间\n[gray](时间是一个单独计算的变量)
locales.deletelocale = 您确定要删除该本地化语言包吗?
locales.applytoall = 将更改应用于所有本地化语言包
@@ -985,6 +994,7 @@ stat.abilities = 能力
stat.canboost = 可助推
stat.flying = 空中单位
stat.ammouse = 弹药
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = 伤害倍率
stat.healthmultiplier = 生命值倍率
stat.speedmultiplier = 移动速度倍率
@@ -1111,6 +1121,7 @@ unit.items = 物品
unit.thousands = K
unit.millions = M
unit.billions = B
unit.shots = shots
unit.pershot = /发
category.purpose = 用途
category.general = 基础

View File

@@ -439,6 +439,11 @@ editor.rules = 規則:
editor.generation = 自動生成:
editor.objectives = Objectives
editor.locales = Locale Bundles
editor.worldprocessors = World Processors
editor.worldprocessors.editname = Edit Name
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.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.ingame = 在遊戲中編輯
editor.playtest = 測試
editor.publish.workshop = 在工作坊上發佈
@@ -495,6 +500,7 @@ editor.default = [lightgray](預設)
details = 詳細資訊……
edit = 編輯……
variables = 變數
logic.clear.confirm = Are you sure you want to clear all code from this processor?
logic.globals = Built-in Variables
editor.name = 名稱:
editor.spawn = 重生單位
@@ -584,6 +590,7 @@ filter.clear = 清除
filter.option.ignore = 忽略
filter.scatter = 分散
filter.terrain = 地形
filter.logic = Logic
filter.option.scale = 規模
filter.option.chance = 機會
@@ -607,6 +614,8 @@ filter.option.floor2 = 次要地板
filter.option.threshold2 = 次要閾值
filter.option.radius = 半徑
filter.option.percentile = 百分比
filter.option.code = Code
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.deletelocale = Are you sure you want to delete this locale bundle?
locales.applytoall = Apply Changes To All Locales
@@ -981,6 +990,7 @@ stat.abilities = 能力
stat.canboost = 推進器
stat.flying = 飛行單位
stat.ammouse = 彈藥使用
stat.ammocapacity = Ammo Capacity
stat.damagemultiplier = 傷害加成
stat.healthmultiplier = 血量加成
stat.speedmultiplier = 速度加成
@@ -1106,6 +1116,7 @@ unit.items = 物品
unit.thousands = K
unit.millions = M
unit.billions = B
unit.shots = shots
unit.pershot = /發
category.purpose = 用途
category.general = 一般

View File

@@ -166,3 +166,4 @@ BalaM314
Redstonneur1256
ApsZoldat
Mythril
hexagon-recursion

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -66,7 +66,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
Time.setDeltaProvider(() -> {
float result = Core.graphics.getDeltaTime() * 60f;
return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Mathf.clamp(result, 0.0001f, 60f / 10f);
return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Mathf.clamp(result, 0.0001f, maxDeltaClient);
});
UI.loadColors();

View File

@@ -137,6 +137,13 @@ public class Vars implements Loadable{
Color.valueOf("4b5ef1"),
Color.valueOf("2cabfe"),
};
/** Icons available to the user for customization in certain dialogs. */
public static final String[] accessibleIcons = {
"effect", "power", "logic", "units", "liquid", "production", "defense", "turret", "distribution", "crafting",
"settings", "cancel", "zoom", "ok", "star", "home", "pencil", "up", "down", "left", "right",
"hammer", "warning", "tree", "admin", "map", "modePvp", "terrain",
"modeSurvival", "commandRally", "commandAttack",
};
/** maximum TCP packet size */
public static final int maxTcpSize = 900;
/** default server port */
@@ -147,6 +154,8 @@ public class Vars implements Loadable{
public static final int maxModSubtitleLength = 40;
/** multicast group for discovery.*/
public static final String multicastGroup = "227.2.7.7";
/** Maximum delta time. If the actual delta time (*60) between frames is higher than this number, the game will start to slow down. */
public static float maxDeltaClient = 6f, maxDeltaServer = 10f;
/** whether the graphical game client has loaded */
public static boolean clientLoaded = false;
/** max GL texture size */

View File

@@ -130,13 +130,13 @@ public class BlockIndexer{
data.turretTree.remove(build);
}
//is no longer registered
build.wasDamaged = false;
//unregister damaged buildings
if(build.damaged() && damagedTiles[team.id] != null){
if(build.wasDamaged && damagedTiles[team.id] != null){
damagedTiles[team.id].remove(build);
}
//is no longer registered
build.wasDamaged = false;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -77,6 +77,7 @@ public class RtsAI{
}
public void update(){
if(timer.get(timeUpdate, 60f * 2f)){
assignSquads();
checkBuilding();

View File

@@ -4,7 +4,6 @@ import arc.math.*;
import arc.math.geom.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.ai.*;
import mindustry.core.*;
import mindustry.entities.*;
@@ -35,7 +34,6 @@ public class CommandAI extends AIController{
protected boolean stopAtTarget, stopWhenInRange;
protected Vec2 lastTargetPos;
protected int pathId = -1;
protected boolean blockingUnit;
protected float timeSpentBlocked;
@@ -205,6 +203,11 @@ public class CommandAI extends AIController{
}
}
boolean alwaysArrive = false;
float engageRange = unit.type.range - 10f;
boolean withinAttackRange = attackTarget != null && unit.within(attackTarget, engageRange) && stance != UnitStance.ram;
if(targetPos != null){
boolean move = true, isFinalPoint = commandQueue.size == 0;
vecOut.set(targetPos);
@@ -221,6 +224,7 @@ public class CommandAI extends AIController{
}
if(unit.isGrounded() && stance != UnitStance.ram){
//TODO: blocking enable or disable?
if(timer.get(timerTarget3, avoidInterval)){
Vec2 dstPos = Tmp.v1.trns(unit.rotation, unit.hitSize/2f);
float max = unit.hitSize/2f;
@@ -248,8 +252,18 @@ public class CommandAI extends AIController{
timeSpentBlocked = 0f;
}
//if you've spent 3 seconds stuck, something is wrong, move regardless
move = Vars.controlPath.getPathPosition(unit, pathId, vecMovePos, vecOut, noFound) && (!blockingUnit || timeSpentBlocked > maxBlockTime);
//if the unit is next to the target, stop asking the pathfinder how to get there, it's a waste of CPU
//TODO maybe stop moving too?
if(withinAttackRange){
move = true;
noFound[0] = false;
vecOut.set(vecMovePos);
}else{
move = controlPath.getPathPosition(unit, vecMovePos, targetPos, vecOut, noFound) && (!blockingUnit || timeSpentBlocked > maxBlockTime);
}
//rare case where unit must be perfectly aligned (happens with 1-tile gaps)
alwaysArrive = vecOut.epsilonEquals(unit.tileX() * tilesize, unit.tileY() * tilesize);
//we've reached the final point if the returned coordinate is equal to the supplied input
isFinalPoint &= vecMovePos.epsilonEquals(vecOut, 4.1f);
@@ -266,18 +280,16 @@ public class CommandAI extends AIController{
vecOut.set(vecMovePos);
}
float engageRange = unit.type.range - 10f;
if(move){
if(unit.type.circleTarget && attackTarget != null){
target = attackTarget;
circleAttack(80f);
}else{
moveTo(vecOut,
attackTarget != null && unit.within(attackTarget, engageRange) && stance != UnitStance.ram ? engageRange :
withinAttackRange ? engageRange :
unit.isGrounded() ? 0f :
attackTarget != null && stance != UnitStance.ram ? engageRange :
0f, unit.isFlying() ? 40f : 100f, false, null, isFinalPoint);
attackTarget != null && stance != UnitStance.ram ? engageRange : 0f,
unit.isFlying() ? 40f : 100f, false, null, isFinalPoint || alwaysArrive);
}
}
@@ -417,7 +429,6 @@ public class CommandAI extends AIController{
//this is an allocation, but it's relatively rarely called anyway, and outside mutations must be prevented
targetPos = lastTargetPos = pos.cpy();
attackTarget = null;
pathId = Vars.controlPath.nextTargetId();
this.stopWhenInRange = stopWhenInRange;
}
@@ -432,7 +443,6 @@ public class CommandAI extends AIController{
public void commandTarget(Teamc moveTo, boolean stopAtTarget){
attackTarget = moveTo;
this.stopAtTarget = stopAtTarget;
pathId = Vars.controlPath.nextTargetId();
}
/*

View File

@@ -3,7 +3,6 @@ package mindustry.ai.types;
import arc.math.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.ai.*;
import mindustry.entities.units.*;
import mindustry.gen.*;
@@ -41,8 +40,6 @@ public class LogicAI extends AIController{
public PosTeam posTarget = PosTeam.create();
private ObjectSet<Object> radars = new ObjectSet<>();
private float lastMoveX, lastMoveY;
private int lastPathId = 0;
// LogicAI state should not be reset after reading.
@Override
@@ -52,14 +49,6 @@ public class LogicAI extends AIController{
@Override
public void updateMovement(){
if(control == LUnitControl.pathfind){
if(!Mathf.equal(moveX, lastMoveX, 0.1f) || !Mathf.equal(moveY, lastMoveY, 0.1f)){
lastPathId ++;
lastMoveX = moveX;
lastMoveY = moveY;
}
}
if(targetTimer > 0f){
targetTimer -= Time.delta;
}else{
@@ -86,7 +75,7 @@ public class LogicAI extends AIController{
if(unit.isFlying()){
moveTo(Tmp.v1.set(moveX, moveY), 1f, 30f);
}else{
if(Vars.controlPath.getPathPosition(unit, lastPathId, Tmp.v2.set(moveX, moveY), Tmp.v1, null)){
if(controlPath.getPathPosition(unit, Tmp.v2.set(moveX, moveY), Tmp.v2, Tmp.v1, null)){
moveTo(Tmp.v1, 1f, Tmp.v2.epsilonEquals(Tmp.v1, 4.1f) ? 30f : 0f);
}
}

View File

@@ -4049,7 +4049,7 @@ public class Blocks{
researchCostMultiplier = 0.05f;
coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f));
limitRange();
limitRange(12f);
}};
diffuse = new ItemTurret("diffuse"){{
@@ -4108,7 +4108,7 @@ public class Blocks{
rotateSpeed = 3f;
coolant = consume(new ConsumeLiquid(Liquids.water, 15f / 60f));
limitRange();
limitRange(25f);
}};
sublimate = new ContinuousLiquidTurret("sublimate"){{
@@ -4358,7 +4358,7 @@ public class Blocks{
coolant = consume(new ConsumeLiquid(Liquids.water, 20f / 60f));
coolantMultiplier = 2.5f;
limitRange(-5f);
limitRange(5f);
}};
afflict = new PowerTurret("afflict"){{

View File

@@ -37,7 +37,9 @@ public class Bullets{
damageLightningGround = damageLightning.copy();
damageLightningGround.collidesAir = false;
fireball = new FireBulletType(1f, 4);
fireball = new FireBulletType(1f, 4){{
hittable = false;
}};
spaceLiquid = new SpaceLiquidBulletType(){{
knockback = 0.7f;

View File

@@ -2434,12 +2434,9 @@ public class Fx{
shieldBreak = new Effect(40, e -> {
color(e.color);
stroke(3f * e.fout());
if(e.data instanceof Unit u){
var ab = (ForceFieldAbility)Structs.find(u.abilities, a -> a instanceof ForceFieldAbility);
if(ab != null){
Lines.poly(e.x, e.y, ab.sides, e.rotation + e.fin(), ab.rotation);
return;
}
if(e.data instanceof ForceFieldAbility ab){
Lines.poly(e.x, e.y, ab.sides, e.rotation + e.fin(), ab.rotation);
return;
}
Lines.poly(e.x, e.y, 6, e.rotation + e.fin());
@@ -2584,7 +2581,7 @@ public class Fx{
if(!(e.data instanceof Vec2[] vec)) return;
Draw.color(e.color);
Lines.stroke(1f);
Lines.stroke(2f);
if(vec.length == 2){
Lines.line(vec[0].x, vec[0].y, vec[1].x, vec[1].y);
@@ -2596,5 +2593,15 @@ public class Fx{
}
Draw.reset();
}),
debugRect = new Effect(90f, 1000000000000f, e -> {
if(!(e.data instanceof Rect rect)) return;
Draw.color(e.color);
Lines.stroke(2f);
Lines.rect(rect);
Draw.reset();
});
}

View File

@@ -2,6 +2,7 @@ package mindustry.core;
import arc.*;
import arc.assets.loaders.TextureLoader.*;
import arc.audio.*;
import arc.files.*;
import arc.graphics.*;
import arc.graphics.Texture.*;
@@ -554,6 +555,11 @@ public class Renderer implements ApplicationListener{
landTime = landCore.landDuration();
launchCoreType = coreType;
Music music = landCore.launchMusic();
music.stop();
music.play();
music.setVolume(settings.getInt("musicvol") / 100f);
landCore.beginLaunch(coreType);
}

View File

@@ -147,6 +147,11 @@ public abstract class UnlockableContent extends MappableContent{
return Fonts.getUnicodeStr(name);
}
public int emojiChar(){
return Fonts.getUnicode(name);
}
public boolean hasEmoji(){
return Fonts.hasUnicodeStr(name);
}

View File

@@ -24,7 +24,6 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.io.*;
import mindustry.maps.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*;
import mindustry.world.*;
@@ -212,11 +211,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
margin(0);
update(() -> {
if(Core.scene.getKeyboardFocus() instanceof Dialog && Core.scene.getKeyboardFocus() != this){
return;
}
if(Core.scene != null && Core.scene.getKeyboardFocus() == this){
if(hasKeyboard()){
doInput();
}
});

View File

@@ -14,16 +14,15 @@ import mindustry.ui.dialogs.*;
import static mindustry.Vars.*;
public class MapInfoDialog extends BaseDialog{
private final WaveInfoDialog waveInfo;
private final MapGenerateDialog generate;
private final CustomRulesDialog ruleInfo = new CustomRulesDialog();
private final MapObjectivesDialog objectives = new MapObjectivesDialog();
private final MapLocalesDialog locales = new MapLocalesDialog();
private WaveInfoDialog waveInfo = new WaveInfoDialog();
private MapGenerateDialog generate = new MapGenerateDialog(false);
private CustomRulesDialog ruleInfo = new CustomRulesDialog();
private MapObjectivesDialog objectives = new MapObjectivesDialog();
private MapLocalesDialog locales = new MapLocalesDialog();
private MapProcessorsDialog processors = new MapProcessorsDialog();
public MapInfoDialog(){
super("@editor.mapinfo");
this.waveInfo = new WaveInfoDialog();
this.generate = new MapGenerateDialog(false);
addCloseButton();
@@ -108,7 +107,12 @@ public class MapInfoDialog extends BaseDialog{
ui.showException(e);
}
hide();
}).marginLeft(10f).width(0f).colspan(2).center().growX();
}).marginLeft(10f);
r.button("@editor.worldprocessors", Icon.logic, style, () -> {
hide();
processors.show();
}).marginLeft(10f);
}).colspan(2).center();
name.change();

View File

@@ -0,0 +1,155 @@
package mindustry.editor;
import arc.scene.style.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.content.*;
import mindustry.game.*;
import mindustry.gen.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*;
import mindustry.world.*;
import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.logic.*;
import mindustry.world.blocks.logic.LogicBlock.*;
import static mindustry.Vars.*;
public class MapProcessorsDialog extends BaseDialog{
private IconSelectDialog iconSelect = new IconSelectDialog();
private TextField search;
private Seq<Building> processors = new Seq<>();
private Table list;
public MapProcessorsDialog(){
super("@editor.worldprocessors");
shown(this::setup);
addCloseButton();
buttons.button("@add", Icon.add, () -> {
boolean foundAny = false;
outer:
for(int y = 0; y < Vars.world.height(); y++){
for(int x = 0; x < Vars.world.width(); x++){
Tile tile = Vars.world.rawTile(x, y);
if(!tile.synthetic()){
foundAny = true;
tile.setNet(Blocks.worldProcessor, Team.sharded, 0);
if(ui.editor.isShown()){
Vars.editor.renderer.updatePoint(x, y);
}
break outer;
}
}
}
if(!foundAny){
ui.showErrorMessage("@editor.worldprocessors.nospace");
}else{
setup();
}
}).size(210f, 64f);
cont.top();
getCell(cont).grow();
cont.table(s -> {
s.image(Icon.zoom).padRight(8);
search = s.field(null, text -> rebuild()).growX().get();
search.setMessageText("@players.search");
}).width(440f).fillX().padBottom(4).row();
cont.pane(t -> {
list = t;
});
}
private void rebuild(){
list.clearChildren();
if(processors.isEmpty()){
list.add("@editor.worldprocessors.none");
}else{
Table t = list;
var text = search.getText().toLowerCase();
t.defaults().pad(4f);
float h = 50f;
for(var build : processors){
if(build instanceof LogicBuild log && (text.isEmpty() || (log.tag != null && log.tag.toLowerCase().contains(text)))){
t.button(log.iconTag == 0 ? Styles.none : new TextureRegionDrawable(Fonts.getLargeIcon(Fonts.unicodeToName(log.iconTag))), Styles.graySquarei, iconMed, () -> {
iconSelect.show(ic -> {
log.iconTag = (char)ic;
rebuild();
});
}).size(h);
t.button((log.tag == null ? "<no name>\n" : "[accent]" + log.tag + "\n") + "[lightgray][[" + log.tile.x + ", " + log.tile.y + "]", Styles.grayt, () -> {
//TODO: bug: if you edit name inside of the edit dialog, it won't show up in the list properly
log.showEditDialog(true);
}).size(Vars.mobile ? 390f : 450f, h).margin(10f).with(b -> {
b.getLabel().setAlignment(Align.left, Align.left);
});
t.button(Icon.pencil, Styles.graySquarei, Vars.iconMed, () -> {
ui.showTextInput("", "@editor.name", LogicBlock.maxNameLength, log.tag == null ? "" : log.tag, tag -> {
//bypass configuration and set it directly in case privileged checks mess things up
log.tag = tag;
setup();
});
}).size(h);
if(Vars.state.isGame() && state.isEditor()){
t.button(Icon.eyeSmall, Styles.graySquarei, Vars.iconMed, () -> {
hide();
control.input.config.showConfig(build);
control.input.panCamera(Tmp.v1.set(build));
}).size(h);
}
t.button(Icon.trash, Styles.graySquarei, iconMed, () -> {
ui.showConfirm("@editor.worldprocessors.delete.confirm", () -> {
boolean surrounded = true;
for(int i = 0; i < 4; i++){
Tile other = build.tile.nearby(i);
if(other != null && !(other.block().privileged || other.block().isStatic())){
surrounded = false;
break;
}
}
if(surrounded){
build.tile.setNet(build.tile.floor().wall instanceof StaticWall ? build.tile.floor().wall : Blocks.stoneWall);
}else{
build.tile.setNet(Blocks.air);
}
processors.remove(build);
rebuild();
});
}).size(h);
t.row();
}
}
}
}
private void setup(){
processors.clear();
//scan the entire world for processor (Groups.build can be empty, indexer is probably inaccurate)
Vars.world.tiles.eachTile(t -> {
if(t.isCenter() && t.block() == Blocks.worldProcessor){
processors.add(t.build);
}
});
rebuild();
}
}

View File

@@ -25,7 +25,6 @@ public class Damage{
private static final Rect rect = new Rect();
private static final Rect hitrect = new Rect();
private static final Vec2 vec = new Vec2(), seg1 = new Vec2(), seg2 = new Vec2();
private static final Seq<Unit> units = new Seq<>();
private static final IntSet collidedBlocks = new IntSet();
private static final IntFloatMap damages = new IntFloatMap();
private static final Seq<Collided> collided = new Seq<>();
@@ -41,6 +40,7 @@ public class Damage{
public static void applySuppression(Team team, float x, float y, float range, float reload, float maxDelay, float applyParticleChance, @Nullable Position source){
applySuppression(team, x, y, range, reload, maxDelay, applyParticleChance, source, Pal.sapBullet);
}
public static void applySuppression(Team team, float x, float y, float range, float reload, float maxDelay, float applyParticleChance, @Nullable Position source, Color effectColor){
builds.clear();
indexer.eachBlock(null, x, y, range, build -> build.team != team, build -> {
@@ -175,21 +175,23 @@ public class Damage{
distances.clear();
World.raycast(b.tileX(), b.tileY(), World.toTile(b.x + vec.x), World.toTile(b.y + vec.y), (x, y) -> {
//add distance to list so it can be processed
var build = world.build(x, y);
if(b.type.collidesGround && b.type.collidesTiles){
World.raycast(b.tileX(), b.tileY(), World.toTile(b.x + vec.x), World.toTile(b.y + vec.y), (x, y) -> {
//add distance to list so it can be processed
var build = world.build(x, y);
if(build != null && build.team != b.team && build.collide(b) && b.checkUnderBuild(build, x * tilesize, y * tilesize)){
distances.add(b.dst(build));
if(build != null && build.team != b.team && build.collide(b) && b.checkUnderBuild(build, x * tilesize, y * tilesize)){
distances.add(b.dst(build));
if(laser && build.absorbLasers()){
maxDst = Math.min(maxDst, b.dst(build));
return true;
if(laser && build.absorbLasers()){
maxDst = Math.min(maxDst, b.dst(build));
return true;
}
}
}
return false;
});
return false;
});
}
Units.nearbyEnemies(b.team, rect, u -> {
u.hitbox(hitrect);
@@ -247,7 +249,7 @@ public class Damage{
collidedBlocks.clear();
vec.trnsExact(angle, length);
if(hitter.type.collidesGround){
if(hitter.type.collidesGround && hitter.type.collidesTiles){
seg1.set(x, y);
seg2.set(seg1).add(vec);
World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> {

View File

@@ -247,4 +247,4 @@ public class EntityCollisions{
public interface SolidPred{
boolean solid(int x, int y);
}
}
}

View File

@@ -32,6 +32,7 @@ public class ForceFieldAbility extends Ability{
/** State. */
protected float radiusScale, alpha;
protected boolean wasBroken = true;
private static float realRad;
private static Unit paramUnit;
@@ -41,13 +42,6 @@ public class ForceFieldAbility extends Ability{
trait.absorb();
Fx.absorb.at(trait);
//break shield
if(paramUnit.shield <= trait.damage()){
paramUnit.shield -= paramField.cooldown * paramField.regen;
Fx.shieldBreak.at(paramUnit.x, paramUnit.y, paramField.radius, paramUnit.team.color, paramUnit);
}
paramUnit.shield -= trait.damage();
paramField.alpha = 1f;
}
@@ -85,6 +79,14 @@ public class ForceFieldAbility extends Ability{
@Override
public void update(Unit unit){
if(unit.shield <= 0f && !wasBroken){
unit.shield -= cooldown * regen;
Fx.shieldBreak.at(unit.x, unit.y, radius, unit.team.color, this);
}
wasBroken = unit.shield <= 0f;
if(unit.shield < max){
unit.shield += Time.delta * regen;
}

View File

@@ -40,7 +40,7 @@ abstract class BlockUnitComp implements Unitc{
@Replace
@Override
public TextureRegion icon(){
return tile.block.fullIcon;
return tile.block.uiIcon;
}
@Override

View File

@@ -138,7 +138,11 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
if(!(tile.build instanceof ConstructBuild cb)){
if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){
boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1)));
boolean hasAll = infinite || current.isRotation(team) ||
//derelict repair
(tile.team() == Team.derelict && tile.block() == current.block && tile.build != null && tile.block().allowDerelictRepair && state.rules.derelictRepair) ||
//make sure there's at least 1 item of each type first
!Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1)));
if(hasAll){
Call.beginPlace(self(), current.block, team, current.x, current.y, current.rotation);
@@ -290,10 +294,6 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
return plans.size == 0 ? null : plans.first();
}
public void draw(){
drawBuilding();
}
public void drawBuilding(){
//TODO make this more generic so it works with builder "weapons"
boolean active = activelyBuilding();

View File

@@ -1310,7 +1310,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
if(value instanceof UnitType) type = UnitType.class;
if(builder != null && builder.isPlayer()){
lastAccessed = builder.getPlayer().coloredName();
updateLastAccess(builder.getPlayer());
}
if(block.configurations.containsKey(type)){
@@ -1324,6 +1324,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
}
}
public void updateLastAccess(Player player){
lastAccessed = player.coloredName();
}
/** Called when the block is tapped by the local player. */
public void tapped(){
@@ -1977,9 +1981,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
switch(prop){
case health -> {
health = (float)Mathf.clamp(value, 0, maxHealth);
healthChanged();
if(health <= 0f && !dead()){
Call.buildDestroyed(self());
}else{
healthChanged();
}
}
case team -> {

View File

@@ -68,7 +68,7 @@ abstract class HitboxComp implements Posc, Sized, QuadTreeObject{
public void hitboxTile(Rect rect){
//tile hitboxes are never bigger than a tile, otherwise units get stuck
float size = Math.min(hitSize * 0.66f, 7.9f);
float size = Math.min(hitSize * 0.66f, 7.8f);
//TODO: better / more accurate version is
//float size = hitSize * 0.85f;
//- for tanks?

View File

@@ -24,6 +24,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{
@Import float x, y, rotation, speedMultiplier;
@Import UnitType type;
@Import Team team;
@Import boolean disarmed;
transient Leg[] legs = {};
transient float totalLength;
@@ -191,7 +192,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{
}
}
if(type.legSplashDamage > 0){
if(type.legSplashDamage > 0 && !disarmed){
Damage.damage(team, l.base.x, l.base.y, type.legSplashRange, type.legSplashDamage * state.rules.unitDamage(team), false, true);
}
}

View File

@@ -123,31 +123,4 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc{
}
}
}
@Override
public void draw(){
if(!mining()) return;
float focusLen = hitSize / 2f + Mathf.absin(Time.time, 1.1f, 0.5f);
float swingScl = 12f, swingMag = tilesize / 8f;
float flashScl = 0.3f;
float px = x + Angles.trnsx(rotation, focusLen);
float py = y + Angles.trnsy(rotation, focusLen);
float ex = mineTile.worldx() + Mathf.sin(Time.time + 48, swingScl, swingMag);
float ey = mineTile.worldy() + Mathf.sin(Time.time + 48, swingScl + 2f, swingMag);
Draw.z(Layer.flyingUnit + 0.1f);
Draw.color(Color.lightGray, Color.white, 1f - flashScl + Mathf.absin(Time.time, 0.5f, flashScl));
Drawf.laser(Core.atlas.find("minelaser"), Core.atlas.find("minelaser-end"), px, py, ex, ey, 0.75f);
if(isLocal()){
Lines.stroke(1f, Pal.accent);
Lines.poly(mineTile.worldx(), mineTile.worldy(), 4, tilesize / 2f * Mathf.sqrt2, Time.time);
}
Draw.color();
}
}

View File

@@ -72,7 +72,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
public TextureRegion icon(){
//display default icon for dead players
if(dead()) return core() == null ? UnitTypes.alpha.fullIcon : ((CoreBlock)bestCore().block).unitType.fullIcon;
if(dead()) return core() == null ? UnitTypes.alpha.uiIcon : ((CoreBlock)bestCore().block).unitType.uiIcon;
return unit.icon();
}

View File

@@ -73,6 +73,7 @@ abstract class StatusComp implements Posc, Flyingc{
}
void clearStatuses(){
statuses.each(e -> e.effect.onRemoved(self()));
statuses.clear();
}
@@ -80,6 +81,7 @@ abstract class StatusComp implements Posc, Flyingc{
void unapply(StatusEffect effect){
statuses.remove(e -> {
if(e.effect == effect){
e.effect.onRemoved(self());
Pools.free(e);
return true;
}
@@ -189,6 +191,10 @@ abstract class StatusComp implements Posc, Flyingc{
entry.time = Math.max(entry.time - Time.delta, 0);
if(entry.effect == null || (entry.time <= 0 && !entry.effect.permanent)){
if(entry.effect != null){
entry.effect.onRemoved(self());
}
Pools.free(entry);
index --;
statuses.remove(index);

View File

@@ -18,7 +18,7 @@ import static mindustry.Vars.*;
@Component
abstract class TankComp implements Posc, Flyingc, Hitboxc, Unitc, ElevationMovec{
@Import float x, y, hitSize, rotation, speedMultiplier;
@Import boolean hovering;
@Import boolean hovering, disarmed;
@Import UnitType type;
@Import Team team;
@@ -51,7 +51,7 @@ abstract class TankComp implements Posc, Flyingc, Hitboxc, Unitc, ElevationMovec
}
//calculate overlapping tiles so it slows down when going "over" walls
int r = Math.max(Math.round(hitSize * 0.6f / tilesize), 1);
int r = Math.max((int)(hitSize * 0.6f / tilesize), 0);
int solids = 0, total = (r*2+1)*(r*2+1);
for(int dx = -r; dx <= r; dx++){
@@ -62,7 +62,7 @@ abstract class TankComp implements Posc, Flyingc, Hitboxc, Unitc, ElevationMovec
}
//TODO should this apply to the player team(s)? currently PvE due to balancing
if(type.crushDamage > 0 && (walked || deltaLen() >= 0.01f) && t != null && t.build != null && t.build.team != team
if(type.crushDamage > 0 && !disarmed && (walked || deltaLen() >= 0.01f) && t != null && t.build != null && t.build.team != team
//damage radius is 1 tile smaller to prevent it from just touching walls as it passes
&& Math.max(Math.abs(dx), Math.abs(dy)) <= r - 1){

View File

@@ -402,7 +402,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
return type.allowLegStep && type.legPhysicsLayer ? PhysicsProcess.layerLegs : isGrounded() ? PhysicsProcess.layerGround : PhysicsProcess.layerFlying;
}
/** @return pathfinder path type for calculating costs */
/** @return pathfinder path type for calculating costs. This is used for wave AI only. (TODO: remove) */
public int pathType(){
return Pathfinder.costGround;
}
@@ -666,9 +666,9 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
}
}
/** @return a preview icon for this unit. */
/** @return a preview UI icon for this unit. */
public TextureRegion icon(){
return type.fullIcon;
return type.uiIcon;
}
/** Actually destroys the unit, removing it and creating explosions. **/
@@ -734,7 +734,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
/** @return name of direct or indirect player controller. */
@Override
public @Nullable String getControllerName(){
if(isPlayer()) return getPlayer().name;
if(isPlayer()) return getPlayer().coloredName();
if(controller instanceof LogicAI ai && ai.controller != null) return ai.controller.lastAccessed;
return null;
}

View File

@@ -88,7 +88,7 @@ public class ParticleEffect extends Effect{
rv.trns(realRotation + rand.range(cone), !randLength ? l : rand.random(l));
float x = rv.x, y = rv.y;
Draw.rect(tex, ox + x, oy + y, rad, rad, realRotation + offset + e.time * spin);
Draw.rect(tex, ox + x, oy + y, rad, rad / tex.ratio(), realRotation + offset + e.time * spin);
Drawf.light(ox + x, oy + y, rad * lightScl, lightColor, lightOpacity * Draw.getColor().a);
}
}

View File

@@ -341,7 +341,7 @@ public class AIController implements UnitController{
vec.setLength(speed * length);
}
//do not move when infinite vectors are used or if its zero.
//ignore invalid movement values
if(vec.isNaN() || vec.isInfinite() || vec.isZero()) return;
if(!unit.type.omniMovement && unit.type.rotateMoveFirst){

View File

@@ -129,9 +129,11 @@ public class OverlayRenderer{
Draw.mixcol(Pal.accent, 1f);
Draw.alpha(unitFade);
Building build = (select instanceof BlockUnitc b ? b.tile() : select instanceof Building b ? b : null);
TextureRegion region = build != null ? build.block.fullIcon : select instanceof Unit u ? u.icon() : Core.atlas.white();
TextureRegion region = build != null ? build.block.fullIcon : Core.atlas.white();
Draw.rect(region, select.getX(), select.getY(), select instanceof Unit u && !(select instanceof BlockUnitc) ? u.rotation - 90f : 0f);
if(!(select instanceof Unitc)){
Draw.rect(region, select.getX(), select.getY());
}
for(int i = 0; i < 4; i++){
float rot = i * 90f + 45f + (-Time.time) % 360f;
@@ -255,6 +257,13 @@ public class OverlayRenderer{
}
}
public void checkApplySelection(Unit u){
if(unitFade > 0.001f && lastSelect == u){
Color prev = Draw.getMixColor();
Draw.mixcol(prev.a > 0.001f ? prev.lerp(Pal.accent, unitFade) : Pal.accent, Math.max(unitFade, prev.a));
}
}
private static class CoreEdge{
float x1, y1, x2, y2;
Team t1, t2;

View File

@@ -106,9 +106,9 @@ public class Trail{
int count = (int)(counter += Time.delta);
counter -= count;
if(points.size + ((count - 1) * 3) > length * 3 && points.size > 0){
points.removeRange(0, Math.min(3 * count - 1, points.size - 1));
}
if(count > 0 && points.size > 0){
points.removeRange(0, Math.min(count * 3 - 1, points.size - 1));
}
}
/** Adds a new point to the trail at intervals. */

View File

@@ -391,7 +391,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(build == null || build.team() != player.team() || !build.block.commandable) continue;
build.onCommand(target);
build.lastAccessed = player.name;
build.updateLastAccess(player);
if(!state.isPaused() && player == Vars.player){
Fx.moveCommand.at(target);
@@ -596,7 +596,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
throw new ValidateException(player, "Player cannot rotate a block.");
}
if(player != null) build.lastAccessed = player.name;
if(player != null) build.updateLastAccess(player);
int previous = build.rotation;
build.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4);
build.updateProximity();

View File

@@ -628,7 +628,7 @@ public class TypeIO{
}
public static KickReason readKick(Reads read){
return KickReason.values()[read.b()];
return KickReason.all[read.b()];
}
public static void writeMarkerControl(Writes write, LMarkerControl reason){
@@ -786,7 +786,7 @@ public class TypeIO{
}
public static AdminAction readAction(Reads read){
return AdminAction.values()[read.b()];
return AdminAction.all[read.b()];
}
public static void writeUnitType(Writes write, UnitType effect){

View File

@@ -164,6 +164,12 @@ public class LCanvas extends Table{
this.statements.layout();
}
public void clearStatements(){
jumps.clear();
statements.clearChildren();
statements.layout();
}
StatementElem checkHovered(){
Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true);
if(e != null){

View File

@@ -1480,7 +1480,7 @@ public class LExecutor{
if(t == null) t = Team.derelict;
if(tile.block() != b || tile.team() != t){
tile.setNet(b, t, Mathf.clamp(exec.numi(rotation), 0, 3));
tile.setBlock(b, t, Mathf.clamp(exec.numi(rotation), 0, 3));
}
}
}

View File

@@ -17,6 +17,7 @@ import mindustry.logic.LExecutor.*;
import mindustry.logic.LStatements.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*;
import mindustry.world.blocks.logic.*;
import static mindustry.Vars.*;
import static mindustry.logic.LCanvas.*;
@@ -92,11 +93,29 @@ public class LogicDialog extends BaseDialog{
TextButtonStyle style = Styles.flatt;
t.defaults().size(280f, 60f).left();
if(privileged && executor != null && executor.build != null && !ui.editor.isShown()){
t.button("@editor.worldprocessors.editname", Icon.edit, style, () -> {
ui.showTextInput("", "@editor.name", LogicBlock.maxNameLength, executor.build.tag == null ? "" : executor.build.tag, tag -> {
if(privileged && executor != null && executor.build != null){
executor.build.configure(tag);
//just in case of privilege shenanigans...
executor.build.tag = tag;
}
});
dialog.hide();
}).marginLeft(12f).row();
}
t.button("@clear", Icon.cancel, style, () -> {
ui.showConfirm("@logic.clear.confirm", () -> canvas.clearStatements());
dialog.hide();
}).marginLeft(12f).row();
t.button("@schematic.copy", Icon.copy, style, () -> {
dialog.hide();
Core.app.setClipboardText(canvas.save());
}).marginLeft(12f);
t.row();
}).marginLeft(12f).row();
t.button("@schematic.copy.import", Icon.download, style, () -> {
dialog.hide();
try{

View File

@@ -33,7 +33,7 @@ public class Maps{
NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new,
RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new,
BlendFilter::new, MirrorFilter::new, ClearFilter::new, CoreSpawnFilter::new,
EnemySpawnFilter::new, SpawnPathFilter::new
EnemySpawnFilter::new, SpawnPathFilter::new, LogicFilter::new
};
/** List of all built-in maps. Filenames only. */

View File

@@ -27,7 +27,7 @@ public class BlendFilter extends GenerateFilter{
@Override
public char icon(){
return Iconc.blockSand;
return Iconc.blockSandFloor;
}
@Override

View File

@@ -0,0 +1,72 @@
package mindustry.maps.filters;
import arc.scene.ui.layout.*;
import mindustry.*;
import mindustry.gen.*;
import mindustry.logic.*;
import mindustry.maps.filters.FilterOption.*;
import mindustry.world.*;
import static mindustry.Vars.*;
public class LogicFilter extends GenerateFilter{
/** max available execution for logic filter */
public static int maxInstructionsExecution = 500 * 500 * 25;
public String code;
public boolean loop;
@Override
public FilterOption[] options(){
return new FilterOption[]{
new FilterOption(){
final String name;
{
name = "code";
}
@Override
public void build(Table table){
table.button(b -> b.image(Icon.pencil).size(iconSmall), () -> {
ui.logic.show(code, null, true, code -> LogicFilter.this.code = code);
}).pad(4).margin(12f);
table.add("@filter.option." + name);
}
},
new ToggleOption("loop", () -> loop, f -> loop = f)
};
}
@Override
public void apply(Tiles tiles, GenerateInput in){
LExecutor executor = new LExecutor();
executor.privileged = true;
try{
//assembler has no variables, all the standard ones are null
executor.load(LAssembler.assemble(code, true));
}catch(Throwable ignored){
//if loading code
return;
}
//this updates map width/height global variables
logicVars.update();
//NOTE: all tile operations will call setNet for tiles, but that should have no overhead during world loading
//executions are limited to prevent infinite generation
for(int i = 1; i < maxInstructionsExecution; i++){
if(!loop && (executor.counter.numval >= executor.instructions.length || executor.counter.numval < 0)) break;
executor.runOnce();
}
}
@Override
public char icon(){
return Iconc.blockMicroProcessor;
}
@Override
public boolean isPost(){
return true;
}
}

View File

@@ -28,7 +28,7 @@ public class SpawnPathFilter extends GenerateFilter{
@Override
public char icon(){
return Iconc.blockCommandCenter;
return Iconc.blockCoreZone;
}
@Override

View File

@@ -6,6 +6,11 @@ import mindustry.*;
public abstract class Mod{
/** @return the folder where configuration files for this mod should go.*/
public Fi getConfigFolder(){
return Vars.mods.getConfigFolder(this);
}
/** @return the config file for this plugin, as the file 'mods/[plugin-name]/config.json'.*/
public Fi getConfig(){
return Vars.mods.getConfig(this);
@@ -26,7 +31,7 @@ public abstract class Mod{
}
/** Register any commands to be used on the client side, e.g. sent from an in-game player.. */
/** Register any commands to be used on the client side, e.g. sent from an in-game player. */
public void registerClientCommands(CommandHandler handler){
}

View File

@@ -62,12 +62,18 @@ public class Mods implements Loadable{
return mainLoader;
}
/** Returns a file named 'config.json' in a special folder for the specified plugin.
/** @return the folder where configuration files for this mod should go. The folder may not exist yet; call mkdirs() before writing to it.
* Call this in init(). */
public Fi getConfig(Mod mod){
public Fi getConfigFolder(Mod mod){
ModMeta load = metas.get(mod.getClass());
if(load == null) throw new IllegalArgumentException("Mod is not loaded yet (or missing)!");
return modDirectory.child(load.name).child("config.json");
return modDirectory.child(load.name);
}
/** @return a file named 'config.json' in the config folder for the specified mod.
* Call this in init(). */
public Fi getConfig(Mod mod){
return getConfigFolder(mod).child("config.json");
}
/** Returns a list of files per mod subdirectory. */
@@ -722,6 +728,11 @@ public class Mods implements Loadable{
Seq<LoadRun> runs = new Seq<>();
for(LoadedMod mod : orderedMods()){
Seq<LoadRun> unorderedContent = new Seq<>();
ObjectMap<String, LoadRun> orderedContent = new ObjectMap<>();
String[] contentOrder = mod.meta.contentOrder;
ObjectSet<String> orderSet = contentOrder == null ? null : ObjectSet.with(contentOrder);
if(mod.root.child("content").exists()){
Fi contentRoot = mod.root.child("content");
for(ContentType type : ContentType.all){
@@ -729,15 +740,34 @@ public class Mods implements Loadable{
Fi folder = contentRoot.child(lower + (lower.endsWith("s") ? "" : "s"));
if(folder.exists()){
for(Fi file : folder.findAll(f -> f.extension().equals("json") || f.extension().equals("hjson"))){
runs.add(new LoadRun(type, file, mod));
//if this is part of the ordered content, put it aside to be dealt with later
if(orderSet != null && orderSet.contains(file.nameWithoutExtension())){
orderedContent.put(file.nameWithoutExtension(), new LoadRun(type, file, mod));
}else{
unorderedContent.add(new LoadRun(type, file, mod));
}
}
}
}
}
//ordered content will be loaded first, if it exists
if(contentOrder != null){
for(String contentName : contentOrder){
LoadRun run = orderedContent.get(contentName);
if(run != null){
runs.add(run);
}else{
Log.warn("Cannot find content defined in contentOrder: @", contentName);
}
}
}
//unordered content is sorted alphabetically per mod
runs.addAll(unorderedContent.sort());
}
//make sure mod content is in proper order
runs.sort();
for(LoadRun l : runs){
Content current = content.getLastAdded();
try{
@@ -1204,6 +1234,8 @@ public class Mods implements Loadable{
public float texturescale = 1.0f;
/** If true, bleeding is skipped and no content icons are generated. */
public boolean pregenerated;
/** If set, load the mod content in this order by content names */
public String[] contentOrder;
public String displayName(){
//useless, kept for legacy reasons

View File

@@ -17,6 +17,8 @@ public class Packets{
nameInUse, idInUse, nameEmpty, customClient, serverClose, vote, typeMismatch,
whitelist, playerLimit, serverRestarting;
public static final KickReason[] all = values();
public final boolean quiet;
KickReason(){
@@ -38,7 +40,9 @@ public class Packets{
}
public enum AdminAction{
kick, ban, trace, wave, switchTeam
kick, ban, trace, wave, switchTeam;
public static final AdminAction[] all = values();
}
/** Generic client connection event. */

View File

@@ -291,7 +291,7 @@ public class GameService{
});
Events.on(SectorLaunchLoadoutEvent.class, e -> {
if(!schematics.isDefaultLoadout(e.loadout)){
if(e.sector.planet == Planets.serpulo && !schematics.isDefaultLoadout(e.loadout)){
launchCoreSchematic.complete();
}
});

View File

@@ -142,6 +142,11 @@ public class StatusEffect extends UnlockableContent{
}
}
/** Called when status effect is removed. */
public void onRemoved(Unit unit){
}
protected void trans(StatusEffect effect, TransitionHandler handler){
transitions.put(effect, handler);
}

View File

@@ -288,6 +288,8 @@ public class UnitType extends UnlockableContent implements Senseable{
/** Function used for calculating cost of moving with ControlPathfinder. Does not affect "normal" flow field pathfinding. */
public @Nullable PathCost pathCost;
/** ID for path cost, to be used in the control path finder. This is the value that actually matters; do not assign manually. Set in init(). */
public int pathCostId;
/** A sample of the unit that this type creates. Do not modify! */
public @Nullable Unit sample;
@@ -427,10 +429,13 @@ public class UnitType extends UnlockableContent implements Senseable{
//(undocumented, you shouldn't need to use these, and if you do just check how they're drawn and copy that)
public TextureRegion baseRegion, legRegion, region, previewRegion, shadowRegion, cellRegion, itemCircleRegion,
softShadowRegion, jointRegion, footRegion, legBaseRegion, baseJointRegion, outlineRegion, treadRegion;
softShadowRegion, jointRegion, footRegion, legBaseRegion, baseJointRegion, outlineRegion, treadRegion,
mineLaserRegion, mineLaserEndRegion;
public TextureRegion[] wreckRegions, segmentRegions, segmentOutlineRegions;
public TextureRegion[][] treadRegions;
//INTERNAL REQUIREMENTS
protected float buildTime = -1f;
protected @Nullable ItemStack[] totalRequirements, cachedRequirements, firstRequirements;
@@ -691,6 +696,9 @@ public class UnitType extends UnlockableContent implements Senseable{
ControlPathfinder.costGround;
}
pathCostId = ControlPathfinder.costTypes.indexOf(pathCost);
if(pathCostId == -1) pathCostId = 0;
if(flying){
envEnabled |= Env.space;
}
@@ -842,7 +850,7 @@ public class UnitType extends UnlockableContent implements Senseable{
if(stances.length == 0){
if(canAttack){
Seq<UnitStance> seq = Seq.with(UnitStance.stop, UnitStance.shoot, UnitStance.holdFire, UnitStance.pursueTarget, UnitStance.patrol);
if(crushDamage > 0){
if(!flying){
seq.add(UnitStance.ram);
}
stances = seq.toArray(UnitStance.class);
@@ -910,6 +918,9 @@ public class UnitType extends UnlockableContent implements Senseable{
legBaseRegion = Core.atlas.find(name + "-leg-base", name + "-leg");
baseRegion = Core.atlas.find(name + "-base");
cellRegion = Core.atlas.find(name + "-cell", Core.atlas.find("power-cell"));
mineLaserRegion = Core.atlas.find("minelaser");
mineLaserEndRegion = Core.atlas.find("minelaser-end");
//when linear filtering is on, it's acceptable to use the relatively low-res 'particle' region
softShadowRegion =
squareShape ? Core.atlas.find("square-shadow") :
@@ -1186,6 +1197,10 @@ public class UnitType extends UnlockableContent implements Senseable{
public void draw(Unit unit){
if(unit.inFogTo(Vars.player.team())) return;
unit.drawBuilding();
drawMining(unit);
boolean isPayload = !unit.isAdded();
Mechc mech = unit instanceof Mechc ? (Mechc)unit : null;
@@ -1289,6 +1304,32 @@ public class UnitType extends UnlockableContent implements Senseable{
Draw.reset();
}
public void drawMining(Unit unit){
if(!unit.mining()) return;
float focusLen = unit.hitSize / 2f + Mathf.absin(Time.time, 1.1f, 0.5f);
float swingScl = 12f, swingMag = tilesize / 8f;
float flashScl = 0.3f;
float px = unit.x + Angles.trnsx(unit.rotation, focusLen);
float py = unit.y + Angles.trnsy(unit.rotation, focusLen);
float ex = unit.mineTile.worldx() + Mathf.sin(Time.time + 48, swingScl, swingMag);
float ey = unit.mineTile.worldy() + Mathf.sin(Time.time + 48, swingScl + 2f, swingMag);
Draw.z(Layer.flyingUnit + 0.1f);
Draw.color(Color.lightGray, Color.white, 1f - flashScl + Mathf.absin(Time.time, 0.5f, flashScl));
Drawf.laser(mineLaserRegion, mineLaserEndRegion, px, py, ex, ey, 0.75f);
if(unit.isLocal()){
Lines.stroke(1f, Pal.accent);
Lines.poly(unit.mineTile.worldx(), unit.mineTile.worldy(), 4, tilesize / 2f * Mathf.sqrt2, Time.time);
}
Draw.color();
}
public <T extends Unit & Payloadc> void drawPayload(T unit){
if(unit.hasPayload()){
Payload pay = unit.payloads().first();
@@ -1465,6 +1506,7 @@ public class UnitType extends UnlockableContent implements Senseable{
}
public <T extends Unit & Tankc> void drawTank(T unit){
applyColor(unit);
Draw.rect(treadRegion, unit.x, unit.y, unit.rotation - 90);
if(treadRegion.found()){
@@ -1636,6 +1678,10 @@ public class UnitType extends UnlockableContent implements Senseable{
if(unit.drownTime > 0 && unit.lastDrownFloor != null){
Draw.mixcol(Tmp.c1.set(unit.lastDrownFloor.mapColor).mul(0.83f), unit.drownTime * 0.9f);
}
//this is horribly scuffed.
if(renderer != null && renderer.overlays != null){
renderer.overlays.checkApplySelection(unit);
}
}
//endregion

View File

@@ -30,6 +30,7 @@ public class Fonts{
private static final String mainFont = "fonts/font.woff";
private static final ObjectSet<String> unscaled = ObjectSet.with("iconLarge");
private static ObjectIntMap<String> unicodeIcons = new ObjectIntMap<>();
private static IntMap<String> unicodeToName = new IntMap<>();
private static ObjectMap<String, String> stringIcons = new ObjectMap<>();
private static ObjectMap<String, TextureRegion> largeIcons = new ObjectMap<>();
private static TextureRegion[] iconTable;
@@ -95,12 +96,16 @@ public class Fonts{
}})).loaded = f -> Fonts.logic = f;
}
public static @Nullable String unicodeToName(int unicode){
return unicodeToName.get(unicode, () -> Iconc.codeToName.get(unicode));
}
public static TextureRegion getLargeIcon(String name){
return largeIcons.get(name, () -> {
var region = new TextureRegion();
int code = Iconc.codes.get(name, '\uF8D4');
var glyph = iconLarge.getData().getGlyph((char)code);
if(glyph == null) return Core.atlas.find("error");
if(glyph == null) return Core.atlas.find(name);
region.set(iconLarge.getRegion().texture);
region.set(glyph.u, glyph.v2, glyph.u2, glyph.v);
return region;
@@ -127,6 +132,7 @@ public class Fonts{
unicodeIcons.put(nametex[0], ch);
stringIcons.put(nametex[0], ((char)ch) + "");
unicodeToName.put(ch, texture);
Vec2 out = Scaling.fit.apply(region.width, region.height, size, size);

View File

@@ -3,9 +3,11 @@ package mindustry.ui;
import arc.*;
import arc.graphics.g2d.*;
import arc.input.*;
import arc.math.*;
import arc.scene.*;
import arc.scene.event.*;
import arc.scene.ui.layout.*;
import arc.util.*;
import mindustry.gen.*;
import static mindustry.Vars.*;
@@ -20,6 +22,22 @@ public class Minimap extends Table{
add(new Element(){
{
setSize(Scl.scl(140f));
addListener(new ClickListener(KeyCode.mouseRight){
@Override
public void clicked(InputEvent event, float cx, float cy){
var region = renderer.minimap.getRegion();
if(region == null) return;
float
sx = (cx - x) / width,
sy = (cy - y) / height,
scaledX = Mathf.lerp(region.u, region.u2, sx) * world.width() * tilesize,
scaledY = Mathf.lerp(1f - region.v2, 1f - region.v, sy) * world.height() * tilesize;
control.input.panCamera(Tmp.v1.set(scaledX, scaledY));
}
});
}
@Override

View File

@@ -73,6 +73,8 @@ public class Styles{
geni,
/** Gray, toggleable, no background. */
grayi,
/** Gray square background, standard behavior. Equivalent to grayt. */
graySquarei,
/** Flat, square, black background. */
flati,
/** Square border. */
@@ -288,6 +290,14 @@ public class Styles{
imageUpColor = Color.lightGray;
imageDownColor = Color.white;
}};
graySquarei = new ImageButtonStyle(){{
imageUpColor = Color.white;
imageDownColor = Color.lightGray;
over = flatOver;
down = flatOver;
up = grayPanel;
}};
flati = new ImageButtonStyle(){{
down = flatOver;
up = black;

View File

@@ -1,5 +1,6 @@
package mindustry.ui.dialogs;
import arc.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import mindustry.gen.*;
@@ -39,7 +40,7 @@ public class AdminsDialog extends BaseDialog{
res.labelWrap("[lightgray]" + info.lastName).width(w - h - 24f);
res.add().growX();
res.button(Icon.cancel, () -> {
ui.showConfirm("@confirm", "@confirmunadmin", () -> {
ui.showConfirm("@confirm", Core.bundle.format("@confirmunadmin", info.lastName), () -> {
netServer.admins.unAdminPlayer(info.id);
Groups.player.each(player -> {
if(player != null && !player.isLocal() && player.uuid().equals(info.id)){

View File

@@ -3,7 +3,6 @@ package mindustry.ui.dialogs;
import arc.*;
import arc.func.*;
import arc.graphics.*;
import arc.input.KeyCode;
import arc.scene.style.*;
import arc.scene.ui.*;
import arc.scene.ui.ImageButton.*;
@@ -193,9 +192,12 @@ public class CustomRulesDialog extends BaseDialog{
cont.clear();
cont.table(t -> {
t.add("@search").padRight(10);
t.field(ruleSearch, text ->
ruleSearch = text.trim().replaceAll(" +", " ").toLowerCase()
).grow().pad(8).get().keyDown(KeyCode.enter, this::setup);
var field = t.field(ruleSearch, text -> {
ruleSearch = text.trim().replaceAll(" +", " ").toLowerCase();
setup();
}).grow().pad(8).get();
field.setCursorPosition(ruleSearch.length());
Core.scene.setKeyboardFocus(field);
t.button(Icon.cancel, Styles.emptyi, () -> {
ruleSearch = "";
setup();
@@ -234,7 +236,7 @@ public class CustomRulesDialog extends BaseDialog{
setup();
}
}, () -> rules.infiniteResources);
withInfo("@rules.onlydepositcore.info", () -> check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore));
check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore);
check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair);
check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions);
check("@rules.schematic", b -> rules.schematicsAllowed = b, () -> rules.schematicsAllowed);
@@ -282,7 +284,7 @@ public class CustomRulesDialog extends BaseDialog{
category("enemy");
check("@rules.attack", b -> rules.attackMode = b, () -> rules.attackMode);
check("@rules.corecapture", b -> rules.coreCapture = b, () -> rules.coreCapture);
withInfo("@rules.placerangecheck.info",() -> check("@rules.placerangecheck", b -> rules.placeRangeCheck = b, () -> rules.placeRangeCheck));
check("@rules.placerangecheck", b -> rules.placeRangeCheck = b, () -> rules.placeRangeCheck);
check("@rules.polygoncoreprotection", b -> rules.polygonCoreProtection = b, () -> rules.polygonCoreProtection);
number("@rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f * tilesize, () -> Math.min(rules.enemyCoreBuildRadius / tilesize, 200), () -> !rules.polygonCoreProtection);
@@ -490,25 +492,13 @@ public class CustomRulesDialog extends BaseDialog{
public void check(String text, Boolc cons, Boolp prov, Boolp condition){
if(!Core.bundle.get(text.substring(1)).toLowerCase().contains(ruleSearch)) return;
current.check(text, cons).checked(prov.get()).update(a -> a.setDisabled(!condition.get())).padRight(100f).get().left();
current.row();
}
public void withInfo(String info, Runnable add){
Table wasCurrent = current;
current = new Table();
current.left().defaults().fillX().left();
current.button(Icon.infoSmall, () -> ui.showInfo(info)).size(32f).padRight(10f);
add.run();
// rule does not match search pattern (runnable returned without adding anything)
if(current.getCells().size < 2){
current.clear();
}else{
wasCurrent.add(current).row();
String infoText = text.substring(1) + ".info";
var cell = current.check(text, cons).checked(prov.get()).update(a -> a.setDisabled(!condition.get())).padRight(100f);
if(Core.bundle.has(infoText)){
cell.tooltip(text + ".info");
}
current = wasCurrent;
cell.get().left();
current.row();
}
Cell<TextField> field(Table table, float value, Floatc setter){

View File

@@ -45,7 +45,7 @@ public class DatabaseDialog extends BaseDialog{
void rebuild(){
all.clear();
var text = search.getText();
var text = search.getText().toLowerCase();
Seq<Content>[] allContent = Vars.content.getContentMap();
@@ -54,7 +54,7 @@ public class DatabaseDialog extends BaseDialog{
Seq<UnlockableContent> array = allContent[j]
.select(c -> c instanceof UnlockableContent u && !u.isHidden() &&
(text.isEmpty() || u.localizedName.toLowerCase().contains(text.toLowerCase()))).as();
(text.isEmpty() || u.localizedName.toLowerCase().contains(text))).as();
if(array.size == 0) continue;
all.add("@content." + type.name() + ".name").growX().left().color(Pal.accent);

View File

@@ -0,0 +1,74 @@
package mindustry.ui.dialogs;
import arc.*;
import arc.func.*;
import arc.scene.style.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.util.*;
import mindustry.ctype.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.ui.*;
import static mindustry.Vars.*;
public class IconSelectDialog extends Dialog{
private Intc consumer = i -> Log.info("you have mere seconds");
public IconSelectDialog(){
closeOnBack();
setFillParent(true);
cont.pane(t -> {
resized(true, () -> {
t.clearChildren();
t.marginRight(19f);
t.defaults().size(48f);
t.button(Icon.none, Styles.flati, () -> {
hide();
consumer.get(0);
});
int cols = (int)Math.min(20, Core.graphics.getWidth() / Scl.scl(52f));
int i = 1;
for(var key : accessibleIcons){
var value = Icon.icons.get(key);
t.button(value, Styles.flati, () -> {
hide();
consumer.get(Iconc.codes.get(key));
});
if(++i % cols == 0) t.row();
}
for(ContentType ctype : defaultContentIcons){
t.row();
t.image().colspan(cols).growX().width(Float.NEGATIVE_INFINITY).height(3f).color(Pal.accent);
t.row();
i = 0;
for(UnlockableContent u : content.getBy(ctype).<UnlockableContent>as()){
if(!u.isHidden() && u.unlocked()){
t.button(new TextureRegionDrawable(u.uiIcon), Styles.flati, iconMed, () -> {
hide();
consumer.get(u.emojiChar());
});
if(++i % cols == 0) t.row();
}
}
}
});
});
buttons.button("@back", Icon.left, this::hide).size(210f, 64f);
}
public void show(Intc listener){
consumer = listener;
super.show();
}
}

View File

@@ -213,7 +213,6 @@ public class KeybindDialog extends Dialog{
@Override
public boolean keyDown(InputEvent event, KeyCode keycode){
rebindDialog.hide();
if(keycode == KeyCode.escape) return false;
rebind(section, name, keycode);
return false;
}

View File

@@ -102,7 +102,7 @@ public class MapPlayDialog extends BaseDialog{
ScrollPane pane = new ScrollPane(table);
pane.setFadeScrollBars(false);
table.row();
for(Gamemode mode : Gamemode.values()){
for(Gamemode mode : Gamemode.all){
if(mode.hidden) continue;
table.labelWrap("[accent]" + mode + ":[] [lightgray]" + mode.description()).width(400f);
table.row();

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