Merge branch 'master' of https://github.com/Anuken/Mindustry into 7.0-features
Conflicts: gradle.properties
This commit is contained in:
2
.github/workflows/deployment.yml
vendored
2
.github/workflows/deployment.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
|||||||
git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds
|
git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds
|
||||||
cd ../MindustryBuilds
|
cd ../MindustryBuilds
|
||||||
echo "Updating version to ${RELEASE_VERSION:1}"
|
echo "Updating version to ${RELEASE_VERSION:1}"
|
||||||
echo versionName=6-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${GITHUB_RUN_NUMBER} > version_fdroid.txt
|
echo versionName=7-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${GITHUB_RUN_NUMBER} > version_fdroid.txt
|
||||||
git add .
|
git add .
|
||||||
git commit -m "Updating to build ${RELEASE_VERSION:1}"
|
git commit -m "Updating to build ${RELEASE_VERSION:1}"
|
||||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds
|
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
android:appCategory="game"
|
android:appCategory="game"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/ArcTheme"
|
|
||||||
android:fullBackupContent="@xml/backup_rules">
|
android:fullBackupContent="@xml/backup_rules">
|
||||||
<meta-data android:name="android.max_aspect" android:value="2.1"/>
|
<meta-data android:name="android.max_aspect" android:value="2.1"/>
|
||||||
<activity
|
<activity
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ repositories{
|
|||||||
task deploy(type: Copy){
|
task deploy(type: Copy){
|
||||||
dependsOn "assembleRelease"
|
dependsOn "assembleRelease"
|
||||||
|
|
||||||
from "build/outputs/apk/release/android-release.apk"
|
from "build/outputs/apk/standard/release/android-standard-release.apk"
|
||||||
into "../deploy/"
|
into "../deploy/"
|
||||||
rename("android-release.apk", "${generateDeployName('android')}.apk")
|
rename("android-standard-release.apk", "${generateDeployName('android')}.apk")
|
||||||
}
|
}
|
||||||
|
|
||||||
android{
|
android{
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<style name="ArcTheme" parent="android:Theme.Material.NoActionBar">
|
|
||||||
<item name="android:windowBackground">@android:color/transparent</item>
|
|
||||||
<item name="android:colorBackgroundCacheHint">@null</item>
|
|
||||||
<item name="android:windowAnimationStyle">@android:style/Animation</item>
|
|
||||||
<item name="android:windowNoTitle">true</item>
|
|
||||||
<item name="android:windowContentOverlay">@null</item>
|
|
||||||
<item name="android:windowFullscreen">true</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<resources>
|
|
||||||
<style name="ArcTheme" parent="android:Theme">
|
|
||||||
<item name="android:windowBackground">@android:color/transparent</item>
|
|
||||||
<item name="android:colorBackgroundCacheHint">@null</item>
|
|
||||||
<item name="android:windowAnimationStyle">@android:style/Animation</item>
|
|
||||||
<item name="android:windowNoTitle">true</item>
|
|
||||||
<item name="android:windowContentOverlay">@null</item>
|
|
||||||
<item name="android:windowFullscreen">true</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
|
||||||
@@ -84,9 +84,9 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
try{
|
try{
|
||||||
//try to load own class first
|
//try to load own class first
|
||||||
loadedClass = findClass(name);
|
loadedClass = findClass(name);
|
||||||
}catch(ClassNotFoundException e){
|
}catch(ClassNotFoundException | NoClassDefFoundError e){
|
||||||
//use parent if not found
|
//use parent if not found
|
||||||
loadedClass = super.loadClass(name, resolve);
|
return parent.loadClass(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,8 +143,8 @@ public class EntityIO{
|
|||||||
if(sl) cont("if(!islocal)");
|
if(sl) cont("if(!islocal)");
|
||||||
|
|
||||||
if(sf){
|
if(sf){
|
||||||
//TODO + targetSuf may not give the right result, test it
|
//TODO adding + targetSuf to the assignment fixes units being interpolated incorrectly during physics, but makes interpolation snap instead.
|
||||||
st(field.name + lastSuf + " = this." + field.name + targetSuf);
|
st(field.name + lastSuf + " = this." + field.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
io(field.type, "this." + (sf ? field.name + targetSuf : field.name) + " = ");
|
io(field.type, "this." + (sf ? field.name + targetSuf : field.name) + " = ");
|
||||||
|
|||||||
22
build.gradle
22
build.gradle
@@ -13,10 +13,28 @@ buildscript{
|
|||||||
google()
|
google()
|
||||||
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||||
maven{ url 'https://jitpack.io' }
|
maven{ url 'https://jitpack.io' }
|
||||||
|
|
||||||
|
//fake repository to download my patched robovm jar from
|
||||||
|
ivy{
|
||||||
|
url 'https://github.com/'
|
||||||
|
|
||||||
|
patternLayout {
|
||||||
|
artifact '/[organisation]/[module]/raw/a-single-jar-file/[revision].jar'
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is required in Gradle 6.0+ as metadata file (ivy.xml)
|
||||||
|
// is mandatory. Docs linked below this code section
|
||||||
|
metadataSources { artifact() }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11'
|
//use local, patched robovm gradle plugin until my PR for gradle 7.0 support is merged
|
||||||
|
//https://github.com/Anuken/robovm/raw/a-single-jar-file/robovm-gradle-plugin-2.3.14-SNAPSHOT.jar
|
||||||
|
classpath "Anuken:robovm:robovm-gradle-plugin-2.3.14-SNAPSHOT"
|
||||||
|
//needed for plugin above
|
||||||
|
classpath "com.mobidevelop.robovm:robovm-dist-compiler:2.3.13"
|
||||||
|
|
||||||
classpath "com.github.Anuken.Arc:packer:$arcHash"
|
classpath "com.github.Anuken.Arc:packer:$arcHash"
|
||||||
classpath "com.github.Anuken.Arc:arc-core:$arcHash"
|
classpath "com.github.Anuken.Arc:arc-core:$arcHash"
|
||||||
}
|
}
|
||||||
@@ -35,7 +53,7 @@ allprojects{
|
|||||||
|
|
||||||
ext{
|
ext{
|
||||||
versionNumber = '7'
|
versionNumber = '7'
|
||||||
if(!project.hasProperty("versionModifier")) versionModifier = 'dev'
|
if(!project.hasProperty("versionModifier")) versionModifier = 'pre-alpha'
|
||||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||||
appName = 'Mindustry'
|
appName = 'Mindustry'
|
||||||
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
|
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
|
||||||
|
|||||||
@@ -1594,6 +1594,8 @@ lst.sensor = Get data from a building or unit.
|
|||||||
lst.set = Set a variable.
|
lst.set = Set a variable.
|
||||||
lst.operation = Perform an operation on 1-2 variables.
|
lst.operation = Perform an operation on 1-2 variables.
|
||||||
lst.end = Jump to the top of the instruction stack.
|
lst.end = Jump to the top of the instruction stack.
|
||||||
|
lst.wait = Wait a certain number of seconds.
|
||||||
|
lst.lookup = Look up a item/liquid/unit/block type by ID.\nTotal counts of each type can be accessed with:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]
|
||||||
lst.jump = Conditionally jump to another statement.
|
lst.jump = Conditionally jump to another statement.
|
||||||
lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[].
|
lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[].
|
||||||
lst.unitcontrol = Control the currently bound unit.
|
lst.unitcontrol = Control the currently bound unit.
|
||||||
|
|||||||
@@ -460,6 +460,7 @@ toolmode.drawteams = Teams zeichnen
|
|||||||
toolmode.drawteams.description = Zeichnet Teams statt Blöcke.
|
toolmode.drawteams.description = Zeichnet Teams statt Blöcke.
|
||||||
|
|
||||||
filters.empty = [lightgray]Keine Filter! Füge einen mit dem unteren Knopf hinzu.
|
filters.empty = [lightgray]Keine Filter! Füge einen mit dem unteren Knopf hinzu.
|
||||||
|
|
||||||
filter.distort = Verzerren
|
filter.distort = Verzerren
|
||||||
filter.noise = Rauschen
|
filter.noise = Rauschen
|
||||||
filter.enemyspawn = Gegnerischer Spawn Auswahl
|
filter.enemyspawn = Gegnerischer Spawn Auswahl
|
||||||
@@ -476,6 +477,7 @@ filter.clear = Löschen
|
|||||||
filter.option.ignore = Ignorieren
|
filter.option.ignore = Ignorieren
|
||||||
filter.scatter = Streuen
|
filter.scatter = Streuen
|
||||||
filter.terrain = Landschaft
|
filter.terrain = Landschaft
|
||||||
|
|
||||||
filter.option.scale = Skalierung
|
filter.option.scale = Skalierung
|
||||||
filter.option.chance = Wahrscheinlichkeit
|
filter.option.chance = Wahrscheinlichkeit
|
||||||
filter.option.mag = Größe
|
filter.option.mag = Größe
|
||||||
@@ -490,6 +492,7 @@ filter.option.block = Block
|
|||||||
filter.option.floor = Boden
|
filter.option.floor = Boden
|
||||||
filter.option.flooronto = Zielboden
|
filter.option.flooronto = Zielboden
|
||||||
filter.option.target = Ziel
|
filter.option.target = Ziel
|
||||||
|
filter.option.replacement = Ersatz
|
||||||
filter.option.wall = Wand
|
filter.option.wall = Wand
|
||||||
filter.option.ore = Erz
|
filter.option.ore = Erz
|
||||||
filter.option.floor2 = Sekundärer Boden
|
filter.option.floor2 = Sekundärer Boden
|
||||||
@@ -675,6 +678,7 @@ unit.nobuild = [scarlet]Einheit kann nicht bauen!
|
|||||||
lastaccessed = [lightgray]Zuletzt konfiguriert: {0}
|
lastaccessed = [lightgray]Zuletzt konfiguriert: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <öffne Spiel um zu zeigen>
|
||||||
stat.description = Beschreibung
|
stat.description = Beschreibung
|
||||||
stat.input = Eingang
|
stat.input = Eingang
|
||||||
stat.output = Ausgang
|
stat.output = Ausgang
|
||||||
@@ -991,6 +995,7 @@ rules.waves = Wellen
|
|||||||
rules.attack = Angriff-Modus
|
rules.attack = Angriff-Modus
|
||||||
rules.buildai = KI kann bauen
|
rules.buildai = KI kann bauen
|
||||||
rules.corecapture = Kern nach Zerstörung einnehmen
|
rules.corecapture = Kern nach Zerstörung einnehmen
|
||||||
|
rules.polygoncoreprotection = Polygonaler Kernschutz
|
||||||
rules.enemyCheat = Unbegrenzte Ressourcen für die KI (Rotes Team)
|
rules.enemyCheat = Unbegrenzte Ressourcen für die KI (Rotes Team)
|
||||||
rules.blockhealthmultiplier = Block-Lebenspunkte-Multiplikator
|
rules.blockhealthmultiplier = Block-Lebenspunkte-Multiplikator
|
||||||
rules.blockdamagemultiplier = Block-Schaden-Multiplikator
|
rules.blockdamagemultiplier = Block-Schaden-Multiplikator
|
||||||
@@ -1161,6 +1166,7 @@ block.spore-cluster.name = Sporen-Cluster
|
|||||||
block.metal-floor.name = Metallboden 1
|
block.metal-floor.name = Metallboden 1
|
||||||
block.metal-floor-2.name = Metallboden 2
|
block.metal-floor-2.name = Metallboden 2
|
||||||
block.metal-floor-3.name = Metallboden 3
|
block.metal-floor-3.name = Metallboden 3
|
||||||
|
block.metal-floor-4.name = Metallboden 4
|
||||||
block.metal-floor-5.name = Metallboden 5
|
block.metal-floor-5.name = Metallboden 5
|
||||||
block.metal-floor-damaged.name = beschädigter Metallboden
|
block.metal-floor-damaged.name = beschädigter Metallboden
|
||||||
block.dark-panel-1.name = Dunkles Panel 1
|
block.dark-panel-1.name = Dunkles Panel 1
|
||||||
@@ -1585,6 +1591,8 @@ lst.sensor = Gibt Daten über einen Block oder eine Einheit wieder.
|
|||||||
lst.set = Setzt eine Variable fest.
|
lst.set = Setzt eine Variable fest.
|
||||||
lst.operation = Verändert eine Variable.
|
lst.operation = Verändert eine Variable.
|
||||||
lst.end = Springt wieder nach oben.
|
lst.end = Springt wieder nach oben.
|
||||||
|
lst.wait = Wartet eine bestimmte Zeit.
|
||||||
|
lst.lookup = Sucht ein Item, eine Flüssigkeit, eine Einheit oder einen Block.\nGesamtmengen von jeder Sache können mit \n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]\nabgerufen werden.
|
||||||
lst.jump = Falls die Bedingung erfüllt ist, wird woanders weitergemacht.
|
lst.jump = Falls die Bedingung erfüllt ist, wird woanders weitergemacht.
|
||||||
lst.unitbind = Speichert eine Einheit einer Sorte als [accent]@unit[].
|
lst.unitbind = Speichert eine Einheit einer Sorte als [accent]@unit[].
|
||||||
lst.unitcontrol = Steuert [accent]@unit[].
|
lst.unitcontrol = Steuert [accent]@unit[].
|
||||||
|
|||||||
@@ -64,9 +64,17 @@ schematic.shareworkshop = Partager sur le Steam Workshop
|
|||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner le schéma
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner le schéma
|
||||||
schematic.saved = Schéma enregistré.
|
schematic.saved = Schéma enregistré.
|
||||||
schematic.delete.confirm = Ce schéma sera supprimé définitivement !
|
schematic.delete.confirm = Ce schéma sera supprimé définitivement !
|
||||||
schematic.rename = Renommer le Schéma
|
schematic.rename = Renommer le schéma
|
||||||
schematic.info = {0}x{1}, {2} blocs
|
schematic.info = {0}x{1}, {2} blocs
|
||||||
schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur.
|
schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur.
|
||||||
|
schematic.tags = Mots clés:
|
||||||
|
schematic.edittags = Editer les mots-clés
|
||||||
|
schematic.addtag = Ajouter un mot-clé
|
||||||
|
schematic.texttag = Texte mot-clé
|
||||||
|
schematic.icontag = Icone mot-clé
|
||||||
|
schematic.renametag = Renommer le mot-clé
|
||||||
|
schematic.tagdelconfirm = Voulez-vous supprimer ce mot-clé définitivement ?
|
||||||
|
schematic.tagexists = Ce mot-clé existe déjà.
|
||||||
|
|
||||||
stats = Statistiques
|
stats = Statistiques
|
||||||
stat.wave = Vagues vaincues : [accent] {0}
|
stat.wave = Vagues vaincues : [accent] {0}
|
||||||
@@ -306,7 +314,6 @@ data.exported = Données exportées.
|
|||||||
data.invalid = Ce ne sont pas des données de jeu valides.
|
data.invalid = Ce ne sont pas des données de jeu valides.
|
||||||
data.import.confirm = L'importation des données externes va effacer[scarlet] toutes[] vos données de jeu actuelles.\n[accent]Ceci ne pourra pas être annulé ![]\n\nUne fois les données importées, le jeu se fermera immédiatement.
|
data.import.confirm = L'importation des données externes va effacer[scarlet] toutes[] vos données de jeu actuelles.\n[accent]Ceci ne pourra pas être annulé ![]\n\nUne fois les données importées, le jeu se fermera immédiatement.
|
||||||
quit.confirm = Êtes-vous sûr de vouloir quitter ?
|
quit.confirm = Êtes-vous sûr de vouloir quitter ?
|
||||||
quit.confirm.tutorial = Êtes-vous sur de ce que vous faites ?\nLe tutoriel peut être repris dans [accent]Paramètres->Jeu->Refaire le Tutoriel.[]
|
|
||||||
loading = [accent]Chargement...
|
loading = [accent]Chargement...
|
||||||
reloading = [accent]Rechargement des Mods...
|
reloading = [accent]Rechargement des Mods...
|
||||||
saving = [accent]Sauvegarde...
|
saving = [accent]Sauvegarde...
|
||||||
@@ -453,6 +460,7 @@ toolmode.drawteams = Dessiner les équipes
|
|||||||
toolmode.drawteams.description = Change les équipes\nau lieu de blocs.
|
toolmode.drawteams.description = Change les équipes\nau lieu de blocs.
|
||||||
|
|
||||||
filters.empty = [lightgray]Aucun filtre !\nAjoutez-en un avec les boutons ci-dessous.
|
filters.empty = [lightgray]Aucun filtre !\nAjoutez-en un avec les boutons ci-dessous.
|
||||||
|
|
||||||
filter.distort = Déformation
|
filter.distort = Déformation
|
||||||
filter.noise = Bruit
|
filter.noise = Bruit
|
||||||
filter.enemyspawn = Zone d'apparition ennemie
|
filter.enemyspawn = Zone d'apparition ennemie
|
||||||
@@ -469,6 +477,7 @@ filter.clear = Effacer
|
|||||||
filter.option.ignore = Ignorer
|
filter.option.ignore = Ignorer
|
||||||
filter.scatter = Disperser
|
filter.scatter = Disperser
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
|
|
||||||
filter.option.scale = Échelle
|
filter.option.scale = Échelle
|
||||||
filter.option.chance = Chance
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
@@ -477,11 +486,13 @@ filter.option.circle-scale = Échelle circulaire
|
|||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Détachement
|
filter.option.falloff = Détachement
|
||||||
filter.option.angle = Angle
|
filter.option.angle = Angle
|
||||||
|
filter.option.rotate = Rotation
|
||||||
filter.option.amount = Quantité
|
filter.option.amount = Quantité
|
||||||
filter.option.block = Bloc
|
filter.option.block = Bloc
|
||||||
filter.option.floor = Sol
|
filter.option.floor = Sol
|
||||||
filter.option.flooronto = Sol ciblé
|
filter.option.flooronto = Sol ciblé
|
||||||
filter.option.target = Cible
|
filter.option.target = Cible
|
||||||
|
filter.option.replacement = Replacement
|
||||||
filter.option.wall = Mur
|
filter.option.wall = Mur
|
||||||
filter.option.ore = Minerai
|
filter.option.ore = Minerai
|
||||||
filter.option.floor2 = Sol secondaire
|
filter.option.floor2 = Sol secondaire
|
||||||
@@ -498,6 +509,7 @@ load = Charger
|
|||||||
save = Sauvegarder
|
save = Sauvegarder
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Ping: {0}ms
|
ping = Ping: {0}ms
|
||||||
|
tps = TPS: {0}
|
||||||
memory = Mem: {0}mb
|
memory = Mem: {0}mb
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = Veuillez redémarrer votre jeu pour que le changement de langue prenne effet.
|
language.restart = Veuillez redémarrer votre jeu pour que le changement de langue prenne effet.
|
||||||
@@ -530,7 +542,7 @@ launch.from = Décollage depuis : [accent]{0}
|
|||||||
launch.destination = Destination: {0}
|
launch.destination = Destination: {0}
|
||||||
configure.invalid = La quantité doit être un nombre compris entre 0 et {0}.
|
configure.invalid = La quantité doit être un nombre compris entre 0 et {0}.
|
||||||
add = Ajouter
|
add = Ajouter
|
||||||
boss.health = Santé du Gardien
|
guardian = Gardien
|
||||||
|
|
||||||
connectfail = [scarlet]Échec de la connexion au serveur : \n\n[accent]{0}
|
connectfail = [scarlet]Échec de la connexion au serveur : \n\n[accent]{0}
|
||||||
error.unreachable = Serveur inaccessible.\nEst-ce que l'adresse est écrite correctement?
|
error.unreachable = Serveur inaccessible.\nEst-ce que l'adresse est écrite correctement?
|
||||||
@@ -574,6 +586,7 @@ sector.attacked = Secteur [accent]{0}[white] attaqué !
|
|||||||
sector.lost = Secteur [accent]{0}[white] perdu !
|
sector.lost = Secteur [accent]{0}[white] perdu !
|
||||||
#note: the missing space in the line below is intentional
|
#note: the missing space in the line below is intentional
|
||||||
sector.captured = Sector [accent]{0}[white]capturé !
|
sector.captured = Sector [accent]{0}[white]capturé !
|
||||||
|
sector.changeicon = Changer l'icone
|
||||||
|
|
||||||
threat.low = Faible
|
threat.low = Faible
|
||||||
threat.medium = Normale
|
threat.medium = Normale
|
||||||
@@ -621,20 +634,21 @@ sector.extractionOutpost.description = Un avant-poste éloigné, construit par l
|
|||||||
sector.impact0078.description = Ici reposent les vestiges d'un vaisseau de transport interstellaire, premier à être entré dans ce système.\n\nRécuperez et recherchez autant de technologies que possible dans cette épave.
|
sector.impact0078.description = Ici reposent les vestiges d'un vaisseau de transport interstellaire, premier à être entré dans ce système.\n\nRécuperez et recherchez autant de technologies que possible dans cette épave.
|
||||||
sector.planetaryTerminal.description = La cible finale.\n\nCette base côtière contient une structure capable de lancer des Noyaux sur les planètes voisines. Elle est extrêmement bien gardée.\n\nProduisez des unités navales, éliminez l’ennemi le plus rapidement possible et recherchez la structure de lancement.
|
sector.planetaryTerminal.description = La cible finale.\n\nCette base côtière contient une structure capable de lancer des Noyaux sur les planètes voisines. Elle est extrêmement bien gardée.\n\nProduisez des unités navales, éliminez l’ennemi le plus rapidement possible et recherchez la structure de lancement.
|
||||||
|
|
||||||
status.burning.name = Brûle
|
status.burning.name = Brûlé
|
||||||
status.freezing.name = Gelé
|
status.freezing.name = Gelé
|
||||||
status.wet.name = Humide
|
status.wet.name = Humidifié
|
||||||
status.muddy.name = Boueux
|
status.muddy.name = Boueux
|
||||||
status.melting.name = Fusion
|
status.melting.name = Fusion
|
||||||
status.sapped.name = Sapé
|
status.sapped.name = Sapé
|
||||||
|
status.electrified.name = Electrifié
|
||||||
status.spore-slowed.name = Spore ralentie
|
status.spore-slowed.name = Spore ralentie
|
||||||
status.tarred.name = Goudronné
|
status.tarred.name = Goudronné
|
||||||
status.overclock.name = Overclocker
|
status.overclock.name = Surcadençage
|
||||||
status.shocked.name = Étourdie
|
status.shocked.name = Étourdie
|
||||||
status.blasted.name = Foudroyé
|
status.blasted.name = Foudroyé
|
||||||
status.unmoving.name = Immobile
|
status.unmoving.name = Immobilisé
|
||||||
|
|
||||||
settings.language = Language
|
settings.language = Langage
|
||||||
settings.data = Données du Jeu
|
settings.data = Données du Jeu
|
||||||
settings.reset = Valeurs par Défaut
|
settings.reset = Valeurs par Défaut
|
||||||
settings.rebind = Réattribuer
|
settings.rebind = Réattribuer
|
||||||
@@ -655,6 +669,7 @@ settings.clearcampaignsaves.confirm = Êtes-vous sûr de vouloir supprimer toute
|
|||||||
paused = [accent]< Pause >
|
paused = [accent]< Pause >
|
||||||
clear = Effacer
|
clear = Effacer
|
||||||
banned = [scarlet]Banni
|
banned = [scarlet]Banni
|
||||||
|
unsupported.environment = [scarlet]Environnement non supporté
|
||||||
yes = Oui
|
yes = Oui
|
||||||
no = Non
|
no = Non
|
||||||
info.title = Info
|
info.title = Info
|
||||||
@@ -664,6 +679,7 @@ unit.nobuild = [scarlet]Cette unité ne peut pas construire
|
|||||||
lastaccessed = [lightgray]Dernier accès : {0}
|
lastaccessed = [lightgray]Dernier accès : {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <charger la carte à afficher>
|
||||||
stat.description = Description
|
stat.description = Description
|
||||||
stat.input = Ressource(s) requise(s)
|
stat.input = Ressource(s) requise(s)
|
||||||
stat.output = Ressource(s) produite(s)
|
stat.output = Ressource(s) produite(s)
|
||||||
@@ -693,6 +709,7 @@ stat.memorycapacity = Mémoire
|
|||||||
stat.basepowergeneration = Production d'énergie de Base
|
stat.basepowergeneration = Production d'énergie de Base
|
||||||
stat.productiontime = Durée de production
|
stat.productiontime = Durée de production
|
||||||
stat.repairtime = Durée de la réparation complète d'un Bloc
|
stat.repairtime = Durée de la réparation complète d'un Bloc
|
||||||
|
stat.repairspeed = Vitesse de réparation
|
||||||
stat.weapons = Armes
|
stat.weapons = Armes
|
||||||
stat.bullet = Balles
|
stat.bullet = Balles
|
||||||
stat.speedincrease = Accélération
|
stat.speedincrease = Accélération
|
||||||
@@ -737,14 +754,16 @@ stat.healthmultiplier = Multiplicateur de santé
|
|||||||
stat.speedmultiplier = Multiplicateur de vitesse
|
stat.speedmultiplier = Multiplicateur de vitesse
|
||||||
stat.reloadmultiplier = Multiplicateur de rechargement
|
stat.reloadmultiplier = Multiplicateur de rechargement
|
||||||
stat.buildspeedmultiplier = Multiplicateur de vitesse de construction
|
stat.buildspeedmultiplier = Multiplicateur de vitesse de construction
|
||||||
stat.reactive = Reacts
|
stat.reactive = Réactions
|
||||||
|
stat.healing = Guérison
|
||||||
|
|
||||||
ability.forcefield = Champ de Force
|
ability.forcefield = Champ de Force
|
||||||
ability.repairfield = Champ de Réparation
|
ability.repairfield = Champ de Réparation
|
||||||
ability.statusfield = Champ d'Amélioration
|
ability.statusfield = Champ d'Amélioration {0}
|
||||||
ability.unitspawn = Usine de {0}
|
ability.unitspawn = Usine de {0}
|
||||||
ability.shieldregenfield = Champ de régénération de bouclier
|
ability.shieldregenfield = Champ de régénération de bouclier
|
||||||
ability.movelightning = Déplacement éclair
|
ability.movelightning = Déplacement éclair
|
||||||
|
ability.energyfield = Champ d'énergie: [accent]{0}[] dégâts ~ [accent]{1}[] blocs / [accent]{2}[] cibles
|
||||||
|
|
||||||
bar.drilltierreq = Meilleure Foreuse Requise
|
bar.drilltierreq = Meilleure Foreuse Requise
|
||||||
bar.noresources = Ressources manquantes
|
bar.noresources = Ressources manquantes
|
||||||
@@ -767,6 +786,7 @@ bar.power = Énergie
|
|||||||
bar.progress = Construction en cours
|
bar.progress = Construction en cours
|
||||||
bar.input = Entrée
|
bar.input = Entrée
|
||||||
bar.output = Sortie
|
bar.output = Sortie
|
||||||
|
bar.strength = [stat]{0}[lightgray]x puissance
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]Contrôlé par un processeur.
|
units.processorcontrol = [lightgray]Contrôlé par un processeur.
|
||||||
|
|
||||||
@@ -775,7 +795,7 @@ bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgra
|
|||||||
bullet.incendiary = [stat]incendiaire
|
bullet.incendiary = [stat]incendiaire
|
||||||
bullet.homing = [stat]autoguidé
|
bullet.homing = [stat]autoguidé
|
||||||
bullet.frag = [stat]fragmentation
|
bullet.frag = [stat]fragmentation
|
||||||
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage
|
bullet.lightning = [stat]{0}[lightgray]x foudre ~ [stat]{1}[lightgray] dégâts
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
|
||||||
bullet.knockback = [stat]{0}[lightgray] recul
|
bullet.knockback = [stat]{0}[lightgray] recul
|
||||||
bullet.pierce = [stat]{0}[lightgray]x perforant
|
bullet.pierce = [stat]{0}[lightgray]x perforant
|
||||||
@@ -804,6 +824,7 @@ unit.thousands = k
|
|||||||
unit.millions = mil
|
unit.millions = mil
|
||||||
unit.billions = Md
|
unit.billions = Md
|
||||||
unit.pershot = /tirs
|
unit.pershot = /tirs
|
||||||
|
|
||||||
category.purpose = Description
|
category.purpose = Description
|
||||||
category.general = Caractéristiques
|
category.general = Caractéristiques
|
||||||
category.power = Énergie
|
category.power = Énergie
|
||||||
@@ -812,6 +833,7 @@ category.items = Objets
|
|||||||
category.crafting = Fabrication
|
category.crafting = Fabrication
|
||||||
category.function = Fonction
|
category.function = Fonction
|
||||||
category.optional = Améliorations facultatives
|
category.optional = Améliorations facultatives
|
||||||
|
|
||||||
setting.landscape.name = Verrouiller la rotation en mode paysage
|
setting.landscape.name = Verrouiller la rotation en mode paysage
|
||||||
setting.shadows.name = Ombres
|
setting.shadows.name = Ombres
|
||||||
setting.blockreplace.name = Suggestion automatique des Blocs
|
setting.blockreplace.name = Suggestion automatique des Blocs
|
||||||
@@ -875,23 +897,29 @@ setting.lasersopacity.name = Opacité des Connexions laser
|
|||||||
setting.bridgeopacity.name = Opacité des ponts
|
setting.bridgeopacity.name = Opacité des ponts
|
||||||
setting.playerchat.name = Montrer les bulles de discussion des joueurs
|
setting.playerchat.name = Montrer les bulles de discussion des joueurs
|
||||||
setting.showweather.name = Montrer les Effets météo
|
setting.showweather.name = Montrer les Effets météo
|
||||||
|
setting.bloom.name = Flou lumineux
|
||||||
|
|
||||||
public.confirm = Voulez-vous rendre votre partie publique ?\n[accent]N'importe qui pourra rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique
|
public.confirm = Voulez-vous rendre votre partie publique ?\n[accent]N'importe qui pourra rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique
|
||||||
public.confirm.really = Si vous voulez jouer avec des amis, utilisez [green]Inviter un Ami[] Au lieu [scarlet]d'un Serveur Public[] !\nÊtes-vous sûrs de vouloir rendre votre partie [scarlet]publique[] ?
|
public.confirm.really = Si vous voulez jouer avec des amis, utilisez [green]Inviter un Ami[] Au lieu [scarlet]d'un Serveur Public[] !\nÊtes-vous sûrs de vouloir rendre votre partie [scarlet]publique[] ?
|
||||||
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
|
public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics.
|
||||||
|
|
||||||
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
|
uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes...
|
||||||
uiscale.cancel = Annuler & Quitter
|
uiscale.cancel = Annuler & Quitter
|
||||||
setting.bloom.name = Flou lumineux
|
|
||||||
keybind.title = Paramètres des Touches du Clavier
|
|
||||||
keybinds.mobile = [scarlet]La plupart des touches de clavier ne sont pas fonctionnelles sur mobile. Seuls les mouvements basiques sont supportés.
|
|
||||||
category.general.name = Général
|
category.general.name = Général
|
||||||
category.view.name = Voir
|
category.view.name = Voir
|
||||||
category.multiplayer.name = Multijoueur
|
category.multiplayer.name = Multijoueur
|
||||||
category.blocks.name = Sélection des blocs
|
category.blocks.name = Sélection des blocs
|
||||||
|
|
||||||
command.attack = Attaquer
|
command.attack = Attaquer
|
||||||
command.rally = Rallier
|
command.rally = Rallier
|
||||||
command.retreat = Retraite
|
command.retreat = Retraite
|
||||||
command.idle = Inactif
|
command.idle = Inactif
|
||||||
|
|
||||||
placement.blockselectkeys = \n[lightgray]Raccourci : [{0},
|
placement.blockselectkeys = \n[lightgray]Raccourci : [{0},
|
||||||
|
|
||||||
|
keybind.title = Paramètres des Touches du Clavier
|
||||||
|
keybinds.mobile = [scarlet]La plupart des touches de clavier ne sont pas fonctionnelles sur mobile. Seuls les mouvements basiques sont supportés.
|
||||||
keybind.respawn.name = Réapparaître
|
keybind.respawn.name = Réapparaître
|
||||||
keybind.control.name = Contrôler une Unité
|
keybind.control.name = Contrôler une Unité
|
||||||
keybind.clear_building.name = Réinitialiser les constructions
|
keybind.clear_building.name = Réinitialiser les constructions
|
||||||
@@ -954,7 +982,8 @@ keybind.chat_history_next.name = Descendre l'Historique du Tchat
|
|||||||
keybind.chat_scroll.name = Défilement du Tchat
|
keybind.chat_scroll.name = Défilement du Tchat
|
||||||
keybind.chat_mode.name = Changer le mode du Tchat
|
keybind.chat_mode.name = Changer le mode du Tchat
|
||||||
keybind.drop_unit.name = Larguer une unité
|
keybind.drop_unit.name = Larguer une unité
|
||||||
keybind.zoom_minimap.name = Zoomer la Mini-carte
|
keybind.zoom_minimap.name = Zoomer la Mini-carte
|
||||||
|
|
||||||
mode.help.title = Description des modes de jeu
|
mode.help.title = Description des modes de jeu
|
||||||
mode.survival.name = Survie
|
mode.survival.name = Survie
|
||||||
mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode.
|
mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode.
|
||||||
@@ -975,6 +1004,8 @@ rules.wavetimer = Compte à rebours des vagues
|
|||||||
rules.waves = Vagues
|
rules.waves = Vagues
|
||||||
rules.attack = Mode « Attaque »
|
rules.attack = Mode « Attaque »
|
||||||
rules.buildai = Constructions de l'IA
|
rules.buildai = Constructions de l'IA
|
||||||
|
rules.corecapture = Capture du Noyau lors de sa Destruction
|
||||||
|
rules.polygoncoreprotection = Protection du noyau polygonal
|
||||||
rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge)
|
rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge)
|
||||||
rules.blockhealthmultiplier = Multiplicateur de Santé des Blocs
|
rules.blockhealthmultiplier = Multiplicateur de Santé des Blocs
|
||||||
rules.blockdamagemultiplier = Multiplicateur de Dégât des Blocs
|
rules.blockdamagemultiplier = Multiplicateur de Dégât des Blocs
|
||||||
@@ -1030,6 +1061,7 @@ item.blast-compound.name = Mélange Explosif
|
|||||||
item.pyratite.name = Pyratite
|
item.pyratite.name = Pyratite
|
||||||
item.metaglass.name = Verre Trempé
|
item.metaglass.name = Verre Trempé
|
||||||
item.scrap.name = Ferraille
|
item.scrap.name = Ferraille
|
||||||
|
|
||||||
liquid.water.name = Eau
|
liquid.water.name = Eau
|
||||||
liquid.slag.name = Scories
|
liquid.slag.name = Scories
|
||||||
liquid.oil.name = Pétrole
|
liquid.oil.name = Pétrole
|
||||||
@@ -1061,6 +1093,11 @@ unit.minke.name = Minke
|
|||||||
unit.bryde.name = Bryde
|
unit.bryde.name = Bryde
|
||||||
unit.sei.name = Sei
|
unit.sei.name = Sei
|
||||||
unit.omura.name = Omura
|
unit.omura.name = Omura
|
||||||
|
unit.retusa.name = Retusa
|
||||||
|
unit.oxynoe.name = Oxynoe
|
||||||
|
unit.cyerce.name = Cyerce
|
||||||
|
unit.aegires.name = Aegires
|
||||||
|
unit.navanax.name = Navanax
|
||||||
unit.alpha.name = Alpha
|
unit.alpha.name = Alpha
|
||||||
unit.beta.name = Beta
|
unit.beta.name = Beta
|
||||||
unit.gamma.name = Gamma
|
unit.gamma.name = Gamma
|
||||||
@@ -1121,6 +1158,7 @@ block.sand-water.name = Eau avec fond de Sable
|
|||||||
block.darksand-water.name = Eau avec fond de Sable sombre
|
block.darksand-water.name = Eau avec fond de Sable sombre
|
||||||
block.char.name = Cendres
|
block.char.name = Cendres
|
||||||
block.dacite.name = Dacite
|
block.dacite.name = Dacite
|
||||||
|
block.rhyolite.name = Rhyolite
|
||||||
block.dacite-wall.name = Mur de Dacite
|
block.dacite-wall.name = Mur de Dacite
|
||||||
block.dacite-boulder.name = Rocher de Dacite
|
block.dacite-boulder.name = Rocher de Dacite
|
||||||
block.ice-snow.name = Neige et Glace
|
block.ice-snow.name = Neige et Glace
|
||||||
@@ -1138,6 +1176,7 @@ block.spore-cluster.name = Grappes de Spores
|
|||||||
block.metal-floor.name = Sol métallique
|
block.metal-floor.name = Sol métallique
|
||||||
block.metal-floor-2.name = Sol métallique 2
|
block.metal-floor-2.name = Sol métallique 2
|
||||||
block.metal-floor-3.name = Sol métallique 3
|
block.metal-floor-3.name = Sol métallique 3
|
||||||
|
block.metal-floor-4.name = Sol métallique 4
|
||||||
block.metal-floor-5.name = Sol métallique 5
|
block.metal-floor-5.name = Sol métallique 5
|
||||||
block.metal-floor-damaged.name = Sol métallique endommagé
|
block.metal-floor-damaged.name = Sol métallique endommagé
|
||||||
block.dark-panel-1.name = Panneau sombre 1
|
block.dark-panel-1.name = Panneau sombre 1
|
||||||
@@ -1228,6 +1267,7 @@ block.solar-panel.name = Panneau Solaire
|
|||||||
block.solar-panel-large.name = Grand Panneau Solaire
|
block.solar-panel-large.name = Grand Panneau Solaire
|
||||||
block.oil-extractor.name = Extracteur de Pétrole
|
block.oil-extractor.name = Extracteur de Pétrole
|
||||||
block.repair-point.name = Point de Réparation
|
block.repair-point.name = Point de Réparation
|
||||||
|
block.repair-turret.name = Tourelle de réparation
|
||||||
block.pulse-conduit.name = Conduit à Impulsion
|
block.pulse-conduit.name = Conduit à Impulsion
|
||||||
block.plated-conduit.name = Conduit Plaqué
|
block.plated-conduit.name = Conduit Plaqué
|
||||||
block.phase-conduit.name = Conduit Phasé
|
block.phase-conduit.name = Conduit Phasé
|
||||||
@@ -1270,6 +1310,12 @@ block.exponential-reconstructor.name = Reconstructeur Exponentiel
|
|||||||
block.tetrative-reconstructor.name = Reconstructeur Tétratif
|
block.tetrative-reconstructor.name = Reconstructeur Tétratif
|
||||||
block.payload-conveyor.name = Convoyeur de Masse
|
block.payload-conveyor.name = Convoyeur de Masse
|
||||||
block.payload-router.name = Routeur de Masse
|
block.payload-router.name = Routeur de Masse
|
||||||
|
block.duct.name = Conduit
|
||||||
|
block.duct-router.name = Routeur en Conduit
|
||||||
|
block.duct-bridge.name = Pont en Conduit
|
||||||
|
block.payload-propulsion-tower.name = Tour à propulsion de Charge utile
|
||||||
|
block.payload-void.name = Destructeur de Charge utile
|
||||||
|
block.payload-source.name = Source de Charge utile
|
||||||
block.disassembler.name = Désassembleur
|
block.disassembler.name = Désassembleur
|
||||||
block.silicon-crucible.name = Grande Fonderie de Silicium
|
block.silicon-crucible.name = Grande Fonderie de Silicium
|
||||||
block.overdrive-dome.name = Dôme Accélérant
|
block.overdrive-dome.name = Dôme Accélérant
|
||||||
@@ -1289,10 +1335,9 @@ block.memory-cell.name = Cellule de mémoire
|
|||||||
block.memory-bank.name = Banque de mémoire
|
block.memory-bank.name = Banque de mémoire
|
||||||
|
|
||||||
team.blue.name = bleu
|
team.blue.name = bleu
|
||||||
team.crux.name = rouge
|
team.crux.name = crux
|
||||||
team.sharded.name = orange
|
team.sharded.name = sharded
|
||||||
team.orange.name = orange
|
team.derelict.name = derelict
|
||||||
team.derelict.name = abandonné
|
|
||||||
team.green.name = vert
|
team.green.name = vert
|
||||||
team.purple.name = mauve
|
team.purple.name = mauve
|
||||||
|
|
||||||
@@ -1312,6 +1357,7 @@ hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreu
|
|||||||
hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler.
|
hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler.
|
||||||
hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs.
|
hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs.
|
||||||
hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection.
|
hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection.
|
||||||
|
hint.blockInfo = Pour afficher les informations relatives à un bloc, il suffit de le sélectionner dans le [accent]menu de construction[], puis de cliquer sur le bouton [accent][[?][] à droite.
|
||||||
hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies.
|
hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies.
|
||||||
hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies.
|
hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies.
|
||||||
hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] pour contrôler une tourelle ou une unité alliée.
|
hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] pour contrôler une tourelle ou une unité alliée.
|
||||||
@@ -1345,7 +1391,7 @@ item.graphite.description = Du carbone minéralisé utilisé pour les munitions
|
|||||||
item.sand.description = Un matériau commun, largement utilisé pour la fabrication de matériaux raffinés.
|
item.sand.description = Un matériau commun, largement utilisé pour la fabrication de matériaux raffinés.
|
||||||
item.coal.description = Un carburant commun et facile à obtenir.
|
item.coal.description = Un carburant commun et facile à obtenir.
|
||||||
item.coal.details = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources.
|
item.coal.details = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources.
|
||||||
item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans l'aviation.
|
item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans les usines.
|
||||||
item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire.
|
item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire.
|
||||||
item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériaux.
|
item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériaux.
|
||||||
item.scrap.details = Un mix de métaux provenant des restes de vieilles structures et d'unités. Il contient des traces de nombreux métaux différents.
|
item.scrap.details = Un mix de métaux provenant des restes de vieilles structures et d'unités. Il contient des traces de nombreux métaux différents.
|
||||||
@@ -1566,7 +1612,7 @@ logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent
|
|||||||
lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[].\nPas en texte.
|
lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[].\nPas en texte.
|
||||||
lenum.shoot = Tire à une position donnée.
|
lenum.shoot = Tire à une position donnée.
|
||||||
lenum.shootp = Tire à une unité/bâtiment avec la prédiction de mouvement.
|
lenum.shootp = Tire à une unité/bâtiment avec la prédiction de mouvement.
|
||||||
lenum.configure = La configuration d'un bâtiment. Par exemple, l'objet sélectionné dans un trieur.
|
lenum.config = La configuration d'un bâtiment. Par exemple, l'objet sélectionné dans un trieur.
|
||||||
lenum.enabled = Retourne si le bloc est activé ou pas.
|
lenum.enabled = Retourne si le bloc est activé ou pas.
|
||||||
|
|
||||||
laccess.color = La couleur d'un illuminateur.
|
laccess.color = La couleur d'un illuminateur.
|
||||||
@@ -1574,6 +1620,7 @@ laccess.controller = Le contrôleur de l'Unité.\nSi l'Unité est contrôlée pa
|
|||||||
laccess.dead = Retourne si l'Unité/Bâtiment est morte/détruit ou plus valide.
|
laccess.dead = Retourne si l'Unité/Bâtiment est morte/détruit ou plus valide.
|
||||||
laccess.controlled = Retourne:\n[accent]@ctrlProcessor[] si le contrôleur de l'Unité est un processeur\n[accent]@ctrlPlayer[] si l'Unité/Bâtiment est contrôlé par un joueur\n[accent]@ctrlFormation[] si l'Unité est en formation\nSinon, retourne 0.
|
laccess.controlled = Retourne:\n[accent]@ctrlProcessor[] si le contrôleur de l'Unité est un processeur\n[accent]@ctrlPlayer[] si l'Unité/Bâtiment est contrôlé par un joueur\n[accent]@ctrlFormation[] si l'Unité est en formation\nSinon, retourne 0.
|
||||||
laccess.commanded = [red]Obsolète! Cette commande sera supprimée.[]\nUtilisez [accent]controlled[] à la place.
|
laccess.commanded = [red]Obsolète! Cette commande sera supprimée.[]\nUtilisez [accent]controlled[] à la place.
|
||||||
|
laccess.progress = Progression de l'action, 0 à 1.\nRenvoie la progression de la production, du rechargement de la tourelle ou de la construction.
|
||||||
|
|
||||||
graphicstype.clear = Remplit l’écran d’une couleur.
|
graphicstype.clear = Remplit l’écran d’une couleur.
|
||||||
graphicstype.color = Définit une couleur pour les prochaines opérations de dessin.
|
graphicstype.color = Définit une couleur pour les prochaines opérations de dessin.
|
||||||
@@ -1605,9 +1652,15 @@ lenum.min = Le minimum des 2 nombres.
|
|||||||
lenum.max = Le maximum des 2 nombres.
|
lenum.max = Le maximum des 2 nombres.
|
||||||
lenum.angle = Angle d'un vecteur en degrés.
|
lenum.angle = Angle d'un vecteur en degrés.
|
||||||
lenum.len = Longueur d'un vecteur.
|
lenum.len = Longueur d'un vecteur.
|
||||||
|
|
||||||
lenum.sin = Calcule le Sinus, en degrés.
|
lenum.sin = Calcule le Sinus, en degrés.
|
||||||
lenum.cos = Calcule le Cosinus, en degrés.
|
lenum.cos = Calcule le Cosinus, en degrés.
|
||||||
lenum.tan = Calcule la Tangente, en degrés.
|
lenum.tan = Calcule la Tangente, en degrés.
|
||||||
|
|
||||||
|
lenum.asin = Arc sinus, en degrés.
|
||||||
|
lenum.acos = Arc cosinus, en degrés.
|
||||||
|
lenum.atan = Tangente de l'arc, en degrés.
|
||||||
|
|
||||||
#not a typo, look up 'range notation'
|
#not a typo, look up 'range notation'
|
||||||
lenum.rand = Nombre aléatoire dans la plage [0, valeur).
|
lenum.rand = Nombre aléatoire dans la plage [0, valeur).
|
||||||
lenum.log = Logarithme naturel (ln).
|
lenum.log = Logarithme naturel (ln).
|
||||||
@@ -1687,4 +1740,4 @@ lenum.boost = Active/Désactive le boost.
|
|||||||
|
|
||||||
#Added French translations
|
#Added French translations
|
||||||
lenum.floor = Retourne le plus grand nombre entier,\nqui est inférieur ou égal au nombre donné (12.5 -> 12).
|
lenum.floor = Retourne le plus grand nombre entier,\nqui est inférieur ou égal au nombre donné (12.5 -> 12).
|
||||||
lenum.ceil = Retourne le nombre entier le plus petit,\nsupérieur ou égal au nombre donné (12.5 -> 13).
|
lenum.ceil = Retourne le nombre entier le plus petit,\nsupérieur ou égal au nombre donné (12.5 -> 13).
|
||||||
|
|||||||
@@ -314,7 +314,6 @@ data.exported = Data telah di ekspor.
|
|||||||
data.invalid = Data permainan ini tidak sah.
|
data.invalid = Data permainan ini tidak sah.
|
||||||
data.import.confirm = Mengimpor data eksternal akan menghapus [scarlet] semua[] data yang tersimpan.\n[accent]Tidak dapat diundur lagi![]\n\nSetelah data diimpor, game akan segera ditutup.
|
data.import.confirm = Mengimpor data eksternal akan menghapus [scarlet] semua[] data yang tersimpan.\n[accent]Tidak dapat diundur lagi![]\n\nSetelah data diimpor, game akan segera ditutup.
|
||||||
quit.confirm = Apakah Anda yakin ingin keluar?
|
quit.confirm = Apakah Anda yakin ingin keluar?
|
||||||
quit.confirm.tutorial = Apakah Anda tahu apa yang dilakukan?\nTutorial dapat diulang di[accent] Pengaturan->Permainan->Ulang Tutorial.[]
|
|
||||||
loading = [accent]Memuat...
|
loading = [accent]Memuat...
|
||||||
reloading = [accent]Memuat Ulang Mod...
|
reloading = [accent]Memuat Ulang Mod...
|
||||||
saving = [accent]Menyimpan...
|
saving = [accent]Menyimpan...
|
||||||
@@ -461,6 +460,7 @@ toolmode.drawteams = Gambar Tim
|
|||||||
toolmode.drawteams.description = Menggambar tim bukannya blok.
|
toolmode.drawteams.description = Menggambar tim bukannya blok.
|
||||||
|
|
||||||
filters.empty = [lightgray]Tidak ada filter! Tambahkan dengan tombol dibawah.
|
filters.empty = [lightgray]Tidak ada filter! Tambahkan dengan tombol dibawah.
|
||||||
|
|
||||||
filter.distort = Kerusakkan
|
filter.distort = Kerusakkan
|
||||||
filter.noise = Kebisingan
|
filter.noise = Kebisingan
|
||||||
filter.enemyspawn = Pilih Munculnya Musuh
|
filter.enemyspawn = Pilih Munculnya Musuh
|
||||||
@@ -477,6 +477,7 @@ filter.clear = Bersih
|
|||||||
filter.option.ignore = Biarkan
|
filter.option.ignore = Biarkan
|
||||||
filter.scatter = Penebaran
|
filter.scatter = Penebaran
|
||||||
filter.terrain = Lahan
|
filter.terrain = Lahan
|
||||||
|
|
||||||
filter.option.scale = Ukuran
|
filter.option.scale = Ukuran
|
||||||
filter.option.chance = Kemungkinan
|
filter.option.chance = Kemungkinan
|
||||||
filter.option.mag = Tingkat
|
filter.option.mag = Tingkat
|
||||||
@@ -485,11 +486,13 @@ filter.option.circle-scale = Ukuran Lingkaran
|
|||||||
filter.option.octaves = Oktaf
|
filter.option.octaves = Oktaf
|
||||||
filter.option.falloff = Kemerosotan
|
filter.option.falloff = Kemerosotan
|
||||||
filter.option.angle = Sudut
|
filter.option.angle = Sudut
|
||||||
|
filter.option.rotate = Putar
|
||||||
filter.option.amount = Jumlah
|
filter.option.amount = Jumlah
|
||||||
filter.option.block = Blok
|
filter.option.block = Blok
|
||||||
filter.option.floor = Lantai
|
filter.option.floor = Lantai
|
||||||
filter.option.flooronto = Target Lantai
|
filter.option.flooronto = Target Lantai
|
||||||
filter.option.target = Target
|
filter.option.target = Target
|
||||||
|
filter.option.replacement = Pengganti
|
||||||
filter.option.wall = Dinding
|
filter.option.wall = Dinding
|
||||||
filter.option.ore = Sumber Daya
|
filter.option.ore = Sumber Daya
|
||||||
filter.option.floor2 = Lantai Sekunder
|
filter.option.floor2 = Lantai Sekunder
|
||||||
@@ -506,6 +509,7 @@ load = Memuat
|
|||||||
save = Simpan
|
save = Simpan
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Ping: {0}ms
|
ping = Ping: {0}ms
|
||||||
|
tps = TPS: {0}
|
||||||
memory = Mem: {0}mb
|
memory = Mem: {0}mb
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = Silahkan mengulang kembali permainan agar pengaturan bahasa berpengaruh.
|
language.restart = Silahkan mengulang kembali permainan agar pengaturan bahasa berpengaruh.
|
||||||
@@ -582,6 +586,7 @@ sector.attacked = Sektor [accent]{0}[white] sedang diserang!
|
|||||||
sector.lost = Sektor [accent]{0}[white] telah dihancurkan!
|
sector.lost = Sektor [accent]{0}[white] telah dihancurkan!
|
||||||
#note: the missing space in the line below is intentional
|
#note: the missing space in the line below is intentional
|
||||||
sector.captured = Sektor [accent]{0}[white]ditaklukkan!
|
sector.captured = Sektor [accent]{0}[white]ditaklukkan!
|
||||||
|
sector.changeicon = Ubah Ikon
|
||||||
|
|
||||||
threat.low = Rendah
|
threat.low = Rendah
|
||||||
threat.medium = Sedang
|
threat.medium = Sedang
|
||||||
@@ -634,7 +639,7 @@ status.wet.name = Basah
|
|||||||
status.muddy.name = Berlumpur
|
status.muddy.name = Berlumpur
|
||||||
status.melting.name = Meleleh
|
status.melting.name = Meleleh
|
||||||
status.sapped.name = Melemahkan
|
status.sapped.name = Melemahkan
|
||||||
status.electrified.name = Dialiri listrik
|
status.electrified.name = Dialiri Listrik
|
||||||
status.spore-slowed.name = Spora Melambat
|
status.spore-slowed.name = Spora Melambat
|
||||||
status.tarred.name = Berminyak
|
status.tarred.name = Berminyak
|
||||||
status.overclock.name = Melebihi Batas
|
status.overclock.name = Melebihi Batas
|
||||||
@@ -663,6 +668,7 @@ settings.clearcampaignsaves.confirm = Apakah Anda yakin ingin membersihkan semua
|
|||||||
paused = [accent]< Jeda >
|
paused = [accent]< Jeda >
|
||||||
clear = Bersih
|
clear = Bersih
|
||||||
banned = [scarlet]Dilarang
|
banned = [scarlet]Dilarang
|
||||||
|
unsupported.environment = [scarlet]Ruang Lingkup Tidak Cocok
|
||||||
yes = Ya
|
yes = Ya
|
||||||
no = Tidak
|
no = Tidak
|
||||||
info.title = Info
|
info.title = Info
|
||||||
@@ -672,6 +678,7 @@ unit.nobuild = [scarlet]Unit tidak dapat membangun
|
|||||||
lastaccessed = [lightgray]Terakhir Diakses: {0}
|
lastaccessed = [lightgray]Terakhir Diakses: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <muat peta untuk lihat>
|
||||||
stat.description = Kegunaan
|
stat.description = Kegunaan
|
||||||
stat.input = Masukan
|
stat.input = Masukan
|
||||||
stat.output = Pengeluaran
|
stat.output = Pengeluaran
|
||||||
@@ -701,6 +708,7 @@ stat.memorycapacity = Kapasitas Memori
|
|||||||
stat.basepowergeneration = Basis Generasi Tenaga
|
stat.basepowergeneration = Basis Generasi Tenaga
|
||||||
stat.productiontime = Waktu Produksi
|
stat.productiontime = Waktu Produksi
|
||||||
stat.repairtime = Waktu Memperbaiki Blok Penuh
|
stat.repairtime = Waktu Memperbaiki Blok Penuh
|
||||||
|
stat.repairspeed = Kecepatan Memperbaiki
|
||||||
stat.weapons = Senjata
|
stat.weapons = Senjata
|
||||||
stat.bullet = Peluru
|
stat.bullet = Peluru
|
||||||
stat.speedincrease = Tambahan Kecepatan
|
stat.speedincrease = Tambahan Kecepatan
|
||||||
@@ -745,7 +753,8 @@ stat.healthmultiplier = Penggandaan Darah
|
|||||||
stat.speedmultiplier = Penggandaan Kecepatan
|
stat.speedmultiplier = Penggandaan Kecepatan
|
||||||
stat.reloadmultiplier = Penggandaan Isi Ulang
|
stat.reloadmultiplier = Penggandaan Isi Ulang
|
||||||
stat.buildspeedmultiplier = Penggandaan Kecepatan Membangun
|
stat.buildspeedmultiplier = Penggandaan Kecepatan Membangun
|
||||||
stat.reactive = Reaksi
|
stat.reactive = Reaktif
|
||||||
|
stat.healing = Menyembuhkan
|
||||||
|
|
||||||
ability.forcefield = Bidang Kekuatan
|
ability.forcefield = Bidang Kekuatan
|
||||||
ability.repairfield = Bidang Perbaikan
|
ability.repairfield = Bidang Perbaikan
|
||||||
@@ -753,6 +762,7 @@ ability.statusfield = Bidang Status
|
|||||||
ability.unitspawn = {0} Pabrik
|
ability.unitspawn = {0} Pabrik
|
||||||
ability.shieldregenfield = Bidang Regenerasi Perisai
|
ability.shieldregenfield = Bidang Regenerasi Perisai
|
||||||
ability.movelightning = Pergerakan Petir
|
ability.movelightning = Pergerakan Petir
|
||||||
|
ability.energyfield = Bidang Tenaga: [accent]{0}[] kerusakan ~ [accent]{1}[] blok / [accent]{2}[] target
|
||||||
|
|
||||||
bar.drilltierreq = Membutuhkan Bor yang Lebih Baik
|
bar.drilltierreq = Membutuhkan Bor yang Lebih Baik
|
||||||
bar.noresources = Sumber Daya Tidak Ditemukan
|
bar.noresources = Sumber Daya Tidak Ditemukan
|
||||||
@@ -775,6 +785,7 @@ bar.power = Tenaga
|
|||||||
bar.progress = Perkembangan Pembangunan
|
bar.progress = Perkembangan Pembangunan
|
||||||
bar.input = Masukan
|
bar.input = Masukan
|
||||||
bar.output = Keluaran
|
bar.output = Keluaran
|
||||||
|
bar.strength = [stat]{0}[lightgray]x penguatan
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]Dikendalikan Prosesor
|
units.processorcontrol = [lightgray]Dikendalikan Prosesor
|
||||||
|
|
||||||
@@ -984,6 +995,7 @@ rules.waves = Gelombang
|
|||||||
rules.attack = Mode Penyerangan
|
rules.attack = Mode Penyerangan
|
||||||
rules.buildai = Bangunan A.I.
|
rules.buildai = Bangunan A.I.
|
||||||
rules.corecapture = Tangkap Inti Saat Kehancuran
|
rules.corecapture = Tangkap Inti Saat Kehancuran
|
||||||
|
rules.polygoncoreprotection = Poligon Pelindung Inti
|
||||||
rules.enemyCheat = Sumber Daya A.I. Musuh (Tim Merah) Tak Terbatas
|
rules.enemyCheat = Sumber Daya A.I. Musuh (Tim Merah) Tak Terbatas
|
||||||
rules.blockhealthmultiplier = Penggandaan Darah Blok
|
rules.blockhealthmultiplier = Penggandaan Darah Blok
|
||||||
rules.blockdamagemultiplier = Penggandaan Kekuatan Blok
|
rules.blockdamagemultiplier = Penggandaan Kekuatan Blok
|
||||||
@@ -1039,6 +1051,7 @@ item.blast-compound.name = Senyawa Peledak
|
|||||||
item.pyratite.name = Pyratit
|
item.pyratite.name = Pyratit
|
||||||
item.metaglass.name = Metaglass
|
item.metaglass.name = Metaglass
|
||||||
item.scrap.name = Rongsokan
|
item.scrap.name = Rongsokan
|
||||||
|
|
||||||
liquid.water.name = Air
|
liquid.water.name = Air
|
||||||
liquid.slag.name = Lava
|
liquid.slag.name = Lava
|
||||||
liquid.oil.name = Minyak
|
liquid.oil.name = Minyak
|
||||||
@@ -1153,7 +1166,8 @@ block.spore-cluster.name = Kumpulan Spora
|
|||||||
block.metal-floor.name = Lantai Besi 1
|
block.metal-floor.name = Lantai Besi 1
|
||||||
block.metal-floor-2.name = Lantai Besi 2
|
block.metal-floor-2.name = Lantai Besi 2
|
||||||
block.metal-floor-3.name = Lantai Besi 3
|
block.metal-floor-3.name = Lantai Besi 3
|
||||||
block.metal-floor-5.name = Lantai Besi 4
|
block.metal-floor-4.name = Lantai Besi 4
|
||||||
|
block.metal-floor-5.name = Lantai Besi 5
|
||||||
block.metal-floor-damaged.name = Lantai Besi Rusak
|
block.metal-floor-damaged.name = Lantai Besi Rusak
|
||||||
block.dark-panel-1.name = Panel Gelap 1
|
block.dark-panel-1.name = Panel Gelap 1
|
||||||
block.dark-panel-2.name = Panel Gelap 2
|
block.dark-panel-2.name = Panel Gelap 2
|
||||||
@@ -1333,6 +1347,7 @@ hint.placeConveyor.mobile = Pengantar dapat memindahkan bahan dari bor ke blok y
|
|||||||
hint.placeTurret = Taruh \uf861 [accent]Menara[] untuk mempertahankan basismu daru musuh.\n\nTurret membutuhkan amunisi - yang satu ini, \uf838copper.\nGunakan pengantar dan bor untuk mengisinya.
|
hint.placeTurret = Taruh \uf861 [accent]Menara[] untuk mempertahankan basismu daru musuh.\n\nTurret membutuhkan amunisi - yang satu ini, \uf838copper.\nGunakan pengantar dan bor untuk mengisinya.
|
||||||
hint.breaking = [accent]Klik kanan[] dan tarik untuk menghancurkan blok.
|
hint.breaking = [accent]Klik kanan[] dan tarik untuk menghancurkan blok.
|
||||||
hint.breaking.mobile = Aktifkan \ue817 [accent]palu[] di kanan bawah dan tekan untuk menghancurkan blok.\n\nTahan jari kamu sebentar dan seret untuk menghancurkannya.
|
hint.breaking.mobile = Aktifkan \ue817 [accent]palu[] di kanan bawah dan tekan untuk menghancurkan blok.\n\nTahan jari kamu sebentar dan seret untuk menghancurkannya.
|
||||||
|
hint.blockInfo = Lihat informasi dari sebuah blok dengan memilihnya di [accent]menu bangun[], lalu pilih tombol [accent][[?][] di sebelah kanan.
|
||||||
hint.research = Gunakan tombol \ue875 [accent]Riset[] untuk mempelajari teknologi baru.
|
hint.research = Gunakan tombol \ue875 [accent]Riset[] untuk mempelajari teknologi baru.
|
||||||
hint.research.mobile = Gunakan tombol \ue875 [accent]Riset[] di \ue88c [accent]Menu[] untuk mempelajari teknologi baru.
|
hint.research.mobile = Gunakan tombol \ue875 [accent]Riset[] di \ue88c [accent]Menu[] untuk mempelajari teknologi baru.
|
||||||
hint.unitControl = Tahan [accent][[L-ctrl][] dan [accent]klik[] untuk mengendalikan unit atau turret teman.
|
hint.unitControl = Tahan [accent][[L-ctrl][] dan [accent]klik[] untuk mengendalikan unit atau turret teman.
|
||||||
@@ -1595,6 +1610,7 @@ laccess.controller = Pengendali unit. Jika dikendalikan prosesor, mengembalikan
|
|||||||
laccess.dead = Menentukan apakah unit/bangunan itu hancur atau tidak ada lagi.
|
laccess.dead = Menentukan apakah unit/bangunan itu hancur atau tidak ada lagi.
|
||||||
laccess.controlled = Mengembalikan:\n[accent]@ctrlProcessor[] bila pengendali unit adalah prosesor\n[accent]@ctrlPlayer[] bila pengendali unit/bangunan adalah pemain\n[accent]@ctrlFormation[] bila unit dalam formasi\nSebaliknya, 0.
|
laccess.controlled = Mengembalikan:\n[accent]@ctrlProcessor[] bila pengendali unit adalah prosesor\n[accent]@ctrlPlayer[] bila pengendali unit/bangunan adalah pemain\n[accent]@ctrlFormation[] bila unit dalam formasi\nSebaliknya, 0.
|
||||||
laccess.commanded = [red]Kadaluarsa. Akan segera dihapus![]\nLebih baik gunakan [accent]controlled[].
|
laccess.commanded = [red]Kadaluarsa. Akan segera dihapus![]\nLebih baik gunakan [accent]controlled[].
|
||||||
|
laccess.progress = Memeriksa hasil kemajuan, 0 sampai 1.\nMengembalikan hasil laju produksi, pengisian ulang menara atau pembangunan.
|
||||||
|
|
||||||
graphicstype.clear = Mengisi tampilan dangan warna.
|
graphicstype.clear = Mengisi tampilan dangan warna.
|
||||||
graphicstype.color = Menentukan warna untuk operasi mengambar selanjutnya.
|
graphicstype.color = Menentukan warna untuk operasi mengambar selanjutnya.
|
||||||
@@ -1626,9 +1642,15 @@ lenum.min = Minimum dari dua angka.
|
|||||||
lenum.max = Maksimum dari dua angka.
|
lenum.max = Maksimum dari dua angka.
|
||||||
lenum.angle = Sudut vektor dalam derajat.
|
lenum.angle = Sudut vektor dalam derajat.
|
||||||
lenum.len = Panjang vektor.
|
lenum.len = Panjang vektor.
|
||||||
|
|
||||||
lenum.sin = Sinus, dalam derajat.
|
lenum.sin = Sinus, dalam derajat.
|
||||||
lenum.cos = Kosinus, dalam derajat.
|
lenum.cos = Kosinus, dalam derajat.
|
||||||
lenum.tan = Tangen, dalam derajat.
|
lenum.tan = Tangen, dalam derajat.
|
||||||
|
|
||||||
|
lenum.asin = Arc sinus, dalam derajat.
|
||||||
|
lenum.acos = Arc kosinus, dalam derajat.
|
||||||
|
lenum.atan = Arc tangen, dalam derajat.
|
||||||
|
|
||||||
#bukan typo, cari 'daerah hasil fungsi'
|
#bukan typo, cari 'daerah hasil fungsi'
|
||||||
lenum.rand = Angka Acak dalam jarak [0, value).
|
lenum.rand = Angka Acak dalam jarak [0, value).
|
||||||
lenum.log = Logaritma natural (ln).
|
lenum.log = Logaritma natural (ln).
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ link.wiki.description = 공식 Mindustry 위키
|
|||||||
link.suggestions.description = 새 기능 제안하기
|
link.suggestions.description = 새 기능 제안하기
|
||||||
link.bug.description = 버그 제보하기
|
link.bug.description = 버그 제보하기
|
||||||
linkfail = 링크를 열지 못했습니다!\nURL이 클립보드에 복사되었습니다.
|
linkfail = 링크를 열지 못했습니다!\nURL이 클립보드에 복사되었습니다.
|
||||||
screenshot = 스크린 캡처가 {0} 에 저장되었습니다.
|
screenshot = 스크린샷이 {0} 에 저장되었습니다.
|
||||||
screenshot.invalid = 맵이 너무 커서 스크린 캡처에 사용될 메모리가 부족합니다.
|
screenshot.invalid = 맵이 너무 커서 스크린샷에 사용될 메모리가 부족합니다.
|
||||||
gameover = 게임 오버
|
gameover = 게임 오버
|
||||||
gameover.disconnect = 연결 끊기
|
gameover.disconnect = 연결 끊기
|
||||||
gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
|
gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
|
||||||
@@ -92,7 +92,7 @@ level.highscore = 최고 점수: [accent]{0}
|
|||||||
level.select = 맵 선택
|
level.select = 맵 선택
|
||||||
level.mode = 게임 모드:
|
level.mode = 게임 모드:
|
||||||
coreattack = < 코어가 공격을 받고 있습니다! >
|
coreattack = < 코어가 공격을 받고 있습니다! >
|
||||||
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 전멸합니다!
|
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 소멸합니다!
|
||||||
database = 코어 데이터베이스
|
database = 코어 데이터베이스
|
||||||
savegame = 게임 저장
|
savegame = 게임 저장
|
||||||
loadgame = 게임 불러오기
|
loadgame = 게임 불러오기
|
||||||
@@ -100,7 +100,7 @@ joingame = 게임 참여
|
|||||||
customgame = 사용자 지정 게임
|
customgame = 사용자 지정 게임
|
||||||
newgame = 새 게임
|
newgame = 새 게임
|
||||||
none = < 없음 >
|
none = < 없음 >
|
||||||
none.found = [lightgray]< 찾을 수 없음 >
|
none.found = [lightgray]< 없거나 찾을 수 없음 >
|
||||||
minimap = 미니맵
|
minimap = 미니맵
|
||||||
position = 위치
|
position = 위치
|
||||||
close = 닫기
|
close = 닫기
|
||||||
@@ -343,9 +343,9 @@ custom = 사용자 정의
|
|||||||
builtin = 내장
|
builtin = 내장
|
||||||
map.delete.confirm = 정말로 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다!
|
map.delete.confirm = 정말로 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다!
|
||||||
map.random = [accent]무작위 맵
|
map.random = [accent]무작위 맵
|
||||||
map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [accent]orange[] 코어를 맵에 추가하세요.
|
map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [accent]주황색[] 코어를 맵에 추가하세요.
|
||||||
map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]orange 팀이 아닌[] 코어를 추가하세요.
|
map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]주황색 팀이 아닌[] 코어를 추가하세요.
|
||||||
map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [royal]빨간색[] 코어들을 맵에 추가하세요.
|
map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적 코어가 없습니다! 편집기에서 [royal]빨간색[] 코어들을 맵에 추가하세요.
|
||||||
map.invalid = 맵 로드 오류: 맵 파일이 손상되었거나 잘못된 파일입니다.
|
map.invalid = 맵 로드 오류: 맵 파일이 손상되었거나 잘못된 파일입니다.
|
||||||
workshop.update = 아이템 업데이트
|
workshop.update = 아이템 업데이트
|
||||||
workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생했습니다: {0}
|
workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생했습니다: {0}
|
||||||
@@ -439,7 +439,7 @@ editor.saveimage = 지형 내보내기
|
|||||||
editor.unsaved = [scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까?
|
editor.unsaved = [scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까?
|
||||||
editor.resizemap = 맵 크기 조정
|
editor.resizemap = 맵 크기 조정
|
||||||
editor.mapname = 맵 이름:
|
editor.mapname = 맵 이름:
|
||||||
editor.overwrite = [accept]경고!\n이것은 기존 맵을 덮어 씁니다.
|
editor.overwrite = [accept]경고!\n이 맵은 기존 맵을 덮어 씁니다.
|
||||||
editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까?
|
editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까?
|
||||||
editor.exists = 이 이름의 맵이 이미 존재합니다.
|
editor.exists = 이 이름의 맵이 이미 존재합니다.
|
||||||
editor.selectmap = 불러올 맵을 선택하세요:
|
editor.selectmap = 불러올 맵을 선택하세요:
|
||||||
@@ -460,6 +460,7 @@ toolmode.drawteams = 팀 그리기
|
|||||||
toolmode.drawteams.description = 블록 대신 선택한 팀으로 블록 팀을 그립니다.
|
toolmode.drawteams.description = 블록 대신 선택한 팀으로 블록 팀을 그립니다.
|
||||||
|
|
||||||
filters.empty = [lightgray]필터가 없습니다! 아래 버튼을 눌러 하나를 추가하세요.
|
filters.empty = [lightgray]필터가 없습니다! 아래 버튼을 눌러 하나를 추가하세요.
|
||||||
|
|
||||||
filter.distort = 왜곡
|
filter.distort = 왜곡
|
||||||
filter.noise = 노이즈
|
filter.noise = 노이즈
|
||||||
filter.enemyspawn = 적 소환지점 선택
|
filter.enemyspawn = 적 소환지점 선택
|
||||||
@@ -476,6 +477,7 @@ filter.clear = 초기화
|
|||||||
filter.option.ignore = 무시
|
filter.option.ignore = 무시
|
||||||
filter.scatter = 흩뿌리기
|
filter.scatter = 흩뿌리기
|
||||||
filter.terrain = 지형
|
filter.terrain = 지형
|
||||||
|
|
||||||
filter.option.scale = 크기
|
filter.option.scale = 크기
|
||||||
filter.option.chance = 배치 빈도
|
filter.option.chance = 배치 빈도
|
||||||
filter.option.mag = 크기
|
filter.option.mag = 크기
|
||||||
@@ -490,6 +492,7 @@ filter.option.block = 블록
|
|||||||
filter.option.floor = 타일
|
filter.option.floor = 타일
|
||||||
filter.option.flooronto = 대상 타일
|
filter.option.flooronto = 대상 타일
|
||||||
filter.option.target = 대상
|
filter.option.target = 대상
|
||||||
|
filter.option.replacement = 바꿔넣을 타일
|
||||||
filter.option.wall = 벽
|
filter.option.wall = 벽
|
||||||
filter.option.ore = 광물
|
filter.option.ore = 광물
|
||||||
filter.option.floor2 = 2번째 타일
|
filter.option.floor2 = 2번째 타일
|
||||||
@@ -512,7 +515,7 @@ memory2 = Mem:\n {0}mb +\n {1}mb
|
|||||||
language.restart = 언어 설정을 적용하려면 게임을 다시 시작하세요.
|
language.restart = 언어 설정을 적용하려면 게임을 다시 시작하세요.
|
||||||
settings = 설정
|
settings = 설정
|
||||||
tutorial = 튜토리얼
|
tutorial = 튜토리얼
|
||||||
tutorial.retake = 튜토리얼을 다시 시작하기
|
tutorial.retake = 튜토리얼 재시작하기
|
||||||
editor = 편집기
|
editor = 편집기
|
||||||
mapeditor = 맵 편집기
|
mapeditor = 맵 편집기
|
||||||
|
|
||||||
@@ -545,7 +548,7 @@ connectfail = [scarlet]연결 오류:\n\n[accent]{0}
|
|||||||
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
|
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
|
||||||
error.invalidaddress = 잘못된 주소입니다.
|
error.invalidaddress = 잘못된 주소입니다.
|
||||||
error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하세요.
|
error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하세요.
|
||||||
error.mismatch = 패킷 오류\n클라이언트/서버 버전이 일치하지 않습니다.\n접속하려는 서버가 최신 버전인지 확인하세요!
|
error.mismatch = 패킷 오류\n클라이언트와 서버 버전이 일치하지 않습니다.\n접속하려는 서버가 최신 버전인지 확인하세요!
|
||||||
error.alreadyconnected = 이미 접속 중입니다.
|
error.alreadyconnected = 이미 접속 중입니다.
|
||||||
error.mapnotfound = 맵 파일을 찾을 수 없습니다!
|
error.mapnotfound = 맵 파일을 찾을 수 없습니다!
|
||||||
error.io = 네트워크 I/O 오류.
|
error.io = 네트워크 I/O 오류.
|
||||||
@@ -570,7 +573,7 @@ sectors.resume = 재개
|
|||||||
sectors.launch = 출격
|
sectors.launch = 출격
|
||||||
sectors.select = 선택
|
sectors.select = 선택
|
||||||
sectors.nonelaunch = [lightgray]없음 (sun)
|
sectors.nonelaunch = [lightgray]없음 (sun)
|
||||||
sectors.rename = 구역 이름 변경
|
sectors.rename = 지역 이름 변경
|
||||||
sectors.enemybase = [scarlet]적 기지
|
sectors.enemybase = [scarlet]적 기지
|
||||||
sectors.vulnerable = [scarlet]취약함
|
sectors.vulnerable = [scarlet]취약함
|
||||||
sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨.
|
sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨.
|
||||||
@@ -630,16 +633,16 @@ sector.extractionOutpost.description = 적이 다른 지역에 자원을 보내
|
|||||||
sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요.
|
sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요.
|
||||||
sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[]
|
sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[]
|
||||||
|
|
||||||
status.burning.name = 방화
|
status.burning.name = 불탐
|
||||||
status.freezing.name = 빙결
|
status.freezing.name = 빙결
|
||||||
status.wet.name = 젖음
|
status.wet.name = 젖음
|
||||||
status.muddy.name = 질척해짐
|
status.muddy.name = 질척해짐
|
||||||
status.melting.name = 융해
|
status.melting.name = 융해
|
||||||
status.sapped.name = 흡혈됨
|
status.sapped.name = 피로
|
||||||
status.electrified.name = 과전류
|
status.electrified.name = 과전류
|
||||||
status.spore-slowed.name = 포자감속
|
status.spore-slowed.name = 포자감속
|
||||||
status.tarred.name = 타르화
|
status.tarred.name = 침유됨
|
||||||
status.overclock.name = 과부하
|
status.overclock.name = 가속화
|
||||||
status.shocked.name = 감전
|
status.shocked.name = 감전
|
||||||
status.blasted.name = 파열
|
status.blasted.name = 파열
|
||||||
status.unmoving.name = 멈춤
|
status.unmoving.name = 멈춤
|
||||||
@@ -675,6 +678,7 @@ unit.nobuild = [scarlet]건설 불가
|
|||||||
lastaccessed = [lightgray]마지막 접근: {0}
|
lastaccessed = [lightgray]마지막 접근: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <맵을 먼저 불러와야 합니다>
|
||||||
stat.description = 특성
|
stat.description = 특성
|
||||||
stat.input = 입력
|
stat.input = 입력
|
||||||
stat.output = 출력
|
stat.output = 출력
|
||||||
@@ -722,16 +726,16 @@ stat.inaccuracy = 오차각
|
|||||||
stat.shots = 발사 수
|
stat.shots = 발사 수
|
||||||
stat.reload = 초당 발사 수
|
stat.reload = 초당 발사 수
|
||||||
stat.ammo = 탄약
|
stat.ammo = 탄약
|
||||||
stat.shieldhealth = 보호막 체력
|
stat.shieldhealth = 보호막 내구도
|
||||||
stat.cooldowntime = 쿨타임
|
stat.cooldowntime = 쿨타임
|
||||||
stat.explosiveness = 폭발성
|
stat.explosiveness = 폭발성
|
||||||
stat.basedeflectchance = 기본 반사 확률
|
stat.basedeflectchance = 기본 반사 확률
|
||||||
stat.lightningchance = 전격 확률
|
stat.lightningchance = 전격 생성 확률
|
||||||
stat.lightningdamage = 전격 피해량
|
stat.lightningdamage = 전격 피해량
|
||||||
stat.flammability = 인화성
|
stat.flammability = 인화성
|
||||||
stat.radioactivity = 방사성
|
stat.radioactivity = 방사성
|
||||||
stat.charge=과충전률
|
stat.charge = 과충전률
|
||||||
stat.heatcapacity = 열 용량
|
stat.heatcapacity = 비열
|
||||||
stat.viscosity = 점성
|
stat.viscosity = 점성
|
||||||
stat.temperature = 온도
|
stat.temperature = 온도
|
||||||
stat.speed = 속도
|
stat.speed = 속도
|
||||||
@@ -758,7 +762,7 @@ ability.statusfield = {0} 상태이상 필드
|
|||||||
ability.unitspawn = {0} 공장
|
ability.unitspawn = {0} 공장
|
||||||
ability.shieldregenfield = 방어막 복구 필드
|
ability.shieldregenfield = 방어막 복구 필드
|
||||||
ability.movelightning = 가속 전격
|
ability.movelightning = 가속 전격
|
||||||
ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량
|
ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량
|
||||||
|
|
||||||
bar.drilltierreq = 더 좋은 드릴 필요
|
bar.drilltierreq = 더 좋은 드릴 필요
|
||||||
bar.noresources = 자원 부족
|
bar.noresources = 자원 부족
|
||||||
@@ -786,7 +790,7 @@ bar.strength = [stat]{0}[lightgray]x 치료 속도
|
|||||||
units.processorcontrol = [lightgray]프로세서 제어됨
|
units.processorcontrol = [lightgray]프로세서 제어됨
|
||||||
|
|
||||||
bullet.damage = [stat]{0}[lightgray] 피해량
|
bullet.damage = [stat]{0}[lightgray] 피해량
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat] {1}[lightgray] 타일
|
bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgray] 타일
|
||||||
bullet.incendiary = [stat]방화
|
bullet.incendiary = [stat]방화
|
||||||
bullet.homing = [stat]유도
|
bullet.homing = [stat]유도
|
||||||
bullet.frag = [stat]파편
|
bullet.frag = [stat]파편
|
||||||
@@ -858,13 +862,13 @@ setting.difficulty.hard = 혼돈
|
|||||||
setting.difficulty.insane = 박멸
|
setting.difficulty.insane = 박멸
|
||||||
setting.difficulty.name = 난이도:
|
setting.difficulty.name = 난이도:
|
||||||
setting.screenshake.name = 화면 흔들림
|
setting.screenshake.name = 화면 흔들림
|
||||||
setting.effects.name = 효과 표시
|
setting.effects.name = 입자 효과 표시
|
||||||
setting.destroyedblocks.name = 파괴된 블록 표시
|
setting.destroyedblocks.name = 파괴된 블록 표시
|
||||||
setting.blockstatus.name = 블록 상태 표시
|
setting.blockstatus.name = 블록 상태 표시
|
||||||
setting.conveyorpathfinding.name = 컨베이어 배치 길찾기
|
setting.conveyorpathfinding.name = 컨베이어 배치 길찾기
|
||||||
setting.sensitivity.name = 컨트롤러 감도
|
setting.sensitivity.name = 컨트롤러 감도
|
||||||
setting.saveinterval.name = 저장 간격
|
setting.saveinterval.name = 저장 간격
|
||||||
setting.seconds = {0}초
|
setting.seconds = {0} 초
|
||||||
setting.milliseconds = {0} 밀리초
|
setting.milliseconds = {0} 밀리초
|
||||||
setting.fullscreen.name = 전체 화면
|
setting.fullscreen.name = 전체 화면
|
||||||
setting.borderlesswindow.name = 테두리 없는 창 모드[lightgray] (재시작이 필요할 수 있습니다)
|
setting.borderlesswindow.name = 테두리 없는 창 모드[lightgray] (재시작이 필요할 수 있습니다)
|
||||||
@@ -972,14 +976,14 @@ keybind.drop_unit.name = 유닛 내려놓기
|
|||||||
keybind.zoom_minimap.name = 미니맵 확대
|
keybind.zoom_minimap.name = 미니맵 확대
|
||||||
mode.help.title = 모드 설명
|
mode.help.title = 모드 설명
|
||||||
mode.survival.name = 생존
|
mode.survival.name = 생존
|
||||||
mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적의 스폰지점이 필요합니다.
|
mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적 스폰지점이 필요합니다.
|
||||||
mode.sandbox.name = 샌드박스
|
mode.sandbox.name = 샌드박스
|
||||||
mode.sandbox.description = 무한한 자원이 있으며, 시간 제한이 없습니다.
|
mode.sandbox.description = 무한한 자원이 있으며, 시간 제한이 없습니다.
|
||||||
mode.editor.name = 편집기
|
mode.editor.name = 편집기
|
||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = 다른 플레이어와 현장에서 싸우십시오.\n[gray]플레이하려면 맵에 다른 색상의 코어가 2개 이상 있어야 합니다.
|
mode.pvp.description = 다른 플레이어와 현장에서 싸우십시오.\n[gray]플레이하려면 맵에 다른 색상의 코어가 2개 이상 있어야 합니다.
|
||||||
mode.attack.name = 공격
|
mode.attack.name = 공격
|
||||||
mode.attack.description = 적의 기지를 파괴하세요.\n[gray]플레이하려면 맵에 빨간색 코어가 필요합니다.
|
mode.attack.description = 적의 기지를 파괴하세요.\n[gray]플레이하려면 맵에 적 코어가 필요합니다.
|
||||||
mode.custom = 사용자 정의 규칙
|
mode.custom = 사용자 정의 규칙
|
||||||
|
|
||||||
rules.infiniteresources = 무한 자원
|
rules.infiniteresources = 무한 자원
|
||||||
@@ -991,15 +995,16 @@ rules.waves = 단계
|
|||||||
rules.attack = 공격 모드
|
rules.attack = 공격 모드
|
||||||
rules.buildai = AI 건설
|
rules.buildai = AI 건설
|
||||||
rules.corecapture = 코어 파괴 시 점령
|
rules.corecapture = 코어 파괴 시 점령
|
||||||
rules.enemyCheat = 무한 AI (빨간팀) 자원
|
rules.polygoncoreprotection = 다각형 코어 건설 금지구역
|
||||||
|
rules.enemyCheat = 적Ai 무한자원
|
||||||
rules.blockhealthmultiplier = 블록 체력 배수
|
rules.blockhealthmultiplier = 블록 체력 배수
|
||||||
rules.blockdamagemultiplier = 블록 공격력 배수
|
rules.blockdamagemultiplier = 블록 공격력 배수
|
||||||
rules.unitbuildspeedmultiplier = 유닛 생산 속도 배수
|
rules.unitbuildspeedmultiplier = 유닛 생산속도 배수
|
||||||
rules.unithealthmultiplier = 유닛 체력 배수
|
rules.unithealthmultiplier = 유닛 체력 배수
|
||||||
rules.unitdamagemultiplier = 유닛 공격력 배수
|
rules.unitdamagemultiplier = 유닛 공격력 배수
|
||||||
rules.unitcapvariable = 코어 유닛 제한 추가
|
rules.unitcapvariable = 코어 유닛제한 추가
|
||||||
rules.unitcap = 기본 유닛 제한
|
rules.unitcap = 기본 유닛 제한
|
||||||
rules.enemycorebuildradius = 적 코어 건설 금지구역 범위:[lightgray] (타일)
|
rules.enemycorebuildradius = 적 코어 건설금지구역 범위:[lightgray] (타일)
|
||||||
rules.wavespacing = 단계 간격:[lightgray] (초)
|
rules.wavespacing = 단계 간격:[lightgray] (초)
|
||||||
rules.buildcostmultiplier = 건설 비용 배수
|
rules.buildcostmultiplier = 건설 비용 배수
|
||||||
rules.buildspeedmultiplier = 건설 속도 배수
|
rules.buildspeedmultiplier = 건설 속도 배수
|
||||||
@@ -1161,6 +1166,7 @@ block.spore-cluster.name = 포자낭
|
|||||||
block.metal-floor.name = 금속제 바닥
|
block.metal-floor.name = 금속제 바닥
|
||||||
block.metal-floor-2.name = 금속 타일 2
|
block.metal-floor-2.name = 금속 타일 2
|
||||||
block.metal-floor-3.name = 금속 타일 3
|
block.metal-floor-3.name = 금속 타일 3
|
||||||
|
block.metal-floor-4.name = 금속 타일 4
|
||||||
block.metal-floor-5.name = 금속 타일 5
|
block.metal-floor-5.name = 금속 타일 5
|
||||||
block.metal-floor-damaged.name = 손상된 금속 타일
|
block.metal-floor-damaged.name = 손상된 금속 타일
|
||||||
block.dark-panel-1.name = 검은 패널 1
|
block.dark-panel-1.name = 검은 패널 1
|
||||||
@@ -1303,7 +1309,7 @@ block.payload-source.name = 화물 공급기
|
|||||||
block.disassembler.name = 광재 분해기
|
block.disassembler.name = 광재 분해기
|
||||||
block.silicon-crucible.name = 실리콘 도가니
|
block.silicon-crucible.name = 실리콘 도가니
|
||||||
block.overdrive-dome.name = 대형 과부하 프로젝터
|
block.overdrive-dome.name = 대형 과부하 프로젝터
|
||||||
#experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들입니다.
|
#experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들이였습니다.
|
||||||
block.block-forge.name = 블록 제작대
|
block.block-forge.name = 블록 제작대
|
||||||
block.block-loader.name = 블록 로더
|
block.block-loader.name = 블록 로더
|
||||||
block.block-unloader.name = 블록 언로더
|
block.block-unloader.name = 블록 언로더
|
||||||
@@ -1585,13 +1591,15 @@ lst.sensor = 건물 또는 유닛의 정보 얻기
|
|||||||
lst.set = 변수 선언/할당하기
|
lst.set = 변수 선언/할당하기
|
||||||
lst.operation = 1~2개의 변수로 연산하기
|
lst.operation = 1~2개의 변수로 연산하기
|
||||||
lst.end = 실행줄의 가장 위로 점프하기
|
lst.end = 실행줄의 가장 위로 점프하기
|
||||||
|
lst.wait = 일정 시간(초) 동안 대기
|
||||||
|
lst.lookup = id를 통해 특정 유형의 아이템/액체/유닛/블록을 찾기\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[].\n로 각 타입의 총 갯수를 알 수 있습니다.
|
||||||
lst.jump = 조건부로 다른 실행문으로 점프하기
|
lst.jump = 조건부로 다른 실행문으로 점프하기
|
||||||
lst.unitbind = type 옆에 있는 유닛을 지정하고, [accent]@unit[]에 저장하기
|
lst.unitbind = type 옆에 있는 유닛을 지정하고, [accent]@unit[]에 저장하기
|
||||||
lst.unitcontrol = 현재 지정된 유닛을 조종하기
|
lst.unitcontrol = 현재 지정된 유닛을 조종하기
|
||||||
lst.unitradar = 현재 지정된 유닛 주변의 유닛 검색하기
|
lst.unitradar = 현재 지정된 유닛 주변의 유닛 검색하기
|
||||||
lst.unitlocate = 특정 유형의 위치/건물을 지도상에서 찾기\n지정된 유닛이 필요합니다.
|
lst.unitlocate = 특정 유형의 위치/건물을 지도상에서 찾기\n지정된 유닛이 필요합니다.
|
||||||
|
|
||||||
logic.nounitbuild = [red]유닛의 건물 로직은 여기서 허용되지 않습니다.
|
logic.nounitbuild = [red]유닛의 건설 로직은 여기서 허용되지 않습니다.
|
||||||
|
|
||||||
lenum.type = 건물/유닛의 타입\n예로 분배기는 문자열이 아니라 [accent]@router[]를 반환합니다.
|
lenum.type = 건물/유닛의 타입\n예로 분배기는 문자열이 아니라 [accent]@router[]를 반환합니다.
|
||||||
lenum.shoot = 특정 위치에 발사
|
lenum.shoot = 특정 위치에 발사
|
||||||
@@ -1721,7 +1729,7 @@ lenum.build = 구조물 건설
|
|||||||
lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다.
|
lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다.
|
||||||
lenum.within = 좌표 주변 유닛 발견 여부
|
lenum.within = 좌표 주변 유닛 발견 여부
|
||||||
lenum.boost = 이륙 시작/중단
|
lenum.boost = 이륙 시작/중단
|
||||||
#1724 line matching / 줄 매칭
|
#1730 line matching / 줄 매칭
|
||||||
|
|
||||||
#-------------비공식 번역-------------
|
#-------------비공식 번역-------------
|
||||||
#팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요.
|
#팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요.
|
||||||
@@ -1840,7 +1848,6 @@ block.pneumatic-drill.details =
|
|||||||
block.laser-drill.details =
|
block.laser-drill.details =
|
||||||
block.blast-drill.details =
|
block.blast-drill.details =
|
||||||
block.water-extractor.details =
|
block.water-extractor.details =
|
||||||
block.cultivator.details =
|
|
||||||
block.oil-extractor.details =
|
block.oil-extractor.details =
|
||||||
block.vault.details =
|
block.vault.details =
|
||||||
block.container.details =
|
block.container.details =
|
||||||
|
|||||||
@@ -399,14 +399,12 @@ wavemode.health = viață
|
|||||||
|
|
||||||
editor.default = [lightgray]<Prestabilit>
|
editor.default = [lightgray]<Prestabilit>
|
||||||
details = Detalii...
|
details = Detalii...
|
||||||
edit = Editare...
|
edit = Editează...
|
||||||
editor.name = Nume:
|
editor.name = Nume:
|
||||||
editor.spawn = Adaugă Unitate
|
editor.spawn = Adaugă Unitate
|
||||||
editor.removeunit = Înlătură Unitate
|
editor.removeunit = Înlătură Unitate
|
||||||
editor.teams = Echipe
|
editor.teams = Echipe
|
||||||
editor.errorload = Eroare la încărcarea fișierului.
|
editor.errorload = Eroare la încărcarea fișierului.
|
||||||
memory = Mem: {0}mb
|
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
|
||||||
editor.errorsave = Eroare la salvarea fișierului.
|
editor.errorsave = Eroare la salvarea fișierului.
|
||||||
editor.errorimage = Aceasta este o imagine, nu o hartă.
|
editor.errorimage = Aceasta este o imagine, nu o hartă.
|
||||||
editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat.
|
editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat.
|
||||||
@@ -462,6 +460,7 @@ toolmode.drawteams = Desenează Echipe
|
|||||||
toolmode.drawteams.description = Desenează echipe în loc de blocuri.
|
toolmode.drawteams.description = Desenează echipe în loc de blocuri.
|
||||||
|
|
||||||
filters.empty = [lightgray]Fără filtre! Adaugă unul folosind butonul de mai jos.
|
filters.empty = [lightgray]Fără filtre! Adaugă unul folosind butonul de mai jos.
|
||||||
|
|
||||||
filter.distort = Distorsionare
|
filter.distort = Distorsionare
|
||||||
filter.noise = Zgomot Vizual
|
filter.noise = Zgomot Vizual
|
||||||
filter.enemyspawn = Selectare Punct de Lansare Inamic
|
filter.enemyspawn = Selectare Punct de Lansare Inamic
|
||||||
@@ -478,6 +477,7 @@ filter.clear = Curăță
|
|||||||
filter.option.ignore = Ignoră
|
filter.option.ignore = Ignoră
|
||||||
filter.scatter = Împrăștie
|
filter.scatter = Împrăștie
|
||||||
filter.terrain = Teren
|
filter.terrain = Teren
|
||||||
|
|
||||||
filter.option.scale = Scară
|
filter.option.scale = Scară
|
||||||
filter.option.chance = Șansă
|
filter.option.chance = Șansă
|
||||||
filter.option.mag = Magnitudine
|
filter.option.mag = Magnitudine
|
||||||
@@ -492,6 +492,7 @@ filter.option.block = Bloc
|
|||||||
filter.option.floor = Podea
|
filter.option.floor = Podea
|
||||||
filter.option.flooronto = Podea Țintă
|
filter.option.flooronto = Podea Țintă
|
||||||
filter.option.target = Țintă
|
filter.option.target = Țintă
|
||||||
|
filter.option.replacement = Înlocuitor
|
||||||
filter.option.wall = Perete
|
filter.option.wall = Perete
|
||||||
filter.option.ore = Minereu
|
filter.option.ore = Minereu
|
||||||
filter.option.floor2 = Podea Secundară
|
filter.option.floor2 = Podea Secundară
|
||||||
@@ -508,6 +509,8 @@ load = Încarcă
|
|||||||
save = Salvează
|
save = Salvează
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
tps = TPS: {0}
|
tps = TPS: {0}
|
||||||
|
memory = Mem: {0}mb
|
||||||
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
ping = Ping: {0}ms
|
ping = Ping: {0}ms
|
||||||
language.restart = Repornește jocul pentru ca setările de limbă să aibă efect.
|
language.restart = Repornește jocul pentru ca setările de limbă să aibă efect.
|
||||||
settings = Setări
|
settings = Setări
|
||||||
@@ -675,6 +678,7 @@ unit.nobuild = [scarlet]Unitatea nu poate construi.
|
|||||||
lastaccessed = [lightgray]Ultima Accesare: {0}
|
lastaccessed = [lightgray]Ultima Accesare: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <vezi pe hartă>
|
||||||
stat.description = Utilizare
|
stat.description = Utilizare
|
||||||
stat.input = Necesită
|
stat.input = Necesită
|
||||||
stat.output = Produce
|
stat.output = Produce
|
||||||
@@ -999,6 +1003,7 @@ rules.unithealthmultiplier = Multiplicatorul Vieții Unităților
|
|||||||
rules.unitdamagemultiplier = Multiplicatorul Deteriorării Unităților
|
rules.unitdamagemultiplier = Multiplicatorul Deteriorării Unităților
|
||||||
rules.unitcapvariable = Nucleele Contribuie la Limita Unităților
|
rules.unitcapvariable = Nucleele Contribuie la Limita Unităților
|
||||||
rules.unitcap = Limita de Bază a Unităților
|
rules.unitcap = Limita de Bază a Unităților
|
||||||
|
rules.polygoncoreprotection = Protecție Poligonală a Nucleului
|
||||||
rules.enemycorebuildradius = Interzisă Construirea în Jurul Nucleului Inamic:[lightgray] (pătrate)
|
rules.enemycorebuildradius = Interzisă Construirea în Jurul Nucleului Inamic:[lightgray] (pătrate)
|
||||||
rules.wavespacing = Spațiul Dintre Valuri:[lightgray] (sec)
|
rules.wavespacing = Spațiul Dintre Valuri:[lightgray] (sec)
|
||||||
rules.buildcostmultiplier = Multiplicatorul Costului Construcției
|
rules.buildcostmultiplier = Multiplicatorul Costului Construcției
|
||||||
@@ -1161,7 +1166,8 @@ block.spore-cluster.name = Grup de Spori
|
|||||||
block.metal-floor.name = Podea de Metal 1
|
block.metal-floor.name = Podea de Metal 1
|
||||||
block.metal-floor-2.name = Podea de Metal 2
|
block.metal-floor-2.name = Podea de Metal 2
|
||||||
block.metal-floor-3.name = Podea de Metal 3
|
block.metal-floor-3.name = Podea de Metal 3
|
||||||
block.metal-floor-5.name = Podea de Metal 4
|
block.metal-floor-4.name = Podea de Metal 4
|
||||||
|
block.metal-floor-5.name = Podea de Metal 5
|
||||||
block.metal-floor-damaged.name = Podea de Metal Deteriorată
|
block.metal-floor-damaged.name = Podea de Metal Deteriorată
|
||||||
block.dark-panel-1.name = Panou Negru 1
|
block.dark-panel-1.name = Panou Negru 1
|
||||||
block.dark-panel-2.name = Panou Negru 2
|
block.dark-panel-2.name = Panou Negru 2
|
||||||
|
|||||||
@@ -67,6 +67,14 @@ schematic.delete.confirm = Эта схема будет поджарена Ис
|
|||||||
schematic.rename = Переименовать схему
|
schematic.rename = Переименовать схему
|
||||||
schematic.info = {0}x{1}, {2} блоков
|
schematic.info = {0}x{1}, {2} блоков
|
||||||
schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере[] запрещено использование схем.
|
schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере[] запрещено использование схем.
|
||||||
|
schematic.tags = Теги:
|
||||||
|
schematic.edittags = Редактировать теги
|
||||||
|
schematic.addtag = Добавить тег
|
||||||
|
schematic.texttag = Текстовый тег
|
||||||
|
schematic.icontag = Символьный тег
|
||||||
|
schematic.renametag = Переименовать тег
|
||||||
|
schematic.tagdelconfirm = Полностью удалить этот тег?
|
||||||
|
schematic.tagexists = Такой тег уже существует.
|
||||||
|
|
||||||
stats = Статистика
|
stats = Статистика
|
||||||
stat.wave = Волн отражено:[accent] {0}
|
stat.wave = Волн отражено:[accent] {0}
|
||||||
@@ -306,7 +314,6 @@ data.exported = Данные экспортированы.
|
|||||||
data.invalid = Эти игровые данные являются недействительными.
|
data.invalid = Эти игровые данные являются недействительными.
|
||||||
data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, ваша игра немедленно закроется.
|
data.import.confirm = Импорт внешних данных сотрёт[scarlet] все[] ваши игровые данные.\n[accent]Это не может быть отменено![]\n\nКак только данные импортированы, ваша игра немедленно закроется.
|
||||||
quit.confirm = Вы уверены, что хотите выйти?
|
quit.confirm = Вы уверены, что хотите выйти?
|
||||||
quit.confirm.tutorial = Вы уверены, что знаете, что делаете?\nОбучение может быть повторно запущено через[accent] Настройки->Игра->Открыть обучение.[]
|
|
||||||
loading = [accent]Загрузка…
|
loading = [accent]Загрузка…
|
||||||
reloading = [accent]Перезагрузка модификаций…
|
reloading = [accent]Перезагрузка модификаций…
|
||||||
saving = [accent]Сохранение…
|
saving = [accent]Сохранение…
|
||||||
@@ -453,6 +460,7 @@ toolmode.drawteams = Изменить команду блока
|
|||||||
toolmode.drawteams.description = Изменяет принадлежность\nблока к команде.
|
toolmode.drawteams.description = Изменяет принадлежность\nблока к команде.
|
||||||
|
|
||||||
filters.empty = [lightgray]Нет фильтров! Добавьте один при помощи кнопки ниже.
|
filters.empty = [lightgray]Нет фильтров! Добавьте один при помощи кнопки ниже.
|
||||||
|
|
||||||
filter.distort = Искажение
|
filter.distort = Искажение
|
||||||
filter.noise = Шум
|
filter.noise = Шум
|
||||||
filter.enemyspawn = Случайный выбор \nточек высадки
|
filter.enemyspawn = Случайный выбор \nточек высадки
|
||||||
@@ -469,6 +477,7 @@ filter.clear = Очистить
|
|||||||
filter.option.ignore = Игнорировать
|
filter.option.ignore = Игнорировать
|
||||||
filter.scatter = Сеятель
|
filter.scatter = Сеятель
|
||||||
filter.terrain = Ландшафт
|
filter.terrain = Ландшафт
|
||||||
|
|
||||||
filter.option.scale = Масштаб фильтра
|
filter.option.scale = Масштаб фильтра
|
||||||
filter.option.chance = Шанс
|
filter.option.chance = Шанс
|
||||||
filter.option.mag = Сила применения
|
filter.option.mag = Сила применения
|
||||||
@@ -477,11 +486,13 @@ filter.option.circle-scale = Масштаб круга
|
|||||||
filter.option.octaves = Цикличность применения
|
filter.option.octaves = Цикличность применения
|
||||||
filter.option.falloff = Спад цикличности
|
filter.option.falloff = Спад цикличности
|
||||||
filter.option.angle = Угол
|
filter.option.angle = Угол
|
||||||
|
filter.option.rotate = Повернуть
|
||||||
filter.option.amount = Количество
|
filter.option.amount = Количество
|
||||||
filter.option.block = Блок
|
filter.option.block = Блок
|
||||||
filter.option.floor = Поверхность
|
filter.option.floor = Поверхность
|
||||||
filter.option.flooronto = Целевая поверхность
|
filter.option.flooronto = Целевая поверхность
|
||||||
filter.option.target = Цель
|
filter.option.target = Цель
|
||||||
|
filter.option.replacement = Замена
|
||||||
filter.option.wall = Стена
|
filter.option.wall = Стена
|
||||||
filter.option.ore = Руда
|
filter.option.ore = Руда
|
||||||
filter.option.floor2 = Вторая поверхность
|
filter.option.floor2 = Вторая поверхность
|
||||||
@@ -498,6 +509,7 @@ load = Загрузить
|
|||||||
save = Сохранить
|
save = Сохранить
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Пинг: {0}мс
|
ping = Пинг: {0}мс
|
||||||
|
tps = TPS: {0}
|
||||||
memory = Mem: {0}mb
|
memory = Mem: {0}mb
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = Перезагрузите игру, чтобы языковые настройки вступили в силу.
|
language.restart = Перезагрузите игру, чтобы языковые настройки вступили в силу.
|
||||||
@@ -530,7 +542,7 @@ launch.from = Запуск из: [accent]{0}
|
|||||||
launch.destination = Место назначения: {0}
|
launch.destination = Место назначения: {0}
|
||||||
configure.invalid = Количество должно быть числом между 0 и {0}.
|
configure.invalid = Количество должно быть числом между 0 и {0}.
|
||||||
add = Добавить…
|
add = Добавить…
|
||||||
boss.health = Прочность стража
|
guardian = Страж
|
||||||
|
|
||||||
connectfail = [scarlet]Ошибка подключения:\n\n[accent]{0}
|
connectfail = [scarlet]Ошибка подключения:\n\n[accent]{0}
|
||||||
error.unreachable = Сервер недоступен.\nВы уверены, что адрес введён корректно?
|
error.unreachable = Сервер недоступен.\nВы уверены, что адрес введён корректно?
|
||||||
@@ -574,6 +586,7 @@ sector.attacked = Сектор [accent]{0}[white] атакован!
|
|||||||
sector.lost = Сектор [accent]{0}[white] потерян!
|
sector.lost = Сектор [accent]{0}[white] потерян!
|
||||||
#note: the missing space in the line below is intentional (недостающий пробел управляется кодом)
|
#note: the missing space in the line below is intentional (недостающий пробел управляется кодом)
|
||||||
sector.captured = Сектор [accent]{0}[white]захвачен!
|
sector.captured = Сектор [accent]{0}[white]захвачен!
|
||||||
|
sector.changeicon = Изменить иконку
|
||||||
|
|
||||||
threat.low = Низкая
|
threat.low = Низкая
|
||||||
threat.medium = Средняя
|
threat.medium = Средняя
|
||||||
@@ -626,6 +639,7 @@ status.wet.name = Влага
|
|||||||
status.muddy.name = В грязи
|
status.muddy.name = В грязи
|
||||||
status.melting.name = Плавление
|
status.melting.name = Плавление
|
||||||
status.sapped.name = Истощение
|
status.sapped.name = Истощение
|
||||||
|
status.electrified.name = Электризация
|
||||||
status.spore-slowed.name = Замедление спорами
|
status.spore-slowed.name = Замедление спорами
|
||||||
status.tarred.name = В нефти
|
status.tarred.name = В нефти
|
||||||
status.overclock.name = Разгон
|
status.overclock.name = Разгон
|
||||||
@@ -654,6 +668,7 @@ settings.clearcampaignsaves.confirm = Вы уверены, что хотите
|
|||||||
paused = [accent]< Пауза >
|
paused = [accent]< Пауза >
|
||||||
clear = Очистить
|
clear = Очистить
|
||||||
banned = [scarlet]Запрещено
|
banned = [scarlet]Запрещено
|
||||||
|
unsupported.environment = [scarlet]Неподдерживаемые условия
|
||||||
yes = Да
|
yes = Да
|
||||||
no = Нет
|
no = Нет
|
||||||
info.title = Информация
|
info.title = Информация
|
||||||
@@ -663,13 +678,14 @@ unit.nobuild = [scarlet]Единица не может строить
|
|||||||
lastaccessed = [lightgray]Последняя конфигурация от {0}
|
lastaccessed = [lightgray]Последняя конфигурация от {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <загрузите карту для отображения>
|
||||||
stat.description = Назначение
|
stat.description = Назначение
|
||||||
stat.input = Вход
|
stat.input = Вход
|
||||||
stat.output = Выход
|
stat.output = Выход
|
||||||
stat.booster = Ускоритель
|
stat.booster = Ускоритель
|
||||||
stat.tiles = Необходимые плитки
|
stat.tiles = Необходимые плитки
|
||||||
stat.affinities = Увеличение эффективности
|
stat.affinities = Множитель эффективности
|
||||||
stat.opposites = Уменьшение эффективности
|
stat.opposites = Противоположности
|
||||||
stat.powercapacity = Вместимость энергии
|
stat.powercapacity = Вместимость энергии
|
||||||
stat.powershot = Энергия/выстрел
|
stat.powershot = Энергия/выстрел
|
||||||
stat.damage = Урон
|
stat.damage = Урон
|
||||||
@@ -691,7 +707,8 @@ stat.itemcapacity = Вместимость предметов
|
|||||||
stat.memorycapacity = Размер памяти
|
stat.memorycapacity = Размер памяти
|
||||||
stat.basepowergeneration = Базовая генерация энергии
|
stat.basepowergeneration = Базовая генерация энергии
|
||||||
stat.productiontime = Время производства
|
stat.productiontime = Время производства
|
||||||
stat.repairtime = Время полной регенерации
|
stat.repairtime = Время полного ремонта
|
||||||
|
stat.repairspeed = Скорость ремонта
|
||||||
stat.weapons = Орудия
|
stat.weapons = Орудия
|
||||||
stat.bullet = Снаряд
|
stat.bullet = Снаряд
|
||||||
stat.speedincrease = Увеличение скорости
|
stat.speedincrease = Увеличение скорости
|
||||||
@@ -745,6 +762,7 @@ ability.statusfield = {0} Усиливающее поле
|
|||||||
ability.unitspawn = Завод единиц «{0}»
|
ability.unitspawn = Завод единиц «{0}»
|
||||||
ability.shieldregenfield = Поле восстановления щита
|
ability.shieldregenfield = Поле восстановления щита
|
||||||
ability.movelightning = Молнии при движении
|
ability.movelightning = Молнии при движении
|
||||||
|
ability.energyfield = Энергетическое поле: [accent]{0}[] урона ~ [accent]{1}[] блоков / [accent]{2}[] целей
|
||||||
|
|
||||||
bar.drilltierreq = Требуется бур получше
|
bar.drilltierreq = Требуется бур получше
|
||||||
bar.noresources = Недостаточно ресурсов
|
bar.noresources = Недостаточно ресурсов
|
||||||
@@ -767,6 +785,7 @@ bar.power = Энергия
|
|||||||
bar.progress = Прогресс строительства
|
bar.progress = Прогресс строительства
|
||||||
bar.input = Ввод
|
bar.input = Ввод
|
||||||
bar.output = Вывод
|
bar.output = Вывод
|
||||||
|
bar.strength = [stat]{0}[lightgray]x эффективность
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]Управляется процессором
|
units.processorcontrol = [lightgray]Управляется процессором
|
||||||
|
|
||||||
@@ -778,7 +797,7 @@ bullet.frag = [stat]осколочный
|
|||||||
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
||||||
bullet.knockback = [stat]{0}[lightgray] отбрасывания
|
bullet.knockback = [stat]{0}[lightgray] отбрасывания
|
||||||
bullet.pierce = [stat]{0}[lightgray]x пробитие
|
bullet.pierce = [stat]{0}[lightgray]x пробития
|
||||||
bullet.infinitepierce = [stat]бесконечное пробитие
|
bullet.infinitepierce = [stat]бесконечное пробитие
|
||||||
bullet.healpercent = [stat]{0}[lightgray]% ремонта
|
bullet.healpercent = [stat]{0}[lightgray]% ремонта
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x множитель боеприпасов
|
bullet.multiplier = [stat]{0}[lightgray]x множитель боеприпасов
|
||||||
@@ -975,6 +994,8 @@ rules.wavetimer = Интервал волн
|
|||||||
rules.waves = Волны
|
rules.waves = Волны
|
||||||
rules.attack = Режим атаки
|
rules.attack = Режим атаки
|
||||||
rules.buildai = Строительство ИИ
|
rules.buildai = Строительство ИИ
|
||||||
|
rules.corecapture = Захват ядра после уничтожения
|
||||||
|
rules.polygoncoreprotection = Полигональная защита ядер
|
||||||
rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда)
|
rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда)
|
||||||
rules.blockhealthmultiplier = Множитель прочности блоков
|
rules.blockhealthmultiplier = Множитель прочности блоков
|
||||||
rules.blockdamagemultiplier = Множитель урона блоков
|
rules.blockdamagemultiplier = Множитель урона блоков
|
||||||
@@ -1030,6 +1051,7 @@ item.blast-compound.name = Взрывчатая смесь
|
|||||||
item.pyratite.name = Пиротит
|
item.pyratite.name = Пиротит
|
||||||
item.metaglass.name = Метастекло
|
item.metaglass.name = Метастекло
|
||||||
item.scrap.name = Металлолом
|
item.scrap.name = Металлолом
|
||||||
|
|
||||||
liquid.water.name = Вода
|
liquid.water.name = Вода
|
||||||
liquid.slag.name = Шлак
|
liquid.slag.name = Шлак
|
||||||
liquid.oil.name = Нефть
|
liquid.oil.name = Нефть
|
||||||
@@ -1061,6 +1083,11 @@ unit.minke.name = Минке
|
|||||||
unit.bryde.name = Брайд
|
unit.bryde.name = Брайд
|
||||||
unit.sei.name = Сейвал
|
unit.sei.name = Сейвал
|
||||||
unit.omura.name = Омура
|
unit.omura.name = Омура
|
||||||
|
unit.retusa.name = Ретуза
|
||||||
|
unit.oxynoe.name = Оксино
|
||||||
|
unit.cyerce.name = Цирс
|
||||||
|
unit.aegires.name = Эгирес
|
||||||
|
unit.navanax.name = Наванакс
|
||||||
unit.alpha.name = Альфа
|
unit.alpha.name = Альфа
|
||||||
unit.beta.name = Бета
|
unit.beta.name = Бета
|
||||||
unit.gamma.name = Гамма
|
unit.gamma.name = Гамма
|
||||||
@@ -1121,6 +1148,7 @@ block.sand-water.name = Песок с водой
|
|||||||
block.darksand-water.name = Тёмный песок с водой
|
block.darksand-water.name = Тёмный песок с водой
|
||||||
block.char.name = Выжженная земля
|
block.char.name = Выжженная земля
|
||||||
block.dacite.name = Дацит
|
block.dacite.name = Дацит
|
||||||
|
block.rhyolite.name = Риолит
|
||||||
block.dacite-wall.name = Дацитовая стена
|
block.dacite-wall.name = Дацитовая стена
|
||||||
block.dacite-boulder.name = Дацитовый валун
|
block.dacite-boulder.name = Дацитовый валун
|
||||||
block.ice-snow.name = Заснеженный лёд
|
block.ice-snow.name = Заснеженный лёд
|
||||||
@@ -1138,7 +1166,8 @@ block.spore-cluster.name = Скопление спор
|
|||||||
block.metal-floor.name = Металлический пол 1
|
block.metal-floor.name = Металлический пол 1
|
||||||
block.metal-floor-2.name = Металлический пол 2
|
block.metal-floor-2.name = Металлический пол 2
|
||||||
block.metal-floor-3.name = Металлический пол 3
|
block.metal-floor-3.name = Металлический пол 3
|
||||||
block.metal-floor-5.name = Металлический пол 4
|
block.metal-floor-4.name = Металлический пол 4
|
||||||
|
block.metal-floor-5.name = Металлический пол 5
|
||||||
block.metal-floor-damaged.name = Повреждённый металлический пол
|
block.metal-floor-damaged.name = Повреждённый металлический пол
|
||||||
block.dark-panel-1.name = Тёмная панель 1
|
block.dark-panel-1.name = Тёмная панель 1
|
||||||
block.dark-panel-2.name = Тёмная панель 2
|
block.dark-panel-2.name = Тёмная панель 2
|
||||||
@@ -1228,6 +1257,7 @@ block.solar-panel.name = Солнечная панель
|
|||||||
block.solar-panel-large.name = Большая солнечная панель
|
block.solar-panel-large.name = Большая солнечная панель
|
||||||
block.oil-extractor.name = Нефтяная вышка
|
block.oil-extractor.name = Нефтяная вышка
|
||||||
block.repair-point.name = Ремонтный пункт
|
block.repair-point.name = Ремонтный пункт
|
||||||
|
block.repair-turret.name = Ремонтная турель
|
||||||
block.pulse-conduit.name = Импульсный трубопровод
|
block.pulse-conduit.name = Импульсный трубопровод
|
||||||
block.plated-conduit.name = Укреплённый трубопровод
|
block.plated-conduit.name = Укреплённый трубопровод
|
||||||
block.phase-conduit.name = Фазовый трубопровод
|
block.phase-conduit.name = Фазовый трубопровод
|
||||||
@@ -1244,8 +1274,8 @@ block.thermal-generator.name = Термальный генератор
|
|||||||
block.alloy-smelter.name = Плавильня кинетического сплава
|
block.alloy-smelter.name = Плавильня кинетического сплава
|
||||||
block.mender.name = Регенератор
|
block.mender.name = Регенератор
|
||||||
block.mend-projector.name = Ремонтирующий проектор
|
block.mend-projector.name = Ремонтирующий проектор
|
||||||
block.surge-wall.name = Стена из кинетического сплава
|
block.surge-wall.name = Кинетическая стена
|
||||||
block.surge-wall-large.name = Большая стена из кинетического сплава
|
block.surge-wall-large.name = Большая кинетическая стена
|
||||||
block.cyclone.name = Циклон
|
block.cyclone.name = Циклон
|
||||||
block.fuse.name = Взрыватель
|
block.fuse.name = Взрыватель
|
||||||
block.shock-mine.name = Шоковая мина
|
block.shock-mine.name = Шоковая мина
|
||||||
@@ -1270,6 +1300,12 @@ block.exponential-reconstructor.name = Экспоненциальный реко
|
|||||||
block.tetrative-reconstructor.name = Тетративный реконструктор
|
block.tetrative-reconstructor.name = Тетративный реконструктор
|
||||||
block.payload-conveyor.name = Грузовой конвейер
|
block.payload-conveyor.name = Грузовой конвейер
|
||||||
block.payload-router.name = Разгрузочный маршрутизатор
|
block.payload-router.name = Разгрузочный маршрутизатор
|
||||||
|
block.duct.name = Предметный канал
|
||||||
|
block.duct-router.name = Канальный маршрутизатор
|
||||||
|
block.duct-bridge.name = Канальный мост
|
||||||
|
block.payload-propulsion-tower.name = Грузовая катапульта
|
||||||
|
block.payload-void.name = Грузовой вакуум
|
||||||
|
block.payload-source.name = Грузовой источник
|
||||||
block.disassembler.name = Разборщик
|
block.disassembler.name = Разборщик
|
||||||
block.silicon-crucible.name = Кремниевый тигель
|
block.silicon-crucible.name = Кремниевый тигель
|
||||||
block.overdrive-dome.name = Сверхприводный купол
|
block.overdrive-dome.name = Сверхприводный купол
|
||||||
@@ -1289,9 +1325,8 @@ block.memory-cell.name = Ячейка памяти
|
|||||||
block.memory-bank.name = Блок памяти
|
block.memory-bank.name = Блок памяти
|
||||||
|
|
||||||
team.blue.name = Синяя
|
team.blue.name = Синяя
|
||||||
team.crux.name = Красная
|
team.crux.name = Агрессоры
|
||||||
team.sharded.name = Оранжевая
|
team.sharded.name = Расколотые
|
||||||
team.orange.name = Оранжевая
|
|
||||||
team.derelict.name = Покинутая
|
team.derelict.name = Покинутая
|
||||||
team.green.name = Зелёная
|
team.green.name = Зелёная
|
||||||
team.purple.name = Фиолетовая
|
team.purple.name = Фиолетовая
|
||||||
@@ -1302,7 +1337,7 @@ hint.zoom = [accent]Покрутите колесо мыши[] для прибл
|
|||||||
hint.mine = Приблизьтесь к \uf8c4 медной руде и [accent]нажмите[] на неё для ручной добычи.
|
hint.mine = Приблизьтесь к \uf8c4 медной руде и [accent]нажмите[] на неё для ручной добычи.
|
||||||
hint.desktopShoot = Используйте [accent][[Левую кнопку мыши][] для стрельбы.
|
hint.desktopShoot = Используйте [accent][[Левую кнопку мыши][] для стрельбы.
|
||||||
hint.depositItems = Чтобы перенести предметы, перетяните их с вашего корабля в ядро.
|
hint.depositItems = Чтобы перенести предметы, перетяните их с вашего корабля в ядро.
|
||||||
hint.respawn = Чтобы заново появиться в корабле нажмите [accent][[V][].
|
hint.respawn = Чтобы заново появиться в корабле, нажмите [accent][[V][].
|
||||||
hint.respawn.mobile = Вы переключили управление единицей/структурой. Чтобы заново появиться в корабле, [accent]нажмите на аватар слева сверху.[]
|
hint.respawn.mobile = Вы переключили управление единицей/структурой. Чтобы заново появиться в корабле, [accent]нажмите на аватар слева сверху.[]
|
||||||
hint.desktopPause = Нажмите [accent][[Пробел][] для приостановки и возобновления игры.
|
hint.desktopPause = Нажмите [accent][[Пробел][] для приостановки и возобновления игры.
|
||||||
hint.placeDrill = Выберите в меню справа внизу вкладку \ue85e [accent]Добычи[], затем выберите \uf870 [accent]Бур[] и нажмите на медные вкрапления, чтобы разместить его.
|
hint.placeDrill = Выберите в меню справа внизу вкладку \ue85e [accent]Добычи[], затем выберите \uf870 [accent]Бур[] и нажмите на медные вкрапления, чтобы разместить его.
|
||||||
@@ -1312,6 +1347,7 @@ hint.placeConveyor.mobile = Конвейеры перемещают предме
|
|||||||
hint.placeTurret = Установите \uf861 [accent]Турели[] для защиты своей базы от врагов.\n\nТурелям требуются боеприпасы — в данном случае \uf838медные.\nИспользуйте конвейеры и буры для их подачи.
|
hint.placeTurret = Установите \uf861 [accent]Турели[] для защиты своей базы от врагов.\n\nТурелям требуются боеприпасы — в данном случае \uf838медные.\nИспользуйте конвейеры и буры для их подачи.
|
||||||
hint.breaking = Выделите блоки в рамку [accent]правой кнопкой мыши[], чтобы разобрать их.
|
hint.breaking = Выделите блоки в рамку [accent]правой кнопкой мыши[], чтобы разобрать их.
|
||||||
hint.breaking.mobile = Активируйте \ue817 [accent]молоток[] в правом нижнем углу и нажимайте на блоки, чтобы разобрать их. Удерживайте палец в течение секунды и переместите, чтобы разобрать выделением.
|
hint.breaking.mobile = Активируйте \ue817 [accent]молоток[] в правом нижнем углу и нажимайте на блоки, чтобы разобрать их. Удерживайте палец в течение секунды и переместите, чтобы разобрать выделением.
|
||||||
|
hint.blockInfo = Для просмотра информации о блоке, выберите его в [accent]меню строительства[], затем нажмите на кнопку [accent][[?][] справа.
|
||||||
hint.research = Используйте кнопку \ue875 [accent]Исследований[], чтобы исследовать новые технологии.
|
hint.research = Используйте кнопку \ue875 [accent]Исследований[], чтобы исследовать новые технологии.
|
||||||
hint.research.mobile = Используйте кнопку \ue875 [accent]Исследований[] в \ue88c [accent]Меню[], чтобы исследовать новые технологии.
|
hint.research.mobile = Используйте кнопку \ue875 [accent]Исследований[] в \ue88c [accent]Меню[], чтобы исследовать новые технологии.
|
||||||
hint.unitControl = Зажмите [accent][[Л-Ctrl][] и [accent]нажмите левую кнопку мыши[], чтобы контролировать дружественные единицы и турели.
|
hint.unitControl = Зажмите [accent][[Л-Ctrl][] и [accent]нажмите левую кнопку мыши[], чтобы контролировать дружественные единицы и турели.
|
||||||
@@ -1345,7 +1381,7 @@ item.graphite.description = Используется в электрически
|
|||||||
item.sand.description = Используется в производстве других обработанных материалов.
|
item.sand.description = Используется в производстве других обработанных материалов.
|
||||||
item.coal.description = Используется как топливо и в производстве обработанных материалов.
|
item.coal.description = Используется как топливо и в производстве обработанных материалов.
|
||||||
item.coal.details = Похоже, что это окаменевшее растительное вещество, образовавшееся задолго до Посева.
|
item.coal.details = Похоже, что это окаменевшее растительное вещество, образовавшееся задолго до Посева.
|
||||||
item.titanium.description = Широко используется в транспортировке жидкостей, бурах и авиации.
|
item.titanium.description = Широко используется в транспортировке жидкостей, бурах и фабриках.
|
||||||
item.thorium.description = Используется в прочных постройках и как ядерное топливо.
|
item.thorium.description = Используется в прочных постройках и как ядерное топливо.
|
||||||
item.scrap.description = Используется в плавильнях и измельчителях для получения других материалов.
|
item.scrap.description = Используется в плавильнях и измельчителях для получения других материалов.
|
||||||
item.scrap.details = Остатки старых построек и единиц.
|
item.scrap.details = Остатки старых построек и единиц.
|
||||||
@@ -1566,7 +1602,7 @@ logic.nounitbuild = [red]Строительство с помощью проце
|
|||||||
lenum.type = Тип постройки/единицы. \nНапример, для маршрутизатора это будет [accent]@router[].\nНе строка.
|
lenum.type = Тип постройки/единицы. \nНапример, для маршрутизатора это будет [accent]@router[].\nНе строка.
|
||||||
lenum.shoot = Стрельба в определённую позицию.
|
lenum.shoot = Стрельба в определённую позицию.
|
||||||
lenum.shootp = Стрельба в единицу/постройку с расчётом скорости.
|
lenum.shootp = Стрельба в единицу/постройку с расчётом скорости.
|
||||||
lenum.configure = Конфигурация постройки, например, предмет сортировки.
|
lenum.config = Конфигурация постройки, например, предмет сортировки.
|
||||||
lenum.enabled = Включён ли блок.
|
lenum.enabled = Включён ли блок.
|
||||||
|
|
||||||
laccess.color = Цвет осветителя.
|
laccess.color = Цвет осветителя.
|
||||||
@@ -1574,6 +1610,7 @@ laccess.controller = Командующий единицей. Если един
|
|||||||
laccess.dead = Является ли единица/постройка неработающей или несуществующей.
|
laccess.dead = Является ли единица/постройка неработающей или несуществующей.
|
||||||
laccess.controlled = Возвращает:\n[accent]@ctrlProcessor[] если единица управляется процессором\n[accent]@ctrlPlayer[] если единица/постройка управляется игроком\n[accent]@ctrlFormation[] если единица в строю\nВ противном случае — 0.
|
laccess.controlled = Возвращает:\n[accent]@ctrlProcessor[] если единица управляется процессором\n[accent]@ctrlPlayer[] если единица/постройка управляется игроком\n[accent]@ctrlFormation[] если единица в строю\nВ противном случае — 0.
|
||||||
laccess.commanded = [red]Устарело. Будет удалено![]\nВместо этого, используйте [accent]controlled[].
|
laccess.commanded = [red]Устарело. Будет удалено![]\nВместо этого, используйте [accent]controlled[].
|
||||||
|
laccess.progress = Прогресс действия от 0 до 1. Возвращает прогресс производства, перезарядку турели или прогресс постройки.
|
||||||
|
|
||||||
graphicstype.clear = Заливка дисплея цветом.
|
graphicstype.clear = Заливка дисплея цветом.
|
||||||
graphicstype.color = Установка цвета для следующих операций отрисовки.
|
graphicstype.color = Установка цвета для следующих операций отрисовки.
|
||||||
@@ -1605,9 +1642,15 @@ lenum.min = Минимальное из двух чисел.
|
|||||||
lenum.max = Максимальное из двух чисел.
|
lenum.max = Максимальное из двух чисел.
|
||||||
lenum.angle = Угол вектора в градусах.
|
lenum.angle = Угол вектора в градусах.
|
||||||
lenum.len = Длина вектора.
|
lenum.len = Длина вектора.
|
||||||
|
|
||||||
lenum.sin = Синус, в градусах.
|
lenum.sin = Синус, в градусах.
|
||||||
lenum.cos = Косинус, в градусах.
|
lenum.cos = Косинус, в градусах.
|
||||||
lenum.tan = Тангенс, в градусах.
|
lenum.tan = Тангенс, в градусах.
|
||||||
|
|
||||||
|
lenum.asin = Арксинус, в градусах.
|
||||||
|
lenum.acos = Арккосинус, в градусах.
|
||||||
|
lenum.atan = Арктангенс, в градусах.
|
||||||
|
|
||||||
#это не ошибка, поищите 'обозначение диапазонов'
|
#это не ошибка, поищите 'обозначение диапазонов'
|
||||||
lenum.rand = Случайное число в диапазоне [0, значение).
|
lenum.rand = Случайное число в диапазоне [0, значение).
|
||||||
lenum.log = Натуральный логарифм (ln).
|
lenum.log = Натуральный логарифм (ln).
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -576,13 +576,13 @@ sectors.vulnerable = [scarlet]Dayanıksız
|
|||||||
sectors.underattack = [scarlet]Saldırı Altında! [accent]{0}% hasarlı
|
sectors.underattack = [scarlet]Saldırı Altında! [accent]{0}% hasarlı
|
||||||
sectors.survives = [accent]{0} Dalgaya dayanabilir!
|
sectors.survives = [accent]{0} Dalgaya dayanabilir!
|
||||||
sectors.go = Git
|
sectors.go = Git
|
||||||
sector.curcapture = Sektör Yakalandı
|
sector.curcapture = Sektör Elegeçirildi
|
||||||
sector.curlost = Sektör Kaybedildi
|
sector.curlost = Sektör Kaybedildi
|
||||||
sector.missingresources = [scarlet]Yetersiz Çekirdek Kaynakları
|
sector.missingresources = [scarlet]Yetersiz Çekirdek Kaynakları
|
||||||
sector.attacked = Sektör [accent]{0}[white] saldırı altında!
|
sector.attacked = Sektör [accent]{0}[white] saldırı altında!
|
||||||
sector.lost = Sektör [accent]{0}[white] kaybedildi!
|
sector.lost = Sektör [accent]{0}[white] kaybedildi!
|
||||||
#note: the missing space in the line below is intentional
|
#note: the missing space in the line below is intentional
|
||||||
sector.captured = Sektör [accent]{0}[white]yakalandı!
|
sector.captured = Sektör [accent]{0}[white]elegeçirildi!
|
||||||
sector.changeicon = İkon Değiştir
|
sector.changeicon = İkon Değiştir
|
||||||
|
|
||||||
threat.low = Düşük
|
threat.low = Düşük
|
||||||
@@ -1292,14 +1292,14 @@ block.additive-reconstructor.name = Eklemeli Yeniden Yapılandırıcı
|
|||||||
block.multiplicative-reconstructor.name = Çarpmalı Yeniden Yapılandırıcı
|
block.multiplicative-reconstructor.name = Çarpmalı Yeniden Yapılandırıcı
|
||||||
block.exponential-reconstructor.name = Üstel Yeniden Yapılandırıcı
|
block.exponential-reconstructor.name = Üstel Yeniden Yapılandırıcı
|
||||||
block.tetrative-reconstructor.name = Dörtlü Yeniden Yapılandırıcı
|
block.tetrative-reconstructor.name = Dörtlü Yeniden Yapılandırıcı
|
||||||
block.payload-conveyor.name = Yük Konveyörü
|
block.payload-conveyor.name = Kargo Konveyörü
|
||||||
block.payload-router.name = Yük Yönlendirici
|
block.payload-router.name = Kargo Yönlendirici
|
||||||
block.duct.name = Tüp
|
block.duct.name = Tüp
|
||||||
block.duct-router.name = Tüp Yönlendirici
|
block.duct-router.name = Tüp Yönlendirici
|
||||||
block.duct-bridge.name = Tüp Köprü
|
block.duct-bridge.name = Tüp Köprü
|
||||||
block.payload-propulsion-tower.name = Yük Aktarma Kulesi
|
block.payload-propulsion-tower.name = Yük Aktarma Kulesi
|
||||||
block.payload-void.name = Yük Yokedici
|
block.payload-void.name = Kargo Yokedici
|
||||||
block.payload-source.name = Yük Kaynağı
|
block.payload-source.name = Kargo Kaynağı
|
||||||
block.disassembler.name = Sökücü
|
block.disassembler.name = Sökücü
|
||||||
block.silicon-crucible.name = Büyük Silikon Fırını
|
block.silicon-crucible.name = Büyük Silikon Fırını
|
||||||
block.overdrive-dome.name = Hızlandırma Kubbesi
|
block.overdrive-dome.name = Hızlandırma Kubbesi
|
||||||
@@ -1308,7 +1308,7 @@ block.block-forge.name = Blok Fabrikası
|
|||||||
block.block-loader.name = Blok Yükleyici
|
block.block-loader.name = Blok Yükleyici
|
||||||
block.block-unloader.name = Blok Boşaltıcı
|
block.block-unloader.name = Blok Boşaltıcı
|
||||||
block.interplanetary-accelerator.name = Gezegenler Arası Hızlandırıcı
|
block.interplanetary-accelerator.name = Gezegenler Arası Hızlandırıcı
|
||||||
|
#ama tüp ne aga -Anti Dragon
|
||||||
block.switch.name = Düğme
|
block.switch.name = Düğme
|
||||||
block.micro-processor.name = Mikro İşlemci
|
block.micro-processor.name = Mikro İşlemci
|
||||||
block.logic-processor.name = İşlemci
|
block.logic-processor.name = İşlemci
|
||||||
@@ -1456,7 +1456,7 @@ block.underflow-gate.description = Taşma geçidinin zıttıdır. Sol ve sağ ta
|
|||||||
block.mass-driver.description = En gelişmiş materyal taşıma bloğu. bir miktar materyalı alır ve onları uzak mesafedeki bir başka kütle sürücüsüne ateşler. Çalışması için enerji gerekir.
|
block.mass-driver.description = En gelişmiş materyal taşıma bloğu. bir miktar materyalı alır ve onları uzak mesafedeki bir başka kütle sürücüsüne ateşler. Çalışması için enerji gerekir.
|
||||||
block.mechanical-pump.description = Hiç enerji harcamayan, düşük çıktılı, ucuz bir pompa.
|
block.mechanical-pump.description = Hiç enerji harcamayan, düşük çıktılı, ucuz bir pompa.
|
||||||
block.rotary-pump.description = Daha gelişmiş bir pompa. Daha fazla sıvı depolar ama çalışması için enerji gerekir.
|
block.rotary-pump.description = Daha gelişmiş bir pompa. Daha fazla sıvı depolar ama çalışması için enerji gerekir.
|
||||||
block.thermal-pump.description = En iyi pompa.
|
block.thermal-pump.description = En iyi pompa. Çalışması için enerji gerekir.
|
||||||
block.conduit.description = Temel sıvı taşıma bloğu. Sıvıları ileri taşır. Pompalar ve diğer borularla birlikte kullanılır.
|
block.conduit.description = Temel sıvı taşıma bloğu. Sıvıları ileri taşır. Pompalar ve diğer borularla birlikte kullanılır.
|
||||||
block.pulse-conduit.description = Gelişmiş bir sıvı taşıma bloğu. Sıvıları normal borulardan daha hızlı taşır ve onlardan daha fazla sıvı alır.
|
block.pulse-conduit.description = Gelişmiş bir sıvı taşıma bloğu. Sıvıları normal borulardan daha hızlı taşır ve onlardan daha fazla sıvı alır.
|
||||||
block.plated-conduit.description = Sıvıları dalga borusuyla aynı güçte taşır ancak daha fazla zırha sahiptir. Borular dışında başka bir şekilde yandan sıvı kabul etmez.\nDaha az sızıntı yapar.
|
block.plated-conduit.description = Sıvıları dalga borusuyla aynı güçte taşır ancak daha fazla zırha sahiptir. Borular dışında başka bir şekilde yandan sıvı kabul etmez.\nDaha az sızıntı yapar.
|
||||||
@@ -1465,9 +1465,9 @@ block.liquid-tank.description = Çok miktarda sıvıyı depolar. İhtiyaçları
|
|||||||
block.liquid-junction.description = Çakışan iki boru hattı arasında bir köprü görevi görür. İki farklı borunun farklı hedeflere farklı sıvıları taşıdığı durumlarda kullanışlıdır.
|
block.liquid-junction.description = Çakışan iki boru hattı arasında bir köprü görevi görür. İki farklı borunun farklı hedeflere farklı sıvıları taşıdığı durumlarda kullanışlıdır.
|
||||||
block.bridge-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları her türlü arazi veya binanın üzerinden üç bloğa kadar uzağa taşıyabilir.
|
block.bridge-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları her türlü arazi veya binanın üzerinden üç bloğa kadar uzağa taşıyabilir.
|
||||||
block.phase-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları kendisine bağlı başka bir faz borusuna ışınlamak için enerji kullanır.
|
block.phase-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları kendisine bağlı başka bir faz borusuna ışınlamak için enerji kullanır.
|
||||||
block.power-node.description = Bağlı düğümlere enerji sağlar. Ayrıca dibindeki bloklardan da enerji alıp onlara enerji verebilir.
|
block.power-node.description = Bağlı noktalara enerji aktarır. Ayrıca dibindeki bloklardan da enerji alıp onlara enerji verebilir.
|
||||||
block.power-node-large.description = Daha fazla menzil ve bağlantıya sahip daha gelişmiş bir güç düğümü
|
block.power-node-large.description = Daha fazla menzil ve bağlantıya sahip daha gelişmiş bir enerji noktası.
|
||||||
block.surge-tower.description = Daha az bağlantı sayısına sahip oldukça uzun menzilli bir güç düğümü.
|
block.surge-tower.description = Daha az bağlantı sayısına sahip oldukça uzun menzilli bir enerji noktası.
|
||||||
block.diode.description = Pil gücü, bu bloktan yalnızca diğer tarafta daha az güç depolandığında sadece tek bir yöne akabilir.
|
block.diode.description = Pil gücü, bu bloktan yalnızca diğer tarafta daha az güç depolandığında sadece tek bir yöne akabilir.
|
||||||
block.battery.description = Enerji fazlasını yedek olarak saklar. Enerji açığında sakladığı enerjiyi salar.
|
block.battery.description = Enerji fazlasını yedek olarak saklar. Enerji açığında sakladığı enerjiyi salar.
|
||||||
block.battery-large.description = Sıradan bataryadan çok daha fazla enerji depolar.
|
block.battery-large.description = Sıradan bataryadan çok daha fazla enerji depolar.
|
||||||
@@ -1570,9 +1570,9 @@ unit.minke.description = Yakındaki düşmanlara basit mermi ve toplarla saldır
|
|||||||
unit.bryde.description = Düşmanlara uzun menzil havanıyla saldırır.
|
unit.bryde.description = Düşmanlara uzun menzil havanıyla saldırır.
|
||||||
unit.sei.description = Düşmanlara füze atar ve devasa zırh delici mermilerle saldırır.
|
unit.sei.description = Düşmanlara füze atar ve devasa zırh delici mermilerle saldırır.
|
||||||
unit.omura.description = Uzun menzil bir ışın atıcıya sahiptir. Mermisi nerdeyse her bolğu delebilir. Flare üretir.
|
unit.omura.description = Uzun menzil bir ışın atıcıya sahiptir. Mermisi nerdeyse her bolğu delebilir. Flare üretir.
|
||||||
unit.alpha.description = Çekirdeği korur. Bina inşa eder
|
unit.alpha.description = Çekirdeği korur. Bina inşa eder.
|
||||||
unit.beta.description = Çekirdeği korur. Bina inşa eder
|
unit.beta.description = Çekirdeği korur. Bina inşa eder.
|
||||||
unit.gamma.description = Çekirdeği korur. Bina inşa eder
|
unit.gamma.description = Çekirdeği korur. Bina inşa eder.
|
||||||
|
|
||||||
lst.read = Bağlı hafıza kutusundaki numarayı okur.
|
lst.read = Bağlı hafıza kutusundaki numarayı okur.
|
||||||
lst.write = Bağlı hafıza kutuaundaki numaraya yazar.
|
lst.write = Bağlı hafıza kutuaundaki numaraya yazar.
|
||||||
|
|||||||
@@ -67,6 +67,14 @@ schematic.delete.confirm = Bản thiết kế này sẽ bị xóa hoàn toàn.
|
|||||||
schematic.rename = Đổi tên bản thiết kế
|
schematic.rename = Đổi tên bản thiết kế
|
||||||
schematic.info = {0}x{1}, {2} khối
|
schematic.info = {0}x{1}, {2} khối
|
||||||
schematic.disabled = [scarlet]Tính năng bản thiết kế đã bị tắt[]\nBạn không được sử dụng bản thiết kế trong [accent]bản đồ[] hoặc [accent]máy chủ.
|
schematic.disabled = [scarlet]Tính năng bản thiết kế đã bị tắt[]\nBạn không được sử dụng bản thiết kế trong [accent]bản đồ[] hoặc [accent]máy chủ.
|
||||||
|
schematic.tags = Thẻ:
|
||||||
|
schematic.edittags = Chỉnh sửa thẻ
|
||||||
|
schematic.addtag = Thêm thẻ
|
||||||
|
schematic.texttag = Thẻ văn bản
|
||||||
|
schematic.icontag = Thẻ icon
|
||||||
|
schematic.renametag = Đổi tên thẻ
|
||||||
|
schematic.tagdelconfirm = Xóa thẻ này?
|
||||||
|
schematic.tagexists = Thẻ đã tồn tại.
|
||||||
|
|
||||||
stats = Thống kê
|
stats = Thống kê
|
||||||
stat.wave = Đợt đã vượt qua:[accent] {0}
|
stat.wave = Đợt đã vượt qua:[accent] {0}
|
||||||
@@ -220,6 +228,8 @@ trace.ip = IP: [accent]{0}
|
|||||||
trace.id = ID: [accent]{0}
|
trace.id = ID: [accent]{0}
|
||||||
trace.mobile = Mobile Client: [accent]{0}
|
trace.mobile = Mobile Client: [accent]{0}
|
||||||
trace.modclient = Custom Client: [accent]{0}
|
trace.modclient = Custom Client: [accent]{0}
|
||||||
|
trace.times.joined = Số lần tham gia: [accent]{0}
|
||||||
|
trace.times.kicked = Số lần bị kick: [accent]{0}
|
||||||
invalidid = Client ID không hợp lệ! Vui lòng gửi báo cáo lỗi.
|
invalidid = Client ID không hợp lệ! Vui lòng gửi báo cáo lỗi.
|
||||||
server.bans = Cấm
|
server.bans = Cấm
|
||||||
server.bans.none = Không có người chơi nào bị cấm!
|
server.bans.none = Không có người chơi nào bị cấm!
|
||||||
@@ -304,7 +314,6 @@ data.exported = Dữ liệu đã được xuất.
|
|||||||
data.invalid = Đây không phải dữ liệu trò chơi hợp lệ.
|
data.invalid = Đây không phải dữ liệu trò chơi hợp lệ.
|
||||||
data.import.confirm = Nhập dữ liệu bên ngoài sẽ ghi đè[scarlet] tất cả[] dữ liệu trò chơi hiện tại.\n[accent]Điều này không thể hoàn tác![]\n\nSau khi dữ liệu được nhập, trò chơi của bạn sẽ thoát ngay lập tức.
|
data.import.confirm = Nhập dữ liệu bên ngoài sẽ ghi đè[scarlet] tất cả[] dữ liệu trò chơi hiện tại.\n[accent]Điều này không thể hoàn tác![]\n\nSau khi dữ liệu được nhập, trò chơi của bạn sẽ thoát ngay lập tức.
|
||||||
quit.confirm = Bạn có chắc muốn thoát?
|
quit.confirm = Bạn có chắc muốn thoát?
|
||||||
quit.confirm.tutorial = Bạn có chắc chắn biết mình đang làm gì không?\nHướng dẫn có thể được thực hiện lại trong[accent] Cài đặt->Trò chơi>Thực hiện lại hướng dẫn.[]
|
|
||||||
loading = [accent]Đang tải...
|
loading = [accent]Đang tải...
|
||||||
reloading = [accent]Đang tải lại Mods...
|
reloading = [accent]Đang tải lại Mods...
|
||||||
saving = [accent]Đang lưu...
|
saving = [accent]Đang lưu...
|
||||||
@@ -451,6 +460,7 @@ toolmode.drawteams = Draw Teams
|
|||||||
toolmode.drawteams.description = Draw teams instead of blocks.
|
toolmode.drawteams.description = Draw teams instead of blocks.
|
||||||
|
|
||||||
filters.empty = [lightgray]Không có bộ lọc! Thêm một cái bằng nút bên dưới.
|
filters.empty = [lightgray]Không có bộ lọc! Thêm một cái bằng nút bên dưới.
|
||||||
|
|
||||||
filter.distort = Cong vẹo
|
filter.distort = Cong vẹo
|
||||||
filter.noise = Nhiễu
|
filter.noise = Nhiễu
|
||||||
filter.enemyspawn = Khu vực xuất hiện của kẻ thù
|
filter.enemyspawn = Khu vực xuất hiện của kẻ thù
|
||||||
@@ -467,6 +477,7 @@ filter.clear = Xóa
|
|||||||
filter.option.ignore = Bỏ qua
|
filter.option.ignore = Bỏ qua
|
||||||
filter.scatter = Phân tán
|
filter.scatter = Phân tán
|
||||||
filter.terrain = Địa hình
|
filter.terrain = Địa hình
|
||||||
|
|
||||||
filter.option.scale = Kích thước
|
filter.option.scale = Kích thước
|
||||||
filter.option.chance = Tỷ lệ
|
filter.option.chance = Tỷ lệ
|
||||||
filter.option.mag = Độ lớn
|
filter.option.mag = Độ lớn
|
||||||
@@ -475,11 +486,13 @@ filter.option.circle-scale = Độ lớn vòng tròn
|
|||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
filter.option.angle = Góc
|
filter.option.angle = Góc
|
||||||
|
filter.option.rotate = Quay
|
||||||
filter.option.amount = Số lượng
|
filter.option.amount = Số lượng
|
||||||
filter.option.block = Khối
|
filter.option.block = Khối
|
||||||
filter.option.floor = Nền
|
filter.option.floor = Nền
|
||||||
filter.option.flooronto = Nền thay thế
|
filter.option.flooronto = Nền thay thế
|
||||||
filter.option.target = Mục tiêu
|
filter.option.target = Mục tiêu
|
||||||
|
filter.option.replacement = Thay thế
|
||||||
filter.option.wall = Tường
|
filter.option.wall = Tường
|
||||||
filter.option.ore = Quặng
|
filter.option.ore = Quặng
|
||||||
filter.option.floor2 = Nền phụ
|
filter.option.floor2 = Nền phụ
|
||||||
@@ -496,6 +509,7 @@ load = Tải
|
|||||||
save = Lưu
|
save = Lưu
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Ping: {0}ms
|
ping = Ping: {0}ms
|
||||||
|
tps = TPS: {0}
|
||||||
memory = Mem: {0}mb
|
memory = Mem: {0}mb
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = Khởi động lại trò chơi của bạn để cài đặt ngôn ngữ có hiệu lực.
|
language.restart = Khởi động lại trò chơi của bạn để cài đặt ngôn ngữ có hiệu lực.
|
||||||
@@ -528,7 +542,7 @@ launch.from = Đang phóng từ: [accent]{0}
|
|||||||
launch.destination = Đích đến: {0}
|
launch.destination = Đích đến: {0}
|
||||||
configure.invalid = Số lượng phải là số trong khoảng 0 đến {0}.
|
configure.invalid = Số lượng phải là số trong khoảng 0 đến {0}.
|
||||||
add = Thêm...
|
add = Thêm...
|
||||||
boss.health = Máu Boss
|
guardian = Guardian
|
||||||
|
|
||||||
connectfail = [scarlet]Lỗi kết nối:\n\n[accent]{0}
|
connectfail = [scarlet]Lỗi kết nối:\n\n[accent]{0}
|
||||||
error.unreachable = Không thể truy cập máy chủ.\nKiểm tra lại xem địa chỉ có đúng không?
|
error.unreachable = Không thể truy cập máy chủ.\nKiểm tra lại xem địa chỉ có đúng không?
|
||||||
@@ -572,6 +586,7 @@ sector.attacked = Khu vực [accent]{0}[white] đang bị tấn công!
|
|||||||
sector.lost = Khu vực [accent]{0}[white] đã mất!
|
sector.lost = Khu vực [accent]{0}[white] đã mất!
|
||||||
#note: the missing space in the line below is intentional
|
#note: the missing space in the line below is intentional
|
||||||
sector.captured = Khu vực [accent]{0}[white]đã chiếm!
|
sector.captured = Khu vực [accent]{0}[white]đã chiếm!
|
||||||
|
sector.changeicon = Thay đổi icon
|
||||||
|
|
||||||
threat.low = Thấp
|
threat.low = Thấp
|
||||||
threat.medium = Trung bình
|
threat.medium = Trung bình
|
||||||
@@ -584,7 +599,6 @@ planets = Hành tinh
|
|||||||
planet.serpulo.name = Serpulo
|
planet.serpulo.name = Serpulo
|
||||||
planet.sun.name = Mặt trời
|
planet.sun.name = Mặt trời
|
||||||
|
|
||||||
#Why we should translate this ??
|
|
||||||
sector.impact0078.name = Impact 0078
|
sector.impact0078.name = Impact 0078
|
||||||
sector.groundZero.name = Ground Zero
|
sector.groundZero.name = Ground Zero
|
||||||
sector.craters.name = The Craters
|
sector.craters.name = The Craters
|
||||||
@@ -621,16 +635,17 @@ sector.planetaryTerminal.description = Mục tiêu cuối cùng.\n\nCăn cứ ve
|
|||||||
|
|
||||||
status.burning.name = Cháy
|
status.burning.name = Cháy
|
||||||
status.freezing.name = Đóng băng
|
status.freezing.name = Đóng băng
|
||||||
status.wet.name = Wet
|
status.wet.name = Ẩm
|
||||||
status.muddy.name = Muddy
|
status.muddy.name = Muddy
|
||||||
status.melting.name = Tan chảy
|
status.melting.name = Tan chảy
|
||||||
status.sapped.name = Sapped
|
status.sapped.name = Ăn mòn
|
||||||
|
status.electrified.name = Electrified
|
||||||
status.spore-slowed.name = Spore Slowed
|
status.spore-slowed.name = Spore Slowed
|
||||||
status.tarred.name = Tarred
|
status.tarred.name = Tarred
|
||||||
status.overclock.name = Overclock
|
status.overclock.name = Overclock
|
||||||
status.shocked.name = Shock
|
status.shocked.name = Shock
|
||||||
status.blasted.name = Nổ
|
status.blasted.name = Nổ
|
||||||
status.unmoving.name = Unmoving
|
status.unmoving.name = Bất động
|
||||||
|
|
||||||
settings.language = Ngôn ngữ
|
settings.language = Ngôn ngữ
|
||||||
settings.data = Dữ liệu trò chơi
|
settings.data = Dữ liệu trò chơi
|
||||||
@@ -653,6 +668,7 @@ settings.clearcampaignsaves.confirm = Bạn có chắc muốn xóa toàn bộ d
|
|||||||
paused = [accent]< Tạm dừng >
|
paused = [accent]< Tạm dừng >
|
||||||
clear = Xóa
|
clear = Xóa
|
||||||
banned = [scarlet]Cấm
|
banned = [scarlet]Cấm
|
||||||
|
unsupported.environment = [scarlet]Môi trường không phù hợp
|
||||||
yes = Có
|
yes = Có
|
||||||
no = Không
|
no = Không
|
||||||
info.title = Thông tin
|
info.title = Thông tin
|
||||||
@@ -662,12 +678,14 @@ unit.nobuild = [scarlet]Quân lính/Công trình không thể xây dựng
|
|||||||
lastaccessed = [lightgray]Truy cập lần cuối: {0}
|
lastaccessed = [lightgray]Truy cập lần cuối: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
|
stat.showinmap = <Mở bản đồ để hiện thị>
|
||||||
stat.description = Mô tả
|
stat.description = Mô tả
|
||||||
stat.input = Đầu vào
|
stat.input = Đầu vào
|
||||||
stat.output = Sản phẩm
|
stat.output = Sản phẩm
|
||||||
stat.booster = Tăng cường
|
stat.booster = Tăng cường
|
||||||
stat.tiles = Yêu cầu khu vực
|
stat.tiles = Yêu cầu khu vực
|
||||||
stat.affinities = Phù hợp
|
stat.affinities = Phù hợp
|
||||||
|
stat.opposites = Đối diện
|
||||||
stat.powercapacity = Dung lượng pin
|
stat.powercapacity = Dung lượng pin
|
||||||
stat.powershot = Năng lượng/Phát bắn
|
stat.powershot = Năng lượng/Phát bắn
|
||||||
stat.damage = Sát thương
|
stat.damage = Sát thương
|
||||||
@@ -690,6 +708,7 @@ stat.memorycapacity = Dung lượng bộ nhớ
|
|||||||
stat.basepowergeneration = Năng lượng tạo ra (cơ bản)
|
stat.basepowergeneration = Năng lượng tạo ra (cơ bản)
|
||||||
stat.productiontime = Thời gian sản xuất
|
stat.productiontime = Thời gian sản xuất
|
||||||
stat.repairtime = Thời gian sửa
|
stat.repairtime = Thời gian sửa
|
||||||
|
stat.repairspeed = Tốc độ sửa
|
||||||
stat.weapons = Vũ khí
|
stat.weapons = Vũ khí
|
||||||
stat.bullet = Đạn
|
stat.bullet = Đạn
|
||||||
stat.speedincrease = Tăng tốc
|
stat.speedincrease = Tăng tốc
|
||||||
@@ -735,13 +754,15 @@ stat.speedmultiplier = Hệ số tốc độ
|
|||||||
stat.reloadmultiplier = Reload Multiplier
|
stat.reloadmultiplier = Reload Multiplier
|
||||||
stat.buildspeedmultiplier = Hệ số tốc độ xây dựng
|
stat.buildspeedmultiplier = Hệ số tốc độ xây dựng
|
||||||
stat.reactive = Phản ứng.
|
stat.reactive = Phản ứng.
|
||||||
|
stat.healing = Sửa chữa
|
||||||
|
|
||||||
ability.forcefield = Tạo khiên
|
ability.forcefield = Tạo khiên
|
||||||
ability.repairfield = Sửa chữa/Xây dựng
|
ability.repairfield = Sửa chữa/Xây dựng
|
||||||
ability.statusfield = Status Field
|
ability.statusfield = {0} Status Field
|
||||||
ability.unitspawn = Sản xuất {0}
|
ability.unitspawn = Sản xuất {0}
|
||||||
ability.shieldregenfield = Tạo khiên nhỏ
|
ability.shieldregenfield = Tạo khiên nhỏ
|
||||||
ability.movelightning = Movement Lightning
|
ability.movelightning = Movement Lightning
|
||||||
|
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
|
||||||
|
|
||||||
bar.drilltierreq = Cần máy khoan tốt hơn
|
bar.drilltierreq = Cần máy khoan tốt hơn
|
||||||
bar.noresources = Thiếu tài nguyên
|
bar.noresources = Thiếu tài nguyên
|
||||||
@@ -764,6 +785,7 @@ bar.power = Năng lượng
|
|||||||
bar.progress = Đang xây dựng
|
bar.progress = Đang xây dựng
|
||||||
bar.input = Đầu vào
|
bar.input = Đầu vào
|
||||||
bar.output = Sản phẩm
|
bar.output = Sản phẩm
|
||||||
|
bar.strength = [stat]{0}[lightgray]x strength
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]Điều khiển bởi bộ xử lý
|
units.processorcontrol = [lightgray]Điều khiển bởi bộ xử lý
|
||||||
|
|
||||||
@@ -773,12 +795,11 @@ bullet.incendiary = [stat]cháy
|
|||||||
bullet.homing = [stat]truy đuổi
|
bullet.homing = [stat]truy đuổi
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] sát thương khối
|
bullet.buildingdamage = [stat]{0}%[lightgray] sát thương khối
|
||||||
bullet.frag = [stat]phá mảnh
|
bullet.frag = [stat]phá mảnh
|
||||||
# I am not sure about this...
|
|
||||||
bullet.lightning = [stat]{0}[lightgray]x tia chớp ~ [stat]{1}[lightgray] sát thương
|
bullet.lightning = [stat]{0}[lightgray]x tia chớp ~ [stat]{1}[lightgray] sát thương
|
||||||
bullet.knockback = [stat]{0}[lightgray] bật lùi
|
bullet.knockback = [stat]{0}[lightgray] bật lùi
|
||||||
bullet.pierce = [stat]{0}[lightgray]x xuyên giáp
|
bullet.pierce = [stat]{0}[lightgray]x xuyên giáp
|
||||||
bullet.infinitepierce = [stat]xuyên thấu
|
bullet.infinitepierce = [stat]xuyên thấu
|
||||||
bullet.healpercent = [stat]{0}[lightgray]% sửa chửa
|
bullet.healpercent = [stat]{0}[lightgray]% sửa chữa
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x lượng đạn
|
bullet.multiplier = [stat]{0}[lightgray]x lượng đạn
|
||||||
bullet.reload = [stat]{0}[lightgray]x tốc độ bắn
|
bullet.reload = [stat]{0}[lightgray]x tốc độ bắn
|
||||||
|
|
||||||
@@ -815,6 +836,7 @@ setting.shadows.name = Bóng đổ
|
|||||||
setting.blockreplace.name = Tự động đề xuất khối
|
setting.blockreplace.name = Tự động đề xuất khối
|
||||||
setting.linear.name = Lọc tuyến tính
|
setting.linear.name = Lọc tuyến tính
|
||||||
setting.hints.name = Gợi ý
|
setting.hints.name = Gợi ý
|
||||||
|
setting.logichints.name = Gợi ý Logic
|
||||||
setting.flow.name = Hiện thị tốc độ chuyền tài nguyên
|
setting.flow.name = Hiện thị tốc độ chuyền tài nguyên
|
||||||
setting.backgroundpause.name = Tạm dừng trong nền
|
setting.backgroundpause.name = Tạm dừng trong nền
|
||||||
setting.buildautopause.name = Tự động dừng xây dựng
|
setting.buildautopause.name = Tự động dừng xây dựng
|
||||||
@@ -972,6 +994,8 @@ rules.wavetimer = Đếm ngược đợt
|
|||||||
rules.waves = Đợt
|
rules.waves = Đợt
|
||||||
rules.attack = Chế độ tấn công
|
rules.attack = Chế độ tấn công
|
||||||
rules.buildai = AI Xây dựng
|
rules.buildai = AI Xây dựng
|
||||||
|
rules.corecapture = Chiếm căn cứ khi phá hủy
|
||||||
|
rules.polygoncoreprotection = Bảo vệ lõi kiểu đa giác.
|
||||||
rules.enemyCheat = Tài nguyên vô hạn (kẻ địch)
|
rules.enemyCheat = Tài nguyên vô hạn (kẻ địch)
|
||||||
rules.blockhealthmultiplier = Hệ số độ bền khối
|
rules.blockhealthmultiplier = Hệ số độ bền khối
|
||||||
rules.blockdamagemultiplier = Hệ số sát thương của khối
|
rules.blockdamagemultiplier = Hệ số sát thương của khối
|
||||||
@@ -1008,6 +1032,7 @@ content.item.name = Vật phẩm
|
|||||||
content.liquid.name = Chất lỏng
|
content.liquid.name = Chất lỏng
|
||||||
content.unit.name = Quân lính
|
content.unit.name = Quân lính
|
||||||
content.block.name = Khối
|
content.block.name = Khối
|
||||||
|
content.status.name = Trạng thái hiệu ứng
|
||||||
content.sector.name = Khu vực
|
content.sector.name = Khu vực
|
||||||
|
|
||||||
item.copper.name = Đồng
|
item.copper.name = Đồng
|
||||||
@@ -1026,12 +1051,12 @@ item.blast-compound.name = Chất nổ
|
|||||||
item.pyratite.name = Nhiệt thạch
|
item.pyratite.name = Nhiệt thạch
|
||||||
item.metaglass.name = Thuỷ tinh
|
item.metaglass.name = Thuỷ tinh
|
||||||
item.scrap.name = Phế liệu
|
item.scrap.name = Phế liệu
|
||||||
|
|
||||||
liquid.water.name = Nước
|
liquid.water.name = Nước
|
||||||
liquid.slag.name = Xỉ nóng chảy
|
liquid.slag.name = Xỉ nóng chảy
|
||||||
liquid.oil.name = Dầu
|
liquid.oil.name = Dầu
|
||||||
liquid.cryofluid.name = Chất làm lạnh
|
liquid.cryofluid.name = Chất làm lạnh
|
||||||
|
|
||||||
#Why we should translate this ???
|
|
||||||
unit.dagger.name = Dagger
|
unit.dagger.name = Dagger
|
||||||
unit.mace.name = Mace
|
unit.mace.name = Mace
|
||||||
unit.fortress.name = Fortress
|
unit.fortress.name = Fortress
|
||||||
@@ -1058,6 +1083,11 @@ unit.minke.name = Minke
|
|||||||
unit.bryde.name = Bryde
|
unit.bryde.name = Bryde
|
||||||
unit.sei.name = Sei
|
unit.sei.name = Sei
|
||||||
unit.omura.name = Omura
|
unit.omura.name = Omura
|
||||||
|
unit.retusa.name = Retusa
|
||||||
|
unit.oxynoe.name = Oxynoe
|
||||||
|
unit.cyerce.name = Cyerce
|
||||||
|
unit.aegires.name = Aegires
|
||||||
|
unit.navanax.name = Navanax
|
||||||
unit.alpha.name = Alpha
|
unit.alpha.name = Alpha
|
||||||
unit.beta.name = Beta
|
unit.beta.name = Beta
|
||||||
unit.gamma.name = Gamma
|
unit.gamma.name = Gamma
|
||||||
@@ -1118,6 +1148,7 @@ block.sand-water.name = Nước cát
|
|||||||
block.darksand-water.name = Nước cát đen
|
block.darksand-water.name = Nước cát đen
|
||||||
block.char.name = Char
|
block.char.name = Char
|
||||||
block.dacite.name = Đá Dacit
|
block.dacite.name = Đá Dacit
|
||||||
|
block.rhyolite.name = Đá Ryolit
|
||||||
block.dacite-wall.name = Tường Dacit
|
block.dacite-wall.name = Tường Dacit
|
||||||
block.dacite-boulder.name = Tảng đá Dacit
|
block.dacite-boulder.name = Tảng đá Dacit
|
||||||
block.ice-snow.name = Băng tuyết
|
block.ice-snow.name = Băng tuyết
|
||||||
@@ -1135,8 +1166,9 @@ block.spore-cluster.name = Cụm bào tử
|
|||||||
block.metal-floor.name = Nền kim loại 1
|
block.metal-floor.name = Nền kim loại 1
|
||||||
block.metal-floor-2.name = Nền kim loại 2
|
block.metal-floor-2.name = Nền kim loại 2
|
||||||
block.metal-floor-3.name = Nền kim loại 3
|
block.metal-floor-3.name = Nền kim loại 3
|
||||||
block.metal-floor-5.name = Nền kim loại 4
|
block.metal-floor-4.name = Nền kim loại 4
|
||||||
block.metal-floor-damaged.name = Nền kim loại bị hư hỏng
|
block.metal-floor-5.name = Nền kim loại 5
|
||||||
|
block.metal-floor-damaged.name = Nền kim loại hư hỏng
|
||||||
block.dark-panel-1.name = Nền tối 1
|
block.dark-panel-1.name = Nền tối 1
|
||||||
block.dark-panel-2.name = Nền tối 2
|
block.dark-panel-2.name = Nền tối 2
|
||||||
block.dark-panel-3.name = Nền tối 3
|
block.dark-panel-3.name = Nền tối 3
|
||||||
@@ -1225,6 +1257,7 @@ block.solar-panel.name = Pin mặt trời
|
|||||||
block.solar-panel-large.name = Pin mặt trời lớn
|
block.solar-panel-large.name = Pin mặt trời lớn
|
||||||
block.oil-extractor.name = Máy khoan dầu
|
block.oil-extractor.name = Máy khoan dầu
|
||||||
block.repair-point.name = Điểm sửa chữa
|
block.repair-point.name = Điểm sửa chữa
|
||||||
|
block.repair-turret.name = Súng sữa chữa
|
||||||
block.pulse-conduit.name = Ống dẫn titan
|
block.pulse-conduit.name = Ống dẫn titan
|
||||||
block.plated-conduit.name = Ống dẫn bọc giáp
|
block.plated-conduit.name = Ống dẫn bọc giáp
|
||||||
block.phase-conduit.name = Ống dẫn Phase
|
block.phase-conduit.name = Ống dẫn Phase
|
||||||
@@ -1267,6 +1300,12 @@ block.exponential-reconstructor.name = Máy nâng cấp quân đội cấp 4
|
|||||||
block.tetrative-reconstructor.name = Máy nâng cấp quân đội cấp 5
|
block.tetrative-reconstructor.name = Máy nâng cấp quân đội cấp 5
|
||||||
block.payload-conveyor.name = Băng chuyền khối hàng
|
block.payload-conveyor.name = Băng chuyền khối hàng
|
||||||
block.payload-router.name = Bộ định tuyến khối hàng
|
block.payload-router.name = Bộ định tuyến khối hàng
|
||||||
|
block.duct.name = Duct
|
||||||
|
block.duct-router.name = Duct Router
|
||||||
|
block.duct-bridge.name = Duct Bridge
|
||||||
|
block.payload-propulsion-tower.name = Payload Propulsion Tower
|
||||||
|
block.payload-void.name = Payload Void
|
||||||
|
block.payload-source.name = Payload Source
|
||||||
block.disassembler.name = Máy phân tách lớn
|
block.disassembler.name = Máy phân tách lớn
|
||||||
block.silicon-crucible.name = Máy nấu Silicon lớn
|
block.silicon-crucible.name = Máy nấu Silicon lớn
|
||||||
block.overdrive-dome.name = Máy tăng tốc lớn
|
block.overdrive-dome.name = Máy tăng tốc lớn
|
||||||
@@ -1286,10 +1325,9 @@ block.memory-cell.name = Bộ nhớ
|
|||||||
block.memory-bank.name = Bộ nhớ lớn
|
block.memory-bank.name = Bộ nhớ lớn
|
||||||
|
|
||||||
team.blue.name = Xanh dương
|
team.blue.name = Xanh dương
|
||||||
team.crux.name = Đỏ
|
team.crux.name = Crux
|
||||||
team.sharded.name = Cam
|
team.sharded.name = Sharded
|
||||||
team.orange.name = Cam
|
team.derelict.name = Không xác định
|
||||||
team.derelict.name = không xác định
|
|
||||||
team.green.name = Xanh lá cây
|
team.green.name = Xanh lá cây
|
||||||
team.purple.name = Tím
|
team.purple.name = Tím
|
||||||
|
|
||||||
@@ -1309,6 +1347,7 @@ hint.placeConveyor.mobile = Băng chuyền di chuyển các vật phẩm từ kh
|
|||||||
hint.placeTurret = Đặt \uf861 [accent]Súng[] để bảo vệ căn cứ của bạn khỏi kẻ thù.\n\nSúng cần đạn - trong trường hợp này sử dụng \uf838Đồng.\nSử dụng băng chuyền và máy khoan để cung cấp cho chúng.
|
hint.placeTurret = Đặt \uf861 [accent]Súng[] để bảo vệ căn cứ của bạn khỏi kẻ thù.\n\nSúng cần đạn - trong trường hợp này sử dụng \uf838Đồng.\nSử dụng băng chuyền và máy khoan để cung cấp cho chúng.
|
||||||
hint.breaking = [accent]Chuột phải[] và kéo để phá vỡ các khối.
|
hint.breaking = [accent]Chuột phải[] và kéo để phá vỡ các khối.
|
||||||
hint.breaking.mobile = Kích hoạt \ue817 [accent]Cây búa[] ở phía dưới cùng bên phải và nhấn để phá vỡ các khối.\n\nGiữ ngón tay của bạn trong một giây và kéo để phá khối trong vùng được chọn.
|
hint.breaking.mobile = Kích hoạt \ue817 [accent]Cây búa[] ở phía dưới cùng bên phải và nhấn để phá vỡ các khối.\n\nGiữ ngón tay của bạn trong một giây và kéo để phá khối trong vùng được chọn.
|
||||||
|
hint.blockInfo = Xem thông tin của một khối bằng cách chọn nó trong [accent]menu xây dựng[], Sau đó chọn nút [accent][[?][] ở bên phải.
|
||||||
hint.research = Sử dụng nút \ue875 [accent]Nghiên cứu[] để nghiên cứu công nghệ mới.
|
hint.research = Sử dụng nút \ue875 [accent]Nghiên cứu[] để nghiên cứu công nghệ mới.
|
||||||
hint.research.mobile = Sử dụng nút \ue875 [accent]Nghiên cứu[] trong \ue88c [accent]Menu[] để nghiên cứu công nghệ mới.
|
hint.research.mobile = Sử dụng nút \ue875 [accent]Nghiên cứu[] trong \ue88c [accent]Menu[] để nghiên cứu công nghệ mới.
|
||||||
hint.unitControl = Giữ [accent][[L-ctrl][] và [accent]click[] để điều khiển quân lính của bạn hoặc súng.
|
hint.unitControl = Giữ [accent][[L-ctrl][] và [accent]click[] để điều khiển quân lính của bạn hoặc súng.
|
||||||
@@ -1330,6 +1369,7 @@ hint.generator = \uf879 [accent]Máy phát điện đốt cháy[] đốt than v
|
|||||||
hint.guardian = [accent]Boss[] được bọc giáp. Sử dụng loại đạn yếu chẳng hạn như [accent]Đồng[] và [accent]Chì[] là [scarlet]không hiệu quả[].\n\nSử dụng súng tiên tiến hơn hoặc sử dụng \uf835 [accent]Than chì làm đạn [] \uf861Duo/\uf859Salvo đạn dược để hạ gục Boss.
|
hint.guardian = [accent]Boss[] được bọc giáp. Sử dụng loại đạn yếu chẳng hạn như [accent]Đồng[] và [accent]Chì[] là [scarlet]không hiệu quả[].\n\nSử dụng súng tiên tiến hơn hoặc sử dụng \uf835 [accent]Than chì làm đạn [] \uf861Duo/\uf859Salvo đạn dược để hạ gục Boss.
|
||||||
hint.coreUpgrade = Các căn cứ có thể được nâng cấp bằng cách [accent]đặt căn cứ cấp cao hơn trên chúng[].\n\nĐặt một căn cứ [accent]Trụ sở[] trên căn cứ [accent]Cơ sở[]. Đảm bảo không có vật cản gần đó.
|
hint.coreUpgrade = Các căn cứ có thể được nâng cấp bằng cách [accent]đặt căn cứ cấp cao hơn trên chúng[].\n\nĐặt một căn cứ [accent]Trụ sở[] trên căn cứ [accent]Cơ sở[]. Đảm bảo không có vật cản gần đó.
|
||||||
hint.presetLaunch = Khác khu vực đáp [accent] xám[], như [accent]Frozen Forest[], có thể được phóng đến từ bất cứ đâu. Nó không yêu cầu chiếm các khu vực lân cận.\n\n[accent]Các khu vực được đánh số[], chẳng hạn như cái này, là [accent]không bắt buộc[].
|
hint.presetLaunch = Khác khu vực đáp [accent] xám[], như [accent]Frozen Forest[], có thể được phóng đến từ bất cứ đâu. Nó không yêu cầu chiếm các khu vực lân cận.\n\n[accent]Các khu vực được đánh số[], chẳng hạn như cái này, là [accent]không bắt buộc[].
|
||||||
|
hint.coreIncinerate = Sau khi căn cứ đầy vật phẩm, bất kì vật phẩm vào thuộc loại đó nhận được sẽ bị [accent]tiêu hủy[].
|
||||||
hint.coopCampaign = Khi chơi chiến dịch[accent]co-op[], các vật phẩm được sản xuất trong bản đồ hiện tại cũng sẽ được gửi [accent]đến các khu vực của bạn[].\n\nBất kỳ nghiên cứu mới nào được thực hiện đều được lưu lại.
|
hint.coopCampaign = Khi chơi chiến dịch[accent]co-op[], các vật phẩm được sản xuất trong bản đồ hiện tại cũng sẽ được gửi [accent]đến các khu vực của bạn[].\n\nBất kỳ nghiên cứu mới nào được thực hiện đều được lưu lại.
|
||||||
|
|
||||||
item.copper.description = Dùng trong tất cả các khu xây dựng và các loại đạn dược.
|
item.copper.description = Dùng trong tất cả các khu xây dựng và các loại đạn dược.
|
||||||
@@ -1341,7 +1381,7 @@ item.graphite.description = Dùng trong các bộ phận điện và đạn dư
|
|||||||
item.sand.description = Dùng để sản xuất các vật liệu tinh chế khác.
|
item.sand.description = Dùng để sản xuất các vật liệu tinh chế khác.
|
||||||
item.coal.description = Dùng để sản xuất nhiên liệu và nguyên liệu sản xuất vật liệu tinh chế.
|
item.coal.description = Dùng để sản xuất nhiên liệu và nguyên liệu sản xuất vật liệu tinh chế.
|
||||||
item.coal.details = Có vẻ là vật chất hóa thạch của thực vật, hình thành từ rất lâu trước khi được khai thác.
|
item.coal.details = Có vẻ là vật chất hóa thạch của thực vật, hình thành từ rất lâu trước khi được khai thác.
|
||||||
item.titanium.description = Dùng trong cấu trúc vận chuyển chất lỏng, máy khoan và máy bay.
|
item.titanium.description = Dùng trong cấu trúc vận chuyển chất lỏng, máy khoan và các công trình.
|
||||||
item.thorium.description = Dùng trong các công trình bền vững và có thể dùng làm nhiên liệu hạt nhân.
|
item.thorium.description = Dùng trong các công trình bền vững và có thể dùng làm nhiên liệu hạt nhân.
|
||||||
item.scrap.description = Dùng làm nguyên liệu cho Máy nung phế liệu và Máy nghiền để tinh luyện thành các vật liệu khác.
|
item.scrap.description = Dùng làm nguyên liệu cho Máy nung phế liệu và Máy nghiền để tinh luyện thành các vật liệu khác.
|
||||||
item.scrap.details = Tàn tích còn lại của các công trình và robot cũ.
|
item.scrap.details = Tàn tích còn lại của các công trình và robot cũ.
|
||||||
@@ -1360,7 +1400,7 @@ liquid.oil.description = Dùng trong sản xuất vật liệu tiên tiến và
|
|||||||
liquid.cryofluid.description = Dùng làm chất làm mát trong lò phản ứng, súng và nhà máy.
|
liquid.cryofluid.description = Dùng làm chất làm mát trong lò phản ứng, súng và nhà máy.
|
||||||
|
|
||||||
block.resupply-point.description = Cung cấp đạn đồng cho các quân lính ở gần. Không tương thích với quân lính sử dụng điện.
|
block.resupply-point.description = Cung cấp đạn đồng cho các quân lính ở gần. Không tương thích với quân lính sử dụng điện.
|
||||||
block.armored-conveyor.description = Vận chuyển vật phẩm về phía. Không nhận đầu vào từ phía bên.
|
block.armored-conveyor.description = Vận chuyển vật phẩm về phía trước. Không nhận đầu vào từ phía bên cạnh.
|
||||||
block.illuminator.description = Phát sáng.
|
block.illuminator.description = Phát sáng.
|
||||||
block.message.description = Lưu trữ tin nhắn giao tiếp giữa đồng đội.
|
block.message.description = Lưu trữ tin nhắn giao tiếp giữa đồng đội.
|
||||||
block.graphite-press.description = Nén than thành than chì.
|
block.graphite-press.description = Nén than thành than chì.
|
||||||
@@ -1370,7 +1410,7 @@ block.kiln.description = Nấu chảy cát và chì thành thuỷ tinh.
|
|||||||
block.plastanium-compressor.description = Sản xuất nhựa từ dầu và titan.
|
block.plastanium-compressor.description = Sản xuất nhựa từ dầu và titan.
|
||||||
block.phase-weaver.description = Tổng hợp phase fabric từ thorium và cát.
|
block.phase-weaver.description = Tổng hợp phase fabric từ thorium và cát.
|
||||||
block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim.
|
block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim.
|
||||||
block.cryofluid-mixer.description = Trộn nước và bột titan để sản xuất chất làm mát.
|
block.cryofluid-mixer.description = Trộn nước và titan để sản xuất chất làm mát.
|
||||||
block.blast-mixer.description = Tạo ra hợp chất nổ từ nhiệt thạch và vỏ bào tử.
|
block.blast-mixer.description = Tạo ra hợp chất nổ từ nhiệt thạch và vỏ bào tử.
|
||||||
block.pyratite-mixer.description = Trộn than, chì và cát thành nhiệt thạch.
|
block.pyratite-mixer.description = Trộn than, chì và cát thành nhiệt thạch.
|
||||||
block.melter.description = Nung phế liệu thành xỉ.
|
block.melter.description = Nung phế liệu thành xỉ.
|
||||||
@@ -1410,8 +1450,8 @@ block.plastanium-conveyor.description = Vận chuyển vật phẩm về phía
|
|||||||
block.junction.description = Hoạt động như một cầu nối cho hai băng chuyền băng qua.
|
block.junction.description = Hoạt động như một cầu nối cho hai băng chuyền băng qua.
|
||||||
block.bridge-conveyor.description = Vận chuyển vật phẩm qua nhiều loại địa hình hoặc công trình.
|
block.bridge-conveyor.description = Vận chuyển vật phẩm qua nhiều loại địa hình hoặc công trình.
|
||||||
block.phase-conveyor.description = Vận chuyển tức thời vật phẩm qua địa hình hoặc công trình. Phạm vi dài hơn cầu nối, nhưng cần năng lượng.
|
block.phase-conveyor.description = Vận chuyển tức thời vật phẩm qua địa hình hoặc công trình. Phạm vi dài hơn cầu nối, nhưng cần năng lượng.
|
||||||
block.sorter.description = Nếu vật phẩm giống vật được chọn sẽ được chuyển đến trước, nếu không sẽ được chuyển qua trái hoặc phải.
|
block.sorter.description = Nếu vật phẩm giống vật phẩm được chọn sẽ được chuyển đến trước, nếu không sẽ được chuyển qua trái hoặc phải.
|
||||||
block.inverted-sorter.description = Giống như máy phân loại, nhưng vật được chọn sẽ được chuyển qua trái hoặc phải.
|
block.inverted-sorter.description = Giống như bộ lọc, nhưng vật phẩm được chọn sẽ được chuyển qua trái hoặc phải.
|
||||||
block.router.description = Phân phối các vật phẩm đầu vào thành 3 hướng đầu ra như nhau.
|
block.router.description = Phân phối các vật phẩm đầu vào thành 3 hướng đầu ra như nhau.
|
||||||
block.router.details = Không khuyên dùng cạnh đầu vào dây chuyền vì sẽ bị kẹt bởi đầu ra.
|
block.router.details = Không khuyên dùng cạnh đầu vào dây chuyền vì sẽ bị kẹt bởi đầu ra.
|
||||||
block.distributor.description = Phân phối các vật phẩm đầu vào thành 7 hướng đầu ra như nhau.
|
block.distributor.description = Phân phối các vật phẩm đầu vào thành 7 hướng đầu ra như nhau.
|
||||||
@@ -1453,7 +1493,7 @@ block.cultivator.description = Lọc bào tử có trong không khí và nuôi c
|
|||||||
block.cultivator.details = Công nghệ được phục hồi. Được sử dụng để sản xuất một lượng lớn bào tử. Có thể là nơi ủ ban đầu của các bào tử hiện đang bao phủ Serpulo.
|
block.cultivator.details = Công nghệ được phục hồi. Được sử dụng để sản xuất một lượng lớn bào tử. Có thể là nơi ủ ban đầu của các bào tử hiện đang bao phủ Serpulo.
|
||||||
block.oil-extractor.description = Sử dụng lượng năng lượng năng lớn, sử dụng cát và nước để khoan dầu.
|
block.oil-extractor.description = Sử dụng lượng năng lượng năng lớn, sử dụng cát và nước để khoan dầu.
|
||||||
block.core-shard.description = Trung tâm của căn cứ. Sau khi bị phá hủy, khu vực này sẽ bị mất.
|
block.core-shard.description = Trung tâm của căn cứ. Sau khi bị phá hủy, khu vực này sẽ bị mất.
|
||||||
block.core-shard.details = Lần thử đầu tiên. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh.
|
block.core-shard.details = Căn cứ cấp 1. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh.
|
||||||
block.core-foundation.description = Trung tâm của căn cứ. Được bọc giáp. Chứa được nhiều tài nguyên hơn Căn cứ: Cơ sỏ.
|
block.core-foundation.description = Trung tâm của căn cứ. Được bọc giáp. Chứa được nhiều tài nguyên hơn Căn cứ: Cơ sỏ.
|
||||||
block.core-foundation.details = Căn cứ cấp 2.
|
block.core-foundation.details = Căn cứ cấp 2.
|
||||||
block.core-nucleus.description = Lõi của căn cứ. Bọc giáp chắc chắn. Lưu trữ lượng lớn tài nguyên.
|
block.core-nucleus.description = Lõi của căn cứ. Bọc giáp chắc chắn. Lưu trữ lượng lớn tài nguyên.
|
||||||
@@ -1481,7 +1521,7 @@ block.repair-point.description = Liên tục sửa chữa robot ở trong phạm
|
|||||||
block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser.
|
block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser.
|
||||||
block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo.
|
block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo.
|
||||||
block.tsunami.description = Phóng một tia chất lỏng mạnh vào kẻ địch. Tự chữa cháy nếu được cung cấp nước hoặc chất làm mát.
|
block.tsunami.description = Phóng một tia chất lỏng mạnh vào kẻ địch. Tự chữa cháy nếu được cung cấp nước hoặc chất làm mát.
|
||||||
block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng tiền chất nổ làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng.
|
block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng nhiệt thạch làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng.
|
||||||
block.disassembler.description = Tách xỉ thành các kim loại khác nhau với hiệu suất thấp. Có thể sản xuất thorium.
|
block.disassembler.description = Tách xỉ thành các kim loại khác nhau với hiệu suất thấp. Có thể sản xuất thorium.
|
||||||
block.overdrive-dome.description = Tăng tốc độ làm việc của các công trình lân cận. Sử dụng phase fabric and silicon để hoạt động.
|
block.overdrive-dome.description = Tăng tốc độ làm việc của các công trình lân cận. Sử dụng phase fabric and silicon để hoạt động.
|
||||||
block.payload-conveyor.description = Di chuyển những khối hàng lớn, chẳng hạn như các quân lính từ nhà máy.
|
block.payload-conveyor.description = Di chuyển những khối hàng lớn, chẳng hạn như các quân lính từ nhà máy.
|
||||||
@@ -1542,7 +1582,7 @@ lst.read = Đọc một số từ bộ nhớ được liên kết.
|
|||||||
lst.write = Ghi một số vào bộ nhớ được liên kết.
|
lst.write = Ghi một số vào bộ nhớ được liên kết.
|
||||||
lst.print = Thêm văn bản vào bộ nhớ in.\nKhông hiển thị gì cho đến khi sử dụng [accent]Print Flush[].
|
lst.print = Thêm văn bản vào bộ nhớ in.\nKhông hiển thị gì cho đến khi sử dụng [accent]Print Flush[].
|
||||||
lst.draw = Thêm một thao tác vào bộ nhớ vẽ.\nKhông hiển thị gì cho đến khi sử dụng [accent]Draw Flush[].
|
lst.draw = Thêm một thao tác vào bộ nhớ vẽ.\nKhông hiển thị gì cho đến khi sử dụng [accent]Draw Flush[].
|
||||||
lst.drawflush = Chuyển các thao tác [accent]Draw[] đến màng hình.
|
lst.drawflush = Chuyển các thao tác [accent]Draw[] đến màn hình.
|
||||||
lst.printflush = Chuyển các thao tác [accent]Print[] đến khối tin nhắn.
|
lst.printflush = Chuyển các thao tác [accent]Print[] đến khối tin nhắn.
|
||||||
lst.getlink = Nhận liên kết bộ xử lý theo thứ tự. Bắt đầu từ 0.
|
lst.getlink = Nhận liên kết bộ xử lý theo thứ tự. Bắt đầu từ 0.
|
||||||
lst.control = Điều khiển một khối.
|
lst.control = Điều khiển một khối.
|
||||||
@@ -1562,7 +1602,7 @@ logic.nounitbuild = [red]Unit building logic is not allowed here.
|
|||||||
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
|
||||||
lenum.shoot = Bắn vào vị trí xác định.
|
lenum.shoot = Bắn vào vị trí xác định.
|
||||||
lenum.shootp = Shoot at a unit/building with velocity prediction.
|
lenum.shootp = Shoot at a unit/building with velocity prediction.
|
||||||
lenum.configure = Building configuration, e.g. sorter item.
|
lenum.config = Building configuration, e.g. sorter item.
|
||||||
lenum.enabled = Bất cứ khi nào khối hoạt động.
|
lenum.enabled = Bất cứ khi nào khối hoạt động.
|
||||||
|
|
||||||
laccess.color = Màu đèn chiếu sáng.
|
laccess.color = Màu đèn chiếu sáng.
|
||||||
@@ -1570,6 +1610,7 @@ laccess.controller = Unit controller. If processor controlled, returns processor
|
|||||||
laccess.dead = Whether a unit/building is dead or no longer valid.
|
laccess.dead = Whether a unit/building is dead or no longer valid.
|
||||||
laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0.
|
laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0.
|
||||||
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
|
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
|
||||||
|
laccess.progress = Action progress, 0 to 1.\nReturns production, turret reload or construction progress.
|
||||||
|
|
||||||
graphicstype.clear = Tô màu cho màn hình.
|
graphicstype.clear = Tô màu cho màn hình.
|
||||||
graphicstype.color = Đặt màu cho thao tác vẽ tiếp theo.
|
graphicstype.color = Đặt màu cho thao tác vẽ tiếp theo.
|
||||||
@@ -1601,9 +1642,15 @@ lenum.min = Số nhỏ nhất giữa hai số.
|
|||||||
lenum.max = Số lớn nhất giữa hai số.
|
lenum.max = Số lớn nhất giữa hai số.
|
||||||
lenum.angle = Góc của vectơ tính bằng độ.
|
lenum.angle = Góc của vectơ tính bằng độ.
|
||||||
lenum.len = Chiều dài của vectơ.
|
lenum.len = Chiều dài của vectơ.
|
||||||
|
|
||||||
lenum.sin = Sin, tính bằng độ.
|
lenum.sin = Sin, tính bằng độ.
|
||||||
lenum.cos = Cos, tính bằng độ.
|
lenum.cos = Cos, tính bằng độ.
|
||||||
lenum.tan = Tan, tính bằng độ.
|
lenum.tan = Tan, tính bằng độ.
|
||||||
|
|
||||||
|
lenum.asin = Arc sin, tính bằng độ.
|
||||||
|
lenum.acos = Arc cos, tính bằng độ.
|
||||||
|
lenum.atan = Arc tan, tính bằng độ.
|
||||||
|
|
||||||
#not a typo, look up 'range notation'
|
#not a typo, look up 'range notation'
|
||||||
lenum.rand = Tạo ra số nguyên ngẫu nhiên trong phạm vi [0, giá trị).
|
lenum.rand = Tạo ra số nguyên ngẫu nhiên trong phạm vi [0, giá trị).
|
||||||
lenum.log = Lôgarit tự nhiên (ln).
|
lenum.log = Lôgarit tự nhiên (ln).
|
||||||
@@ -1679,4 +1726,4 @@ lenum.mine = Đào tại vị trí.
|
|||||||
lenum.build = Xây công trình.
|
lenum.build = Xây công trình.
|
||||||
lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[].
|
lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[].
|
||||||
lenum.within = Kiểm tra xem quân lính có gần vị trí không.
|
lenum.within = Kiểm tra xem quân lính có gần vị trí không.
|
||||||
lenum.boost = Start/stop boosting.
|
lenum.boost = Bắt đầu/Dừng tăng tốc.
|
||||||
|
|||||||
@@ -67,6 +67,14 @@ schematic.delete.confirm = 該藍圖將被完全清除。
|
|||||||
schematic.rename = 重新命名藍圖
|
schematic.rename = 重新命名藍圖
|
||||||
schematic.info = {0}x{1}, {2}方塊
|
schematic.info = {0}x{1}, {2}方塊
|
||||||
schematic.disabled = [scarlet]藍圖被進用[]\n你不能在這個[accent]地圖[] 或 [accent]伺服器中使用藍圖.
|
schematic.disabled = [scarlet]藍圖被進用[]\n你不能在這個[accent]地圖[] 或 [accent]伺服器中使用藍圖.
|
||||||
|
schematic.tags = 標籤:
|
||||||
|
schematic.edittags = 編輯標籤
|
||||||
|
schematic.addtag = 新增標籤
|
||||||
|
schematic.texttag = 文字標籤
|
||||||
|
schematic.icontag = 圖像標籤
|
||||||
|
schematic.renametag = 重新命名
|
||||||
|
schematic.tagdelconfirm = 確認刪除此標籤?
|
||||||
|
schematic.tagexists = 該標籤已存在。
|
||||||
|
|
||||||
stats = 統計
|
stats = 統計
|
||||||
stat.wave = 打敗的波次:[accent]{0}
|
stat.wave = 打敗的波次:[accent]{0}
|
||||||
@@ -306,7 +314,6 @@ data.exported = 資料已匯出。
|
|||||||
data.invalid = 這不是有效的遊戲資料。
|
data.invalid = 這不是有效的遊戲資料。
|
||||||
data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。
|
data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。
|
||||||
quit.confirm = 您確定要結束嗎?
|
quit.confirm = 您確定要結束嗎?
|
||||||
quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定-遊戲[] 選項中重設教學。
|
|
||||||
loading = [accent]載入中……
|
loading = [accent]載入中……
|
||||||
reloading = [accent]模組重新載入中……
|
reloading = [accent]模組重新載入中……
|
||||||
saving = [accent]儲存中……
|
saving = [accent]儲存中……
|
||||||
@@ -477,6 +484,7 @@ filter.option.circle-scale = 圓形規模
|
|||||||
filter.option.octaves = 倍頻
|
filter.option.octaves = 倍頻
|
||||||
filter.option.falloff = 衰減
|
filter.option.falloff = 衰減
|
||||||
filter.option.angle = 角度
|
filter.option.angle = 角度
|
||||||
|
filter.option.rotate = 旋轉
|
||||||
filter.option.amount = 數量
|
filter.option.amount = 數量
|
||||||
filter.option.block = 方塊
|
filter.option.block = 方塊
|
||||||
filter.option.floor = 地板
|
filter.option.floor = 地板
|
||||||
@@ -498,6 +506,7 @@ load = 載入
|
|||||||
save = 儲存
|
save = 儲存
|
||||||
fps = FPS:{0}
|
fps = FPS:{0}
|
||||||
ping = 延遲:{0}毫秒
|
ping = 延遲:{0}毫秒
|
||||||
|
tps = TPS: {0}
|
||||||
memory = Mem: {0}mb
|
memory = Mem: {0}mb
|
||||||
memory2 = Mem:\n {0}mb +\n {1}mb
|
memory2 = Mem:\n {0}mb +\n {1}mb
|
||||||
language.restart = 請重新啟動遊戲以使選取的語言生效。
|
language.restart = 請重新啟動遊戲以使選取的語言生效。
|
||||||
@@ -530,7 +539,7 @@ launch.from = 發射來源:[accent]{0}
|
|||||||
launch.destination = 目的地:{0}
|
launch.destination = 目的地:{0}
|
||||||
configure.invalid = 數值必須介於 0 到 {0}。
|
configure.invalid = 數值必須介於 0 到 {0}。
|
||||||
add = 新增……
|
add = 新增……
|
||||||
boss.health = 頭目血量
|
guardian = 頭目
|
||||||
|
|
||||||
connectfail = [scarlet]伺服器連線錯誤:\n\n[accent]{0}
|
connectfail = [scarlet]伺服器連線錯誤:\n\n[accent]{0}
|
||||||
error.unreachable = 無法連線到伺服器。請確認拼字是否正確?
|
error.unreachable = 無法連線到伺服器。請確認拼字是否正確?
|
||||||
@@ -574,6 +583,7 @@ sector.attacked = 地區 [accent]{0}[white] 遭受攻擊!
|
|||||||
sector.lost = 地區 [accent]{0}[white] 戰敗!
|
sector.lost = 地區 [accent]{0}[white] 戰敗!
|
||||||
#note: 校正用空行
|
#note: 校正用空行
|
||||||
sector.captured = 成功佔領地區[accent]{0}[white]!
|
sector.captured = 成功佔領地區[accent]{0}[white]!
|
||||||
|
sector.changeicon = 更改圖標
|
||||||
|
|
||||||
threat.low = 低
|
threat.low = 低
|
||||||
threat.medium = 中
|
threat.medium = 中
|
||||||
@@ -626,6 +636,7 @@ status.wet.name = 浸濕
|
|||||||
status.muddy.name = 泥濘
|
status.muddy.name = 泥濘
|
||||||
status.melting.name = 融化
|
status.melting.name = 融化
|
||||||
status.sapped.name = 被吸血
|
status.sapped.name = 被吸血
|
||||||
|
status.electrified.name = 觸電
|
||||||
status.spore-slowed.name = 孢子緩速
|
status.spore-slowed.name = 孢子緩速
|
||||||
status.tarred.name = 焦油
|
status.tarred.name = 焦油
|
||||||
status.overclock.name = 快轉
|
status.overclock.name = 快轉
|
||||||
@@ -654,6 +665,7 @@ settings.clearcampaignsaves.confirm = 你確定要清除所有戰役紀錄?
|
|||||||
paused = [accent](已暫停)
|
paused = [accent](已暫停)
|
||||||
clear = 清除
|
clear = 清除
|
||||||
banned = [scarlet]已被封鎖
|
banned = [scarlet]已被封鎖
|
||||||
|
unsupported.environment = [scarlet]不支援的環境
|
||||||
yes = 是
|
yes = 是
|
||||||
no = 否
|
no = 否
|
||||||
info.title = 資訊
|
info.title = 資訊
|
||||||
@@ -692,6 +704,7 @@ stat.memorycapacity = 記憶體容量
|
|||||||
stat.basepowergeneration = 基礎能量生產
|
stat.basepowergeneration = 基礎能量生產
|
||||||
stat.productiontime = 生產時間
|
stat.productiontime = 生產時間
|
||||||
stat.repairtime = 方塊完全修復時間
|
stat.repairtime = 方塊完全修復時間
|
||||||
|
stat.repairspeed = 修復速度
|
||||||
stat.weapons = 武器
|
stat.weapons = 武器
|
||||||
stat.bullet = 子彈
|
stat.bullet = 子彈
|
||||||
stat.speedincrease = 速度提升
|
stat.speedincrease = 速度提升
|
||||||
@@ -737,13 +750,15 @@ stat.speedmultiplier = 速度加成
|
|||||||
stat.reloadmultiplier = 射速加成
|
stat.reloadmultiplier = 射速加成
|
||||||
stat.buildspeedmultiplier = 建造速度加成
|
stat.buildspeedmultiplier = 建造速度加成
|
||||||
stat.reactive = 具反應性
|
stat.reactive = 具反應性
|
||||||
|
stat.healing = 治癒
|
||||||
|
|
||||||
ability.forcefield = 防護罩
|
ability.forcefield = 防護罩
|
||||||
ability.repairfield = 維修力場
|
ability.repairfield = 維修力場
|
||||||
ability.statusfield = 狀態力場
|
ability.statusfield = {0}狀態力場
|
||||||
ability.unitspawn = {0}工廠
|
ability.unitspawn = {0}工廠
|
||||||
ability.shieldregenfield = 護盾充能力場
|
ability.shieldregenfield = 護盾充能力場
|
||||||
ability.movelightning = 移動閃電
|
ability.movelightning = 移動閃電
|
||||||
|
ability.energyfield = 能量場: [accent]{0}[] 傷害 ~ [accent]{1}[] 方格 / [accent]{2}[] 目標數
|
||||||
|
|
||||||
bar.drilltierreq = 需要更好的鑽頭
|
bar.drilltierreq = 需要更好的鑽頭
|
||||||
bar.noresources = 缺少資源
|
bar.noresources = 缺少資源
|
||||||
@@ -766,6 +781,7 @@ bar.power = 能量
|
|||||||
bar.progress = 建造進度
|
bar.progress = 建造進度
|
||||||
bar.input = 輸入
|
bar.input = 輸入
|
||||||
bar.output = 輸出
|
bar.output = 輸出
|
||||||
|
bar.strength = [stat]{0}[lightgray]x 強度
|
||||||
|
|
||||||
units.processorcontrol = [lightgray]由微處理器控制
|
units.processorcontrol = [lightgray]由微處理器控制
|
||||||
|
|
||||||
@@ -941,6 +957,7 @@ keybind.pause_building.name = 暫停/繼續建造
|
|||||||
keybind.minimap.name = 小地圖
|
keybind.minimap.name = 小地圖
|
||||||
keybind.planet_map.name = 行星地圖
|
keybind.planet_map.name = 行星地圖
|
||||||
keybind.research.name = 研究
|
keybind.research.name = 研究
|
||||||
|
keybind.block_info.name = 方塊資訊
|
||||||
keybind.chat.name = 聊天
|
keybind.chat.name = 聊天
|
||||||
keybind.player_list.name = 玩家列表
|
keybind.player_list.name = 玩家列表
|
||||||
keybind.console.name = 終端機
|
keybind.console.name = 終端機
|
||||||
@@ -973,6 +990,7 @@ rules.wavetimer = 波次時間
|
|||||||
rules.waves = 波次
|
rules.waves = 波次
|
||||||
rules.attack = 攻擊模式
|
rules.attack = 攻擊模式
|
||||||
rules.buildai = 電腦自動建築
|
rules.buildai = 電腦自動建築
|
||||||
|
rules.corecapture = 佔領摧毀的核心
|
||||||
rules.enemyCheat = 電腦無限資源
|
rules.enemyCheat = 電腦無限資源
|
||||||
rules.blockhealthmultiplier = 建築物耐久度倍數
|
rules.blockhealthmultiplier = 建築物耐久度倍數
|
||||||
rules.blockdamagemultiplier = 建築物傷害倍數
|
rules.blockdamagemultiplier = 建築物傷害倍數
|
||||||
@@ -1028,6 +1046,7 @@ item.blast-compound.name = 爆炸化合物
|
|||||||
item.pyratite.name = 火焰彈
|
item.pyratite.name = 火焰彈
|
||||||
item.metaglass.name = 鋼化玻璃
|
item.metaglass.name = 鋼化玻璃
|
||||||
item.scrap.name = 廢料
|
item.scrap.name = 廢料
|
||||||
|
|
||||||
liquid.water.name = 水
|
liquid.water.name = 水
|
||||||
liquid.slag.name = 熔渣
|
liquid.slag.name = 熔渣
|
||||||
liquid.oil.name = 原油
|
liquid.oil.name = 原油
|
||||||
@@ -1059,6 +1078,11 @@ unit.minke.name = 鬚鯨號
|
|||||||
unit.bryde.name = 鯷鯨號
|
unit.bryde.name = 鯷鯨號
|
||||||
unit.sei.name = 塞鯨號
|
unit.sei.name = 塞鯨號
|
||||||
unit.omura.name = 角島鯨號
|
unit.omura.name = 角島鯨號
|
||||||
|
unit.retusa.name = Retusa
|
||||||
|
unit.oxynoe.name = Oxynoe
|
||||||
|
unit.cyerce.name = Cyerce
|
||||||
|
unit.aegires.name = Aegires
|
||||||
|
unit.navanax.name = Navanax
|
||||||
unit.alpha.name = 阿爾法
|
unit.alpha.name = 阿爾法
|
||||||
unit.beta.name = 貝塔
|
unit.beta.name = 貝塔
|
||||||
unit.gamma.name = 伽瑪
|
unit.gamma.name = 伽瑪
|
||||||
@@ -1119,6 +1143,7 @@ block.sand-water.name = 沙水
|
|||||||
block.darksand-water.name = 黑沙水
|
block.darksand-water.name = 黑沙水
|
||||||
block.char.name = 燒焦
|
block.char.name = 燒焦
|
||||||
block.dacite.name = 英安岩
|
block.dacite.name = 英安岩
|
||||||
|
block.rhyolite.name = 流紋岩
|
||||||
block.dacite-wall.name = 英安岩牆
|
block.dacite-wall.name = 英安岩牆
|
||||||
block.dacite-boulder.name = 英安岩石塊
|
block.dacite-boulder.name = 英安岩石塊
|
||||||
block.ice-snow.name = 冰雪
|
block.ice-snow.name = 冰雪
|
||||||
@@ -1226,6 +1251,7 @@ block.solar-panel.name = 太陽能板
|
|||||||
block.solar-panel-large.name = 大型太陽能板
|
block.solar-panel-large.name = 大型太陽能板
|
||||||
block.oil-extractor.name = 原油鑽井
|
block.oil-extractor.name = 原油鑽井
|
||||||
block.repair-point.name = 維修點
|
block.repair-point.name = 維修點
|
||||||
|
block.repair-turret.name = 維修機台
|
||||||
block.pulse-conduit.name = 脈衝管線
|
block.pulse-conduit.name = 脈衝管線
|
||||||
block.plated-conduit.name = 裝甲管線
|
block.plated-conduit.name = 裝甲管線
|
||||||
block.phase-conduit.name = 相織管線
|
block.phase-conduit.name = 相織管線
|
||||||
@@ -1289,7 +1315,6 @@ block.memory-bank.name = 記憶體
|
|||||||
team.blue.name = 藍
|
team.blue.name = 藍
|
||||||
team.crux.name = 紅
|
team.crux.name = 紅
|
||||||
team.sharded.name = 黃
|
team.sharded.name = 黃
|
||||||
team.orange.name = 橘
|
|
||||||
team.derelict.name = 灰
|
team.derelict.name = 灰
|
||||||
team.green.name = 綠
|
team.green.name = 綠
|
||||||
team.purple.name = 紫
|
team.purple.name = 紫
|
||||||
@@ -1506,7 +1531,7 @@ block.logic-display.description = 顯示由處理器輸出的任意圖像。
|
|||||||
block.large-logic-display.description = 顯示由處理器輸出的任意圖像。
|
block.large-logic-display.description = 顯示由處理器輸出的任意圖像。
|
||||||
block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。
|
block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。
|
||||||
|
|
||||||
unit.dagger.description = 發射普通子彈攻擊所有附近敵人。
|
unit.dagger.description = 發射普通子彈攻擊附近敵人。
|
||||||
unit.mace.description = 噴發烈焰攻擊所有附近敵人。
|
unit.mace.description = 噴發烈焰攻擊所有附近敵人。
|
||||||
unit.fortress.description = 發射遠程迫砲攻擊地面目標。
|
unit.fortress.description = 發射遠程迫砲攻擊地面目標。
|
||||||
unit.scepter.description = 發射大量續能子彈打擊所有附近敵人。
|
unit.scepter.description = 發射大量續能子彈打擊所有附近敵人。
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ Jaiun Lee
|
|||||||
Gab_351
|
Gab_351
|
||||||
Carter Gale
|
Carter Gale
|
||||||
Jan Polák
|
Jan Polák
|
||||||
|
JrTRinny
|
||||||
JustYanns
|
JustYanns
|
||||||
BasedUser
|
BasedUser
|
||||||
BLucky-gh
|
BLucky-gh
|
||||||
|
|||||||
BIN
core/assets/logicids.dat
Normal file
BIN
core/assets/logicids.dat
Normal file
Binary file not shown.
Binary file not shown.
@@ -149,7 +149,16 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
}
|
}
|
||||||
mods.eachClass(Mod::init);
|
mods.eachClass(Mod::init);
|
||||||
finished = true;
|
finished = true;
|
||||||
Events.fire(new ClientLoadEvent());
|
var event = new ClientLoadEvent();
|
||||||
|
//a temporary measure for compatibility with certain mods
|
||||||
|
Events.fireWrap(event.getClass(), event, listener -> {
|
||||||
|
try{
|
||||||
|
listener.get(event);
|
||||||
|
}catch(NoSuchFieldError | NoSuchMethodError | NoClassDefFoundError error){
|
||||||
|
Log.err(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
clientLoaded = true;
|
clientLoaded = true;
|
||||||
super.resize(graphics.getWidth(), graphics.getHeight());
|
super.resize(graphics.getWidth(), graphics.getHeight());
|
||||||
app.post(() -> app.post(() -> app.post(() -> app.post(() -> {
|
app.post(() -> app.post(() -> app.post(() -> app.post(() -> {
|
||||||
|
|||||||
@@ -73,8 +73,8 @@ public class Vars implements Loadable{
|
|||||||
/** URL to the JSON file containing all the BE servers. Only queried in BE. */
|
/** URL to the JSON file containing all the BE servers. Only queried in BE. */
|
||||||
public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json";
|
public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json";
|
||||||
/** URL to the JSON file containing all the stable servers. */
|
/** URL to the JSON file containing all the stable servers. */
|
||||||
//TODO this uses BE servers until full v7 release, there's no point in displaying v6 at all
|
//TODO merge with v6 list upon release
|
||||||
public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json";
|
public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_v7.json";
|
||||||
/** URL of the github issue report template.*/
|
/** URL of the github issue report template.*/
|
||||||
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md";
|
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md";
|
||||||
/** list of built-in servers.*/
|
/** list of built-in servers.*/
|
||||||
@@ -148,6 +148,8 @@ public class Vars implements Loadable{
|
|||||||
public static int maxTextureSize = 2048;
|
public static int maxTextureSize = 2048;
|
||||||
/** Whether to show the core landing animation. */
|
/** Whether to show the core landing animation. */
|
||||||
public static boolean showLandAnimation = true;
|
public static boolean showLandAnimation = true;
|
||||||
|
/** Whether to check for memory use before taking screenshots. */
|
||||||
|
public static boolean checkScreenshotMemory = true;
|
||||||
/** Whether to prompt the user to confirm exiting. */
|
/** Whether to prompt the user to confirm exiting. */
|
||||||
public static boolean confirmExit = true;
|
public static boolean confirmExit = true;
|
||||||
/** if true, UI is not drawn */
|
/** if true, UI is not drawn */
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class MinerAI extends AIController{
|
|||||||
//core full of the target item, do nothing
|
//core full of the target item, do nothing
|
||||||
if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){
|
if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){
|
||||||
unit.clearItem();
|
unit.clearItem();
|
||||||
unit.mineTile =null;
|
unit.mineTile = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ public class MinerAI extends AIController{
|
|||||||
if(unit.stack.amount >= unit.type.itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){
|
if(unit.stack.amount >= unit.type.itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){
|
||||||
mining = false;
|
mining = false;
|
||||||
}else{
|
}else{
|
||||||
if(timer.get(timerTarget, 60) && targetItem != null){
|
if(timer.get(timerTarget3, 60) && targetItem != null){
|
||||||
ore = indexer.findClosestOre(unit, targetItem);
|
ore = indexer.findClosestOre(unit, targetItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class PhysicsProcess implements AsyncProcess{
|
|||||||
@Override
|
@Override
|
||||||
public void begin(){
|
public void begin(){
|
||||||
if(physics == null) return;
|
if(physics == null) return;
|
||||||
|
boolean local = !Vars.net.client();
|
||||||
|
|
||||||
//remove stale entities
|
//remove stale entities
|
||||||
refs.removeAll(ref -> {
|
refs.removeAll(ref -> {
|
||||||
@@ -60,8 +61,9 @@ public class PhysicsProcess implements AsyncProcess{
|
|||||||
ref.body.layer =
|
ref.body.layer =
|
||||||
entity.type.allowLegStep ? layerLegs :
|
entity.type.allowLegStep ? layerLegs :
|
||||||
entity.isGrounded() ? layerGround : layerFlying;
|
entity.isGrounded() ? layerGround : layerFlying;
|
||||||
ref.x = entity.x();
|
ref.x = entity.x;
|
||||||
ref.y = entity.y();
|
ref.y = entity.y;
|
||||||
|
ref.body.local = local || entity.isLocal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,6 +158,10 @@ public class PhysicsProcess implements AsyncProcess{
|
|||||||
|
|
||||||
for(int i = 0; i < bodies.size; i++){
|
for(int i = 0; i < bodies.size; i++){
|
||||||
PhysicsBody body = bodies.items[i];
|
PhysicsBody body = bodies.items[i];
|
||||||
|
|
||||||
|
//for clients, the only body that collides is the local one; all other physics simulations are handled by the server.
|
||||||
|
if(!body.local) continue;
|
||||||
|
|
||||||
body.hitbox(rect);
|
body.hitbox(rect);
|
||||||
|
|
||||||
seq.size = 0;
|
seq.size = 0;
|
||||||
@@ -174,10 +180,14 @@ public class PhysicsProcess implements AsyncProcess{
|
|||||||
float ms = body.mass + other.mass;
|
float ms = body.mass + other.mass;
|
||||||
float m1 = other.mass / ms, m2 = body.mass / ms;
|
float m1 = other.mass / ms, m2 = body.mass / ms;
|
||||||
|
|
||||||
|
//first body is always local due to guard check above
|
||||||
body.x += vec.x * m1 / scl;
|
body.x += vec.x * m1 / scl;
|
||||||
body.y += vec.y * m1 / scl;
|
body.y += vec.y * m1 / scl;
|
||||||
other.x -= vec.x * m2 / scl;
|
|
||||||
other.y -= vec.y * m2 / scl;
|
if(other.local){
|
||||||
|
other.x -= vec.x * m2 / scl;
|
||||||
|
other.y -= vec.y * m2 / scl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
body.collided = true;
|
body.collided = true;
|
||||||
@@ -187,7 +197,7 @@ public class PhysicsProcess implements AsyncProcess{
|
|||||||
public static class PhysicsBody implements QuadTreeObject{
|
public static class PhysicsBody implements QuadTreeObject{
|
||||||
public float x, y, radius, mass;
|
public float x, y, radius, mass;
|
||||||
public int layer = 0;
|
public int layer = 0;
|
||||||
public boolean collided = false;
|
public boolean collided = false, local = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hitbox(Rect out){
|
public void hitbox(Rect out){
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class Blocks implements ContentList{
|
|||||||
cellSynthesisChamber,
|
cellSynthesisChamber,
|
||||||
|
|
||||||
//sandbox
|
//sandbox
|
||||||
powerSource, powerVoid, itemSource, itemVoid, liquidSource, liquidVoid, payloadVoid, payloadSource, illuminator,
|
powerSource, powerVoid, itemSource, itemVoid, liquidSource, liquidVoid, payloadSource, payloadVoid, illuminator,
|
||||||
|
|
||||||
//defense
|
//defense
|
||||||
copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, plastaniumWall, plastaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge,
|
copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, plastaniumWall, plastaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge,
|
||||||
@@ -1178,17 +1178,17 @@ public class Blocks implements ContentList{
|
|||||||
//special transport blocks
|
//special transport blocks
|
||||||
|
|
||||||
duct = new Duct("duct"){{
|
duct = new Duct("duct"){{
|
||||||
requirements(Category.distribution, with(Items.graphite, 5, Items.metaglass, 2));
|
requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 5, Items.metaglass, 2));
|
||||||
speed = 4f;
|
speed = 4f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ductRouter = new DuctRouter("duct-router"){{
|
ductRouter = new DuctRouter("duct-router"){{
|
||||||
requirements(Category.distribution, with(Items.graphite, 10, Items.metaglass, 4));
|
requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 10, Items.metaglass, 4));
|
||||||
speed = 4f;
|
speed = 4f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ductBridge = new DuctBridge("duct-bridge"){{
|
ductBridge = new DuctBridge("duct-bridge"){{
|
||||||
requirements(Category.distribution, with(Items.graphite, 20, Items.metaglass, 8));
|
requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 20, Items.metaglass, 8));
|
||||||
speed = 4f;
|
speed = 4f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1757,13 +1757,13 @@ public class Blocks implements ContentList{
|
|||||||
shots = 4;
|
shots = 4;
|
||||||
burstSpacing = 5;
|
burstSpacing = 5;
|
||||||
inaccuracy = 10f;
|
inaccuracy = 10f;
|
||||||
range = 210f;
|
range = 215f;
|
||||||
xRand = 6f;
|
xRand = 6f;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 300 * size * size;
|
health = 300 * size * size;
|
||||||
shootSound = Sounds.missile;
|
shootSound = Sounds.missile;
|
||||||
|
|
||||||
limitRange(2f);
|
limitRange(5f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
salvo = new ItemTurret("salvo"){{
|
salvo = new ItemTurret("salvo"){{
|
||||||
@@ -1778,7 +1778,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
size = 2;
|
size = 2;
|
||||||
range = 190f;
|
range = 190f;
|
||||||
reloadTime = 34f;
|
reloadTime = 31f;
|
||||||
restitution = 0.03f;
|
restitution = 0.03f;
|
||||||
ammoEjectBack = 3f;
|
ammoEjectBack = 3f;
|
||||||
cooldown = 0.03f;
|
cooldown = 0.03f;
|
||||||
@@ -2147,7 +2147,7 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
repairPoint = new RepairPoint("repair-point"){{
|
repairPoint = new RepairPoint("repair-point"){{
|
||||||
requirements(Category.units, with(Items.lead, 20, Items.copper, 20, Items.silicon, 15));
|
requirements(Category.units, with(Items.lead, 25, Items.copper, 25, Items.silicon, 20));
|
||||||
repairSpeed = 0.5f;
|
repairSpeed = 0.5f;
|
||||||
repairRadius = 65f;
|
repairRadius = 65f;
|
||||||
beamWidth = 0.73f;
|
beamWidth = 0.73f;
|
||||||
@@ -2156,16 +2156,16 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
repairTurret = new RepairPoint("repair-turret"){{
|
repairTurret = new RepairPoint("repair-turret"){{
|
||||||
requirements(Category.units, with(Items.silicon, 70, Items.thorium, 60, Items.plastanium, 60));
|
requirements(Category.units, with(Items.silicon, 90, Items.thorium, 80, Items.plastanium, 80));
|
||||||
size = 2;
|
size = 2;
|
||||||
length = 6f;
|
length = 6f;
|
||||||
repairSpeed = 4f;
|
repairSpeed = 3.25f;
|
||||||
repairRadius = 140f;
|
repairRadius = 140f;
|
||||||
powerUse = 5f;
|
powerUse = 5f;
|
||||||
beamWidth = 1.1f;
|
beamWidth = 1.1f;
|
||||||
pulseRadius = 6.1f;
|
pulseRadius = 6.1f;
|
||||||
coolantUse = 0.15f;
|
coolantUse = 0.16f;
|
||||||
coolantMultiplier = 1.7f;
|
coolantMultiplier = 1.5f;
|
||||||
acceptCoolant = true;
|
acceptCoolant = true;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -2266,12 +2266,12 @@ public class Blocks implements ContentList{
|
|||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
payloadVoid = new PayloadVoid("payload-void"){{
|
payloadSource = new PayloadSource("payload-source"){{
|
||||||
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
||||||
size = 5;
|
size = 5;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
payloadSource = new PayloadSource("payload-source"){{
|
payloadVoid = new PayloadVoid("payload-void"){{
|
||||||
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
requirements(Category.units, BuildVisibility.sandboxOnly, with());
|
||||||
size = 5;
|
size = 5;
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -257,7 +257,6 @@ public class Bullets implements ContentList{
|
|||||||
width = 8f;
|
width = 8f;
|
||||||
height = 8f;
|
height = 8f;
|
||||||
shrinkY = 0f;
|
shrinkY = 0f;
|
||||||
drag = -0.01f;
|
|
||||||
splashDamageRadius = 30f;
|
splashDamageRadius = 30f;
|
||||||
splashDamage = 30f * 1.5f;
|
splashDamage = 30f * 1.5f;
|
||||||
ammoMultiplier = 5f;
|
ammoMultiplier = 5f;
|
||||||
@@ -274,7 +273,6 @@ public class Bullets implements ContentList{
|
|||||||
width = 7f;
|
width = 7f;
|
||||||
height = 8f;
|
height = 8f;
|
||||||
shrinkY = 0f;
|
shrinkY = 0f;
|
||||||
drag = -0.01f;
|
|
||||||
homingPower = 0.08f;
|
homingPower = 0.08f;
|
||||||
splashDamageRadius = 20f;
|
splashDamageRadius = 20f;
|
||||||
splashDamage = 20f * 1.5f;
|
splashDamage = 20f * 1.5f;
|
||||||
@@ -288,7 +286,6 @@ public class Bullets implements ContentList{
|
|||||||
width = 8f;
|
width = 8f;
|
||||||
height = 8f;
|
height = 8f;
|
||||||
shrinkY = 0f;
|
shrinkY = 0f;
|
||||||
drag = -0.01f;
|
|
||||||
splashDamageRadius = 25f;
|
splashDamageRadius = 25f;
|
||||||
splashDamage = 25f * 1.4f;
|
splashDamage = 25f * 1.4f;
|
||||||
hitEffect = Fx.blastExplosion;
|
hitEffect = Fx.blastExplosion;
|
||||||
|
|||||||
@@ -854,7 +854,7 @@ public class Fx{
|
|||||||
fireRemove = new Effect(70f, e -> {
|
fireRemove = new Effect(70f, e -> {
|
||||||
if(Fire.regions[0] == null) return;
|
if(Fire.regions[0] == null) return;
|
||||||
alpha(e.fout());
|
alpha(e.fout());
|
||||||
rect(Fire.regions[((int)(e.rotation + e.fin() * Fire.frames)) % Fire.frames], e.x, e.y);
|
rect(Fire.regions[((int)(e.rotation + e.fin() * Fire.frames)) % Fire.frames], e.x + Mathf.randomSeedRange((int)e.y, 2), e.y + Mathf.randomSeedRange((int)e.x, 2));
|
||||||
Drawf.light(e.x, e.y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * e.fout());
|
Drawf.light(e.x, e.y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * e.fout());
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|||||||
@@ -572,7 +572,7 @@ public class UnitTypes implements ContentList{
|
|||||||
speed = 1f;
|
speed = 1f;
|
||||||
splashDamageRadius = 60f;
|
splashDamageRadius = 60f;
|
||||||
instantDisappear = true;
|
instantDisappear = true;
|
||||||
splashDamage = 88f;
|
splashDamage = 90f;
|
||||||
killShooter = true;
|
killShooter = true;
|
||||||
hittable = false;
|
hittable = false;
|
||||||
collidesAir = true;
|
collidesAir = true;
|
||||||
@@ -581,7 +581,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
atrax = new UnitType("atrax"){{
|
atrax = new UnitType("atrax"){{
|
||||||
speed = 0.5f;
|
speed = 0.54f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
hitSize = 13f;
|
hitSize = 13f;
|
||||||
rotateSpeed = 3f;
|
rotateSpeed = 3f;
|
||||||
@@ -621,7 +621,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
spiroct = new UnitType("spiroct"){{
|
spiroct = new UnitType("spiroct"){{
|
||||||
speed = 0.45f;
|
speed = 0.48f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
hitSize = 15f;
|
hitSize = 15f;
|
||||||
rotateSpeed = 3f;
|
rotateSpeed = 3f;
|
||||||
@@ -2113,7 +2113,7 @@ public class UnitTypes implements ContentList{
|
|||||||
|
|
||||||
bullet = new ContinuousLaserBulletType(){{
|
bullet = new ContinuousLaserBulletType(){{
|
||||||
maxRange = 90f;
|
maxRange = 90f;
|
||||||
damage = 26f;
|
damage = 27f;
|
||||||
length = 95f;
|
length = 95f;
|
||||||
hitEffect = Fx.hitMeltHeal;
|
hitEffect = Fx.hitMeltHeal;
|
||||||
drawSize = 200f;
|
drawSize = 200f;
|
||||||
@@ -2144,7 +2144,7 @@ public class UnitTypes implements ContentList{
|
|||||||
x = 70f/4f;
|
x = 70f/4f;
|
||||||
y = -26f/4f;
|
y = -26f/4f;
|
||||||
|
|
||||||
reload = 70f;
|
reload = 65f;
|
||||||
shake = 3f;
|
shake = 3f;
|
||||||
rotateSpeed = 2f;
|
rotateSpeed = 2f;
|
||||||
shadow = 30f;
|
shadow = 30f;
|
||||||
@@ -2161,7 +2161,7 @@ public class UnitTypes implements ContentList{
|
|||||||
timeIncrease = 3f;
|
timeIncrease = 3f;
|
||||||
timeDuration = 60f * 20f;
|
timeDuration = 60f * 20f;
|
||||||
powerDamageScl = 3f;
|
powerDamageScl = 3f;
|
||||||
damage = 50;
|
damage = 60;
|
||||||
hitColor = lightColor = Pal.heal;
|
hitColor = lightColor = Pal.heal;
|
||||||
lightRadius = 70f;
|
lightRadius = 70f;
|
||||||
clipSize = 250f;
|
clipSize = 250f;
|
||||||
@@ -2177,7 +2177,7 @@ public class UnitTypes implements ContentList{
|
|||||||
trailWidth = 6f;
|
trailWidth = 6f;
|
||||||
trailColor = Pal.heal;
|
trailColor = Pal.heal;
|
||||||
trailInterval = 3f;
|
trailInterval = 3f;
|
||||||
splashDamage = 60f;
|
splashDamage = 70f;
|
||||||
splashDamageRadius = rad;
|
splashDamageRadius = rad;
|
||||||
hitShake = 4f;
|
hitShake = 4f;
|
||||||
trailRotation = true;
|
trailRotation = true;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
if(state.rules.pvp){
|
if(state.rules.pvp){
|
||||||
//find team with minimum amount of players and auto-assign player to that.
|
//find team with minimum amount of players and auto-assign player to that.
|
||||||
TeamData re = state.teams.getActive().min(data -> {
|
TeamData re = state.teams.getActive().min(data -> {
|
||||||
if((state.rules.waveTeam == data.team && state.rules.waves) || !data.team.active()) return Integer.MAX_VALUE;
|
if((state.rules.waveTeam == data.team && state.rules.waves) || !data.team.active() || data.team == Team.derelict) return Integer.MAX_VALUE;
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for(Player other : players){
|
for(Player other : players){
|
||||||
@@ -472,6 +472,10 @@ public class NetServer implements ApplicationListener{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!player.dead() && player.unit().isCommanding()){
|
||||||
|
player.unit().clearCommand();
|
||||||
|
}
|
||||||
|
|
||||||
player.getInfo().lastSyncTime = Time.millis();
|
player.getInfo().lastSyncTime = Time.millis();
|
||||||
Call.worldDataBegin(player.con);
|
Call.worldDataBegin(player.con);
|
||||||
netServer.sendWorldData(player);
|
netServer.sendWorldData(player);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import arc.scene.ui.layout.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.async.*;
|
import arc.util.async.*;
|
||||||
|
import mindustry.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -355,7 +356,7 @@ public class Renderer implements ApplicationListener{
|
|||||||
int w = world.width() * tilesize, h = world.height() * tilesize;
|
int w = world.width() * tilesize, h = world.height() * tilesize;
|
||||||
int memory = w * h * 4 / 1024 / 1024;
|
int memory = w * h * 4 / 1024 / 1024;
|
||||||
|
|
||||||
if(memory >= (mobile ? 65 : 120)){
|
if(Vars.checkScreenshotMemory && memory >= (mobile ? 65 : 120)){
|
||||||
ui.showInfo("@screenshot.invalid");
|
ui.showInfo("@screenshot.invalid");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,6 +126,10 @@ public abstract class UnlockableContent extends MappableContent{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean logicVisible(){
|
||||||
|
return !isHidden();
|
||||||
|
}
|
||||||
|
|
||||||
/** Makes this piece of content unlocked; if it already unlocked, nothing happens. */
|
/** Makes this piece of content unlocked; if it already unlocked, nothing happens. */
|
||||||
public void unlock(){
|
public void unlock(){
|
||||||
if(!unlocked && !alwaysUnlocked){
|
if(!unlocked && !alwaysUnlocked){
|
||||||
|
|||||||
@@ -52,22 +52,22 @@ public class Puddles{
|
|||||||
Puddle p = map.get(tile.pos());
|
Puddle p = map.get(tile.pos());
|
||||||
if(p == null){
|
if(p == null){
|
||||||
Puddle puddle = Puddle.create();
|
Puddle puddle = Puddle.create();
|
||||||
puddle.tile(tile);
|
puddle.tile = tile;
|
||||||
puddle.liquid(liquid);
|
puddle.liquid = liquid;
|
||||||
puddle.amount(amount);
|
puddle.amount = amount;
|
||||||
puddle.generation(generation);
|
puddle.generation = generation;
|
||||||
puddle.set((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f);
|
puddle.set((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f);
|
||||||
puddle.add();
|
puddle.add();
|
||||||
map.put(tile.pos(), puddle);
|
map.put(tile.pos(), puddle);
|
||||||
}else if(p.liquid() == liquid){
|
}else if(p.liquid == liquid){
|
||||||
p.accepting(Math.max(amount, p.accepting()));
|
p.accepting = Math.max(amount, p.accepting);
|
||||||
|
|
||||||
if(generation == 0 && p.lastRipple <= Time.time - 40f && p.amount() >= maxLiquid / 2f){
|
if(generation == 0 && p.lastRipple <= Time.time - 40f && p.amount >= maxLiquid / 2f){
|
||||||
Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, p.liquid().color);
|
Fx.ripple.at((tile.worldx() + source.worldx()) / 2f, (tile.worldy() + source.worldy()) / 2f, 1f, p.liquid.color);
|
||||||
p.lastRipple = Time.time;
|
p.lastRipple = Time.time;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
p.amount(p.amount() + reactPuddle(p.liquid(), liquid, amount, p.tile(), (p.x() + source.worldx())/2f, (p.y() + source.worldy())/2f));
|
p.amount += reactPuddle(p.liquid, liquid, amount, p.tile, (p.x + source.worldx())/2f, (p.y + source.worldy())/2f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when the bullet reaches the end of its lifetime of is destroyed by something external. */
|
/** Called when the bullet reaches the end of its lifetime or is destroyed by something external. */
|
||||||
public void despawned(Bullet b){
|
public void despawned(Bullet b){
|
||||||
if(despawnHit){
|
if(despawnHit){
|
||||||
hit(b);
|
hit(b);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.entities.comp;
|
package mindustry.entities.comp;
|
||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ abstract class BoundedComp implements Velc, Posc, Healthc, Flyingc{
|
|||||||
if(x > world.unitWidth()) dx -= (x - world.unitWidth())/warpDst;
|
if(x > world.unitWidth()) dx -= (x - world.unitWidth())/warpDst;
|
||||||
if(y > world.unitHeight()) dy -= (y - world.unitHeight())/warpDst;
|
if(y > world.unitHeight()) dy -= (y - world.unitHeight())/warpDst;
|
||||||
|
|
||||||
velAddNet(dx, dy);
|
velAddNet(dx * Time.delta, dy * Time.delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
//clamp position if not flying
|
//clamp position if not flying
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ abstract class FireComp implements Timedc, Posc, Syncc, Drawc{
|
|||||||
public static final TextureRegion[] regions = new TextureRegion[frames];
|
public static final TextureRegion[] regions = new TextureRegion[frames];
|
||||||
|
|
||||||
@Import float time, lifetime, x, y;
|
@Import float time, lifetime, x, y;
|
||||||
|
@Import int id;
|
||||||
|
|
||||||
Tile tile;
|
Tile tile;
|
||||||
private transient Block block;
|
private transient Block block;
|
||||||
@@ -116,7 +117,7 @@ abstract class FireComp implements Timedc, Posc, Syncc, Drawc{
|
|||||||
|
|
||||||
Draw.alpha(Mathf.clamp(warmup / warmupDuration));
|
Draw.alpha(Mathf.clamp(warmup / warmupDuration));
|
||||||
Draw.z(Layer.effect);
|
Draw.z(Layer.effect);
|
||||||
Draw.rect(regions[Math.min((int)animation, regions.length - 1)], x, y);
|
Draw.rect(regions[Math.min((int)animation, regions.length - 1)], x + Mathf.randomSeedRange((int)y, 2), y + Mathf.randomSeedRange((int)x, 2));
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
Drawf.light(x, y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * Mathf.clamp(warmup / warmupDuration));
|
Drawf.light(x, y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * Mathf.clamp(warmup / warmupDuration));
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package mindustry.entities.comp;
|
package mindustry.entities.comp;
|
||||||
|
|
||||||
import arc.math.*;
|
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -34,7 +33,7 @@ abstract class HealthComp implements Entityc, Posc{
|
|||||||
void kill(){
|
void kill(){
|
||||||
if(dead) return;
|
if(dead) return;
|
||||||
|
|
||||||
health = 0;
|
health = Math.min(health, 0);
|
||||||
dead = true;
|
dead = true;
|
||||||
killed();
|
killed();
|
||||||
remove();
|
remove();
|
||||||
@@ -86,7 +85,7 @@ abstract class HealthComp implements Entityc, Posc{
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clampHealth(){
|
void clampHealth(){
|
||||||
health = Mathf.clamp(health, 0, maxHealth);
|
health = Math.min(health, maxHealth);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Heals by a flat amount. */
|
/** Heals by a flat amount. */
|
||||||
|
|||||||
@@ -397,7 +397,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
//move down
|
//move down
|
||||||
elevation -= type.fallSpeed * Time.delta;
|
elevation -= type.fallSpeed * Time.delta;
|
||||||
|
|
||||||
if(isGrounded()){
|
if(isGrounded() || health <= -maxHealth){
|
||||||
Call.unitDestroy(id);
|
Call.unitDestroy(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -528,7 +528,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
@Override
|
@Override
|
||||||
public void killed(){
|
public void killed(){
|
||||||
wasPlayer = isLocal();
|
wasPlayer = isLocal();
|
||||||
health = 0;
|
health = Math.min(health, 0);
|
||||||
dead = true;
|
dead = true;
|
||||||
|
|
||||||
//don't waste time when the unit is already on the ground, just destroy it
|
//don't waste time when the unit is already on the ground, just destroy it
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ public enum Gamemode{
|
|||||||
rules.infiniteResources = true;
|
rules.infiniteResources = true;
|
||||||
rules.editor = true;
|
rules.editor = true;
|
||||||
rules.waves = false;
|
rules.waves = false;
|
||||||
rules.enemyCoreBuildRadius = 0f;
|
|
||||||
rules.waveTimer = false;
|
rules.waveTimer = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ public class BlockRenderer{
|
|||||||
|
|
||||||
darkEvents.each(pos -> {
|
darkEvents.each(pos -> {
|
||||||
var tile = world.tile(pos);
|
var tile = world.tile(pos);
|
||||||
|
if(tile == null) return;
|
||||||
float darkness = world.getDarkness(tile.x, tile.y);
|
float darkness = world.getDarkness(tile.x, tile.y);
|
||||||
//then draw the shadow
|
//then draw the shadow
|
||||||
Draw.colorl(darkness <= 0f ? 1f : 1f - Math.min((darkness + 0.5f) / 4f, 1f));
|
Draw.colorl(darkness <= 0f ? 1f : 1f - Math.min((darkness + 0.5f) / 4f, 1f));
|
||||||
|
|||||||
@@ -270,6 +270,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
b.button(Icon.save, style, this::showSchematicSave).disabled(f -> lastSchematic == null || lastSchematic.file != null);
|
b.button(Icon.save, style, this::showSchematicSave).disabled(f -> lastSchematic == null || lastSchematic.file != null);
|
||||||
b.button(Icon.cancel, style, () -> {
|
b.button(Icon.cancel, style, () -> {
|
||||||
selectRequests.clear();
|
selectRequests.clear();
|
||||||
|
lastSchematic = null;
|
||||||
});
|
});
|
||||||
b.row();
|
b.row();
|
||||||
b.button(Icon.flipX, style, () -> flipRequests(selectRequests, true));
|
b.button(Icon.flipX, style, () -> flipRequests(selectRequests, true));
|
||||||
|
|||||||
@@ -70,8 +70,6 @@ public class JsonIO{
|
|||||||
json.setElementType(Rules.class, "spawns", SpawnGroup.class);
|
json.setElementType(Rules.class, "spawns", SpawnGroup.class);
|
||||||
json.setElementType(Rules.class, "loadout", ItemStack.class);
|
json.setElementType(Rules.class, "loadout", ItemStack.class);
|
||||||
|
|
||||||
//TODO this is terrible
|
|
||||||
|
|
||||||
json.setSerializer(Sector.class, new Serializer<>(){
|
json.setSerializer(Sector.class, new Serializer<>(){
|
||||||
@Override
|
@Override
|
||||||
public void write(Json json, Sector object, Class knownType){
|
public void write(Json json, Sector object, Class knownType){
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
package mindustry.logic;
|
package mindustry.logic;
|
||||||
|
|
||||||
|
import arc.*;
|
||||||
|
import arc.files.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.logic.LExecutor.*;
|
import mindustry.logic.LExecutor.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
/** Stores global constants for logic processors. */
|
/** Stores global constants for logic processors. */
|
||||||
public class GlobalConstants{
|
public class GlobalConstants{
|
||||||
public static final int ctrlProcessor = 1, ctrlPlayer = 2, ctrlFormation = 3;
|
public static final int ctrlProcessor = 1, ctrlPlayer = 2, ctrlFormation = 3;
|
||||||
|
public static final ContentType[] lookableContent = {ContentType.block, ContentType.unit, ContentType.item, ContentType.liquid};
|
||||||
|
|
||||||
private ObjectIntMap<String> namesToIds = new ObjectIntMap<>();
|
private ObjectIntMap<String> namesToIds = new ObjectIntMap<>();
|
||||||
private Seq<Var> vars = new Seq<>(Var.class);
|
private Seq<Var> vars = new Seq<>(Var.class);
|
||||||
|
private UnlockableContent[][] logicIdToContent;
|
||||||
|
private int[][] contentIdToLogicId;
|
||||||
|
|
||||||
public void init(){
|
public void init(){
|
||||||
put("the end", null);
|
put("the end", null);
|
||||||
@@ -61,6 +69,49 @@ public class GlobalConstants{
|
|||||||
for(UnitCommand cmd : UnitCommand.all){
|
for(UnitCommand cmd : UnitCommand.all){
|
||||||
put("@command" + Strings.capitalize(cmd.name()), cmd);
|
put("@command" + Strings.capitalize(cmd.name()), cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logicIdToContent = new UnlockableContent[ContentType.all.length][];
|
||||||
|
contentIdToLogicId = new int[ContentType.all.length][];
|
||||||
|
|
||||||
|
Fi ids = Core.files.internal("logicids.dat");
|
||||||
|
if(ids.exists()){
|
||||||
|
//read logic ID mapping data (generated in ImagePacker)
|
||||||
|
try(DataInputStream in = new DataInputStream(ids.readByteStream())){
|
||||||
|
for(ContentType ctype : lookableContent){
|
||||||
|
short amount = in.readShort();
|
||||||
|
logicIdToContent[ctype.ordinal()] = new UnlockableContent[amount];
|
||||||
|
contentIdToLogicId[ctype.ordinal()] = new int[Vars.content.getBy(ctype).size];
|
||||||
|
|
||||||
|
//store count constants
|
||||||
|
put("@" + ctype.name() + "Count", amount);
|
||||||
|
|
||||||
|
for(int i = 0; i < amount; i++){
|
||||||
|
String name = in.readUTF();
|
||||||
|
UnlockableContent fetched = Vars.content.getByName(ctype, name);
|
||||||
|
|
||||||
|
if(fetched != null){
|
||||||
|
logicIdToContent[ctype.ordinal()][i] = fetched;
|
||||||
|
contentIdToLogicId[ctype.ordinal()][fetched.id] = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(IOException e){
|
||||||
|
//don't crash?
|
||||||
|
Log.err("Error reading logic ID mapping", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return a piece of content based on its logic ID. This is not equivalent to content ID. */
|
||||||
|
public @Nullable Content lookupContent(ContentType type, int id){
|
||||||
|
var arr = logicIdToContent[type.ordinal()];
|
||||||
|
return arr != null && id >= 0 && id < arr.length ? arr[id] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the integer logic ID of content, or -1 if invalid. */
|
||||||
|
public int lookupLogicId(UnlockableContent content){
|
||||||
|
var arr = contentIdToLogicId[content.getContentType().ordinal()];
|
||||||
|
return arr != null && content.id >= 0 && content.id < arr.length ? arr[content.id] : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return a constant ID > 0 if there is a constant with this name, otherwise -1. */
|
/** @return a constant ID > 0 if there is a constant with this name, otherwise -1. */
|
||||||
|
|||||||
@@ -537,7 +537,7 @@ public class LExecutor{
|
|||||||
public void run(LExecutor exec){
|
public void run(LExecutor exec){
|
||||||
Object obj = exec.obj(target);
|
Object obj = exec.obj(target);
|
||||||
if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id)){
|
if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id)){
|
||||||
if(type.isObj && exec.var(p1).isobj){ //TODO may break logic?
|
if(type.isObj && exec.var(p1).isobj){
|
||||||
b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
||||||
}else{
|
}else{
|
||||||
b.control(type, exec.num(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
b.control(type, exec.num(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
||||||
@@ -764,7 +764,6 @@ public class LExecutor{
|
|||||||
Var v = exec.var(to);
|
Var v = exec.var(to);
|
||||||
Var f = exec.var(from);
|
Var f = exec.var(from);
|
||||||
|
|
||||||
//TODO error out when the from-value is a constant
|
|
||||||
if(!v.constant){
|
if(!v.constant){
|
||||||
if(f.isobj){
|
if(f.isobj){
|
||||||
v.objval = f.objval;
|
v.objval = f.objval;
|
||||||
@@ -1024,6 +1023,26 @@ public class LExecutor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class LookupI implements LInstruction{
|
||||||
|
public int dest;
|
||||||
|
public int from;
|
||||||
|
public ContentType type;
|
||||||
|
|
||||||
|
public LookupI(int dest, int from, ContentType type){
|
||||||
|
this.dest = dest;
|
||||||
|
this.from = from;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LookupI(){
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(LExecutor exec){
|
||||||
|
exec.setobj(dest, constants.lookupContent(type, exec.numi(from)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import arc.scene.ui.*;
|
|||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.logic.LCanvas.*;
|
import mindustry.logic.LCanvas.*;
|
||||||
@@ -662,8 +663,7 @@ public class LStatements{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO untested
|
@RegisterStatement("wait")
|
||||||
//@RegisterStatement("wait")
|
|
||||||
public static class WaitStatement extends LStatement{
|
public static class WaitStatement extends LStatement{
|
||||||
public String value = "0.5";
|
public String value = "0.5";
|
||||||
|
|
||||||
@@ -684,6 +684,42 @@ public class LStatements{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RegisterStatement("lookup")
|
||||||
|
public static class LookupStatement extends LStatement{
|
||||||
|
public ContentType type = ContentType.item;
|
||||||
|
public String result = "result", id = "0";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void build(Table table){
|
||||||
|
fields(table, result, str -> result = str);
|
||||||
|
|
||||||
|
table.add(" = lookup ");
|
||||||
|
|
||||||
|
row(table);
|
||||||
|
|
||||||
|
table.button(b -> {
|
||||||
|
b.label(() -> type.name());
|
||||||
|
b.clicked(() -> showSelect(b, GlobalConstants.lookableContent, type, o -> {
|
||||||
|
type = o;
|
||||||
|
}));
|
||||||
|
}, Styles.logict, () -> {}).size(64f, 40f).pad(4f).color(table.color);
|
||||||
|
|
||||||
|
table.add(" # ");
|
||||||
|
|
||||||
|
fields(table, id, str -> id = str);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Color color(){
|
||||||
|
return Pal.logicOperations;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LInstruction build(LAssembler builder){
|
||||||
|
return new LookupI(builder.var(result), builder.var(id), type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@RegisterStatement("end")
|
@RegisterStatement("end")
|
||||||
public static class EndStatement extends LStatement{
|
public static class EndStatement extends LStatement{
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ public class ModClassLoader extends ClassLoader{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public ModClassLoader(ClassLoader parent){
|
||||||
|
super(parent);
|
||||||
|
}
|
||||||
|
|
||||||
public void addChild(ClassLoader child){
|
public void addChild(ClassLoader child){
|
||||||
children.add(child);
|
children.add(child);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class Mods implements Loadable{
|
|||||||
|
|
||||||
private int totalSprites;
|
private int totalSprites;
|
||||||
private MultiPacker packer;
|
private MultiPacker packer;
|
||||||
private ModClassLoader mainLoader = new ModClassLoader();
|
private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader());
|
||||||
|
|
||||||
Seq<LoadedMod> mods = new Seq<>();
|
Seq<LoadedMod> mods = new Seq<>();
|
||||||
private ObjectMap<Class<?>, ModMeta> metas = new ObjectMap<>();
|
private ObjectMap<Class<?>, ModMeta> metas = new ObjectMap<>();
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ public class Administration{
|
|||||||
});
|
});
|
||||||
|
|
||||||
//block interaction rate limit
|
//block interaction rate limit
|
||||||
//TODO when someone disconnects, a different player is mistakenly kicked for spamming actions
|
|
||||||
addActionFilter(action -> {
|
addActionFilter(action -> {
|
||||||
if(action.type != ActionType.breakBlock &&
|
if(action.type != ActionType.breakBlock &&
|
||||||
action.type != ActionType.placeBlock &&
|
action.type != ActionType.placeBlock &&
|
||||||
|
|||||||
@@ -391,7 +391,15 @@ public class ArcNetProvider implements NetProvider{
|
|||||||
//no compression, copy over buffer
|
//no compression, copy over buffer
|
||||||
if(compression == 0){
|
if(compression == 0){
|
||||||
buffer.position(0).limit(length);
|
buffer.position(0).limit(length);
|
||||||
buffer.put(byteBuffer.array(), byteBuffer.position(), length);
|
if(byteBuffer.hasArray()){
|
||||||
|
buffer.put(byteBuffer.array(), byteBuffer.position(), length);
|
||||||
|
}else{
|
||||||
|
byte[] readcopy = new byte[length];
|
||||||
|
int pos = byteBuffer.position();
|
||||||
|
byteBuffer.get(readcopy);
|
||||||
|
byteBuffer.position(pos);
|
||||||
|
buffer.put(readcopy);
|
||||||
|
}
|
||||||
buffer.position(0);
|
buffer.position(0);
|
||||||
packet.read(reads.get(), length);
|
packet.read(reads.get(), length);
|
||||||
//move read packets forward
|
//move read packets forward
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class Net{
|
|||||||
|
|
||||||
if(e instanceof BufferUnderflowException || e instanceof BufferOverflowException){
|
if(e instanceof BufferUnderflowException || e instanceof BufferOverflowException){
|
||||||
error = Core.bundle.get("error.io");
|
error = Core.bundle.get("error.io");
|
||||||
}else if(error.equals("mismatch")){
|
}else if(error.equals("mismatch") || (e instanceof IndexOutOfBoundsException && e.getStackTrace()[0].getClassName().contains("java.nio"))){
|
||||||
error = Core.bundle.get("error.mismatch");
|
error = Core.bundle.get("error.mismatch");
|
||||||
}else if(error.contains("port out of range") || error.contains("invalid argument") || (error.contains("invalid") && error.contains("address")) || Strings.neatError(e).contains("address associated")){
|
}else if(error.contains("port out of range") || error.contains("invalid argument") || (error.contains("invalid") && error.contains("address")) || Strings.neatError(e).contains("address associated")){
|
||||||
error = Core.bundle.get("error.invalidaddress");
|
error = Core.bundle.get("error.invalidaddress");
|
||||||
|
|||||||
@@ -664,7 +664,7 @@ public class UnitType extends UnlockableContent{
|
|||||||
if(unit.item() != null && unit.itemTime > 0.01f){
|
if(unit.item() != null && unit.itemTime > 0.01f){
|
||||||
float size = (itemSize + Mathf.absin(Time.time, 5f, 1f)) * unit.itemTime;
|
float size = (itemSize + Mathf.absin(Time.time, 5f, 1f)) * unit.itemTime;
|
||||||
|
|
||||||
Draw.mixcol(Pal.accent, Mathf.absin(Time.time, 5f, 0.5f));
|
Draw.mixcol(Pal.accent, Mathf.absin(Time.time, 5f, 0.1f));
|
||||||
Draw.rect(unit.item().fullIcon,
|
Draw.rect(unit.item().fullIcon,
|
||||||
unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY),
|
unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY),
|
||||||
unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY),
|
unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY),
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ public class ParticleWeather extends Weather{
|
|||||||
region = Core.atlas.find(particleRegion);
|
region = Core.atlas.find(particleRegion);
|
||||||
|
|
||||||
//load noise texture
|
//load noise texture
|
||||||
//TODO mod support
|
|
||||||
if(drawNoise && Core.assets != null){
|
if(drawNoise && Core.assets != null){
|
||||||
Core.assets.load("sprites/" + noisePath + ".png", Texture.class);
|
Core.assets.load("sprites/" + noisePath + ".png", Texture.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import arc.graphics.*;
|
|||||||
import arc.input.*;
|
import arc.input.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
|
import arc.scene.ui.TextButton.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
@@ -34,6 +35,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
int totalHosts;
|
int totalHosts;
|
||||||
int refreshes;
|
int refreshes;
|
||||||
boolean showHidden;
|
boolean showHidden;
|
||||||
|
TextButtonStyle style;
|
||||||
|
|
||||||
String lastIp;
|
String lastIp;
|
||||||
int lastPort;
|
int lastPort;
|
||||||
@@ -42,6 +44,15 @@ public class JoinDialog extends BaseDialog{
|
|||||||
public JoinDialog(){
|
public JoinDialog(){
|
||||||
super("@joingame");
|
super("@joingame");
|
||||||
|
|
||||||
|
style = new TextButtonStyle(){{
|
||||||
|
over = Styles.flatOver;
|
||||||
|
font = Fonts.def;
|
||||||
|
fontColor = Color.white;
|
||||||
|
disabledFontColor = Color.gray;
|
||||||
|
down = Styles.flatOver;
|
||||||
|
up = Styles.black5;
|
||||||
|
}};
|
||||||
|
|
||||||
loadServers();
|
loadServers();
|
||||||
|
|
||||||
if(!steam) buttons.add().width(60f);
|
if(!steam) buttons.add().width(60f);
|
||||||
@@ -119,7 +130,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
//why are java lambdas this bad
|
//why are java lambdas this bad
|
||||||
TextButton[] buttons = {null};
|
TextButton[] buttons = {null};
|
||||||
|
|
||||||
TextButton button = buttons[0] = remote.button("[accent]" + server.displayIP(), Styles.cleart, () -> {
|
TextButton button = buttons[0] = remote.button("[accent]" + server.displayIP(), style, () -> {
|
||||||
if(!buttons[0].childrenPressed()){
|
if(!buttons[0].childrenPressed()){
|
||||||
if(server.lastHost != null){
|
if(server.lastHost != null){
|
||||||
Events.fire(new ClientPreConnectEvent(server.lastHost));
|
Events.fire(new ClientPreConnectEvent(server.lastHost));
|
||||||
@@ -405,7 +416,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
float w = targetWidth();
|
float w = targetWidth();
|
||||||
|
|
||||||
//TODO looks bad
|
//TODO looks bad
|
||||||
container.button(b -> buildServer(host, b), Styles.cleart, () -> {
|
container.button(b -> buildServer(host, b), style, () -> {
|
||||||
Events.fire(new ClientPreConnectEvent(host));
|
Events.fire(new ClientPreConnectEvent(host));
|
||||||
if(!Core.settings.getBool("server-disclaimer", false)){
|
if(!Core.settings.getBool("server-disclaimer", false)){
|
||||||
ui.showCustomConfirm("@warning", "@servers.disclaimer", "@ok", "@back", () -> {
|
ui.showCustomConfirm("@warning", "@servers.disclaimer", "@ok", "@back", () -> {
|
||||||
@@ -442,7 +453,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
|
|
||||||
local.row();
|
local.row();
|
||||||
|
|
||||||
local.button(b -> buildServer(host, b), Styles.cleart, () -> {
|
local.button(b -> buildServer(host, b), style, () -> {
|
||||||
Events.fire(new ClientPreConnectEvent(host));
|
Events.fire(new ClientPreConnectEvent(host));
|
||||||
safeConnect(host.address, host.port, host.version);
|
safeConnect(host.address, host.port, host.version);
|
||||||
}).width(w);
|
}).width(w);
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ public class KeybindDialog extends Dialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(sections.length != 1){
|
if(sections.length != 1){
|
||||||
//TODO toggle style
|
|
||||||
TextButton button = new TextButton(bundle.get("section." + section.name + ".name", Strings.capitalize(section.name))/*, "toggle"*/);
|
TextButton button = new TextButton(bundle.get("section." + section.name + ".name", Strings.capitalize(section.name))/*, "toggle"*/);
|
||||||
if(section.equals(this.section))
|
if(section.equals(this.section))
|
||||||
button.toggle();
|
button.toggle();
|
||||||
|
|||||||
@@ -324,7 +324,6 @@ public class ModsDialog extends BaseDialog{
|
|||||||
if(showImport) dialog.buttons.button("@mods.browser.reinstall", Icon.download, () -> githubImportMod(mod.getRepo(), mod.isJava()));
|
if(showImport) dialog.buttons.button("@mods.browser.reinstall", Icon.download, () -> githubImportMod(mod.getRepo(), mod.isJava()));
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO improve this menu later
|
|
||||||
dialog.cont.pane(desc -> {
|
dialog.cont.pane(desc -> {
|
||||||
desc.center();
|
desc.center();
|
||||||
desc.defaults().padTop(10).left();
|
desc.defaults().padTop(10).left();
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
dialog.add("@sectors.captured");
|
dialog.add("@sectors.captured");
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO
|
//TODO unimplemented, cutscene needed
|
||||||
public void showPlanetLaunch(Sector sector, Cons<Sector> listener){
|
public void showPlanetLaunch(Sector sector, Cons<Sector> listener){
|
||||||
selected = null;
|
selected = null;
|
||||||
hovered = null;
|
hovered = null;
|
||||||
|
|||||||
@@ -423,12 +423,17 @@ public class SettingsMenuDialog extends Dialog{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
graphics.checkPref("linear", !mobile, b -> {
|
//iOS (and possibly Android) devices do not support linear filtering well, so disable it
|
||||||
for(Texture tex : Core.atlas.getTextures()){
|
if(!ios){
|
||||||
TextureFilter filter = b ? TextureFilter.linear : TextureFilter.nearest;
|
graphics.checkPref("linear", !mobile, b -> {
|
||||||
tex.setFilter(filter, filter);
|
for(Texture tex : Core.atlas.getTextures()){
|
||||||
}
|
TextureFilter filter = b ? TextureFilter.linear : TextureFilter.nearest;
|
||||||
});
|
tex.setFilter(filter, filter);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
settings.put("linear", false);
|
||||||
|
}
|
||||||
|
|
||||||
if(Core.settings.getBool("linear")){
|
if(Core.settings.getBool("linear")){
|
||||||
for(Texture tex : Core.atlas.getTextures()){
|
for(Texture tex : Core.atlas.getTextures()){
|
||||||
|
|||||||
@@ -267,6 +267,7 @@ public class HudFragment extends Fragment{
|
|||||||
//core info
|
//core info
|
||||||
parent.fill(t -> {
|
parent.fill(t -> {
|
||||||
t.top();
|
t.top();
|
||||||
|
t.visible(() -> shown);
|
||||||
|
|
||||||
t.name = "coreinfo";
|
t.name = "coreinfo";
|
||||||
|
|
||||||
|
|||||||
@@ -774,6 +774,11 @@ public class Block extends UnlockableContent{
|
|||||||
return ContentType.block;
|
return ContentType.block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean logicVisible(){
|
||||||
|
return buildVisibility != BuildVisibility.hidden;
|
||||||
|
}
|
||||||
|
|
||||||
/** Called after all blocks are created. */
|
/** Called after all blocks are created. */
|
||||||
@Override
|
@Override
|
||||||
@CallSuper
|
@CallSuper
|
||||||
@@ -838,7 +843,7 @@ public class Block extends UnlockableContent{
|
|||||||
//load specific team regions
|
//load specific team regions
|
||||||
teamRegions = new TextureRegion[Team.all.length];
|
teamRegions = new TextureRegion[Team.all.length];
|
||||||
for(Team team : Team.all){
|
for(Team team : Team.all){
|
||||||
teamRegions[team.id] = teamRegion.found() ? Core.atlas.find(name + "-team-" + team.name, teamRegion) : teamRegion;
|
teamRegions[team.id] = teamRegion.found() && team.hasPalette ? Core.atlas.find(name + "-team-" + team.name, teamRegion) : teamRegion;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(variants != 0){
|
if(variants != 0){
|
||||||
|
|||||||
@@ -134,24 +134,26 @@ public class Build{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//find closest core, if it doesn't match the team, placing is not legal
|
if(!state.rules.editor){
|
||||||
if(state.rules.polygonCoreProtection){
|
//find closest core, if it doesn't match the team, placing is not legal
|
||||||
float mindst = Float.MAX_VALUE;
|
if(state.rules.polygonCoreProtection){
|
||||||
CoreBuild closest = null;
|
float mindst = Float.MAX_VALUE;
|
||||||
for(TeamData data : state.teams.active){
|
CoreBuild closest = null;
|
||||||
for(CoreBuild tile : data.cores){
|
for(TeamData data : state.teams.active){
|
||||||
float dst = tile.dst2(x * tilesize + type.offset, y * tilesize + type.offset);
|
for(CoreBuild tile : data.cores){
|
||||||
if(dst < mindst){
|
float dst = tile.dst2(x * tilesize + type.offset, y * tilesize + type.offset);
|
||||||
closest = tile;
|
if(dst < mindst){
|
||||||
mindst = dst;
|
closest = tile;
|
||||||
|
mindst = dst;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if(closest != null && closest.team != team){
|
||||||
if(closest != null && closest.team != team){
|
return false;
|
||||||
|
}
|
||||||
|
}else if(state.teams.eachEnemyCore(team, core -> Mathf.dst(x * tilesize + type.offset, y * tilesize + type.offset, core.x, core.y) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}else if(state.teams.eachEnemyCore(team, core -> Mathf.dst(x * tilesize + type.offset, y * tilesize + type.offset, core.x, core.y) < state.rules.enemyCoreBuildRadius + type.size * tilesize / 2f)){
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile tile = world.tile(x, y);
|
Tile tile = world.tile(x, y);
|
||||||
|
|||||||
@@ -109,10 +109,15 @@ public class Accelerator extends Block{
|
|||||||
|
|
||||||
if(!state.isCampaign() || !consValid()) return;
|
if(!state.isCampaign() || !consValid()) return;
|
||||||
|
|
||||||
ui.planet.showPlanetLaunch(state.rules.sector, sector -> {
|
//TODO implement
|
||||||
//TODO cutscene, etc...
|
if(true){
|
||||||
consume();
|
ui.showInfo("@indev.campaign");
|
||||||
});
|
}else{
|
||||||
|
ui.planet.showPlanetLaunch(state.rules.sector, sector -> {
|
||||||
|
//TODO cutscene, etc...
|
||||||
|
consume();
|
||||||
|
});
|
||||||
|
}
|
||||||
Events.fire(Trigger.acceleratorUse);
|
Events.fire(Trigger.acceleratorUse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ public class LaunchPad extends Block{
|
|||||||
public void display(Table table){
|
public void display(Table table){
|
||||||
super.display(table);
|
super.display(table);
|
||||||
|
|
||||||
if(!state.isCampaign()) return;
|
if(!state.isCampaign() || net.client()) return;
|
||||||
|
|
||||||
table.row();
|
table.row();
|
||||||
table.label(() -> {
|
table.label(() -> {
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package mindustry.world.blocks.defense;
|
|||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
import mindustry.entities.bullet.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -18,6 +20,9 @@ public class ShockMine extends Block{
|
|||||||
public int length = 10;
|
public int length = 10;
|
||||||
public int tendrils = 6;
|
public int tendrils = 6;
|
||||||
public Color lightningColor = Pal.lancerLaser;
|
public Color lightningColor = Pal.lancerLaser;
|
||||||
|
public int shots = 6;
|
||||||
|
public float inaccuracy = 0f;
|
||||||
|
public @Nullable BulletType bullet;
|
||||||
public float teamAlpha = 0.3f;
|
public float teamAlpha = 0.3f;
|
||||||
public @Load("@-team-top") TextureRegion teamRegion;
|
public @Load("@-team-top") TextureRegion teamRegion;
|
||||||
|
|
||||||
@@ -46,17 +51,26 @@ public class ShockMine extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawCracks(){
|
public void drawCracks(){
|
||||||
|
//no
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unitOn(Unit unit){
|
public void unitOn(Unit unit){
|
||||||
if(enabled && unit.team != team && timer(timerDamage, cooldown)){
|
if(enabled && unit.team != team && timer(timerDamage, cooldown)){
|
||||||
for(int i = 0; i < tendrils; i++){
|
triggered();
|
||||||
Lightning.create(team, lightningColor, damage, x, y, Mathf.random(360f), length);
|
|
||||||
}
|
|
||||||
damage(tileDamage);
|
damage(tileDamage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void triggered(){
|
||||||
|
for(int i = 0; i < tendrils; i++){
|
||||||
|
Lightning.create(team, lightningColor, damage, x, y, Mathf.random(360f), length);
|
||||||
|
}
|
||||||
|
if(bullet != null){
|
||||||
|
for(int i = 0; i < shots; i++){
|
||||||
|
bullet.create(this, x, y, (360f / shots) * i + Mathf.random(inaccuracy));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ public class ItemTurret extends Turret{
|
|||||||
}
|
}
|
||||||
|
|
||||||
BulletType type = ammoTypes.get(item);
|
BulletType type = ammoTypes.get(item);
|
||||||
|
if(type == null) return;
|
||||||
totalAmmo += type.ammoMultiplier;
|
totalAmmo += type.ammoMultiplier;
|
||||||
|
|
||||||
//find ammo entry by type
|
//find ammo entry by type
|
||||||
|
|||||||
@@ -100,17 +100,27 @@ public class LiquidTurret extends Turret{
|
|||||||
@Override
|
@Override
|
||||||
protected void findTarget(){
|
protected void findTarget(){
|
||||||
if(extinguish && liquids.current().canExtinguish()){
|
if(extinguish && liquids.current().canExtinguish()){
|
||||||
|
Fire result = null;
|
||||||
|
float mindst = 0f;
|
||||||
int tr = (int)(range / tilesize);
|
int tr = (int)(range / tilesize);
|
||||||
for(int x = -tr; x <= tr; x++){
|
for(int x = -tr; x <= tr; x++){
|
||||||
for(int y = -tr; y <= tr; y++){
|
for(int y = -tr; y <= tr; y++){
|
||||||
Tile other = world.tileWorld(x + tile.x, y + tile.y);
|
Tile other = world.tile(x + tile.x, y + tile.y);
|
||||||
|
var fire = Fires.get(x + tile.x, y + tile.y);
|
||||||
|
float dst = fire == null ? 0 : dst2(fire);
|
||||||
//do not extinguish fires on other team blocks
|
//do not extinguish fires on other team blocks
|
||||||
if(other != null && Fires.has(x + tile.x, y + tile.y) && (other.build == null || other.team() == team)){
|
if(other != null && fire != null && Fires.has(other.x, other.y) && dst <= range * range && (result == null || dst < mindst) && (other.build == null || other.team() == team)){
|
||||||
target = Fires.get(x + tile.x, y + tile.y);
|
result = fire;
|
||||||
return;
|
mindst = dst;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(result != null){
|
||||||
|
target = result;
|
||||||
|
//don't run standard targeting
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.findTarget();
|
super.findTarget();
|
||||||
|
|||||||
@@ -43,6 +43,10 @@ public class PayloadRouter extends PayloadConveyor{
|
|||||||
do{
|
do{
|
||||||
rotation = (rotation + 1) % 4;
|
rotation = (rotation + 1) % 4;
|
||||||
onProximityUpdate();
|
onProximityUpdate();
|
||||||
|
//force update to transfer if necessary
|
||||||
|
if(next instanceof PayloadConveyorBuild && !(next instanceof PayloadRouterBuild)){
|
||||||
|
next.updateTile();
|
||||||
|
}
|
||||||
//this condition intentionally uses "accept from itself" conditions, because payload conveyors only accept during the start
|
//this condition intentionally uses "accept from itself" conditions, because payload conveyors only accept during the start
|
||||||
//"accept from self" conditions are for dropped payloads and are less restrictive
|
//"accept from self" conditions are for dropped payloads and are less restrictive
|
||||||
}while((blocked || next == null || !next.acceptPayload(next, item)) && ++rotations < 4);
|
}while((blocked || next == null || !next.acceptPayload(next, item)) && ++rotations < 4);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import mindustry.gen.*;
|
|||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
|
import mindustry.world.blocks.storage.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ public class PayloadSource extends PayloadBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canProduce(Block b){
|
public boolean canProduce(Block b){
|
||||||
return b.isVisible() && b.size < size;
|
return b.isVisible() && b.size < size && !(b instanceof CoreBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canProduce(UnitType t){
|
public boolean canProduce(UnitType t){
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.world.blocks.production;
|
package mindustry.world.blocks.production;
|
||||||
|
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
|
import arc.math.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
@@ -67,6 +68,8 @@ public class Fracker extends SolidPump{
|
|||||||
super.updateTile();
|
super.updateTile();
|
||||||
accumulator += delta() * efficiency();
|
accumulator += delta() * efficiency();
|
||||||
}else{
|
}else{
|
||||||
|
warmup = Mathf.lerpDelta(warmup, 0f, 0.02f);
|
||||||
|
lastPump = 0f;
|
||||||
dumpLiquid(result);
|
dumpLiquid(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import arc.util.*;
|
|||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.production.GenericCrafter.*;
|
import mindustry.world.blocks.production.GenericCrafter.*;
|
||||||
|
|
||||||
//TODO
|
|
||||||
public class DrawArcSmelter extends DrawBlock{
|
public class DrawArcSmelter extends DrawBlock{
|
||||||
public TextureRegion top, bottom;
|
public TextureRegion top, bottom;
|
||||||
public Color flameColor = Color.valueOf("f58349"), midColor = Color.valueOf("f2d585");
|
public Color flameColor = Color.valueOf("f58349"), midColor = Color.valueOf("f2d585");
|
||||||
|
|||||||
@@ -38,6 +38,6 @@ public class DrawWeave extends DrawBlock{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextureRegion[] icons(Block block){
|
public TextureRegion[] icons(Block block){
|
||||||
return new TextureRegion[]{bottom, block.region, weave};
|
return new TextureRegion[]{bottom, weave, block.region};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -322,7 +322,9 @@ public class DesktopLauncher extends ClientLauncher{
|
|||||||
|
|
||||||
presence.largeImageKey = "logo";
|
presence.largeImageKey = "logo";
|
||||||
|
|
||||||
DiscordRPC.send(presence);
|
try{
|
||||||
|
DiscordRPC.send(presence);
|
||||||
|
}catch(Exception ignored){}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(steam){
|
if(steam){
|
||||||
|
|||||||
@@ -88,8 +88,12 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
|||||||
net.handleException(t);
|
net.handleException(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch(SteamException e){
|
}catch(Exception e){
|
||||||
Log.err(e);
|
if(net.server()){
|
||||||
|
Log.err(e);
|
||||||
|
}else{
|
||||||
|
net.showError(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -303,7 +307,8 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
|||||||
try{
|
try{
|
||||||
SteamID lobby = smat.getLobbyByIndex(i);
|
SteamID lobby = smat.getLobbyByIndex(i);
|
||||||
String mode = smat.getLobbyData(lobby, "gamemode");
|
String mode = smat.getLobbyData(lobby, "gamemode");
|
||||||
if(mode == null || mode.isEmpty() || Strings.parseInt(smat.getLobbyData(lobby, "version"), -1) == -1) continue;
|
//make sure versions are equal, don't list incompatible lobbies
|
||||||
|
if(mode == null || mode.isEmpty() || (Version.build != -1 && Strings.parseInt(smat.getLobbyData(lobby, "version"), -1) != Version.build)) continue;
|
||||||
Host out = new Host(
|
Host out = new Host(
|
||||||
-1, //invalid ping
|
-1, //invalid ping
|
||||||
smat.getLobbyData(lobby, "name"),
|
smat.getLobbyData(lobby, "name"),
|
||||||
|
|||||||
@@ -1,14 +1,51 @@
|
|||||||
Crée des chaînes de ravitaillement pour tes défenses, produis les matériaux de construction pour aggrandir et protéger tes bâtiments contre des vagues d'ennemis. Joue avec tes amis grâce à des jeux multijoueurs co-op cross-plateformes, ou défie-les dans des parties en JcJ par équipe.
|
Créer des chaînes de ravitaillement pour tes défenses, produisez des matériaux à utiliser pour vos constructions et protégez vos structures des vagues d'ennemis. Jouez avec vos amis dans des parties multijoueurs cross-plateformes en co-op ou défiez-les lors de matchs PvP en équipe.
|
||||||
|
|
||||||
Caractéristiques:
|
<h2>Caractéristiques du jeu</h2>
|
||||||
- 24 cartes integrées
|
|
||||||
- Une campagne, complète avec un arbre de recherche et des zones à débloquer
|
- Utilisez les usines de production avancés pour créer des ressources plus complexes.
|
||||||
- 4 puissants boss de fin de vague à vaincre
|
- Défendez vos structures contre les vagues d'ennemis.
|
||||||
- Systèmes de transport d'énergie, liquides et objets
|
- Jouez avec vos amis dans des jeux coopératifs multijoueurs multi plateformes, ou défiez-les dans des matchs JcJ par équipe.
|
||||||
- 19 différents types de drones, méchas et vaisseaux
|
- Gérez l'acheminent des liquides et combattez les incendies des raids d'avions ennemis.
|
||||||
- 120+ blocs technologiques à maîtriser
|
- Boostez la production en approvisionnant vos blocs de défense et de production avec des liquides de refroidissement et des lubrifiants optionnels.
|
||||||
- 75+ différents blocs environnementaux
|
- Produisez une grande variété d'unités pour la gestion automatique de votre base ou l'assaut des bases ennemies.
|
||||||
- Multijoueur cross-plateforme via réseau local or serveurs dédiés
|
|
||||||
- Règles de jeu personnalisables: Change le coût des structures, les stats des ennemis, les ressources de départ, fréquence des vagues et plus
|
|
||||||
- Un éditeur puissant dotés d'outils pour générer aléatoirement des minéraux, le terrain, des décorations et appliquer une symétrie au terrain.
|
<h2>Campagne</h2>
|
||||||
- Vagues d'ennemis personnalisables
|
|
||||||
|
- Partez à la conquête de la planète Serpulo en progressant dans plus de 250 secteurs générés de manière procédurale et sur 16 cartes créées à la main.
|
||||||
|
- Capturez des territoires et installez des usines pour produire des ressources pendant que vous jouez dans d'autres secteurs.
|
||||||
|
- Défendez vos secteurs contre les invasions périodiques.
|
||||||
|
- Coordonner la distribution des ressources entre les secteurs via des rampes de lancement.
|
||||||
|
- Recherchez de nouveaux blocs pour alimenter votre progression.
|
||||||
|
- Invitez vos amis à accomplir des missions ensemble.
|
||||||
|
- Plus de 130 blocs technologiques à maîtriser.
|
||||||
|
- 33 types différents de drones, de mechs et de vaisseaux.
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Modes de jeu</h2>
|
||||||
|
|
||||||
|
- <b>Survie</b> : Construisez des tourelles pour défendre votre base des ennemis dans un style de jeu inspiré des tower-defense. Survivez aussi longtemps que possible, avant de faire décoller votre noyau. Utilisez les ressources récoltées pour débloquer de nouvelles technologies. Préparez votre base pour les attaques de puissants boss aériens.
|
||||||
|
- <b>Attaque</b> : Construisez des usines et produisez des unités pour détruire les noyaux ennemis, tout en défendant votre base contre les vagues d'attaque. Créez une grande variété d'unités offensives et de support pour vous aider dans vos objectifs.
|
||||||
|
- <b>PvP</b> : Affrontez d'autres joueurs dans jusqu'à 4 équipes différentes pour détruire les noyaux des autres. Créez des unités, ou attaquez directement les autres bases avec vos mechs.
|
||||||
|
- <b>Bac à sable</b> : Jouez avec des ressources infinies et sans menace ennemie. Utilisez des objets et des blocs spécifiques à ce mode de jeu tels que les sources de liquides. Testez vos designs et faites apparaître les ennemis à la demande.
|
||||||
|
|
||||||
|
|
||||||
|
<h2>Jeux & Cartes Personnalisés; Multijoueurs Cross-Plateformes</h2>
|
||||||
|
|
||||||
|
- 16 cartes supplémentaires pour vos parties personnalisées en plus des cartes de la campagne.
|
||||||
|
- Jouez en Co-op, en PvP ou en mode Bac à sable.
|
||||||
|
- Rejoignez un serveur public dédié ou invitez vos amis à votre propre session privée.
|
||||||
|
- Règles de jeu personnalisables: Modifiez le coût des blocs, les statistiques des ennemis, les objets de départ, le timing des vagues, etc...
|
||||||
|
- Mixez les modes de jeux: combinez PvP et PvE dans la même partie.
|
||||||
|
|
||||||
|
<h2>Éditeur de cartes personnalisées</h2>
|
||||||
|
|
||||||
|
- Peignez le terrain grâce à une interface d'édition.
|
||||||
|
- Éditez and prévisualisez les structures en jeu.
|
||||||
|
- Outils d'édition configurables: choisissez comment chaque outil fonctionne.
|
||||||
|
- Générateur de carte puissant, disposant d'un grand nombre de filtres permettant la manipulation procédurale du terrain.
|
||||||
|
- Appliquez les effets bruit, distortion, lissage, erosion, symétrie, génération de minerais et terrain aléatoire.
|
||||||
|
- Randomisez et configurez la génération des minerais ainsi que le placement des rivières et des tuiles de ressources.
|
||||||
|
- Configurez la disposition des vagues ennemies.
|
||||||
|
- Personnalisez les règles de base de vos cartes
|
||||||
|
- Utilisez plus de 80 blocs environnementaux différents.
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ kapt.include.compile.classpath=false
|
|||||||
kotlin.stdlib.default.dependency=false
|
kotlin.stdlib.default.dependency=false
|
||||||
#needed for android compilation
|
#needed for android compilation
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
archash=52f21644b8f70c3a926d3d8d8130f0d71e0e4e79
|
archash=1142cfc35b6671c6a2c5566632ff044a46527b82
|
||||||
|
|||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
14
servers.json
14
servers.json
@@ -1,14 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"address": "mindustry.atannergaming.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "mindustry.atannergaming.com:7000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "mindustry.atannergaming.com:8000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "mindustry.atannergaming.com:6800"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,17 +1,14 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"address": "mindustry.us.to"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"address": "be.mindustry.nydus.app:6567"
|
"address": "be.mindustry.nydus.app:6567"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"address": "157.90.180.53:25777"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"address": "mindustry.pl:7777"
|
"address": "mindustry.pl:7777"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"address": "mindurka.tk:9999"
|
"address": "v7.mindurka.tk:9999"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "c-n.ddns.net:6567"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "C.A.M.S.",
|
"name": "C.A.M.S.",
|
||||||
"address": ["routerchain.ddns.net", "nikochio.ddns.net", "play.thedimas.pp.ua"]
|
"address": ["baseduser.eu.org:6568", "nikochio.ddns.net", "play.thedimas.pp.ua"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "BE6.RUN",
|
"name": "BE6.RUN",
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Korea",
|
"name": "Korea",
|
||||||
"address": ["mindustry.kr"]
|
"address": ["mindustry.kr", "mindustry.initd.kr"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hexpvp.ml",
|
"name": "hexpvp.ml",
|
||||||
|
|||||||
45
servers_v7.json
Normal file
45
servers_v7.json
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"address": "mindustry.us.to"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mindustry.pl",
|
||||||
|
"address": ["mindustry.pl:6000", "mindustry.pl:6666", "mindustry.pl:6966"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "C.A.M.S.",
|
||||||
|
"address": ["baseduser.eu.org:6569", "v7.thedimas.pp.ua"]
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"name": "hexpvp.ml",
|
||||||
|
"address": "hexpvp.ml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "[accent]Mindustry [red]Reborn",
|
||||||
|
"address": "mindustry.me:7000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Omega",
|
||||||
|
"address": "157.90.180.53:25777"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MeowLand",
|
||||||
|
"address": "34.134.111.15"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mindurka",
|
||||||
|
"address": ["mindurka.tk", "mindurka.tk:4000"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chaotic Neutral",
|
||||||
|
"address": ["c-n.ddns.net:5555", "c-n.ddns.net:6666"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "XCore",
|
||||||
|
"address": "178.170.47.34:28110"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Obvilion Network",
|
||||||
|
"address": "obvilionnetwork.ru:7004"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.backend.headless.*;
|
import arc.backend.headless.*;
|
||||||
import arc.files.*;
|
import arc.files.*;
|
||||||
import arc.func.*;
|
|
||||||
import arc.math.*;
|
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
@@ -118,7 +116,6 @@ public class ApplicationTests{
|
|||||||
Thread.sleep(10);
|
Thread.sleep(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Block block = content.getByName(ContentType.block, "build2");
|
Block block = content.getByName(ContentType.block, "build2");
|
||||||
assertEquals("build2", block == null ? null : block.name, "2x2 construct block doesn't exist?");
|
assertEquals("build2", block == null ? null : block.name, "2x2 construct block doesn't exist?");
|
||||||
}catch(Throwable r){
|
}catch(Throwable r){
|
||||||
@@ -184,7 +181,7 @@ public class ApplicationTests{
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void serverListJson(){
|
void serverListJson(){
|
||||||
String[] files = {"servers.json", "servers_be.json", "servers_v6.json"};
|
String[] files = {"servers_v6.json", "servers_v7.json", "servers_be.json"};
|
||||||
|
|
||||||
for(String file : files){
|
for(String file : files){
|
||||||
try{
|
try{
|
||||||
@@ -508,72 +505,6 @@ public class ApplicationTests{
|
|||||||
world.tile(0, 0).build.acceptStack(Items.copper, 1000, null);
|
world.tile(0, 0).build.acceptStack(Items.copper, 1000, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void indexingBasic(){
|
|
||||||
resetWorld();
|
|
||||||
SaveIO.load(Core.files.internal("77.msav"));
|
|
||||||
|
|
||||||
//test basic method.
|
|
||||||
Rand r = new Rand(0);
|
|
||||||
Building[] res = {null};
|
|
||||||
|
|
||||||
Cons<Building> assigner = t -> res[0] = t;
|
|
||||||
|
|
||||||
int iterations = 100;
|
|
||||||
|
|
||||||
r.setSeed(0);
|
|
||||||
|
|
||||||
//warmup.
|
|
||||||
for(int i = 0; i < iterations; i++){
|
|
||||||
int x = r.random(0, world.width()), y = r.random(0, world.height());
|
|
||||||
float range = r.random(tilesize * 30);
|
|
||||||
|
|
||||||
indexer.eachBlock(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO impl
|
|
||||||
/*
|
|
||||||
r.setSeed(0);
|
|
||||||
|
|
||||||
for(int i = 0; i < iterations; i++){
|
|
||||||
int x = r.random(0, world.width()), y = r.random(0, world.height());
|
|
||||||
float range = r.random(tilesize * 30);
|
|
||||||
|
|
||||||
indexer.eachBlock2(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
//benchmark.
|
|
||||||
|
|
||||||
r.setSeed(0);
|
|
||||||
|
|
||||||
Time.mark();
|
|
||||||
|
|
||||||
for(int i = 0; i < iterations; i++){
|
|
||||||
int x = r.random(0, world.width()), y = r.random(0, world.height());
|
|
||||||
float range = r.random(tilesize * 30);
|
|
||||||
|
|
||||||
indexer.eachBlock(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.info("Time for basic indexing: @", Time.elapsed());
|
|
||||||
|
|
||||||
r.setSeed(0);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Time.mark();
|
|
||||||
|
|
||||||
for(int i = 0; i < iterations; i++){
|
|
||||||
int x = r.random(0, world.width()), y = r.random(0, world.height());
|
|
||||||
float range = r.random(tilesize * 30);
|
|
||||||
|
|
||||||
indexer.eachBlock2(Team.sharded, x * tilesize, y * tilesize, range, t -> true, assigner);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.info("Time for quad: {0}", Time.elapsed());
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void conveyorBench(){
|
void conveyorBench(){
|
||||||
int[] itemsa = {0};
|
int[] itemsa = {0};
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class ModTestBM extends GenericModTest{
|
|||||||
assertNotNull(type, "A mod block must be loaded.");
|
assertNotNull(type, "A mod block must be loaded.");
|
||||||
assertSame(type.buildVisibility, BuildVisibility.shown, "A mod block must be buildable.");
|
assertSame(type.buildVisibility, BuildVisibility.shown, "A mod block must be buildable.");
|
||||||
|
|
||||||
world.loadMap(ApplicationTests.testMap);
|
world.loadMap(maps.loadInternalMap("groundZero"));
|
||||||
Tile t = world.tile(3, 3);
|
Tile t = world.tile(3, 3);
|
||||||
|
|
||||||
t.setBlock(type);
|
t.setBlock(type);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import mindustry.gen.*;
|
|||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import org.junit.jupiter.api.*;
|
import org.junit.jupiter.api.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
//grabs a version-locked exotic-mod commit and makes sure its content is parsed correctly
|
//grabs a version-locked exotic-mod commit and makes sure its content is parsed correctly
|
||||||
@@ -23,7 +24,7 @@ public class ModTestExotic extends GenericModTest{
|
|||||||
assertNotNull(type, "A mod unit must be loaded.");
|
assertNotNull(type, "A mod unit must be loaded.");
|
||||||
assertTrue(type.weapons.size > 0, "A mod unit must have a weapon.");
|
assertTrue(type.weapons.size > 0, "A mod unit must have a weapon.");
|
||||||
|
|
||||||
Vars.world.loadMap(ApplicationTests.testMap);
|
Vars.world.loadMap(maps.loadInternalMap("groundZero"));
|
||||||
|
|
||||||
Unit unit = type.spawn(0, 0);
|
Unit unit = type.spawn(0, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import mindustry.gen.*;
|
|||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import org.junit.jupiter.api.*;
|
import org.junit.jupiter.api.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
//grabs a version-locked Heavy Armaments Industries commit and makes sure it initializes correctly
|
//grabs a version-locked Heavy Armaments Industries commit and makes sure it initializes correctly
|
||||||
@@ -22,7 +23,7 @@ public class ModTestHAI extends GenericModTest{
|
|||||||
assertNotNull(type, "A mod unit must be loaded.");
|
assertNotNull(type, "A mod unit must be loaded.");
|
||||||
assertTrue(type.weapons.size > 0, "A mod unit must have a weapon.");
|
assertTrue(type.weapons.size > 0, "A mod unit must have a weapon.");
|
||||||
|
|
||||||
Vars.world.loadMap(ApplicationTests.testMap);
|
Vars.world.loadMap(maps.loadInternalMap("groundZero"));
|
||||||
|
|
||||||
Unit unit = type.spawn(0, 0);
|
Unit unit = type.spawn(0, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -390,7 +390,6 @@ public class Generators{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//TODO broken, freezes
|
|
||||||
generate("unit-icons", () -> content.units().each(type -> {
|
generate("unit-icons", () -> content.units().each(type -> {
|
||||||
if(type.isHidden()) return; //hidden units don't generate
|
if(type.isHidden()) return; //hidden units don't generate
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import mindustry.*;
|
|||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
|
import mindustry.logic.*;
|
||||||
import mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -86,7 +87,8 @@ public class ImagePacker{
|
|||||||
Time.mark();
|
Time.mark();
|
||||||
Generators.run();
|
Generators.run();
|
||||||
Log.info("&ly[Generator]&lc Total time to generate: &lg@&lcms", Time.elapsed());
|
Log.info("&ly[Generator]&lc Total time to generate: &lg@&lcms", Time.elapsed());
|
||||||
//Log.info("&ly[Generator]&lc Total images created: &lg@", Image.total());
|
|
||||||
|
//write icons to icons.properties
|
||||||
|
|
||||||
//format:
|
//format:
|
||||||
//character-ID=contentname:texture-name
|
//character-ID=contentname:texture-name
|
||||||
@@ -118,6 +120,74 @@ public class ImagePacker{
|
|||||||
}
|
}
|
||||||
|
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
|
//now, write the IDs to logicids.dat
|
||||||
|
|
||||||
|
//don't write to the file unless I'm packing, because logic IDs rarely change and I don't want merge conflicts from PRs
|
||||||
|
if(!OS.username.equals("anuke")) return;
|
||||||
|
|
||||||
|
//format: ([content type (byte)] [content count (short)] (repeat [name (string)])) until EOF
|
||||||
|
Fi logicidfile = Fi.get("../../../assets/logicids.dat");
|
||||||
|
|
||||||
|
Seq<UnlockableContent> lookupCont = new Seq<>();
|
||||||
|
|
||||||
|
for(ContentType t : GlobalConstants.lookableContent){
|
||||||
|
lookupCont.addAll(Vars.content.<UnlockableContent>getBy(t).select(UnlockableContent::logicVisible));
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectIntMap<UnlockableContent>[] registered = new ObjectIntMap[ContentType.all.length];
|
||||||
|
IntMap<UnlockableContent>[] idToContent = new IntMap[ContentType.all.length];
|
||||||
|
|
||||||
|
for(int i = 0; i < ContentType.all.length; i++){
|
||||||
|
registered[i] = new ObjectIntMap<>();
|
||||||
|
idToContent[i] = new IntMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(logicidfile.exists()){
|
||||||
|
try(DataInputStream in = new DataInputStream(logicidfile.readByteStream())){
|
||||||
|
for(ContentType ctype : GlobalConstants.lookableContent){
|
||||||
|
short amount = in.readShort();
|
||||||
|
for(int i = 0; i < amount; i++){
|
||||||
|
String name = in.readUTF();
|
||||||
|
UnlockableContent fetched = Vars.content.getByName(ctype, name);
|
||||||
|
if(fetched != null){
|
||||||
|
registered[ctype.ordinal()].put(fetched, i);
|
||||||
|
idToContent[ctype.ordinal()].put(i, fetched);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//map stuff that hasn't been mapped yet
|
||||||
|
for(UnlockableContent c : lookupCont){
|
||||||
|
int ctype = c.getContentType().ordinal();
|
||||||
|
if(!registered[ctype].containsKey(c)){
|
||||||
|
int nextId = 0;
|
||||||
|
//find next ID - this is O(N) but content counts are so low that I don't really care
|
||||||
|
//checking the last ID doesn't work because there might be "holes"
|
||||||
|
for(UnlockableContent other : lookupCont){
|
||||||
|
if(!idToContent[ctype].containsKey(other.id + 1)){
|
||||||
|
nextId = other.id + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
idToContent[ctype].put(nextId, c);
|
||||||
|
registered[ctype].put(c, nextId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//write the resulting IDs
|
||||||
|
try(DataOutputStream out = new DataOutputStream(logicidfile.write(false, 2048))){
|
||||||
|
for(ContentType t : GlobalConstants.lookableContent){
|
||||||
|
Seq<UnlockableContent> all = idToContent[t.ordinal()].values().toArray().sort(u -> registered[t.ordinal()].get(u));
|
||||||
|
out.writeShort(all.size);
|
||||||
|
for(UnlockableContent u : all){
|
||||||
|
out.writeUTF(u.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static String texname(UnlockableContent c){
|
static String texname(UnlockableContent c){
|
||||||
|
|||||||
Reference in New Issue
Block a user