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

 Conflicts:
	core/src/mindustry/ui/dialogs/PlanetDialog.java
This commit is contained in:
Anuken
2021-08-18 15:04:30 -04:00
86 changed files with 942 additions and 740 deletions

View File

@@ -38,7 +38,7 @@ Server builds are bundled with each released build (in Releases). If you'd rathe
### Android ### Android
1. Install the Android SDK [here.](https://developer.android.com/studio#downloads) Make sure you're downloading the "Command line tools only", as Android Studio is not required. 1. Install the Android SDK [here.](https://developer.android.com/studio#command-tools) Make sure you're downloading the "Command line tools only", as Android Studio is not required.
2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory. 2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory.
3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`. 3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`.

View File

@@ -57,7 +57,7 @@ allprojects{
if(!project.hasProperty("versionType")) versionType = 'official' if(!project.hasProperty("versionType")) versionType = 'official'
appName = 'Mindustry' appName = 'Mindustry'
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94' steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
rhinoVersion = '9f792d202471fb3789eab7bb261fec13d67287e2' rhinoVersion = '3c6bbadf73a904eefcc28b6fd8aa742ac575e878'
loadVersionProps = { loadVersionProps = {
return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p } return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

View File

@@ -652,6 +652,7 @@ status.overclock.name = Overclock
status.shocked.name = Shocked status.shocked.name = Shocked
status.blasted.name = Blasted status.blasted.name = Blasted
status.unmoving.name = Unmoving status.unmoving.name = Unmoving
status.boss.name = Guardian
settings.language = Language settings.language = Language
settings.data = Game Data settings.data = Game Data
@@ -1441,6 +1442,8 @@ block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items. Sandbox only. block.item-void.description = Destroys any items. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only. block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
block.liquid-void.description = Removes any liquids. Sandbox only. block.liquid-void.description = Removes any liquids. Sandbox only.
block.payload-source.description = Infinitely outputs payloads. Sandbox only.
block.payload-void.description = Destroys any payloads. Sandbox only.
block.copper-wall.description = Protects structures from enemy projectiles. block.copper-wall.description = Protects structures from enemy projectiles.
block.copper-wall-large.description = Protects structures from enemy projectiles. block.copper-wall-large.description = Protects structures from enemy projectiles.
block.titanium-wall.description = Protects structures from enemy projectiles. block.titanium-wall.description = Protects structures from enemy projectiles.

View File

@@ -101,6 +101,7 @@ customgame = Permainan Modifikasi
newgame = Permainan Baru newgame = Permainan Baru
none = <kosong> none = <kosong>
none.found = [lightgray]<tidak ditemukan> none.found = [lightgray]<tidak ditemukan>
none.inmap = [lightgray]<tidak ada di dalam peta>
minimap = Peta Kecil minimap = Peta Kecil
position = Posisi position = Posisi
close = Tutup close = Tutup
@@ -192,15 +193,15 @@ server.kicked.banned = Anda telah dilarang untuk memasuki server ini.
server.kicked.typeMismatch = Server ini tidak cocok dengan versi build Anda. server.kicked.typeMismatch = Server ini tidak cocok dengan versi build Anda.
server.kicked.playerLimit = Server ini penuh. Tunggu slot kosong. server.kicked.playerLimit = Server ini penuh. Tunggu slot kosong.
server.kicked.recentKick = Anda baru saja dikeluarkan dari server ini.\nTunggu sesaat sebelum masuk lagi. server.kicked.recentKick = Anda baru saja dikeluarkan dari server ini.\nTunggu sesaat sebelum masuk lagi.
server.kicked.nameInUse = Sudah ada pemain dengan nama tersebut \ndi server ini. server.kicked.nameInUse = Sudah ada pemain dengan nama tersebut\ndi server ini.
server.kicked.nameEmpty = Nama yang dipilih tidak valid. server.kicked.nameEmpty = Nama yang dipilih tidak valid.
server.kicked.idInUse = Anda telah berada di server ini! Memasuki dengan dua akun tidak diizinkan. server.kicked.idInUse = Anda telah berada di server ini! Memasuki dengan dua akun tidak diizinkan.
server.kicked.customClient = Server ini tidak mendukung versi modifikasi. Unduh versi resmi. server.kicked.customClient = Server ini tidak mendukung versi modifikasi. Unduh versi resmi.
server.kicked.gameover = Permainan telah berakhir! server.kicked.gameover = Permainan telah berakhir!
server.kicked.serverRestarting = Server sedang mengulang kembali. server.kicked.serverRestarting = Server sedang mengulang kembali.
server.versions = Versi Anda:[accent] {0}[]\nVersi server:[accent] {1}[] server.versions = Versi Anda:[accent] {0}[]\nVersi server:[accent] {1}[]
host.info = Tombol [accent]host[] akan membuat server sementara di port [scarlet]6567[]. \nSemua orang yang memiliki [lightgray]Wi-Fi atau jaringan lokal[] akan bisa melihat server anda di daftar server mereka.\n\nJika Anda ingin pemain dari mana saja memasuki servermu dengan IP, dibutuhkan untuk melakukan [accent]port forwarding[].\n\n[lightgray]Diingat: Jika seseorang mengalami masalah memasuki permainan lokalmu, pastikan Anda telah mengizinkan Mindustry akses ke jaringan lokalmu di pengaturan firewall. host.info = Tombol [accent]host[] akan membuat server sementara di port [scarlet]6567[]. \nSemua orang yang memiliki [lightgray]Wi-Fi atau jaringan lokal[] akan bisa melihat server Anda di daftar server mereka.\n\nJika Anda ingin pemain dari mana saja memasuki server Anda dengan IP, [accent]port forwarding[] sangat diperlukan.\n\n[lightgray]Catatan: Jika seseorang mengalami masalah memasuki permainan lokal Anda, pastikan Anda telah mengizinkan Mindustry akses ke jaringan lokalmu di pengaturan firewall. Perlu diingat bahwa jaringan publik terkadang tidak mengizinkan pencarian server.
join.info = Disini, Anda bisa memasuki [accent]server IP[], atau menemukan [accent]server lokal[] untuk bermain bersama.\nLAN dan WAN mendukung permainan bersama.\n\n[lightgray]Ingat: Tidak ada daftar server global; jika anda ingin bergabung dengan seseorang memakai IP, Anda perlu menanyakan host tentang IP mereka. join.info = Disini, Anda bisa memasuki [accent]server IP[], atau menemukan [accent]server lokal[] untuk bermain bersama.\nLAN dan WAN mendukung permainan bersama.\n\n[lightgray]Jika Anda ingin bergabung dengan seseorang dengan IP, Anda perlu menanyakan host tentang IP mereka, yang dapat dicari dengan meng-google "my ip" melalui perangkat mereka.
hostserver = Host Permainan hostserver = Host Permainan
invitefriends = Undang Teman invitefriends = Undang Teman
hostserver.mobile = Host\nPermainan hostserver.mobile = Host\nPermainan
@@ -214,6 +215,7 @@ hosts.none = [lightgray]Tidak ditemukan game lokal!
host.invalid = [scarlet]Tidak bisa menyambung dengan pemilik. host.invalid = [scarlet]Tidak bisa menyambung dengan pemilik.
servers.local = Server Lokal servers.local = Server Lokal
servers.local.steam = Permainan Publik & Server Lokal
servers.remote = Server Jarak Jauh (Simpanan) servers.remote = Server Jarak Jauh (Simpanan)
servers.global = Server Komunitas servers.global = Server Komunitas
@@ -222,10 +224,10 @@ servers.showhidden = Tampilkan Server Tersembunyi
server.shown = Ditampilkan server.shown = Ditampilkan
server.hidden = Disembunyikan server.hidden = Disembunyikan
trace = Melacak Pemain trace = Lacak Pemain
trace.playername = Nama pemain: [accent]{0} trace.playername = Nama pemain: [accent]{0}
trace.ip = IP: [accent]{0} trace.ip = IP: [accent]{0}
trace.id = ID Unik: [accent]{0} trace.id = ID: [accent]{0}
trace.mobile = Client Mobile: [accent]{0} trace.mobile = Client Mobile: [accent]{0}
trace.modclient = Client Modifikasi: [accent]{0} trace.modclient = Client Modifikasi: [accent]{0}
trace.times.joined = Total Bergabung: [accent]{0} trace.times.joined = Total Bergabung: [accent]{0}
@@ -238,9 +240,9 @@ server.admins.none = Tidak ada admin!
server.add = Tambahkan Server server.add = Tambahkan Server
server.delete = Anda yakin ingin menghapus server ini? server.delete = Anda yakin ingin menghapus server ini?
server.edit = Sunting Server server.edit = Sunting Server
server.outdated = [crimson]Server Kadaluarsa![] server.outdated = [scarlet]Server Kadaluarsa![]
server.outdated.client = [crimson]Client Kadaluarsa![] server.outdated.client = [scarlet]Client Kadaluarsa![]
server.version = [lightgray]Versi: {0} {1} server.version = [gray]v{0} {1}
server.custombuild = [accent]Bentuk Modifikasi server.custombuild = [accent]Bentuk Modifikasi
confirmban = Anda yakin ingin melarang pemain ini untuk masuk lagi? confirmban = Anda yakin ingin melarang pemain ini untuk masuk lagi?
confirmkick = Anda yakin ingin mengeluarkan pemain ini? confirmkick = Anda yakin ingin mengeluarkan pemain ini?
@@ -353,12 +355,12 @@ map.publish.confirm = Apakah Anda yakin untuk menerbitkan peta ini?\n\n[lightgra
workshop.menu = Pilih apa yang Anda ingin lakukan dengan item ini. workshop.menu = Pilih apa yang Anda ingin lakukan dengan item ini.
workshop.info = Informasi item workshop.info = Informasi item
changelog = Catatan Pembaruan (opsional): changelog = Catatan Pembaruan (opsional):
eula = Steam EULA eula = EULA Steam
missing = Item ini telah dihapus atau dipindah.\n[lightgray]Daftar Workshop sekarang telah tidak terhubung secara otomatis. missing = Item ini telah dihapus atau dipindah.\n[lightgray]Daftar Workshop sekarang telah tidak terhubung secara otomatis.
publishing = [accent]Menerbitkan... publishing = [accent]Menerbitkan...
publish.confirm = Apakah Anda yakin untuk menerbitkan item ini?\n\n[lightgray]Pastikan Anda setuju dengan Workshop EULA terlebih dahulu, atau item Anda tidak akan muncul! publish.confirm = Apakah Anda yakin untuk menerbitkan item ini?\n\n[lightgray]Pastikan Anda setuju dengan EULA Workshop terlebih dahulu, atau item Anda tidak akan muncul!
publish.error = Terjadi kesalahan saat menerbitkan item: {0} publish.error = Terjadi kesalahan saat menerbitkan item: {0}
steam.error = Gagal untuk menginisialisasi layanan Steam.\nError: {0} steam.error = Gagal untuk menjalankan layanan Steam.\nKesalahan: {0}
editor.brush = Kuas editor.brush = Kuas
editor.openin = Buka di Penyunting editor.openin = Buka di Penyunting
@@ -464,7 +466,7 @@ 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
filter.spawnpath = Path To Spawn filter.spawnpath = Jalur ke Titik Muncul
filter.corespawn = Pilih Inti filter.corespawn = Pilih Inti
filter.median = Median filter.median = Median
filter.oremedian = Median Bijih filter.oremedian = Median Bijih
@@ -522,8 +524,8 @@ mapeditor = Penyunting Peta
abandon = Tinggalkan abandon = Tinggalkan
abandon.text = Zona ini dan semua sumber daya didalamnya akan berada di tangan musuh. abandon.text = Zona ini dan semua sumber daya didalamnya akan berada di tangan musuh.
locked = Terkunci locked = Terkunci
complete = [lightgray]Mencapai: complete = [lightgray]Selesaikan:
requirement.wave = Capai gelombang {0} dalam {1} requirement.wave = Raih gelombang {0} dalam {1}
requirement.core = Hancurkan inti musuh dalam {0} requirement.core = Hancurkan inti musuh dalam {0}
requirement.research = Kembangkan {0} requirement.research = Kembangkan {0}
requirement.produce = Produksi {0} requirement.produce = Produksi {0}
@@ -541,7 +543,7 @@ addall = Tambah Semua
launch.from = Meluncurkan Dari: [accent]{0} launch.from = Meluncurkan Dari: [accent]{0}
launch.destination = Destinasi: {0} launch.destination = Destinasi: {0}
configure.invalid = Jumlah harus berupa angka diantara 0 dan {0}. configure.invalid = Jumlah harus berupa angka diantara 0 dan {0}.
add = Menambahkan... add = Tambahkan...
guardian = Penjaga guardian = Penjaga
connectfail = [scarlet]Gagal menyambung ke server:\n\n[accent]{0} connectfail = [scarlet]Gagal menyambung ke server:\n\n[accent]{0}
@@ -553,7 +555,7 @@ error.alreadyconnected = Sudah tersambung.
error.mapnotfound = File peta tidak ditemaukan! error.mapnotfound = File peta tidak ditemaukan!
error.io = Terjadi kesalahan jaringan I/O. error.io = Terjadi kesalahan jaringan I/O.
error.any = Terjadi kesalahan Jaringan tidak diketahui. error.any = Terjadi kesalahan Jaringan tidak diketahui.
error.bloom = Gagal untuk menginisialisasi bloom.\nPerangkat Anda mungkin tidak mendukung fitur ini. error.bloom = Gagal untuk menjalankan bloom.\nPerangkat Anda mungkin tidak mendukung fitur ini.
weather.rain.name = Hujan weather.rain.name = Hujan
weather.snow.name = Salju weather.snow.name = Salju
@@ -565,6 +567,7 @@ sectors.unexplored = [lightgray]Belum Ditelusuri
sectors.resources = Sumber Daya: sectors.resources = Sumber Daya:
sectors.production = Produksi: sectors.production = Produksi:
sectors.export = Ekspor: sectors.export = Ekspor:
sectors.import = Impor:
sectors.time = Waktu: sectors.time = Waktu:
sectors.threat = Tingkat: sectors.threat = Tingkat:
sectors.wave = Gelombang: sectors.wave = Gelombang:
@@ -672,7 +675,7 @@ unsupported.environment = [scarlet]Ruang Lingkup Tidak Cocok
yes = Ya yes = Ya
no = Tidak no = Tidak
info.title = Info info.title = Info
error.title = [crimson]Sebuah kesalahan telah terjadi error.title = [scarlet]Sebuah kesalahan telah terjadi
error.crashtitle = Sebuah kesalahan telah terjadi error.crashtitle = Sebuah kesalahan telah terjadi
unit.nobuild = [scarlet]Unit tidak dapat membangun unit.nobuild = [scarlet]Unit tidak dapat membangun
lastaccessed = [lightgray]Terakhir Diakses: {0} lastaccessed = [lightgray]Terakhir Diakses: {0}
@@ -806,6 +809,7 @@ bullet.reload = [stat]{0}[lightgray]x laju tembakan
unit.blocks = blok unit.blocks = blok
unit.blockssquared = blok² unit.blockssquared = blok²
unit.powersecond = unit tenaga/detik unit.powersecond = unit tenaga/detik
unit.tilessecond = petak/detik
unit.liquidsecond = unit zat cair/detik unit.liquidsecond = unit zat cair/detik
unit.itemssecond = bahan/detik unit.itemssecond = bahan/detik
unit.liquidunits = unit zat cair unit.liquidunits = unit zat cair
@@ -831,29 +835,29 @@ category.items = Barang
category.crafting = Pemasukan/Pengeluaran category.crafting = Pemasukan/Pengeluaran
category.function = Fungsi category.function = Fungsi
category.optional = Peningkatan Opsional category.optional = Peningkatan Opsional
setting.skipcoreanimation.name = Lewati Animasi Peluncuran/Pendaratan Inti
setting.landscape.name = Kunci Pemandangan setting.landscape.name = Kunci Pemandangan
setting.shadows.name = Bayangan setting.shadows.name = Bayangan
setting.blockreplace.name = Usulan Blok Otomatis setting.blockreplace.name = Usulan Blok Otomatis
setting.linear.name = Filter Bergaris setting.linear.name = Filter Bergaris
setting.hints.name = Petunjuk setting.hints.name = Petunjuk
setting.logichints.name = Petunjuk Logika setting.logichints.name = Petunjuk Logika
setting.flow.name = Tampilan Laju Aliran Sumber Daya
setting.backgroundpause.name = Jeda di Latar setting.backgroundpause.name = Jeda di Latar
setting.buildautopause.name = Jeda Otomatis saat Membangun setting.buildautopause.name = Jeda Otomatis saat Membangun
setting.doubletapmine.name = Dua-kali Sentuh untuk Menambang setting.doubletapmine.name = Dua-kali Sentuh untuk Menambang
setting.modcrashdisable.name = Matikan Mod Ketika Ada Masalah Saat Memulai Permainan setting.modcrashdisable.name = Matikan Mod Ketika Ada Masalah Saat Memulai Permainan
setting.animatedwater.name = Animasi Perairan setting.animatedwater.name = Animasi Perairan
setting.animatedshields.name = Animasi Perisai setting.animatedshields.name = Animasi Perisai
setting.antialias.name = Antialiasi[lightgray] (membutuhkan restart)[]
setting.playerindicators.name = Indikasi Pemain setting.playerindicators.name = Indikasi Pemain
setting.indicators.name = Indikasi Musuh/Teman Lain setting.indicators.name = Indikasi Musuh/Teman Lain
setting.autotarget.name = Target Secara Otomatis setting.autotarget.name = Target Secara Otomatis
setting.keyboard.name = Kontrol Mouse+Papan Ketik setting.keyboard.name = Kontrol Mouse+Papan Ketik
setting.touchscreen.name = Kontrol Layar Sentuh setting.touchscreen.name = Kontrol Layar Sentuh
setting.fpscap.name = Pembatasan FPS setting.fpscap.name = Batas FPS
setting.fpscap.none = Tidak Ada setting.fpscap.none = Tidak Ada
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = Skala UI[lightgray] (butuh untuk mengulang game)[] setting.uiscale.name = Skala UI
setting.uiscale.description = Mulai ulang diperlukan untuk menerapkan perubahan.
setting.swapdiagonal.name = Selalu Penaruhan Diagonal setting.swapdiagonal.name = Selalu Penaruhan Diagonal
setting.difficulty.training = Latihan setting.difficulty.training = Latihan
setting.difficulty.easy = Mudah setting.difficulty.easy = Mudah
@@ -871,7 +875,8 @@ setting.saveinterval.name = Jarak Menyimpan
setting.seconds = {0} detik setting.seconds = {0} detik
setting.milliseconds = {0} milidetik setting.milliseconds = {0} milidetik
setting.fullscreen.name = Layar Penuh setting.fullscreen.name = Layar Penuh
setting.borderlesswindow.name = Jendela tak Berbatas[lightgray] (mungkin memerlukan mengulang kembali) setting.borderlesswindow.name = Jendela tak Berbatas[lightgray]
setting.borderlesswindow.description = Mulai ulang mungkin diperlukan untuk menerapkan perubahan.
setting.fps.name = Tunjukkan FPS setting.fps.name = Tunjukkan FPS
setting.smoothcamera.name = Kamera Halus setting.smoothcamera.name = Kamera Halus
setting.vsync.name = VSync setting.vsync.name = VSync
@@ -901,7 +906,7 @@ uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarle
uiscale.cancel = Batal & Keluar uiscale.cancel = Batal & Keluar
setting.bloom.name = Bloom setting.bloom.name = Bloom
keybind.title = Ganti Tombol keybind.title = Ganti Tombol
keybinds.mobile = [scarlet]Mayoritas tombol tidak didukung oleh perangkat ponsel Hanya gerakan dasar yang didukung. keybinds.mobile = [scarlet]Mayoritas tombol tidak didukung oleh perangkat ponsel. Hanya gerakan dasar yang didukung.
category.general.name = Umum category.general.name = Umum
category.view.name = Melihat category.view.name = Melihat
category.multiplayer.name = Bermain Bersama category.multiplayer.name = Bermain Bersama
@@ -994,6 +999,7 @@ rules.wavetimer = Pengaturan Waktu Gelombang
rules.waves = Gelombang rules.waves = Gelombang
rules.attack = Mode Penyerangan rules.attack = Mode Penyerangan
rules.buildai = Bangunan A.I. rules.buildai = Bangunan A.I.
rules.cleanupdeadteams = Bersihkan Bangunan Tim yang Kalah (PvP)
rules.corecapture = Tangkap Inti Saat Kehancuran rules.corecapture = Tangkap Inti Saat Kehancuran
rules.polygoncoreprotection = Poligon Pelindung Inti 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
@@ -1009,7 +1015,7 @@ rules.wavespacing = Jarak Gelombang:[lightgray] (detik)
rules.buildcostmultiplier = Penggandaan Harga Bangunan rules.buildcostmultiplier = Penggandaan Harga Bangunan
rules.buildspeedmultiplier = Penggandaan Waktu Pembuatan Bangunan rules.buildspeedmultiplier = Penggandaan Waktu Pembuatan Bangunan
rules.deconstructrefundmultiplier = Penggandaan Kembalinya Bahan Bangunan yang Dihancurkan rules.deconstructrefundmultiplier = Penggandaan Kembalinya Bahan Bangunan yang Dihancurkan
rules.waitForWaveToEnd = Gelombang menunggu musuh rules.waitForWaveToEnd = Gelombang Menunggu Musuh
rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok) rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok)
rules.unitammo = Unit Membutuhkan Amunisi rules.unitammo = Unit Membutuhkan Amunisi
rules.title.waves = Gelombang rules.title.waves = Gelombang
@@ -1288,7 +1294,6 @@ block.meltdown.name = Meltdown
block.foreshadow.name = Foreshadow block.foreshadow.name = Foreshadow
block.container.name = Kontainer block.container.name = Kontainer
block.launch-pad.name = Alas Peluncur block.launch-pad.name = Alas Peluncur
block.launch-pad-large.name = Alas Peluncur Besar
block.segment.name = Segment block.segment.name = Segment
block.command-center.name = Pusat Perintah block.command-center.name = Pusat Perintah
block.ground-factory.name = Pabrik Unit Darat block.ground-factory.name = Pabrik Unit Darat
@@ -1309,11 +1314,11 @@ block.payload-source.name = Sumber Muatan
block.disassembler.name = Pembongkar block.disassembler.name = Pembongkar
block.silicon-crucible.name = Pelebur Raksasa block.silicon-crucible.name = Pelebur Raksasa
block.overdrive-dome.name = Kubah Projektor Pemercepat block.overdrive-dome.name = Kubah Projektor Pemercepat
block.interplanetary-accelerator.name = Akselerator Antarplanet
#experimental, may be removed #experimental, may be removed
block.block-forge.name = Pemadu Blok block.block-forge.name = Pemadu Blok
block.block-loader.name = Pemuat Blok block.block-loader.name = Pemuat Blok
block.block-unloader.name = Pembongkar Blok block.block-unloader.name = Pembongkar Blok
block.interplanetary-accelerator.name = Akselerator Antarplanet
block.switch.name = Saklar block.switch.name = Saklar
block.micro-processor.name = Prosesor Mikro block.micro-processor.name = Prosesor Mikro
@@ -1348,6 +1353,7 @@ hint.placeTurret = Taruh \uf861 [accent]Menara[] untuk mempertahankan basismu da
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.blockInfo = Lihat informasi dari sebuah blok dengan memilihnya di [accent]menu bangun[], lalu pilih tombol [accent][[?][] di sebelah kanan.
hint.derelict = Bangunan berwarna [accent]abu-abu[] adalah sisa-sisa dari markas lama yang hancur dan tidak dapat berfungsi kembali.\n\nBangunan tersebut dapat [accent]didekonstruksi[] menjadi sumber daya.
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.
@@ -1399,6 +1405,7 @@ liquid.slag.description = Dapat dipadatkan menjadi logam tertentu, atau disempro
liquid.oil.description = Digunakan di produksi material lanjutan dan sebagai amunisi yang mudah terbakar. liquid.oil.description = Digunakan di produksi material lanjutan dan sebagai amunisi yang mudah terbakar.
liquid.cryofluid.description = Digunakan sebagai pendingin di reaktor, menara, dan pabrik. liquid.cryofluid.description = Digunakan sebagai pendingin di reaktor, menara, dan pabrik.
block.derelict = [lightgray] Derelik
block.resupply-point.description = Mengisi ulang amunisi unit terdekat dengan tembaga. Tidak dapat mengisi ulang unit yang menggunakan tenaga baterai. block.resupply-point.description = Mengisi ulang amunisi unit terdekat dengan tembaga. Tidak dapat mengisi ulang unit yang menggunakan tenaga baterai.
block.armored-conveyor.description = Memindahkan barang ke depan. Tidak dapat menerima masukan dari samping. block.armored-conveyor.description = Memindahkan barang ke depan. Tidak dapat menerima masukan dari samping.
block.illuminator.description = Memancarkan cahaya. block.illuminator.description = Memancarkan cahaya.
@@ -1543,6 +1550,8 @@ block.memory-bank.description = Menyimpan informasi untuk prosesor. Berkapasitas
block.logic-display.description = Menampilkan grafik sembarang dari prosesor. block.logic-display.description = Menampilkan grafik sembarang dari prosesor.
block.large-logic-display.description = Menampilkan grafik sembarang dari prosesor. Lebih besar. block.large-logic-display.description = Menampilkan grafik sembarang dari prosesor. Lebih besar.
block.interplanetary-accelerator.description = Sebuah menara railgun elektromagnetik raksasa. Meluncurkan Inti dengan kecepatan tinggi untuk peluncuran antarplanet. block.interplanetary-accelerator.description = Sebuah menara railgun elektromagnetik raksasa. Meluncurkan Inti dengan kecepatan tinggi untuk peluncuran antarplanet.
block.repair-turret.description = Memperbaiki unit terdekat yang sekarat dalam jangkauan secara terus-menerus. Dapat menerima pendingin.
block.payload-propulsion-tower.description = Bangunan transportasi muatan jarak jauh. Menembakkan muatan pada menara penggerak muatan lainnya yang terhubung.
unit.dagger.description = Menembak musuh terdekat dengan amunisi standar. unit.dagger.description = Menembak musuh terdekat dengan amunisi standar.
unit.mace.description = Menyerang musuh terdekat dengan cara membakarnya. unit.mace.description = Menyerang musuh terdekat dengan cara membakarnya.
@@ -1552,7 +1561,7 @@ unit.reign.description = Menembak semua musuh terdekat dengan gugusan peluru taj
unit.nova.description = Menembak baut laser yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. unit.nova.description = Menembak baut laser yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang.
unit.pulsar.description = Menembak petir yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. unit.pulsar.description = Menembak petir yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang.
unit.quasar.description = Menembak sinar laser yang dapat menembus bangunan yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. Memiliki perisai. unit.quasar.description = Menembak sinar laser yang dapat menembus bangunan yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. Memiliki perisai.
unit.vela.description = Menembak sinar laser besar dan kontinu yang dapat merusak musuh, membakarnya dan memperbaiki bangunan musuh. Dapat terbang. unit.vela.description = Menembak sinar laser besar dan kontinu yang dapat merusak musuh, membakarnya dan memperbaiki bangunan teman. Dapat terbang.
unit.corvus.description = Menembak sinar laser besar yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat berjalan diatas hampir semua medan. unit.corvus.description = Menembak sinar laser besar yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat berjalan diatas hampir semua medan.
unit.crawler.description = Berlari menuju musuh dan menghancurkan dirinya, yang dapat menghasilkan ledakan besar. unit.crawler.description = Berlari menuju musuh dan menghancurkan dirinya, yang dapat menghasilkan ledakan besar.
unit.atrax.description = Menembak musuh dengan cairan lava kepada target darat. Dapat berjalan diatas hampir semua medan. unit.atrax.description = Menembak musuh dengan cairan lava kepada target darat. Dapat berjalan diatas hampir semua medan.
@@ -1577,6 +1586,11 @@ unit.omura.description = Menembak railgun jarak jauh kepada musuh. Dapat memprod
unit.alpha.description = Melindungi Inti Bagian dari musuh. Dapat membangun. unit.alpha.description = Melindungi Inti Bagian dari musuh. Dapat membangun.
unit.beta.description = Melindungi Inti Fondasi dari musuh. Dapat membangun. unit.beta.description = Melindungi Inti Fondasi dari musuh. Dapat membangun.
unit.gamma.description = Melindungi Inti Nukleus dari musuh. Dapat membangun. unit.gamma.description = Melindungi Inti Nukleus dari musuh. Dapat membangun.
unit.retusa.description = Menempatkan ranjau berjarak. Memperbaiki unit teman.
unit.oxynoe.description = Menembak aliran api pada musuh terdekat. Menargetkan proyektil musuh terdekat dengan titik menara pertahanan.
unit.cyerce.description = Menembak misil yang membidik otomatis secara beruntun pada musuh. Memperbaiki unit teman.
unit.aegires.description = Mengkejutkan semua bangunan dan unit musuh yang ada di dalam medan energi. Memperbaiki seluruh unit teman.
unit.navanax.description = Menembak proyektil elektromagnetik yang meledak, memberikan kerusakan yang signifikan pada jaringan tenaga musuh dan memperbaiki bangunan teman. Melelehkan musuh terdekat dengan 4 menara laser secara otomatis.
lst.read = Membaca angka dari memori sel yang dihubungkan. lst.read = Membaca angka dari memori sel yang dihubungkan.
lst.write = Menulis angka ke memori sel yang dihubungkan. lst.write = Menulis angka ke memori sel yang dihubungkan.

View File

@@ -1,6 +1,6 @@
credits.text = 制作者 [royal]Anuken[] - [sky]anukendev@gmail.com[] credits.text = 制作者 [royal]Anuken[] - [sky]anukendev@gmail.com[]
credits = クレジット credits = クレジット
contributors = 翻訳や開発に協力してくださった方々 contributors = 翻訳や開発に協力してくださった皆様
discord = MindustryのDiscordに参加! discord = MindustryのDiscordに参加!
link.discord.description = Mindustryの公式Discordグループ link.discord.description = Mindustryの公式Discordグループ
link.reddit.description = Mindustryのsubreddit link.reddit.description = Mindustryのsubreddit
@@ -41,10 +41,13 @@ be.ignore = 無視する
be.noupdates = 更新が見つかりません。 be.noupdates = 更新が見つかりません。
be.check = 更新を確認します。 be.check = 更新を確認します。
mod.featured.dialog.title = Mod ブラウザー (作業中) mods.browser = Modブラウザ
mods.browser.selected = 選択されたmod mods.browser.selected = 選択されたMod
mods.browser.add = インストール mods.browser.add = インストール
mods.browser.reinstall = 再インストール
mods.github.open = 見る mods.github.open = 見る
mods.browser.sortdate = 新しいものから並べる
mods.browser.sortstars = お気に入り数で並べる
schematic = 設計図 schematic = 設計図
schematic.add = 設計図を保存 schematic.add = 設計図を保存
@@ -64,6 +67,14 @@ schematic.delete.confirm = この設計図は完全に削除されます。よ
schematic.rename = 設計図の名前を変更する。 schematic.rename = 設計図の名前を変更する。
schematic.info = {1}x{0}, {2} ブロック schematic.info = {1}x{0}, {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 stats = Stats
stat.wave = 防衛したウェーブ:[accent] {0} stat.wave = 防衛したウェーブ:[accent] {0}
@@ -90,6 +101,7 @@ customgame = カスタムプレイ
newgame = 新しく始める newgame = 新しく始める
none = <なし> none = <なし>
none.found = [lightgray]<見つかりません> none.found = [lightgray]<見つかりません>
none.inmap = [lightgray]<マップ内にありません>
minimap = ミニマップ minimap = ミニマップ
position = 位置 position = 位置
close = 閉じる close = 閉じる
@@ -110,20 +122,23 @@ committingchanges = 変更を適応中
done = 完了 done = 完了
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。 feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
mods.alphainfo = Mod機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]\n 問題を発見した場合は Mindustry GitHubに報告してください mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。おそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします
mods = Mods mods = Mods
mods.none = [lightgray]Modが見つかりませんでした! mods.none = [lightgray]Modが見つかりませんでした!
mods.guide = Mod作成ガイド mods.guide = Mod作成ガイド
mods.report = バグを報告する mods.report = バグを報告する
mods.openfolder = MODのフォルダを開く mods.openfolder = Modのフォルダを開く
mods.viewcontent = コンテンツを見る
mods.reload = 再読み込み mods.reload = 再読み込み
mods.reloadexit = Modを読み込む為にゲームを再起動します。 mods.reloadexit = Modを読み込む為にゲームを再起動します。
mod.installed = [[インストール済み]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]有効 mod.enabled = [lightgray]有効
mod.disabled = [scarlet]無効 mod.disabled = [scarlet]無効
mod.multiplayer.compatible = [gray]マルチプレイに対応
mod.disable = 無効化 mod.disable = 無効化
mod.content = コンテンツ: mod.content = コンテンツ:
mod.delete.error = MODを削除することができませんでした。 mod.delete.error = Modを削除することができませんでした。
mod.requiresversion = [scarlet]Modが要求する最低バージョン: [accent]{0} mod.requiresversion = [scarlet]Modが要求する最低バージョン: [accent]{0}
mod.outdated = [scarlet]V6 との互換性がありません (minGameVersion が 105 未満) mod.outdated = [scarlet]V6 との互換性がありません (minGameVersion が 105 未満)
mod.missingdependencies = [scarlet]依存関係がありません。: {0} mod.missingdependencies = [scarlet]依存関係がありません。: {0}
@@ -168,7 +183,7 @@ players.single = {0} 人がオンライン
players.search = 検索 players.search = 検索
players.notfound = [gray]プレイヤーが存在しません players.notfound = [gray]プレイヤーが存在しません
server.closing = [accent]サーバーを閉じています... server.closing = [accent]サーバーを閉じています...
server.kicked.kick = あなたはサーバからキックされました! server.kicked.kick = あなたはサーバからキックされました!
server.kicked.whitelist = あなたはホワイトリストに追加されていません。 server.kicked.whitelist = あなたはホワイトリストに追加されていません。
server.kicked.serverClose = サーバーが閉じられました。 server.kicked.serverClose = サーバーが閉じられました。
server.kicked.vote = あなたはプレイヤーの投票によりサーバーからキックされました。 server.kicked.vote = あなたはプレイヤーの投票によりサーバーからキックされました。
@@ -200,6 +215,7 @@ hosts.none = [lightgray]ローカル上のサーバーが見つかりません
host.invalid = [scarlet]ホストに接続できません。 host.invalid = [scarlet]ホストに接続できません。
servers.local = ローカルサーバー servers.local = ローカルサーバー
servers.local.steam = オープンゲーム & ローカルサーバー
servers.remote = リモートサーバー servers.remote = リモートサーバー
servers.global = コミュニティサーバー servers.global = コミュニティサーバー
@@ -211,9 +227,11 @@ server.hidden = 非表示
trace = プレイヤーの記録 trace = プレイヤーの記録
trace.playername = プレイヤー名: [accent]{0} trace.playername = プレイヤー名: [accent]{0}
trace.ip = IP: [accent]{0} trace.ip = IP: [accent]{0}
trace.id = ユニークID: [accent]{0} trace.id = ID: [accent]{0}
trace.mobile = モバイルクライアント: [accent]{0} trace.mobile = モバイルクライアント: [accent]{0}
trace.modclient = カスタムクライアント: [accent]{0} trace.modclient = カスタムクライアント: [accent]{0}
trace.times.joined = 参加回数: [accent]{0}
trace.times.kicked = キックされた回数: [accent]{0}
invalidid = 無効なクライアントIDです! バグ報告してください。 invalidid = 無効なクライアントIDです! バグ報告してください。
server.bans = Ban server.bans = Ban
server.bans.none = Banされたプレイヤーは見つかりませんでした! server.bans.none = Banされたプレイヤーは見つかりませんでした!
@@ -287,6 +305,7 @@ cancel = キャンセル
openlink = リンクを開く openlink = リンクを開く
copylink = リンクをコピー copylink = リンクをコピー
back = 戻る back = 戻る
max = Max
crash.export = クラッシュログを出力 crash.export = クラッシュログを出力
crash.none = クラッシュログが見つかりません。 crash.none = クラッシュログが見つかりません。
crash.exported = クラッシュログを出力しました。 crash.exported = クラッシュログを出力しました。
@@ -299,9 +318,9 @@ data.import.confirm = ゲームデータをインポートすると、現在の
quit.confirm = 終了してもよろしいですか? quit.confirm = 終了してもよろしいですか?
quit.confirm.tutorial = チュートリアルを終了しますか?\nチュートリアルは [accent]設定->ゲーム->チュートリアル[] から再度受けることができます。 quit.confirm.tutorial = チュートリアルを終了しますか?\nチュートリアルは [accent]設定->ゲーム->チュートリアル[] から再度受けることができます。
loading = [accent]読み込み中... loading = [accent]読み込み中...
reloading = [accent]再読み込み中... downloading = [accent]ダウンロード中...
saving = [accent]保存中... saving = [accent]保存中...
respawn = [accent][[{0}][] to respawn in core respawn = [accent][[{0}][] コアからリスポーンする
cancelbuilding = [accent][[{0}][] 選択を解除する cancelbuilding = [accent][[{0}][] 選択を解除する
selectschematic = [accent][[{0}][] 選択し、コピーする selectschematic = [accent][[{0}][] 選択し、コピーする
pausebuilding = [accent][[{0}][] 建築を一時的に中断する pausebuilding = [accent][[{0}][] 建築を一時的に中断する
@@ -326,9 +345,9 @@ custom = カスタム
builtin = 組み込み builtin = 組み込み
map.delete.confirm = マップを削除してもよろしいですか? これは元に戻すことができません! map.delete.confirm = マップを削除してもよろしいですか? これは元に戻すことができません!
map.random = [accent]ランダムマップ map.random = [accent]ランダムマップ
map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[accent]オレンジ色[]のコアをマップに追加してください。 map.nospawn = このマップにはプレイヤーが出現するためのコアがありません! エディターで[#{0}]{1}[]のコアをマップに追加してください。
map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[scarlet]オレンジ色ではない[]コアをマップに追加してください。 map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[scarlet]オレンジ色ではない[]コアをマップに追加してください。
map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[scarlet]赤色[]のコアをマップに追加してください。 map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[#{0}]{1}[]のコアをマップに追加してください。
map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。 map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
workshop.update = 更新 workshop.update = 更新
workshop.error = ワークショップの詳細を取得中にエラーが発生しました: {0} workshop.error = ワークショップの詳細を取得中にエラーが発生しました: {0}
@@ -357,11 +376,10 @@ editor.generation = 生成:
editor.ingame = ゲーム内で編集する editor.ingame = ゲーム内で編集する
editor.publish.workshop = ワークショップで公開 editor.publish.workshop = ワークショップで公開
editor.newmap = 新しいマップ editor.newmap = 新しいマップ
editor.center = Center editor.center = 中心
workshop = ワークショップ workshop = ワークショップ
waves.title = ウェーブ waves.title = ウェーブ
waves.remove = 削除 waves.remove = 削除
waves.never = <永久>
waves.every = ウェーブ waves.every = ウェーブ
waves.waves = ごとに出現 waves.waves = ごとに出現
waves.perspawn = 体出現 waves.perspawn = 体出現
@@ -444,39 +462,43 @@ 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 = 敵スポーンセレクト
filter.spawnpath = Path To Spawn filter.spawnpath = Path To Spawn
filter.corespawn = コアセレクト filter.corespawn = コアセレクト
filter.median = メディアン filter.median = 中央値
filter.oremedian = メディアン (鉱石) filter.oremedian = 中央値 (鉱石)
filter.blend = ブレンド filter.blend = ブレンド
filter.defaultores = デフォルトの鉱石 filter.defaultores = デフォルトの鉱石
filter.ore = 鉱石 filter.ore = 鉱石
filter.rivernoise = リバーノイズ filter.rivernoise = 川の生成
filter.mirror = 反転 filter.mirror = 反転
filter.clear = クリアー 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 = マグニチュード
filter.option.threshold = スレッシュホールド filter.option.threshold = 閾値
filter.option.circle-scale = サークルスケール filter.option.circle-scale = サークルスケール
filter.option.octaves = オクターブ filter.option.octaves = オクターブ
filter.option.falloff = フォールオフ filter.option.falloff = 減衰
filter.option.angle = 角度 filter.option.angle = 角度
filter.option.amount = filter.option.amount =
filter.option.rotate = 回転
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 = 2番目の地面 filter.option.floor2 = 2番目の地面
filter.option.threshold2 = 2番目のスレッシュホールド filter.option.threshold2 = 2番目の閾値
filter.option.radius = 半径 filter.option.radius = 半径
filter.option.percentile = パーセンタイル filter.option.percentile = パーセンタイル
@@ -489,6 +511,7 @@ load = 読み込む
save = 保存 save = 保存
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 = ゲームを再起動後、言語設定が有効になります。 language.restart = ゲームを再起動後、言語設定が有効になります。
@@ -516,12 +539,14 @@ configure = 積み荷の設定
loadout = ロードアウト loadout = ロードアウト
resources = 資源 resources = 資源
bannedblocks = 禁止ブロック bannedblocks = 禁止ブロック
bannedunits = 禁止ユニット
addall = すべて追加 addall = すべて追加
launch.from = [accent]{0}[] からの発射 launch.from = [accent]{0}[] からの発射
launch.destination = Destination: {0} launch.destination = 目的地: {0}
configure.invalid = 値は 0 から {0} の間でなければなりません。 configure.invalid = 値は 0 から {0} の間でなければなりません。
add = 追加... add = 追加...
boss.health = ボスのHP boss.health = ボスのHP
guardian = ガーディアン
connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0} connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0}
error.unreachable = サーバーに到達できません。\nアドレスは正しいですか? error.unreachable = サーバーに到達できません。\nアドレスは正しいですか?
@@ -540,6 +565,8 @@ weather.sandstorm.name = 砂嵐
weather.sporestorm.name = 胞子嵐 weather.sporestorm.name = 胞子嵐
weather.fog.name = weather.fog.name =
sectorlist = セクター
sectorlist.attacked = {0}が攻撃を受けています
sectors.unexplored = [lightgray]未踏査 sectors.unexplored = [lightgray]未踏査
sectors.resources = 資源: sectors.resources = 資源:
sectors.production = 生産: sectors.production = 生産:
@@ -565,6 +592,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 =
@@ -589,27 +617,41 @@ sector.overgrowth.name = オーバーグロウス
sector.tarFields.name = ター · フィールズ sector.tarFields.name = ター · フィールズ
sector.saltFlats.name = ソルト · フラッツ sector.saltFlats.name = ソルト · フラッツ
sector.fungalPass.name = ファングル · パス sector.fungalPass.name = ファングル · パス
sector.biomassFacility.name = バイオマス シンテシス ファシリティ sector.biomassFacility.name = バイオマス · シンテシス · ファシリティ
sector.windsweptIslands.name = ウインドスイープト アイランズ sector.windsweptIslands.name = ウインドスイープト · アイランズ
sector.extractionOutpost.name = エクストラクション アウトポスト sector.extractionOutpost.name = エクストラクション · アウトポスト
sector.planetaryTerminal.name = プラネタリー ローンチ ターミナル sector.planetaryTerminal.name = プラネタリー · ローンチ · ターミナル
sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威低いが、資源が少ない。\nできるだけ多くのと鉛を集めます。\n始めましょう。 sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威低いですが、資源が乏しいです。\nできるだけ多くのと鉛を集めます。\n始めましょう。
sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。極寒の気温もそれらを永遠に封じ込めることはできません。\n\n電気に挑みましょう。火力発電機を建設し、修復機の使い方を学びましょう。 sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。\n極寒の気温もそれらを永遠に封じ込めることはできませんでした。\n\n電気に挑みましょう。\n火力発電機を建設し、修復機の使い方を学びましょう。
sector.saltFlats.description = 砂漠のはずれにあるソルト · フラッツです。ここには資源がほとんどありません。\n\n敵はここに資源貯蔵施設を建設しました。彼らのコアを絶ち、掃滅してください。 sector.saltFlats.description = 砂漠のはずれにあるソルト · フラッツです。\nここには資源がほとんどありません。\n\n敵はここに資源貯蔵施設を建設しました。\n彼らのコアを絶ち、掃滅してください。
sector.craters.description = 過去の戦争の名残であるクレーターに水が溜まっています。エリアを取り戻し、砂を集め、メタガラスを精錬します。タレットとドリルを冷却するために水をポンプで送ります。 sector.craters.description = 過去の戦争の名残であるクレーターに水が溜まっています。\nエリアを取り戻し、砂を集め、メタガラスを精錬しましょう。\nタレットとドリルを冷却するために水をポンプで送る必要があります。
sector.ruinousShores.description = 荒れ地を過ぎると海岸線です。ここにはかつて沿岸防衛隊が配備されていましたが、ほぼ残存していません。最も基本的な防衛施設のみが無傷のまま残っており、それ以外は全て破壊されています。\n外部拡張を続け、テクロジーを再取得しましょう sector.ruinousShores.description = 荒れ地を過ぎると海岸線です。\nここにはかつて沿岸防衛隊が配備されていましたが、ほぼ残存していません。\n最も基本的な防衛施設のみが無傷のまま残っており、それ以外は全て破壊されています。\n外部拡張を続け、テクロジーを再取得してください
sector.stainedMountains.description = 更に内陸には、胞子に汚染されていない山があります。\nこの地域にはチタンが豊富にあります。抽出して使い方を学びましょう。\n\nより多くの敵が襲来します。最強のユニットを送る時間を与えないでください。 sector.stainedMountains.description = 更に内陸には、胞子に汚染されていない山があります。\nこの地域にはチタンが豊富にあります。抽出して使い方を学びましょう。\n\nここにはより多くの敵が襲来します。強力なユニットを送る時間を与えないでください。
sector.overgrowth.description = このエリアは、胞子の発生源に近く生い茂っています。\n敵はここに前哨基地を配備しました。タイタンユニットを生産し、破壊しましょう。失ったものを取り戻すのです。 sector.overgrowth.description = このエリアは、胞子の発生源に近く生い茂っています。\n敵はここに前哨基地を配備しました。タイタンユニットを生産し、破壊してください。\n失ったものを取り戻すのです。
sector.tarFields.description = 山と砂漠に挟まれた、石油産出地帯のはずれです。使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。 sector.tarFields.description = 山と砂漠に挟まれた、石油産出地帯のはずれです。\n使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。
sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、空間が狭いです。破壊されるリスクが高いため、一刻も早く立ち去りましょう。敵の攻撃間隔が長いですが、気を抜かないでください。 sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、領域が十分にありません。破壊されるリスクが高いため、一刻も早く立ち去りましょう。\n敵の攻撃間隔が長いですが、気を抜かないでください。
sector.nuclearComplex.description = 崩壊したトリウム製造・加工施設です。\n[lightgray]トリウムとその多くの用途を研究してください。\n\n多くの敵がここに存在し、常に攻撃を偵察しています。 sector.nuclearComplex.description = 崩壊したトリウム製造・加工施設です。\n[lightgray]トリウムとその多くの用途を研究してください。\n\n多くの敵がここに存在し、常に攻撃を偵察しています。
sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。ここには敵の小さな偵察基地があります。\n破壊しましょう。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、 sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。\nここには敵の小さな偵察基地があります。\n破壊してください。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、
sector.biomassFacility.description = 胞子の発生源です。これらは胞子の研究により、最初に建設された施設です。\n内部に残された技術を研究しましょう。燃料とプラスタニウムの生産のために胞子を培養します。\n\n[lightgray]この施設が活動停止したために、胞子が放出されました。地域の生態系には、そのような侵略的生物と競合するものはありません。 sector.biomassFacility.description = 胞子の発生源です。\nこれらは胞子の研究のために、最初に建設された施設です。\n内部に残された技術を研究しましょう。燃料とプラスタニウムの生産のために胞子を培養します。\n\n[lightgray]この施設が活動停止したために、胞子が放出されました。地域の生態系には、そのような侵略的生物と競合するものはありません。
sector.windsweptIslands.description = 海岸をさらに進むと、辺鄙な列島があります。記録によると、ここにはかつて[accent]プラスタニウム[]-を生産するシステムがありました。\n\n敵の海軍ユニットを撃沈しましょう。島々に基地を建造し、これらの工場を調査しましょう。 sector.windsweptIslands.description = 海岸をさらに進むと、辺鄙な列島があります。記録によると、ここにはかつて[accent]プラスタニウム[]を生産するシステムがありました。\n\n敵の海軍ユニットを撃沈してください。島々に基地を建造し、これらの工場を調査しましょう。
sector.extractionOutpost.description = 他のセクターへ資源を輸送するために建設された敵の遠隔地の前哨基地です。\n\nさらなる征伐のためには、セクターを通ずる輸送技術が不可欠です。基地を破壊しましょう。彼らの発射台を研究してください sector.extractionOutpost.description = 他のセクターへ資源を輸送するために建設された敵の遠隔地の前哨基地です。\n\nさらなる征伐のためには、セクターを通ずる輸送技術が不可欠です。基地を破壊してください。彼らの発射台を研究しましょう
sector.impact0078.description = ここには、最初にこの星系に入った星間輸送船の残骸があります。\n\n残骸を可能な限り回収し、完全な技術を研究しましょう。 sector.impact0078.description = ここには、最初にこの星系に入った星間輸送船の残骸があります。\n\n残骸を可能な限り回収し、解析可能な技術を研究しましょう。
sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。極めて堅固に守られています。\n\n海軍ユニットを生産し、できるだけ速やかに敵を排除しましょう。発射建造物を研究しましょう。 sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。しかし、極めて堅固に守られています。\n\n海軍ユニットを生産し、可及的速やかに敵を排除してください。\nそして、発射建造物を研究しましょう。
status.burning.name = 燃焼
status.freezing.name = 凍結
status.wet.name = 湿潤
status.muddy.name = Muddy
status.melting.name = 溶解
status.sapped.name = 吸収
status.electrified.name = 帯電
status.spore-slowed.name = 鈍化胞子
status.tarred.name = 石油塗れ
status.overclock.name = オーバークロック
status.shocked.name = 電撃
status.blasted.name = 爆破
status.unmoving.name = 移動阻止
settings.language = 言語 settings.language = 言語
settings.data = ゲームデータ settings.data = ゲームデータ
@@ -632,6 +674,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 = 情報
@@ -641,12 +684,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.powercapacity = 電力容量 stat.powercapacity = 電力容量
stat.powershot = 電力/ショット stat.powershot = 電力/ショット
stat.damage = ダメージ stat.damage = ダメージ
@@ -669,6 +714,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 = 速度向上
@@ -678,6 +724,7 @@ stat.drillspeed = 基本採掘速度
stat.boosteffect = ブースト効果 stat.boosteffect = ブースト効果
stat.maxunits = 最大ユニット数 stat.maxunits = 最大ユニット数
stat.health = 耐久値 stat.health = 耐久値
stat.armor = アーマー
stat.buildtime = 建設時間 stat.buildtime = 建設時間
stat.maxconsecutive = 最大連鎖 stat.maxconsecutive = 最大連鎖
stat.buildcost = 建設費用 stat.buildcost = 建設費用
@@ -693,6 +740,7 @@ stat.lightningchance = 電撃確率
stat.lightningdamage = 電撃ダメージ stat.lightningdamage = 電撃ダメージ
stat.flammability = 可燃性 stat.flammability = 可燃性
stat.radioactivity = 放射能 stat.radioactivity = 放射能
stat.charge = 帯電性
stat.heatcapacity = 熱容量 stat.heatcapacity = 熱容量
stat.viscosity = 粘度 stat.viscosity = 粘度
stat.temperature = 温度 stat.temperature = 温度
@@ -706,13 +754,21 @@ stat.abilities = 能力
stat.canboost = ブースト可能 stat.canboost = ブースト可能
stat.flying = 飛行 stat.flying = 飛行
stat.ammouse = 使用弾薬 stat.ammouse = 使用弾薬
stat.damagemultiplier = ダメージ倍率
stat.healthmultiplier = 体力倍率
stat.speedmultiplier = スピード倍率
stat.reloadmultiplier = リロード倍率
stat.buildspeedmultiplier = 建築速度倍率
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 = 不足している資源
@@ -720,6 +776,7 @@ bar.corereq = コアベースが必要
bar.drillspeed = 採掘速度: {0}/秒 bar.drillspeed = 採掘速度: {0}/秒
bar.pumpspeed = ポンプの速度: {0}/s bar.pumpspeed = ポンプの速度: {0}/s
bar.efficiency = 効率: {0}% bar.efficiency = 効率: {0}%
bar.boost = ブースト: {0}%
bar.powerbalance = 電力均衡: {0}/秒 bar.powerbalance = 電力均衡: {0}/秒
bar.powerstored = 総蓄電量: {0}/{1} bar.powerstored = 総蓄電量: {0}/{1}
bar.poweramount = 蓄電量: {0} bar.poweramount = 蓄電量: {0}
@@ -734,6 +791,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]プロセッサーの制御下
@@ -744,6 +802,7 @@ bullet.sapping = [stat]吸収弾
bullet.homing = [stat]追尾弾 bullet.homing = [stat]追尾弾
bullet.shock = [stat]電撃 bullet.shock = [stat]電撃
bullet.frag = [stat]爆発弾 bullet.frag = [stat]爆発弾
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 レーザー弾
@@ -757,6 +816,7 @@ bullet.reload = [stat]リロード速度 {0}[lightgray]倍
unit.blocks = ブロック unit.blocks = ブロック
unit.blockssquared = ブロック² unit.blockssquared = ブロック²
unit.powersecond = 電力/秒 unit.powersecond = 電力/秒
unit.tilessecond = タイル/秒
unit.liquidsecond = 液体/秒 unit.liquidsecond = 液体/秒
unit.itemssecond = アイテム/秒 unit.itemssecond = アイテム/秒
unit.liquidunits = 液体 unit.liquidunits = 液体
@@ -782,17 +842,19 @@ category.items = アイテム
category.crafting = 搬入/搬出 category.crafting = 搬入/搬出
category.function = 役割 category.function = 役割
category.optional = 強化オプション category.optional = 強化オプション
setting.skipcoreanimation.name = コアの打ち上げ/着陸アニメーションをスキップ
setting.landscape.name = 横画面で固定 setting.landscape.name = 横画面で固定
setting.shadows.name = setting.shadows.name =
setting.blockreplace.name = 自動ブロック提案 setting.blockreplace.name = 自動ブロック提案
setting.linear.name = リニアフィルター setting.linear.name = リニアフィルター
setting.hints.name = ヒント setting.hints.name = ヒント
setting.flow.name = 資源流通量の表示 setting.logichints.name = ロジックのヒント
setting.backgroundpause.name = バックグラウンド一時停止 setting.backgroundpause.name = バックグラウンド中は一時停止する
setting.buildautopause.name = オートポーズビルディング setting.buildautopause.name = 常に建築一時中断状態にする
setting.doubletapmine.name = ダブルタップで採掘する
setting.modcrashdisable.name = 起動時にクラッシュした場合にModを無効にする
setting.animatedwater.name = 流体のアニメーション setting.animatedwater.name = 流体のアニメーション
setting.animatedshields.name = シールドのアニメーション setting.animatedshields.name = シールドのアニメーション
setting.antialias.name = アンチエイリアス[lightgray] (再起動が必要)[]
setting.playerindicators.name = プレイヤーの方角表示 setting.playerindicators.name = プレイヤーの方角表示
setting.indicators.name = 敵の方角表示 setting.indicators.name = 敵の方角表示
setting.autotarget.name = オートターゲット setting.autotarget.name = オートターゲット
@@ -801,7 +863,8 @@ setting.touchscreen.name = タッチスクリーン操作
setting.fpscap.name = 最大FPS setting.fpscap.name = 最大FPS
setting.fpscap.none = なし setting.fpscap.none = なし
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = UIサイズ[lightgray] (再起動が必要)[] setting.uiscale.name = UIサイズ
setting.uiscale.description = 再起動が必要です。
setting.swapdiagonal.name = 常に斜め設置 setting.swapdiagonal.name = 常に斜め設置
setting.difficulty.training = トレーニング setting.difficulty.training = トレーニング
setting.difficulty.easy = イージー setting.difficulty.easy = イージー
@@ -819,7 +882,9 @@ 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 = ボーダーレスウィンドウ
setting.borderlesswindow.name.windows = ボーダーレスフルスクリーン
setting.borderlesswindow.description = 再起動が必要になる場合があります。
setting.fps.name = FPSを表示 setting.fps.name = FPSを表示
setting.smoothcamera.name = スムーズなカメラ setting.smoothcamera.name = スムーズなカメラ
setting.vsync.name = 垂直同期 setting.vsync.name = 垂直同期
@@ -865,12 +930,12 @@ keybind.clear_building.name = 建築の取り消し
keybind.press = キーを押してください... keybind.press = キーを押してください...
keybind.press.axis = 軸またはキーを押してください... keybind.press.axis = 軸またはキーを押してください...
keybind.screenshot.name = スクリーンショット keybind.screenshot.name = スクリーンショット
keybind.toggle_power_lines.name = パワーレーザーの切り替え keybind.toggle_power_lines.name = 電線の表示の切り替え
keybind.toggle_block_status.name = ブロックの状態表示の切り替え keybind.toggle_block_status.name = ブロックの状態表示の切り替え
keybind.move_x.name = 左右移動 keybind.move_x.name = 左右移動
keybind.move_y.name = 上下移動 keybind.move_y.name = 上下移動
keybind.mouse_move.name = マウスを追う keybind.mouse_move.name = マウスを追う
keybind.pan.name = パン keybind.pan.name = 視点移動
keybind.boost.name = ブースト keybind.boost.name = ブースト
keybind.schematic_select.name = 地域の選択 keybind.schematic_select.name = 地域の選択
keybind.schematic_menu.name = 設計図メニュー keybind.schematic_menu.name = 設計図メニュー
@@ -905,10 +970,11 @@ keybind.shoot.name = ショット
keybind.zoom.name = ズーム keybind.zoom.name = ズーム
keybind.menu.name = メニュー keybind.menu.name = メニュー
keybind.pause.name = ポーズ keybind.pause.name = ポーズ
keybind.pause_building.name = 建築のポーズ/レジューム 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 = コンソール
@@ -935,17 +1001,24 @@ mode.custom = カスタムルール
rules.infiniteresources = 資源の無限化 rules.infiniteresources = 資源の無限化
rules.reactorexplosions = リアクターの爆発 rules.reactorexplosions = リアクターの爆発
rules.coreincinerates = 余剰アイテムの焼却
rules.schematic = 設計図を許可 rules.schematic = 設計図を許可
rules.wavetimer = ウェーブの自動進行 rules.wavetimer = ウェーブの自動進行
rules.waves = ウェーブ rules.waves = ウェーブ
rules.attack = アタックモード rules.attack = アタックモード
rules.buildai = AI 建築 rules.buildai = AI 建築
rules.aitier = AI 階級
rules.cleanupdeadteams = 敗北したチームの建設物を片付ける (PvP)
rules.corecapture = 破壊時にコアを奪取
rules.polygoncoreprotection = 多角形の建設禁止区域の設定
rules.enemyCheat = 敵(赤チーム)の資源の無限化 rules.enemyCheat = 敵(赤チーム)の資源の無限化
rules.blockhealthmultiplier = ブロックの体力倍率 rules.blockhealthmultiplier = ブロックの体力倍率
rules.blockdamagemultiplier = ブロックのダメージ倍率 rules.blockdamagemultiplier = ブロックのダメージ倍率
rules.unitbuildspeedmultiplier = ユニットの製造速度倍率 rules.unitbuildspeedmultiplier = ユニットの製造速度倍率
rules.unithealthmultiplier = ユニットの体力倍率 rules.unithealthmultiplier = ユニットの体力倍率
rules.unitdamagemultiplier = ユニットのダメージ倍率 rules.unitdamagemultiplier = ユニットのダメージ倍率
rules.unitcapvariable = コア数によってユニット上限を変動
rules.unitcap = ベースのユニット上限数
rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル) rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル)
rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒) rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒)
rules.buildcostmultiplier = 建設コストの倍率 rules.buildcostmultiplier = 建設コストの倍率
@@ -954,26 +1027,30 @@ rules.deconstructrefundmultiplier = ブロック破壊時の還元倍率
rules.waitForWaveToEnd = 敵が倒されるまでウェーブの進行を中断 rules.waitForWaveToEnd = 敵が倒されるまでウェーブの進行を中断
rules.dropzoneradius = 出現範囲の半径:[lightgray] (タイル) rules.dropzoneradius = 出現範囲の半径:[lightgray] (タイル)
rules.unitammo = ユニットは弾丸が必要 rules.unitammo = ユニットは弾丸が必要
rules.enemyteam = 敵チーム
rules.playerteam = プレイヤーチーム
rules.title.waves = ウェーブ rules.title.waves = ウェーブ
rules.title.resourcesbuilding = 資源 & 建設 rules.title.resourcesbuilding = 資源 & 建設
rules.title.enemy = rules.title.enemy =
rules.title.unit = ユニット rules.title.unit = ユニット
rules.title.experimental = 実験的なゲームプレイ rules.title.experimental = 実験的なゲームプレイ
rules.title.environment = 環境 rules.title.environment = 環境
rules.title.teams = チーム
rules.lighting = rules.lighting =
rules.enemyLights = Enemy Lights rules.enemyLights = 敵を発光させる
rules.fire = Fire rules.fire = 火災
rules.explosions = 爆発ダメージ rules.explosions = 爆発ダメージ
rules.ambientlight = 霧の色 rules.ambientlight = 霧の色
rules.weather = 気象 rules.weather = 気象
rules.weather.frequency = 頻度: rules.weather.frequency = 頻度:
rules.weather.always = Always rules.weather.always = 常時
rules.weather.duration = 継続時間: rules.weather.duration = 継続時間:
content.item.name = アイテム content.item.name = アイテム
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = ユニット content.unit.name = ユニット
content.block.name = ブロック content.block.name = ブロック
content.status.name = ステータス効果
content.sector.name = セクター content.sector.name = セクター
item.copper.name = item.copper.name =
@@ -992,6 +1069,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 = 石油
@@ -1023,6 +1101,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 = ガンマ
@@ -1031,7 +1114,6 @@ unit.reign.name = レイン
unit.vela.name = ヴェラ unit.vela.name = ヴェラ
unit.corvus.name = コーバス unit.corvus.name = コーバス
block.resupply-point.name = 補給ポイント
block.parallax.name = パララックス block.parallax.name = パララックス
block.cliff.name = block.cliff.name =
block.sand-boulder.name = 巨大な礫 block.sand-boulder.name = 巨大な礫
@@ -1083,6 +1165,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 = 雪氷
@@ -1094,12 +1177,13 @@ block.pine.name = 松の木
block.dirt.name = block.dirt.name =
block.dirt-wall.name = 泥の壁 block.dirt-wall.name = 泥の壁
block.mud.name = 汚泥 block.mud.name = 汚泥
block.white-tree-dead.name = 白い枯れた樹木 block.white-tree-dead.name = 枯れた白い樹木
block.white-tree.name = 白い樹木 block.white-tree.name = 白い樹木
block.spore-cluster.name = 胞子の房 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-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
@@ -1190,6 +1274,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 = フェーズパイプ
@@ -1220,7 +1305,6 @@ block.meltdown.name = メルトダウン
block.foreshadow.name = フォーシャドウ block.foreshadow.name = フォーシャドウ
block.container.name = コンテナー block.container.name = コンテナー
block.launch-pad.name = 発射台 block.launch-pad.name = 発射台
block.launch-pad-large.name = 大型発射台
block.segment.name = セグメント block.segment.name = セグメント
block.command-center.name = 司令塔 block.command-center.name = 司令塔
block.ground-factory.name = 陸軍工場 block.ground-factory.name = 陸軍工場
@@ -1232,14 +1316,20 @@ 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 = 加速ドーム
block.interplanetary-accelerator.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 = ブロック搬出機
block.interplanetary-accelerator.name = 惑星間加速器
block.switch.name = スイッチ block.switch.name = スイッチ
block.micro-processor.name = マイクロプロセッサー block.micro-processor.name = マイクロプロセッサー
@@ -1259,73 +1349,75 @@ team.green.name = グリーン
team.purple.name = パープル team.purple.name = パープル
hint.skip = スキップ hint.skip = スキップ
hint.desktopMove = [accent][[WASD][] を使い移動します。 hint.desktopMove = [accent][[WASD][]を使い移動します。
hint.zoom = [accent]マウスホイール[] でズームイン、ズームアウトをします。 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]ドリル[]を選択し、銅地域をクリックして配置します。
hint.placeDrill.mobile = 右下のメニューの \ue85e [accent]ドリル[] タブを選択し、 \uf870 [accent]ドリル[] を選択し、銅地域をタップして配置します。\n\n右下の \ue800 [accent]チェックマーク[] をタップして確認します。 hint.placeDrill.mobile = 右下のメニューの\ue85e [accent]ドリル[]タブを選択し、\uf870 [accent]ドリル[]を選択し、銅地域をタップして配置します。\n\n右下の\ue800 [accent]チェックマーク[]をタップして確認します。
hint.placeConveyor = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。 \ue814 [accent]運搬[] タブから、 \uf896 [accent]コンベアー[] を選択します。\n\n複数のコンベアーを配置するには、クリックしてドラッグします。\n[accent]マウスホイール[] により回転します。 hint.placeConveyor = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。\ue814 [accent]運搬[]タブから、\uf896 [accent]コンベアー[]を選択します。\n\n複数のコンベアーを配置するには、クリックしてドラッグします。\n[accent]マウスホイール[]により回転します。
hint.placeConveyor.mobile = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。 \ue814 [accent]運搬[] タブから、 \uf896 [accent]コンベアー[] を選択します。\n\n指を秒間押したままドラッグすると、複数のコンベアーを配置します。 hint.placeConveyor.mobile = コンベアーを使い、アイテムをドリルから他のブロックへ移動します。\ue814 [accent]運搬[]タブから、\uf896 [accent]コンベアー[]を選択します。\n\n指を秒間押したままドラッグすると、複数のコンベアーを配置します。
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]ハンマー[] をアクティブにして、タップしてブロックを壊します。\n\n指を秒間押したままドラッグすると、範囲選択が出来ます。 hint.breaking.mobile = 右下にある\ue817 [accent]ハンマー[]をアクティブにして、タップしてブロックを壊します。\n\n指を秒間押したままドラッグすると、範囲選択が出来ます。
hint.research = \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。 hint.blockInfo = [accent]建築メニュー[]でブロックを選択し、右側の[accent][[?][]ボタンを押すと、ブロックの情報が表示されます。
hint.research.mobile = \ue88c [accent]メニュー[] の \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。 hint.derelict = [accent]放棄[]され、すでに機能を失った古い基地建造物の残骸です。\n\nこれらは[accent]解体[]することにより、資源になります。
hint.unitControl = [accent][[左ctrl][] を押しながら [accent]クリック[] するとターレットや味方ユニットを操作できます。 hint.research = \ue875 [accent]研究[]ボタンを押して、新しいテクノロジーを研究します。
hint.unitControl.mobile = [accent][ダブルタップ[] すると味方ユニットやターレットを操作できます。 hint.research.mobile = \ue88c [accent]メニュー[]の\ue875 [accent]研究[]ボタンを押して、新しいテクノロジーを研究します。
hint.launch = 十分な資源を確保できたら、右下の \ue827 [accent]マップ[] から、近くのセクターを選択して [accent]発射[] できます。 hint.unitControl = [accent][[左ctrl][]を押しながら[accent]クリック[]するとターレットや味方ユニットを操作できます。
hint.launch.mobile = 十分な資源を確保できたら、 \ue88c [accent]メニュー[] の \ue827 [accent]マップ[] から、近くのセクターを選択して [accent]発射[] できます。 hint.unitControl.mobile = [accent][ダブルタップ[]すると味方ユニットやターレットを操作できます。
hint.schematicSelect = [accent][[F][] を押しながらドラッグして、コピー&ペーストするブロックを選択します。\n\n[accent][[ミドルクリック][] により、1つのブロックタイプをコピーします。 hint.launch = 十分な資源を確保できたら、右下の\ue827 [accent]マップ[]から、近くのセクターを選択して[accent]発射[]できます。
hint.conveyorPathfind = [accent][[左-Ctrl][] を押しながらコンベアーをドラッグすると、経路が自動生成されます。 hint.launch.mobile = 十分な資源を確保できたら、\ue88c [accent]メニュー[]の\ue827 [accent]マップ[]から、近くのセクターを選択して[accent]発射[]できます。
hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[] を有効にし、コンベアーをドラッグすると経路が自動生成します。 hint.schematicSelect = [accent][[F][]を押しながらドラッグして、コピー&ペーストするブロックを選択します。\n\n[accent][[ミドルクリック][]により、1つのブロックタイプをコピーします。
hint.boost = [accent][[左シフト][] を押したままにすると、操作中のユニットは障害物を飛び越えます。\n\n少数の地上ユニットのみがこのブースターを搭載しています。 hint.conveyorPathfind = [accent][[左-Ctrl][]を押しながらコンベアーをドラッグすると、経路が自動生成されます。
hint.command = [accent][[G][] を押して、近くの [accent]同様のタイプ[] のユニットと編隊を組みます。\n\n地上ユニットを指揮するには、まず別個の地上ユニットをコントロールする必要があります。 hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[]を有効にし、コンベアーをドラッグすると経路が自動生成します。
hint.command.mobile = [accent][[ダブルタップ][] すると、操作中のユニットは近くのユニットと編隊を組みます。 hint.boost = [accent][[左シフト][]を押したままにすると、操作中のユニットは障害物を飛び越えます。\n\n少数の地上ユニットのみがこのブースターを搭載しています。
hint.payloadPickup = [accent][[[] を押して、小さなブロックまたはユニットを格納します。 hint.command = [accent][[G][]を押して、近くの [accent]同様のタイプ[]のユニットと編隊を組みます。\n\n地上ユニットを指揮するには、まず別個の地上ユニットをコントロールする必要があります。
hint.payloadPickup.mobile = [accent]タップ&ホールド[] により、小さなブロックまたはユニットを格納します。 hint.command.mobile = [accent][[ダブルタップ][]すると、操作中のユニットは近くのユニットと編隊を組みます。
hint.payloadDrop = [accent]][] を押すと、積載物を降ろします。 hint.payloadPickup = [accent][[[]を押して、小さなブロックまたはユニットを格納します。
hint.payloadDrop.mobile = 空いている場所を [accent]タップ&ホールド[] して、積載物を降ろします。 hint.payloadPickup.mobile = [accent]タップ&ホールド[]により、小さなブロックまたはユニットを格納します。
hint.waveFire = [accent]ウェーブ[] ターレットは水を搬入すると、近くの火を自動的に消火します。 hint.payloadDrop = [accent]][]を押すと、積載物を降ろします。
hint.generator = \uf879 [accent]火力発電機[] 石炭を燃やし、隣接するブロックに電力を供給します。\n\n電力供給範囲は \uf87f [accent]電源ノード[]で拡張できます。 hint.payloadDrop.mobile = 空いている場所を[accent]タップ&ホールド[]して、積載物を降ろします。
hint.guardian = [accent]ガーディアン[] ユニットは装甲を搭載しています。[accent]銅[] や [accent]鉛[] などの弱い弾薬は [scarlet]効果がありません[]。\n\n強力なターレット、または \uf861デュオ/\uf859サルボー の弾薬に \uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください hint.waveFire = [accent]ウェーブ[]ターレットは水を搬入すると、近くの火を自動的に消火します
hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n  [accent]シャード[] コアの上に、  [accent]ファンデーション[] コアを置きます。近くに障害物がないことを確認してください hint.generator = \uf879 [accent]火力発電機[]石炭を燃やし、隣接するブロックに電力を供給します。\n\n電力供給範囲は\uf87f [accent]電源ノード[]で拡張できます
hint.presetLaunch = [accent]フローズン · フォレスト[] などの灰色の [accent]着陸ゾーンセクター[] には、どこからでも発射できます。近くの領土を確保する必要はありません。\n\nこのような [accent]数字のセクター[] は、 [accent]違います[] hint.guardian = [accent]ガーディアン[]ユニットは装甲を搭載しています。[accent]銅[]や[accent]鉛[]などの弱い弾薬は[scarlet]効果がありません[]。\n\n強力なターレット、または\uf861デュオ/\uf859サルボーの弾薬に\uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください
hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず [accent]破棄[]されます hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n  [accent]シャード[]コアの上に、  [accent]ファンデーション[]コアを置きます。近くに障害物がないことを確認してください
hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは [accent]あなたのセクター[] に移送されます。\n\nホストが行った新しい研究も引き継がれます hint.presetLaunch = [accent]フローズン · フォレスト[]などの灰色の[accent]着陸ゾーンセクター[]には、どこからでも発射できるため近くの領土を確保する必要はありません。\n\nしかし、このような[accent]数字のセクター[]では[accent]この限りではありません[]
hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず[accent]破棄[]されます。
hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは[accent]あなたのセクター[]に移送されます。\n\nホストが行った新しい研究も引き継がれます。
item.copper.description = 便利な鉱石です。様なブロックの材料として幅広く使われています。 item.copper.description = 便利な鉱石です。\n多様なブロックの材料として幅広く使われています。
item.copper.details = セルプロに豊富な金属補強しない限り構造的に弱い。 item.copper.details = セルプロに豊富な金属です。\n補強しない限り構造的に弱いです
item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。 item.lead.description = 一般的で手軽な鉱石です。\n機械や液体輸送ブロックなどに使われます。
item.lead.details = 高密度不活性。バッテリーによく利用され。\nート: 生物学的に生命に有毒である可能性があります。このあたりには生命が多く残っていません。 item.lead.details = 高密度不活性です。バッテリーによく利用されます。\nート: 生物学的に有毒である可能性があります。このあたりには生命があまり見られません。
item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。 item.metaglass.description = とても頑丈な強化ガラスです。\n液体の輸送やタンク、工場などに幅広く使われています。
item.graphite.description = 弾薬や絶縁体として利用されています。 item.graphite.description = 弾薬や絶縁体として利用されています。
item.sand.description = 合金や融剤など広く使用されている一般的な材料です。 item.sand.description = 合金や融剤など広く使用されている一般的な材料です。
item.coal.description = 一般的で有用な燃料です。 item.coal.description = 一般的で有用な燃料です。
item.coal.details = 化石化し植物のようで利用方法が確立されるはるか前に形成されました。 item.coal.details = 化石化し植物のようで\n利用方法が確立されるはるか前に形成されました。
item.titanium.description = 希少で非常に軽量な金属です。液体輸送やドリル、航空機などで使われます。 item.titanium.description = 希少で非常に軽量な金属です。\n液体輸送やドリル、航空機などで使われます。
item.thorium.description = 放射性を持つ高密度な金属です。建造物の支えや核燃料として使われます。 item.thorium.description = 放射性を持つ高密度な金属です。\n建造物の支えや核燃料として使われます。
item.scrap.description = 昔の建造物やユニットの残骸です。様々な種類の金属が微量に含まれています。 item.scrap.description = 昔の建造物やユニットの残骸です。\n多種多様の金属が微量に含まれています。
item.scrap.details = 古い建造物やユニットの残骸です。 item.scrap.details = 古い建造物やユニットの残骸です。
item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。 item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。
item.plastanium.description = 軽量で伸縮性のある材料です。高度な航空機や分散型の弾薬として使用されます。 item.plastanium.description = 軽量で伸縮性のある材料です。\n高度な航空機や分散型の弾薬として使用されます。
item.phase-fabric.description = 極めて軽量な素材です。高度な機械や自己修復技術に使用されます。 item.phase-fabric.description = 極めて軽量な素材です。\n高度な機械や自己修復技術に使用されます。
item.surge-alloy.description = 電気的特性を持った高度な合金です。 item.surge-alloy.description = 電気的特性を持った高度な合金です。
item.spore-pod.description = 石油や爆薬、燃料への転換として使用されます。 item.spore-pod.description = 石油や爆薬、燃料への転換として使用されます。
item.spore-pod.details = 合成生命体と思われる胞子です。他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。 item.spore-pod.details = 人工生命体と思われる胞子です。\n他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。
item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。 item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。\n胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。
item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。 item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。
liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。 liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。
liquid.slag.description = 々な種類の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。 liquid.slag.description = 多種多様の鉱石が混ざり合っています。それぞれの鉱石に分類するか、噴射する武器として使用されます。
liquid.oil.description = 高度な材料生産で使用される液体です。 燃料として石炭に変換したり、武器として噴霧して発火させることができます。 liquid.oil.description = 高度な材料生産で使用される液体です。 燃料として石炭に変換したり、武器として噴霧して発火させることができます。
liquid.cryofluid.description = 水とチタニウムから作られる不活性で非腐食性の液体です。 非常に高い熱容量を持っているため、冷却に使用されます。 liquid.cryofluid.description = 水とチタニウムから作られる不活性で非腐食性の液体です。 非常に高い熱容量を持っているため、冷却に使用されます。
block.resupply-point.description = 近くのユニットに銅の弾薬を補給します。エネルギーを必要とするユニットとは互換性がありません。 block.derelict =  [lightgray]放棄
block.armored-conveyor.description = チタンコンベアーと同じ速度でアイテムを輸送することができ、耐久性に優れています。\nまた、コンベアー以外による側面への入力を受け入れません。 block.armored-conveyor.description = チタンコンベアーと同じ速度でアイテムを輸送することができ、耐久性に優れています。\nまた、コンベアー以外による側面への入力を受け入れません。
block.illuminator.description = 電力が必要な光源です。 block.illuminator.description = 電力が必要な光源です。
block.message.description = メッセージを保存し、仲間間の通信に使用します。 block.message.description = メッセージを保存し、仲間間の通信に使用します。
@@ -1339,8 +1431,8 @@ block.alloy-smelter.description = チタンや鉛、シリコン、銅からサ
block.cryofluid-mixer.description = 水とチタンから冷却に効率的な冷却水を製造します。 block.cryofluid-mixer.description = 水とチタンから冷却に効率的な冷却水を製造します。
block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。 block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。
block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを製造します。 block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを製造します。
block.melter.description = 石を熱で溶かして溶岩を生成します。 block.melter.description = 石を熱で溶かしてスラグを生成します。
block.separator.description = 石を水圧で砕き、石に含まれる様々な鉱石を回収します。 block.separator.description = スラグを分離して、多様な鉱石を回収します。
block.spore-press.description = 胞子ポッドを石油に圧縮します。 block.spore-press.description = 胞子ポッドを石油に圧縮します。
block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。 block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。
block.coal-centrifuge.description = 石油を石炭へ加工します。 block.coal-centrifuge.description = 石油を石炭へ加工します。
@@ -1351,14 +1443,16 @@ block.item-source.description = アイテムを無限に搬出します。サン
block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスモードのみ使用できます。 block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスモードのみ使用できます。
block.liquid-source.description = 液体を無限に搬出します。サンドボックスモードのみ使用できます。 block.liquid-source.description = 液体を無限に搬出します。サンドボックスモードのみ使用できます。
block.liquid-void.description = 液体を破棄できます。サンドボックスモードのみ使用できます。 block.liquid-void.description = 液体を破棄できます。サンドボックスモードのみ使用できます。
block.payload-source.description = ペイロードを無限に搬出します。サンドボックスモードのみ使用できます。
block.payload-void.description = ペイロードを破棄できます。サンドボックスモードのみ使用できます。
block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。 block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。
block.titanium-wall-large.description = 適度に強力な大型防壁ブロックです。\n中程度の攻撃から保護します。 block.titanium-wall-large.description = 適度に強力な大型防壁ブロックです。\n中程度の攻撃から保護します。
block.plastanium-wall.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別な壁です。 block.plastanium-wall.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別な壁です。
block.plastanium-wall-large.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別で大型な壁です。 block.plastanium-wall-large.description = 電気アークを吸収し、電源ノードの自動接続をブロックする特別で大型な壁です。
block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。 block.thorium-wall.description = より強固に強化された防壁ブロックです。
block.thorium-wall-large.description = 強化された大型防壁ブロックです。\n敵からの保護により強固です。 block.thorium-wall-large.description = より強固に強化された大型防壁ブロックです。
block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。 block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
block.phase-wall-large.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。 block.phase-wall-large.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
block.surge-wall.description = 最も硬い防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。 block.surge-wall.description = 最も硬い防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。
@@ -1376,21 +1470,21 @@ block.plastanium-conveyor.description = アイテムをまとめて輸送する
block.junction.description = 十字に交差したコンベアーをそれぞれ前方に搬出します。コンベアーで複雑な構造を組み立てるときに便利です。 block.junction.description = 十字に交差したコンベアーをそれぞれ前方に搬出します。コンベアーで複雑な構造を組み立てるときに便利です。
block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。 block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。
block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。 block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。
block.sorter.description = アイテムを分別して搬出します。設定したアイテムは通過させます。他のアイテムが搬入されると側面にアイテムを搬出します。 block.sorter.description = アイテムを分別して搬出します。設定したアイテムは前面へ搬出します。他のアイテムが搬入されると側面に搬出します。
block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出されます。他のアイテムが搬入されるとアイテムを通過させます。通常のルーターと反対の動作をします。 block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出ます。他のアイテムが搬入されると前面へ搬出します。
block.router.description = 搬入したアイテムをほかの3方向均等に搬出します。一つの資源から複数に分ける際などに使われます。 block.router.description = 搬入したアイテムをほかの3方向均等に搬出します。一つの資源から複数に分ける際などに使われます。
block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出によって詰まる可能性があるためおすすめできません。 block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出アイテムにより詰まる可能性があるためおすすめできません。
block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向均等に分けて搬出します。 block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向均等に分けて搬出します。
block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合左右にアイテムを搬出します。 block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合左右にアイテムを搬出します。
block.underflow-gate.description = オーバーフローゲートの反対の機能を持ちます。 左右に出力できない場合、前面に出力します。 block.underflow-gate.description = オーバーフローゲートの反対の機能を持ちます。 左右に出力できない場合、前面に出力します。
block.mass-driver.description = 長距離の輸送が可能な上位アイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。 block.mass-driver.description = 長距離の輸送が可能な上位アイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。
block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。 block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。
block.rotary-pump.description = 高度なポンプです。電力を使用して2倍速く搬出することができます。 block.rotary-pump.description = 高度なポンプです。電力が必要ですが、より多く搬出することができます。
block.thermal-pump.description = 最高性能のポンプです。 block.thermal-pump.description = 最高性能のポンプです。
block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。 block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。
block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。 block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速くたくさんの液体を輸送することができます。
block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。 block.plated-conduit.description = パルスパイプと同じ速度で液体を輸送することができ、耐久性に優れています。\nまた、パイプ以外による側面への入力を受け入れません。
block.liquid-router.description = 搬入したアイテムをほかの3方向均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。 block.liquid-router.description = 搬入したアイテムをほかの3方向均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。
block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。 block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。
block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。 block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。 block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。
@@ -1429,7 +1523,7 @@ block.container.description = 各種類のアイテムを少量ずつ保管し
block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。 block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。
block.launch-pad.description = 離脱することなく、アイテムを回収することができます。 block.launch-pad.description = 離脱することなく、アイテムを回収することができます。
block.duo.description = 小さく安価なターレットです。 block.duo.description = 小さく安価なターレットです。
block.scatter.description = 中規模の対空型ターレットです。敵に鉛やスクラップの塊、メタガラスを分散するように発射します。 block.scatter.description = 中規模の対空型ターレットです。敵に鉛やスクラップの塊、メタガラスを分散するように発射します。
block.scorch.description = 近くの地上の敵を燃やします。近距離だと非常に効果的です。 block.scorch.description = 近くの地上の敵を燃やします。近距離だと非常に効果的です。
block.hail.description = 小型の砲撃型ターレットです。 block.hail.description = 小型の砲撃型ターレットです。
block.wave.description = バブルの連射攻撃をする中型のターレットです。 block.wave.description = バブルの連射攻撃をする中型のターレットです。
@@ -1442,7 +1536,7 @@ block.ripple.description = 同時に複数ショットを発射する大型タ
block.cyclone.description = 大型の連射型ターレットです。 block.cyclone.description = 大型の連射型ターレットです。
block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。 block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。
block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。 block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。
block.foreshadow.description = 一つのターゲットを狙う高火力、長射程のタレットです。 block.foreshadow.description = 一つのターゲットを狙う高火力、長射程のタレットです。最大体力が高い敵を優先します。
block.repair-point.description = 近くの負傷したユニットを修復します。 block.repair-point.description = 近くの負傷したユニットを修復します。
block.segment.description = 射程内に入ってきた弾丸を破壊します。レーザー弾は破壊できません。 block.segment.description = 射程内に入ってきた弾丸を破壊します。レーザー弾は破壊できません。
block.parallax.description = 航空ユニットを引き込むビームを発射し、その過程でターゲットにダメージを与えます。 block.parallax.description = 航空ユニットを引き込むビームを発射し、その過程でターゲットにダメージを与えます。
@@ -1469,22 +1563,24 @@ block.memory-bank.description = より多くの情報を格納します。
block.logic-display.description = プロセッサからの任意のグラフィックを表示します。 block.logic-display.description = プロセッサからの任意のグラフィックを表示します。
block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。 block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。
block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。 block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。
block.repair-turret.description = 範囲内の損傷したブロックを近い順に継続的に修復します。オプションで冷却液を活用できます。
block.payload-propulsion-tower.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 = 近くの敵に電撃弾を発射します。
unit.reign.description = 近くの敵に大口径の貫通弾を発射します。 unit.reign.description = 近くの敵に大口径の貫通弾を発射します。
unit.nova.description = 敵にダメージを与え、味方の建造物を修復する光線を発射します。飛行可能。 unit.nova.description = 敵にダメージを与え、味方の建造物を修復する光線を発射します。\n飛行可能。
unit.pulsar.description = 敵にダメージを与え、味方の建造物を修復する電撃攻撃を行います。飛行可能。 unit.pulsar.description = 敵にダメージを与え、味方の建造物を修復する電撃攻撃を行います。\n飛行可能。
unit.quasar.description = 敵にダメージを与え、味方の建造物を修復するレーザー弾を発射します。飛行可能。シールド形成。 unit.quasar.description = 敵にダメージを与え、味方の建造物を修復するレーザー弾を発射します。\n飛行可能。シールド形成。
unit.vela.description = 敵にダメージを与え、火災を引き起こし、味方の建造物を修復するレーザー焼夷弾を発射します。飛行可能。 unit.vela.description = 敵にダメージを与え、火災を引き起こし、味方の建造物を修復するレーザー焼夷弾を発射します。\n飛行可能。
unit.corvus.description = 敵にダメージを与え、味方の建造物を修復する大火力のレーザー弾を発射します。ほとんどの地形を無視できます。 unit.corvus.description = 敵にダメージを与え、味方の建造物を修復する大火力のレーザー弾を発射します。\nほとんどの地形を無視できます。
unit.crawler.description = 敵に向かって走り自爆し、大爆発を起こす。 unit.crawler.description = 敵に向かって走り自爆し、大爆発を起こす。
unit.atrax.description = 地上目標を消耗させるスラグ弾を発射します。ほとんどの地形を無視できます。 unit.atrax.description = 地上目標を消耗させるスラグ弾を発射します。\nほとんどの地形を無視できます。
unit.spiroct.description = 敵に吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。ほとんどの地形を無視できます。 unit.spiroct.description = 敵に吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。\nほとんどの地形を無視できます。
unit.arkyid.description = 敵に大口径の吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。ほとんどの地形を無視できます。 unit.arkyid.description = 敵に大口径の吸収レーザービームを発射し、与えたダメージを自らの体力として吸収します。\nほとんどの地形を無視できます。
unit.toxopid.description = 敵に大口径の電撃クラスターシェルと貫通レーザーを発射します。ほとんどの地形を無視できます。 unit.toxopid.description = 敵に大口径の電撃クラスターシェルと貫通レーザーを発射します。\nほとんどの地形を無視できます。
unit.flare.description = 近くの地上目標に標準的な弾丸を発射します。 unit.flare.description = 近くの地上目標に標準的な弾丸を発射します。
unit.horizon.description = 地上目標にクラスター爆弾を投下します。 unit.horizon.description = 地上目標にクラスター爆弾を投下します。
unit.zenith.description = 近くの敵にミサイルを一斉発射します。 unit.zenith.description = 近くの敵にミサイルを一斉発射します。
@@ -1492,14 +1588,19 @@ unit.antumbra.description = 近くの敵に弾幕のように弾丸を連射し
unit.eclipse.description = 近くの敵に2門の貫通レーザーと高射砲の弾幕を発射します。 unit.eclipse.description = 近くの敵に2門の貫通レーザーと高射砲の弾幕を発射します。
unit.mono.description = 銅と鉛を自動的に採掘し、コアに移送します。 unit.mono.description = 銅と鉛を自動的に採掘し、コアに移送します。
unit.poly.description = 破壊された建造物を自動的に再構築し、さらに建設の支援を行います。 unit.poly.description = 破壊された建造物を自動的に再構築し、さらに建設の支援を行います。
unit.mega.description = 損傷した建造物を自動的に修復します。小型のブロックと地上ユニットを運搬できます。 unit.mega.description = 損傷した建造物を自動的に修復します。\n小型のブロックと地上ユニットを運搬できます。
unit.quad.description = 地上目標に大型爆弾を投下し、味方の建造物は修復し、敵にはダメージを与えます。中型の地上ユニットを運搬できます。 unit.quad.description = 地上目標に大型爆弾を投下し、味方の建造物は修復し、敵にはダメージを与えます。\n中型の地上ユニットを運搬できます。
unit.oct.description = シールド形成と修復を行い、付近の味方を守ります。ほとんどの地上ユニットを運搬できます。 unit.oct.description = シールド形成と修復を行い、付近の味方を守ります。\nほとんどの地上ユニットを運搬できます。
unit.risso.description = 近くの敵にミサイルと弾丸の弾幕を発射します。 unit.risso.description = 近くの敵にミサイルと弾丸の弾幕を発射します。
unit.minke.description = 近くの地上目標に砲弾と標準的な弾丸を発射します。 unit.minke.description = 近くの地上目標に砲弾と標準的な弾丸を発射します。
unit.bryde.description = 敵に長距離砲弾とミサイルを発射します。 unit.bryde.description = 敵に長距離砲弾とミサイルを発射します。
unit.sei.description = 敵にミサイルと徹甲弾の弾幕を発射します。 unit.sei.description = 敵にミサイルと徹甲弾の弾幕を発射します。
unit.omura.description = 敵に長距離かつ貫通性能を持つレールガンボルトを発射します。フレアユニットを生産します。 unit.omura.description = 敵に長距離かつ貫通性能を持つレールガンボルトを発射します。\nフレアユニットを生産します。
unit.alpha.description = シャードコアを敵から守ります。建造物を建築します。 unit.alpha.description = シャードコアを敵から守ります。\n建造物を建築します。
unit.beta.description = ファンデーションコアを敵から守ります。建造物を建築します。 unit.beta.description = ファンデーションコアを敵から守ります。\n建造物を建築します。
unit.gamma.description = ニュークリアスコアを敵から守ります。建造物を建築します。 unit.gamma.description = ニュークリアスコアを敵から守ります。\n建造物を建築します。
unit.retusa.description = 近接地雷を配置します。\n味方ユニットを修復します。
unit.oxynoe.description = 建造物修復火炎放射を発射します。敵にはダメージを与えます。\n地点防空タレットによって敵の弾丸を撃ち落とします。
unit.cyerce.description = 敵に追尾クラスターミサイルを発射します。\n味方ユニットを修復します。
unit.aegires.description = エネルギーフィールド内の全ての敵ユニットと建造物には電撃を放ち、全ての味方ユニットには修復効果を与えます。
unit.navanax.description = 爆発性のEMP弾を発射し、敵の電力系統には重大な損傷を与え、味方の建造物は修復します。\n4門の自律型レーザータレットで近くの敵を溶かします。

View File

@@ -37,15 +37,15 @@ load.scripts = 스크립트
be.update = 새로운 Bleeding Edge 버전 사용 가능: be.update = 새로운 Bleeding Edge 버전 사용 가능:
be.update.confirm = 지금 내려받고 다시 시작하시겠습니까? be.update.confirm = 지금 내려받고 다시 시작하시겠습니까?
be.updating = 업데이트 중…. be.updating = 업데이트 중….
be.ignore = 무시 be.ignore = 무시하기
be.noupdates = 업데이트가 없습니다. be.noupdates = 업데이트가 없습니다.
be.check = 업데이트 확인 be.check = 업데이트 확인하기
mods.browser = 모드 탐색기 mods.browser = 모드 탐색기
mods.browser.selected = 선택된 모드 mods.browser.selected = 선택된 모드
mods.browser.add = 설치 mods.browser.add = 설치
mods.browser.reinstall = 재설치 mods.browser.reinstall = 재설치
mods.github.open = 레포지토리 보기 mods.github.open = 저장소 보기
mods.browser.sortdate = 최근 업데이트 mods.browser.sortdate = 최근 업데이트
mods.browser.sortstars = 추천(스타) 수 mods.browser.sortstars = 추천(스타) 수
@@ -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 = 게임 불러오기
@@ -122,6 +122,7 @@ committingchanges = 바뀐 점 적용
done = 완료 done = 완료
feature.unsupported = 기기가 이 기능을 지원하지 않습니다. feature.unsupported = 기기가 이 기능을 지원하지 않습니다.
mods.initfailed = [red]⚠[]이전 민더스트리 실행과정에서 모드를 초기화하지 못했습니다. 잘못된 모드로 인해 발생한 것일 수 있습니다.\n\n 게임 충돌 무한반복을 막기 위해, [red]모든 모드가 비활성화되었습니다.[]\n\n이 시스템을 비활성화하려면, [accent]설정->게임->로딩 중 충돌 시 모드 비활성화[]설정을 끄세요.
mods = 모드 mods = 모드
mods.none = [lightgray]모드를 찾을 수 없습니다! mods.none = [lightgray]모드를 찾을 수 없습니다!
mods.guide = 모드 제작 가이드 mods.guide = 모드 제작 가이드
@@ -139,7 +140,7 @@ mod.disable = 비활성화
mod.content = 콘텐츠: mod.content = 콘텐츠:
mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다.
mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0} mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0}
mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion: 105 이상이 아님) mod.outdated = [scarlet]6.0 버전과 호환되지 않음 (minGameVersion: 105 이상이 아님)
mod.missingdependencies = [scarlet]누락된 필요 모드: {0} mod.missingdependencies = [scarlet]누락된 필요 모드: {0}
mod.erroredcontent = [scarlet]콘텐츠 오류 mod.erroredcontent = [scarlet]콘텐츠 오류
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함. mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함.
@@ -214,6 +215,7 @@ hosts.none = [lightgray]LAN 게임을 찾을 수 없습니다!
host.invalid = [scarlet]서버에 연결할 수 없습니다! host.invalid = [scarlet]서버에 연결할 수 없습니다!
servers.local = 로컬 서버 servers.local = 로컬 서버
servers.local.steam = 공개 서버 & 로컬 서버
servers.remote = 원격 서버 servers.remote = 원격 서버
servers.global = 커뮤니티 서버 servers.global = 커뮤니티 서버
@@ -315,7 +317,7 @@ data.invalid = 유효한 게임 데이터가 아닙니다.
data.import.confirm = 외부 데이터를 가져오면 현재 게임 데이터를 [scarlet]모두[] 덮어쓰게 됩니다.\n[accent]이 작업은 취소할 수 없습니다![]\n\n데이터를 가져오면 게임이 즉시 종료됩니다. data.import.confirm = 외부 데이터를 가져오면 현재 게임 데이터를 [scarlet]모두[] 덮어쓰게 됩니다.\n[accent]이 작업은 취소할 수 없습니다![]\n\n데이터를 가져오면 게임이 즉시 종료됩니다.
quit.confirm = 정말로 종료하시겠습니까? quit.confirm = 정말로 종료하시겠습니까?
loading = [accent]불러오는중... loading = [accent]불러오는중...
reloading = [accent]모드 새로고침하는중... downloading = [accent]다운로드중...
saving = [accent]저장중... saving = [accent]저장중...
respawn = [accent][[{0}][] 키를 눌러 코어에서 부활 respawn = [accent][[{0}][] 키를 눌러 코어에서 부활
cancelbuilding = [accent][[{0}][] 키를 눌러 건설 계획을 초기화 cancelbuilding = [accent][[{0}][] 키를 눌러 건설 계획을 초기화
@@ -343,9 +345,9 @@ custom = 사용자 정의
builtin = 내장 builtin = 내장
map.delete.confirm = 정말로 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! map.delete.confirm = 정말로 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다!
map.random = [accent]무작위 맵 map.random = [accent]무작위 맵
map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [accent]주황색[] 코어를 맵에 추가하세요. map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 편집기에서 [#{0}]{1}[] 코어를 맵에 추가하세요.
map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]주황색 팀이 아닌[] 코어를 추가하세요. map.nospawn.pvp = 이 맵에는 적 플레이어가 생성될 코어가 없습니다! 편집기에서 [royal]주황색 팀이 아닌[] 코어를 추가하세요.
map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적 코어가 없습니다! 편집기에서 [royal]빨간색[] 코어들을 맵에 추가하세요. map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적 코어가 없습니다! 편집기에서 [#{0}]{1}[] 코어들을 맵에 추가하세요.
map.invalid = 맵 로드 오류: 맵 파일이 손상되었거나 잘못된 파일입니다. map.invalid = 맵 로드 오류: 맵 파일이 손상되었거나 잘못된 파일입니다.
workshop.update = 아이템 업데이트 workshop.update = 아이템 업데이트
workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생했습니다: {0} workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생했습니다: {0}
@@ -522,7 +524,7 @@ mapeditor = 맵 편집기
abandon = 포기하기 abandon = 포기하기
abandon.text = 이 지역과 모든 자원이 적에게 넘어갑니다. abandon.text = 이 지역과 모든 자원이 적에게 넘어갑니다.
locked = 잠김 locked = 잠김
complete = [lightgray]해금 조건 : complete = [lightgray]해금 조건:
requirement.wave = {1} 지역에서 {0}단계 달성 requirement.wave = {1} 지역에서 {0}단계 달성
requirement.core = {0} 지역에서 적 코어를 파괴 requirement.core = {0} 지역에서 적 코어를 파괴
requirement.research = {0} 연구 requirement.research = {0} 연구
@@ -537,14 +539,15 @@ configure = 초기자원 설정
loadout = 출격 loadout = 출격
resources = 자원 resources = 자원
bannedblocks = 금지된 블록들 bannedblocks = 금지된 블록들
bannedunits = 금지된 유닛들
addall = 모두 추가 addall = 모두 추가
launch.from = 출격 출발지 : [accent]{0} launch.from = 출격 출발지: [accent]{0}[]
launch.destination = 목적지: {0} launch.destination = 목적지: {0}
configure.invalid = 해당 값은 0에서 {0} 사이의 숫자여야 합니다. configure.invalid = 해당 값은 0에서 {0} 사이의 숫자여야 합니다.
add = 추가... add = 추가...
guardian = 수호자 guardian = 수호자
connectfail = [scarlet]연결 오류:\n\n[accent]{0} connectfail = [scarlet]연결 오류:[]\n\n[][accent]{0}[]
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요? error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
error.invalidaddress = 잘못된 주소입니다. error.invalidaddress = 잘못된 주소입니다.
error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하세요. error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하세요.
@@ -561,7 +564,9 @@ weather.sandstorm.name = 모래 폭풍
weather.sporestorm.name = 포자 폭풍 weather.sporestorm.name = 포자 폭풍
weather.fog.name = 안개 weather.fog.name = 안개
sectors.unexplored = [lightgray]미개척지 sectorlist = 지역 목록
sectorlist.attacked = {0} 공격받는 중
sectors.unexplored = [lightgray]미개척지[]
sectors.resources = 자원: sectors.resources = 자원:
sectors.production = 생산량: sectors.production = 생산량:
sectors.export = 수출량: sectors.export = 수출량:
@@ -573,20 +578,20 @@ sectors.stored = 저장량:
sectors.resume = 재개 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}% 손상됨[][]
sectors.survives = [accent]{0} 단계 이상 버티세요. sectors.survives = [accent]{0} 단계 이상 버티세요.[]
sectors.go =진입 sectors.go =진입
sector.curcapture = 지역 점령됨 sector.curcapture = 지역 점령됨
sector.curlost = 지역 잃음 sector.curlost = 지역 잃음
sector.missingresources = [scarlet]자원 부족 sector.missingresources = [scarlet]자원 부족[]
sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다! 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 = 아이콘 바꾸기 sector.changeicon = 아이콘 바꾸기
threat.low = 낮음 threat.low = 낮음
@@ -634,7 +639,7 @@ 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 = 질척해짐
@@ -645,8 +650,9 @@ 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 = 멈춤
status.boss.name = 수호자
settings.language = 언어 settings.language = 언어
settings.data = 게임 데이터 settings.data = 게임 데이터
@@ -659,25 +665,25 @@ settings.sound = 소리
settings.graphics = 그래픽 settings.graphics = 그래픽
settings.cleardata = 게임 데이터 초기화 settings.cleardata = 게임 데이터 초기화
settings.clear.confirm = 정말로 이 데이터를 지우시겠습니까?\n되돌릴 수 없습니다! settings.clear.confirm = 정말로 이 데이터를 지우시겠습니까?\n되돌릴 수 없습니다!
settings.clearall.confirm = [scarlet]경고![]\n이 작업은 저장된 맵, 맵파일, 잠금 해제된 목록과 조작키 설정, 그리고 모든 데이터를 삭제합니다.\n확인 버튼을 다시 눌러 모든 데이터를 삭제하고 게임에서 나갑니다. settings.clearall.confirm = [scarlet]경고![]\n이 작업은 저장된 맵, 맵파일, 잠금 해제된 목록과 조작키 설정, 그리고 모든 데이터를 삭제합니다.\n확인 버튼을 다시 눌러 모든 데이터를 삭제하고 게임에서 나갑니다.[]
settings.clearsaves.confirm = 정말로 모든 저장된 파일들을 삭제하시겠습니까? settings.clearsaves.confirm = 정말로 모든 저장된 파일들을 삭제하시겠습니까?
settings.clearsaves = 저장 초기화 settings.clearsaves = 저장 초기화
settings.clearresearch = 연구 초기화 settings.clearresearch = 연구 초기화
settings.clearresearch.confirm = 정말로 모든 연구를 삭제하시겠습니까? settings.clearresearch.confirm = 정말로 모든 연구를 삭제하시겠습니까?
settings.clearcampaignsaves = 캠페인 맵 초기화 settings.clearcampaignsaves = 캠페인 맵 초기화
settings.clearcampaignsaves.confirm = 정말로 캠페인을 초기화하시겠습니까? settings.clearcampaignsaves.confirm = 정말로 캠페인을 초기화하시겠습니까?
paused = [accent]< 일시정지 > paused = [accent]< 일시정지 >[]
clear = 초기화 clear = 초기화
banned = [scarlet]금지됨 banned = [scarlet]금지됨
unsupported.environment = [scarlet]지원되지 않는 환경 unsupported.environment = [scarlet]지원되지 않는 환경[]
yes = O yes = O
no = X no = X
info.title = 정보 info.title = 정보
error.title = [scarlet]오류가 발생했습니다 error.title = [scarlet]오류가 발생했습니다[]
error.crashtitle = 오류가 발생했습니다 error.crashtitle = 오류가 발생했습니다
unit.nobuild = [scarlet]건설 불가 unit.nobuild = [scarlet]건설 불가[]
lastaccessed = [lightgray]마지막 접근: {0} lastaccessed = [lightgray]마지막 접근: {0}[]
block.unknown = [lightgray]??? block.unknown = [lightgray]???[]
stat.showinmap = <맵을 먼저 불러와야 합니다> stat.showinmap = <맵을 먼저 불러와야 합니다>
stat.description = 특성 stat.description = 특성
@@ -786,23 +792,23 @@ bar.power = 전력
bar.progress = 건설 진행도 bar.progress = 건설 진행도
bar.input = 입력 bar.input = 입력
bar.output = 출력 bar.output = 출력
bar.strength = [stat]{0}[lightgray]x 치료 속도 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.frags = [stat]{0}[lightgray]개 파편 탄환: bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][]
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]번 관통 bullet.pierce = [stat]{0}[lightgray]번 관통[][]
bullet.infinitepierce = [stat]관통 bullet.infinitepierce = [stat]관통[]
bullet.healpercent = [stat]{0}[lightgray]% 회복 bullet.healpercent = [stat]{0}[lightgray]% 회복[][]
bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수 bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수[][]
bullet.reload = [stat]{0}[lightgray]배 발사 속도 bullet.reload = [stat]{0}[lightgray]배 발사 속도[][]
unit.blocks = 블록 unit.blocks = 블록
unit.blockssquared = 블록² unit.blockssquared = 블록²
@@ -833,13 +839,13 @@ category.items = 자원
category.crafting = 입력/출력 category.crafting = 입력/출력
category.function = 기능 category.function = 기능
category.optional = 선택적 향상 category.optional = 선택적 향상
setting.skipcoreanimation.name = 코어 발사/착륙 애니메이션 건너뛰기
setting.landscape.name = 가로화면 잠금 setting.landscape.name = 가로화면 잠금
setting.shadows.name = 그림자 setting.shadows.name = 그림자
setting.blockreplace.name = 자동 블록 제안 setting.blockreplace.name = 자동 블록 제안
setting.linear.name = 선형 필터링 setting.linear.name = 선형 필터링
setting.hints.name = 힌트 표시 setting.hints.name = 힌트 표시
setting.logichints.name = 로직 힌트 표시 setting.logichints.name = 로직 힌트 표시
setting.flow.name = 자원 흐름량 표시
setting.backgroundpause.name = 백그라운드에서 일시정지 setting.backgroundpause.name = 백그라운드에서 일시정지
setting.buildautopause.name = 건설 자동 일시정지 setting.buildautopause.name = 건설 자동 일시정지
setting.doubletapmine.name = 연속 터치로 채광 setting.doubletapmine.name = 연속 터치로 채광
@@ -858,9 +864,9 @@ setting.uiscale.name = UI 스케일링
setting.uiscale.description = 적용하려면 재시작이 필요합니다. setting.uiscale.description = 적용하려면 재시작이 필요합니다.
setting.swapdiagonal.name = 항상 대각선 배치 setting.swapdiagonal.name = 항상 대각선 배치
setting.difficulty.training = 훈련 setting.difficulty.training = 훈련
setting.difficulty.easy = 무난 setting.difficulty.easy = 쉬움
setting.difficulty.normal = 보통 setting.difficulty.normal = 보통
setting.difficulty.hard = 혼돈 setting.difficulty.hard = 어려움
setting.difficulty.insane = 박멸 setting.difficulty.insane = 박멸
setting.difficulty.name = 난이도: setting.difficulty.name = 난이도:
setting.screenshake.name = 화면 흔들림 setting.screenshake.name = 화면 흔들림
@@ -874,6 +880,7 @@ setting.seconds = {0} 초
setting.milliseconds = {0} 밀리초 setting.milliseconds = {0} 밀리초
setting.fullscreen.name = 전체 화면 setting.fullscreen.name = 전체 화면
setting.borderlesswindow.name = 테두리 없는 창 모드 setting.borderlesswindow.name = 테두리 없는 창 모드
setting.borderlesswindow.name.windows = 테두리 없는 전체화면
setting.borderlesswindow.description = 적용하려면 재시작이 필요할 수도 있습니다. setting.borderlesswindow.description = 적용하려면 재시작이 필요할 수도 있습니다.
setting.fps.name = FPS와 핑 표시 setting.fps.name = FPS와 핑 표시
setting.smoothcamera.name = 부드러운 시점 setting.smoothcamera.name = 부드러운 시점
@@ -997,6 +1004,7 @@ rules.wavetimer = 시간 제한이 있는 단계
rules.waves = 단계 rules.waves = 단계
rules.attack = 공격 모드 rules.attack = 공격 모드
rules.buildai = AI 건설 rules.buildai = AI 건설
rules.aitier = AI 등급
rules.cleanupdeadteams = 패배한 팀 건물 정리하기 (PvP) rules.cleanupdeadteams = 패배한 팀 건물 정리하기 (PvP)
rules.corecapture = 코어 파괴 시 점령 rules.corecapture = 코어 파괴 시 점령
rules.polygoncoreprotection = 다각형 코어 건설 금지구역 rules.polygoncoreprotection = 다각형 코어 건설 금지구역
@@ -1016,12 +1024,15 @@ rules.deconstructrefundmultiplier = 철거 환불 배수
rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기 rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기
rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일) rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일)
rules.unitammo = 유닛 탄약 필요 rules.unitammo = 유닛 탄약 필요
rules.enemyteam = 상대 팀
rules.playerteam = 플레이어 팀
rules.title.waves = 단계 rules.title.waves = 단계
rules.title.resourcesbuilding = 자원 & 건축 rules.title.resourcesbuilding = 자원 & 건축
rules.title.enemy = rules.title.enemy =
rules.title.unit = 유닛 rules.title.unit = 유닛
rules.title.experimental = 실험적인 기능 rules.title.experimental = 실험적인 기능
rules.title.environment = 환경 rules.title.environment = 환경
rules.title.teams =
rules.lighting = 조명 표시 rules.lighting = 조명 표시
rules.enemyLights = 상대에게 조명 표시 rules.enemyLights = 상대에게 조명 표시
rules.fire = 방화 허용 rules.fire = 방화 허용
@@ -1100,7 +1111,6 @@ unit.reign.name = 레인
unit.vela.name = 벨라 unit.vela.name = 벨라
unit.corvus.name = 코르버스 unit.corvus.name = 코르버스
block.resupply-point.name = 보급 지점
block.parallax.name = 패럴랙스 block.parallax.name = 패럴랙스
block.cliff.name = 언덕 block.cliff.name = 언덕
block.sand-boulder.name = 사암 바위 block.sand-boulder.name = 사암 바위
@@ -1351,7 +1361,7 @@ hint.placeTurret = 적에게서 기지를 막아내려면 \uf861 [accent]포탑[
hint.breaking = 블록을 부수려면 [accent]우클릭[]이나 드래그를 하십시오. hint.breaking = 블록을 부수려면 [accent]우클릭[]이나 드래그를 하십시오.
hint.breaking.mobile = 블록을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화하십시오.\n\n손가락으로 누른 채로 끌어서 해체 범위를 지정하십시오. hint.breaking.mobile = 블록을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화하십시오.\n\n손가락으로 누른 채로 끌어서 해체 범위를 지정하십시오.
hint.blockInfo = [accent]건설 메뉴[]에서 블록을 선택해서 정보를 보십시오, 그다음 오른쪽의 [accent][[?][] 버튼을 선택하십시오. hint.blockInfo = [accent]건설 메뉴[]에서 블록을 선택해서 정보를 보십시오, 그다음 오른쪽의 [accent][[?][] 버튼을 선택하십시오.
hint.derelict = [accent]버려진[] 구조물들은 더 이상 작동하지 않는 오래된 기지의 부서진 잔해입니다.\n\n이 구조물들은 자원으로 다시 [accent]철거[]될 수 있습니다. hint.derelict = [accent]잔해[] 구조물들은 더 이상 작동하지 않는 오래된 기지의 부서진 잔해입니다.\n\n이 구조물들은 자원으로 다시 [accent]철거[]될 수 있습니다.
hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오. hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오.
hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오. hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오.
hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오. hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오.
@@ -1368,7 +1378,7 @@ hint.payloadPickup = 작은 블록이나 유닛을 집으려면 [accent][[[]를
hint.payloadPickup.mobile = 작은 블록이나 유닛을 집으려면 [accent]잠깐 누르십시오[]. hint.payloadPickup.mobile = 작은 블록이나 유닛을 집으려면 [accent]잠깐 누르십시오[].
hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오. hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오.
hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[]. hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[].
hint.waveFire = [accent]Wave[]포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다. hint.waveFire = [accent]파도[] 포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다.
hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 블록에 전력을 전달합니다.\n\n \uf87f 더 넓은 범위의 블록에 전력을 전달하려면 [accent]Power Nodes[]를 사용하십시오. hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 블록에 전력을 전달합니다.\n\n \uf87f 더 넓은 범위의 블록에 전력을 전달하려면 [accent]Power Nodes[]를 사용하십시오.
hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오. hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오.
hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오. hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오.
@@ -1403,8 +1413,7 @@ liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아
liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다. liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다.
liquid.cryofluid.description = 물과 티타늄으로 만든 비부식성 액체. 열용량이 매우 높으며 냉각수로 광범위하게 사용됩니다. liquid.cryofluid.description = 물과 티타늄으로 만든 비부식성 액체. 열용량이 매우 높으며 냉각수로 광범위하게 사용됩니다.
block.derelict = [lightgray] 버려짐[] block.derelict = [lightgray]잔해
block.resupply-point.description = 주변 유닛들에 구리 탄약을 보급합니다. 배터리 전력이 필요한 유닛들은 호환되지 않습니다.
block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다. block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다.
block.illuminator.description = 발광합니다. block.illuminator.description = 발광합니다.
block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다. block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다.
@@ -1741,7 +1750,8 @@ lenum.build = 구조물 건설
lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다. lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다.
lenum.within = 좌표 주변 유닛 발견 여부 lenum.within = 좌표 주변 유닛 발견 여부
lenum.boost = 이륙 시작/중단 lenum.boost = 이륙 시작/중단
#1730 line matching / 줄 매칭
#1745 line matching / 줄 매칭
#-------------비공식 번역------------- #-------------비공식 번역-------------
#팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요. #팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요.
@@ -1753,7 +1763,7 @@ lenum.boost = 이륙 시작/중단
#관련 문의는 공식 디스코드에서 절 불러주세요. Sharlotte#0018 #관련 문의는 공식 디스코드에서 절 불러주세요. Sharlotte#0018
#아이템 #아이템
item.metaglass.details = [lightgray][비공식][]쓰임가 가장 적은 아이템 item.metaglass.details = [lightgray][비공식][]쓰임가 가장 적은 아이템
item.graphite.details = item.graphite.details =
item.sand.details = item.sand.details =
item.titanium.details = item.titanium.details =
@@ -1769,7 +1779,7 @@ item.pyratite.details =
liquid.water.details = liquid.water.details =
liquid.slag.details = liquid.slag.details =
liquid.oil.details = liquid.oil.details =
liquid.cryofluid.details = [lightgray][비공식][]티타늄을 갈아서 물에 희석했다는 소문이 있다. liquid.cryofluid.details = [lightgray][비공식][]티타늄을 갈아서 물에 희석했다.
#블록 #블록
block.resupply-point.details = block.resupply-point.details =
@@ -1844,8 +1854,8 @@ block.power-node.details =
block.power-node-large.details = block.power-node-large.details =
block.surge-tower.details = block.surge-tower.details =
block.diode.details = block.diode.details =
block.battery.details = block.battery.details = [lightgray][비공식][]아크와 랜서같은 전기먹는하마 옆에 많이 설치해두자.
block.battery-large.details = block.battery-large.details = [lightgray][비공식][]일반 베터리 9개보다 5000만큼의 전력을 더 저장할 수 있다.
block.combustion-generator.details = block.combustion-generator.details =
block.thermal-generator.details = block.thermal-generator.details =
block.steam-generator.details = block.steam-generator.details =
@@ -1859,7 +1869,7 @@ block.mechanical-drill.details =
block.pneumatic-drill.details = 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 = [lightgray][비공식][]맨 땅에서 물을 뽑아낸다. 이것이 바로 창조경제
block.oil-extractor.details = block.oil-extractor.details =
block.vault.details = block.vault.details =
block.container.details = block.container.details =
@@ -1904,9 +1914,9 @@ block.multiplicative-reconstructor.details =
block.exponential-reconstructor.details = block.exponential-reconstructor.details =
block.tetrative-reconstructor.details = block.tetrative-reconstructor.details =
block.switch.details = block.switch.details =
block.micro-processor.details = block.micro-processor.details = [lightgray][비공식][]Hello, World!
block.logic-processor.details = block.logic-processor.details = [lightgray][비공식][]99병의 맥주가 벽장에 있네, 99병의 맥주라네
block.hyper-processor.details = block.hyper-processor.details = [lightgray][비공식][]그것을 내려서 넘겼네, 더 이상 벽장에 맥주가 없네
block.memory-cell.details = block.memory-cell.details =
block.memory-bank.details = block.memory-bank.details =
block.logic-display.details = block.logic-display.details =
@@ -1934,7 +1944,7 @@ unit.horizon.details =
unit.zenith.details = unit.zenith.details =
unit.antumbra.details = unit.antumbra.details =
unit.eclipse.details = unit.eclipse.details =
unit.mono.details = unit.mono.details = [lightgray][비공식][]민더스트리 최고 귀요미.
unit.poly.details = unit.poly.details =
unit.mega.details = unit.mega.details =
unit.quad.details = unit.quad.details =
@@ -1943,7 +1953,7 @@ unit.risso.details = [lightgray][비공식][]뭉치면 연사력이 무시무시
unit.minke.details = unit.minke.details =
unit.bryde.details = unit.bryde.details =
unit.sei.details = [lightgray][비공식][]세이 sei! unit.sei.details = [lightgray][비공식][]세이 sei!
unit.omura.details = unit.omura.details = [lightgray][비공식][]오무라이스?
unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠. unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠.
unit.oxynoe.details = unit.oxynoe.details =
unit.cyerce.details = [lightgray][비공식][]폭죽놀이다! unit.cyerce.details = [lightgray][비공식][]폭죽놀이다!

View File

@@ -215,6 +215,7 @@ hosts.none = [lightgray]Nu s-au găsit jocuri locale!
host.invalid = [scarlet]Nu s-a putut face conectarea la gazdă! host.invalid = [scarlet]Nu s-a putut face conectarea la gazdă!
servers.local = Servere Locale servers.local = Servere Locale
servers.local.steam = Jocuri Deschise & Servere Locale
servers.remote = Servere de la Distanță servers.remote = Servere de la Distanță
servers.global = Servere ale Comunității servers.global = Servere ale Comunității
@@ -266,7 +267,7 @@ server.invalidport = Număr de port invalid!
server.error = [scarlet]Eroare la găzduirea serverului. server.error = [scarlet]Eroare la găzduirea serverului.
save.new = Nouă Salvare save.new = Nouă Salvare
save.overwrite = Sigur vrei să scrii peste \nacest slot de salvare? save.overwrite = Sigur vrei să scrii peste \nacest slot de salvare?
overwrite = Scrie Peste overwrite = Scrie peste
save.none = Nu s-au găsit salvări! save.none = Nu s-au găsit salvări!
savefail = Salvarea jocului a eșuat! savefail = Salvarea jocului a eșuat!
save.delete.confirm = Sigur vrei să ștergi această salvare? save.delete.confirm = Sigur vrei să ștergi această salvare?
@@ -316,7 +317,7 @@ data.invalid = Aceste date de joc nu sunt valide.
data.import.confirm = Importul de date externe va suprascrie[scarlet] toate[] datele tale de joc curente.\n[accent]Acest proces este ireversibil![]\n\nOdată ce datele sunt importate, jocul tău se va opri imediat. data.import.confirm = Importul de date externe va suprascrie[scarlet] toate[] datele tale de joc curente.\n[accent]Acest proces este ireversibil![]\n\nOdată ce datele sunt importate, jocul tău se va opri imediat.
quit.confirm = Sigur vrei să abandonezi? quit.confirm = Sigur vrei să abandonezi?
loading = [accent]Se încarcă... loading = [accent]Se încarcă...
reloading = [accent]Se Reîncarcă Modurile... downloading = [accent]Se descarcă...
saving = [accent]Se salvează... saving = [accent]Se salvează...
respawn = [accent][[{0}][] ca să te refaci în nucleu respawn = [accent][[{0}][] ca să te refaci în nucleu
cancelbuilding = [accent][[{0}][] pt a curăța planul cancelbuilding = [accent][[{0}][] pt a curăța planul
@@ -344,9 +345,9 @@ custom = Personalizată
builtin = Prestabilită builtin = Prestabilită
map.delete.confirm = Ești sigur că vrei să ștergi această hartă? Acțiunea este ireversibilă! map.delete.confirm = Ești sigur că vrei să ștergi această hartă? Acțiunea este ireversibilă!
map.random = [accent]Hartă Aleatorie map.random = [accent]Hartă Aleatorie
map.nospawn = Harta asta nu are niciun nucleu în care vor apărea jucătorii! Adaugă un nucleu[accent] portocaliu[] acestei hărți în editor. map.nospawn = Harta asta nu are niciun nucleu în care vor apărea jucătorii! Adaugă un nucleu [#{0}]{1}[] acestei hărți în editor.
map.nospawn.pvp = Această hartă nu are niciun nucleu inamic în care să apară jucătorii! Adaugă nuclee[scarlet] care nu sunt portocalii[] acestei hărți în editor. map.nospawn.pvp = Această hartă nu are niciun nucleu inamic în care să apară jucătorii! Adaugă nuclee[scarlet] care nu sunt portocalii[] acestei hărți în editor.
map.nospawn.attack = Această hartă nu are niciun nucleu inamic pe care să îl atace jucătorii! Adaugă un nucleu[scarlet] roșu[] acestei hărți în editor. map.nospawn.attack = Această hartă nu are niciun nucleu inamic pe care să îl atace jucătorii! Adaugă nuclee [#{0}]{1}[] acestei hărți în editor.
map.invalid = Eroare la încărcarea hărții: fișier corupt sau invalid. map.invalid = Eroare la încărcarea hărții: fișier corupt sau invalid.
workshop.update = Fă Update la Item workshop.update = Fă Update la Item
workshop.error = Eroare la preluarea detaliilor din Workshop: {0} workshop.error = Eroare la preluarea detaliilor din Workshop: {0}
@@ -538,6 +539,7 @@ configure = Configurează Încărcarea
loadout = Încărcare loadout = Încărcare
resources = Resurse resources = Resurse
bannedblocks = Blocuri Interzise bannedblocks = Blocuri Interzise
bannedunits = Unități Interzise
addall = Adaugă-le pe toate addall = Adaugă-le pe toate
launch.from = Lansează Din: [accent]{0} launch.from = Lansează Din: [accent]{0}
launch.destination = Destinație: {0} launch.destination = Destinație: {0}
@@ -562,6 +564,8 @@ weather.sandstorm.name = Furtună de nisip
weather.sporestorm.name = Furtună de spori weather.sporestorm.name = Furtună de spori
weather.fog.name = Ceață weather.fog.name = Ceață
sectorlist = Sectoare
sectorlist.attacked = {0} sunt atacate
sectors.unexplored = [lightgray]Neexplorat sectors.unexplored = [lightgray]Neexplorat
sectors.resources = Resurse: sectors.resources = Resurse:
sectors.production = Producție: sectors.production = Producție:
@@ -834,13 +838,13 @@ category.items = Materiale
category.crafting = Necesită/Produce category.crafting = Necesită/Produce
category.function = Funcționare category.function = Funcționare
category.optional = Îmbunătățiri opționale category.optional = Îmbunătățiri opționale
setting.skipcoreanimation.name = Sari peste Animația de Lansare/Aterizare a Nucleului
setting.landscape.name = Blochează Mod Peisaj setting.landscape.name = Blochează Mod Peisaj
setting.shadows.name = Umbre setting.shadows.name = Umbre
setting.blockreplace.name = Sugestii Plasare Automats setting.blockreplace.name = Sugestii Plasare Automats
setting.linear.name = Filtrare Liniară setting.linear.name = Filtrare Liniară
setting.hints.name = Indicii setting.hints.name = Indicii
setting.logichints.name = Indicii Procesoare Logice setting.logichints.name = Indicii Procesoare Logice
setting.flow.name = Afișează Rata de Curgere a lichidelor
setting.buildautopause.name = Autopauză de la Construit setting.buildautopause.name = Autopauză de la Construit
setting.backgroundpause.name = Pune Pauză în Fundal setting.backgroundpause.name = Pune Pauză în Fundal
setting.doubletapmine.name = Dublu-Click pt a Mina setting.doubletapmine.name = Dublu-Click pt a Mina
@@ -875,6 +879,7 @@ setting.seconds = {0} secunde
setting.milliseconds = {0} millisecunde setting.milliseconds = {0} millisecunde
setting.fullscreen.name = Ecran Complet setting.fullscreen.name = Ecran Complet
setting.borderlesswindow.name = Fereastră Fără Margine setting.borderlesswindow.name = Fereastră Fără Margine
setting.borderlesswindow.name.windows = Ecran Complet Fără Margine
setting.borderlesswindow.description = Repornirea poate fi necesară pt a aplica schimbările. setting.borderlesswindow.description = Repornirea poate fi necesară pt a aplica schimbările.
setting.fps.name = Vezi FPS & Ping setting.fps.name = Vezi FPS & Ping
setting.smoothcamera.name = Cameră Graduală setting.smoothcamera.name = Cameră Graduală
@@ -961,7 +966,7 @@ keybind.shoot.name = Trage
keybind.zoom.name = Zoom keybind.zoom.name = Zoom
keybind.menu.name = Meniu keybind.menu.name = Meniu
keybind.pause.name = Pauză keybind.pause.name = Pauză
keybind.pause_building.name = Pauză/Reia Construit keybind.pause_building.name = Pauză/Reia Construcție
keybind.minimap.name = Minihartă keybind.minimap.name = Minihartă
keybind.planet_map.name = Harta Planetei keybind.planet_map.name = Harta Planetei
keybind.research.name = Cercetare keybind.research.name = Cercetare
@@ -987,7 +992,7 @@ mode.editor.name = Editor
mode.pvp.name = PvP mode.pvp.name = PvP
mode.pvp.description = Luptă împotriva altor jucători local.\n[gray]E nevoie de 2 nuclee colorate diferit pe hartă pt a juca. mode.pvp.description = Luptă împotriva altor jucători local.\n[gray]E nevoie de 2 nuclee colorate diferit pe hartă pt a juca.
mode.attack.name = Atac mode.attack.name = Atac
mode.attack.description = Distruge baza inamicului. \n[gray]E nevoie de un nucleu roșu pe hartă pt a juca. mode.attack.description = Distruge baza inamicului. \n[gray]E nevoie de un nucleu Agresor (roșu) pe hartă pt a juca.
mode.custom = Reguli Personalizate mode.custom = Reguli Personalizate
rules.infiniteresources = Resurse Infinite rules.infiniteresources = Resurse Infinite
@@ -998,6 +1003,7 @@ rules.wavetimer = Valuri pe Timp
rules.waves = Valuri rules.waves = Valuri
rules.attack = Modul Atac rules.attack = Modul Atac
rules.buildai = AI-ul Construiește rules.buildai = AI-ul Construiește
rules.aitier = Nivel AI
rules.cleanupdeadteams = Îndepărtează Clădirile Echipelor Învinse (PvP) rules.cleanupdeadteams = Îndepărtează Clădirile Echipelor Învinse (PvP)
rules.corecapture = Capturează Nucleele Distruse rules.corecapture = Capturează Nucleele Distruse
rules.enemyCheat = Resurse infinite pt AI (echipa roșie) rules.enemyCheat = Resurse infinite pt AI (echipa roșie)
@@ -1017,12 +1023,15 @@ rules.deconstructrefundmultiplier = Multiplicatorul Recompensei la Deconstrucți
rules.waitForWaveToEnd = Valurile Așteaptă Inamicii rules.waitForWaveToEnd = Valurile Așteaptă Inamicii
rules.dropzoneradius = Raza Zonei de Lansare:[lightgray] (pătrate) rules.dropzoneradius = Raza Zonei de Lansare:[lightgray] (pătrate)
rules.unitammo = Unitățile Necesită Muniție rules.unitammo = Unitățile Necesită Muniție
rules.enemyteam = Echipa Inamică
rules.playerteam = Echipa Jucătorului
rules.title.waves = Valuri rules.title.waves = Valuri
rules.title.resourcesbuilding = Resurse și Construit rules.title.resourcesbuilding = Resurse și Construcție
rules.title.enemy = Inamici rules.title.enemy = Inamici
rules.title.unit = Unități rules.title.unit = Unități
rules.title.experimental = Experimental rules.title.experimental = Experimental
rules.title.environment = Mediu rules.title.environment = Mediu
rules.title.teams = Echipe
rules.lighting = Luminozitate Ambientală rules.lighting = Luminozitate Ambientală
rules.enemyLights = Inamicii Luminează rules.enemyLights = Inamicii Luminează
rules.fire = Foc rules.fire = Foc
@@ -1101,7 +1110,6 @@ unit.reign.name = Reign
unit.vela.name = Vela unit.vela.name = Vela
unit.corvus.name = Corvus unit.corvus.name = Corvus
block.resupply-point.name = Punct de Realimentare
block.parallax.name = Parallax block.parallax.name = Parallax
block.cliff.name = Deal block.cliff.name = Deal
block.sand-boulder.name = Bolovan de Nisip block.sand-boulder.name = Bolovan de Nisip
@@ -1134,7 +1142,7 @@ block.kiln.name = Cuptor
block.graphite-press.name = Presă de Grafit block.graphite-press.name = Presă de Grafit
block.multi-press.name = Multi-Presă block.multi-press.name = Multi-Presă
block.constructing = {0} [lightgray](În Construcție) block.constructing = {0} [lightgray](În Construcție)
block.spawn.name = Punctul de Lansare Inamic block.spawn.name = Punct Inamic de Lansare
block.core-shard.name = Nucleu: Shard block.core-shard.name = Nucleu: Shard
block.core-foundation.name = Nucleu: Foundation block.core-foundation.name = Nucleu: Foundation
block.core-nucleus.name = Nucleu: Core block.core-nucleus.name = Nucleu: Core
@@ -1328,12 +1336,12 @@ block.large-logic-display.name = Monitor Logic Mare
block.memory-cell.name = Celulă de Memorie block.memory-cell.name = Celulă de Memorie
block.memory-bank.name = Bancă de Memorie block.memory-bank.name = Bancă de Memorie
team.blue.name = albastră team.blue.name = Albastru
team.crux.name = roșie team.crux.name = Agresor
team.sharded.name = portocalie team.sharded.name = Portocaliu
team.derelict.name = abandonată team.derelict.name = Abandonat
team.green.name = verde team.green.name = Verde
team.purple.name = mov team.purple.name = Mov
hint.skip = Treci peste hint.skip = Treci peste
hint.desktopMove = Folosește [accent][[WASD][] ca să te miști. hint.desktopMove = Folosește [accent][[WASD][] ca să te miști.
@@ -1400,12 +1408,11 @@ item.blast-compound.description = Folosit în bombe și muniție explozibilă.
item.pyratite.description = Folosită în armele incendiare și generatoarele pe bază de procese de combustie. item.pyratite.description = Folosită în armele incendiare și generatoarele pe bază de procese de combustie.
liquid.water.description = Folosită pt răcirea mașinăriilor și procesarea deșeurilor. liquid.water.description = Folosită pt răcirea mașinăriilor și procesarea deșeurilor.
liquid.slag.description = Rafinată în separatoare înapoi în materialele constituente, sau pulverizată înspre unitățile inamice ca armă. liquid.slag.description = Rafinată înapoi în materialele constituente cu ajutorul separatoarelor sau pulverizată înspre unitățile inamice ca armă.
liquid.oil.description = Folosit în producerea avansată de materiale și ca muniție incendiară. 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. liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici.
block.derelict = [lightgray]Structuri Abandonate block.derelict = [lightgray]Structură Abandonată
block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii.
block.armored-conveyor.description = Transportă materialele înainte. Nu acceptă materiale de pe lateral decât de la alte benzi. 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.illuminator.description = Emite lumină.
block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați. block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați.

View File

@@ -63,7 +63,7 @@ schematic.copy.import = นำเข้าจากคลิปบอร์ด
schematic.shareworkshop = แชร์บนเวิร์กช็อป schematic.shareworkshop = แชร์บนเวิร์กช็อป
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: กลับแผนผัง schematic.flip = [accent][[{0}][]/[accent][[{1}][]: กลับแผนผัง
schematic.saved = บันทึกแผนผังแล้ว schematic.saved = บันทึกแผนผังแล้ว
schematic.delete.confirm = แผนผังนี้จะถูกกำจัดให้หมดสิ้นโดยสิ้นเชิง 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]เซิร์ฟเวอร์นี้
@@ -71,9 +71,9 @@ schematic.tags = แท็ก:
schematic.edittags = แก้ไขแท็ก schematic.edittags = แก้ไขแท็ก
schematic.addtag = เพิ่มแท็ก schematic.addtag = เพิ่มแท็ก
schematic.texttag = แท็กข้อความ schematic.texttag = แท็กข้อความ
schematic.icontag = ไอคอนแท็ก schematic.icontag = แท็กไอคอน
schematic.renametag = เปลี่ยนชื่อแท็ก schematic.renametag = เปลี่ยนชื่อแท็ก
schematic.tagdelconfirm = จะลบแท็กนี้ทั้งหมดใช่ไหม? schematic.tagdelconfirm = จะลบแท็กนี้ทั่วทั้งหมดเลยใช่ไหม?
schematic.tagexists = แท็กนี้มีอยู่แล้ว schematic.tagexists = แท็กนี้มีอยู่แล้ว
stats = สถิติ stats = สถิติ
@@ -114,7 +114,7 @@ continue = ต่อ
maps.none = [lightgray]ไม่มีแมพ! maps.none = [lightgray]ไม่มีแมพ!
invalid = ไม่ถูกต้อง invalid = ไม่ถูกต้อง
pickcolor = เลือกสี pickcolor = เลือกสี
preparingconfig = กำลังเตรียม Config preparingconfig = กำลังเตรียมค่าปรับแต่ง
preparingcontent = กำลังเตรียมเนื้อหา preparingcontent = กำลังเตรียมเนื้อหา
uploadingcontent = กำลังอัปโหลดเนื้อหา uploadingcontent = กำลังอัปโหลดเนื้อหา
uploadingpreviewfile = กำลังอัปโหลดไฟล์พรีวิว uploadingpreviewfile = กำลังอัปโหลดไฟล์พรีวิว
@@ -186,11 +186,11 @@ server.closing = [accent]กำลังปิดเซิร์ฟเวอร
server.kicked.kick = คุณถูกเตะออกจากเซิร์ฟเวอร์! server.kicked.kick = คุณถูกเตะออกจากเซิร์ฟเวอร์!
server.kicked.whitelist = คุณไม่ได้ถูกรับเชิญ\nคนที่ถูกรับเชิญเท่านั้นที่จะเข้าได้ server.kicked.whitelist = คุณไม่ได้ถูกรับเชิญ\nคนที่ถูกรับเชิญเท่านั้นที่จะเข้าได้
server.kicked.serverClose = เซิร์ฟเวอร์ถูกปิด server.kicked.serverClose = เซิร์ฟเวอร์ถูกปิด
server.kicked.vote = คุณถูกโหวตเตะออก บัยบาย server.kicked.vote = คุณถูกโหวตให้เตะออก บัยบาย
server.kicked.clientOutdated = ไคลเอนต์เก่า! กรุณาอัปเดตเกมของคุณ! server.kicked.clientOutdated = ไคลเอนต์เก่า! กรุณาอัปเดตเกมของคุณ!
server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามเจ้าของเซิร์ฟเวอร์เพื่ออัปเดต! server.kicked.serverOutdated = เซิร์ฟเวอร์เก่า! โปรดถามโฮสต์เพื่อให้อัปเดต!
server.kicked.banned = คุณถูกแบนในเซิร์ฟเวอร์นี้ server.kicked.banned = คุณถูกแบนในเซิร์ฟเวอร์นี้
server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทบิลด์ของคุณ server.kicked.typeMismatch = เซิร์ฟเวอร์นี้ไม่เข้ากับประเภทเวอร์ชั่นของคุณ
server.kicked.playerLimit = เซิร์ฟเวอร์เต็ม กรุณารอให้เซิร์ฟเวอร์ว่างก่อน server.kicked.playerLimit = เซิร์ฟเวอร์เต็ม กรุณารอให้เซิร์ฟเวอร์ว่างก่อน
server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิร์ฟเวอร์นี้\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง server.kicked.recentKick = คุณเพิ่งถูกเตะออกจากเซิร์ฟเวอร์นี้\nกรุณารอสักครู่เพื่อเข้าร่วมอีกครั้ง
server.kicked.nameInUse = มีคนที่ใช้ชื่อนี้\nอยู่ในเซิร์ฟเวอร์แล้ว server.kicked.nameInUse = มีคนที่ใช้ชื่อนี้\nอยู่ในเซิร์ฟเวอร์แล้ว
@@ -229,7 +229,7 @@ trace.playername = ชื่อผู้เล่น: [accent]{0}
trace.ip = IP: [accent]{0} trace.ip = IP: [accent]{0}
trace.id = ID: [accent]{0} trace.id = ID: [accent]{0}
trace.mobile = ไคลเอนต์โมบาย: [accent]{0} trace.mobile = ไคลเอนต์โมบาย: [accent]{0}
trace.modclient = ไคลเอนต์แบบกำหนดเอง: [accent]{0} trace.modclient = ไคลเอนต์ปรับแต่ง: [accent]{0}
trace.times.joined = เวลาเข้า: [accent]{0} trace.times.joined = เวลาเข้า: [accent]{0}
trace.times.kicked = เวลาโดนเตะ: [accent]{0} trace.times.kicked = เวลาโดนเตะ: [accent]{0}
invalidid = client ID ไม่ถูกต้อง! กรุณารายงานบัคนี้ invalidid = client ID ไม่ถูกต้อง! กรุณารายงานบัคนี้
@@ -289,7 +289,7 @@ on = เปิด
off = ปิด off = ปิด
save.autosave = เซฟอัตโนมัติ: {0} save.autosave = เซฟอัตโนมัติ: {0}
save.map = แมพ: {0} save.map = แมพ: {0}
save.wave = Wave {0} save.wave = คลื่นที่ {0}
save.mode = เกมโหมด: {0} save.mode = เกมโหมด: {0}
save.date = เซฟล่าสุด: {0} save.date = เซฟล่าสุด: {0}
save.playtime = เวลาที่เล่นไป: {0} save.playtime = เวลาที่เล่นไป: {0}
@@ -317,7 +317,7 @@ data.invalid = นี่ไม่ใช่ข้อมูลเกมที่
data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำเข้าข้อมูลแล้วเกมจะปิดลงโดยทันที data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำเข้าข้อมูลแล้วเกมจะปิดลงโดยทันที
quit.confirm = คุณแน่ใจหรือว่าจะออก? quit.confirm = คุณแน่ใจหรือว่าจะออก?
loading = [accent]กำลังโหลด... loading = [accent]กำลังโหลด...
reloading = [accent]กำลังรีโหลดม็อด... downloading = [accent]กำลังดาวน์โหลด...
saving = [accent]กำลังเซฟ... saving = [accent]กำลังเซฟ...
respawn = กด [accent][[{0}][] เพื่อเกิดใหม่ที่แกนกลาง respawn = กด [accent][[{0}][] เพื่อเกิดใหม่ที่แกนกลาง
cancelbuilding = กด [accent][[{0}][] เพื่อเคลียร์แผน cancelbuilding = กด [accent][[{0}][] เพื่อเคลียร์แผน
@@ -345,13 +345,13 @@ custom = กำหนดเอง
builtin = ติดตัว builtin = ติดตัว
map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้! map.delete.confirm = คุณแน่ใจหรือว่าจะลบแมพนี้? การกระทำครั้งนี้ไม่สามารถย้อนกลับได้!
map.random = [accent]สุ่มแมพ map.random = [accent]สุ่มแมพ
map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[accent]สีเหลือง[] ในตัวแก้ไข map.nospawn = แมพนี้ไม่มีแกนกลางให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข
map.nospawn.pvp = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[scarlet]ที่ไม่ใช่สีส้ม[] ในตัวแก้ไข map.nospawn.pvp = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นเกิด! กรุณาใส่แกนกลาง[scarlet]ที่ไม่ใช่สีส้ม[] ลงในตัวแก้ไข
map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[scarlet]สีแดง[] ในตัวแก้ไข map.nospawn.attack = แมพนี้ไม่มีแกนกลางของศัตรูสำหรับให้ผู้เล่นโจมตี! กรุณาใส่แกนกลาง[#{0}]{1}[] ลงในตัวแก้ไข
map.invalid = โหลดแมพผิดพลาด: ไฟล์แมพเสียหายหรือไม่ถูกต้อง map.invalid = โหลดแมพผิดพลาด: ไฟล์แมพเสียหายหรือไม่ถูกต้อง
workshop.update = อัปเดตไอเท็ม workshop.update = อัปเดตไอเท็ม
workshop.error = ผิดพลาดในการนำเวิร์กช็อปมา รายละเอียดดังนี้: {0} workshop.error = ผิดพลาดในการนำเวิร์กช็อปมา รายละเอียดดังนี้: {0}
map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA, มิฉนั้นแมพจะไม่ปรากฏ! map.publish.confirm = คุณแน่ใจหรือว่าจะเผยแพร่แมพนี้?\n\n[lightgray]คุณต้องแน่ใจก่อนว่าคุณเห็นด้วยกับ Workshop EULA มิฉนั้นแมพจะไม่ปรากฏ!
workshop.menu = เลือกว่าจะทำอะไรกับไอเท็มนี้ workshop.menu = เลือกว่าจะทำอะไรกับไอเท็มนี้
workshop.info = ข้อมูลไอเท็ม workshop.info = ข้อมูลไอเท็ม
changelog = สิ่งที่เปลี่ยนไป (ไม่จำเป็น): changelog = สิ่งที่เปลี่ยนไป (ไม่จำเป็น):
@@ -482,9 +482,9 @@ filter.terrain = พื้นผิว
filter.option.scale = มาตราส่วน filter.option.scale = มาตราส่วน
filter.option.chance = โอกาส filter.option.chance = โอกาส
filter.option.mag = แม็คนิจู filter.option.mag = แมนิจู
filter.option.threshold = เกณฑ์ filter.option.threshold = เกณฑ์
filter.option.circle-scale = สเกลวงกลม filter.option.circle-scale = อัตราวงกลม
filter.option.octaves = เลอะเลือน filter.option.octaves = เลอะเลือน
filter.option.falloff = หลุดร่วง filter.option.falloff = หลุดร่วง
filter.option.angle = มุม filter.option.angle = มุม
@@ -522,7 +522,7 @@ editor = ตัวแก้ไขแมพ
mapeditor = แก้ไขแมพ mapeditor = แก้ไขแมพ
abandon = ละทิ้ง abandon = ละทิ้ง
abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยดไปเป็นของศัตรู abandon.text = โซนนี้และทรัพยากรทั้งหมดจะถูกยดไปเป็นของศัตรู
locked = ล็อก locked = ล็อก
complete = [lightgray]ต้องมี: complete = [lightgray]ต้องมี:
requirement.wave = ถึงคลื่นที่ {0} ใน {1} requirement.wave = ถึงคลื่นที่ {0} ใน {1}
@@ -539,6 +539,7 @@ configure = ตั้งค่าทรัพยากร
loadout = ทรัพยากรเริ่มต้น loadout = ทรัพยากรเริ่มต้น
resources = ทรัพยากร resources = ทรัพยากร
bannedblocks = บล็อกต้องห้าม bannedblocks = บล็อกต้องห้าม
bannedunits = ยูนิตต้องห้าม
addall = เพิ่มทั้งหมด addall = เพิ่มทั้งหมด
launch.from = ลงจอดจากเซ็กเตอร์: [accent]{0} launch.from = ลงจอดจากเซ็กเตอร์: [accent]{0}
launch.destination = จุดหมายปลายทาง: {0} launch.destination = จุดหมายปลายทาง: {0}
@@ -550,7 +551,7 @@ connectfail = [crimson]การเชื่อมต่อผิดพลาด
error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง? error.unreachable = เซิร์ฟเวอร์ไม่สามารถเข้าถึงได้\nแน่ใจหรือว่าที่อยู่เขียนถูกต้อง?
error.invalidaddress = ที่อยู่ไม่ถูกต้อง error.invalidaddress = ที่อยู่ไม่ถูกต้อง
error.timedout = Timed out!\nเช็คให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง! error.timedout = Timed out!\nเช็คให้แน่ใจว่า port forwarding ของโฮสต์เปิดอยู่และที่อยู่นั้นถูกต้อง!
error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าเซิร์ฟเวอร์ใช้ Mindustry เวอร์ชั่นล่าสุด! error.mismatch = Packet error:\nอาจเกิดจากเวอร์ชั่นของ ไคลเอนต์/เซิร์ฟเวอร์ ไม่ตรงกัน\nเช็คให้แน่ใจว่าคุณและโฮสต์ใช้ Mindustry เวอร์ชั่นล่าสุด!
error.alreadyconnected = เชื่อมต่ออยู่แล้ว error.alreadyconnected = เชื่อมต่ออยู่แล้ว
error.mapnotfound = ไม่พบไฟล์แมพ error.mapnotfound = ไม่พบไฟล์แมพ
error.io = Network I/O error error.io = Network I/O error
@@ -563,6 +564,8 @@ weather.sandstorm.name = พายุทราย
weather.sporestorm.name = พายุสปอร์ weather.sporestorm.name = พายุสปอร์
weather.fog.name = หมอก weather.fog.name = หมอก
sectorlist = เซ็กเตอร์
sectorlist.attacked = {0} ถูกโจมตึ
sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ
sectors.resources = ทรัพยากร: sectors.resources = ทรัพยากร:
sectors.production = การผลิต: sectors.production = การผลิต:
@@ -620,14 +623,14 @@ sector.extractionOutpost.name = ด่านส่งทรัพยากร
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่ อากาศที่เย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ เรียนรู้ที่จะใช้เครื่องซ่อมแซม sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่ ยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[] ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
sector.ruinousShores.description = ถัดจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง ซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดิที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้ sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดิที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่แคบ ความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด อย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก
sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้ sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้
@@ -824,8 +827,8 @@ unit.percent = %
unit.shieldhealth = พลังชีวิตโล่ unit.shieldhealth = พลังชีวิตโล่
unit.items = ไอเท็ม unit.items = ไอเท็ม
unit.thousands = k unit.thousands = k
unit.millions = [] []ล้าน unit.millions = [lightgray] []ล้าน
unit.billions = [] []พันล้าน unit.billions = [lightgray] []พันล้าน
unit.pershot = [] []ไอเท็ม/การยิง unit.pershot = [] []ไอเท็ม/การยิง
category.purpose = วัตถุประสงค์ category.purpose = วัตถุประสงค์
category.general = ทั่วไป category.general = ทั่วไป
@@ -863,10 +866,10 @@ setting.difficulty.training = ฝึกซ้อม
setting.difficulty.easy = ง่าย setting.difficulty.easy = ง่าย
setting.difficulty.normal = ปานกลาง setting.difficulty.normal = ปานกลาง
setting.difficulty.hard = ยาก 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 = ตรวจสอบเส้นทางการวางอัจฉริยะ
@@ -876,6 +879,7 @@ setting.seconds = {0} วินาที
setting.milliseconds = {0} มิลลิวินาที setting.milliseconds = {0} มิลลิวินาที
setting.fullscreen.name = เต็มจอ setting.fullscreen.name = เต็มจอ
setting.borderlesswindow.name = หน้าต่างแบบไร้ขอบ setting.borderlesswindow.name = หน้าต่างแบบไร้ขอบ
setting.borderlesswindow.name.windows = จอเต็มแบบไร้ขอบ
setting.borderlesswindow.description = อาจจะต้องรีสตาร์ทเพื่อใส่การเปลี่ยนแปลง setting.borderlesswindow.description = อาจจะต้องรีสตาร์ทเพื่อใส่การเปลี่ยนแปลง
setting.fps.name = แสดง FPS และ Ping setting.fps.name = แสดง FPS และ Ping
setting.smoothcamera.name = กล้องแบบลื่นไหล setting.smoothcamera.name = กล้องแบบลื่นไหล
@@ -922,8 +926,8 @@ keybind.clear_building.name = เคลียร์สิ่งก่อสร
keybind.press = กดปุ่มใดก็ได้... keybind.press = กดปุ่มใดก็ได้...
keybind.press.axis = กดแกนหรือปุ่มใดก็ได้... keybind.press.axis = กดแกนหรือปุ่มใดก็ได้...
keybind.screenshot.name = ถ่ายรูปแมพ keybind.screenshot.name = ถ่ายรูปแมพ
keybind.toggle_power_lines.name = เปิดปิดเลเซอร์พลังงาน keybind.toggle_power_lines.name = เปิด/ปิด เลเซอร์พลังงาน
keybind.toggle_block_status.name = เปิดปิดสถานะของบล็อก keybind.toggle_block_status.name = เปิด/ปิด สถานะของบล็อก
keybind.move_x.name = เคลื่อนที่ในแกน x keybind.move_x.name = เคลื่อนที่ในแกน x
keybind.move_y.name = เคลี่อนที่ในแกน y keybind.move_y.name = เคลี่อนที่ในแกน y
keybind.mouse_move.name = ตามเม้าส์ keybind.mouse_move.name = ตามเม้าส์
@@ -999,6 +1003,7 @@ rules.wavetimer = นับถอยหลังการปล่อยคล
rules.waves = คลื่น rules.waves = คลื่น
rules.attack = โหมดการโจมตี rules.attack = โหมดการโจมตี
rules.buildai = AI ก่อสร้าง rules.buildai = AI ก่อสร้าง
rules.aitier = ระดับของ AI
rules.cleanupdeadteams = ลบล้างสิ่งก่อสร้างศัตรูที่พ่ายแพ้ (PvP) rules.cleanupdeadteams = ลบล้างสิ่งก่อสร้างศัตรูที่พ่ายแพ้ (PvP)
rules.corecapture = ยืดแกนกลางเมื่อทำลาย rules.corecapture = ยืดแกนกลางเมื่อทำลาย
rules.polygoncoreprotection = รัศมีปกป้องแกนกลางแบบหลายเหลี่ยม rules.polygoncoreprotection = รัศมีปกป้องแกนกลางแบบหลายเหลี่ยม
@@ -1018,12 +1023,15 @@ rules.deconstructrefundmultiplier = พหุคูณการคืนทร
rules.waitForWaveToEnd = คลื่นรอศัตรู rules.waitForWaveToEnd = คลื่นรอศัตรู
rules.dropzoneradius = รัศมีจุดเกิดของศัตรู:[lightgray] (ช่อง) rules.dropzoneradius = รัศมีจุดเกิดของศัตรู:[lightgray] (ช่อง)
rules.unitammo = ยูนิตต้องใช้กระสุน rules.unitammo = ยูนิตต้องใช้กระสุน
rules.enemyteam = ทีมศัตรู
rules.playerteam = ทีมผู้เล่น
rules.title.waves = คลื่น rules.title.waves = คลื่น
rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง
rules.title.enemy = ศัตรู rules.title.enemy = ศัตรู
rules.title.unit = ยูนิต rules.title.unit = ยูนิต
rules.title.experimental = ทดลอง rules.title.experimental = ทดลอง
rules.title.environment = สิ่งแวดล้อม rules.title.environment = สิ่งแวดล้อม
rules.title.teams = ทีม
rules.lighting = แสง rules.lighting = แสง
rules.enemyLights = ไฟศัตรู rules.enemyLights = ไฟศัตรู
rules.fire = ไฟ rules.fire = ไฟ
@@ -1102,13 +1110,12 @@ unit.reign.name = เรน
unit.vela.name = เวล่า unit.vela.name = เวล่า
unit.corvus.name = คอร์วัส unit.corvus.name = คอร์วัส
block.resupply-point.name = จุดเติมของ
block.parallax.name = พาราแล็คซ์ block.parallax.name = พาราแล็คซ์
block.cliff.name = หน้าผา block.cliff.name = หน้าผา
block.sand-boulder.name = ก้อนหินทราย block.sand-boulder.name = ก้อนหินทราย
block.basalt-boulder.name = ก้อนบะซอลต์ block.basalt-boulder.name = ก้อนบะซอลต์
block.grass.name = หญ้า block.grass.name = หญ้า
block.molten-slag.name = แร่หลอม block.molten-slag.name = แร่หลอมละลาย
block.space.name = อวกาศ block.space.name = อวกาศ
block.salt.name = เกลือ block.salt.name = เกลือ
block.salt-wall.name = กำแพงเกลือ block.salt-wall.name = กำแพงเกลือ
@@ -1140,10 +1147,10 @@ block.core-shard.name = แกนกลาง: ชาร์ด
block.core-foundation.name = แกนกลาง: ฟาวน์เดชั่น block.core-foundation.name = แกนกลาง: ฟาวน์เดชั่น
block.core-nucleus.name = แกนกลาง: นิวเคลียส block.core-nucleus.name = แกนกลาง: นิวเคลียส
block.deep-water.name = น้ำลึก block.deep-water.name = น้ำลึก
block.shallow-water.name = น้ำ block.shallow-water.name = น้ำตื้น
block.tainted-water.name = น้ำเสีย block.tainted-water.name = น้ำเสีย
block.darksand-tainted-water.name = น้ำเสียบนทรายดำ block.darksand-tainted-water.name = น้ำเสียบนทรายดำ
block.tar.name = น้ำมันดิ block.tar.name = น้ำมันดิ
block.stone.name = หิน block.stone.name = หิน
block.sand.name = ทราย block.sand.name = ทราย
block.darksand.name = ทรายดำ block.darksand.name = ทรายดำ
@@ -1199,7 +1206,7 @@ block.door.name = ประตู
block.door-large.name = ประตูขนาดใหญ่ block.door-large.name = ประตูขนาดใหญ่
block.duo.name = ดูโอ้ block.duo.name = ดูโอ้
block.scorch.name = สคอร์ช block.scorch.name = สคอร์ช
block.scatter.name = สแกตเตอร์ block.scatter.name = สแกตเตอร์
block.hail.name = ลูกเห็บ block.hail.name = ลูกเห็บ
block.lancer.name = แลนเซอร์ block.lancer.name = แลนเซอร์
block.conveyor.name = สายพาน block.conveyor.name = สายพาน
@@ -1289,7 +1296,7 @@ block.overdrive-projector.name = เครื่องเร่งประส
block.force-projector.name = เครื่องฉายสนามพลัง block.force-projector.name = เครื่องฉายสนามพลัง
block.arc.name = อาร์ค block.arc.name = อาร์ค
block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG
block.spectre.name = สเปคเตอร์ block.spectre.name = สเปคเตอร์
block.meltdown.name = เมลท์ดาวน์ block.meltdown.name = เมลท์ดาวน์
block.foreshadow.name = ฟอร์ชาโดว์ block.foreshadow.name = ฟอร์ชาโดว์
block.container.name = ตู้เก็บของ block.container.name = ตู้เก็บของ
@@ -1354,8 +1361,8 @@ hint.breaking = [accent]คลิ๊กขวา[] แล้วลากเพ
hint.breaking.mobile = เปิดใช้ \ue817 [accent]ค้อน[] ตรงล่างขวาแล้วเลือกเพื่อทำลายบล็อก\n\nเอานิ้วจิ้มลงไปสักแป๊บนึงแล้วลากเพื่อเลือกหลายๆ อัน hint.breaking.mobile = เปิดใช้ \ue817 [accent]ค้อน[] ตรงล่างขวาแล้วเลือกเพื่อทำลายบล็อก\n\nเอานิ้วจิ้มลงไปสักแป๊บนึงแล้วลากเพื่อเลือกหลายๆ อัน
hint.blockInfo = ดูข้อมูลของบล็อกโดยการเลือกจาก[accent]เมนูการสร้าง[] แล้วกดที่รูป [accent][[?][] ตรงด้านขวา hint.blockInfo = ดูข้อมูลของบล็อกโดยการเลือกจาก[accent]เมนูการสร้าง[] แล้วกดที่รูป [accent][[?][] ตรงด้านขวา
hint.derelict = สิ่งก่อสร้างที่ถูก[accent]ทิ้งร้าง[]คือเศษซากพังทลายของฐานเก่าแก่ที่ไม่สามารถใช้งานได้แล้ว\n\nสิ่งก่อสร้างพวกนี้สามารถ[accent]ทุบทิ้ง[]เพื่อเก็บเกี่ยวทรัพยากรที่อยู่ในนั้นได้ hint.derelict = สิ่งก่อสร้างที่ถูก[accent]ทิ้งร้าง[]คือเศษซากพังทลายของฐานเก่าแก่ที่ไม่สามารถใช้งานได้แล้ว\n\nสิ่งก่อสร้างพวกนี้สามารถ[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][[L-Ctrl][] ค้างไว้แล้วกด[accent]คลิ๊ก[]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน hint.unitControl = กด [accent][[L-Ctrl][] ค้างไว้แล้วกด[accent]คลิ๊ก[]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน
hint.unitControl.mobile = [accent][[กดสองครั้ง][]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน hint.unitControl.mobile = [accent][[กดสองครั้ง][]เพื่อควบคุมยานพวกพ้องหรือป้อมปืน
hint.launch = เมื่อเก็บทรัพยากรเยอะพอ คุณสามารถ[accent]ส่งแกนกลาง[]โดยการเลือกเซ็กเตอร์จาก \ue827 [accent]แผนที่[] ตรงขวาล่าง hint.launch = เมื่อเก็บทรัพยากรเยอะพอ คุณสามารถ[accent]ส่งแกนกลาง[]โดยการเลือกเซ็กเตอร์จาก \ue827 [accent]แผนที่[] ตรงขวาล่าง
@@ -1416,9 +1423,8 @@ liquid.oil.details = ของเหลวเฉื่อยพบได้ไ
liquid.cryofluid.description = ใช้ในการหล่อเย็นเตาปฏิกร สิ่งก่อสร้างหรือโรงงานต่างๆ liquid.cryofluid.description = ใช้ในการหล่อเย็นเตาปฏิกร สิ่งก่อสร้างหรือโรงงานต่างๆ
liquid.cryofluid.details = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม มีคุณสมบัติการถ่ายเทความร้อนสูง liquid.cryofluid.details = ของเหลวเฉื่อยและไม่กัดกร่อน ผลิตจากน้ำและไทเทเนี่ยม มีคุณสมบัติการถ่ายเทความร้อนสูง
block.derelict = [lightgray]ถูกทิ้งร้าง block.derelict = [lightgray]ถูกทิ้งร้าง
block.resupply-point.description = ติมกระสุนยูนิตรอบข้างด้วยกระสุนทองแดง ใช้กับยูนิตที่ใช้พลังงานเป็นกระสุนไม่ได้ block.armored-conveyor.description = ลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานด้วยกันเอง
block.armored-conveyor.description = เลื่อนไอเท็มไปข้างหน้า เร็วเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่รับไอเท็มจากด้านข้างยกเว้นเป็นสายพานชนิดเดียวกัน
block.illuminator.description = ตัวเปล่งแสงขนาดกะทัดรัด ส่องสว่างในที่มืดได้ดี\nแถมยังกำหนดสีของแสงได้ด้วย... เจ๋งใช่มั้ยล่ะ block.illuminator.description = ตัวเปล่งแสงขนาดกะทัดรัด ส่องสว่างในที่มืดได้ดี\nแถมยังกำหนดสีของแสงได้ด้วย... เจ๋งใช่มั้ยล่ะ
block.message.description = เก็บข้อความ ใช้สื่อสารกับพันธมิตร block.message.description = เก็บข้อความ ใช้สื่อสารกับพันธมิตร
block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์ block.graphite-press.description = อัดก้อนถ่านหินให้เป็นแผ่นกราไฟต์บริสุทธิ์

View File

@@ -493,7 +493,7 @@ filter.option.amount = Miktar
filter.option.block = Blok filter.option.block = Blok
filter.option.floor = Zemin filter.option.floor = Zemin
filter.option.flooronto = Hedef Zemin filter.option.flooronto = Hedef Zemin
filter.option.target = Target filter.option.target = Hedef
filter.option.replacement = Değiştirme filter.option.replacement = Değiştirme
filter.option.wall = Duvar filter.option.wall = Duvar
filter.option.ore = Maden filter.option.ore = Maden
@@ -539,12 +539,13 @@ configure = Ekipmanı Yapılandır
loadout = Yükleme loadout = Yükleme
resources = Kaynaklar resources = Kaynaklar
bannedblocks = Yasaklı Bloklar bannedblocks = Yasaklı Bloklar
bannedunits = Yasaklı Elemanlar
addall = Hepsini Ekle addall = Hepsini Ekle
launch.from = [accent]{0} dan fırlatılıyor. launch.from = [accent]{0} dan fırlatılıyor.
launch.destination = Varış Yeri: {0} launch.destination = Varış Yeri: {0}
configure.invalid = Miktar 0 ve {0} arasında bir sayı olmalı. configure.invalid = Miktar 0 ve {0} arasında bir sayı olmalı.
add = Ekle... add = Ekle...
guardian = Gardian guardian = Gardiyan
connectfail = [crimson]Bağlantı hatası:\n\n[accent]{0} connectfail = [crimson]Bağlantı hatası:\n\n[accent]{0}
error.unreachable = Sunucuya ulaşılamıyor.\nAdresin doğru yazıldığına emin misiniz? error.unreachable = Sunucuya ulaşılamıyor.\nAdresin doğru yazıldığına emin misiniz?
@@ -563,13 +564,15 @@ weather.sandstorm.name = Kum Fırtınası
weather.sporestorm.name = Spor Yağmuru weather.sporestorm.name = Spor Yağmuru
weather.fog.name = Sis weather.fog.name = Sis
sectorlist = Sektörler
sectorlist.attacked = {0} saldırı altında
sectors.unexplored = [lightgray]Keşfedilmemiş sectors.unexplored = [lightgray]Keşfedilmemiş
sectors.resources = Kaynaklar: sectors.resources = Kaynaklar:
sectors.production = Üretim: sectors.production = Üretim:
sectors.export = İhracat: sectors.export = İhracat:
sectors.import = İthalat: sectors.import = İthalat:
sectors.time = Zaman: sectors.time = Zaman:
sectors.threat = Tehlike: sectors.threat = Zorluk:
sectors.wave = Dalga: sectors.wave = Dalga:
sectors.stored = Depolanan: sectors.stored = Depolanan:
sectors.resume = Devam Et sectors.resume = Devam Et
@@ -609,8 +612,8 @@ sector.frozenForest.name = Donmuş Orman
sector.ruinousShores.name = Harap Kıyılar sector.ruinousShores.name = Harap Kıyılar
sector.stainedMountains.name = Lekeli Dağlar sector.stainedMountains.name = Lekeli Dağlar
sector.desolateRift.name = Issız Kanyon sector.desolateRift.name = Issız Kanyon
sector.nuclearComplex.name = Nüleer Santral Kompleksi sector.nuclearComplex.name = kleer Santral Kompleksi
sector.overgrowth.name = ırı Büyüme sector.overgrowth.name = Sarmaşık Sporlar
sector.tarFields.name = Katran Çölü sector.tarFields.name = Katran Çölü
sector.saltFlats.name = Tuz Düzlükleri sector.saltFlats.name = Tuz Düzlükleri
sector.fungalPass.name = Mantar Geçidi sector.fungalPass.name = Mantar Geçidi
@@ -642,7 +645,7 @@ status.wet.name = Islak
status.muddy.name = Çamurlu status.muddy.name = Çamurlu
status.melting.name = Eriyor status.melting.name = Eriyor
status.sapped.name = Emilmiş status.sapped.name = Emilmiş
status.electrified.name = Elektirklenmiş status.electrified.name = Elektriklenmiş
status.spore-slowed.name = Sporlanmış status.spore-slowed.name = Sporlanmış
status.tarred.name = Ziftlenmiş status.tarred.name = Ziftlenmiş
status.overclock.name = Hızlandırlımış status.overclock.name = Hızlandırlımış
@@ -876,6 +879,7 @@ setting.seconds = {0} Saniye
setting.milliseconds = {0} milisaniye setting.milliseconds = {0} milisaniye
setting.fullscreen.name = Tam Ekran setting.fullscreen.name = Tam Ekran
setting.borderlesswindow.name = Kenarsız Pencere setting.borderlesswindow.name = Kenarsız Pencere
setting.borderlesswindow.name.windows = Kenrasız TamEkran
setting.borderlesswindow.description = Oyunu baştan açman gerekebilir. setting.borderlesswindow.description = Oyunu baştan açman gerekebilir.
setting.fps.name = FPS Göster setting.fps.name = FPS Göster
setting.smoothcamera.name = Yumuşak Geçişli Kamera setting.smoothcamera.name = Yumuşak Geçişli Kamera
@@ -999,6 +1003,7 @@ rules.wavetimer = Dalga Zamanlayıcısı
rules.waves = Dalgalar rules.waves = Dalgalar
rules.attack = Saldırı Modu rules.attack = Saldırı Modu
rules.buildai = Yapay Zeka İnşası rules.buildai = Yapay Zeka İnşası
rules.aitier = Yapay Zeka Seviyesi
rules.cleanupdeadteams = Kaybeden Takımın Bloklarını Temizle (PvP) rules.cleanupdeadteams = Kaybeden Takımın Bloklarını Temizle (PvP)
rules.corecapture = Yıkımca Çekirdeği Elegeçir rules.corecapture = Yıkımca Çekirdeği Elegeçir
rules.polygoncoreprotection = Çokgenli Çekirdek Koruması rules.polygoncoreprotection = Çokgenli Çekirdek Koruması
@@ -1018,12 +1023,15 @@ rules.deconstructrefundmultiplier = Yıkım İade Çarpanı
rules.waitForWaveToEnd = Dalgalar Düşmanı Bekler rules.waitForWaveToEnd = Dalgalar Düşmanı Bekler
rules.dropzoneradius = İniş Noktası Yarıçapı: [lightgray](kare) rules.dropzoneradius = İniş Noktası Yarıçapı: [lightgray](kare)
rules.unitammo = Birlikler Mermi Gerektiriyor rules.unitammo = Birlikler Mermi Gerektiriyor
rules.enemyteam = Düşman Takım
rules.playerteam = Oyuncu Takımı
rules.title.waves = Dalgalar rules.title.waves = Dalgalar
rules.title.resourcesbuilding = Kaynaklar & İnşa rules.title.resourcesbuilding = Kaynaklar & İnşa
rules.title.enemy = Düşmanlar rules.title.enemy = Düşmanlar
rules.title.unit = Birlikler rules.title.unit = Birlikler
rules.title.experimental = Deneysel rules.title.experimental = Deneysel
rules.title.environment = Çevre rules.title.environment = Çevre
rules.title.teams = Takımlar
rules.lighting = ıklandırma rules.lighting = ıklandırma
rules.enemyLights = Enemy Lights rules.enemyLights = Enemy Lights
rules.fire = Ateş rules.fire = Ateş
@@ -1102,7 +1110,6 @@ unit.reign.name = Reign
unit.vela.name = Vela unit.vela.name = Vela
unit.corvus.name = Corvus unit.corvus.name = Corvus
block.resupply-point.name = İkmal Noktası
block.parallax.name = Parallax block.parallax.name = Parallax
block.cliff.name = Uçurum block.cliff.name = Uçurum
block.sand-boulder.name = Kumlu Kaya Parçaları block.sand-boulder.name = Kumlu Kaya Parçaları
@@ -1293,7 +1300,7 @@ block.spectre.name = Spectre
block.meltdown.name = Meltdown block.meltdown.name = Meltdown
block.foreshadow.name = Foreshadow block.foreshadow.name = Foreshadow
block.container.name = Konteyner block.container.name = Konteyner
block.launch-pad.name = Kalkış Pisti block.launch-pad.name = Fıralatış Rampası
block.segment.name = Segment block.segment.name = Segment
block.command-center.name = Komuta Merkezi block.command-center.name = Komuta Merkezi
block.ground-factory.name = Yer Birimi Fabrikası block.ground-factory.name = Yer Birimi Fabrikası
@@ -1406,7 +1413,6 @@ liquid.oil.description = İleri seviye malzeme üretiminde kullanılan bir sıv
liquid.cryofluid.description = Su ve titanyumdan oluşturulan inaktif bir sıvı. Son derece yüksek ısı kapasitesine sahiptir. Soğutucu olarak yaygın olarak kullanılır. liquid.cryofluid.description = Su ve titanyumdan oluşturulan inaktif bir sıvı. Son derece yüksek ısı kapasitesine sahiptir. Soğutucu olarak yaygın olarak kullanılır.
block.derelict = [lightgray] Sahipsiz block.derelict = [lightgray] Sahipsiz
block.resupply-point.description = Yakındaki birimlere mermi verir. Elektikle çalışmaz.
block.armored-conveyor.description = Materyalleri titanyum konveyörlerle aynı hızda taşır ama daha fazla zırha sahiptir. Diğer konveyörler dışında yan taraflardan materyal kabul etmez. block.armored-conveyor.description = Materyalleri titanyum konveyörlerle aynı hızda taşır ama daha fazla zırha sahiptir. Diğer konveyörler dışında yan taraflardan materyal kabul etmez.
block.illuminator.description = Küçük, kompakt, yapılandırılabilir bir ışık kaynağı. Çalışması için enerji gerekir. block.illuminator.description = Küçük, kompakt, yapılandırılabilir bir ışık kaynağı. Çalışması için enerji gerekir.
block.message.description = Bir mesajı saklar. Müttefikler arasındaki haberleşmede kullanılır. block.message.description = Bir mesajı saklar. Müttefikler arasındaki haberleşmede kullanılır.
@@ -1594,7 +1600,7 @@ unit.navanax.description = Devasa patlayıcı EMP gülleleri fırlatır, düşma
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.
lst.print = Text yazar. lst.print = Yazı yazar.
lst.draw = Ekrana Çizer. lst.draw = Ekrana Çizer.
lst.drawflush = Ekrana Çizimi Aktarır. lst.drawflush = Ekrana Çizimi Aktarır.
lst.printflush = Mesaj bloğuna texti aktarır, lst.printflush = Mesaj bloğuna texti aktarır,
@@ -1622,7 +1628,7 @@ lenum.config = Bina configurasyonu, örnek: Ayıklayıcı Türü
lenum.enabled = Blok aktif mi? lenum.enabled = Blok aktif mi?
laccess.color = Aydınlatıcı Rengi. laccess.color = Aydınlatıcı Rengi.
laccess.controller = Nirim Kontrol edici. Eğer işlemci kontrol ediyorsa işlemci döner. laccess.controller = Birim Kontrol edici. Eğer işlemci kontrol ediyorsa işlemci döner. \nFormasyon durumundaysa, lider döner.\nDiğer şekilde, birimi kendi döner.
laccess.dead = Bir bina veya birim hala var mı? laccess.dead = Bir bina veya birim hala var mı?
laccess.controlled = Bir birim ne tarafından kontrol ediliyor? laccess.controlled = Bir birim ne tarafından kontrol ediliyor?
laccess.commanded = [red]Bu komut sonradan silicek! Controlled kullan! laccess.commanded = [red]Bu komut sonradan silicek! Controlled kullan!
@@ -1689,16 +1695,16 @@ lenum.damaged = Hasarlı Aynı Takımdan bir Blok.
lenum.spawn = Düşman Oluşum Noktası lenum.spawn = Düşman Oluşum Noktası
lenum.building = Bir guruptan bir blok. lenum.building = Bir guruptan bir blok.
lenum.core = Herhangi bir Çekirdek. lenum.core = Herhangi bir Çekirdek
lenum.storage = Depolama Bloğu, lenum.storage = Depolama Bloğu
lenum.generator = Enerji Üreten bir Blok. lenum.generator = Enerji Üreten bir Blok
lenum.factory = Fabrika Bloğu, lenum.factory = Fabrika Bloğu
lenum.repair = Tamir Bloğu. lenum.repair = Tamir Bloğu
lenum.rally = Komut Bloğu. lenum.rally = Komut Bloğu
lenum.battery = Pil. lenum.battery = Pil
lenum.resupply = Mermi Aktarım Bloğu. lenum.resupply = Mermi Aktarım Bloğu
lenum.reactor = Patlama/Thorium Reaktör. lenum.reactor = Patlama/Toryum Reaktör
lenum.turret = Herhangi bir taret. lenum.turret = Herhangi bir taret
sensor.in = Algılanan Blok/Birim. sensor.in = Algılanan Blok/Birim.
@@ -1731,13 +1737,13 @@ lenum.stop = Dur!
lenum.move = Tam konuma git. lenum.move = Tam konuma git.
lenum.approach = Bir Konuma yaklaş. lenum.approach = Bir Konuma yaklaş.
lenum.pathfind = Düşman Doğuş noktasına git. lenum.pathfind = Düşman Doğuş noktasına git.
lenum.target = Bir alana ateş et, lenum.target = Bir alana ateş et.
lenum.targetp = Bir cisme ateş et. lenum.targetp = Bir cisme ateş et.
lenum.itemdrop = Bir itemi bırak. lenum.itemdrop = Bir itemi bırak.
lenum.itemtake = Bir binadan item al. lenum.itemtake = Bir binadan item al.
lenum.paydrop = Kargoyu bırak. lenum.paydrop = Kargoyu bırak.
lenum.paytake = Kargo al. lenum.paytake = Kargo al.
lenum.flag = Numara ile işaretle, lenum.flag = Numara ile işaretle.
lenum.mine = Kaz. lenum.mine = Kaz.
lenum.build = Bina inşa et. lenum.build = Bina inşa et.
lenum.getblock = Bir bloğun verilerini al. lenum.getblock = Bir bloğun verilerini al.

View File

@@ -87,7 +87,7 @@ public class Vars implements Loadable{
public static final int maxNameLength = 40; public static final int maxNameLength = 40;
/** displayed item size when ingame. */ /** displayed item size when ingame. */
public static final float itemSize = 5f; public static final float itemSize = 5f;
/** units outside of this bound will die instantly */ /** units outside this bound will die instantly */
public static final float finalWorldBounds = 250; public static final float finalWorldBounds = 250;
/** range for building */ /** range for building */
public static final float buildingRange = 220f; public static final float buildingRange = 220f;

View File

@@ -52,6 +52,7 @@ public class BaseAI{
} }
public void update(){ public void update(){
if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){ if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){
CoreBlock block = (CoreBlock)data.core().block; CoreBlock block = (CoreBlock)data.core().block;
int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType); int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType);
@@ -90,49 +91,51 @@ public class BaseAI{
}else{ }else{
var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore); var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore);
int[][] weights = field.weights; if(field.weights != null){
for(int i = 0; i < pathStep; i++){ int[][] weights = field.weights;
int minCost = Integer.MAX_VALUE; for(int i = 0; i < pathStep; i++){
int cx = calcTile.x, cy = calcTile.y; int minCost = Integer.MAX_VALUE;
boolean foundAny = false; int cx = calcTile.x, cy = calcTile.y;
for(Point2 p : Geometry.d4){ boolean foundAny = false;
int nx = cx + p.x, ny = cy + p.y; for(Point2 p : Geometry.d4){
int nx = cx + p.x, ny = cy + p.y;
Tile other = world.tile(nx, ny); Tile other = world.tile(nx, ny);
if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){ if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){
minCost = weights[nx][ny]; minCost = weights[nx][ny];
calcTile = other; calcTile = other;
foundAny = true; foundAny = true;
}
} }
//didn't find anything, break out of loop, this will trigger a clear later
if(!foundAny){
calcCount = Integer.MAX_VALUE;
break;
}
calcPath.add(calcTile.pos());
for(Point2 p : Geometry.d8){
calcPath.add(Point2.pack(p.x + calcTile.x, p.y + calcTile.y));
}
//found the end.
if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){
//clean up calculations and flush results
calculating = false;
calcCount = 0;
path.clear();
path.addAll(calcPath);
calcPath.clear();
calcTile = null;
totalCalcs ++;
foundPath = true;
break;
}
calcCount ++;
} }
//didn't find anything, break out of loop, this will trigger a clear later
if(!foundAny){
calcCount = Integer.MAX_VALUE;
break;
}
calcPath.add(calcTile.pos());
for(Point2 p : Geometry.d8){
calcPath.add(Point2.pack(p.x + calcTile.x, p.y + calcTile.y));
}
//found the end.
if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){
//clean up calculations and flush results
calculating = false;
calcCount = 0;
path.clear();
path.addAll(calcPath);
calcPath.clear();
calcTile = null;
totalCalcs ++;
foundPath = true;
break;
}
calcCount ++;
} }
} }
} }

View File

@@ -21,6 +21,7 @@ import static mindustry.Vars.*;
public class WaveSpawner{ public class WaveSpawner{
private static final float margin = 40f, coreMargin = tilesize * 2f, maxSteps = 30; private static final float margin = 40f, coreMargin = tilesize * 2f, maxSteps = 30;
private int tmpCount;
private Seq<Tile> spawns = new Seq<>(); private Seq<Tile> spawns = new Seq<>();
private boolean spawning = false; private boolean spawning = false;
private boolean any = false; private boolean any = false;
@@ -162,6 +163,18 @@ public class WaveSpawner{
} }
} }
public int countGroundSpawns(){
tmpCount = 0;
eachGroundSpawn((x, y) -> tmpCount ++);
return tmpCount;
}
public int countFlyerSpawns(){
tmpCount = 0;
eachFlyerSpawn((x, y) -> tmpCount ++);
return tmpCount;
}
public boolean isSpawning(){ public boolean isSpawning(){
return spawning && !net.client(); return spawning && !net.client();
} }

View File

@@ -5,21 +5,17 @@ import arc.math.geom.*;
import mindustry.ai.formations.*; import mindustry.ai.formations.*;
public class CircleFormation extends FormationPattern{ public class CircleFormation extends FormationPattern{
/** Angle offset. */
public float angleOffset = 0;
@Override @Override
public Vec3 calculateSlotLocation(Vec3 outLocation, int slotNumber){ public Vec3 calculateSlotLocation(Vec3 outLocation, int slotNumber){
if(slots > 1){ if(slots > 1){
float angle = (360f * slotNumber) / slots; float angle = (360f * slotNumber) / slots + (slots == 8 ? 22.5f : 0);
float radius = spacing / (float)Math.sin(180f / slots * Mathf.degRad); float radius = spacing / (float)Math.sin(180f / slots * Mathf.degRad);
outLocation.set(Angles.trnsx(angle, radius), Angles.trnsy(angle, radius), angle); outLocation.set(Angles.trnsx(angle, radius), Angles.trnsy(angle, radius), angle);
}else{ }else{
outLocation.set(0, spacing * 1.1f, 360f * slotNumber); outLocation.set(0, spacing * 1.1f, 360f * slotNumber);
} }
outLocation.z += angleOffset;
return outLocation; return outLocation;
} }

View File

@@ -15,11 +15,12 @@ import static mindustry.Vars.*;
public class BuilderAI extends AIController{ public class BuilderAI extends AIController{
public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f; public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f;
public @Nullable Unit following;
public @Nullable Teamc enemy;
public @Nullable BlockPlan lastPlan;
boolean found = false; boolean found = false;
@Nullable Unit following;
@Nullable Teamc enemy;
float retreatTimer; float retreatTimer;
@Nullable BlockPlan lastPlan;
@Override @Override
public void updateMovement(){ public void updateMovement(){

View File

@@ -21,12 +21,12 @@ public class DefenderAI extends AIController{
} }
@Override @Override
protected void updateTargeting(){ public void updateTargeting(){
if(retarget()) target = findTarget(unit.x, unit.y, unit.range(), true, true); if(retarget()) target = findTarget(unit.x, unit.y, unit.range(), true, true);
} }
@Override @Override
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
//find unit to follow if not in rally mode //find unit to follow if not in rally mode
if(command() != UnitCommand.rally){ if(command() != UnitCommand.rally){

View File

@@ -32,7 +32,7 @@ public class FlyingAI extends AIController{
} }
@Override @Override
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
var result = findMainTarget(x, y, range, air, ground); var result = findMainTarget(x, y, range, air, ground);
//if the main target is in range, use it, otherwise target whatever is closest //if the main target is in range, use it, otherwise target whatever is closest
@@ -40,7 +40,7 @@ public class FlyingAI extends AIController{
} }
@Override @Override
protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){ public Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
var core = targetFlag(x, y, BlockFlag.core, true); var core = targetFlag(x, y, BlockFlag.core, true);
if(core != null && Mathf.within(x, y, core.getX(), core.getY(), range)){ if(core != null && Mathf.within(x, y, core.getX(), core.getY(), range)){

View File

@@ -44,7 +44,7 @@ public class LogicAI extends AIController{
private ObjectSet<Object> radars = new ObjectSet<>(); private ObjectSet<Object> radars = new ObjectSet<>();
@Override @Override
protected void updateMovement(){ public void updateMovement(){
if(itemTimer >= 0) itemTimer -= Time.delta; if(itemTimer >= 0) itemTimer -= Time.delta;
if(payTimer >= 0) payTimer -= Time.delta; if(payTimer >= 0) payTimer -= Time.delta;
@@ -114,7 +114,7 @@ public class LogicAI extends AIController{
} }
@Override @Override
protected void moveTo(Position target, float circleLength, float smooth){ public void moveTo(Position target, float circleLength, float smooth){
if(target == null) return; if(target == null) return;
vec.set(target).sub(unit); vec.set(target).sub(unit);
@@ -141,29 +141,29 @@ public class LogicAI extends AIController{
} }
@Override @Override
protected boolean checkTarget(Teamc target, float x, float y, float range){ public boolean checkTarget(Teamc target, float x, float y, float range){
return false; return false;
} }
//always retarget //always retarget
@Override @Override
protected boolean retarget(){ public boolean retarget(){
return true; return true;
} }
@Override @Override
protected boolean invalid(Teamc target){ public boolean invalid(Teamc target){
return false; return false;
} }
@Override @Override
protected boolean shouldShoot(){ public boolean shouldShoot(){
return shoot && !(unit.type.canBoost && boost); return shoot && !(unit.type.canBoost && boost);
} }
//always aim for the main target //always aim for the main target
@Override @Override
protected Teamc target(float x, float y, float range, boolean air, boolean ground){ public Teamc target(float x, float y, float range, boolean air, boolean ground){
return switch(aimControl){ return switch(aimControl){
case target -> posTarget; case target -> posTarget;
case targetp -> mainTarget; case targetp -> mainTarget;

View File

@@ -9,12 +9,12 @@ import mindustry.world.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class MinerAI extends AIController{ public class MinerAI extends AIController{
boolean mining = true; public boolean mining = true;
Item targetItem; public Item targetItem;
Tile ore; public Tile ore;
@Override @Override
protected void updateMovement(){ public void updateMovement(){
Building core = unit.closestCore(); Building core = unit.closestCore();
if(!(unit.canMine()) || core == null) return; if(!(unit.canMine()) || core == null) return;

View File

@@ -13,7 +13,7 @@ public class RepairAI extends AIController{
float retreatTimer; float retreatTimer;
@Override @Override
protected void updateMovement(){ public void updateMovement(){
if(target instanceof Building){ if(target instanceof Building){
boolean shoot = false; boolean shoot = false;
@@ -56,7 +56,7 @@ public class RepairAI extends AIController{
} }
@Override @Override
protected void updateTargeting(){ public void updateTargeting(){
Building target = Units.findDamagedTile(unit.team, unit.x, unit.y); Building target = Units.findDamagedTile(unit.team, unit.x, unit.y);
if(target instanceof ConstructBuild) target = null; if(target instanceof ConstructBuild) target = null;

View File

@@ -111,7 +111,7 @@ public class SuicideAI extends GroundAI{
} }
@Override @Override
protected Teamc target(float x, float y, float range, boolean air, boolean ground){ public Teamc target(float x, float y, float range, boolean air, boolean ground){
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground && return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground &&
!(t.block instanceof Conveyor || t.block instanceof Conduit)); //do not target conveyors/conduits !(t.block instanceof Conveyor || t.block instanceof Conduit)); //do not target conveyors/conduits
} }

View File

@@ -393,12 +393,6 @@ public class Fx{
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f); Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
}), }),
healDenamic = new Effect(11, e -> {
color(Pal.heal);
stroke(e.fout() * 2f);
Lines.circle(e.x, e.y, 2f + e.finpow() * e.rotation);
}),
shieldWave = new Effect(22, e -> { shieldWave = new Effect(22, e -> {
color(e.color, 0.7f); color(e.color, 0.7f);
stroke(e.fout() * 2f); stroke(e.fout() * 2f);
@@ -1000,7 +994,9 @@ public class Fx{
float length = 20f * e.finpow(); float length = 20f * e.finpow();
float size = 7f * e.fout(); float size = 7f * e.fout();
rect(((Item)e.data).fullIcon, e.x + trnsx(e.rotation, length), e.y + trnsy(e.rotation, length), size, size); if(!(e.data instanceof Item item)) return;
rect(item.fullIcon, e.x + trnsx(e.rotation, length), e.y + trnsy(e.rotation, length), size, size);
}), }),
shockwave = new Effect(10f, 80f, e -> { shockwave = new Effect(10f, 80f, e -> {

View File

@@ -4,6 +4,7 @@ import arc.*;
import arc.graphics.*; import arc.graphics.*;
import arc.math.*; import arc.math.*;
import mindustry.ctype.*; import mindustry.ctype.*;
import mindustry.game.*;
import mindustry.game.EventType.*; import mindustry.game.EventType.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.graphics.*; import mindustry.graphics.*;
@@ -163,7 +164,7 @@ public class StatusEffects implements ContentList{
}}; }};
boss = new StatusEffect("boss"){{ boss = new StatusEffect("boss"){{
color = Pal.health; color = Team.sharded.color;
permanent = true; permanent = true;
damageMultiplier = 1.3f; damageMultiplier = 1.3f;
healthMultiplier = 1.5f; healthMultiplier = 1.5f;

View File

@@ -1789,7 +1789,7 @@ public class UnitTypes implements ContentList{
shootY = 6f; shootY = 6f;
beamWidth = 0.8f; beamWidth = 0.8f;
mirror = false; mirror = false;
repairSpeed = 0.7f; repairSpeed = 0.75f;
bullet = new BulletType(){{ bullet = new BulletType(){{
maxRange = 120f; maxRange = 120f;
@@ -1835,8 +1835,8 @@ public class UnitTypes implements ContentList{
speed = 0f; speed = 0f;
splashDamage = 50f; splashDamage = 55f;
splashDamageRadius = 40f; splashDamageRadius = 45f;
}}; }};
}}); }});
}}; }};

View File

@@ -383,6 +383,8 @@ public class Control implements ApplicationListener, Loadable{
Groups.fire.clear(); Groups.fire.clear();
Groups.puddle.clear(); Groups.puddle.clear();
//reset to 0, so replaced cores don't count
state.rules.defaultTeam.data().unitCap = 0;
Schematics.placeLaunchLoadout(spawn.x, spawn.y); Schematics.placeLaunchLoadout(spawn.x, spawn.y);
//set up camera/player locations //set up camera/player locations

View File

@@ -105,8 +105,8 @@ public class Renderer implements ApplicationListener{
for(int i = 0; i < splashes.length; i++) splashes[i] = atlas.find("splash-" + i); for(int i = 0; i < splashes.length; i++) splashes[i] = atlas.find("splash-" + i);
assets.load("sprites/clouds.png", Texture.class).loaded = t -> { assets.load("sprites/clouds.png", Texture.class).loaded = t -> {
((Texture)t).setWrap(TextureWrap.repeat); t.setWrap(TextureWrap.repeat);
((Texture)t).setFilter(TextureFilter.linear); t.setFilter(TextureFilter.linear);
}; };
} }

View File

@@ -261,6 +261,7 @@ public class UI implements ApplicationListener, Loadable{
this.numeric = inumeric; this.numeric = inumeric;
this.maxLength = textLength; this.maxLength = textLength;
this.accepted = confirmed; this.accepted = confirmed;
this.allowEmpty = false;
}}); }});
}else{ }else{
new Dialog(titleText){{ new Dialog(titleText){{

View File

@@ -358,30 +358,23 @@ public class World{
} }
public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){ public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){
int x0 = x0f; int x0 = x0f, dx = Math.abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
int y0 = y0f; int y0 = y0f, dy = Math.abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
int dx = Math.abs(x1 - x0); int e2, err = dx - dy;
int dy = Math.abs(y1 - y0);
int sx = x0 < x1 ? 1 : -1;
int sy = y0 < y1 ? 1 : -1;
int err = dx - dy;
int e2;
while(true){ while(true){
if(cons.accept(x0, y0)) break; if(cons.accept(x0, y0)) break;
if(x0 == x1 && y0 == y1) break; if(x0 == x1 && y0 == y1) break;
e2 = 2 * err; e2 = 2 * err;
if(e2 > -dy){ if(e2 > -dy){
err = err - dy; err -= dy;
x0 = x0 + sx; x0 += sx;
} }
if(e2 < dx){ if(e2 < dx){
err = err + dx; err += dx;
y0 = y0 + sy; y0 += sy;
} }
} }
} }

View File

@@ -232,7 +232,7 @@ public class MapGenerateDialog extends BaseDialog{
}else{ }else{
Core.scene.setScrollFocus(null); Core.scene.setScrollFocus(null);
} }
}).grow().uniformX().get().setScrollingDisabled(true, false); }).grow().uniformX().scrollX(false);
}).grow(); }).grow();
buffer1 = create(); buffer1 = create();
@@ -350,7 +350,7 @@ public class MapGenerateDialog extends BaseDialog{
update(); update();
selection.hide(); selection.hide();
}).with(Table::left).get().getLabelCell().growX().left().padLeft(5).labelAlign(Align.left); }).with(Table::left).get().getLabelCell().growX().left().padLeft(5).labelAlign(Align.left);
}).get().setScrollingDisabled(true, false); }).scrollX(false);
selection.addCloseButton(); selection.addCloseButton();
selection.show(); selection.show();

View File

@@ -38,7 +38,7 @@ public class MapInfoDialog extends BaseDialog{
TextField name = t.field(tags.get("name", ""), text -> { TextField name = t.field(tags.get("name", ""), text -> {
tags.put("name", text); tags.put("name", text);
}).size(400, 55f).addInputDialog(50).get(); }).size(400, 55f).maxTextLength(50).get();
name.setMessageText("@unknown"); name.setMessageText("@unknown");
t.row(); t.row();
@@ -46,7 +46,7 @@ public class MapInfoDialog extends BaseDialog{
TextArea description = t.area(tags.get("description", ""), Styles.areaField, text -> { TextArea description = t.area(tags.get("description", ""), Styles.areaField, text -> {
tags.put("description", text); tags.put("description", text);
}).size(400f, 140f).addInputDialog(1000).get(); }).size(400f, 140f).maxTextLength(1000).get();
t.row(); t.row();
t.add("@editor.author").padRight(8).left(); t.add("@editor.author").padRight(8).left();
@@ -54,7 +54,7 @@ public class MapInfoDialog extends BaseDialog{
TextField author = t.field(tags.get("author", Core.settings.getString("mapAuthor", "")), text -> { TextField author = t.field(tags.get("author", Core.settings.getString("mapAuthor", "")), text -> {
tags.put("author", text); tags.put("author", text);
Core.settings.put("mapAuthor", text); Core.settings.put("mapAuthor", text);
}).size(400, 55f).addInputDialog(50).get(); }).size(400, 55f).maxTextLength(50).get();
author.setMessageText("@unknown"); author.setMessageText("@unknown");
t.row(); t.row();

View File

@@ -29,7 +29,7 @@ public class MapResizeDialog extends BaseDialog{
table.field((w ? width : height) + "", TextFieldFilter.digitsOnly, value -> { table.field((w ? width : height) + "", TextFieldFilter.digitsOnly, value -> {
int val = Integer.parseInt(value); int val = Integer.parseInt(value);
if(w) width = val; else height = val; if(w) width = val; else height = val;
}).valid(value -> Strings.canParsePositiveInt(value) && Integer.parseInt(value) <= maxSize && Integer.parseInt(value) >= minSize).addInputDialog(3); }).valid(value -> Strings.canParsePositiveInt(value) && Integer.parseInt(value) <= maxSize && Integer.parseInt(value) >= minSize).maxTextLength(3);
table.row(); table.row();
} }

View File

@@ -189,7 +189,7 @@ public class WaveGraph extends Table{
for(UnitType o : hidden) used.remove(o); for(UnitType o : hidden) used.remove(o);
}).update(b -> b.setChecked(hidden.contains(type))); }).update(b -> b.setChecked(hidden.contains(type)));
} }
}).get().setScrollingDisabled(false, true); }).scrollY(false);
for(UnitType type : hidden){ for(UnitType type : hidden){
used.remove(type); used.remove(type);

View File

@@ -128,7 +128,7 @@ public class WaveInfoDialog extends BaseDialog{
cont.clear(); cont.clear();
cont.stack(new Table(Tex.clear, main -> { cont.stack(new Table(Tex.clear, main -> {
main.pane(t -> table = t).growX().growY().padRight(8f).get().setScrollingDisabled(true, false); main.pane(t -> table = t).growX().growY().padRight(8f).scrollX(false);
main.row(); main.row();
main.button("@add", () -> { main.button("@add", () -> {
if(groups == null) groups = new Seq<>(); if(groups == null) groups = new Seq<>();

View File

@@ -19,7 +19,8 @@ import static mindustry.Vars.*;
public class Effect{ public class Effect{
private static final float shakeFalloff = 10000f; private static final float shakeFalloff = 10000f;
private static final EffectContainer container = new EffectContainer(); private static final EffectContainer container = new EffectContainer();
private static final Seq<Effect> all = new Seq<>();
public static final Seq<Effect> all = new Seq<>();
private boolean initialized; private boolean initialized;

View File

@@ -1,5 +1,6 @@
package mindustry.entities; package mindustry.entities;
import arc.func.*;
import arc.math.*; import arc.math.*;
import arc.math.geom.*; import arc.math.geom.*;
import arc.struct.*; import arc.struct.*;
@@ -23,7 +24,9 @@ public class EntityCollisions{
private Rect r2 = new Rect(); private Rect r2 = new Rect();
//entity collisions //entity collisions
private Seq<Hitboxc> arrOut = new Seq<>(); private Seq<Hitboxc> arrOut = new Seq<>(Hitboxc.class);
private Cons<Hitboxc> hitCons = this::updateCollision;
private Cons<QuadTree> treeCons = tree -> tree.intersect(r2, arrOut);
public void moveCheck(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){ public void moveCheck(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){
if(!solidCheck.solid(entity.tileX(), entity.tileY())){ if(!solidCheck.solid(entity.tileX(), entity.tileY())){
@@ -36,7 +39,7 @@ public class EntityCollisions{
} }
public void move(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){ public void move(Hitboxc entity, float deltax, float deltay, SolidPred solidCheck){
if(Math.abs(deltax) < 0.0001f & Math.abs(deltay) < 0.0001f) return; if(Math.abs(deltax) < 0.0001f & Math.abs(deltay) < 0.0001f) return;
boolean movedx = false; boolean movedx = false;
@@ -213,28 +216,34 @@ public class EntityCollisions{
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends Hitboxc> void collide(EntityGroup<T> groupa){ public <T extends Hitboxc> void collide(EntityGroup<T> groupa){
groupa.each(solid -> { groupa.each((Cons<T>)hitCons);
solid.hitbox(r1); }
r1.x += (solid.lastX() - solid.getX());
r1.y += (solid.lastY() - solid.getY());
solid.hitbox(r2); private void updateCollision(Hitboxc solid){
r2.merge(r1); solid.hitbox(r1);
r1.x += (solid.lastX() - solid.getX());
r1.y += (solid.lastY() - solid.getY());
arrOut.clear(); solid.hitbox(r2);
r2.merge(r1);
//get all targets based on what entity wants to collide with arrOut.clear();
solid.getCollisions(tree -> tree.intersect(r2, arrOut));
for(Hitboxc sc : arrOut){ //get all targets based on what entity wants to collide with
sc.hitbox(r1); solid.getCollisions(treeCons);
if(r2.overlaps(r1)){
checkCollide(solid, sc); var items = arrOut.items;
//break out of loop when this object hits something int size = arrOut.size;
if(!solid.isAdded()) return;
} for(int i = 0; i < size; i++){
Hitboxc sc = items[i];
sc.hitbox(r1);
if(r2.overlaps(r1)){
checkCollide(solid, sc);
//break out of loop when this object hits something
if(!solid.isAdded()) return;
} }
}); }
} }
public interface SolidPred{ public interface SolidPred{

View File

@@ -10,6 +10,7 @@ import arc.util.*;
import mindustry.*; import mindustry.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.entities.*; import mindustry.entities.*;
import mindustry.game.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.type.*; import mindustry.type.*;
@@ -105,7 +106,11 @@ public class EnergyFieldAbility extends Ability{
}); });
if(hitBuildings){ if(hitBuildings){
Units.nearbyBuildings(rx, ry, range, all::add); Units.nearbyBuildings(rx, ry, range, b -> {
if(b.team != Team.derelict || state.rules.coreCapture){
all.add(b);
}
});
} }
all.sort(h -> h.dst2(rx, ry)); all.sort(h -> h.dst2(rx, ry));

View File

@@ -118,36 +118,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
type.update(self()); type.update(self());
if(type.collidesTiles && type.collides && type.collidesGround){ if(type.collidesTiles && type.collides && type.collidesGround){
world.raycastEach(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY(), (x, y) -> { tileRaycast(World.toTile(lastX()), World.toTile(lastY()), tileX(), tileY());
Building build = world.build(x, y);
if(build == null || !isAdded()) return false;
if(build.collide(self()) && type.testCollision(self(), build) && !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){
boolean remove = false;
float health = build.health;
if(build.team != team){
remove = build.collision(self());
}
if(remove || type.collidesTeam){
if(!type.pierceBuilding){
hit = true;
remove();
}else{
collided.add(build.id);
}
}
type.hitTile(self(), build, health, true);
return !type.pierceBuilding;
}
return false;
});
} }
if(type.pierceCap != -1 && collided.size >= type.pierceCap){ if(type.pierceCap != -1 && collided.size >= type.pierceCap){
@@ -156,6 +127,55 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw
} }
} }
//copy-paste of World#raycastEach, inlined for lambda capture performance.
@Override
public void tileRaycast(int x0f, int y0f, int x1, int y1){
int x = x0f, dx = Math.abs(x1 - x), sx = x < x1 ? 1 : -1;
int y = y0f, dy = Math.abs(y1 - y), sy = y < y1 ? 1 : -1;
int e2, err = dx - dy;
while(true){
Building build = world.build(x, y);
if(build != null && isAdded() && build.collide(self()) && type.testCollision(self(), build)
&& !build.dead() && (type.collidesTeam || build.team != team) && !(type.pierceBuilding && hasCollided(build.id))){
boolean remove = false;
float health = build.health;
if(build.team != team){
remove = build.collision(self());
}
if(remove || type.collidesTeam){
if(!type.pierceBuilding){
hit = true;
remove();
}else{
collided.add(build.id);
}
}
type.hitTile(self(), build, health, true);
//stop raycasting when building is hit
if(type.pierceBuilding) return;
}
if(x == x1 && y == y1) break;
e2 = 2 * err;
if(e2 > -dy){
err -= dy;
x += sx;
}
if(e2 < dx){
err += dx;
y += sy;
}
}
}
@Override @Override
public void draw(){ public void draw(){
Draw.z(type.layer); Draw.z(type.layer);

View File

@@ -45,6 +45,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
transient String lastText = ""; transient String lastText = "";
transient float textFadeTime; transient float textFadeTime;
transient private Unit lastReadUnit = Nulls.unit; transient private Unit lastReadUnit = Nulls.unit;
transient private int wrongReadUnits;
transient @Nullable Unit justSwitchFrom, justSwitchTo; transient @Nullable Unit justSwitchFrom, justSwitchTo;
public boolean isBuilder(){ public boolean isBuilder(){
@@ -104,9 +105,15 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
//reason: we know the server is lying here, essentially skip the unit snapshot because we know the client's information is more recent //reason: we know the server is lying here, essentially skip the unit snapshot because we know the client's information is more recent
if(isLocal() && unit == justSwitchFrom && justSwitchFrom != null && justSwitchTo != null){ if(isLocal() && unit == justSwitchFrom && justSwitchFrom != null && justSwitchTo != null){
unit = justSwitchTo; unit = justSwitchTo;
//if several snapshots have passed and this unit is still incorrect, something's wrong
if(++wrongReadUnits >= 2){
justSwitchFrom = null;
wrongReadUnits = 0;
}
}else{ }else{
justSwitchFrom = null; justSwitchFrom = null;
justSwitchTo = null; justSwitchTo = null;
wrongReadUnits = 0;
} }
//simulate a unit change after sync //simulate a unit change after sync

View File

@@ -40,8 +40,8 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
@Import int id; @Import int id;
@Import float x, y; @Import float x, y;
@Import boolean added;
transient private boolean mismatch = false;
transient float accepting, updateTime, lastRipple = Time.time + Mathf.random(40f); transient float accepting, updateTime, lastRipple = Time.time + Mathf.random(40f);
float amount; float amount;
Tile tile; Tile tile;
@@ -79,9 +79,12 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
return; return;
} }
if(Puddles.get(tile) != self()){ if(Puddles.get(tile) != self() && added){
mismatch = true; //force removal without pool free
remove(); Groups.all.remove(self());
Groups.draw.remove(self());
Groups.puddle.remove(self());
added = false;
return; return;
} }
@@ -134,9 +137,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
@Override @Override
public void remove(){ public void remove(){
if(!mismatch){ Puddles.remove(tile);
Puddles.remove(tile);
}
} }
@Override @Override

View File

@@ -46,19 +46,19 @@ public class AIController implements UnitController{
} }
@Nullable @Nullable
protected AIController fallback(){ public AIController fallback(){
return null; return null;
} }
protected boolean useFallback(){ public boolean useFallback(){
return false; return false;
} }
protected UnitCommand command(){ public UnitCommand command(){
return unit.team.data().command; return unit.team.data().command;
} }
protected void updateVisuals(){ public void updateVisuals(){
if(unit.isFlying()){ if(unit.isFlying()){
unit.wobble(); unit.wobble();
@@ -66,21 +66,21 @@ public class AIController implements UnitController{
} }
} }
protected void updateMovement(){ public void updateMovement(){
} }
protected void updateTargeting(){ public void updateTargeting(){
if(unit.hasWeapons()){ if(unit.hasWeapons()){
updateWeapons(); updateWeapons();
} }
} }
protected boolean invalid(Teamc target){ public boolean invalid(Teamc target){
return Units.invalidateTarget(target, unit.team, unit.x, unit.y); return Units.invalidateTarget(target, unit.team, unit.x, unit.y);
} }
protected void pathfind(int pathTarget){ public void pathfind(int pathTarget){
int costType = unit.pathType(); int costType = unit.pathType();
Tile tile = unit.tileOn(); Tile tile = unit.tileOn();
@@ -92,7 +92,7 @@ public class AIController implements UnitController{
unit.moveAt(vec.trns(unit.angleTo(targetTile.worldx(), targetTile.worldy()), unit.speed())); unit.moveAt(vec.trns(unit.angleTo(targetTile.worldx(), targetTile.worldy()), unit.speed()));
} }
protected void updateWeapons(){ public void updateWeapons(){
float rotation = unit.rotation - 90; float rotation = unit.rotation - 90;
boolean ret = retarget(); boolean ret = retarget();
@@ -146,45 +146,45 @@ public class AIController implements UnitController{
} }
} }
protected boolean checkTarget(Teamc target, float x, float y, float range){ public boolean checkTarget(Teamc target, float x, float y, float range){
return Units.invalidateTarget(target, unit.team, x, y, range); return Units.invalidateTarget(target, unit.team, x, y, range);
} }
protected boolean shouldShoot(){ public boolean shouldShoot(){
return true; return true;
} }
protected Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){ public Teamc targetFlag(float x, float y, BlockFlag flag, boolean enemy){
if(unit.team == Team.derelict) return null; if(unit.team == Team.derelict) return null;
Tile target = Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getAllied(unit.team, flag)); Tile target = Geometry.findClosest(x, y, enemy ? indexer.getEnemy(unit.team, flag) : indexer.getAllied(unit.team, flag));
return target == null ? null : target.build; return target == null ? null : target.build;
} }
protected Teamc target(float x, float y, float range, boolean air, boolean ground){ public Teamc target(float x, float y, float range, boolean air, boolean ground){
return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground); return Units.closestTarget(unit.team, x, y, range, u -> u.checkTarget(air, ground), t -> ground);
} }
protected boolean retarget(){ public boolean retarget(){
return timer.get(timerTarget, target == null ? 40 : 90); return timer.get(timerTarget, target == null ? 40 : 90);
} }
protected Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){ public Teamc findMainTarget(float x, float y, float range, boolean air, boolean ground){
return findTarget(x, y, range, air, ground); return findTarget(x, y, range, air, ground);
} }
protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){
return target(x, y, range, air, ground); return target(x, y, range, air, ground);
} }
protected void init(){ public void init(){
} }
protected @Nullable Tile getClosestSpawner(){ public @Nullable Tile getClosestSpawner(){
return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns()); return Geometry.findClosest(unit.x, unit.y, Vars.spawner.getSpawns());
} }
protected void unloadPayloads(){ public void unloadPayloads(){
if(unit instanceof Payloadc pay && pay.hasPayload() && target instanceof Building && pay.payloads().peek() instanceof UnitPayload){ if(unit instanceof Payloadc pay && pay.hasPayload() && target instanceof Building && pay.payloads().peek() instanceof UnitPayload){
if(target.within(unit, Math.max(unit.type().range + 1f, 75f))){ if(target.within(unit, Math.max(unit.type().range + 1f, 75f))){
pay.dropLastPayload(); pay.dropLastPayload();
@@ -192,11 +192,11 @@ public class AIController implements UnitController{
} }
} }
protected void circle(Position target, float circleLength){ public void circle(Position target, float circleLength){
circle(target, circleLength, unit.speed()); circle(target, circleLength, unit.speed());
} }
protected void circle(Position target, float circleLength, float speed){ public void circle(Position target, float circleLength, float speed){
if(target == null) return; if(target == null) return;
vec.set(target).sub(unit); vec.set(target).sub(unit);
@@ -210,11 +210,11 @@ public class AIController implements UnitController{
unit.moveAt(vec); unit.moveAt(vec);
} }
protected void moveTo(Position target, float circleLength){ public void moveTo(Position target, float circleLength){
moveTo(target, circleLength, 100f); moveTo(target, circleLength, 100f);
} }
protected void moveTo(Position target, float circleLength, float smooth){ public void moveTo(Position target, float circleLength, float smooth){
if(target == null) return; if(target == null) return;
vec.set(target).sub(unit); vec.set(target).sub(unit);

View File

@@ -5,8 +5,6 @@ import arc.func.*;
import arc.util.*; import arc.util.*;
import mindustry.maps.*; import mindustry.maps.*;
import static mindustry.Vars.*;
/** Defines preset rule sets. */ /** Defines preset rule sets. */
public enum Gamemode{ public enum Gamemode{
survival(rules -> { survival(rules -> {
@@ -25,7 +23,7 @@ public enum Gamemode{
rules.waveSpacing = 2f * Time.toMinutes; rules.waveSpacing = 2f * Time.toMinutes;
rules.teams.get(rules.waveTeam).infiniteResources = true; rules.teams.get(rules.waveTeam).infiniteResources = true;
}, map -> map.teams.contains(state.rules.waveTeam.id)), }, map -> map.teams.size > 1),
pvp(rules -> { pvp(rules -> {
rules.pvp = true; rules.pvp = true;
rules.enemyCoreBuildRadius = 600f; rules.enemyCoreBuildRadius = 600f;

View File

@@ -33,6 +33,7 @@ import mindustry.world.blocks.power.*;
import mindustry.world.blocks.production.*; import mindustry.world.blocks.production.*;
import mindustry.world.blocks.sandbox.*; import mindustry.world.blocks.sandbox.*;
import mindustry.world.blocks.storage.*; import mindustry.world.blocks.storage.*;
import mindustry.world.blocks.storage.CoreBlock.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
import java.io.*; import java.io.*;
@@ -450,6 +451,10 @@ public class Schematics implements Loadable{
if(st.block instanceof Drill){ if(st.block instanceof Drill){
tile.getLinkedTiles(t -> t.setOverlay(resource)); tile.getLinkedTiles(t -> t.setOverlay(resource));
} }
if(tile.build instanceof CoreBuild cb){
state.teams.registerCore(cb);
}
}); });
} }

View File

@@ -48,11 +48,11 @@ public class Teams{
return Geometry.findClosest(x, y, get(team).cores); return Geometry.findClosest(x, y, get(team).cores);
} }
public boolean eachEnemyCore(Team team, Boolf<CoreBuild> ret){ public boolean anyEnemyCoresWithin(Team team, float x, float y, float radius){
for(TeamData data : active){ for(TeamData data : active){
if(team != data.team){ if(team != data.team){
for(CoreBuild tile : data.cores){ for(CoreBuild tile : data.cores){
if(ret.get(tile)){ if(tile.within(x, y, radius)){
return true; return true;
} }
} }

View File

@@ -261,6 +261,10 @@ public class Waves{
} }
public static Seq<SpawnGroup> generate(float difficulty, Rand rand, boolean attack){ public static Seq<SpawnGroup> generate(float difficulty, Rand rand, boolean attack){
return generate(difficulty, rand, attack, false);
}
public static Seq<SpawnGroup> generate(float difficulty, Rand rand, boolean attack, boolean airOnly){
UnitType[][] species = { UnitType[][] species = {
{dagger, mace, fortress, scepter, reign}, {dagger, mace, fortress, scepter, reign},
{nova, pulsar, quasar, vela, corvus}, {nova, pulsar, quasar, vela, corvus},
@@ -268,6 +272,12 @@ public class Waves{
{flare, horizon, zenith, rand.chance(0.5) ? quad : antumbra, rand.chance(0.1) ? quad : eclipse} {flare, horizon, zenith, rand.chance(0.5) ? quad : antumbra, rand.chance(0.1) ? quad : eclipse}
}; };
if(airOnly){
species = Structs.filter(UnitType[].class, species, v -> v[0].flying);
}
UnitType[][] fspec = species;
//required progression: //required progression:
//- extra periodic patterns //- extra periodic patterns
@@ -281,7 +291,7 @@ public class Waves{
Intc createProgression = start -> { Intc createProgression = start -> {
//main sequence //main sequence
UnitType[] curSpecies = Structs.random(species); UnitType[] curSpecies = Structs.random(fspec);
int curTier = 0; int curTier = 0;
for(int i = start; i < cap;){ for(int i = start; i < cap;){
@@ -326,7 +336,7 @@ public class Waves{
//small chance to switch species //small chance to switch species
if(rand.chance(0.3)){ if(rand.chance(0.3)){
curSpecies = Structs.random(species); curSpecies = Structs.random(fspec);
} }
} }
}; };

View File

@@ -235,7 +235,7 @@ public class Shaders{
super(frag); super(frag);
Core.assets.load("sprites/space.png", Texture.class).loaded = t -> { Core.assets.load("sprites/space.png", Texture.class).loaded = t -> {
texture = (Texture)t; texture = t;
texture.setFilter(TextureFilter.linear); texture.setFilter(TextureFilter.linear);
texture.setWrap(TextureWrap.mirroredRepeat); texture.setWrap(TextureWrap.mirroredRepeat);
}; };
@@ -274,8 +274,8 @@ public class Shaders{
public void loadNoise(){ public void loadNoise(){
Core.assets.load("sprites/" + textureName() + ".png", Texture.class).loaded = t -> { Core.assets.load("sprites/" + textureName() + ".png", Texture.class).loaded = t -> {
((Texture)t).setFilter(TextureFilter.linear); t.setFilter(TextureFilter.linear);
((Texture)t).setWrap(TextureWrap.repeat); t.setWrap(TextureWrap.repeat);
}; };
} }

View File

@@ -136,8 +136,12 @@ public class PlanetRenderer implements Disposable{
public void renderPlanet(Planet planet){ public void renderPlanet(Planet planet){
if(!planet.visible()) return; if(!planet.visible()) return;
//render planet at offsetted position in the world cam.update();
planet.draw(cam.combined, planet.getTransform(mat));
if(cam.frustum.containsSphere(planet.position, planet.clipRadius)){
//render planet at offsetted position in the world
planet.draw(cam.combined, planet.getTransform(mat));
}
for(Planet child : planet.children){ for(Planet child : planet.children){
renderPlanet(child); renderPlanet(child);
@@ -151,7 +155,7 @@ public class PlanetRenderer implements Disposable{
renderSectors(planet); renderSectors(planet);
} }
if(planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){ if(cam.frustum.containsSphere(planet.position, planet.clipRadius) && planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){
Gl.depthMask(false); Gl.depthMask(false);
Blending.additive.apply(); Blending.additive.apply();

View File

@@ -379,15 +379,6 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
throw new ValidateException(player, "Player cannot control a unit."); throw new ValidateException(player, "Player cannot control a unit.");
} }
//TODO problem:
//1. server send snapshot
//2. client requests to control unit, becomes unit locally
//3. snapshot arrives, client now thinks they're in the old unit (!!!)
//4. server gets packet that player is in the right unit
//5. server sends snapshot
//6. client gets snapshot, realizes that they are actually in the unit they selected
//7. client gets switched to new unit -> rubberbanding (!!!)
//clear player unit when they possess a core //clear player unit when they possess a core
if(unit == null){ //just clear the unit (is this used?) if(unit == null){ //just clear the unit (is this used?)
player.clearUnit(); player.clearUnit();
@@ -404,6 +395,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(!player.dead()){ if(!player.dead()){
Fx.unitSpirit.at(player.x, player.y, 0f, unit); Fx.unitSpirit.at(player.x, player.y, 0f, unit);
} }
}else if(net.server()){
//reject forwarding the packet if the unit was dead, AI or team
throw new ValidateException(player, "Player attempted to control invalid unit.");
} }
Events.fire(new UnitControlEvent(player, unit)); Events.fire(new UnitControlEvent(player, unit));
@@ -462,7 +456,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
player.unit().updateBuilding(isBuilding); player.unit().updateBuilding(isBuilding);
} }
if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && player.unit().ammo <= 0){ if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && !player.team().rules().infiniteAmmo && player.unit().ammo <= 0){
player.unit().type.weapons.first().noAmmoSound.at(player.unit()); player.unit().type.weapons.first().noAmmoSound.at(player.unit());
} }

View File

@@ -86,7 +86,7 @@ public abstract class LStatement{
protected Cell<TextField> field(Table table, String value, Cons<String> setter){ protected Cell<TextField> field(Table table, String value, Cons<String> setter){
return table.field(value, Styles.nodeField, s -> setter.get(sanitize(s))) return table.field(value, Styles.nodeField, s -> setter.get(sanitize(s)))
.size(144f, 40f).pad(2f).color(table.color).maxTextLength(LAssembler.maxTokenLength).addInputDialog(); .size(144f, 40f).pad(2f).color(table.color).maxTextLength(LAssembler.maxTokenLength);
} }
protected Cell<TextField> fields(Table table, String desc, String value, Cons<String> setter){ protected Cell<TextField> fields(Table table, String desc, String value, Cons<String> setter){
@@ -175,7 +175,7 @@ public abstract class LStatement{
t.top().pane(inner -> { t.top().pane(inner -> {
inner.top(); inner.top();
hideCons.get(inner, hide); hideCons.get(inner, hide);
}).pad(0f).top().get().setScrollingDisabled(true, false); }).pad(0f).top().scrollX(false);
t.pack(); t.pack();
} }

View File

@@ -381,7 +381,7 @@ public class Maps{
//try to load preview //try to load preview
if(map.previewFile().exists()){ if(map.previewFile().exists()){
//this may fail, but calls queueNewPreview //this may fail, but calls queueNewPreview
Core.assets.load(new AssetDescriptor<>(map.previewFile().path() + "." + mapExtension, Texture.class, new MapPreviewParameter(map))).loaded = t -> map.texture = (Texture)t; Core.assets.load(new AssetDescriptor<>(map.previewFile().path() + "." + mapExtension, Texture.class, new MapPreviewParameter(map))).loaded = t -> map.texture = t;
try{ try{
readCache(map); readCache(map);

View File

@@ -490,7 +490,8 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
state.rules.waves = sector.info.waves = true; state.rules.waves = sector.info.waves = true;
state.rules.enemyCoreBuildRadius = 600f; state.rules.enemyCoreBuildRadius = 600f;
state.rules.spawns = Waves.generate(difficulty, new Rand(), state.rules.attackMode); //spawn air only when spawn is blocked
state.rules.spawns = Waves.generate(difficulty, new Rand(sector.id), state.rules.attackMode, state.rules.attackMode && spawner.countGroundSpawns() == 0);
} }
@Override @Override

View File

@@ -77,9 +77,10 @@ public class ContentParser{
} }
}); });
put(StatusEffect.class, (type, data) -> { put(StatusEffect.class, (type, data) -> {
Object result = fieldOpt(StatusEffects.class, data); if(data.isString()){
if(result != null){ StatusEffect result = locate(ContentType.status, data.asString());
return result; if(result != null) return result;
throw new IllegalArgumentException("Unknown status effect: '" + data.asString() + "'");
} }
StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name")); StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name"));
readFields(effect, data); readFields(effect, data);
@@ -99,7 +100,7 @@ public class ContentParser{
put(AmmoType.class, (type, data) -> { put(AmmoType.class, (type, data) -> {
//string -> item //string -> item
//if liquid ammo support is added, this should scan for liquids as well //if liquid ammo support is added, this should scan for liquids as well
if(data.isString()) return find(ContentType.item, data.asString()); if(data.isString()) return new ItemAmmoType(find(ContentType.item, data.asString()));
//number -> power //number -> power
if(data.isNumber()) return new PowerAmmoType(data.asFloat()); if(data.isNumber()) return new PowerAmmoType(data.asFloat());

View File

@@ -267,6 +267,7 @@ public class Mods implements Loadable{
TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.linear : TextureFilter.nearest; TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.linear : TextureFilter.nearest;
Time.mark();
//generate new icons //generate new icons
for(Seq<Content> arr : content.getContentMap()){ for(Seq<Content> arr : content.getContentMap()){
arr.each(c -> { arr.each(c -> {
@@ -277,6 +278,7 @@ public class Mods implements Loadable{
} }
}); });
} }
Log.debug("Time to generate icons: @", Time.elapsed());
//dispose old atlas data //dispose old atlas data
Core.atlas = packer.flush(filter, new TextureAtlas()); Core.atlas = packer.flush(filter, new TextureAtlas());
@@ -287,7 +289,7 @@ public class Mods implements Loadable{
packer.dispose(); packer.dispose();
packer = null; packer = null;
Log.debug("Time to update textures: @", Time.elapsed()); Log.debug("Total time to generate & flush textures synchronously: @", Time.elapsed());
} }
private PageType getPage(AtlasRegion region){ private PageType getPage(AtlasRegion region){

View File

@@ -21,10 +21,10 @@ import java.net.*;
import java.util.regex.*; import java.util.regex.*;
public class Scripts implements Disposable{ public class Scripts implements Disposable{
private final Context context; public final Context context;
private final Scriptable scope; public final Scriptable scope;
private boolean errored;
private boolean errored;
LoadedMod currentMod = null; LoadedMod currentMod = null;
public Scripts(){ public Scripts(){

View File

@@ -342,24 +342,9 @@ public class ArcNetProvider implements NetProvider{
//for debugging total read/write speeds //for debugging total read/write speeds
private static final boolean debug = false; private static final boolean debug = false;
ThreadLocal<ByteBuffer> decompressBuffer = new ThreadLocal<>(){ ThreadLocal<ByteBuffer> decompressBuffer = Threads.local(() -> ByteBuffer.allocate(32768));
@Override ThreadLocal<Reads> reads = Threads.local(() -> new Reads(new ByteBufferInput(decompressBuffer.get())));
protected ByteBuffer initialValue(){ ThreadLocal<Writes> writes = Threads.local(() -> new Writes(new ByteBufferOutput(decompressBuffer.get())));
return ByteBuffer.allocate(32768);
}
};
ThreadLocal<Reads> reads = new ThreadLocal<>(){
@Override
protected Reads initialValue(){
return new Reads(new ByteBufferInput(decompressBuffer.get()));
}
};
ThreadLocal<Writes> writes = new ThreadLocal<>(){
@Override
protected Writes initialValue(){
return new Writes(new ByteBufferOutput(decompressBuffer.get()));
}
};
//for debugging network write counts //for debugging network write counts
static WindowedMean upload = new WindowedMean(5), download = new WindowedMean(5); static WindowedMean upload = new WindowedMean(5), download = new WindowedMean(5);

View File

@@ -274,6 +274,7 @@ public class Net{
builder.add(c.data); builder.add(c.data);
ui.loadfrag.setProgress(builder.progress()); ui.loadfrag.setProgress(builder.progress());
ui.loadfrag.snapProgress();
netClient.resetTimeout(); netClient.resetTimeout();
if(builder.isDone()){ if(builder.isDone()){

View File

@@ -41,6 +41,8 @@ public class Planet extends UnlockableContent{
public boolean drawOrbit = true; public boolean drawOrbit = true;
/** Atmosphere radius adjustment parameters. */ /** Atmosphere radius adjustment parameters. */
public float atmosphereRadIn = 0, atmosphereRadOut = 0.3f; public float atmosphereRadIn = 0, atmosphereRadOut = 0.3f;
/** Frustrum sphere clip radius. */
public float clipRadius = -1f;
/** Orbital radius around the sun. Do not change unless you know exactly what you are doing.*/ /** Orbital radius around the sun. Do not change unless you know exactly what you are doing.*/
public float orbitRadius; public float orbitRadius;
/** Total radius of this planet and all its children. */ /** Total radius of this planet and all its children. */
@@ -55,7 +57,7 @@ public class Planet extends UnlockableContent{
public float sectorApproxRadius; public float sectorApproxRadius;
/** Whether this planet is tidally locked relative to its parent - see https://en.wikipedia.org/wiki/Tidal_locking */ /** Whether this planet is tidally locked relative to its parent - see https://en.wikipedia.org/wiki/Tidal_locking */
public boolean tidalLock = false; public boolean tidalLock = false;
/** Whether or not this planet is listed in the planet access UI. **/ /** Whether this planet is listed in the planet access UI. **/
public boolean accessible = true; public boolean accessible = true;
/** If true, a day/night cycle is simulated. */ /** If true, a day/night cycle is simulated. */
public boolean updateLighting = true; public boolean updateLighting = true;
@@ -252,6 +254,7 @@ public class Planet extends UnlockableContent{
updateBaseCoverage(); updateBaseCoverage();
} }
clipRadius = Math.max(clipRadius, radius + atmosphereRadOut + 0.5f);
} }
/** Gets a sector a tile position. */ /** Gets a sector a tile position. */

View File

@@ -623,9 +623,9 @@ public class UnitType extends UnlockableContent{
Draw.reset(); Draw.reset();
a.draw(unit); a.draw(unit);
} }
Draw.reset();
} }
Draw.reset();
} }
public <T extends Unit & Payloadc> void drawPayload(T unit){ public <T extends Unit & Payloadc> void drawPayload(T unit){

View File

@@ -62,6 +62,10 @@ public class Bar extends Element{
update(() -> this.name = name.get()); update(() -> this.name = name.get());
} }
public void snap(){
lastValue = value = fraction.get();
}
public Bar outline(Color color, float stroke){ public Bar outline(Color color, float stroke){
outlineColor.set(color); outlineColor.set(color);
outlineRadius = Scl.scl(stroke); outlineRadius = Scl.scl(stroke);

View File

@@ -74,19 +74,19 @@ public class Fonts{
largeIcons.clear(); largeIcons.clear();
FreeTypeFontParameter param = fontParameter(); FreeTypeFontParameter param = fontParameter();
Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = (Font)f; Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = f;
Core.assets.load("icon", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ Core.assets.load("icon", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{
size = 30; size = 30;
incremental = true; incremental = true;
characters = "\0"; characters = "\0";
}})).loaded = f -> Fonts.icon = (Font)f; }})).loaded = f -> Fonts.icon = f;
Core.assets.load("iconLarge", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ Core.assets.load("iconLarge", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{
size = 48; size = 48;
incremental = false; incremental = false;
characters = "\0" + Iconc.all; characters = "\0" + Iconc.all;
borderWidth = 5f; borderWidth = 5f;
borderColor = Color.darkGray; borderColor = Color.darkGray;
}})).loaded = f -> Fonts.iconLarge = (Font)f; }})).loaded = f -> Fonts.iconLarge = f;
} }
public static TextureRegion getLargeIcon(String name){ public static TextureRegion getLargeIcon(String name){

View File

@@ -50,7 +50,7 @@ public class ItemsDisplay extends Table{
label.actions(Actions.color(Color.white, 0.75f, Interp.fade)); label.actions(Actions.color(Color.white, 0.75f, Interp.fade));
} }
} }
}).get().setScrollingDisabled(true, false), false).setDuration(0.3f); }).scrollX(false), false).setDuration(0.3f);
c.button("@globalitems", Icon.downOpen, Styles.clearTogglet, col::toggle).update(t -> { c.button("@globalitems", Icon.downOpen, Styles.clearTogglet, col::toggle).update(t -> {
t.setChecked(col.isCollapsed()); t.setChecked(col.isCollapsed());

View File

@@ -1,59 +1,6 @@
package mindustry.ui; package mindustry.ui;
import arc.func.*; //TODO remove, unlikely to be used anywhere else.
import arc.graphics.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import mindustry.gen.*;
public class SearchBar{ public class SearchBar{
public static <T> Table add(Table parent, Seq<T> list, Func<String, String> queryf,
Func<T, String> namef, Cons2<Table, T> itemc, boolean show){
Table[] pane = {null};
Cons<String> rebuild = str -> {
String query = queryf.get(str);
pane[0].clear();
boolean any = false;
for(T item : list){
if(query.isEmpty() || matches(query, namef.get(item))){
any = true;
itemc.get(pane[0], item);
}
}
if(!any){
pane[0].add("@none.found").color(Color.lightGray).pad(4);
}
};
if(show){
parent.table(search -> {
search.image(Icon.zoom).padRight(8f);
search.field("", rebuild).growX();
}).fillX().padBottom(4);
}
parent.row();
parent.pane(table -> {
pane[0] = table;
rebuild.get("");
}).get().setScrollingDisabled(true, false);
return pane[0];
}
public static <T> Table add(Table parent, Seq<T> list, Func<String, String> queryf, Func<T, String> namef, Cons2<Table, T> itemc){
return add(parent, list, queryf, namef, itemc, true);
}
public static <T> Table add(Table parent, Seq<T> list, Func<T, String> namef, Cons2<Table, T> itemc, boolean show){
return add(parent, list, String::toLowerCase, namef, itemc, show);
}
/** Match a list item with the search query, case insensitive */
public static boolean matches(String query, String name){
return name != null && !name.isEmpty() && name.toLowerCase().contains(query);
}
} }

View File

@@ -126,7 +126,7 @@ public class CustomRulesDialog extends BaseDialog{
void setup(){ void setup(){
cont.clear(); cont.clear();
cont.pane(m -> main = m).get().setScrollingDisabled(true, false); cont.pane(m -> main = m).scrollX(false);
main.margin(10f); main.margin(10f);
main.button("@settings.reset", () -> { main.button("@settings.reset", () -> {
rules = resetter.get(); rules = resetter.get();
@@ -273,7 +273,7 @@ public class CustomRulesDialog extends BaseDialog{
t.add(text).left().padRight(5); t.add(text).left().padRight(5);
t.field((prov.get()) + "", s -> cons.get(Strings.parseInt(s))) t.field((prov.get()) + "", s -> cons.get(Strings.parseInt(s)))
.padRight(100f) .padRight(100f)
.valid(f -> Strings.parseInt(f) >= min && Strings.parseInt(f) <= max).width(120f).left().addInputDialog(); .valid(f -> Strings.parseInt(f) >= min && Strings.parseInt(f) <= max).width(120f).left();
}).padTop(0).row(); }).padTop(0).row();
} }
@@ -285,7 +285,7 @@ public class CustomRulesDialog extends BaseDialog{
t.field((integer ? (int)prov.get() : prov.get()) + "", s -> cons.get(Strings.parseFloat(s))) t.field((integer ? (int)prov.get() : prov.get()) + "", s -> cons.get(Strings.parseFloat(s)))
.padRight(100f) .padRight(100f)
.update(a -> a.setDisabled(!condition.get())) .update(a -> a.setDisabled(!condition.get()))
.valid(f -> Strings.canParsePositiveFloat(f) && Strings.parseFloat(f) >= min && Strings.parseFloat(f) <= max).width(120f).left().addInputDialog(); .valid(f -> Strings.canParsePositiveFloat(f) && Strings.parseFloat(f) >= min && Strings.parseFloat(f) <= max).width(120f).left();
}).padTop(0); }).padTop(0);
main.row(); main.row();
} }
@@ -309,7 +309,7 @@ public class CustomRulesDialog extends BaseDialog{
Cell<TextField> field(Table table, float value, Floatc setter){ Cell<TextField> field(Table table, float value, Floatc setter){
return table.field(Strings.autoFixed(value, 2), v -> setter.get(Strings.parseFloat(v))) return table.field(Strings.autoFixed(value, 2), v -> setter.get(Strings.parseFloat(v)))
.valid(Strings::canParsePositiveFloat) .valid(Strings::canParsePositiveFloat)
.size(90f, 40f).pad(2f).addInputDialog(); .size(90f, 40f).pad(2f);
} }
void weatherDialog(){ void weatherDialog(){

View File

@@ -67,7 +67,7 @@ public class JoinDialog extends BaseDialog{
TextField field = add.cont.field(Core.settings.getString("ip"), text -> { TextField field = add.cont.field(Core.settings.getString("ip"), text -> {
Core.settings.put("ip", text); Core.settings.put("ip", text);
}).size(320f, 54f).maxTextLength(100).addInputDialog().get(); }).size(320f, 54f).maxTextLength(100).get();
add.cont.row(); add.cont.row();
add.buttons.defaults().size(140f, 60f).pad(4f); add.buttons.defaults().size(140f, 60f).pad(4f);
@@ -287,7 +287,7 @@ public class JoinDialog extends BaseDialog{
t.field(Core.settings.getString("name"), text -> { t.field(Core.settings.getString("name"), text -> {
player.name(text); player.name(text);
Core.settings.put("name", text); Core.settings.put("name", text);
}).grow().pad(8).addInputDialog(maxNameLength); }).grow().pad(8).maxTextLength(maxNameLength);
ImageButton button = t.button(Tex.whiteui, Styles.clearFulli, 40, () -> { ImageButton button = t.button(Tex.whiteui, Styles.clearFulli, 40, () -> {
new PaletteDialog().show(color -> { new PaletteDialog().show(color -> {

View File

@@ -131,7 +131,7 @@ public class LaunchLoadoutDialog extends BaseDialog{
} }
}).growX().get().setScrollingDisabled(true, false); }).growX().scrollX(false);
cont.row(); cont.row();
cont.pane(items); cont.pane(items);

View File

@@ -69,7 +69,7 @@ public class ModsDialog extends BaseDialog{
browser.cont.pane(tablebrow -> { browser.cont.pane(tablebrow -> {
tablebrow.margin(10f).top(); tablebrow.margin(10f).top();
browserTable = tablebrow; browserTable = tablebrow;
}).get().setScrollingDisabled(true, false); }).scrollX(false);
browser.addCloseButton(); browser.addCloseButton();
browser.onResize(this::rebuildBrowser); browser.onResize(this::rebuildBrowser);
@@ -208,90 +208,113 @@ public class ModsDialog extends BaseDialog{
if(!mods.list().isEmpty()){ if(!mods.list().isEmpty()){
boolean[] anyDisabled = {false}; boolean[] anyDisabled = {false};
SearchBar.add(cont, mods.list(), Table[] pane = {null};
mod -> mod.meta.displayName(),
(table, mod) -> {
if(!mod.enabled() && !anyDisabled[0] && mods.list().size > 0){
anyDisabled[0] = true;
table.row();
table.image().growX().height(4f).pad(6f).color(Pal.gray);
table.row();
}
table.button(t -> { Cons<String> rebuild = query -> {
t.top().left(); pane[0].clear();
t.margin(12f); boolean any = false;
for(LoadedMod item : mods.list()){
if(Strings.matches(query, item.meta.displayName())){
any = true;
if(!item.enabled() && !anyDisabled[0] && mods.list().size > 0){
anyDisabled[0] = true;
pane[0].row();
pane[0].image().growX().height(4f).pad(6f).color(Pal.gray).row();
}
t.defaults().left().top(); pane[0].button(t -> {
t.table(title -> { t.top().left();
title.left(); t.margin(12f);
title.add(new BorderImage(){{ t.defaults().left().top();
if(mod.iconTexture != null){ t.table(title1 -> {
setDrawable(new TextureRegion(mod.iconTexture)); title1.left();
}else{
setDrawable(Tex.nomap);
}
border(Pal.accent);
}}).size(h - 8f).padTop(-8f).padLeft(-8f).padRight(8f);
title.table(text -> { title1.add(new BorderImage(){{
boolean hideDisabled = !mod.isSupported() || mod.hasUnmetDependencies() || mod.hasContentErrors(); if(item.iconTexture != null){
setDrawable(new TextureRegion(item.iconTexture));
}else{
setDrawable(Tex.nomap);
}
border(Pal.accent);
}}).size(h - 8f).padTop(-8f).padLeft(-8f).padRight(8f);
text.add("[accent]" + Strings.stripColors(mod.meta.displayName()) + "\n[lightgray]v" + Strings.stripColors(trimText(mod.meta.version)) + (mod.enabled() || hideDisabled ? "" : "\n" + Core.bundle.get("mod.disabled") + "")) title1.table(text -> {
boolean hideDisabled = !item.isSupported() || item.hasUnmetDependencies() || item.hasContentErrors();
text.add("[accent]" + Strings.stripColors(item.meta.displayName()) + "\n[lightgray]v" + Strings.stripColors(trimText(item.meta.version)) + (item.enabled() || hideDisabled ? "" : "\n" + Core.bundle.get("mod.disabled") + ""))
.wrap().top().width(300f).growX().left(); .wrap().top().width(300f).growX().left();
text.row();
if(mod.isOutdated()){
text.labelWrap("@mod.outdated").growX();
text.row(); text.row();
}else if(!mod.isSupported()){
text.labelWrap(Core.bundle.format("mod.requiresversion", mod.meta.minGameVersion)).growX();
text.row();
}else if(mod.hasUnmetDependencies()){
text.labelWrap(Core.bundle.format("mod.missingdependencies", mod.missingDependencies.toString(", "))).growX();
t.row();
}else if(mod.hasContentErrors()){
text.labelWrap("@mod.erroredcontent").growX();
text.row();
}else if(mod.meta.hidden){
text.labelWrap("@mod.multiplayer.compatible").growX();
text.row();
}
}).top().growX();
title.add().growX(); if(item.isOutdated()){
}).growX().growY().left(); text.labelWrap("@mod.outdated").growX();
text.row();
}else if(!item.isSupported()){
text.labelWrap(Core.bundle.format("mod.requiresversion", item.meta.minGameVersion)).growX();
text.row();
}else if(item.hasUnmetDependencies()){
text.labelWrap(Core.bundle.format("mod.missingdependencies", item.missingDependencies.toString(", "))).growX();
t.row();
}else if(item.hasContentErrors()){
text.labelWrap("@mod.erroredcontent").growX();
text.row();
}else if(item.meta.hidden){
text.labelWrap("@mod.multiplayer.compatible").growX();
text.row();
}
}).top().growX();
t.table(right -> { title1.add().growX();
right.right(); }).growX().growY().left();
right.button(mod.enabled() ? Icon.downOpen : Icon.upOpen, Styles.clearPartiali, () -> {
mods.setEnabled(mod, !mod.enabled());
setup();
}).size(50f).disabled(!mod.isSupported());
right.button(mod.hasSteamID() ? Icon.link : Icon.trash, Styles.clearPartiali, () -> { t.table(right -> {
if(!mod.hasSteamID()){ right.right();
ui.showConfirm("@confirm", "@mod.remove.confirm", () -> { right.button(item.enabled() ? Icon.downOpen : Icon.upOpen, Styles.clearPartiali, () -> {
mods.removeMod(mod); mods.setEnabled(item, !item.enabled());
setup(); setup();
}); }).size(50f).disabled(!item.isSupported());
}else{
platform.viewListing(mod);
}
}).size(50f);
if(steam && !mod.hasSteamID()){ right.button(item.hasSteamID() ? Icon.link : Icon.trash, Styles.clearPartiali, () -> {
right.row(); if(!item.hasSteamID()){
right.button(Icon.export, Styles.clearPartiali, () -> { ui.showConfirm("@confirm", "@mod.remove.confirm", () -> {
platform.publish(mod); mods.removeMod(item);
setup();
});
}else{
platform.viewListing(item);
}
}).size(50f); }).size(50f);
}
}).growX().right().padRight(-8f).padTop(-8f); if(steam && !item.hasSteamID()){
}, Styles.clearPartialt, () -> showMod(mod)).size(w, h).growX().pad(4f); right.row();
table.row(); right.button(Icon.export, Styles.clearPartiali, () -> {
}, !mobile || Core.graphics.isPortrait()).margin(10f).top(); platform.publish(item);
}).size(50f);
}
}).growX().right().padRight(-8f).padTop(-8f);
}, Styles.clearPartialt, () -> showMod(item)).size(w, h).growX().pad(4f);
pane[0].row();
}
}
if(!any){
pane[0].add("@none.found").color(Color.lightGray).pad(4);
}
};
if(!mobile || Core.graphics.isPortrait()){
cont.table(search -> {
search.image(Icon.zoom).padRight(8f);
search.field("", rebuild).growX();
}).fillX().padBottom(4);
}
cont.row();
cont.pane(table1 -> {
pane[0] = table1.margin(10f).top();
rebuild.get("");
}).scrollX(false);
}else{ }else{
cont.table(Styles.black6, t -> t.add("@mods.none")).height(80f); cont.table(Styles.black6, t -> t.add("@mods.none")).height(80f);
} }

View File

@@ -27,7 +27,6 @@ import mindustry.graphics.*;
import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.*;
import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.graphics.g3d.PlanetGrid.*;
import mindustry.input.*; import mindustry.input.*;
import mindustry.io.legacy.*;
import mindustry.maps.*; import mindustry.maps.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.ui.*; import mindustry.ui.*;
@@ -65,7 +64,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
public boolean showed = false, sectorsShown; public boolean showed = false, sectorsShown;
public String searchText = ""; public String searchText = "";
public Table sectorTop = new Table(), notifs; public Table sectorTop = new Table(), notifs = new Table();
public Label hoverLabel = new Label(""); public Label hoverLabel = new Label("");
public PlanetDialog(){ public PlanetDialog(){
@@ -131,7 +130,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
@Override @Override
public boolean scrolled(InputEvent event, float x, float y, float amountX, float amountY){ public boolean scrolled(InputEvent event, float x, float y, float amountX, float amountY){
if(event.targetActor == PlanetDialog.this){ if(event.targetActor == PlanetDialog.this){
zoom = Mathf.clamp(zoom + y / 10f, planets.planet.minZoom, 2f); zoom = Mathf.clamp(zoom + amountY / 10f, planets.planet.minZoom, 2f);
} }
return true; return true;
} }
@@ -166,16 +165,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
return this; return this;
} }
//load legacy research
if(Core.settings.has("unlocks") && !Core.settings.has("junction-unlocked")){
Core.app.post(() -> {
ui.showCustomConfirm("@research", "@research.legacy", "@research.load", "@research.discard", () -> {
LegacyIO.readResearch();
Core.settings.remove("unlocks");
}, () -> Core.settings.remove("unlocks"));
});
}
rebuildButtons(); rebuildButtons();
mode = look; mode = look;
selected = hovered = launchSector = null; selected = hovered = launchSector = null;
@@ -545,7 +534,8 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
}), }),
new Table(c -> { new Table(c -> {
if(!(graphics.isPortrait() && mobile) && planets.planet.sectors.contains(Sector::hasBase)){ c.visible(() -> !(graphics.isPortrait() && mobile));
if(planets.planet.sectors.contains(Sector::hasBase)){
int attacked = planets.planet.sectors.count(Sector::isAttacked); int attacked = planets.planet.sectors.count(Sector::isAttacked);
//sector notifications & search //sector notifications & search
@@ -571,8 +561,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
})).grow(); })).grow();
} }
//TODO
void rebuildList(){ void rebuildList(){
if(notifs == null) return;
notifs.clear(); notifs.clear();
var all = planets.planet.sectors.select(Sector::hasBase); var all = planets.planet.sectors.select(Sector::hasBase);
@@ -586,7 +577,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
s.field(searchText, t -> { s.field(searchText, t -> {
searchText = t; searchText = t;
readd[0].run(); readd[0].run();
}).growX().height(50f).addInputDialog(); }).growX().height(50f);
}).growX().row(); }).growX().row();
Table con = p.table().growX().get(); Table con = p.table().growX().get();
@@ -632,7 +623,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
}; };
readd[0].run(); readd[0].run();
}).grow().get().setScrollingDisabled(true, false); }).grow().scrollX(false);
} }
@Override @Override

View File

@@ -41,7 +41,7 @@ public class SchematicsDialog extends BaseDialog{
public SchematicsDialog(){ public SchematicsDialog(){
super("@schematics"); super("@schematics");
Core.assets.load("sprites/schematic-background.png", Texture.class).loaded = t -> ((Texture)t).setWrap(TextureWrap.repeat); Core.assets.load("sprites/schematic-background.png", Texture.class).loaded = t -> t.setWrap(TextureWrap.repeat);
tags = Core.settings.getJson("schematic-tags", Seq.class, String.class, Seq::new); tags = Core.settings.getJson("schematic-tags", Seq.class, String.class, Seq::new);
@@ -69,7 +69,7 @@ public class SchematicsDialog extends BaseDialog{
searchField = s.field(search, res -> { searchField = s.field(search, res -> {
search = res; search = res;
rebuildPane.run(); rebuildPane.run();
}).growX().addInputDialog().get(); }).growX().get();
}).fillX().padBottom(4); }).fillX().padBottom(4);
cont.row(); cont.row();
@@ -97,7 +97,7 @@ public class SchematicsDialog extends BaseDialog{
} }
}; };
rebuildTags.run(); rebuildTags.run();
}).fillX().height(tagh).get().setScrollingDisabled(false, true); }).fillX().height(tagh).scrollY(false);
in.button(Icon.pencilSmall, () -> { in.button(Icon.pencilSmall, () -> {
showAllTags(); showAllTags();
@@ -164,12 +164,12 @@ public class SchematicsDialog extends BaseDialog{
cont.table(tags -> buildTags(s, tags, false)).maxWidth(400f).fillX().left().row(); cont.table(tags -> buildTags(s, tags, false)).maxWidth(400f).fillX().left().row();
cont.margin(30).add("@name").padRight(6f); cont.margin(30).add("@name").padRight(6f);
TextField nameField = cont.field(s.name(), null).size(400f, 55f).addInputDialog().left().get(); TextField nameField = cont.field(s.name(), null).size(400f, 55f).left().get();
cont.row(); cont.row();
cont.margin(30).add("@editor.description").padRight(6f); cont.margin(30).add("@editor.description").padRight(6f);
TextField descField = cont.area(s.description(), Styles.areaField, t -> {}).size(400f, 140f).left().addInputDialog().get(); TextField descField = cont.area(s.description(), Styles.areaField, t -> {}).size(400f, 140f).left().get();
Runnable accept = () -> { Runnable accept = () -> {
s.tags.put("name", nameField.getText()); s.tags.put("name", nameField.getText());
@@ -246,7 +246,7 @@ public class SchematicsDialog extends BaseDialog{
}; };
rebuildPane.run(); rebuildPane.run();
}).grow().get().setScrollingDisabled(true, false); }).grow().scrollX(false);
} }
public void showInfo(Schematic schematic){ public void showInfo(Schematic schematic){
@@ -573,7 +573,7 @@ public class SchematicsDialog extends BaseDialog{
}); });
} }
}).fillX().left().height(tagh).get().setScrollingDisabled(false, true); }).fillX().left().height(tagh).scrollY(false);
t.button(Icon.addSmall, () -> { t.button(Icon.addSmall, () -> {
var dialog = new BaseDialog("@schematic.addtag"); var dialog = new BaseDialog("@schematic.addtag");

View File

@@ -48,12 +48,12 @@ public class HintsFragment extends Fragment{
}else if(!current.show()){ //current became hidden }else if(!current.show()){ //current became hidden
hide(); hide();
} }
}else if(hints.size > 0 && !renderer.isCutscene()){ }else if(hints.size > 0){
//check one hint each frame to see if it should be shown. //check one hint each frame to see if it should be shown.
Hint hint = hints.find(Hint::show); Hint hint = hints.find(Hint::show);
if(hint != null && hint.complete()){ if(hint != null && hint.complete()){
hints.remove(hint); hints.remove(hint);
}else if(hint != null){ }else if(hint != null && !renderer.isCutscene() && state.isGame() && control.saves.getTotalPlaytime() > 8000){
display(hint); display(hint);
}else{ }else{
//moused over a derelict structure //moused over a derelict structure
@@ -92,7 +92,7 @@ public class HintsFragment extends Fragment{
hints.sort(Hint::order); hints.sort(Hint::order);
Hint first = hints.find(Hint::show); Hint first = hints.find(Hint::show);
if(first != null){ if(first != null && !renderer.isCutscene() && state.isGame()){
hints.remove(first); hints.remove(first);
display(first); display(first);
} }

View File

@@ -56,6 +56,10 @@ public class LoadingFragment extends Fragment{
bar.set(() -> ((int)(progress.get() * 100) + "%"), progress, Pal.accent); bar.set(() -> ((int)(progress.get() * 100) + "%"), progress, Pal.accent);
} }
public void snapProgress(){
bar.snap();
}
public void setProgress(float progress){ public void setProgress(float progress){
progValue = progress; progValue = progress;
if(!bar.visible){ if(!bar.visible){

View File

@@ -52,7 +52,7 @@ public class PlayerListFragment extends Fragment{
search.setMessageText(Core.bundle.get("players.search")); search.setMessageText(Core.bundle.get("players.search"));
pane.row(); pane.row();
pane.pane(content).grow().get().setScrollingDisabled(true, false); pane.pane(content).grow().scrollX(false);
pane.row(); pane.row();
pane.table(menu -> { pane.table(menu -> {

View File

@@ -37,8 +37,11 @@ import java.util.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class Block extends UnlockableContent{ public class Block extends UnlockableContent{
/** If true, buildings have an ItemModule. */
public boolean hasItems; public boolean hasItems;
/** If true, buildings have a LiquidModule. */
public boolean hasLiquids; public boolean hasLiquids;
/** If true, buildings have a PowerModule. */
public boolean hasPower; public boolean hasPower;
public boolean outputsLiquid = false; public boolean outputsLiquid = false;
@@ -46,8 +49,6 @@ public class Block extends UnlockableContent{
public boolean outputsPower = false; public boolean outputsPower = false;
public boolean outputsPayload = false; public boolean outputsPayload = false;
public boolean acceptsPayload = false; public boolean acceptsPayload = false;
public boolean outputFacing = true;
public boolean noSideBlend = false;
public boolean acceptsItems = false; public boolean acceptsItems = false;
public int itemCapacity = 10; public int itemCapacity = 10;
@@ -57,6 +58,11 @@ public class Block extends UnlockableContent{
public final BlockBars bars = new BlockBars(); public final BlockBars bars = new BlockBars();
public final Consumers consumes = new Consumers(); public final Consumers consumes = new Consumers();
/** If true, this block outputs to its facing direction, when applicable.
* Used for blending calculations. */
public boolean outputFacing = true;
/** if true, this block does not accept input from the sides (used for armored conveyors) */
public boolean noSideBlend = false;
/** whether to display flow rate */ /** whether to display flow rate */
public boolean displayFlow = true; public boolean displayFlow = true;
/** whether this block is visible in the editor */ /** whether this block is visible in the editor */

View File

@@ -151,7 +151,7 @@ public class Build{
if(closest != null && closest.team != team){ if(closest != null && closest.team != team){
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)){ }else if(state.teams.anyEnemyCoresWithin(team, x * tilesize + type.offset, y * tilesize + type.offset, state.rules.enemyCoreBuildRadius + tilesize)){
return false; return false;
} }
} }

View File

@@ -122,7 +122,7 @@ public class LaunchPad extends Block{
if(!state.isCampaign()) return; if(!state.isCampaign()) return;
//increment launchCounter then launch when full and base conditions are met //increment launchCounter then launch when full and base conditions are met
if((launchCounter += edelta()) >= launchTime && items.total() >= itemCapacity){ if((launchCounter += edelta()) >= launchTime && edelta() >= 0.001f && items.total() >= itemCapacity){
launchSound.at(x, y); launchSound.at(x, y);
LaunchPayload entity = LaunchPayload.create(); LaunchPayload entity = LaunchPayload.create();
items.each((item, amount) -> entity.stacks.add(new ItemStack(item, amount))); items.each((item, amount) -> entity.stacks.add(new ItemStack(item, amount)));

View File

@@ -38,8 +38,8 @@ public class LaserTurret extends PowerTurret{
} }
public class LaserTurretBuild extends PowerTurretBuild{ public class LaserTurretBuild extends PowerTurretBuild{
Bullet bullet; public Bullet bullet;
float bulletLife; public float bulletLife;
@Override @Override
protected void updateCooling(){ protected void updateCooling(){

View File

@@ -43,6 +43,12 @@ public class DuctBridge extends Block{
drawArrow = false; drawArrow = false;
} }
@Override
public void init(){
clipSize = Math.max(clipSize, (range + 0.5f) * 2 * tilesize);
super.init();
}
@Override @Override
public void drawRequestRegion(BuildPlan req, Eachable<BuildPlan> list){ public void drawRequestRegion(BuildPlan req, Eachable<BuildPlan> list){
Draw.rect(region, req.drawx(), req.drawy()); Draw.rect(region, req.drawx(), req.drawy());

View File

@@ -113,7 +113,7 @@ public class PayloadConveyor extends Block{
int ntrns = 1 + size/2; int ntrns = 1 + size/2;
Tile next = tile.nearby(Geometry.d4(rotation).x * ntrns, Geometry.d4(rotation).y * ntrns); Tile next = tile.nearby(Geometry.d4(rotation).x * ntrns, Geometry.d4(rotation).y * ntrns);
blocked = (next != null && next.solid() && !next.block().outputsPayload) || (this.next != null && (this.next.rotation + 2)%4 == rotation); blocked = (next != null && next.solid() && !(next.block().outputsPayload || next.block().acceptsPayload)) || (this.next != null && this.next.block.rotate && (this.next.rotation + 2) % 4 == rotation);
} }
@Override @Override

View File

@@ -23,11 +23,9 @@ import mindustry.world.modules.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class PowerNode extends PowerBlock{ public class PowerNode extends PowerBlock{
protected static boolean returnValue = false;
protected static BuildPlan otherReq; protected static BuildPlan otherReq;
protected final static ObjectSet<PowerGraph> graphs = new ObjectSet<>();
protected static int returnInt = 0; protected static int returnInt = 0;
protected final static ObjectSet<PowerGraph> graphs = new ObjectSet<>();
public @Load("laser") TextureRegion laser; public @Load("laser") TextureRegion laser;
public @Load("laser-end") TextureRegion laserEnd; public @Load("laser-end") TextureRegion laserEnd;
@@ -134,6 +132,13 @@ public class PowerNode extends PowerBlock{
stats.add(Stat.powerConnections, maxNodes, StatUnit.none); stats.add(Stat.powerConnections, maxNodes, StatUnit.none);
} }
@Override
public void init(){
super.init();
clipSize = Math.max(clipSize, laserRange * tilesize);
}
@Override @Override
public void drawPlace(int x, int y, int rotation, boolean valid){ public void drawPlace(int x, int y, int rotation, boolean valid){
Tile tile = world.tile(x, y); Tile tile = world.tile(x, y);

View File

@@ -50,7 +50,7 @@ public class SolidPump extends Pump{
bars.add("efficiency", (SolidPumpBuild entity) -> new Bar(() -> Core.bundle.formatFloat("bar.pumpspeed", bars.add("efficiency", (SolidPumpBuild entity) -> new Bar(() -> Core.bundle.formatFloat("bar.pumpspeed",
entity.lastPump / Time.delta * 60, 1), entity.lastPump / Time.delta * 60, 1),
() -> Pal.ammo, () -> Pal.ammo,
() -> entity.warmup)); () -> entity.warmup * entity.efficiency()));
} }
@Override @Override
@@ -116,7 +116,7 @@ public class SolidPump extends Pump{
lastPump = 0f; lastPump = 0f;
} }
pumpTime += warmup * delta(); pumpTime += warmup * edelta();
dumpLiquid(result); dumpLiquid(result);
} }

View File

@@ -143,10 +143,15 @@ public class UnitFactory extends UnitBlock{
@Override @Override
public Object senseObject(LAccess sensor){ public Object senseObject(LAccess sensor){
if(sensor == LAccess.config) return currentPlan == -1 ? null : plans.get(currentPlan).unit; if(sensor == LAccess.config) return currentPlan == -1 ? null : plans.get(currentPlan).unit;
if(sensor == LAccess.progress) return Mathf.clamp(fraction());
return super.senseObject(sensor); return super.senseObject(sensor);
} }
@Override
public double sense(LAccess sensor){
if(sensor == LAccess.progress) return Mathf.clamp(fraction());
return super.sense(sensor);
}
@Override @Override
public void buildConfiguration(Table table){ public void buildConfiguration(Table table){
Seq<UnitType> units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow() && !u.isBanned()); Seq<UnitType> units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow() && !u.isBanned());

View File

@@ -45,6 +45,6 @@ public class DrawAnimation extends DrawBlock{
@Override @Override
public TextureRegion[] icons(Block block){ public TextureRegion[] icons(Block block){
return new TextureRegion[]{block.region, top}; return top.found() ? new TextureRegion[]{block.region, top} : new TextureRegion[]{block.region};
} }
} }

View File

@@ -11,6 +11,7 @@ import arc.func.*;
import arc.math.*; import arc.math.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import arc.util.Log.*;
import arc.util.serialization.*; import arc.util.serialization.*;
import com.codedisaster.steamworks.*; import com.codedisaster.steamworks.*;
import mindustry.*; import mindustry.*;
@@ -44,6 +45,9 @@ public class DesktopLauncher extends ClientLauncher{
if(Structs.contains(arg, "-gl3")){ if(Structs.contains(arg, "-gl3")){
gl30 = true; gl30 = true;
} }
if(Structs.contains(arg, "-debug")){
Log.level = LogLevel.debug;
}
setWindowIcon(FileType.internal, "icons/icon_64.png"); setWindowIcon(FileType.internal, "icons/icon_64.png");
}}); }});
}catch(Throwable e){ }catch(Throwable e){

View File

@@ -3,7 +3,7 @@
<h2>Funcțiile Jocului</h2> <h2>Funcțiile Jocului</h2>
- Construiește clădiri pt a fabrica o mare varietate de materiale avansate - Construiește clădiri pt a fabrica o mare varietate de materiale avansate
- Apara-ți baza de inamici - Apără-ți baza de inamici
- Joacă cu prietenii pe multiplayer în co-op sau provoacă-i la un meci PvP - Joacă cu prietenii pe multiplayer în co-op sau provoacă-i la un meci PvP
- Distribuie lichide și luptă împotriva amenințărilor constante, cum ar fi incendiile devastatoare sau raidurile inamice - Distribuie lichide și luptă împotriva amenințărilor constante, cum ar fi incendiile devastatoare sau raidurile inamice
- Eficientizează-ți producția folosind lichid de răcire și lubrifiante - Eficientizează-ți producția folosind lichid de răcire și lubrifiante
@@ -49,4 +49,4 @@
- Configurează atât generarea aleatorie a minereurilor cât și poziția râurilor și a zonelor cu resurse - Configurează atât generarea aleatorie a minereurilor cât și poziția râurilor și a zonelor cu resurse
- Configurează structura valurilor inamice - Configurează structura valurilor inamice
- Personalizează regulile de bază ale hărții - Personalizează regulile de bază ale hărții
- Folosește peste 80 de blocuri de teren diferite - Folosește peste 80 de blocuri de teren diferite

View File

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

View File

@@ -287,7 +287,6 @@ public class ServerControl implements ApplicationListener{
Core.app.exit(); Core.app.exit();
}); });
handler.register("stop", "Stop hosting the server.", arg -> { handler.register("stop", "Stop hosting the server.", arg -> {
net.closeServer(); net.closeServer();
if(lastTask != null) lastTask.cancel(); if(lastTask != null) lastTask.cancel();

View File

@@ -37,7 +37,7 @@
}, },
{ {
"name": "mindustry.ddns.net", "name": "mindustry.ddns.net",
"address": ["mindustry.ddns.net:1000", "mindustry.ddns.net:2000", "mindustry.ddns.net:3000", "mindustry.ddns.net:4000"] "address": ["mindustry.ddns.net", "mindustry.ddns.net:1000", "mindustry.ddns.net:2000", "mindustry.ddns.net:3000", "mindustry.ddns.net:4000"]
}, },
{ {
"name": "Surrealment", "name": "Surrealment",
@@ -45,7 +45,7 @@
}, },
{ {
"name": "ALEX", "name": "ALEX",
"address": ["alexmindustryhub.ddns.net:6568", "alexmindustry.ddns.net:25586", "alexmindustry.ddns.net:25587", "alexmindustryattac.ddns.net:25800","alexmindustryturbo.ddns.net:25581","alexmindustryhex.ddns.net:25583"] "address": ["alexmindustryhub.ddns.net:6568", "dogemindustry.ddns.net:25586", "alexmindustry.ddns.net:25587", "alexmindustryattac.ddns.net:25800","alexmindustryturbo.ddns.net:25581","alexmindustryhex.ddns.net:25583"]
}, },
{ {
"name": "Minty [subzero]", "name": "Minty [subzero]",
@@ -102,5 +102,13 @@
{ {
"name": "CxZx", "name": "CxZx",
"address": ["usfr2.forcehost.net:25578"] "address": ["usfr2.forcehost.net:25578"]
},
{
"name": "Español",
"address": ["168.119.36.188:41445"]
},
{
"name": "CreateDustry",
"address": ["144.76.120.74:18645"]
} }
] ]

View File

@@ -13,7 +13,7 @@
}, },
{ {
"name": "Omega", "name": "Omega",
"address": ["185.86.230.61:25571", "185.86.230.61:25570", "185.86.230.62:25572","yeet.mindustry.me:6567"] "address": ["yeet.mindustry.me:2345", "yeet.mindustry.me:2076", "yeet.mindustry.me:2222","yeet.mindustry.me:6567", "yeet.mindustry.me:2054", "yeet.mindustry.me:3512"]
}, },
{ {
"name": "MeowLand", "name": "MeowLand",