1
0
mirror of https://github.com/Anuken/Mindustry.git synced 2024-10-06 12:57:17 +03:00

Merge branch 'master' of https://github.com/Anuken/Mindustry into 7.0-features

 Conflicts:
	core/src/mindustry/content/UnitTypes.java
This commit is contained in:
Anuken 2021-08-25 09:22:23 -04:00
commit 26dd7e00eb
42 changed files with 556 additions and 253 deletions

View File

@ -101,6 +101,8 @@ public class EntityProcess extends BaseProcessor{
inter.addJavadoc("Interface for {@link $L}", component.fullName());
skipDeprecated(inter);
//implement extra interfaces these components may have, e.g. position
for(Stype extraInterface : component.interfaces().select(i -> !isCompInterface(i))){
//javapoet completely chokes on this if I add `addSuperInterface` or create the type name with TypeName.get
@ -570,6 +572,8 @@ public class EntityProcess extends BaseProcessor{
.returns(tname(packageName + "." + name))
.addStatement(ann.pooled() ? "return Pools.obtain($L.class, " +name +"::new)" : "return new $L()", name).build());
skipDeprecated(builder);
definitions.add(new EntityDefinition(packageName + "." + name, builder, type, typeIsBase ? null : baseClass, components, groups, allFieldSpecs, legacy));
}
@ -837,6 +841,8 @@ public class EntityProcess extends BaseProcessor{
TypeSpec.Builder nullBuilder = TypeSpec.classBuilder(className)
.addModifiers(Modifier.FINAL);
skipDeprecated(nullBuilder);
nullBuilder.addSuperinterface(interf.tname());
if(superclass != null) nullBuilder.superclass(tname(baseName(superclass)));
@ -980,6 +986,11 @@ public class EntityProcess extends BaseProcessor{
throw new IllegalArgumentException("Missing types.");
}
void skipDeprecated(TypeSpec.Builder builder){
//deprecations are irrelevant in generated code
builder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"deprecation\"").build());
}
class GroupDefinition{
final String name;
final ClassName baseType;

View File

@ -41,8 +41,8 @@ buildscript{
}
plugins{
id 'org.jetbrains.kotlin.jvm' version '1.4.32'
id "org.jetbrains.kotlin.kapt" version "1.4.32"
id 'org.jetbrains.kotlin.jvm' version '1.5.21'
id "org.jetbrains.kotlin.kapt" version "1.5.21"
}
allprojects{
@ -219,10 +219,16 @@ allprojects{
options.compilerArgs += ["-Xlint:deprecation"]
dependsOn clearCache
options.forkOptions.jvmArgs.addAll([
options.forkOptions.jvmArgs += [
'--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED'
])
'--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED',
'--add-opens=java.base/sun.reflect.annotation=ALL-UNNAMED'
]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

View File

@ -93,6 +93,7 @@ level.mode = Gamemode:
coreattack = < Core is under attack! >
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
database = Core Database
database.button = Database
savegame = Save Game
loadgame = Load Game
joingame = Join Game
@ -168,6 +169,7 @@ launchcore = Launch Core
filename = File Name:
unlocked = New content unlocked!
available = New research available!
unlock.incampaign = < Unlock in campaign for details >
completed = [accent]Completed
techtree = Tech Tree
research.legacy = [accent]5.0[] research data found.\nDo you want to [accent]load this data[], or [accent]discard it[] and restart research in the new campaign (recommended)?
@ -777,7 +779,7 @@ bar.corereq = Core Base Required
bar.drillspeed = Drill Speed: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.boost = Boost: {0}%
bar.boost = Boost: +{0}%
bar.powerbalance = Power: {0}/s
bar.powerstored = Stored: {0}/{1}
bar.poweramount = Power: {0}

View File

@ -751,7 +751,7 @@ bar.corereq = Необходимо е Ядро за основа
bar.drillspeed = Скорост на свредлото: {0}/сек
bar.pumpspeed = Скорост на помпата: {0}/сек
bar.efficiency = Ефективност: {0}%
bar.boost = Усилване: {0}%
bar.boost = Усилване: +{0}%
bar.powerbalance = Електроенергия: {0}/сек
bar.powerstored = Съхранена енергия: {0}/{1}
bar.poweramount = Електроенергия: {0}

View File

@ -772,7 +772,7 @@ bar.corereq = Kern-Basis erforderlich
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
bar.pumpspeed = Pumpengeschwindigkeit: {0}/s
bar.efficiency = Effizienz: {0}%
bar.boost = Beschleunigung: {0}%
bar.boost = Beschleunigung: +{0}%
bar.powerbalance = Strom: {0}/s
bar.powerstored = Gespeichert: {0}/{1}
bar.poweramount = Strom: {0}
@ -1739,4 +1739,4 @@ lenum.mine = Erz von einer Position abbauen.
lenum.build = Einen Block bauen.
lenum.getblock = Gibt den Blocktyp an den Koordinaten zurück.\nEinheiten müssen nah genug dran sein.\nFeste nicht-Blöcke sind [accent]@solid[].
lenum.within = Prüft, ob eine Einheit in einem Radius um einen Punkt ist.
lenum.boost = Aktiviert / deaktiviert den Boost.
lenum.boost = Aktiviert / deaktiviert den Boost.

View File

@ -78,13 +78,12 @@ schematic.tagexists = Ce mot-clé existe déjà.
stats = Statistiques
stat.wave = Vagues vaincues : [accent] {0}
stat.unitsCreated = Unités créées :[accent] {0}
stat.enemiesDestroyed = Ennemis détruits : [accent] {0}
stat.built = Bâtiments construits : [accent] {0}
stat.destroyed = Bâtiments détruits : [accent] {0}
stat.deconstructed = Bâtiments déconstruits : [accent] {0}
stat.delivered = Ressources transférées :
stat.playtime = Temps de jeu : [accent] {0}
stat.rank = Rang Final : [accent]{0}
globalitems = [accent]Ressources globales
map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]" ?
@ -215,7 +214,7 @@ hosts.none = [lightgray]Aucune partie en LAN trouvée !
host.invalid = [scarlet]Impossible de se connecter à l'hôte.
servers.local = Serveurs locaux
servers.local.steam = Open Games & Serveurs Locaux
servers.local.steam = Jeux Libres & Serveurs Locaux
servers.remote = Serveurs distants
servers.global = Serveurs communautaires
@ -317,7 +316,7 @@ 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.
quit.confirm = Êtes-vous sûr de vouloir quitter ?
loading = [accent]Chargement...
reloading = [accent]Rechargement des Mods...
downloading = [accent]Téléchargement...
saving = [accent]Sauvegarde...
respawn = [accent][[{0}][] pour réapparaître dans le Noyau
cancelbuilding = [accent][[{0}][] pour effacer le plan
@ -385,6 +384,7 @@ waves.waves = vague(s)
waves.perspawn = par apparition
waves.shields = boucliers/vague
waves.to = à
waves.max = Unités maximum
waves.guardian = Gardien
waves.preview = Prévisualiser
waves.edit = Modifier...
@ -539,6 +539,7 @@ configure = Modifier le chargement
loadout = Chargement
resources = Ressources
bannedblocks = Blocs bannis
bannedunits = Unités bannies
addall = Ajouter TOUT
launch.from = Décollage depuis : [accent]{0}
launch.destination = Destination: {0}
@ -649,6 +650,7 @@ status.overclock.name = Surcadençage
status.shocked.name = Étourdie
status.blasted.name = Foudroyé
status.unmoving.name = Immobilisé
status.boss.name = Gardien
settings.language = Langage
settings.data = Données du Jeu
@ -773,7 +775,7 @@ bar.corereq = Noyau de base requis
bar.drillspeed = Vitesse de Forage: {0}/s
bar.pumpspeed = Vitesse de Pompage: {0}/s
bar.efficiency = Efficacité: {0}%
bar.boost = Boost: {0}%
bar.boost = Boost: +{0}%
bar.powerbalance = Énergie: {0}/s
bar.powerstored = Réserves d'Énergie: {0}/{1}
bar.poweramount = Énergie: {0}
@ -838,6 +840,7 @@ category.crafting = Fabrication
category.function = Fonction
category.optional = Améliorations facultatives
setting.skipcoreanimation.name = Ignorer l'animation du lancement du noyau et de l'atterrissage
setting.landscape.name = Verrouiller la rotation en mode paysage
setting.shadows.name = Ombres
setting.blockreplace.name = Suggestion automatique des Blocs
@ -878,6 +881,7 @@ setting.seconds = {0} secondes
setting.milliseconds = {0} millisecondes
setting.fullscreen.name = Plein Écran
setting.borderlesswindow.name = Fenêtré sans bordures
setting.borderlesswindow.name.windows = Plein écran sans bordure
setting.borderlesswindow.description = Un redémarrage peut être nécessaire pour appliquer les changements.
setting.fps.name = Afficher FPS et Ping
setting.smoothcamera.name = Lissage de la Caméra
@ -1111,7 +1115,6 @@ unit.reign.name = Éradicateur
unit.vela.name = Vela
unit.corvus.name = Corvus
block.resupply-point.name = Point de Rechargement
block.parallax.name = Parallax
block.cliff.name = Falaise
block.sand-boulder.name = Bloc de Sable
@ -1414,8 +1417,7 @@ liquid.slag.description = Différents types de métaux en fusion mélangés. Peu
liquid.oil.description = Un liquide utilisé dans la production de matériaux avancés. Peut être transformé en charbon ou pulvérisé sur les ennemis, puis enflammé.
liquid.cryofluid.description = Un liquide inerte, non corrosif, créé à partir deau et de titane. Possède une capacité d'absorption de chaleur extrêmement élevée. Largement utilisé comme liquide de refroidissement.
block.derelict = [lightgray] Vestiges
block.resupply-point.description = Approvisionne les unités proches en munitions. Pas compatible avec celles qui ont besoin d'énergie pour tirer.
block.derelict =  [lightgray]Vestiges
block.illuminator.description = Une petite source lumineuse compacte et configurable. Nécessite de l'énergie pour fonctionner.
block.armored-conveyor.description = Déplace les objets à la même vitesse que les convoyeurs en titane, mais est plus résistant. Seulement d'autres convoyeurs peuvent faire entrer des ressources par ses côtés.
block.message.description = Enregistre un message. Utilisé pour la communication entre alliés. Le message contenu peut être modifié par un processeur logique.
@ -1441,6 +1443,8 @@ block.item-source.description = Produit des objets à l'infini. Bac à sable uni
block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur. Bac à sable uniquement.
block.liquid-source.description = Source de liquide infinie. Bac à sable uniquement.
block.liquid-void.description = Détruit n'importe quel liquide. Bac à sable uniquement.
block.payload-source.description = Produit des charges utiles à l'infini. Bac à sable uniquement.
block.payload-void.description = Détruit toutes les charges utiles. Bac à sable uniquement.
block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies.

View File

@ -725,7 +725,7 @@ bar.corereq = Core Base Required
bar.drillspeed = Kitermelés: {0}/s
bar.pumpspeed = Kitermelés: {0}/s
bar.efficiency = Hatékonyság: {0}%
bar.boost = Boost: {0}%
bar.boost = Boost: +{0}%
bar.powerbalance = Áram: {0}/s
bar.powerstored = Tárolt: {0}/{1}
bar.poweramount = Áram: {0}

View File

@ -773,7 +773,7 @@ bar.corereq = Memerlukan Inti Dasar
bar.drillspeed = Kecepatan Bor: {0}/s
bar.pumpspeed = Kecepatan Pompa: {0}/s
bar.efficiency = Daya Guna: {0}%
bar.boost = Percepatan: {0}%
bar.boost = Percepatan: +{0}%
bar.powerbalance = Tenaga: {0}/s
bar.powerstored = Disimpan: {0}/{1}
bar.poweramount = Tenaga: {0}

View File

@ -78,13 +78,12 @@ schematic.tagexists = このタグはすでに存在します。
stats = Stats
stat.wave = 防衛したウェーブ:[accent] {0}
stat.unitsCreated = 生産ユニット数:[accent] {0}
stat.enemiesDestroyed = 敵に破壊された数:[accent] {0}
stat.built = 建設した建造物数:[accent] {0}
stat.destroyed = 破壊した建造物数:[accent] {0}
stat.deconstructed = 解体した建造物数:[accent] {0}
stat.delivered = 獲得した資源:
stat.playtime = プレイ時間:[accent] {0}
stat.rank = 最終ランク: [accent]{0}
globalitems = [accent]グローバルアイテム
map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
@ -93,7 +92,7 @@ level.select = レベル選択
level.mode = ゲームモード:
coreattack = < コアが攻撃を受けています! >
nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます
database = コアデータベース
database = コアデータベース
savegame = 保存
loadgame = 読み込む
joingame = マルチプレイ
@ -385,6 +384,7 @@ waves.waves = ごとに出現
waves.perspawn = 体出現
waves.shields = シールド/ウェーブ
waves.to = から
waves.max = 最大ユニット数
waves.guardian = ガーディアン
waves.preview = プレビュー
waves.edit = 編集...
@ -652,6 +652,7 @@ status.overclock.name = オーバークロック
status.shocked.name = 電撃
status.blasted.name = 爆破
status.unmoving.name = 移動阻止
status.boss.name = ガーディアン
settings.language = 言語
settings.data = ゲームデータ
@ -776,7 +777,7 @@ bar.corereq = コアベースが必要
bar.drillspeed = 採掘速度: {0}/秒
bar.pumpspeed = ポンプの速度: {0}/s
bar.efficiency = 効率: {0}%
bar.boost = ブースト: {0}%
bar.boost = ブースト: +{0}%
bar.powerbalance = 電力均衡: {0}/秒
bar.powerstored = 総蓄電量: {0}/{1}
bar.poweramount = 蓄電量: {0}
@ -937,7 +938,7 @@ keybind.move_y.name = 上下移動
keybind.mouse_move.name = マウスを追う
keybind.pan.name = 視点移動
keybind.boost.name = ブースト
keybind.schematic_select.name = 地域の選択
keybind.schematic_select.name = 範囲選択
keybind.schematic_menu.name = 設計図メニュー
keybind.schematic_flip_x.name = 設計図をX座標で反転
keybind.schematic_flip_y.name = 設計図をY座標で反転

View File

@ -78,13 +78,12 @@ schematic.tagexists = 이 태그는 이미 존재합니다.
stats = 전투 결과
stat.wave = 패배한 단계:[accent] {0}
stat.unitsCreated = 생성한 유닛:[accent] {0}
stat.enemiesDestroyed = 파괴된 적:[accent] {0}
stat.built = 지어진 건물: [accent]{0}
stat.destroyed = 파괴된 건물: [accent]{0}
stat.deconstructed = 해체된 건물: [accent]{0}
stat.delivered = 얻은 자원:
stat.playtime = 플레이 시간: [accent] {0}
stat.rank = 최종 순위: [accent]{0}
globalitems = [accent]전체 자원
map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?
@ -385,6 +384,7 @@ waves.waves = 단계마다
waves.perspawn = 마리씩 생성됨
waves.shields = 방어막 hp/단계
waves.to = 부터
waves.max = 최대 유닛 수
waves.guardian = 수호자
waves.preview = 미리보기
waves.edit = 편집
@ -777,7 +777,7 @@ bar.corereq = 기본 코어 필요
bar.drillspeed = 드릴 속도: {0}/s
bar.pumpspeed = 펌프 속도: {0}/s
bar.efficiency = 효율: {0}%
bar.boost = 가속: {0}%
bar.boost = 가속: +{0}%
bar.powerbalance = 전력: {0}/s
bar.powerstored = 저장량: {0}/{1}
bar.poweramount = 전력: {0}
@ -1432,13 +1432,15 @@ block.separator.description = 광재를 광물들로 분리합니다.
block.spore-press.description = 포자를 석유로 압축합니다.
block.pulverizer.description = 고철을 갈아 모래로 만듭니다.
block.coal-centrifuge.description = 석유에서 석탄을 추출합니다.
block.incinerator.description = 넘치는 자원이나 액체를 증발시킵니다.
block.power-void.description = 입력된 모든 전력을 무효로 합니다. 샌드박스 전용.
block.power-source.description = 무한한 전력을 공급해주는 블록입니다. 샌드박스 전용.
block.item-source.description = 자원을 무한대로 출력합니다. 샌드박스 전용.
block.item-void.description = 모든 자원을 파괴합니다. 샌드박스 전용.
block.incinerator.description = 들어오는 모든 자원과 액체를 소각시킵니다.
block.power-void.description = 전력을 제거합니다. 샌드박스 전용.
block.power-source.description = 전력을 무한히 출력합니다. 샌드박스 전용.
block.item-source.description = 자원을 무한 출력합니다. 샌드박스 전용.
block.item-void.description = 자원을 제거합니다. 샌드박스 전용.
block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용.
block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용.
block.payload-source.description = 화물을 무한히 출력합니다. 샌드박스 전용.
block.payload-void.description = 화물을 제거합니다. 샌드박스 전용.
block.copper-wall.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.
block.copper-wall-large.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.\n여러 타일을 차지합니다.
block.titanium-wall.description = 적당히 강한 방어 블록.\n적에게서 적절한 보호를 제공합니다.

View File

@ -762,7 +762,7 @@ bar.corereq = Wymagany Rdzeń
bar.drillspeed = Prędkość wiertła: {0}/s
bar.pumpspeed = Prędkość pompy: {0}/s
bar.efficiency = Efektywność: {0}%
bar.boost = Przyspieszenie: {0}%
bar.boost = Przyspieszenie: +{0}%
bar.powerbalance = Moc: {0}
bar.powerstored = Zmagazynowano: {0}/{1}
bar.poweramount = Moc: {0}

View File

@ -78,13 +78,12 @@ schematic.tagexists = Acea etichetă există deja.
stats = Informații
stat.wave = Valuri Învinse:[accent] {0}
stat.unitsCreated = Unități Create:[accent] {0}
stat.enemiesDestroyed = Inamici Distruși:[accent] {0}
stat.built = Structuri Construite:[accent] {0}
stat.destroyed = Structuri Distruse:[accent] {0}
stat.deconstructed = Structuri Deconstruite:[accent] {0}
stat.delivered = Resurse Lansate:
stat.playtime = Timp Joc:[accent] {0}
stat.rank = Rang Final: [accent]{0}
globalitems = [accent]Materiale Totale
map.delete = Sigur vrei să ștergi harta "[accent]{0}[]"?
@ -94,6 +93,7 @@ level.mode = Mod de Joc:
coreattack = < Nucleul este atacat! >
nearpoint = [[ [scarlet]PLEACĂ DE LA PUNCTUL DE LANSARE IMEDIAT[] ]\nanihilare imminentă
database = Datele Nucleului
database.button = Bază de date
savegame = Salvează Jocul
loadgame = Încarcă Jocul
joingame = Intră în Joc
@ -385,6 +385,7 @@ waves.waves = val(uri)
waves.perspawn = per apariție
waves.shields = scuturi/val
waves.to = până la
waves.max = unități maxime
waves.guardian = Gardian
waves.preview = Previzualizare
waves.edit = Editează...
@ -652,6 +653,7 @@ status.overclock.name = Suprasolicitat
status.shocked.name = Electrocutat
status.blasted.name = Explozie
status.unmoving.name = Nemișcat
status.boss.name = Gardian
settings.language = Limbă
settings.data = Datele Jocului
@ -776,7 +778,7 @@ bar.corereq = Plasare pe Nucleu Necesară
bar.drillspeed = Viteză Minare: {0}/s
bar.pumpspeed = Viteză Pompare: {0}/s
bar.efficiency = Eficiență: {0}%
bar.boost = Efect Grăbire: {0}%
bar.boost = Efect Grăbire: +{0}%
bar.powerbalance = Electricitate: {0}/s
bar.powerstored = Stocată: {0}/{1}
bar.poweramount = Electricitate: {0}
@ -1339,7 +1341,7 @@ block.memory-bank.name = Bancă de Memorie
team.blue.name = Albastru
team.crux.name = Agresor
team.sharded.name = Portocaliu
team.derelict.name = Abandonat
team.derelict.name = Ruină
team.green.name = Verde
team.purple.name = Mov
@ -1360,7 +1362,7 @@ hint.placeTurret = Construiește \uf861 [accent]Arme[] pt a-ți apăra baza de i
hint.breaking = Ține apăsat [accent]click-dreapta[] și trage pe ecran pt a distruge blocuri.
hint.breaking.mobile = Activează \ue817 [accent]ciocanul[] din dreapta-jos și dă click pt a distruge blocuri.\n\nȚine apăsat cu degetul pt o secundă și trage pt a distruge mai multe blocuri deodată.
hint.blockInfo = Poți vedea informații despre un bloc selectându-l în [accent]meniul de construcție[] și dând click pe butonul [accent][[?][] din dreapta.
hint.derelict = [accent]Structurile abandonate[] sunt rămășițe stricate ale bazelor vechi care nu mai funcționează.\n\nAceste structuri pot fi [accent]deconstruite[] pt resurse.
hint.derelict = [accent]Ruinele[] sunt rămășițe deteriorate ale bazelor vechi care nu mai funcționează.\n\nAceste structuri pot fi [accent]deconstruite[] pt resurse.
hint.research = Folosește butonul \ue875 [accent]Cercetează[] pt a cerceta noi tehnologii.
hint.research.mobile = Folosește butonul \ue875 [accent]Cercetează[] din \ue88c [accent]Meniu[] pt a cerceta noi tehnologii.
hint.unitControl = Ține apăsat [accent][[Ctrl][] și [accent]dă click[] pt a controla unități aliate sau arme.
@ -1412,7 +1414,7 @@ liquid.slag.description = Rafinată înapoi în materialele constituente cu ajut
liquid.oil.description = Folosit în producerea avansată de materiale și ca muniție incendiară.
liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici.
block.derelict =  [lightgray]Structură Abandonată
block.derelict =  [lightgray]Ruină
block.armored-conveyor.description = Transportă materialele înainte. Nu acceptă materiale de pe lateral decât de la alte benzi.
block.illuminator.description = Emite lumină.
block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați.
@ -1438,6 +1440,8 @@ block.item-source.description = Generează materiale la infinit. Doar în modul
block.item-void.description = Distruge orice material. Doar în modul sandbox.
block.liquid-source.description = Generează lichide la infinit. Doar în modul sandbox.
block.liquid-void.description = Distruge orice lichid. Doar în modul sandbox.
block.payload-source.description = Generează încărcături la infinit. Doar în modul sandbox.
block.payload-void.description = Distruge orice încărcătură. Doar în modul sandbox.
block.copper-wall.description = Protejează clădirile de proiectilele inamice.
block.copper-wall-large.description = Protejează clădirile de proiectilele inamice.
block.titanium-wall.description = Protejează clădirile de proiectilele inamice.

View File

@ -94,6 +94,7 @@ level.mode = Режим игры:
coreattack = < Ядро находится под атакой! >
nearpoint = [[ [scarlet]ПОКИНЬТЕ ТОЧКУ ВЫСАДКИ НЕМЕДЛЕННО[] ]\nаннигиляция неизбежна
database = База данных ядра
database.button = База данных
savegame = Сохранить игру
loadgame = Загрузить игру
joingame = Сетевая игра
@ -770,7 +771,7 @@ bar.corereq = Требуется основа ядра
bar.drillspeed = Скорость бурения: {0}/с
bar.pumpspeed = Скорость выкачивания: {0}/с
bar.efficiency = Эффективность: {0}%
bar.boost = Ускорение: {0}%
bar.boost = Ускорение: +{0}%
bar.powerbalance = Энергия: {0}/с
bar.powerstored = Накоплено: {0}/{1}
bar.poweramount = Энергия: {0}

View File

@ -78,13 +78,12 @@ schematic.tagexists = แท็กนี้มีอยู่แล้ว
stats = สถิติ
stat.wave = จำนวนคลื่นที่อยู่รอด:[accent] {0}
stat.unitsCreated = จำนวนยูนิตที่สร้าง:[accent] {0}
stat.enemiesDestroyed = จำนวนศัตรูที่ทำลาย:[accent] {0}
stat.built = จำนวนสิ่งก่อสร้างที่สร้าง:[accent] {0}
stat.destroyed = จำนวนสิ่งก่อสร้างที่ถูกทำลาย:[accent] {0}
stat.deconstructed = จำนวนสิ่งก่อสร้างที่ลบไป:[accent] {0}
stat.delivered = ทรัพยากรที่ส่งไป:
stat.playtime = ระยะเวลาที่เล่นไป:[accent] {0}
stat.rank = ระดับ: [accent]{0}
globalitems = [accent]ไอเท็มทั้งหมด
map.delete = คุณแน่ใจหรือว่าจะลบแมพ "[accent]{0}[]"?
@ -94,6 +93,7 @@ level.mode = เกมโหมด:
coreattack = < แกนกลางถูกโจมตี! >
nearpoint = [[ [scarlet]ออกจากจุดเกิดด่วน![] ]\nการทำลายล้างกำลังใกล้เข้ามา
database = ฐานข้อมูลแกนกลาง
database.button = ฐานข้อมูล
savegame = เซฟเกม
loadgame = โหลดเกม
joingame = เข้าร่วมเกม
@ -296,8 +296,8 @@ save.playtime = เวลาที่เล่นไป: {0}
warning = คำเตือน
confirm = ตกลง
delete = ลบ
view.workshop = เปิดในเวิร์ช็อป
workshop.listing = แก้ไขหน้ารายการเวิร์ช็อป
view.workshop = เปิดในเวิร์ช็อป
workshop.listing = แก้ไขหน้ารายการเวิร์ช็อป
ok = โอเค
open = เปิด
customize = ตั้งค่ากฎ
@ -336,8 +336,8 @@ wave.enemies = ศัตรูคงเหลือ [lightgray]{0} [accent]ต
wave.enemycores = แกนกลางศัตรูเหลือ [accent]{0}[lightgray] แกน
wave.enemycore = [accent]{0}[lightgray] แกนกลางศัตรู
wave.enemy = ศัตรูคงเหลือ [lightgray]{0} [accent]ตัว
wave.guardianwarn = การ์เดียนจะปรากฏตัวในอีก [accent]{0}[] คลื่น!
wave.guardianwarn.one = การ์เดียนจะปรากฏตัวในอีก [accent]{0}[] คลื่น! เตรียมตัวให้พร้อม!
wave.guardianwarn = ผู้พิทักษ์จะปรากฏตัวในอีก [accent]{0}[] คลื่น!
wave.guardianwarn.one = ผู้พิทักษ์จะปรากฏตัวในอีก [accent]{0}[] คลื่น! เตรียมตัวให้พร้อม!
loadimage = โหลดรูป
saveimage = เซฟรูป
unknown = ไม่ทราบ
@ -374,10 +374,10 @@ editor.waves = คลื่น:
editor.rules = กฎ:
editor.generation = เจนเนอเรชั่น:
editor.ingame = แก้ไขในเกม
editor.publish.workshop = เผยแพร่บนเวิร์ช็อป
editor.publish.workshop = เผยแพร่บนเวิร์ช็อป
editor.newmap = แมพใหม่
editor.center = ศูนย์กลางแมพ
workshop = เวิร์ช็อป
workshop = เวิร์ช็อป
waves.title = คลื่น
waves.remove = ลบ
waves.every = ทุกๆ
@ -385,7 +385,8 @@ waves.waves = คลื่น
waves.perspawn = ต่อการเกิด
waves.shields = เกราะ/คลื่น
waves.to = ถึง
waves.guardian = การ์เดียน
waves.max = ยูนิตสูงสุด
waves.guardian = ผู้พิทักษ์
waves.preview = พรีวิว
waves.edit = แก้ไข...
waves.copy = คัดลอกไปยังคลิปบอร์ด
@ -545,7 +546,7 @@ launch.from = ลงจอดจากเซ็กเตอร์: [accent]{0}
launch.destination = จุดหมายปลายทาง: {0}
configure.invalid = จำนวนต้องอยู่ระหว่าง 0 ถึง {0}
add = เพิ่ม...
guardian = การ์เดียน
guardian = ผู้พิทักษ์
connectfail = [crimson]การเชื่อมต่อผิดพลาด:\n\n[accent]{0}
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
@ -652,6 +653,7 @@ status.overclock.name = โอเวอร์คล็อก
status.shocked.name = ช็อก
status.blasted.name = ระเบิด
status.unmoving.name = หยุดนิ่ง
status.boss.name = ผู้พิทักษ์
settings.language = ภาษา
settings.data = ข้อมูลเกม
@ -776,7 +778,7 @@ bar.corereq = ต้องวางบนแกนกลาง
bar.drillspeed = ความเร็วการขุด: {0}/วิ
bar.pumpspeed = ความเร็วการปั้ม: {0}/วิ
bar.efficiency = ประสิทธิภาพ: {0}%
bar.boost = เปอร์เซ็นการเร่ง: {0}%
bar.boost = เปอร์เซ็นการเร่ง: +{0}%
bar.powerbalance = พลังงาน: {0}/วิ
bar.powerstored = เก็บแล้ว: {0}/{1}
bar.poweramount = พลังงาน: {0}
@ -1379,7 +1381,7 @@ hint.payloadDrop = กด [accent]][] เพื่อปล่อยสิ่ง
hint.payloadDrop.mobile = [accent]กดค้างไว้[]ที่พื้นที่โล่งๆ เพื่อปล่อยสิ่งที่บรรทุกอยู่
hint.waveFire = ป้อมปืน[accent]คลื่นน้ำ[]หากเติมน้ำเข้าไปจะช่วยดับไฟรอบข้างให้อัตโนมัติ
hint.generator = \uf879 [accent]เครื่องกำเนิดไฟฟ้าเผาไหม้[]จะเผาถ่านและส่งพลังงานไปยังบล็อกที่อยู่ใกล้ๆ\n\nระยะของพลังงานสามารถขยายได้ด้วย \uf87f [accent]ตัวจ่ายพลังงาน[]
hint.guardian = หน่วย[accent]การ์เดียน[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[accent]ทองแดง[]และ[accent]ตะกั่ว[][scarlet]ไม่มีประสิทธิภาพ[]\n\nควรใช้ป้อมปืนที่ดีกว่านี้หรือใช้ \uf835 [accent]กราไฟท์[]ใส่ใน \uf861 ดูโอ/ \uf859 ซัลโวเป็นกระสุนเพื่อทำลายการ์เดียน
hint.guardian = หน่วย[accent]ผู้พิทักษ์[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[accent]ทองแดง[]และ[accent]ตะกั่ว[][scarlet]ไม่มีประสิทธิภาพ[]\n\nควรใช้ป้อมปืนที่ดีกว่านี้หรือใช้ \uf835 [accent]กราไฟท์[]ใส่ใน \uf861 ดูโอ/ \uf859 ซัลโวเป็นกระสุนเพื่อทำลายผู้พิทักษ์
hint.coreUpgrade = สามารถอัปเกรดแกนกลางได้โดย[accent]วางแกนกลางที่ใหญ่กว่าทับมัน[]\n\nวาง  [accent]แกนกลาง: ฟาวน์เดชั่น[]ทับ  [accent]แกนกลาง: ชาร์ด[] ต้องแน่ใจว่ารอบข้างมีที่ว่างก่อนจะวาง
hint.presetLaunch = [accent]เซ็กเตอร์ลงจอด[]สีเทา อย่างเช่น[accent]ป่าหนาวเหน็บ[] สามารถลงจอดจากที่ไหนที่ได้ในแผนที่ พวกนั้นไม่จำเป็นต้องยืดครองเซ็กเตอร์รอบข้างเพื่อส่งแกนกลางไป\n\n[accent]เซ็กเตอร์ที่มีเลข[] อย่างเช่นอันนี้[accent]ไม่จำเป็น[]ต้องยืดครอง
hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
@ -1603,7 +1605,7 @@ unit.mega.description = ซ่อมแซมสิ่งก่อสร้า
unit.quad.description = ทิ้งระเบิดขนาดใหญ่ลงบนเป้าหมายพื้นดิน ซ่อมแซมสิ่งก่อสร้างของพวกพ้องและสร้างความเสียหายแก่ศัตรู สามารถบรรทุกยูนิตพื้นดินขนาดกลางได้
unit.oct.description = ปกป้องพวกพ้องที่อยู่ใกล้เคียงด้วยโล่พลังงาน สามารถบรรทุกยูนิตภาคพื้นดินได้แทบทุกตัว
unit.risso.description = ยิงขีปนาวุธและสาดกระสุนจำนวนมากใส่ศัตรูใกล้เคียง
unit.minke.description = ยิงกระสุนหนักและกระสุนธรรมดาไปยังเป้าหมายพื้นดินที่อยู่ใกล้เคียง\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น
unit.minke.description = ยิงทั้งกระสุนหนักและกระสุนธรรมดาไปยังเป้าหมายพื้นดินที่อยู่ใกล้เคียง
unit.bryde.description = ยิงกระสุนปืนใหญ่พิสัยไกลและขีปนาวุธติดตามตัวใส่ศัตรู
unit.sei.description = ยิงขีปนาวุธติดตามตัวและกระสุนเจาะเกราะใส่ศัตรู
unit.omura.description = ยิงลำแสงปืนเรลกันเจาะทะลุระยะไกลใส่ศัตรู สร้างยูนิตแฟลร์
@ -1611,7 +1613,7 @@ unit.alpha.description = ปกป้องแกนกลางชาร์ด
unit.beta.description = ปกป้องแกนกลางฟาวน์เดชั่นจากศัตรู สร้างสิ่งต่างๆ
unit.gamma.description = ปกป้องแกนกลางนิวเคลียสจากศัตรู สร้างสิ่งต่างๆ
unit.retusa.description = วางทุ่นระเบิดระยะใกล้ และซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียง
unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด
unit.oxynoe.description = ยิงเปลวไฟเผาไหม้ใส่ศัตรูที่อยู่ใกล้เคียงและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nทำลายกระสุนที่กำลังเข้ามาด้วยปืนป้องกันจุด\nให้สถานะ[accent]โอเวอร์คล็อก[]แก่พวกพ้องรอบข้าง ทำให้ยิงเร็วและแรงขึ้น
unit.cyerce.description = ยิงขีปนาวุธพลาสม่าติดตามตัวเป็นกระจุกระเบิดใส่ศัตรู\nซ่อมแซมยูนิตพวกพ้องที่อยู่ใกล้เคียงด้วยปืนซ่อมแซม
unit.aegires.description = ช็อตทุกสิ่งก่อสร้างและยูนิตศัตรูที่เข้ามาในสนามพลังงานของมัน\nซ่อมแซมสิ่งก่อสร้างและยูนิตพวกพ้อง
unit.navanax.description = ยิงลูกระเบิดคลื่นชีพจรแม่เหล็กขนาดใหญ่ สร้างความเสียหายอย่างหนักให้กับเครือข่ายพลังงานศัตรู\nและซ่อมแซมสิ่งก่อสร้างของพวกพ้อง\nหลอมละลายศัตรูที่อยู่ใกล้เคียงด้วยป้อมปืนเลเซอร์อัตโนมัติสี่ป้อม
@ -1703,7 +1705,7 @@ lenum.any = ยูนิตอะไรก็ได้
lenum.ally = ยูนิตพวกพ้อง
lenum.attacker = ยูนิตติดอาวุธ
lenum.enemy = ยูนิตศัตรู
lenum.boss = ยูนิตการ์เดียน
lenum.boss = ยูนิตผู้พิทักษ์
lenum.flying = ยูนิตอากาศ
lenum.ground = ยูนิตพื้นดิน
lenum.player = ยูนิตที่ถูกควบคุมโดยผู้เล่น

View File

@ -1272,7 +1272,7 @@ block.oil-extractor.name = Petrol Çıkarıcı
block.repair-point.name = Tamir Noktası
block.repair-turret.name = Tamir Turreti
block.pulse-conduit.name = Dalga Borusu
block.plated-conduit.name = Kaplı Boru
block.plated-conduit.name = Yalıtımlı Boru
block.phase-conduit.name = Faz Borusu
block.liquid-router.name = Sıvı Yönlendiricisi
block.liquid-tank.name = Sıvı Tankı
@ -1438,6 +1438,8 @@ block.item-source.description = Seçilen eşyadan sonsuz verir. Sadece Yaratıc
block.item-void.description = Verilen eşyaları yok eder. Sadece Yaratıcı Modda.
block.liquid-source.description = Seçilen sıvıyı sonsuz verir. Sadece Yaratıcı Modda.
block.liquid-void.description = Verilen sıvıları yok eder. Sadece Yaratıcı Modda.
block.payload-source.description = Sınırsız bir şekilde Eleman ve Kargo oluşturur. Sadece Yaratıcı Modda.
block.payload-void.description = Tüm Yük ve Elemanları Yok Eder. Sadece Yaratıcı Modda.
block.copper-wall.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve silahları korumak için kullanışlıdır.
block.copper-wall-large.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve taretleri korumak için kullanışlıdır.\nBirçok blok alan kaplar.
block.titanium-wall.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar.

View File

@ -18,7 +18,7 @@ screenshot = Зняток мапи збережено до {0}
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
gameover = Гра завершена
gameover.disconnect = Від’єднатися
gameover.pvp = [accent]{0}[] команда перемогла!
gameover.pvp = [accent]{0}[] перемогли!
gameover.waiting = [accent]Очікуємо наступно мапу…
highscore = [accent]Новий рекорд!
copied = Скопійовано.
@ -98,6 +98,7 @@ customgame = Користувацька гра
newgame = Нова гра
none = <нічого>
none.found = [lightgray]<нічого не знайдено>
none.inmap = [lightgray]<нічого на мапі не знайдено>
minimap = Мінімапа
position = Місцезнаходження
close = Закрити
@ -208,6 +209,7 @@ server.refreshing = Оновлення сервера
hosts.none = [lightgray]Локальних ігор не знайдено
host.invalid = [scarlet]Не вдалося під’єднатися до сервера.
servers.local = Локальні сервери
servers.local.steam = Локальні сервери і сервери від гравців Steam
servers.remote = Віддалені сервери
servers.global = Глобальні сервери
@ -308,7 +310,7 @@ data.invalid = Це не дійсні ігрові дані.
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЯк тільки дані імпортуються, гра негайно закриється.
quit.confirm = Ви дійсно хочете вийти?
loading = [accent]Завантаження…
reloading = [accent]Перезавантаження модифікацій
downloading = [accent]Завантаження
saving = [accent]Збереження…
respawn = [accent][[{0}][], щоби відродитися в ядрі
cancelbuilding = [accent][[{0}][] для очищення плану
@ -337,8 +339,8 @@ builtin = Вбудована
map.delete.confirm = Ви дійсно хочете видалити цю мапу? Цю дію неможливо буде скасувати!
map.random = [accent]Випадкова мапа
map.nospawn = Ця мапа не має жодного ядра для появи гравця! Додайте [accent]помаранчеве[] ядро до цієї мапи в редакторі.
map.nospawn.pvp = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [scarlet]не помаранчеве[] ядро до цієї мапи в редакторі.
map.nospawn.attack = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [scarlet]червоне[] ядро до цієї мапи в редакторі.
map.nospawn.pvp = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [#{0}]{1}[] ядро до цієї мапи в редакторі.
map.nospawn.attack = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [#{0}]{1}[] ядро до цієї мапи в редакторі.
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
workshop.update = Оновити предмет
workshop.error = Помилка під час отримання інформації з Майстерні: {0}
@ -519,6 +521,7 @@ configure = Налаштувати вивантаження
loadout = Вивантаження
resources = Ресурси
bannedblocks = Заборонені блоки
bannedunits = Заборонені одиниці
addall = Додати все
launch.from = Запуск з [accent]{0}
launch.destination = Пункт призначення: {0}
@ -540,10 +543,13 @@ weather.snow.name = Сніг
weather.sandstorm.name = Піщана буря
weather.sporestorm.name = Спорова буря
weather.fog.name = Туман
sectorlist = Сектори
sectorlist.attacked = {0} під атакою
sectors.unexplored = [lightgray]Не досліджено
sectors.resources = Ресурси:
sectors.production = Виробництво:
sectors.export = Експортування:
sectors.import = Імпортування:
sectors.time = Час:
sectors.threat = Загроза:
sectors.wave = Хвиля:
@ -696,7 +702,7 @@ stat.maxconsecutive = Максимальна послідовність
stat.buildcost = Вартість будування
stat.inaccuracy = Розкид
stat.shots = Постріли
stat.reload = Постріли за сек.
stat.reload = Скорострільність
stat.ammo = Боєприпаси
stat.shieldhealth = Міцність щита
stat.cooldowntime = Тривалість охолодження
@ -740,7 +746,7 @@ bar.corereq = Необхідне основне ядро
bar.drillspeed = Швидкість буріння: {0} за с.
bar.pumpspeed = Швидкість викачування: {0} за с.
bar.efficiency = Ефективність: {0}%
bar.boost = Підсилення: {0}%
bar.boost = Підсилення: +{0}%
bar.powerbalance = Енергія: {0} за с.
bar.powerstored = Зберігає: {0}/{1}
bar.poweramount = Енергія: {0}
@ -761,7 +767,7 @@ bullet.damage = [stat]{0}[lightgray] шкода
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток
bullet.incendiary = [stat]запальний
bullet.homing = [stat]самонаведення
bullet.frag = [stat]шкода по ділянці
bullet.frags = [stat]{0}[lightgray]x шкода по ділянці від снарядів:
bullet.lightning = [stat]{0}[lightgray]x блискавки ~ [stat]{1}[lightgray] шкоди
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
bullet.knockback = [stat]{0}[lightgray] відкидання
@ -799,19 +805,19 @@ category.items = Предмети
category.crafting = Виробництво
category.function = Стрільба
category.optional = Додаткові поліпшення
setting.skipcoreanimation.name = Пропустити запуск ядра та анімацію приземлення
setting.landscape.name = Тільки альбомний (горизонтальний) режим
setting.shadows.name = Тіні
setting.blockreplace.name = Пропонування щодо автоматичної заміни блоків
setting.linear.name = Лінійна фільтрація
setting.hints.name = Підказки
setting.flow.name = Показувати темп швидкості ресурсів
setting.logichints.name = Підказки при роботі з логікою
setting.backgroundpause.name = Пауза в разі згортанні
setting.buildautopause.name = Автоматичне призупинення будування
setting.doubletapmine.name = Подвійне торкання для початку видобування
setting.modcrashdisable.name = Вимикати модифікації після аварійного запуску
setting.animatedwater.name = Анімаційні рідини
setting.animatedshields.name = Анімаційні щити
setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[]
setting.playerindicators.name = Позначки гравців
setting.indicators.name = Позначки противників
setting.autotarget.name = Автострільба
@ -820,7 +826,8 @@ setting.touchscreen.name = Керування сенсорним екраном
setting.fpscap.name = Максимальний FPS
setting.fpscap.none = Жодне
setting.fpscap.text = {0} FPS
setting.uiscale.name = Масштабування користувацького інтерфейсу[lightgray] (потребує перезапуску)[]
setting.uiscale.name = Масштабування користувацького інтерфейсу
setting.uiscale.description = Потрібен перезапуск для застосування змін.
setting.swapdiagonal.name = Завжди діагональне розміщення
setting.difficulty.training = Навчання
setting.difficulty.easy = Легка
@ -838,7 +845,9 @@ setting.saveinterval.name = Інтервал збереження
setting.seconds = {0} секунд
setting.milliseconds = {0} мілісекунд
setting.fullscreen.name = Повноекранний режим
setting.borderlesswindow.name = Вікно без полів[lightgray] (може потребувати перезапуску)
setting.borderlesswindow.name = Вікно без полів
setting.borderlesswindow.name.windows = Повний екран без полів
setting.borderlesswindow.description = Можливо, потрібен перезапуск для застосування змін.
setting.fps.name = Показувати FPS і затримку до сервера
setting.smoothcamera.name = Гладка камера
setting.vsync.name = Вертикальна синхронізація
@ -859,6 +868,7 @@ setting.playerlimit.name = Обмеження гравців
setting.chatopacity.name = Непрозорість чату
setting.lasersopacity.name = Непрозорість лазерів енергопостачання
setting.bridgeopacity.name = Непрозорість мостів
setting.showweather.name = Показувати погоду
setting.playerchat.name = Показувати хмару чата над гравцями
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри.
public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного серверу[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]?
@ -958,6 +968,8 @@ rules.wavetimer = Таймер для хвиль
rules.waves = Хвилі
rules.attack = Режим атаки
rules.buildai = Будування ШІ
rules.aitier = Рівень складності будівель ШІ [0;1]
rules.cleanupdeadteams = Очистити будівлі переможеної команди (PvP)
rules.corecapture = Захоплення ядра після знищення
rules.polygoncoreprotection = Полігональний захист ядер
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
@ -977,12 +989,15 @@ rules.deconstructrefundmultiplier = Множник відшкодування в
rules.waitForWaveToEnd = Хвилі чекають на завершення попередньої
rules.dropzoneradius = Радіус зони висадки:[lightgray] (у плитках)
rules.unitammo = Бойові одиниці потребують боєприпасів
rules.enemyteam = Ворожа команда
rules.playerteam = Команда гравця
rules.title.waves = Хвилі
rules.title.resourcesbuilding = Ресурси й будування
rules.title.enemy = Противники
rules.title.unit = Бойові одиниці
rules.title.experimental = Експериментальне
rules.title.environment = Середовище
rules.title.teams = Команди
rules.lighting = Світлотінь
rules.enemyLights = Ворожі вогні
rules.fire = Вогонь
@ -1055,7 +1070,6 @@ unit.scepter.name = Верховна влада
unit.reign.name = Верховний Порядок
unit.vela.name = Пульсар Вітрил
unit.corvus.name = Ґава
block.resupply-point.name = Пункт постачання
block.parallax.name = Паралакс
block.cliff.name = Скеля
block.sand-boulder.name = Пісочний валун
@ -1247,7 +1261,6 @@ block.meltdown.name = Розплавлювач
block.foreshadow.name = Передвісник
block.container.name = Сховище
block.launch-pad.name = Пусковий майданчик
block.launch-pad-large.name = Великий пусковий майданчик
block.segment.name = Сегмент
block.command-center.name = Командний центр
block.ground-factory.name = Наземний завод
@ -1268,10 +1281,10 @@ block.payload-source.name = Вантажне джерело
block.disassembler.name = Розбирач
block.silicon-crucible.name = Кремнієвий тигель
block.overdrive-dome.name = Великий прискорювач
block.interplanetary-accelerator.name = Міжпланетний прискорювач
block.block-forge.name = Блок-кузня
block.block-loader.name = Блок-завантажувач
block.block-unloader.name = Блок-вивантажувач
block.interplanetary-accelerator.name = Міжпланетний прискорювач
block.switch.name = Перемикач
block.micro-processor.name = Мікропроцесор
block.logic-processor.name = Логічний процесор
@ -1280,13 +1293,13 @@ block.logic-display.name = Логічний дисплей
block.large-logic-display.name = Великий логічний дисплей
block.memory-cell.name = Комірка пам’яті
block.memory-bank.name = Блок пам’яті
team.blue.name = Синя
team.blue.name = Сині
team.crux.name = Загарбники
team.sharded.name = Розколоті
team.orange.name = Помаранчева
team.derelict.name = Знедолена
team.green.name = Зелена
team.purple.name = Фіолетова
team.orange.name = Помаранчеві
team.derelict.name = Переможені
team.green.name = Зелені
team.purple.name = Фіолетові
hint.skip = Пропустити
hint.desktopMove = Використовуйте [accent][[WASD][], щоби рухатися.
hint.zoom = [accent]Прокручуйте коліщатком миші[], щоби збільшити чи зменшити масштаб мапи.
@ -1305,6 +1318,7 @@ hhint.breaking = Натисніть [accent]ПКМ[] і тягніть, щоби
hint.breaking.mobile = Активуйте  [accent]молот[] внизу праворуч і торкніться блоків, щоби їх розібрати.\n\nУтримуйте палець протягом секунди і протягніть, щоби розібрати виділене.
hint.blockInfo = Подивіться інформацію про блок. Перейдіть до [accent]меню будівництва[] і натисніть на кнопку [accent][[?][] правпоруч
hint.research = Використовуйте кнопку  [accent]Дослідження[] для дослідження нової технології.
hint.derelict = Будівлі [accent]Переможених[] є зламаними залишками старих баз, які більше не функціонують.\n\nЇх можна [accent]деконструювати[] для отримання ресурсів.
hint.research.mobile = Використовуйте  [accent]Дослідження[] в  [accent]меню[] для дослідження нової технології.
hint.unitControl = Утримуйте [accent][[лівий Ctrl][] і [accent]натисніть[] на одиницю чи башту, щоби контролювати її.
hint.unitControl.mobile = [accent][Торкніться двічі[], щоби контролювати союзні одиниці чи башти.
@ -1338,7 +1352,7 @@ item.coal.description = Використовується для виробниц
item.coal.details = Виглядає скам’янілою рослинною речовиною, утвореною задовго до Сівби.
item.titanium.description = Використовується в транспортуванні будівль, бурів та в заводах.
item.thorium.description = Використовується в міцних конструкціях і як ядерне паливо.
item.scrap.description = Використовується в Плавильнях і Подрібнювачах для перероблення в інші матеріали в інші матеріали.
item.scrap.description = Використовується в Плавильнях і Подрібнювачах для перероблення в інші матеріали.
item.scrap.details = Залишки старих споруд та підрозділів.
item.silicon.description = Використовується в сонячних панелях, складній електроніці та боєприпасах самонаведення для башт.
item.plastanium.description = Використовується в передових одиницях та у фрагментованих боєприпасах.
@ -1352,7 +1366,7 @@ liquid.water.description = Використовується для охолод
liquid.slag.description = Переробляється у відокремлювачах у складові метали або розпорошується на ворогів як зброя.
liquid.oil.description = Використовується у виробництві передових матеріалів і як запальні боєприпаси.
liquid.cryofluid.description = Використовується як теплоносій у реакторах, баштах і заводах.
block.resupply-point.description = Поповнює найближчі одиниці мідними боєприпасами. Несумісний з одиницями, що потребують заряду акумулятора.
block.derelict =  [lightgray]Переможені
block.armored-conveyor.description = Переміщує предмети вперед. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок.
block.illuminator.description = Випромінює світло.
block.message.description = Зберігає повідомлення для комунікації між союзниками.
@ -1496,6 +1510,8 @@ block.memory-bank.description = Зберігає інформацію для л
block.logic-display.description = Показує довільну графіку з логічного процесора.
block.large-logic-display.description = Показує довільну графіку з логічного процесора.
block.interplanetary-accelerator.description = Велика електромагнітна башта-рейкотрон. Прискорює ядра, щоби подолати планетне тяжіння для міжпланетного розгортання.
block.repair-turret.description = Безпервно ремонтує найближчу пошкоджену одиницю. Для прискорення ремонтування можна охолодити.
block.payload-propulsion-tower.description = Структура транспортування вантажу на великі відстані. Вистрілює вантаж в інші вантажні катапульти.
unit.dagger.description = Вистрілює стандартними кулями в найближчих ворогах.
unit.mace.description = Вистрілює потоками полум’я в найближчих ворогів.
unit.fortress.description = Вистрілює з дальнобійної артилерії в наземних цілей.
@ -1529,6 +1545,12 @@ unit.omura.description = Вистрілює у ворогів далекобій
unit.alpha.description = Захищає ядро «Уламок» від противників. Будує споруди.
unit.beta.description = Захищає ядро «Штаб» від противників. Будує споруди.
unit.gamma.description = Захищає ядро «Атом» від противників. Будує споруди.
unit.retusa.description = Розміщує міни. Ремонтує найближчі одиниці.
unit.oxynoe.description = Вистрілює потоками полум'я, яке ремонтує споруди та наносить шкоду ворогам. Захищає від ворожик снарядів за допомогою башти точкової оборони.
unit.cyerce.description = Вистрілює у ворогів навідними касетними ракетами. Ремонтує найближчі одиниці.
unit.aegires.description = Приголомшлює ворожі одиниці та будівлі, що входять до його енергетичного поля. Ремонтує всіх союзників.
unit.navanax.description = Вистрілює вибухонебезпечні снаряди електромагнітного імпульсу, завдаючи значної шкоди ворожим енергетичним мережам та ремонтуючи союзницькі споруди. Розплавляє сусідніх ворогів за допомогою 4 автономних лазерних веж.
lst.read = Зчитує число із з’єднаної комірки пам’яті.
lst.write = Записує числу у з’єднану комірки пам’яті.

View File

@ -770,7 +770,7 @@ bar.corereq = Yêu cầu căn cứ
bar.drillspeed = Tốc độ khoan: {0}/giây
bar.pumpspeed = Tốc độ bơm: {0}/giây
bar.efficiency = Hiệu suất: {0}%
bar.boost = Tăng tốc: {0}%
bar.boost = Tăng tốc: +{0}%
bar.powerbalance = Năng lượng: {0}/giây
bar.powerstored = Lưu trữ: {0}/{1}
bar.poweramount = Năng lượng: {0}

View File

@ -772,7 +772,7 @@ bar.corereq = 缺失核心基座
bar.drillspeed = 挖掘速度:{0}/秒
bar.pumpspeed = 泵压速度:{0}/秒
bar.efficiency = 效率:{0}%
bar.boost = 超速:{0}%
bar.boost = 超速:+{0}%
bar.powerbalance = 能量:{0}/秒
bar.powerstored = 储能:{0}/{1}
bar.poweramount = 能量:{0}

View File

@ -774,7 +774,7 @@ bar.corereq = 需由核心升級
bar.drillspeed = 鑽頭速度:{0}/秒
bar.pumpspeed = 液體泵送速度:{0}/秒
bar.efficiency = 效率:{0}%
bar.boost = 速度加成:{0}%
bar.boost = 速度加成:+{0}%
bar.powerbalance = 能量變化:{0}
bar.powerstored = 能量存量:{0}/{1}
bar.poweramount = 能量:{0}

View File

@ -89,7 +89,7 @@ public class BaseAI{
calculating = false;
}
}else{
var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore);
var field = pathfinder.getField(data.team, Pathfinder.costGround, Pathfinder.fieldCore);
if(field.weights != null){
int[][] weights = field.weights;
@ -120,7 +120,7 @@ public class BaseAI{
}
//found the end.
if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){
if(calcTile.build instanceof CoreBuild b && b.team != data.team){
//clean up calculations and flush results
calculating = false;
calcCount = 0;

View File

@ -1342,12 +1342,14 @@ public class Blocks implements ContentList{
battery = new Battery("battery"){{
requirements(Category.power, with(Items.copper, 5, Items.lead, 20));
consumes.powerBuffered(4000f);
baseExplosiveness = 1f;
}};
batteryLarge = new Battery("battery-large"){{
requirements(Category.power, with(Items.titanium, 20, Items.lead, 40, Items.silicon, 20));
size = 3;
consumes.powerBuffered(50000f);
baseExplosiveness = 5f;
}};
combustionGenerator = new BurnerGenerator("combustion-generator"){{
@ -2091,7 +2093,7 @@ public class Blocks implements ContentList{
requirements(Category.units, with(Items.copper, 50, Items.lead, 120, Items.silicon, 80));
plans = Seq.with(
new UnitPlan(UnitTypes.dagger, 60f * 15, with(Items.silicon, 10, Items.lead, 10)),
new UnitPlan(UnitTypes.crawler, 60f * 12, with(Items.silicon, 10, Items.coal, 20)),
new UnitPlan(UnitTypes.crawler, 60f * 10, with(Items.silicon, 8, Items.coal, 10)),
new UnitPlan(UnitTypes.nova, 60f * 40, with(Items.silicon, 30, Items.lead, 20, Items.titanium, 20))
);
size = 3;

View File

@ -158,7 +158,7 @@ public class UnitTypes implements ContentList{
}};
scepter = new UnitType("scepter"){{
speed = 0.35f;
speed = 0.36f;
hitSize = 22f;
rotateSpeed = 2.1f;
health = 9000;
@ -186,7 +186,7 @@ public class UnitTypes implements ContentList{
inaccuracy = 3f;
shotDelay = 4f;
bullet = new BasicBulletType(7f, 45){{
bullet = new BasicBulletType(7f, 50){{
width = 11f;
height = 20f;
lifetime = 25f;
@ -195,7 +195,7 @@ public class UnitTypes implements ContentList{
lightningLength = 6;
lightningColor = Pal.surge;
//standard bullet damage is far too much for lightning
lightningDamage = 19;
lightningDamage = 20;
}};
}},
@ -244,7 +244,7 @@ public class UnitTypes implements ContentList{
ejectEffect = Fx.casing4;
shootSound = Sounds.bang;
bullet = new BasicBulletType(13f, 65){{
bullet = new BasicBulletType(13f, 70){{
pierce = true;
pierceCap = 10;
width = 14f;
@ -419,7 +419,7 @@ public class UnitTypes implements ContentList{
vela = new UnitType("vela"){{
hitSize = 24f;
rotateSpeed = 1.7f;
rotateSpeed = 1.8f;
mechFrontSway = 1f;
buildSpeed = 3f;
@ -429,7 +429,7 @@ public class UnitTypes implements ContentList{
drownTimeMultiplier = 4f;
speed = 0.44f;
boostMultiplier = 2.2f;
boostMultiplier = 2.4f;
engineOffset = 12f;
engineSize = 6f;
lowAltitude = true;
@ -442,6 +442,7 @@ public class UnitTypes implements ContentList{
immunities = ObjectSet.with(StatusEffects.burning);
commandLimit = 8;
singleTarget = true;
weapons.add(new Weapon("vela-weapon"){{
mirror = false;
@ -485,6 +486,18 @@ public class UnitTypes implements ContentList{
shootStatus = StatusEffects.slow;
shootStatusDuration = bullet.lifetime + firstShotDelay;
}});
weapons.add(new RepairBeamWeapon("repair-beam-weapon-center-large"){{
x = 44 / 4f;
y = -30f / 4f;
shootY = 6f;
beamWidth = 0.8f;
repairSpeed = 1.4f;
bullet = new BulletType(){{
maxRange = 120f;
}};
}});
}};
corvus = new UnitType("corvus"){{
@ -1059,7 +1072,7 @@ public class UnitTypes implements ContentList{
rotateSpeed = 1.9f;
flying = true;
lowAltitude = true;
health = 7000;
health = 7200;
armor = 9f;
engineOffset = 21;
engineSize = 5.3f;
@ -1067,13 +1080,13 @@ public class UnitTypes implements ContentList{
targetFlags = new BlockFlag[]{BlockFlag.generator, BlockFlag.core, null};
ammoType = new ItemAmmoType(Items.thorium);
BulletType missiles = new MissileBulletType(2.7f, 14){{
BulletType missiles = new MissileBulletType(2.7f, 18){{
width = 8f;
height = 8f;
shrinkY = 0f;
drag = -0.01f;
splashDamageRadius = 20f;
splashDamage = 34f;
splashDamage = 37f;
ammoMultiplier = 4f;
lifetime = 50f;
hitEffect = Fx.blastExplosion;
@ -1128,13 +1141,13 @@ public class UnitTypes implements ContentList{
}};
eclipse = new UnitType("eclipse"){{
speed = 0.52f;
speed = 0.54f;
accel = 0.04f;
drag = 0.04f;
rotateSpeed = 1f;
flying = true;
lowAltitude = true;
health = 21000;
health = 22000;
engineOffset = 38;
engineSize = 7.3f;
hitSize = 58f;
@ -1143,10 +1156,10 @@ public class UnitTypes implements ContentList{
targetFlags = new BlockFlag[]{BlockFlag.reactor, BlockFlag.battery, BlockFlag.core, null};
ammoType = new ItemAmmoType(Items.thorium);
BulletType fragBullet = new FlakBulletType(4f, 5){{
BulletType fragBullet = new FlakBulletType(4f, 15){{
shootEffect = Fx.shootBig;
ammoMultiplier = 4f;
splashDamage = 60f;
splashDamage = 65f;
splashDamageRadius = 25f;
collidesGround = true;
lifetime = 47f;
@ -1169,7 +1182,7 @@ public class UnitTypes implements ContentList{
rotate = true;
bullet = new LaserBulletType(){{
damage = 110f;
damage = 115f;
sideAngle = 20f;
sideWidth = 1.5f;
sideLength = 80f;
@ -1338,7 +1351,7 @@ public class UnitTypes implements ContentList{
quad = new UnitType("quad"){{
armor = 8f;
health = 6000;
speed = 1.3f;
speed = 1.2f;
rotateSpeed = 2f;
accel = 0.05f;
drag = 0.017f;
@ -1447,7 +1460,7 @@ public class UnitTypes implements ContentList{
armor = 2f;
weapons.add(new Weapon("mount-weapon"){{
reload = 12f;
reload = 13f;
x = 4f;
shootY = 4f;
y = 1.5f;
@ -1458,7 +1471,7 @@ public class UnitTypes implements ContentList{
weapons.add(new Weapon("missiles-mount"){{
mirror = false;
reload = 23f;
reload = 25f;
x = 0f;
y = -5f;
rotate = true;
@ -1570,15 +1583,14 @@ public class UnitTypes implements ContentList{
ejectEffect = Fx.casing3;
shootSound = Sounds.artillery;
bullet = new ArtilleryBulletType(3.2f, 12){{
bullet = new ArtilleryBulletType(3.2f, 15){{
trailMult = 0.8f;
hitEffect = Fx.massiveExplosion;
knockback = 1.5f;
lifetime = 80f;
lifetime = 84f;
height = 15.5f;
width = 15f;
collidesTiles = false;
ammoMultiplier = 4f;
splashDamageRadius = 40f;
splashDamage = 70f;
backColor = Pal.missileYellowBack;

View File

@ -164,14 +164,14 @@ public class NetClient implements ApplicationListener{
public static void sound(Sound sound, float volume, float pitch, float pan){
if(sound == null) return;
sound.play(volume * Core.settings.getInt("sfxvol") / 100f, pitch, pan);
sound.play(Mathf.clamp(volume, 0, 4f) * Core.settings.getInt("sfxvol") / 100f, pitch, pan);
}
@Remote(variants = Variant.both, unreliable = true)
public static void soundAt(Sound sound, float x, float y, float volume, float pitch){
if(sound == null) return;
sound.at(x, y, pitch, volume);
sound.at(x, y, pitch, Mathf.clamp(volume, 0, 4f));
}
@Remote(variants = Variant.both, unreliable = true)

View File

@ -896,7 +896,7 @@ public class NetServer implements ApplicationListener{
}
String fixName(String name){
name = name.trim();
name = name.trim().replace("\n", "").replace("\t", "");
if(name.equals("[") || name.equals("]")){
return "";
}

View File

@ -1,6 +1,7 @@
package mindustry.editor;
import arc.*;
import arc.graphics.*;
import arc.math.*;
import arc.scene.event.*;
import arc.scene.ui.*;
@ -14,6 +15,7 @@ import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.io.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.ui.dialogs.*;
import static mindustry.Vars.*;
@ -22,6 +24,7 @@ import static mindustry.game.SpawnGroup.*;
public class WaveInfoDialog extends BaseDialog{
private int displayed = 20;
Seq<SpawnGroup> groups = new Seq<>();
private SpawnGroup expandedGroup;
private Table table;
private int start = 0;
@ -67,6 +70,12 @@ public class WaveInfoDialog extends BaseDialog{
buildGroups();
dialog.hide();
}));
dialog.cont.row();
dialog.cont.button("@clear", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
groups.clear();
buildGroups();
dialog.hide();
}));
dialog.show();
}).size(270f, 64f);
@ -132,7 +141,10 @@ public class WaveInfoDialog extends BaseDialog{
main.row();
main.button("@add", () -> {
if(groups == null) groups = new Seq<>();
groups.add(new SpawnGroup(lastType));
SpawnGroup newGroup = new SpawnGroup(lastType);
groups.add(newGroup);
expandedGroup = newGroup;
showUpdate(newGroup);
buildGroups();
}).growX().height(70f);
}), new Label("@waves.none"){{
@ -153,6 +165,7 @@ public class WaveInfoDialog extends BaseDialog{
table.margin(10f);
if(groups != null){
groups.sort(g -> g.begin);
for(SpawnGroup group : groups){
table.table(Tex.button, t -> {
@ -164,92 +177,100 @@ public class WaveInfoDialog extends BaseDialog{
b.add().growX();
b.button(Icon.cancel, () -> {
b.label(() -> (group.begin + 1) + "").color(Color.lightGray).minWidth(45f).labelAlign(Align.left).left();
b.button(Icon.unitsSmall, Styles.emptyi, () -> showUpdate(group)).pad(-6).size(46f);
b.button(Icon.cancel, Styles.emptyi, () -> {
groups.remove(group);
table.getCell(t).pad(0f);
t.remove();
updateWaves();
}).pad(-6).size(46f).padRight(-12f);
}, () -> showUpdate(group)).height(46f).pad(-6f).padBottom(0f).row();
}, () -> {
expandedGroup = expandedGroup == group ? null : group;
buildGroups();
}).height(46f).pad(-6f).padBottom(0f).row();
t.table(spawns -> {
spawns.field("" + (group.begin + 1), TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.begin = Strings.parseInt(text) - 1;
updateWaves();
}
}).width(100f);
spawns.add("@waves.to").padLeft(4).padRight(4);
spawns.field(group.end == never ? "" : (group.end + 1) + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.end = Strings.parseInt(text) - 1;
updateWaves();
}else if(text.isEmpty()){
group.end = never;
updateWaves();
}
}).width(100f).get().setMessageText("");
}).row();
if(expandedGroup == group){
t.table(spawns -> {
spawns.field("" + (group.begin + 1), TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.begin = Strings.parseInt(text) - 1;
updateWaves();
}
}).width(100f);
spawns.add("@waves.to").padLeft(4).padRight(4);
spawns.field(group.end == never ? "" : (group.end + 1) + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.end = Strings.parseInt(text) - 1;
updateWaves();
}else if(text.isEmpty()){
group.end = never;
updateWaves();
}
}).width(100f).get().setMessageText("");
}).row();
t.table(p -> {
p.add("@waves.every").padRight(4);
p.field(group.spacing + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text) && Strings.parseInt(text) > 0){
group.spacing = Strings.parseInt(text);
updateWaves();
}
}).width(100f);
p.add("@waves.waves").padLeft(4);
}).row();
t.table(p -> {
p.add("@waves.every").padRight(4);
p.field(group.spacing + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text) && Strings.parseInt(text) > 0){
group.spacing = Strings.parseInt(text);
updateWaves();
}
}).width(100f);
p.add("@waves.waves").padLeft(4);
}).row();
t.table(a -> {
a.field(group.unitAmount + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.unitAmount = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
t.table(a -> {
a.field(group.unitAmount + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.unitAmount = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
a.add(" + ");
a.field(Strings.fixed(Math.max((Mathf.zero(group.unitScaling) ? 0 : 1f / group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
if(Strings.canParsePositiveFloat(text)){
group.unitScaling = 1f / Strings.parseFloat(text);
updateWaves();
}
}).width(80f);
a.add("@waves.perspawn").padLeft(4);
}).row();
a.add(" + ");
a.field(Strings.fixed(Math.max((Mathf.zero(group.unitScaling) ? 0 : 1f / group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
if(Strings.canParsePositiveFloat(text)){
group.unitScaling = 1f / Strings.parseFloat(text);
updateWaves();
}
}).width(80f);
a.add("@waves.perspawn").padLeft(4);
}).row();
t.table(a -> {
a.field(group.max + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.max = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
t.table(a -> {
a.field(group.max + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.max = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
a.add("@waves.max").padLeft(5);
}).row();
a.add("@waves.max").padLeft(5);
}).row();
t.table(a -> {
a.field((int)group.shields + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.shields = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
t.table(a -> {
a.field((int)group.shields + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.shields = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
a.add(" + ");
a.field((int)group.shieldScaling + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.shieldScaling = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
a.add("@waves.shields").padLeft(4);
}).row();
a.add(" + ");
a.field((int)group.shieldScaling + "", TextFieldFilter.digitsOnly, text -> {
if(Strings.canParsePositiveInt(text)){
group.shieldScaling = Strings.parseInt(text);
updateWaves();
}
}).width(80f);
a.add("@waves.shields").padLeft(4);
}).row();
t.check("@waves.guardian", b -> group.effect = (b ? StatusEffects.boss : null)).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f);
t.check("@waves.guardian", b -> group.effect = (b ? StatusEffects.boss : null)).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f);
}
}).width(340f).pad(8);
table.row();
@ -281,6 +302,7 @@ public class WaveInfoDialog extends BaseDialog{
if(++i % 3 == 0) p.row();
}
});
dialog.addCloseButton();
dialog.show();
}

View File

@ -48,8 +48,8 @@ public class Damage{
public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, boolean damage, boolean fire, @Nullable Team ignoreTeam, Effect explosionFx){
if(damage){
for(int i = 0; i < Mathf.clamp(power / 700, 0, 8); i++){
int length = 5 + Mathf.clamp((int)(power / 500), 1, 20);
Time.run(i * 0.8f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3, x, y, Mathf.random(360f), length + Mathf.range(2)));
int length = 5 + Mathf.clamp((int)(Mathf.pow(power, 0.98f) / 500), 1, 18);
Time.run(i * 0.8f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3 + Mathf.pow(power, 0.35f), x, y, Mathf.random(360f), length + Mathf.range(2)));
}
if(fire){

View File

@ -4,14 +4,19 @@ import arc.*;
import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.math.*;
import arc.math.geom.*;
import arc.util.*;
import mindustry.entities.*;
import mindustry.graphics.*;
/** The most essential effect class. Can create particles in various shapes. */
public class ParticleEffect extends Effect{
private static final Rand rand = new Rand();
private static final Vec2 rv = new Vec2();
public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy();
public int particles = 6;
public boolean randLength = true;
public float cone = 180f, length = 20f, baseLength = 0f;
/** Particle size/length/radius interpolation. */
public Interp interp = Interp.linear;
@ -57,15 +62,25 @@ public class ParticleEffect extends Effect{
Lines.stroke(interp.apply(strokeFrom, strokeTo, rawfin));
float len = interp.apply(lenFrom, lenTo, rawfin);
Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> {
rand.setSeed(e.id);
for(int i = 0; i < particles; i++){
float l = length * fin + baseLength;
rv.trns(e.rotation + rand.range(cone), !randLength ? l : rand.random(l));
float x = rv.x, y = rv.y;
Lines.lineAngle(ox + x, oy + y, Mathf.angle(x, y), len);
Drawf.light(ox + x, oy + y, len * lightScl, lightColor, lightOpacity* Draw.getColor().a);
});
Drawf.light(ox + x, oy + y, len * lightScl, lightColor, lightOpacity * Draw.getColor().a);
}
}else{
Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> {
rand.setSeed(e.id);
for(int i = 0; i < particles; i++){
float l = length * fin + baseLength;
rv.trns(e.rotation + rand.range(cone), !randLength ? l : rand.random(l));
float x = rv.x, y = rv.y;
Draw.rect(tex, ox + x, oy + y, rad, rad, e.rotation + offset + e.time * spin);
Drawf.light(ox + x, oy + y, rad * lightScl, lightColor, lightOpacity * Draw.getColor().a);
});
}
}
}
}

View File

@ -1,10 +1,12 @@
package mindustry.ui.dialogs;
import arc.*;
import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import mindustry.ctype.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.meta.*;
@ -58,7 +60,6 @@ public class ContentInfoDialog extends BaseDialog{
if(map.size == 0) continue;
//TODO check
if(stats.useCategories){
table.add("@category." + cat.name()).color(Pal.accent).fillX();
table.row();
@ -80,7 +81,7 @@ public class ContentInfoDialog extends BaseDialog{
}
if(content.details != null){
table.add("[gray]" + content.details).pad(6).padTop(20).width(400f).wrap().fillX();
table.add("[gray]" + (content.unlocked() ? content.details : Iconc.lock + " " + Core.bundle.get("unlock.incampaign"))).pad(6).padTop(20).width(400f).wrap().fillX();
table.row();
}

View File

@ -176,7 +176,8 @@ public class ChatFragment extends Table{
String message = chatfield.getText().trim();
clearChatInput();
if(message.isEmpty()) return;
//avoid sending prefix-empty messages
if(message.isEmpty() || (message.startsWith(mode.prefix) && message.substring(mode.prefix.length()).isEmpty())) return;
history.insert(1, message);

View File

@ -163,12 +163,14 @@ public class MenuFragment extends Fragment{
new Buttoni("@customgame", Icon.terrain, () -> checkPlay(ui.custom::show)),
new Buttoni("@loadgame", Icon.download, () -> checkPlay(ui.load::show))
),
new Buttoni("@database.button", Icon.menu,
new Buttoni("@schematics", Icon.paste, ui.schematics::show),
new Buttoni("@database", Icon.book, ui.database::show),
new Buttoni("@about.button", Icon.info, ui.about::show)
),
new Buttoni("@editor", Icon.terrain, () -> checkPlay(ui.maps::show)), steam ? new Buttoni("@workshop", Icon.steam, platform::openWorkshop) : null,
new Buttoni("@mods", Icon.book, ui.mods::show),
//not enough space for this button
//new Buttoni("@schematics", Icon.paste, ui.schematics::show),
new Buttoni("@settings", Icon.settings, ui.settings::show),
new Buttoni("@about.button", Icon.info, ui.about::show),
new Buttoni("@quit", Icon.exit, Core.app::exit)
);

View File

@ -192,8 +192,10 @@ public class PlacementFragment extends Fragment{
}
if(Core.input.keyTap(Binding.block_info)){
Block displayBlock = menuHoverBlock != null ? menuHoverBlock : input.block;
if(displayBlock != null){
var build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
Block hovering = build == null ? null : build instanceof ConstructBuild c ? c.current : build.block;
Block displayBlock = menuHoverBlock != null ? menuHoverBlock : input.block != null ? input.block : hovering;
if(displayBlock != null && displayBlock.unlockedNow()){
ui.content.show(displayBlock);
Events.fire(new BlockInfoEvent());
}

View File

@ -405,7 +405,7 @@ public class Block extends UnlockableContent{
stats.add(Stat.health, health, StatUnit.none);
}
if(canBeBuilt()){
if(canBeBuilt() && requirements.length > 0){
stats.add(Stat.buildTime, buildCost / 60, StatUnit.seconds);
stats.add(Stat.buildCost, StatValues.items(false, requirements));
}

View File

@ -63,20 +63,20 @@ public class OverdriveProjector extends Block{
stats.timePeriod = useTime;
super.setStats();
stats.add(Stat.speedIncrease, (int)(100f * speedBoost), StatUnit.percent);
stats.add(Stat.speedIncrease, "+" + (int)(speedBoost * 100f - 100) + "%");
stats.add(Stat.range, range / tilesize, StatUnit.blocks);
stats.add(Stat.productionTime, useTime / 60f, StatUnit.seconds);
if(hasBoost){
stats.add(Stat.boostEffect, phaseRangeBoost / tilesize, StatUnit.blocks);
stats.add(Stat.boostEffect, (int)((speedBoost + speedBoostPhase) * 100f), StatUnit.percent);
stats.add(Stat.boostEffect, (range + phaseRangeBoost) / tilesize, StatUnit.blocks);
stats.add(Stat.boostEffect, "+" + (int)((speedBoost + speedBoostPhase) * 100f - 100) + "%");
}
}
@Override
public void setBars(){
super.setBars();
bars.add("boost", (OverdriveBuild entity) -> new Bar(() -> Core.bundle.format("bar.boost", (int)(entity.realBoost() * 100)), () -> Pal.accent, () -> entity.realBoost() / (hasBoost ? speedBoost + speedBoostPhase : speedBoost)));
bars.add("boost", (OverdriveBuild entity) -> new Bar(() -> Core.bundle.format("bar.boost", Math.max((int)(entity.realBoost() * 100 - 100), 0)), () -> Pal.accent, () -> entity.realBoost() / (hasBoost ? speedBoost + speedBoostPhase : speedBoost)));
}
public class OverdriveBuild extends Building implements Ranged{

View File

@ -1,19 +1,12 @@
package mindustry.world.blocks.production;
import arc.graphics.g2d.*;
import arc.math.*;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.meta.*;
public class Fracker extends SolidPump{
public float itemUseTime = 100f;
public @Load("@-liquid") TextureRegion liquidRegion;
public @Load("@-rotator") TextureRegion rotatorRegion;
public @Load("@-top") TextureRegion topRegion;
public Fracker(String name){
super(name);
hasItems = true;
@ -30,33 +23,9 @@ public class Fracker extends SolidPump{
stats.add(Stat.productionTime, itemUseTime / 60f, StatUnit.seconds);
}
@Override
public boolean outputsItems(){
return false;
}
@Override
public TextureRegion[] icons(){
return new TextureRegion[]{region, rotatorRegion, topRegion};
}
public class FrackerBuild extends SolidPumpBuild{
public float accumulator;
@Override
public void drawCracks(){}
@Override
public void draw(){
Draw.rect(region, x, y);
super.drawCracks();
Drawf.liquid(liquidRegion, x, y, liquids.get(result) / liquidCapacity, result.color);
Drawf.spinSprite(rotatorRegion, x, y, pumpTime);
Draw.rect(topRegion, x, y);
}
@Override
public void updateTile(){
if(consValid()){
@ -73,10 +42,5 @@ public class Fracker extends SolidPump{
dumpLiquid(result);
}
}
@Override
public float typeLiquid(){
return liquids.get(result);
}
}
}

View File

@ -70,6 +70,11 @@ public class SolidPump extends Pump{
return sum > 0.00001f;
}
@Override
public boolean outputsItems(){
return false;
}
@Override
protected boolean canPump(Tile tile){
return tile != null && !tile.floor().isLiquid;
@ -87,10 +92,16 @@ public class SolidPump extends Pump{
public float validTiles;
public float lastPump;
@Override
public void drawCracks(){}
@Override
public void draw(){
Draw.rect(region, x, y);
Drawf.liquid(liquidRegion, x, y, liquids.total() / liquidCapacity, liquids.current().color);
super.drawCracks();
Drawf.liquid(liquidRegion, x, y, liquids.get(result) / liquidCapacity, result.color);
Drawf.spinSprite(rotatorRegion, x, y, pumpTime * rotateSpeed);
Draw.rect(topRegion, x, y);
}
@ -135,7 +146,7 @@ public class SolidPump extends Pump{
}
public float typeLiquid(){
return liquids.total();
return liquids.get(result);
}
}
}

View File

@ -1,14 +1,48 @@
ベルトコンベアーを巧みに配置して、弾薬をタレットに送り込み、建設に必要な材料を集めて、敵からコアを守り切ろう。あなたのフレンドとクロスプラットフォームでマルチプレイして、お互いに協力したり、チームで戦ったりしよう
ベルトコンベアで緻密なサプライチェーンを作成し、弾薬をタレットに送り込んだり、建築する為の資材を生産したりして、敵の襲撃から建造物を守るゲームです。クロスプラットフォームのマルチプレイに対応していて、友達と協力して遊んだり、チームに分かれて PvP で戦う事もできます
Mindustryの特徴:
- 24個のマップ
- テックツリーや新しいエリアの解放を目指す
- 4つのパワフルなボス
- 電気、液体、アイテムの輸送システム
- 19個の個性的なドローンや機体
- 120以上のテクロジーブロックを使いこなす
- 75以上の異なる環境ブロック
- ローカルネットワークや専用サーバーで、クロスプラットフォームのマルチプレイが可能
- カスタマイズ可能なゲーム: ブロックのコスト変更、敵のステータス、初期アイテム、ウェーブのタイミング など…
- 強力なエディター、鉱石をランダムに生成したり、地形、デコレーション、左右対称なマップも制作可能
- マップごとにウェーブの構成もカスタマイズ可能
<h2>ゲームについて</h2>
- 工場を建て、多種多様な資源や製品を製造していきましょう。
- 敵の襲撃から建造物を守ってください。
- クロスプラットフォームでのマルチプレイに対応。友達と協力して遊んだり、もしくはチームに分かれて PvP で戦う事ができます。
- 液体を分配して火災や敵の空襲に立ち向かいましょう。
- 冷却水や潤滑剤を供給することで、生産効率を高める事ができます。
- 多種多様なユニットを生産し、自分の基地を自動管理させたり、敵基地を攻撃したりしましょう。
<h2>キャンペーンモード</h2>
- 250以上もの自動的に生成されたセクターや、16のマップで構成された惑星「セルプロ」を攻略しましょう。
- 領土を獲得し、工場を設立して資源を生成しながら他のセクターも同時に制圧していきましょう。
- 定期的に来る敵の侵略から自分のセクターを守り抜いて下さい。
- 発射台を使用して、各セクターに効率よく資源を配分していきましょう。
- 研究を進めてセクターを進化させていきましょう。
- 友達を呼んで一緒に攻略する事もできます。
- 130種類以上ものブロックを使いこなしていきましょう。
- 33種類ものドローン・ロボット・船が登場
- 50種類以上の実績をコンプリートしましょう
<h2>ゲームモード</h2>
- <b>サバイバル</b>: タワーディフェンス型のゲームで、タレットを建てて敵から守りましょう。できるだけ長く生き残るために、コアを起動して、集めた資源を研究に使いましょう。空を飛ぶボスからの攻撃に備えて、基地を準備しましょう。
- <b>アタック</b>: 工場を建設し敵のコアを破壊しましょう。同時に、敵襲から自分のコアも守りましょう。様々な種類の攻撃ユニットや支援ユニットがあなたをサポートしてくれます。防衛施設を建設する敵の AI オプションを有効にすれば更に難易度が上がります。
- <b>PvP</b>: 最大4チームで戦い、他のチームのコアを破壊する事を目指します。ユニットを製造するか、敵の基地をタレットで直接狙いましょう。
- <b>サンドボックス</b>: リソースは無限で襲撃する敵もいません。サンドボックス用のアイテムソース・液体ソースを利用してデザインを見たり、必要に応じて敵を召喚して防衛能力を確かめたりする事もできます。
<h2>カスタムゲーム &amp; クロスプラットフォームマルチプレイ</h2>
- キャンペーンモードに加え、カスタムゲーム用に 16 のマップを用意しています。
- 協力モードもよし、対戦もよし、サンドボックスもよし。
- 公開サーバーに参加したり、友達とプライベートセッションを楽しんだり。
- ゲームルールを変更する事もできます:建設コスト、敵のスタッツ、開始時のアイテム、ウェーブの間隔等…
- ミックスゲームモード: PvP と PvE を同時にやる事も…!?
<h2>マップエディター</h2>
- エディターを使って地形を作りましょう。
- ゲーム内で建築物を編集する事もできます。
- ツールモードを変更する事で様々なツールを使えます。
- 地形を自由に自動的に生成する為のマップ生成システムをご用意しています。
- ノイズ、歪み、スムージング、侵食、対称化、鉱石生成を駆使し、ランダムな地形を生成していきましょう。
- 鉱石や川の生成もランダムに行う事ができます。
- 敵のウェーブを設定する事も可能です。
- マップ別にルールを設定する事もできます。
- 地形用のブロックは80種類以上

View File

@ -0,0 +1 @@
工場ベースのサンドボックスタワーディフェンスゲーム。

View File

@ -0,0 +1,115 @@
"lang"
{
"Language" "japanese"
"Tokens"
{
"NEW_ACHIEVEMENT_20_1_NAME" "解体業者"
"NEW_ACHIEVEMENT_20_1_DESC" "敵ユニットを 1,000 体破壊する。"
"NEW_ACHIEVEMENT_20_2_NAME" "粛清"
"NEW_ACHIEVEMENT_20_2_DESC" "敵ユニットを 100,000 体破壊する。"
"NEW_ACHIEVEMENT_20_5_NAME" "エンドレス出荷"
"NEW_ACHIEVEMENT_20_5_DESC" "アイテムを合計で 100,000 個打ち上げる。"
"NEW_ACHIEVEMENT_20_6_NAME" "征服者"
"NEW_ACHIEVEMENT_20_6_DESC" "アタックモードで 10 回勝利する。"
"NEW_ACHIEVEMENT_20_7_NAME" "勝者"
"NEW_ACHIEVEMENT_20_7_DESC" "マルチプレイの PvP で 10 回勝利する。"
"NEW_ACHIEVEMENT_20_8_NAME" "電撃戦"
"NEW_ACHIEVEMENT_20_8_DESC" "アタックモードで 5 ウェーブ以内に敵のコアを破壊する。"
"NEW_ACHIEVEMENT_20_9_NAME" "コアの雨"
"NEW_ACHIEVEMENT_20_9_DESC" "コアを 30 回発射させる。"
"NEW_ACHIEVEMENT_20_10_NAME" "粘り強く"
"NEW_ACHIEVEMENT_20_10_DESC" "100 ウェーブ生存する。"
"NEW_ACHIEVEMENT_20_12_NAME" "研究者"
"NEW_ACHIEVEMENT_20_12_DESC" "あらゆる物を研究する。"
"NEW_ACHIEVEMENT_20_14_NAME" "過負荷"
"NEW_ACHIEVEMENT_20_14_DESC" "水に濡れた敵に電撃を浴びせる。"
"NEW_ACHIEVEMENT_20_15_NAME" "偏向"
"NEW_ACHIEVEMENT_20_15_DESC" "弾を反射させて敵を倒す。"
"NEW_ACHIEVEMENT_20_17_NAME" "大きな過ち"
"NEW_ACHIEVEMENT_20_17_DESC" "ルーターを研究する。"
"NEW_ACHIEVEMENT_20_18_NAME" "作る"
"NEW_ACHIEVEMENT_20_18_DESC" "ブロックを 10,000 個設置する。"
"NEW_ACHIEVEMENT_20_19_NAME" "消す"
"NEW_ACHIEVEMENT_20_19_DESC" "敵のブロックを 1,000 個破壊する。"
"NEW_ACHIEVEMENT_20_20_NAME" "災難"
"NEW_ACHIEVEMENT_20_20_DESC" "トリウムリアクターをオーバーヒートさせて爆発させる。"
"NEW_ACHIEVEMENT_20_21_NAME" "地図製作家"
"NEW_ACHIEVEMENT_20_21_DESC" "新しいマップを 10 個作る。"
"NEW_ACHIEVEMENT_20_22_NAME" "閲覧者"
"NEW_ACHIEVEMENT_20_22_DESC" "ワークショップからマップをダウンロードする。"
"NEW_ACHIEVEMENT_20_23_NAME" "クリエイター"
"NEW_ACHIEVEMENT_20_23_DESC" "ワークショップにマップを公開する。"
"NEW_ACHIEVEMENT_20_24_NAME" "スレイヤー"
"NEW_ACHIEVEMENT_20_24_DESC" "ボスを倒す。"
"NEW_ACHIEVEMENT_20_25_NAME" "探索家"
"NEW_ACHIEVEMENT_20_25_DESC" "キャンペーンモードで全ゾーンを開放する。"
"NEW_ACHIEVEMENT_20_29_NAME" "素材 II"
"NEW_ACHIEVEMENT_20_29_DESC" "トリウムを手に入れる。"
"NEW_ACHIEVEMENT_20_31_NAME" "素材 I"
"NEW_ACHIEVEMENT_20_31_DESC" "チタンを手に入れる。"
"NEW_ACHIEVEMENT_21_0_NAME" "神風特攻"
"NEW_ACHIEVEMENT_21_0_DESC" "爆発するアイテムを一杯に持った状態で機体を破壊される。"
"NEW_ACHIEVEMENT_21_1_NAME" "はじまり"
"NEW_ACHIEVEMENT_21_1_DESC" "陸軍工場を作る。"
"NEW_ACHIEVEMENT_21_2_NAME" "直接攻撃"
"NEW_ACHIEVEMENT_21_2_DESC" "司令塔を使って攻撃を命令する。"
"NEW_ACHIEVEMENT_21_3_NAME" "大群"
"NEW_ACHIEVEMENT_21_3_DESC" "ユニットを 100 体稼働させた状態にする。"
"NEW_ACHIEVEMENT_21_4_NAME" "群れる"
"NEW_ACHIEVEMENT_21_4_DESC" "ポリを 10 体稼働させた状態にする。"
"NEW_ACHIEVEMENT_21_5_NAME" "ロボット技術者"
"NEW_ACHIEVEMENT_21_5_DESC" "全種類のユニットを製造する。"
"NEW_ACHIEVEMENT_21_6_NAME" "軍団"
"NEW_ACHIEVEMENT_21_6_DESC" "累計でユニットを 1000 体製造する。"
"NEW_ACHIEVEMENT_21_9_NAME" "忠告は聞くべき"
"NEW_ACHIEVEMENT_21_9_DESC" "出現ポイントに入って殲滅される。"
"NEW_ACHIEVEMENT_21_10_NAME" "海軍ユニットを使ってみてはどう?"
"NEW_ACHIEVEMENT_21_10_DESC" "溺れる。"
"NEW_ACHIEVEMENT_21_11_NAME" "収集家"
"NEW_ACHIEVEMENT_21_11_DESC" "全種類のアイテムをコアの上限まで搬入する。"
"NEW_ACHIEVEMENT_21_12_NAME" "混雑"
"NEW_ACHIEVEMENT_21_12_DESC" "サーバーを立て、参加者数を10人にする。"
"NEW_ACHIEVEMENT_21_13_NAME" "難攻不落"
"NEW_ACHIEVEMENT_21_13_DESC" "メルトダウン、スペクター、フォーシャドウを建設する。"
"NEW_ACHIEVEMENT_21_14_NAME" "発射"
"NEW_ACHIEVEMENT_21_14_DESC" "発射台を使う。"
"NEW_ACHIEVEMENT_21_16_NAME" "異教"
"NEW_ACHIEVEMENT_21_16_DESC" "ルーターを 2 つ連続して設置する。"
"NEW_ACHIEVEMENT_21_17_NAME" "ソロ防衛"
"NEW_ACHIEVEMENT_21_17_DESC" "ブロックを一切置かずに 10 ウェーブ生存する。"
"NEW_ACHIEVEMENT_21_18_NAME" "火葬"
"NEW_ACHIEVEMENT_21_18_DESC" "ピラタイトをタレットに入れる。"
"NEW_ACHIEVEMENT_21_19_NAME" "効率"
"NEW_ACHIEVEMENT_21_19_DESC" "タレットを水か冷却水で冷却する。"
"NEW_ACHIEVEMENT_21_20_NAME" "クラシックモード"
"NEW_ACHIEVEMENT_21_20_DESC" "ピクセル化を有効にする。"
"NEW_ACHIEVEMENT_21_21_NAME" "学会"
"NEW_ACHIEVEMENT_21_21_DESC" "ゲーム内から Wiki を開く。"
"NEW_ACHIEVEMENT_21_22_NAME" "ヘッドスタート"
"NEW_ACHIEVEMENT_21_22_DESC" "アイテムを 10,000 個以上持って新しいゾーンに発射する。"
"NEW_ACHIEVEMENT_21_23_NAME" "点火"
"NEW_ACHIEVEMENT_21_23_DESC" "インパクトリアクターを起動する。"
"NEW_ACHIEVEMENT_21_24_NAME" "加速"
"NEW_ACHIEVEMENT_21_24_DESC" "惑星間加速器を起動する。"
"NEW_ACHIEVEMENT_21_25_NAME" "渦巻"
"NEW_ACHIEVEMENT_21_25_DESC" "まわるまわるよ世界は回る"
"NEW_ACHIEVEMENT_21_26_NAME" "エスカレーション"
"NEW_ACHIEVEMENT_21_26_DESC" "ティア 5 のユニットを製造する。"
"NEW_ACHIEVEMENT_21_27_NAME" "建築家"
"NEW_ACHIEVEMENT_21_27_DESC" "設計図を 20 個作る。"
"NEW_ACHIEVEMENT_21_28_NAME" "世界征服"
"NEW_ACHIEVEMENT_21_28_DESC" "セルプロの全セクターを制圧する。"
"NEW_ACHIEVEMENT_21_29_NAME" "空輸"
"NEW_ACHIEVEMENT_21_29_DESC" "ティア 5 のユニットをオクトで運ぶ。"
"NEW_ACHIEVEMENT_21_30_NAME" "究極の形"
"NEW_ACHIEVEMENT_21_30_DESC" "お前もそれにならないか?"
"NEW_ACHIEVEMENT_21_31_NAME" "生産 I"
"NEW_ACHIEVEMENT_21_31_DESC" "キャンペーンモードで生産速度が 5,000 アイテム/分 に到達する。"
"NEW_ACHIEVEMENT_26_0_NAME" "生産 II"
"NEW_ACHIEVEMENT_26_0_DESC" "キャンペーンモードで生産速度が 50,000 アイテム/分 に到達する。"
"NEW_ACHIEVEMENT_26_1_NAME" "確固たる勝利"
"NEW_ACHIEVEMENT_26_1_DESC" "セクターでプレイしている最中に他のセクターを制圧する。"
"NEW_ACHIEVEMENT_26_2_NAME" "小さな王様"
"NEW_ACHIEVEMENT_26_2_DESC" "10 セクターを支配下に置く。"
}
}

View File

@ -0,0 +1,64 @@
[img]{STEAM_APP_IMAGE}/extras/ezgif-4-0e70c282f775.gif[/img]
[h2]ゲームについて[/h2]
[list]
[*] ベルトコンベアで緻密なサプライチェーンを作成し、弾薬をタレットに送り込んだり、建築する為の資材を生産したりするゲームです。
[*] 敵の襲撃から建造物を守ってください。
[*] クロスプラットフォームでのマルチプレイに対応。友達と協力して遊んだり、もしくはチームに分かれて PvP で戦う事ができます。
[*] 液体を分配して火災や敵の空襲に立ち向かいましょう。
[*] 冷却水や潤滑剤を供給することで、生産効率を高める事ができます。
[*] 多種多様なユニットを生産し、自分の基地を自動管理させたり、敵基地を攻撃したりしましょう。
[/list]
[img]{STEAM_APP_IMAGE}/extras/ezgif-1-8679abe089cd.gif[/img]
[h2]キャンペーンモード[/h2]
[list]
[*] 250以上もの自動的に生成されたセクターや、16のマップで構成された惑星「セルプロ」を攻略しましょう。
[*] 領土を獲得し、工場を設立して資源を生成しながら他のセクターも同時に制圧していきましょう。
[*] 定期的に来る敵の侵略から自分のセクターを守り抜いて下さい。
[*] 発射台を使用して、各セクターに効率よく資源を配分していきましょう。
[*] 研究を進めてセクターを進化させていきましょう。
[*] 友達を呼んで一緒に攻略する事もできます。
[*] 130種類以上ものブロックを使いこなしていきましょう。
[*] 33種類ものドローン・ロボット・船が登場
[*] 50種類以上の実績をコンプリートしましょう
[/list]
[h2]ゲームモード[/h2]
[list]
[*] [b]サバイバル[/b]: タワーディフェンス型のゲームで、タレットを建てて敵から守りましょう。できるだけ長く生き残るために、コアを起動して、集めた資源を研究に使いましょう。空を飛ぶボスからの攻撃に備えて、基地を準備しましょう。
[*] [b]アタック[/b]: 工場を建設し敵のコアを破壊しましょう。同時に、敵襲から自分のコアも守りましょう。様々な種類の攻撃ユニットや支援ユニットがあなたをサポートしてくれます。防衛施設を建設する敵の AI オプションを有効にすれば更に難易度が上がります。
[*] [b]PvP[/b]: 最大4チームで戦い、他のチームのコアを破壊する事を目指します。ユニットを製造するか、敵の基地をタレットで直接狙いましょう。
[*] [b]サンドボックス[/b]: リソースは無限で襲撃する敵もいません。サンドボックス用のアイテムソース・液体ソースを利用してデザインを見たり、必要に応じて敵を召喚して防衛能力を確かめたりする事もできます。
[/list]
[img]{STEAM_APP_IMAGE}/extras/2020-11-30_10-46-02.gif[/img]
[h2]カスタムゲーム & クロスプラットフォームマルチプレイ[/h2]
[list]
[*] キャンペーンモードに加え、カスタムゲーム用に 16 のマップを用意しています。
[*] 協力モードもよし、対戦もよし、サンドボックスもよし。
[*] 公開サーバーに参加したり、友達とプライベートセッションを楽しんだり。
[*] ゲームルールを変更する事もできます:建設コスト、敵のスタッツ、開始時のアイテム、ウェーブの間隔等…
[*] ミックスゲームモード: PvP と PvE を同時にやる事も…!?
[/list]
[h2]マップエディター[/h2]
[list]
[*] エディターを使って地形を作りましょう。
[*] ゲーム内で建築物を編集する事もできます。
[*] ツールモードを変更する事で様々なツールを使えます。
[*] 地形を自由に自動的に生成する為のマップ生成システムをご用意しています。
[*] ノイズ、歪み、スムージング、侵食、対称化、鉱石生成を駆使し、ランダムな地形を生成していきましょう。
[*] 鉱石や川の生成もランダムに行う事ができます。
[*] 敵のウェーブを設定する事も可能です。
[*] 完成したマップは Steam Workshop で公開しましょう!
[*] マップ別にルールを設定する事もできます。
[*] 地形用のブロックは80種類以上
[/list]

View File

@ -11,4 +11,4 @@ android.useAndroidX=true
#used for slow jitpack builds; TODO see if this actually works
http.socketTimeout=80000
http.connectionTimeout=80000
archash=95a66af563dfad96ecc4992bd0ab36b07a14e28b
archash=7e96b986053ce489aae161aa6bcbb5d921c609d4

View File

@ -29,7 +29,7 @@
},
{
"name": "Ranked",
"address": ["mindustryranked.ddns.net:16567"]
"address": ["mindustryranked.ddns.net:16567", "mindustryranked.ddns.net:16568", "mindustryranked.ddns.net:16569"]
},
{
"name": "TWS",