From d9c124a82090aeed1bc11888ffb664d98b10394f Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Tue, 25 Aug 2020 23:06:51 +0700 Subject: [PATCH 001/145] New lines from main bundle and fixes Still hasn't done yet --- core/assets/bundles/bundle_in_ID.properties | 157 ++++++++++++-------- 1 file changed, 94 insertions(+), 63 deletions(-) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 5868526b85..6e22b6673c 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -63,8 +63,7 @@ stat.delivered = Sumber Daya yang Diluncurkan: stat.playtime = Waktu Bermain:[accent] {0} stat.rank = Nilai Akhir: [accent]{0} -launcheditems = [accent]Sumber Daya -launchinfo = [unlaunched][[LAUNCH] intimu untuk mendapatkan sumber daya yang ditandakan dengan warna biru +globalitems = [accent]Item Global map.delete = Apakah Anda yakin ingin menghapus peta "[accent]{0}[]"? level.highscore = Nilai Tertinggi: [accent]{0} level.select = Pilih Level @@ -105,13 +104,13 @@ mods.none = [lightgray]Tidak ada mod yang ditemukan! mods.guide = Panduan Modding mods.report = Lapor Kesalahan mods.openfolder = Buka Folder Mod -mods.reload = mengulangi -mods.reloadexit = game akan keluar, untuk mengulang mod. +mods.reload = Muat Ulang +mods.reloadexit = Game akan keluar, untuk mengulang mod. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Aktif mod.disabled = [scarlet]Nonaktif mod.disable = Aktif -mod.content = konten: +mod.content = Konten: mod.delete.error = Tidak bisa menghapus mod. File mungkin sedang digunakan. mod.requiresversion = [scarlet]Versi game minimal yang dibutuhkan: [accent]{0} mod.missingdependencies = [scarlet]Ketergantungan hilang: {0} @@ -125,14 +124,14 @@ mod.reloadrequired = [scarlet]Dibutuhkan untuk memuat ulang mod.import = Impor Mod mod.import.file = Import File mod.import.github = Impor Mod GitHub -mod.jarwarn = [scarlet]mod dari JAR sebenarnya tidak aman.[]\nPastikan anda mengimpor mod dari sumber terpercaya! +mod.jarwarn = [scarlet]Mod dari JAR sebenarnya tidak aman.[]\nPastikan anda mengimpor mod dari sumber terpercaya! mod.item.remove = Item ini merupakan bagian dari mod[accent] '{0}'[] mod. Untuk dihilangkan, hapus mod ini. mod.remove.confirm = Mod ini akan dihapus. mod.author = [lightgray]Pencipta:[] {0} mod.missing = Simpanan ini mengandung mod yang telah diperbarui atau sudah lama tidak dipasang. Kemungkinan akan terjadi perubahan. Apakah Anda yakin untuk memuatnya?\n[lightgray]Mods:\n{0} mod.preview.missing = Sebelum memposting mod di workshop, kamu harus memberi foto pratinjau.\nBeri sebuah foto berformat[accent] preview.png[] ke dalam folder mod dan ulang kembali. mod.folder.missing = Hanya mod dengan format folder yang dapat diposting di workshop.\nUntuk mengubah mod menjadi folder, ekstrak file mod tersebut dan pastikan berbentuk sebuah folder, kemudian ulang game Anda atau mod Anda.. -mod.scripts.disable = perangkat anda tidak mendukung mod berformat skrip/JS. Anda harus menonaktifkan mod untuk lanjut bermain!. +mod.scripts.disable = Perangkat anda tidak mendukung mod berformat skrip/JS. Anda harus menonaktifkan mod untuk lanjut bermain!. about.button = Tentang name = Nama: @@ -144,6 +143,7 @@ techtree = Cabang Teknologi research.list = [lightgray]Penelitian: research = Penelitian researched = [lightgray]{0} telah diteliti. +research.progress = {0}% diteliti players = {0} pemain aktif players.single = {0} pemain aktif players.search = cari @@ -153,7 +153,7 @@ server.kicked.kick = Anda telah dikeluarkan dari server! server.kicked.whitelist = Anda tidak ada di dalam whitelist. server.kicked.serverClose = Server ditutup. server.kicked.vote = Anda dipilih untuk dikeluarkan. Sampai jumpa! -server.kicked.clientOutdated = Client kadaluarsa! Perbarui mindustry Anda! +server.kicked.clientOutdated = Client kadaluarsa! Perbarui game Anda! server.kicked.serverOutdated = Server kadaluarsa! Tanya pemilik untuk memperbarui! server.kicked.banned = Anda telah dilarang untuk memasuki server ini. server.kicked.typeMismatch = Server ini tidak cocok dengan versi build Anda. @@ -192,7 +192,7 @@ trace.mobile = Client Mobile: [accent]{0} trace.modclient = Client Modifikasi: [accent]{0} invalidid = Client ID tidak valid! Laporkan masalah. server.bans = Pemain Dilarang Masuk -server.bans.none = Tidak ada pemain yang diberiizin masuk! +server.bans.none = Tidak ada pemain yang tidak diberi izin masuk! server.admins = Admin server.admins.none = Tidak ada admin! server.add = Tambahkan Server @@ -257,7 +257,7 @@ view.workshop = Lihat di Workshop workshop.listing = Sunting Daftar Workshop ok = OK open = Buka -customize = edit +customize = Sunting cancel = Batal openlink = Buka Tautan copylink = Salin Tautan @@ -330,7 +330,7 @@ waves.never = waves.every = setiap waves.waves = gelombang waves.perspawn = per muncul -waves.shields = shields/wave +waves.shields = shields/gelombang waves.to = sampai waves.guardian = Guardian waves.preview = Pratinjau @@ -340,6 +340,12 @@ waves.load = Tempel dari Papan klip waves.invalid = Gelombang tidak valid di papan klip. waves.copied = Gelombang tersalin. waves.none = Tidak ada musuh yang didefinisikan.\nIngat bahwa susunan gelombang yang kosong akan diubah menjadi susunan gelombang standar secara otomatis. + +#these are intentionally in lower case +wavemode.counts = counts +wavemode.totals = totals +wavemode.health = health + editor.default = [lightgray] details = Detail... edit = Sunting... @@ -347,8 +353,8 @@ editor.name = Nama: editor.spawn = Munculkan Unit editor.removeunit = Hapus Unit editor.teams = Tim -editor.errorload = Terjadi kesalahan saat memuat file:\n[accent]{0} -editor.errorsave = Terjadi kesalahan saat menyimpan file:\n[accent]{0} +editor.errorload = Terjadi kesalahan saat memuat file. +editor.errorsave = Terjadi kesalahan saat menyimpan file. editor.errorimage = Itu gambar biasa, bukan peta. Jangan merubah ekstensi dan megharapkan akan berhasil.\n\nJika anda ingin mengimpor peta "Legacy", gunakan tombol 'impor peta legacy ' di penyunting. editor.errorlegacy = Peta ini terlalu tua, dan memakai format peta "legacy" yang tidak didukung lagi. editor.errornot = Ini bukan merupakan file peta. @@ -441,7 +447,7 @@ width = Lebar: height = Tinggi: menu = Menu play = Bermain -campaign = kampanye +campaign = Kampanye load = Memuat save = Simpan fps = FPS: {0} @@ -459,9 +465,11 @@ locked = Terkunci complete = [lightgray]Mencapai: requirement.wave = Capai gelombang {0} dalam {1} requirement.core = Hancurkan inti musuh dalam {0} +requirement.research = Research {0} requirement.unlock = Buka {0} resume = Lanjutkan Zona:\n[lightgray]{0} bestwave = [lightgray]Gelombang Terbaik: {0} +#TODO fix/remove this launch = < MELUNCUR > launch.text = Launch launch.title = Berhasil Meluncur @@ -471,6 +479,7 @@ launch.confirm = Ini akan meluncurkan semua sumber daya di inti.\nAnda tidak bis launch.skip.confirm = Jika Anda lewati sekarang, Anda tidak akan dapat meluncur hingga gelombang berikutnya. uncover = Buka configure = Konfigurasi Muatan +#TODO loadout = Loadout resources = Resources bannedblocks = Balok yang dilarang @@ -496,6 +505,7 @@ error.io = Terjadi kesalahan jaringan I/O. error.any = Terjadi kesalahan Jaringan tidak diketahui. error.bloom = Gagal untuk menginisialisasi bloom.\nPerangkat Anda mungkin tidak mendukung fitur ini. +#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Ground Zero sector.craters.name = The Craters sector.frozenForest.name = Frozen Forest @@ -508,8 +518,12 @@ sector.tarFields.name = Tar Fields sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass -sector.groundZero.description = lokasi yang optimal untuk bermain satu kali lagi. Sangat sedikit musuh. Beberapa sumber daya.\nKumpulkan timah dan tembaga sebanyak yang anda bisa.\nPindah. -sector.frozenForest.description = disini, dekat dengan gunung, spora spora sudah menyebar. Temperatur yang sangat rendah tidak dapat mempertahankan selamanya.\n\nBerusaha untuk kekuatan. Bangun generator pembakaran. Pelajari cara menggunakan mender. +#unused +#sector.impact0078.name = Impact 0078 +#sector.crags.name = Crags + +sector.groundZero.description = Lokasi yang optimal untuk bermain satu kali lagi. Sangat sedikit musuh. Beberapa sumber daya.\nKumpulkan timah dan tembaga sebanyak yang anda bisa.\nPindah. +sector.frozenForest.description = Disini, dekat dengan gunung, spora spora sudah menyebar. Temperatur yang sangat rendah tidak dapat mempertahankan selamanya.\n\nBerusaha untuk kekuatan. Bangun generator pembakaran. Pelajari cara menggunakan mender. sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. @@ -532,6 +546,8 @@ settings.graphics = Grafik settings.cleardata = Menghapus Data Permainan... settings.clear.confirm = Anda yakin ingin menghapus data ini?\nWaktu tidak bisa diulang kembali! settings.clearall.confirm = [scarlet]PERINGATAN![]\nIni akan menghapus semua data permainan, termasuk simpanan, peta, bukaan dan keybind.\nSetelah Anda menekan 'ok' permainan akan menghapus semua data dan keluar otomatis. +settings.clearsaves.confirm = Anda yakin ingin menghapus semua simpanan? +settings.clearsaves = Bersihkan Simpanan paused = [accent]< Jeda > clear = Bersih banned = [scarlet]Dilarang @@ -559,6 +575,8 @@ blocks.shootrange = Jarak blocks.size = Ukuran blocks.liquidcapacity = Kapasitas Zat Cair blocks.powerrange = Jarak Tenaga +blocks.linkrange = Link Range +blocks.instructions = Instructions blocks.powerconnections = Koneksi Maksimal blocks.poweruse = Penggunaan Tenaga blocks.powerdamage = Tenaga/Pukulan @@ -574,6 +592,7 @@ blocks.boosteffect = Efek Pendorong blocks.maxunits = Maks Unit Aktif blocks.health = Darah blocks.buildtime = Waktu Pembuatan +blocks.maxconsecutive = Max Consecutive blocks.buildcost = Biaya Bangunan blocks.inaccuracy = Jarak Melenceng blocks.shots = Tembakan @@ -625,8 +644,9 @@ unit.persecond = /detik unit.timesspeed = x kecepatan unit.percent = % unit.items = item -unit.thousands = ribu -unit.millions = juta +unit.thousands = k +unit.millions = jt +unit.billions = m category.general = Umum category.power = Tenaga category.liquids = Zat Cair @@ -639,13 +659,13 @@ setting.shadows.name = Bayangan setting.blockreplace.name = Usulan Blok Otomatis setting.linear.name = Filter Bergaris setting.hints.name = Petunjuk -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = Display Resource Flow Rate setting.buildautopause.name = Jeda Otomatis saat Membangun setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animasi Perairan setting.animatedshields.name = Animasi Pelindung setting.antialias.name = Antialiasi[lightgray] (membutuhkan restart)[] -setting.playerindicators.name = Player Indicators +setting.playerindicators.name = Indikasi Pemain setting.indicators.name = Indikasi Musuh/Teman Lain setting.autotarget.name = Target Secara Otomatis setting.keyboard.name = Kontrol Mouse+Papan Ketik @@ -664,7 +684,7 @@ setting.difficulty.name = Tingkat Kesulitan: setting.screenshake.name = Layar Getar setting.effects.name = Munculkan Efek setting.destroyedblocks.name = Tunjukkan Blok yang Telah Hancur -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Tunjukan Status Blok setting.conveyorpathfinding.name = Navigasi Pengantar Otomatis setting.sensitivity.name = Sensitivitas Kontroler setting.saveinterval.name = Jarak Menyimpan @@ -674,15 +694,15 @@ setting.milliseconds = {0} milisekon setting.fullscreen.name = Layar Penuh setting.borderlesswindow.name = Jendela tak Berbatas[lightgray] (mungkin memerlukan mengulang kembali) setting.fps.name = Tunjukkan FPS -setting.smoothcamera.name = Smooth Camera +setting.smoothcamera.name = Kamera Halus setting.blockselectkeys.name = Tunjukkan Kunci Pilih Blok setting.vsync.name = VSync -setting.pixelate.name = Mode Pixel[lightgray] (menonaktifkan animasi) +setting.pixelate.name = Mode Pixel setting.minimap.name = Tunjukkan Peta Kecil -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Tunjukkan Item Inti (WIP) setting.position.name = Tunjukkan Posisi Pemain setting.musicvol.name = Volume Musik -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Tunjukkan Atmosfer Planet setting.ambientvol.name = Volume Sekeliling setting.mutemusic.name = Diamkan Musik setting.sfxvol.name = Volume Efek Suara @@ -700,27 +720,29 @@ public.beta = Ingat bahwa game versi beta tidak dapat membuat lobi publik. uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan... uiscale.cancel = Batal & Keluar setting.bloom.name = Bloom -keybind.title = Ganti Kunci -keybinds.mobile = [scarlet]Mayoritas kunci tidak mendukung mobile. Hanya gerakan dasar yang didukung. +keybind.title = Ganti Tombol +keybinds.mobile = [scarlet]Mayoritas tombol tidak didukung oleh perangkat HP. Hanya gerakan dasar yang didukung. category.general.name = Umum -category.view.name = Melihat +category.view.name = Lihat category.multiplayer.name = Bermain Bersama -category.blocks.name = Block Select +category.blocks.name = Pilih Blok command.attack = Serang command.rally = Kumpul/Patroli command.retreat = Mundur -placement.blockselectkeys = \n[lightgray]Kunci: [{0}, +command.idle = Diam di Tempat +placement.blockselectkeys = \n[lightgray]Tombol: [{0}, keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.control.name = Kontrol Unit keybind.clear_building.name = Hapus Bangunan -keybind.press = Tekan kunci... -keybind.press.axis = Tekan sumbu atau kunci... +keybind.press = Tekan tombol... +keybind.press.axis = Tekan sumbu atau tombol... keybind.screenshot.name = Tangkapan Layar Peta keybind.toggle_power_lines.name = Aktifkan Tenaga Laser -keybind.toggle_block_status.name = Toggle Block Statuses -keybind.move_x.name = Pindah x -keybind.move_y.name = Pindah y -keybind.mouse_move.name = Ikut Mouse +keybind.toggle_block_status.name = Aktifkan Status Blok +keybind.move_x.name = Pindah X +keybind.move_y.name = Pindah Y +keybind.mouse_move.name = Ikuti Mouse +keybind.pan.name = Pan View keybind.boost.name = Boost keybind.schematic_select.name = Pilih Daerah keybind.schematic_menu.name = Menu Skema @@ -758,7 +780,7 @@ keybind.chat.name = Pesan keybind.player_list.name = Daftar pemain keybind.console.name = Papan Konsol keybind.rotate.name = Putar -keybind.rotateplaced.name = Putar yang ada (Tekan) +keybind.rotateplaced.name = Putar yang ada (Tekan dan Tahan) keybind.toggle_menus.name = Muncul Tidaknya Menu keybind.chat_history_prev.name = Sejarah Pesan Sebelumnya keybind.chat_history_next.name = Sejarah Pesan Setelahnya @@ -784,7 +806,7 @@ rules.waves = Gelombang rules.attack = Mode Penyerangan rules.enemyCheat = Sumber Daya A.I Musuh (Tim Merah) Tak Terbatas rules.blockhealthmultiplier = Multiplikasi Darah Blok -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = Multiplikasi Kekuatan Blok rules.unitbuildspeedmultiplier = Multiplikasi Kecepatan Munculnya Unit rules.unithealthmultiplier = Multiplikasi Darah Unit rules.unitdamagemultiplier = Multiplikasi Kekuatan Unit @@ -795,13 +817,13 @@ rules.buildspeedmultiplier = Multiplikasi Waktu Pembuatan Bangunan rules.deconstructrefundmultiplier = Penggembalian Dana Mendekonstraksi Blok rules.waitForWaveToEnd = Gelombang menunggu musuh rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok) -rules.unitammo = Units Require Ammo +rules.unitammo = Unit Membutuhkan Amunisi rules.title.waves = Gelombang rules.title.resourcesbuilding = Sumber Daya & Bangunan rules.title.enemy = Musuh rules.title.unit = Unit rules.title.experimental = Eksperimental -rules.title.environment = Environment +rules.title.environment = Lingkungan rules.lighting = Penerangan rules.ambientlight = Sinar Disekeliling rules.solarpowermultiplier = Kekuatan Panel Surya (kali) @@ -835,12 +857,12 @@ item.flammability = [lightgray]Tingkat Kebakaran: {0}% item.radioactivity = [lightgray]Tingkat Radioaktif: {0}% unit.health = [lightgray]Darah: {0} unit.speed = [lightgray]Kecepatan: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% +unit.weapon = [lightgray]Senjata: {0} +unit.itemcapacity = [lightgray]Kapasitas Item: {0} +unit.minespeed = [lightgray]Kecepatan Menambang: {0}% +unit.minepower = [lightgray]Kekuatang Menambang: {0} +unit.ability = [lightgray]Abilitas: {0} +unit.buildspeed = [lightgray]Kecepatan Membangun: {0}% liquid.heatcapacity = [lightgray]Kapasitas Panas: {0} liquid.viscosity = [lightgray]Kelekatan: {0} @@ -964,7 +986,7 @@ block.hail.name = Penghujan block.lancer.name = Lancer block.conveyor.name = Pengantar block.titanium-conveyor.name = Pengantar Berbahan Titanium -block.plastanium-conveyor.name = Plastanium Conveyor +block.plastanium-conveyor.name = Pengantar Berbahan Plastanium block.armored-conveyor.name = Pengantar Berlapis Pelindung block.armored-conveyor.description = Memindahkan barang sama cepatnya dengan pengantar titanium, namun memiliki lebih banyak armor. Tidak dapat menerima masukan dari samping dari apapun kecuali dari pengantar. block.junction.name = Simpangan @@ -1055,25 +1077,34 @@ block.container.name = Kontainer block.launch-pad.name = Alas Peluncur block.launch-pad-large.name = Alas Peluncur Besar block.segment.name = Segment -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor +block.command-center.name = Pusat Perintah +block.ground-factory.name = Pabrik Darat +block.air-factory.name = Pabrik Pesawat +block.naval-factory.name = Pabrik Kapal +block.additive-reconstructor.name = Rekonstruktor Aditif +block.multiplicative-reconstructor.name = Rekonstruktor Multiplikatif +block.exponential-reconstructor.name = Rekonstruktor Eksponential +block.tetrative-reconstructor.name = Rekonstruktor Tetratif +block.payload-conveyor.name = Payload Conveyor block.payload-router.name = Payload Router block.disassembler.name = Disassembler block.silicon-crucible.name = Silicon Crucible -block.large-overdrive-projector.name = Large Overdrive Projector -team.blue.name = biru -team.crux.name = merah -team.sharded.name = oranye -team.orange.name = jingga +block.overdrive-dome.name = Overdrive Dome + +block.switch.name = Switch +block.micro-processor.name = Micro Processor +block.logic-processor.name = Logic Processor +block.hyper-processor.name = Hyper Processor +block.logic-display.name = Logic Display +block.memory-cell.name = Memory Cell + +team.blue.name = blue +team.crux.name = red +team.sharded.name = orange +team.orange.name = orange team.derelict.name = derelict -team.green.name = hijau -team.purple.name = ungu +team.green.name = green +team.purple.name = purple tutorial.next = [lightgray] tutorial.intro = Kamu telah memasuki[scarlet] Tutorial Mindustry.[]\nMulai dengan[accent] menambang tembaga[]. Tekan bijih tembaga dekat intimu.\n\n[accent]{0}/{1} tembaga From ca823be813a719ad776a1eb7deccf50257bb99f7 Mon Sep 17 00:00:00 2001 From: way-zer Date: Sat, 29 Aug 2020 20:31:35 +0800 Subject: [PATCH 002/145] Update servers_be.json one bleeding-edge server of China --- servers_be.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers_be.json b/servers_be.json index 5c007872e5..3e420ee2eb 100644 --- a/servers_be.json +++ b/servers_be.json @@ -10,5 +10,8 @@ }, { "address": "routerchain.ddns.net" + }, + { + "address": "be.wayzer.cf" } ] From 6509a6cd7ab4445cb6df14d0360a482cf24ddcf4 Mon Sep 17 00:00:00 2001 From: Pietro303HD <47507131+Pietro303HD@users.noreply.github.com> Date: Thu, 3 Sep 2020 08:29:46 -0300 Subject: [PATCH 003/145] some small changes, and also removed a typo --- core/assets/bundles/bundle_pt_BR.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 64d54a3d5d..fca12a70ce 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -1014,7 +1014,7 @@ block.vault.name = Cofre block.wave.name = Onda block.swarmer.name = Enxame block.salvo.name = Salvo -block.ripple.name = Ondulação +block.ripple.name = Morteiro block.phase-conveyor.name = Transportador de Fase block.bridge-conveyor.name = Esteira-Ponte block.plastanium-compressor.name = Compressor de Plastânio @@ -1024,8 +1024,8 @@ block.solar-panel.name = Painel Solar block.solar-panel-large.name = Painel Solar Grande block.oil-extractor.name = Bomba de Petróleo block.repair-point.name = Ponto de Reparo -block.pulse-conduit.name = Cano de Tinânio -block.plated-conduit.name = Cano blindado +block.pulse-conduit.name = Cano de Pulso +block.plated-conduit.name = Cano Blindado block.phase-conduit.name = Cano de Fase block.liquid-router.name = Roteador de Líquido block.liquid-tank.name = Tanque de Líquido @@ -1047,7 +1047,7 @@ block.fuse.name = Fusivel block.shock-mine.name = Mina de choque block.overdrive-projector.name = Projetor de sobrecarga block.force-projector.name = Projetor de campo de força -block.arc.name = Bobina de Tesla +block.arc.name = Tesla block.rtg-generator.name = Gerador GTR block.spectre.name = Espectro block.meltdown.name = Fusão From acb849b536f73d8d8dccfcce6ee16405abf9a590 Mon Sep 17 00:00:00 2001 From: Pietro303HD <47507131+Pietro303HD@users.noreply.github.com> Date: Thu, 3 Sep 2020 09:35:04 -0300 Subject: [PATCH 004/145] Update bundle_pt_BR.properties --- core/assets/bundles/bundle_pt_BR.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index fca12a70ce..80daa905fa 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -975,8 +975,8 @@ block.inverted-sorter.name = Ordenador invertido block.message.name = Mensagem block.illuminator.name = Iluminador block.illuminator.description = Uma pequena, compacta e configurável fonte de luz. Precisa de energia para funcionar. -block.overflow-gate.name = Comporta -block.underflow-gate.name = Comporta invertida +block.overflow-gate.name = Portão Sobrecarregado +block.underflow-gate.name = Portão Sobrecarregado invertida block.silicon-smelter.name = Fundidora de silicio block.phase-weaver.name = Palheta de fase block.pulverizer.name = Pulverizador From 55ed739372edcf16c7312808592ec9838c2104fe Mon Sep 17 00:00:00 2001 From: Recessive <61154659+Recessive@users.noreply.github.com> Date: Wed, 9 Sep 2020 14:27:26 +1000 Subject: [PATCH 005/145] Update servers.json Add {AA} Plague to the server listing --- servers.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers.json b/servers.json index 07226a273f..34241b026b 100644 --- a/servers.json +++ b/servers.json @@ -44,6 +44,9 @@ { "address": "aamindustry.play.ai:6568" }, + { + "address": "aamindustry.play.ai:6569" + }, { "address": "mindustry.atannergaming.com" }, From c3222f59c50cc2c00a7871e14cb50cd84686a846 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 14 Sep 2020 17:10:32 -0400 Subject: [PATCH 006/145] router --- .../world/blocks/distribution/Router.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/Router.java b/core/src/mindustry/world/blocks/distribution/Router.java index cb0ae9807d..6dae71a26e 100644 --- a/core/src/mindustry/world/blocks/distribution/Router.java +++ b/core/src/mindustry/world/blocks/distribution/Router.java @@ -1,9 +1,12 @@ package mindustry.world.blocks.distribution; +import arc.math.*; +import arc.util.ArcAnnotate.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.blocks.*; import mindustry.world.meta.*; public class Router extends Block{ @@ -20,10 +23,22 @@ public class Router extends Block{ noUpdateDisabled = true; } - public class RouterBuild extends Building{ + public class RouterBuild extends Building implements ControlBlock{ public Item lastItem; public Tile lastInput; public float time; + public @NonNull BlockUnitc unit = Nulls.blockUnit; + + @Override + public void created(){ + unit = (BlockUnitc)UnitTypes.block.create(team); + unit.tile(this); + } + + @Override + public Unit unit(){ + return (Unit)unit; + } @Override public void updateTile(){ @@ -72,6 +87,22 @@ public class Router extends Block{ } public Building getTileTarget(Item item, Tile from, boolean set){ + if(isControlled()){ + unit.health(health); + unit.team(team); + + int angle = Mathf.mod((int)((angleTo(unit.aimX(), unit.aimY()) + 45) / 90), 4); + + if(unit.isShooting()){ + Building other = nearby(angle); + if(other.acceptItem(this, item)){ + return other; + } + } + + return null; + } + int counter = rotation; for(int i = 0; i < proximity.size; i++){ Building other = proximity.get((i + counter) % proximity.size); From eafbe3d02df11739d618b1594de8c06d124620ba Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Wed, 16 Sep 2020 12:46:10 +0700 Subject: [PATCH 007/145] in_ID Google Play Store translation --- fastlane/metadata/android/in_ID/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 fastlane/metadata/android/in_ID/.gitignore diff --git a/fastlane/metadata/android/in_ID/.gitignore b/fastlane/metadata/android/in_ID/.gitignore new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/fastlane/metadata/android/in_ID/.gitignore @@ -0,0 +1 @@ + From 22c2d8b010fc3e5625414175be78e132efc0367d Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Wed, 16 Sep 2020 13:14:11 +0700 Subject: [PATCH 008/145] Update bundle_in_ID.properties to match with v6 with fixes from PR #2513, completed(?) --- core/assets/bundles/bundle_in_ID.properties | 186 ++++++++++++-------- 1 file changed, 109 insertions(+), 77 deletions(-) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 6e22b6673c..7d101e0476 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -20,20 +20,21 @@ gameover = Permainan Habis gameover.pvp = Tim[accent] {0}[] menang! highscore = [accent]Rekor Baru! copied = Tersalin. +indevpopup = [accent]v6[] saat ini dalam versi [accent]alpha[].\n[lightgray]Artinya:[]\n[scarlet]- Kampanye belum sepenuhnya selesai[]\n- Beberapa konten tidak tersedia\n - Beberapa [scarlet]Unit AI[] tidak sepenuhnya bekerja\n- Beberapa unit belum sepenuhnya selesai\n- Semua yang kamu lihat dapat berubah atau dihapus sewaktu-waktu.\n\nLaporkan bug atau crash di [accent]Github[]. load.sound = Suara load.map = Peta load.image = Gambar load.content = Konten load.system = Sistem -load.mod = Mods +load.mod = Mod load.scripts = Skrip be.update = Versi Bleeding Edge terbaru tersedia: be.update.confirm = Unduh dan ulang kembali sekarang? be.updating = Memperbarui... -be.ignore = Biarkan -be.noupdates = Tidak ada hal baru yang ditemukan. +be.ignore = Abaikan +be.noupdates = Tidak ada pembaharuan yang ditemukan. be.check = Cek versi baru schematic = Skema @@ -83,7 +84,7 @@ close = Tutup website = Situs Jaringan quit = Keluar save.quit = Simpan & Keluar -maps = Maps +maps = Peta maps.browse = Cari Peta continue = Lanjutkan maps.none = [lightgray]Peta tidak ditemukan! @@ -113,6 +114,7 @@ mod.disable = Aktif mod.content = Konten: mod.delete.error = Tidak bisa menghapus mod. File mungkin sedang digunakan. mod.requiresversion = [scarlet]Versi game minimal yang dibutuhkan: [accent]{0} +mod.outdated = [scarlet]Tidak cocok dengan V6 (minGameVersion: 105) mod.missingdependencies = [scarlet]Ketergantungan hilang: {0} mod.erroredcontent = [scarlet]Konten Mengalami Kesalahan mod.errors = Kesalahan terjadi disaat memuat konten. @@ -122,7 +124,7 @@ mod.enable = Aktif mod.requiresrestart = Game akan keluar untuk mengaktifkan mod. mod.reloadrequired = [scarlet]Dibutuhkan untuk memuat ulang mod.import = Impor Mod -mod.import.file = Import File +mod.import.file = Impor File mod.import.github = Impor Mod GitHub mod.jarwarn = [scarlet]Mod dari JAR sebenarnya tidak aman.[]\nPastikan anda mengimpor mod dari sumber terpercaya! mod.item.remove = Item ini merupakan bagian dari mod[accent] '{0}'[] mod. Untuk dihilangkan, hapus mod ini. @@ -130,12 +132,14 @@ mod.remove.confirm = Mod ini akan dihapus. mod.author = [lightgray]Pencipta:[] {0} mod.missing = Simpanan ini mengandung mod yang telah diperbarui atau sudah lama tidak dipasang. Kemungkinan akan terjadi perubahan. Apakah Anda yakin untuk memuatnya?\n[lightgray]Mods:\n{0} mod.preview.missing = Sebelum memposting mod di workshop, kamu harus memberi foto pratinjau.\nBeri sebuah foto berformat[accent] preview.png[] ke dalam folder mod dan ulang kembali. -mod.folder.missing = Hanya mod dengan format folder yang dapat diposting di workshop.\nUntuk mengubah mod menjadi folder, ekstrak file mod tersebut dan pastikan berbentuk sebuah folder, kemudian ulang game Anda atau mod Anda.. -mod.scripts.disable = Perangkat anda tidak mendukung mod berformat skrip/JS. Anda harus menonaktifkan mod untuk lanjut bermain!. +mod.folder.missing = Hanya mod dengan format folder yang dapat diposting di workshop.\nUntuk mengubah mod menjadi folder, ekstrak file mod tersebut dan pastikan berbentuk sebuah folder, kemudian ulang game Anda atau mod Anda. +mod.scripts.disable = Perangkat anda tidak mendukung mod berformat skrip/JS. Anda harus menonaktifkan mod untuk lanjut bermain! about.button = Tentang name = Nama: noname = Pilih[accent] nama pemain[] dahulu. +planetmap = Peta Planet +launchcore = Luncurkan Inti filename = Nama File: unlocked = Konten baru terbuka! completed = [accent]Terselesaikan @@ -146,8 +150,8 @@ researched = [lightgray]{0} telah diteliti. research.progress = {0}% diteliti players = {0} pemain aktif players.single = {0} pemain aktif -players.search = cari -players.notfound = [gray]tidak ada pemain ditemukan +players.search = Cari +players.notfound = [gray]Tidak ada pemain ditemukan server.closing = [accent]Menutup server... server.kicked.kick = Anda telah dikeluarkan dari server! server.kicked.whitelist = Anda tidak ada di dalam whitelist. @@ -257,7 +261,7 @@ view.workshop = Lihat di Workshop workshop.listing = Sunting Daftar Workshop ok = OK open = Buka -customize = Sunting +customize = Sunting Peraturan cancel = Batal openlink = Buka Tautan copylink = Salin Tautan @@ -330,7 +334,7 @@ waves.never = waves.every = setiap waves.waves = gelombang waves.perspawn = per muncul -waves.shields = shields/gelombang +waves.shields = periasi/gelombang waves.to = sampai waves.guardian = Guardian waves.preview = Pratinjau @@ -341,10 +345,10 @@ waves.invalid = Gelombang tidak valid di papan klip. waves.copied = Gelombang tersalin. waves.none = Tidak ada musuh yang didefinisikan.\nIngat bahwa susunan gelombang yang kosong akan diubah menjadi susunan gelombang standar secara otomatis. -#these are intentionally in lower case -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +#memang sengaja diberi huruf kecil +wavemode.counts = jumlah +wavemode.totals = total +wavemode.health = darah editor.default = [lightgray] details = Detail... @@ -355,7 +359,7 @@ editor.removeunit = Hapus Unit editor.teams = Tim editor.errorload = Terjadi kesalahan saat memuat file. editor.errorsave = Terjadi kesalahan saat menyimpan file. -editor.errorimage = Itu gambar biasa, bukan peta. Jangan merubah ekstensi dan megharapkan akan berhasil.\n\nJika anda ingin mengimpor peta "Legacy", gunakan tombol 'impor peta legacy ' di penyunting. +editor.errorimage = Itu gambar biasa, bukan peta. Jangan merubah ekstensi dan megharapkan akan berhasil.\n\nJika anda ingin mengimpor peta "Legacy", gunakan tombol 'Impor Peta Legacy ' di penyunting. editor.errorlegacy = Peta ini terlalu tua, dan memakai format peta "legacy" yang tidak didukung lagi. editor.errornot = Ini bukan merupakan file peta. editor.errorheader = File peta ini bisa jadi tidak sah atau rusak. @@ -411,8 +415,8 @@ toolmode.drawteams.description = Menggambar tim bukannya blok. filters.empty = [lightgray]Tidak ada filter! Tambahkan dengan tombol dibawah. filter.distort = Kerusakkan filter.noise = Kebisingan -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = Pilih Munculnya Musuh +filter.corespawn = Pilih Inti filter.median = Median filter.oremedian = Median Bijih filter.blend = Campur @@ -432,7 +436,7 @@ filter.option.circle-scale = Ukuran Lingkaran filter.option.octaves = Oktaf filter.option.falloff = Kemerosotan filter.option.angle = Sudut -filter.option.amount = Amount +filter.option.amount = Jumlah filter.option.block = Blok filter.option.floor = Lantai filter.option.flooronto = Target Lantai @@ -465,13 +469,13 @@ locked = Terkunci complete = [lightgray]Mencapai: requirement.wave = Capai gelombang {0} dalam {1} requirement.core = Hancurkan inti musuh dalam {0} -requirement.research = Research {0} requirement.unlock = Buka {0} +requirement.capture = Kuasai {0} resume = Lanjutkan Zona:\n[lightgray]{0} bestwave = [lightgray]Gelombang Terbaik: {0} #TODO fix/remove this launch = < MELUNCUR > -launch.text = Launch +launch.text = Luncurkan launch.title = Berhasil Meluncur launch.next = [lightgray]kesempatan berikutnya di gelombang {0} launch.unable2 = [scarlet]Tidak dapat MELUNCUR.[] @@ -480,10 +484,10 @@ launch.skip.confirm = Jika Anda lewati sekarang, Anda tidak akan dapat meluncur uncover = Buka configure = Konfigurasi Muatan #TODO -loadout = Loadout -resources = Resources +loadout = Muatan +resources = Sumber Daya bannedblocks = Balok yang dilarang -addall = Tambah Semu +addall = Tambah Semua configure.invalid = Jumlah harus berupa angka diantara 0 dan {0}. zone.unlocked = [lightgray]{0} terbuka. zone.requirement.complete = Gelombang {0} terselesaikan:\nPersyaratan zona {1} tercapai. @@ -505,6 +509,18 @@ error.io = Terjadi kesalahan jaringan I/O. error.any = Terjadi kesalahan Jaringan tidak diketahui. error.bloom = Gagal untuk menginisialisasi bloom.\nPerangkat Anda mungkin tidak mendukung fitur ini. +weather.rain.name = Hujan +weather.snow.name = Salju +weather.sandstorm.name = Badai Pasir +weather.sporestorm.name = Badai Spora + +sectors.unexplored = [lightgray]Belum Ditelusuri +sectors.resources = Sumber Daya: +sectors.production = Produksi: +sectors.stored = Terisi: +sectors.resume = Lanjutkan +sectors.launch = Luncurkan + #NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -535,7 +551,7 @@ sector.nuclearComplex.description = A former facility for the production and pro sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. settings.language = Bahasa -settings.data = Game Data +settings.data = Data Game settings.reset = Atur ulang ke Default (standar) settings.rebind = Ganti tombol settings.resetKey = Atur ulang @@ -551,13 +567,13 @@ settings.clearsaves = Bersihkan Simpanan paused = [accent]< Jeda > clear = Bersih banned = [scarlet]Dilarang -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]Membutuhkan sektor yang dikuasai yes = Ya no = Tidak info.title = Info error.title = [crimson]Sebuah kesalahan telah terjadi error.crashtitle = Sebuah kesalahan telah terjadi -unit.nobuild = [scarlet]Unit can't build +unit.nobuild = [scarlet]Unit tidak dapat membangun blocks.input = Masukan blocks.output = Pengeluaran blocks.booster = Pendorong @@ -573,10 +589,11 @@ blocks.itemsmoved = Kecepatan Gerak blocks.launchtime = Waktu Diantara Peluncuran blocks.shootrange = Jarak blocks.size = Ukuran +blocks.displaysize = Ukuran Tampilan blocks.liquidcapacity = Kapasitas Zat Cair blocks.powerrange = Jarak Tenaga -blocks.linkrange = Link Range -blocks.instructions = Instructions +blocks.linkrange = Jarak Tautan +blocks.instructions = Instruksi blocks.powerconnections = Koneksi Maksimal blocks.poweruse = Penggunaan Tenaga blocks.powerdamage = Tenaga/Pukulan @@ -600,8 +617,8 @@ blocks.reload = Tembakan/Detik blocks.ammo = Amunisi bar.drilltierreq = Membutuhkan Bor yang Lebih Baik -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Sumber Daya Tidak Ditemukan +bar.corereq = Memerlukan Inti Dasar bar.drillspeed = Kecepatan Bor: {0}/s bar.pumpspeed = Kecepatan Pompa: {0}/s bar.efficiency = Daya Guna: {0}% @@ -640,11 +657,13 @@ unit.liquidunits = unit zat cair unit.powerunits = unit tenaga unit.degrees = derajat unit.seconds = detik +unit.minutes = menit unit.persecond = /detik +unit.perminute = /menit unit.timesspeed = x kecepatan unit.percent = % unit.items = item -unit.thousands = k +unit.thousands = rb unit.millions = jt unit.billions = m category.general = Umum @@ -659,9 +678,9 @@ setting.shadows.name = Bayangan setting.blockreplace.name = Usulan Blok Otomatis setting.linear.name = Filter Bergaris setting.hints.name = Petunjuk -setting.flow.name = Display Resource Flow Rate +setting.flow.name = Tampilan Laju Aliran Sumber Daya setting.buildautopause.name = Jeda Otomatis saat Membangun -setting.mapcenter.name = Auto Center Map To Player +setting.mapcenter.name = Pusatkan Peta Otomatis Ke Pemain setting.animatedwater.name = Animasi Perairan setting.animatedshields.name = Animasi Pelindung setting.antialias.name = Antialiasi[lightgray] (membutuhkan restart)[] @@ -697,7 +716,7 @@ setting.fps.name = Tunjukkan FPS setting.smoothcamera.name = Kamera Halus setting.blockselectkeys.name = Tunjukkan Kunci Pilih Blok setting.vsync.name = VSync -setting.pixelate.name = Mode Pixel +setting.pixelate.name = Mode Pixel[lightgray] (menonaktifkan animasi) setting.minimap.name = Tunjukkan Peta Kecil setting.coreitems.name = Tunjukkan Item Inti (WIP) setting.position.name = Tunjukkan Posisi Pemain @@ -721,9 +740,9 @@ uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarle uiscale.cancel = Batal & Keluar setting.bloom.name = Bloom keybind.title = Ganti Tombol -keybinds.mobile = [scarlet]Mayoritas tombol tidak didukung oleh perangkat HP. 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.view.name = Lihat +category.view.name = Melihat category.multiplayer.name = Bermain Bersama category.blocks.name = Pilih Blok command.attack = Serang @@ -731,19 +750,19 @@ command.rally = Kumpul/Patroli command.retreat = Mundur command.idle = Diam di Tempat placement.blockselectkeys = \n[lightgray]Tombol: [{0}, -keybind.respawn.name = Respawn +keybind.respawn.name = Muncul Kembali keybind.control.name = Kontrol Unit keybind.clear_building.name = Hapus Bangunan keybind.press = Tekan tombol... keybind.press.axis = Tekan sumbu atau tombol... keybind.screenshot.name = Tangkapan Layar Peta keybind.toggle_power_lines.name = Aktifkan Tenaga Laser -keybind.toggle_block_status.name = Aktifkan Status Blok +keybind.toggle_block_status.name = Status Blok keybind.move_x.name = Pindah X keybind.move_y.name = Pindah Y keybind.mouse_move.name = Ikuti Mouse -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = Tampilan Geser +keybind.boost.name = Dorongan keybind.schematic_select.name = Pilih Daerah keybind.schematic_menu.name = Menu Skema keybind.schematic_flip_x.name = Balik Skema X @@ -804,6 +823,7 @@ rules.reactorexplosions = Ledakan Reaktor rules.wavetimer = Pengaturan Waktu Gelombang rules.waves = Gelombang rules.attack = Mode Penyerangan +rules.buildai = Bangunan A.I. rules.enemyCheat = Sumber Daya A.I Musuh (Tim Merah) Tak Terbatas rules.blockhealthmultiplier = Multiplikasi Darah Blok rules.blockdamagemultiplier = Multiplikasi Kekuatan Blok @@ -817,7 +837,7 @@ rules.buildspeedmultiplier = Multiplikasi Waktu Pembuatan Bangunan rules.deconstructrefundmultiplier = Penggembalian Dana Mendekonstraksi Blok rules.waitForWaveToEnd = Gelombang menunggu musuh rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok) -rules.unitammo = Unit Membutuhkan Amunisi +rules.unitammo = Unit Membutuhkan AMunisi rules.title.waves = Gelombang rules.title.resourcesbuilding = Sumber Daya & Bangunan rules.title.enemy = Musuh @@ -825,8 +845,12 @@ rules.title.unit = Unit rules.title.experimental = Eksperimental rules.title.environment = Lingkungan rules.lighting = Penerangan +rules.fire = Api +rules.explosions = Kekuatan Ledakan Blok/Unit rules.ambientlight = Sinar Disekeliling -rules.solarpowermultiplier = Kekuatan Panel Surya (kali) +rules.weather = Cuaca +rules.weather.frequency = Frekuensi: +rules.weather.duration = Durasi: content.item.name = Item content.liquid.name = Zat Cair @@ -858,9 +882,9 @@ item.radioactivity = [lightgray]Tingkat Radioaktif: {0}% unit.health = [lightgray]Darah: {0} unit.speed = [lightgray]Kecepatan: {0} unit.weapon = [lightgray]Senjata: {0} -unit.itemcapacity = [lightgray]Kapasitas Item: {0} +unit.itemcapacity = [lightgray]Kpaasitan Item: {0} unit.minespeed = [lightgray]Kecepatan Menambang: {0}% -unit.minepower = [lightgray]Kekuatang Menambang: {0} +unit.minepower = [lightgray]Kekuatan Menambang: {0} unit.ability = [lightgray]Abilitas: {0} unit.buildspeed = [lightgray]Kecepatan Membangun: {0}% @@ -878,6 +902,7 @@ unit.crawler.name = Crawler unit.atrax.name = Atrax unit.spiroct.name = Spiroct unit.arkyid.name = Arkyid +unit.toxopid.name = Toxopid unit.flare.name = Flare unit.horizon.name = Horizon unit.zenith.name = Zenith @@ -892,7 +917,10 @@ unit.bryde.name = Bryde unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma +unit.scepter.name = Scepter +unit.reign.name = Reign +block.resupply-point.name = Titik Pemasok Ulang block.parallax.name = Parallax block.cliff.name = Cliff block.sand-boulder.name = Batu Pasir @@ -941,13 +969,16 @@ block.craters.name = Kawah block.sand-water.name = Air Pasir block.darksand-water.name = Air Pasir Hitam block.char.name = Bara -block.holostone.name = Batu Holo +block.dacite.name = Dasit +block.dacite-wall.name = Dinding Dasit block.ice-snow.name = Salju Es -block.rocks.name = Batu -block.icerocks.name = Batu Es -block.snowrocks.name = Batu Salju -block.dunerocks.name = Bukit Pasir +block.stone-wall.name = Dinding Batu +block.ice-wall.name = Dinding Es +block.snow-wall.name = Dinding Salju +block.dune-wall.name = Dinding Pasir block.pine.name = Cemara +block.dirt.name = Tanah +block.dirt-wall.name = Dinding Tanah block.white-tree-dead.name = Pohon Putih Mati block.white-tree.name = Pohon Putih block.spore-cluster.name = Kumpulan Spora @@ -963,7 +994,7 @@ block.dark-panel-4.name = Panel Gelap 4 block.dark-panel-5.name = Panel Gelap 5 block.dark-panel-6.name = Panel Gelap 6 block.dark-metal.name = Besi Gelap -block.ignarock.name = Batu Igna +block.basalt.name = Basal block.hotrock.name = Batu Panas block.magmarock.name = Batu Lahar block.cliffs.name = Tebing @@ -1015,7 +1046,7 @@ block.diode.name = Dioda Baterai block.battery.name = Baterai block.battery-large.name = Baterai Besar block.combustion-generator.name = Generator Pembakar -block.turbine-generator.name = Generator Turbin +block.steam-generator.name = Generator Turbin block.differential-generator.name = Generator Majemuk block.impact-reactor.name = Reaktor Tumbukan block.mechanical-drill.name = Bor Mekanik @@ -1076,35 +1107,36 @@ block.meltdown.name = Pelebur block.container.name = Kontainer block.launch-pad.name = Alas Peluncur block.launch-pad-large.name = Alas Peluncur Besar -block.segment.name = Segment +block.segment.name = Segmen block.command-center.name = Pusat Perintah block.ground-factory.name = Pabrik Darat -block.air-factory.name = Pabrik Pesawat -block.naval-factory.name = Pabrik Kapal +block.air-factory.name = Pabrik Udara +block.naval-factory.name = Pabrik Laut block.additive-reconstructor.name = Rekonstruktor Aditif block.multiplicative-reconstructor.name = Rekonstruktor Multiplikatif -block.exponential-reconstructor.name = Rekonstruktor Eksponential +block.exponential-reconstructor.name = Rekonstruktor Eksponensial block.tetrative-reconstructor.name = Rekonstruktor Tetratif -block.payload-conveyor.name = Payload Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.payload-conveyor.name = Pengantar Massa +block.payload-router.name = Pengarah Massa +block.disassembler.name = Pembongkar +block.silicon-crucible.name = Multi-Lebur +block.overdrive-dome.name = Kubah Proyeksi Percepat -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = Saklar +block.micro-processor.name = Prosesor Mikro +block.logic-processor.name = Prosesor Logika +block.hyper-processor.name = Prosesor Cepat +block.logic-display.name = Tampilan Logika +block.large-logic-display.name = Tampilan Logika Besar +block.memory-cell.name = Sel Memori -team.blue.name = blue -team.crux.name = red -team.sharded.name = orange -team.orange.name = orange -team.derelict.name = derelict -team.green.name = green -team.purple.name = purple +team.blue.name = biru +team.crux.name = merah +team.sharded.name = oranye +team.orange.name = jingga +team.derelict.name = abu-abu +team.green.name = hijau +team.purple.name = ungu tutorial.next = [lightgray] tutorial.intro = Kamu telah memasuki[scarlet] Tutorial Mindustry.[]\nMulai dengan[accent] menambang tembaga[]. Tekan bijih tembaga dekat intimu.\n\n[accent]{0}/{1} tembaga @@ -1193,7 +1225,7 @@ block.force-projector.description = Membentuk medan gaya berbentuk heksagon dise block.shock-mine.description = Mencedera musuh yang menginjak ranjau. Hampir tak kasat mata kepada musuh. block.conveyor.description = Blok transportasi dasar. Memindahkan item ke kubah ataupun pabrik. Bisa diputar. block.titanium-conveyor.description = Blok transportasi canggih. Memindahkan item lebih cepat daripada pengantar biasa. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. +block.plastanium-conveyor.description = Memindahkan barang secara bertumpuk.\nMenerima barang dari belakang, dan membaginya ke tiga arah di depan.\nMembutuhkan beberapa titik pemuat dan pembongkar untuk hasil yang maksimal. block.junction.description = Berguna seperti jembatan untuk dua pengantar yang bersimpangan. Berguna di situasi dimana dua pengantar berbeda membawa bahan berbeda ke lokasi yang berbeda. block.bridge-conveyor.description = Blok transportasi item canggih. bisa memindahkan item hingga 3 blok panjang melewati apapun lapangan atau bangunan. block.phase-conveyor.description = Blok transportasi canggih. Menggunakan tenaga untuk teleportasi item ke sambungan pengantar phase melewati beberapa blok. @@ -1223,7 +1255,7 @@ block.battery.description = Menyimpan tenaga jika ada kelimpahan dan memberikan block.battery-large.description = Menyimpan lebih banyak tenaga daripada baterai biasa. block.combustion-generator.description = Menghasilkan tenaga dengan membakar minyak atau bahan bakar. block.thermal-generator.description = Menghasilkan tenaga disaat ditaruh di lokasi yang panas. -block.turbine-generator.description = Lebih efisien daripada generator pembakar, tetapi membutuhkan tambahan air. +block.steam-generator.description = Lebih efisien daripada generator pembakar, tetapi membutuhkan tambahan air. block.differential-generator.description = Menghasilkan banyak sekali tenaga. Memanfaatkan perbedaan suhu dingin cairan pendingin dan suhu panas pyratite. block.rtg-generator.description = Generator yang tidak membutuhkan pendiginan tetapi lebih memberi sedikit tenaga daripada reaktor thorium. block.solar-panel.description = Menghasilkan jumlah tenaga kecil dari matahari. @@ -1260,4 +1292,4 @@ block.cyclone.description = Menara penembak beruntun besar. block.spectre.description = Menara besar yang menembak dua peluru kuat sekaligus. block.meltdown.description = Menara besar ini menembak sinar panjang yang kuat. block.repair-point.description = Terus menerus memulihkan unit terluka disekitar. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. +block.segment.description = Merusakkan dan menghancurkan proyektil yang datang. Proyektil laser tidak akan ditargetkan. From 71dae6fa788c1c9209625bff82b7f5f80b933c79 Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Wed, 16 Sep 2020 13:42:49 +0700 Subject: [PATCH 009/145] in_ID Google Play Store translations files added --- .../metadata/android/in_ID/changelogs/29659.txt | 10 ++++++++++ .../metadata/android/in_ID/full_description.txt | 14 ++++++++++++++ .../metadata/android/in_ID/short_description.txt | 1 + fastlane/metadata/android/in_ID/summary.txt | 1 + fastlane/metadata/android/in_ID/title.txt | 1 + 5 files changed, 27 insertions(+) create mode 100644 fastlane/metadata/android/in_ID/changelogs/29659.txt create mode 100644 fastlane/metadata/android/in_ID/full_description.txt create mode 100644 fastlane/metadata/android/in_ID/short_description.txt create mode 100644 fastlane/metadata/android/in_ID/summary.txt create mode 100644 fastlane/metadata/android/in_ID/title.txt diff --git a/fastlane/metadata/android/in_ID/changelogs/29659.txt b/fastlane/metadata/android/in_ID/changelogs/29659.txt new file mode 100644 index 0000000000..1999d52935 --- /dev/null +++ b/fastlane/metadata/android/in_ID/changelogs/29659.txt @@ -0,0 +1,10 @@ +Ini adalah rilis alpha v6.0 pertama, kampanye besar-besaran dan pembaruan konten. +Meskipun versi ini telah diuji dalam multipemain, mungkin masih ada banyak masalah. Seperti biasa, laporkan masalah di Github. + +Ada terlalu banyak perubahan untuk dicantumkan di sini, tetapi bagian pentingnya meliputi: + +- Sistem produksi unit baru, dengan peningkatan bertahap +- Unit langsung dan kontrol menara +- Unit diganti namanya dan diperbarui +- Blok dan unit baru +- Satuan angkatan laut dan unit berbentuk serangga lainnya \ No newline at end of file diff --git a/fastlane/metadata/android/in_ID/full_description.txt b/fastlane/metadata/android/in_ID/full_description.txt new file mode 100644 index 0000000000..b8e2e86092 --- /dev/null +++ b/fastlane/metadata/android/in_ID/full_description.txt @@ -0,0 +1,14 @@ +Buat rantai pasokan pengantar berjalan yang rumit untuk memasukkan amunisi ke menara Anda, menghasilkan bahan yang akan digunakan untuk membangun, dan mempertahankan bangunan Anda dari gelombang musuh. Bermain dengan teman-teman Anda dalam game co-op multipemain lintas platform, atau tantang mereka dalam pertandingan PvP berbasis tim. + +Fitur: +- 24 peta bawaan +- Kampanye, lengkap dengan pohon teknologi dan area yang dapat dibuka +- 4 bos gelombang yang kuat untuk dikalahkan +- Sistem transportasi energi, cairan dan barang +- 19 jenis drone, mech, dan kapal +- 120+ blok teknologi untuk dikuasai +- 75+ blok lingkungan yang berbeda +- Multipemain lintas platform melalui jaringan lokal atau server khusus +- Aturan permainan khusus: Ubah biaya blok, statistik musuh, item awal, waktu gelombang, dan lainnya +- Editor yang andal, dengan alat untuk menghasilkan sumber daya, medan, dekorasi, dan menerapkan simetri ke peta secara acak +- Tata letak gelombang peta yang dapat disesuaikan \ No newline at end of file diff --git a/fastlane/metadata/android/in_ID/short_description.txt b/fastlane/metadata/android/in_ID/short_description.txt new file mode 100644 index 0000000000..2d6a63c557 --- /dev/null +++ b/fastlane/metadata/android/in_ID/short_description.txt @@ -0,0 +1 @@ +Sebuah game pertahanan menara sandbox berbasis pabrik. \ No newline at end of file diff --git a/fastlane/metadata/android/in_ID/summary.txt b/fastlane/metadata/android/in_ID/summary.txt new file mode 100644 index 0000000000..2d6a63c557 --- /dev/null +++ b/fastlane/metadata/android/in_ID/summary.txt @@ -0,0 +1 @@ +Sebuah game pertahanan menara sandbox berbasis pabrik. \ No newline at end of file diff --git a/fastlane/metadata/android/in_ID/title.txt b/fastlane/metadata/android/in_ID/title.txt new file mode 100644 index 0000000000..2beb939017 --- /dev/null +++ b/fastlane/metadata/android/in_ID/title.txt @@ -0,0 +1 @@ +Mindustry \ No newline at end of file From ef65f4e8d438785b78df2fdf6e1c9f51238abc99 Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Wed, 16 Sep 2020 13:43:24 +0700 Subject: [PATCH 010/145] Delete .gitignore --- fastlane/metadata/android/in_ID/.gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 fastlane/metadata/android/in_ID/.gitignore diff --git a/fastlane/metadata/android/in_ID/.gitignore b/fastlane/metadata/android/in_ID/.gitignore deleted file mode 100644 index 8b13789179..0000000000 --- a/fastlane/metadata/android/in_ID/.gitignore +++ /dev/null @@ -1 +0,0 @@ - From c2348f9019dc12160c34d03156e14031b405cbe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Thu, 24 Sep 2020 13:10:06 +0800 Subject: [PATCH 011/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 90 ++++++++++----------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 069bc2ed8e..c63f000704 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -20,8 +20,8 @@ gameover = 游戏结束 gameover.pvp = [accent] {0}[]队获胜! highscore = [accent]新纪录! copied = 已复制。 -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]v6[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役不完善[]\n- 内容不完整\n - 大多[scarlet]单位AI[]运行不佳\n- 单位系统不完整\n- 目前内容一切皆流,一切皆变。\n\n向[accent]主群(QQ681962751)[]提交错误报告。 +indev.notready = 还没做好看NM load.sound = 音乐加载中 load.map = 地图加载中 @@ -99,15 +99,15 @@ committingchanges = 正在提交更改 done = 已完成 feature.unsupported = 您的设备不支持此功能。 -mods.alphainfo = 请注意,测试版本(alpha)中的模组[scarlet]很容易存在缺陷[]。\n在 Mindustry 的 GitHub 或 Discord 上报告你发现的问题。 -mods.alpha = [accent](Alpha) +mods.alphainfo = 请注意,测试版本中的模组[scarlet]很容易存在缺陷[]。\n在 Mindustry 的 GitHub 或 Discord 上报告你发现的问题。 +mods.alpha = [accent](测试) mods = 模组 mods.none = [lightgray]没有找到模组! mods.guide = 模组制作教程 mods.report = 报告 Bug mods.openfolder = 打开模组文件夹 mods.reload = 重载 -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = 游戏将退出以重载模组 mod.display = [gray]模组:[orange] {0} mod.enabled = [lightgray]已启用 mod.disabled = [scarlet]已禁用 @@ -115,7 +115,7 @@ mod.disable = 禁用 mod.content = 内容: mod.delete.error = 无法删除模组。可能文件被占用。 mod.requiresversion = [scarlet]所需的游戏版本:[accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]模组不兼容6.0(缺失 minGameVersion: 105) mod.missingdependencies = [scarlet]缺少前置模组:{0} mod.erroredcontent = [scarlet]内容错误 mod.errors = 读取内容时发生错误. @@ -127,7 +127,7 @@ mod.reloadrequired = [scarlet]需要重启 mod.import = 导入模组 mod.import.file = 导入文件 mod.import.github = 从 GitHub 导入模组 -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]JAR模组存在危险性。[]\n请确保此模组来源安全可靠! mod.item.remove = 这个物品是[accent] '{0}'[]模组的一部分. 删除物品需要先卸载此模组. mod.remove.confirm = 此模组将被删除。 mod.author = [lightgray]作者:[] {0} @@ -139,8 +139,8 @@ mod.scripts.disable = 你的设备不支持含有脚本的模组。必须禁用 about.button = 关于 name = 名字: noname = 先取一个[accent]玩家名[]。 -planetmap = Planet Map -launchcore = Launch Core +planetmap = 行星地图 +launchcore = 发射核心 filename = 文件名: unlocked = 解锁了新内容! completed = [accent]己研究 @@ -148,14 +148,14 @@ techtree = 科技树 research.list = [lightgray]研究: research = 研究 researched = [lightgray]{0}己研究。 -research.progress = {0}% complete +research.progress = {0}% 完成度 players = {0} 位玩家在线 players.single = {0} 位玩家在线 players.search = search players.notfound = [gray]没有找到玩家。 server.closing = [accent]服务器关闭… server.kicked.kick = 你被踢出了服务器。 -server.kicked.whitelist = 你并没有受邀请在此服务器上游玩。(不在白名单中) +server.kicked.whitelist = 你不在服务器白名单中。 server.kicked.serverClose = 服务器已关闭。 server.kicked.vote = 你被投票踢出了服务器。 server.kicked.clientOutdated = 客户端过旧,请更新你的游戏。 @@ -278,7 +278,7 @@ quit.confirm.tutorial = 确定要跳过教程?\n您可以通过[accent]设置- loading = [accent]加载中… reloading = [accent]重载模组中… saving = [accent]保存中… -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}][]来重生 cancelbuilding = [accent][[{0}][]来清除规划 selectschematic = [accent][[{0}][]来选择复制 pausebuilding = [accent][[{0}][]来暂停建造 @@ -335,9 +335,9 @@ waves.never = < 无限 > waves.every = 每 waves.waves = 波 waves.perspawn = 每次生成 -waves.shields = shields/wave +waves.shields = 护盾/波次 waves.to = 至 -waves.guardian = Guardian +waves.guardian = 首领 waves.preview = 预览 waves.edit = 编辑… waves.copy = 复制到剪贴板 @@ -346,9 +346,9 @@ waves.invalid = 剪贴板中的波次信息无效。 waves.copied = 波次信息已复制。 waves.none = 没有定义敌人。\n请注意,这将自动替换为默认的敌人列表。 -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = 数目 +wavemode.totals = 总和 +wavemode.health = 生命值 editor.default = [lightgray]<默认> details = 详情… @@ -415,8 +415,8 @@ toolmode.drawteams.description = 绘制团队而不是方块。 filters.empty = [lightgray]没有过滤条件!用下方的按钮添加。 filter.distort = 扭曲程度 filter.noise = 波动程度 -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = 敌人生成点选择 +filter.corespawn = 核心降落点选择 filter.median = 平均数 filter.oremedian = 矿石平均数 filter.blend = 混合程度 @@ -469,12 +469,12 @@ locked = 已锁定 complete = [lightgray]完成: requirement.wave = {1}中的第{0}波次 requirement.core = 在{0}中摧毁敌方核心 -requirement.research = Research {0} -requirement.capture = Capture {0} +requirement.research = 研究 {0} +requirement.capture = 占领 {0} resume = 暂停:\n[lightgray]{0} bestwave = [lightgray]最高波次:{0} launch = < 发射 > -launch.text = Launch +launch.text = 发射 launch.title = 发射成功 launch.next = [lightgray]下个发射窗口在第{0}波 launch.unable2 = [scarlet]无法发射[] @@ -482,11 +482,11 @@ launch.confirm = 您将装载并发射核心中的所有资源。\n此地图将 launch.skip.confirm = 如果现在跳过,在下一个发射窗口到来前,您都无法发射。 uncover = 解锁 configure = 设定装运的数量 -loadout = Loadout -resources = Resources +loadout = 装运 +resources = 资源 bannedblocks = 禁用建筑 addall = 添加所有 -launch.destination = Destination: {0} +launch.destination = 目的地: {0} configure.invalid = 数量必须是0到{0}之间的数字。 zone.unlocked = [lightgray]{0} 已解锁。 zone.requirement.complete = 完成{0}。\n已达成解锁{1}的要求。 @@ -508,19 +508,19 @@ error.io = 网络 I/O 错误。 error.any = 未知网络错误。 error.bloom = 未能初始化特效。\n您的设备可能不支持。 -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = 降雨 +weather.snow.name = 降雪 +weather.sandstorm.name = 沙尘暴 +weather.sporestorm.name = 孢子雾 -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.unexplored = [lightgray]未探索 +sectors.resources = 资源: +sectors.production = 产出: +sectors.stored = 贮存: +sectors.resume = 继续 +sectors.launch = 发射 +sectors.select = 选择 +sectors.nonelaunch = [lightgray]无 (太阳) sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -558,12 +558,12 @@ settings.graphics = 图像 settings.cleardata = 清除游戏数据… settings.clear.confirm = 您确定要清除此数据?\n此操作无法撤销! settings.clearall.confirm = [scarlet]警告![]\n这将清除所有数据,包括存档、地图、解锁和按键绑定。\n按「是」后,游戏将删除所有数据并自动退出。 -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = 您确定要清除存档? +settings.clearsaves = 清除存档 paused = [accent]< 暂停 > clear = 清除 banned = [scarlet]已禁止 -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]需要占领区块 yes = 是 no = 否 info.title = [accent]详情 @@ -585,10 +585,10 @@ blocks.itemsmoved = 移动速度 blocks.launchtime = 发射间隔时间 blocks.shootrange = 范围 blocks.size = 尺寸 -blocks.displaysize = Display Size +blocks.displaysize = 显示尺寸 blocks.liquidcapacity = 液体容量 blocks.powerrange = 能量范围 -blocks.linkrange = Link Range +blocks.linkrange = 连接范围 blocks.instructions = Instructions blocks.powerconnections = 最多连接 blocks.poweruse = 使用能量 @@ -611,11 +611,11 @@ blocks.inaccuracy = 误差 blocks.shots = 发射数 blocks.reload = 每秒发射数 blocks.ammo = 弹药 -blocks.shieldhealth = Shield Health -blocks.cooldowntime = Cooldown Time +blocks.shieldhealth = 盾容 +blocks.cooldowntime = 冷却时间 bar.drilltierreq = 需要更好的钻头 -bar.noresources = Missing Resources +bar.noresources = 缺失资源 bar.corereq = Core Base Required bar.drillspeed = 挖掘速度:{0}/秒 bar.pumpspeed = 泵压速度:{0}/秒 From c08875498fd8d3c419f8c309caa1147c8b736d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Thu, 24 Sep 2020 07:38:26 +0200 Subject: [PATCH 012/145] Czech update upto commit 35460f0 --- core/assets/bundles/bundle_cs.properties | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index a946de85ed..ece19396e9 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -55,6 +55,7 @@ schematic.saved = Šablona byla uložena. schematic.delete.confirm = Šablona bude kompletně vyhlazena. schematic.rename = Přejmenovat šablonu schematic.info = {0}x{1}, {2} bloků +schematic.disabled = [scarlet]Šablony jsou zakázány[]\nNa této [accent]mapě[] nebo [accent]serveru[] nemůžeš používat šablony. stat.wave = Vln poraženo: [accent]{0} stat.enemiesDestroyed = Nepřátel zničeno: [accent]{0}[] @@ -486,7 +487,7 @@ loadout = Načtení resources = Zdroje bannedblocks = Zakázané bloky addall = Přidat vše -launch.destination = Destination: {0} +launch.destination = Cíl: {0} configure.invalid = Hodnota musí být číslo mezi 0 a {0}. zone.unlocked = [lightgray]Mapa {0} byla odemknuta.[] zone.requirement.complete = Bylo dosaženo vlny {0},\nčímž byla splněna podmínka pro mapu {1}. @@ -519,8 +520,8 @@ sectors.production = Výroba: sectors.stored = Uskladněno: sectors.resume = Pokračovat sectors.launch = Vyslat -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.select = Vybrat +sectors.nonelaunch = [lightgray]žádné (slunce)[] sector.groundZero.name = Základní tábor sector.craters.name = Krátery @@ -594,6 +595,7 @@ blocks.powerconnections = Nejvyšší počet spojení blocks.poweruse = Spotřeba energie blocks.powerdamage = Energie na jednotku poškození blocks.itemcapacity = Kapacita předmětů +blocks.memorycapacity = Kapacita paměti blocks.basepowergeneration = Základní generování energie blocks.productiontime = Čas produkce blocks.repairtime = Čas do úplné opravy @@ -822,6 +824,7 @@ mode.custom = Vlastní pravidla rules.infiniteresources = Neomezeně surovin rules.reactorexplosions = Výbuch reaktoru +rules.schematic = Šablony povoleny rules.wavetimer = Časovač vln rules.waves = Vlny rules.attack = Režim útoku @@ -915,8 +918,8 @@ unit.eclipse.name = Zatmění unit.mono.name = Mono unit.poly.name = Poly unit.mega.name = Mega -unit.quad.name = Quad -unit.oct.name = Oct +unit.quad.name = Tetra +unit.oct.name = Hexo unit.risso.name = Risso unit.minke.name = Minke unit.bryde.name = Bryde @@ -928,7 +931,7 @@ unit.gamma.name = Gama unit.scepter.name = Žezlo unit.reign.name = Panovník unit.vela.name = Vela -unit.corvus.name = Corvus +unit.corvus.name = Havran block.resupply-point.name = Zásobovací místo block.parallax.name = Paralaxa @@ -1139,6 +1142,7 @@ block.hyper-processor.name = Hyperprocesor block.logic-display.name = Zobrazovač logiky block.large-logic-display.name = Velký zobrazovač logiky block.memory-cell.name = Paměťová buňka +block.memory-bank.name = Paměťová banka team.blue.name = modrý team.crux.name = červený From 0b4caec004998079e9d961b25656677326c28973 Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Thu, 24 Sep 2020 11:43:16 +0300 Subject: [PATCH 013/145] [Bundle][RO] Translation Update This PR was tested in-game and is ready to merge at any time (unless marked as draft). Changelog: - Changes up until commit 35460f0b5f2ae97bc3ef16183eb3ec22fc9a5b1e - Typo fixes & various other improvements --- core/assets/bundles/bundle_ro.properties | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 0a3e005854..05c8a8b890 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -55,6 +55,7 @@ schematic.saved = Schemă salvată. schematic.delete.confirm = Schema această va fi ștearsă permanent. schematic.rename = Redenumește Schema schematic.info = {0}x{1}, {2} blocuri +schematic.disabled = [scarlet]Schemele sunt dezactivate[]\nNu ai voie să folosești scheme pe această [accent]hartă[] sau [accent]server. stat.wave = Valuri Învinse:[accent] {0} stat.enemiesDestroyed = Inamici Distruși:[accent] {0} @@ -486,7 +487,7 @@ loadout = Încărcare resources = Resurse bannedblocks = Blocuri Interzise addall = Adaugă-le pe toate -launch.destination = Destination: {0} +launch.destination = Destinație: {0} configure.invalid = Cantitatea trebuie să fie un număr între 0 și {0}. zone.unlocked = [lightgray]{0} deblocat(ă). zone.requirement.complete = Cerințele pt {0} finalizate:[lightgray]\n{1} @@ -519,8 +520,8 @@ sectors.production = Producție: sectors.stored = Stocat: sectors.resume = Revino sectors.launch = Lansare -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.select = Selectează +sectors.nonelaunch = [lightgray]nimic (soarele) sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -594,6 +595,7 @@ blocks.powerconnections = Maxim Conexiuni blocks.poweruse = Consum Electricitate blocks.powerdamage = Electricitate/Forța Glonțului blocks.itemcapacity = Capacitate Materiale +blocks.memorycapacity = Capacitate Memorie blocks.basepowergeneration = Generare Electricitate (Bază) blocks.productiontime = Timp Producție blocks.repairtime = Durata Reparării Blocului @@ -821,7 +823,8 @@ mode.attack.description = Distruge baza inamicului. \n[gray]E nevoie de un nucle mode.custom = Reguli Personalizate rules.infiniteresources = Resurse Infinite -rules.reactorexplosions = Explozia Reactoarelor +rules.reactorexplosions = Reactoarele Explodează +rules.schematic = Se Pot Folosi Scheme rules.wavetimer = Valuri pe Timp rules.waves = Valuri rules.attack = Modul Atac @@ -1139,12 +1142,13 @@ block.hyper-processor.name = Hyperprocesor block.logic-display.name = Monitor Logic block.large-logic-display.name = Monitor Logic Mare block.memory-cell.name = Celulă de Memorie +block.memory-bank.name = Bancă de Memorie team.blue.name = albastră team.crux.name = roșie team.sharded.name = portocalie team.orange.name = portocalie -team.derelict.name = abandon +team.derelict.name = abandonat team.green.name = verde team.purple.name = mov From db558672cbc03c075417b1ed8822e4dcc9662305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Thu, 24 Sep 2020 23:54:52 +0800 Subject: [PATCH 014/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 154 ++++++++++---------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index c63f000704..055ff3939f 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -589,7 +589,7 @@ blocks.displaysize = 显示尺寸 blocks.liquidcapacity = 液体容量 blocks.powerrange = 能量范围 blocks.linkrange = 连接范围 -blocks.instructions = Instructions +blocks.instructions = 指令 blocks.powerconnections = 最多连接 blocks.poweruse = 使用能量 blocks.powerdamage = 功率/损伤 @@ -605,7 +605,7 @@ blocks.boosteffect = 增强效果 blocks.maxunits = 最大单位数量 blocks.health = 生命值 blocks.buildtime = 建造时间 -blocks.maxconsecutive = Max Consecutive +blocks.maxconsecutive = 最大连续 blocks.buildcost = 建造花费 blocks.inaccuracy = 误差 blocks.shots = 发射数 @@ -616,7 +616,7 @@ blocks.cooldowntime = 冷却时间 bar.drilltierreq = 需要更好的钻头 bar.noresources = 缺失资源 -bar.corereq = Core Base Required +bar.corereq = 缺失核心基座 bar.drillspeed = 挖掘速度:{0}/秒 bar.pumpspeed = 泵压速度:{0}/秒 bar.efficiency = 效率:{0}% @@ -627,7 +627,7 @@ bar.poweroutput = 能量输出:{0} bar.items = 物品:{0} bar.capacity = 容量:{0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[单位上限] bar.liquid = 液体 bar.heat = 热量 bar.power = 电力 @@ -655,16 +655,16 @@ unit.liquidunits = 液体 unit.powerunits = 能量 unit.degrees = 度 unit.seconds = 秒 -unit.minutes = mins +unit.minutes = 分 unit.persecond = /秒 -unit.perminute = /min +unit.perminute = /分 unit.timesspeed = 倍 速度 unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = 盾容 unit.items = 物品 -unit.thousands = k +unit.thousands = kil unit.millions = mil -unit.billions = b +unit.billions = bil category.general = 普通 category.power = 能量 category.liquids = 液体 @@ -720,7 +720,7 @@ setting.minimap.name = 显示小地图 setting.coreitems.name = 显示核心 (开发中) setting.position.name = 显示玩家坐标 setting.musicvol.name = 音乐音量 -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = 显示行星大气层 setting.ambientvol.name = 环境音量 setting.mutemusic.name = 无音乐 setting.sfxvol.name = 音效音量 @@ -743,14 +743,14 @@ keybinds.mobile = [scarlet]这里的大多数按键绑定在移动设备上都 category.general.name = 常规 category.view.name = 视图 category.multiplayer.name = 多人 -category.blocks.name = Block Select +category.blocks.name = 选择方块 command.attack = 攻击 command.rally = 集合 command.retreat = 撤退 -command.idle = Idle +command.idle = 闲置 placement.blockselectkeys = \n[lightgray]按键:[{0}, keybind.respawn.name = 重生 -keybind.control.name = Control Unit +keybind.control.name = 控制单位 keybind.clear_building.name = 清除建筑 keybind.press = 请按一个键… keybind.press.axis = 请按一个轴或键… @@ -760,8 +760,8 @@ keybind.toggle_block_status.name = 显隐方块状态 keybind.move_x.name = 水平移动 keybind.move_y.name = 竖直移动 keybind.mouse_move.name = 跟随鼠标 -keybind.pan.name = Pan View -keybind.boost.name = 推送 +keybind.pan.name = 平移视图 +keybind.boost.name = 推进 keybind.schematic_select.name = 选择区域 keybind.schematic_menu.name = 蓝图目录 keybind.schematic_flip_x.name = 水平翻转 @@ -788,9 +788,9 @@ keybind.diagonal_placement.name = 斜线建造 keybind.pick.name = 选择建筑 keybind.break_block.name = 破坏建筑 keybind.deselect.name = 取消选择 -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = 拾取货物 +keybind.dropCargo.name = 释放货物 +keybind.command.name = 指挥 keybind.shoot.name = 射击 keybind.zoom.name = 缩放 keybind.menu.name = 菜单 @@ -825,10 +825,10 @@ rules.reactorexplosions = 反应堆爆炸 rules.wavetimer = 波次计时器 rules.waves = 波次 rules.attack = 攻击模式 -rules.buildai = AI Building +rules.buildai = AI建造 rules.enemyCheat = 敌人(红队)无限资源 rules.blockhealthmultiplier = 建筑生命倍数 -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = 建筑伤害倍数 rules.unitbuildspeedmultiplier = 单位生产速度倍数 rules.unithealthmultiplier = 单位生命倍数 rules.unitdamagemultiplier = 单位伤害倍数 @@ -839,20 +839,20 @@ rules.buildspeedmultiplier = 建设时间倍数 rules.deconstructrefundmultiplier = 拆除返还倍数 rules.waitForWaveToEnd = 等待敌人时间 rules.dropzoneradius = 敌人出生点禁区大小:[lightgray](格) -rules.unitammo = Units Require Ammo +rules.unitammo = 单位消耗子弹 rules.title.waves = 波次 rules.title.resourcesbuilding = 资源和建造 rules.title.enemy = 敌人 rules.title.unit = 单位 rules.title.experimental = 实验性 -rules.title.environment = Environment +rules.title.environment = 环境性 rules.lighting = 光照 rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.explosions = 建筑/单位爆炸伤害 rules.ambientlight = 环境光 -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = 气候 +rules.weather.frequency = 频率: +rules.weather.duration = 时长: content.item.name = 物品 content.liquid.name = 液体 @@ -897,61 +897,61 @@ liquid.viscosity = [lightgray]粘度:{0} liquid.temperature = [lightgray]温度:{0} unit.dagger.name = 尖刀 -unit.mace.name = Mace +unit.mace.name = 牙狼 unit.fortress.name = 堡垒 -unit.nova.name = Nova -unit.pulsar.name = Pulsar -unit.quasar.name = Quasar -unit.crawler.name = 爬行者 -unit.atrax.name = Atrax -unit.spiroct.name = Spiroct -unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Flare -unit.horizon.name = Horizon -unit.zenith.name = Zenith -unit.antumbra.name = Antumbra -unit.eclipse.name = Eclipse -unit.mono.name = Mono -unit.poly.name = Poly -unit.mega.name = Mega -unit.quad.name = Quad -unit.oct.name = Oct -unit.risso.name = Risso -unit.minke.name = Minke -unit.bryde.name = Bryde -unit.sei.name = Sei -unit.omura.name = Omura -unit.alpha.name = Alpha -unit.beta.name = Beta -unit.gamma.name = Gamma -unit.scepter.name = Scepter -unit.reign.name = Reign +unit.nova.name = 新星 +unit.pulsar.name = 脉冲星 +unit.quasar.name = 超星 +unit.crawler.name = 爬虫 +unit.atrax.name = 火萤 +unit.spiroct.name = 毒蝎 +unit.arkyid.name = 血蛭 +unit.toxopid.name = 狼蛛 +unit.flare.name = 星耀 +unit.horizon.name = 天垠 +unit.zenith.name = 苍穹 +unit.antumbra.name = 半影 +unit.eclipse.name = 日蚀 +unit.mono.name = 血奴 +unit.poly.name = 圣魂 +unit.mega.name = 巨像 +unit.quad.name = 影魔 +unit.oct.name = 梦魇 +unit.risso.name = 梭鱼 +unit.minke.name = 刺鲸 +unit.bryde.name = 虎鲨 +unit.sei.name = 湖妖 +unit.omura.name = 海神 +unit.alpha.name = 氦核 +unit.beta.name = 衰辐 +unit.gamma.name = 日耀 +unit.scepter.name = 权杖 +unit.reign.name = 君王 unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point -block.parallax.name = Parallax +block.resupply-point.name = 补给点 +block.parallax.name = 阻滞光束 block.cliff.name = 悬崖 block.sand-boulder.name = 沙砂巨石 block.grass.name = 草地 block.slag.name = 矿渣 block.salt.name = 盐碱地 -block.salt-wall.name = Salt Wall +block.salt-wall.name = 盐墙 block.pebbles.name = 鹅卵石 block.tendrils.name = 卷须 -block.sand-wall.name = Sand Wall +block.sand-wall.name = 沙墙 block.spore-pine.name = 孢子树 -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = 孢子墙 +block.boulder.name = 巨石 +block.snow-boulder.name = 雪石 block.snow-pine.name = 雪树 block.shale.name = 页岩地 block.shale-boulder.name = 页岩巨石 block.moss.name = 苔藓地 block.shrubs.name = 灌木丛 block.spore-moss.name = 孢子苔藓地 -block.shale-wall.name = Shale Wall +block.shale-wall.name = 页岩墙 block.scrap-wall.name = 废墙 block.scrap-wall-large.name = 大型废墙 block.scrap-wall-huge.name = 巨型废墙 @@ -979,17 +979,17 @@ block.craters.name = 陨石坑 block.sand-water.name = 沙 水 block.darksand-water.name = 暗沙 水 block.char.name = 焦土 -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = 英安岩 +block.dacite-wall.name = 英安岩墙 block.ice-snow.name = 冰雪地 -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = 石墙 +block.ice-wall.name = 冰墙 +block.snow-wall.name = 雪墙 +block.dune-wall.name = 沙丘岩 block.pine.name = 松树 -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = 泥土 +block.dirt-wall.name = 泥土墙 +block.mud.name = 泥巴 block.white-tree-dead.name = 枯萎的白树 block.white-tree.name = 白树 block.spore-cluster.name = 孢子簇 @@ -1005,7 +1005,7 @@ block.dark-panel-4.name = 暗面板4 block.dark-panel-5.name = 暗面板5 block.dark-panel-6.name = 暗面板6 block.dark-metal.name = 暗金属 -block.basalt.name = Basalt +block.basalt.name = 玄武岩 block.hotrock.name = 热石头 block.magmarock.name = 岩浆石头 block.copper-wall.name = 铜墙 @@ -1118,10 +1118,10 @@ block.container.name = 容器 block.launch-pad.name = 发射台 block.launch-pad-large.name = 大型发射台 block.segment.name = 分割机 -block.command-center.name = Command Center -block.ground-factory.name = 地面工厂 -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory +block.command-center.name = 指挥中心 +block.ground-factory.name = 陆战单位工厂 +block.air-factory.name = 空战单位工厂 +block.naval-factory.name = 海战单位工厂 block.additive-reconstructor.name = Additive Reconstructor block.multiplicative-reconstructor.name = Multiplicative Reconstructor block.exponential-reconstructor.name = Exponential Reconstructor From f95f6d8c7b166ad6e5e168308e270f854e2ce282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Fri, 25 Sep 2020 00:07:24 +0800 Subject: [PATCH 015/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 36 ++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 055ff3939f..2eaab7cf9c 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -1117,28 +1117,28 @@ block.meltdown.name = 熔毁 block.container.name = 容器 block.launch-pad.name = 发射台 block.launch-pad-large.name = 大型发射台 -block.segment.name = 分割机 +block.segment.name = 裂解光束 block.command-center.name = 指挥中心 block.ground-factory.name = 陆战单位工厂 block.air-factory.name = 空战单位工厂 block.naval-factory.name = 海战单位工厂 -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.additive-reconstructor.name = 数增级单位重构工厂 +block.multiplicative-reconstructor.name = 倍增级单位重构工厂 +block.exponential-reconstructor.name = 幂乘级单位重构工厂 +block.tetrative-reconstructor.name = 无量级单位重构工厂 +block.payload-conveyor.name = 载荷传送带 +block.payload-router.name = 载荷路由器 +block.disassembler.name = 分离机 +block.silicon-crucible.name = 热能坩埚 +block.overdrive-dome.name = 超速场投射器 -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = 开关 +block.micro-processor.name = 微型处理器 +block.logic-processor.name = 逻辑处理器 +block.hyper-processor.name = 超频处理器 +block.logic-display.name = 逻辑显示屏 +block.large-logic-display.name = 大型逻辑显示屏 +block.memory-cell.name = 存储单元 team.blue.name = 蓝 team.crux.name = 红 @@ -1302,4 +1302,4 @@ block.cyclone.description = 大型炮塔,对空对地,发射在敌人周围 block.spectre.description = 超大型炮塔,对空对地,一次射出两颗强大的穿甲弹药。 block.meltdown.description = 超大型激光炮塔,充能之后持续发射光束,需要冷却剂。 block.repair-point.description = 持续治疗其附近伤势最重的单位。 -block.segment.description = 对行进中的导弹进行破坏和摧毁, 除激光以外. +block.segment.description = 摧毁袭来的除激光以外的子弹或导弹. From f5c8d0bf521c325ae31c63e5c8d9e3cc9677ee57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Fri, 25 Sep 2020 00:12:45 +0800 Subject: [PATCH 016/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 2eaab7cf9c..5c21074c54 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -1,4 +1,4 @@ -credits.text = 作者[royal]Anuken[] - [sky]anukendev@gmail.com[] +credits.text = 作者[royal]Anuken[] - [sky]anukendev@gmail.com[] 译者[orange]老滑稽[] - [cyan]QQ:1290419934[] credits = 致谢 contributors = 翻译者和贡献者 discord = 加入 Mindustry 的 Discord! From 1607a96a6afaad95d606a38daea7160a33fc4e13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Fri, 25 Sep 2020 00:17:43 +0800 Subject: [PATCH 017/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 44 ++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 5c21074c54..3f3528102b 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -522,29 +522,29 @@ sectors.launch = 发射 sectors.select = 选择 sectors.nonelaunch = [lightgray]无 (太阳) -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +zone.groundZero.name = 零号地区 +zone.craters.name = 陨石带 +zone.frozenForest.name = 冰冻森林 +zone.ruinousShores.name = 遗迹海岸 +zone.stainedMountains.name = 绵延群山 +zone.desolateRift.name = 荒芜裂谷 +zone.nuclearComplex.name = 核裂阵 +zone.overgrowth.name = 增生区 +zone.tarFields.name = 油田 +zone.saltFlats.name = 盐碱荒滩 +zone.crags.name = 悬崖 -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +zone.groundZero.description = 踏上旅程的最佳位置。这儿的敌人威胁很小,但资源也少。\n收集尽可能多的铅和铜。\n出发吧! +zone.frozenForest.description = 即使是靠近山脉的这里,孢子也已经扩散。他们不能长期停留在寒冷的温度中。\n\n开始运用电力。建造火力发电机并学会使用修理者。 +zone.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。摧毁他们的核心。不要留下任何东西。 +zone.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水来加速炮塔和钻头。 +zone.ruinousShores.description = 穿过荒地,就是海岸线。这个地方曾经建造了一个海岸防御线。但现在所剩无几,只有最基本的防御结构仍然毫发无损,其他一切都被摧毁了。\n继续向外扩展。继续研究科技。 +zone.stainedMountains.description = 在更远的内陆地区是山脉,但这里没有被孢子污染。\n这一地区分布着丰富的钛,学习如何使用它。\n\n这里的敌人势力更大,不要给他们时间派出最强的部队。 +zone.overgrowth.description = 这个地区靠近孢子的来源,因此生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。 +zone.tarFields.description = 产油区边缘,位于山脉和沙漠之间。它少数几个有石油储量的地区之一。\n尽管被废弃,这附近仍有一些危险的敌方单位。不要低估他们。\n\n[lightgray]如果可能,研究石油加工技术。 +zone.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 +zone.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。 +zone.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 settings.language = 语言 settings.data = 游戏数据 From 8132cd9ba70da17c477b6874b759edb1967ba0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Fri, 25 Sep 2020 12:29:37 +0800 Subject: [PATCH 018/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 3f3528102b..9b5336dfbe 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -20,7 +20,7 @@ gameover = 游戏结束 gameover.pvp = [accent] {0}[]队获胜! highscore = [accent]新纪录! copied = 已复制。 -indev.popup = [accent]v6[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役不完善[]\n- 内容不完整\n - 大多[scarlet]单位AI[]运行不佳\n- 单位系统不完整\n- 目前内容一切皆流,一切皆变。\n\n向[accent]主群(QQ681962751)[]提交错误报告。 +indev.popup = [accent]v6[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役不完善[]\n- 内容不完整\n - 大多[scarlet]单位AI[]运行不佳\n- 单位系统不完整\n- 一切内容都可能发生变动或调整。\n\n向[accent]主群(QQ681962751)[]提交错误报告。 indev.notready = 还没做好看NM load.sound = 音乐加载中 @@ -639,7 +639,7 @@ bullet.damage = [stat]{0}[lightgray] 伤害 bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格 bullet.incendiary = [stat] 燃烧 bullet.homing = [stat] 追踪 -bullet.shock = [stat] 击晕 +bullet.shock = [stat] 电击 bullet.frag = [stat] 分裂 bullet.knockback = [stat]{0}[lightgray] 击退 bullet.freezing = [stat] 冰冻 @@ -922,13 +922,13 @@ unit.minke.name = 刺鲸 unit.bryde.name = 虎鲨 unit.sei.name = 湖妖 unit.omura.name = 海神 -unit.alpha.name = 氦核 -unit.beta.name = 衰辐 -unit.gamma.name = 日耀 +unit.alpha.name = 阿尔法 +unit.beta.name = 贝塔 +unit.gamma.name = 伽玛 unit.scepter.name = 权杖 unit.reign.name = 君王 -unit.vela.name = Vela -unit.corvus.name = Corvus +unit.vela.name = 树妖 +unit.corvus.name = 武神 block.resupply-point.name = 补给点 block.parallax.name = 阻滞光束 From 08e6b4f2d71dda59c986a42dbed8802a312306cd Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Fri, 25 Sep 2020 10:48:52 +0300 Subject: [PATCH 019/145] Multiplayer note and the latest cleanup --- core/assets/bundles/bundle_ro.properties | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 05c8a8b890..9c640b307b 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -472,15 +472,9 @@ requirement.wave = Ajungi la valul {0} în {1} requirement.core = Distruge Nucleu Inamic în{0} requirement.research = Cercetează {0} requirement.capture = Capturează {0} -resume = Revin la Zonă:\n[lightgray]{0} bestwave = [lightgray]Cel Mai Bun Val: {0} -launch = < LANSARE > launch.text = Lansează -launch.title = Lansare Finalizată -launch.next = [lightgray]următoarea ocazie la valul {0} -launch.unable2 = [scarlet]Imposibil de LANSAT.[] -launch.confirm = Asta va lansa toate resursele din nucleu.\nNu te vei mai putea întoarce la această bază. -launch.skip.confirm = Dacă sari acum, Nu vei mai putea lansa decât valurile viitoare. +campaign.multiplayer = Când joci muliplayer în campanie, nu poți cerceta noi tehnologii decât folosind materiale din sectoarele [accent]tale[], [scarlet]nu[] din sectorul gazdei jocului, unde te afli acum.\n\nPt a transfera materialele către sectoarele [accent]tale[] în multiplayer, folosește o [accent]platformă de lansare[]. uncover = Descoperă configure = Configurează Încărcarea loadout = Încărcare From 13ff69cbca97058c4ff79481c435d3f1f34703df Mon Sep 17 00:00:00 2001 From: Prosta4okua <31485341+Prosta4okua@users.noreply.github.com> Date: Fri, 25 Sep 2020 14:10:55 +0300 Subject: [PATCH 020/145] Update bundle_uk_UA.properties --- core/assets/bundles/bundle_uk_UA.properties | 56 ++++++++++----------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 631e56dac5..5a218b2ff0 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -1,4 +1,4 @@ -credits.text = Створив [royal]Anuken[] — [sky]anukendev@gmail.com[]\n\nЄ ігрові питання або помилки в перекладі?\nЗавітайте до офіційного Discord-сервера Mindustry\nв канал #український.\nПереклав українською: [blue]Prosta4ok_ua[green]#[yellow]6336 +credits.text = Створив [royal]Anuken[] — [sky]anukendev@gmail.com[]\n\nМаєте питання по грі або знайшли помилки в перекладі?\nДолучайтеся до офіційного сервера Mindustry у Discord\nв канал #українська.\nУкраїнський перекладач — Prosta4ok_ua#6336. credits = Творці contributors = Перекладачі та помічники discord = Офіційний сервер Mindustry в Discord @@ -21,7 +21,7 @@ gameover.pvp = [accent]{0}[] команда перемогла! highscore = [accent]Новий рекорд! copied = Скопійовано. indev.popup = Наразі [accent]6.0[] знаходиться у стадії [accent]альфа[].\n[lightgray]Це означає наступне:[]\n- Не вистачає наповнення гри;\n- Більшість [scarlet]ШІ бойових одиниць[] не працює належним чином;\n- Багато одиниць [scarlet]відсутні[] або незавершені;\n- Кампанія повністю не є завершеною;\n- Усе, що ви бачите, може змінитися або видалитися.\n\nПовідомляйте про вади або збої на [accent]Github[], а про помилки в перекладі в Discord. -indev.notready = Ця частина гри ще не готова +indev.notready = Ця частина гри ще не готова. load.sound = Звуки load.map = Мапи @@ -54,7 +54,8 @@ schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Обернути схему schematic.saved = Схема збережена. schematic.delete.confirm = Ви справді хочете видалити цю схему? schematic.rename = Перейменувати схему -schematic.info = {0}x{1}, {2} блоків +schematic.info = {0}x{1}, блоків: {2} +schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не дозволяється використовувати схеми на цій [accent]мапі[] чи [accent]сервері. stat.wave = Хвиль відбито:[accent] {0} stat.enemiesDestroyed = Противників знищено:[accent] {0} @@ -471,22 +472,16 @@ requirement.wave = Досягніть хвилі {0} у зоні «{1}» requirement.core = Знищте вороже ядро в зоні «{0}» requirement.research = Research {0} requirement.capture = Capture {0} -resume = Відновити зону:\n[lightgray]{0} bestwave = [lightgray]Найкраща хвиля: {0} -launch = < ЗАПУСК > launch.text = Запуск -launch.title = Запуск вдалий -launch.next = [lightgray]наступна можливість буде на {0}-тій хвилі -launch.unable2 = [scarlet]ЗАПУСК неможливий.[] -launch.confirm = Це видалить усі ресурси у вашому ядрі.\nВи не зможете повернутися до цієї бази. -launch.skip.confirm = Якщо ви пропустите зараз, ви не зможете не запускати до більш пізніх хвиль. +campaign.multiplayer = Коли ви граєте з кимось в кампанії, то ви можете дослідити лише використовуючи предмети з [accent]ваших[] секторів, [scarlet]гн[] з сектора власника, на якому ви перебуваєте прямо зараз.\n\nЗадля отримання предметів у [accent]своїх[] секторах в багатокористувацькій грі використайте [accent]Стартовий майданчик[]. uncover = Розкрити configure = Налаштувати вивантаження loadout = Вивантаження resources = Ресурси bannedblocks = Заборонені блоки addall = Додати все -launch.destination = Destination: {0} +launch.destination = Пункт призначення: {0} configure.invalid = Кількість має бути числом між 0 та {0}. zone.unlocked = Зона «[lightgray]{0}» тепер розблокована. zone.requirement.complete = Вимоги до зони «{0}» виконані:[lightgray]\n{1} @@ -519,8 +514,8 @@ sectors.production = Виробництво: sectors.stored = Зберігає: sectors.resume = Продовжити sectors.launch = Запуск -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.select = Вибрати +sectors.nonelaunch = [lightgray]нічого (сонце) sector.groundZero.name = Відправний пункт sector.craters.name = Кратери @@ -594,6 +589,7 @@ blocks.powerconnections = Максимальна кількість з’єдн blocks.poweruse = Енергії використовує blocks.powerdamage = Енергії за од. шкоди blocks.itemcapacity = Місткість предметів +blocks.memorycapacity = Ємність пам’яті blocks.basepowergeneration = Базова генерація енергії blocks.productiontime = Час виробництва blocks.repairtime = Час повного відновлення блоку @@ -611,8 +607,8 @@ blocks.inaccuracy = Розкид blocks.shots = Постріли blocks.reload = Постріли/секунду blocks.ammo = Боєприпаси -blocks.shieldhealth = Shield Health -blocks.cooldowntime = Cooldown Time +blocks.shieldhealth = Міцність щита +blocks.cooldowntime = Тривалість охолодження bar.drilltierreq = Потребується кращий бур bar.noresources = Бракує ресурсів @@ -660,7 +656,7 @@ unit.persecond = за секунду unit.perminute = за хвилину unit.timesspeed = x швидкість unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = міцність щита unit.items = предм. unit.thousands = тис unit.millions = млн @@ -788,14 +784,14 @@ keybind.diagonal_placement.name = Діагональне розміщення keybind.pick.name = Вибрати блок keybind.break_block.name = Зламати блок keybind.deselect.name = Скасувати -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = Взяти вантаж +keybind.dropCargo.name = Скинути вантаж +keybind.command.name = Взяти командування над keybind.shoot.name = Постріл keybind.zoom.name = Наблизити keybind.menu.name = Меню keybind.pause.name = Пауза -keybind.pause_building.name = Призупинити/Продовжити будування +keybind.pause_building.name = Призупинити/продовжити будування keybind.minimap.name = Мінімапа keybind.chat.name = Чат keybind.player_list.name = Список гравців @@ -822,6 +818,7 @@ mode.custom = Користувацькі правила rules.infiniteresources = Нескінченні ресурси rules.reactorexplosions = Вибухи реактора +rules.schematic = Використання схем дозволено rules.wavetimer = Таймер для хвиль rules.waves = Хвилі rules.attack = Режим атаки @@ -912,11 +909,11 @@ unit.horizon.name = Горизонт unit.zenith.name = Зеніт unit.antumbra.name = Тіньовик unit.eclipse.name = Затьмарник -unit.mono.name = Єдинак -unit.poly.name = Багацько +unit.mono.name = Моно +unit.poly.name = Полі unit.mega.name = Мега -unit.quad.name = Quad -unit.oct.name = Oct +unit.quad.name = Квал +unit.oct.name = Окт unit.risso.name = Грампус unit.minke.name = Смугач малий unit.bryde.name = Смугач Брайда @@ -927,8 +924,8 @@ unit.beta.name = Бета unit.gamma.name = Гамма unit.scepter.name = Верховна влада unit.reign.name = Верховний Порядок -unit.vela.name = Vela -unit.corvus.name = Corvus +unit.vela.name = Пульсар Вітрил +unit.corvus.name = Ворон block.resupply-point.name = Пункт постачання block.parallax.name = Паралакс @@ -989,7 +986,7 @@ block.dune-wall.name = Дюнова стіна block.pine.name = Сосна block.dirt.name = Ґрунт block.dirt-wall.name = Ґрунтова стіна -block.mud.name = Mud +block.mud.name = Багно block.white-tree-dead.name = Мертве біле дерево block.white-tree.name = Біле дерево block.spore-cluster.name = Скупчення спор @@ -1130,7 +1127,7 @@ block.payload-conveyor.name = Вантажний конвеєр block.payload-router.name = Розвантажувальний маршрутизатор block.disassembler.name = Розбирач block.silicon-crucible.name = Кремнієвий тигель -block.overdrive-dome.name = Overdrive Dome +block.overdrive-dome.name = Величний Прискорювач block.switch.name = Перемикач block.micro-processor.name = Мікропроцесор @@ -1139,12 +1136,13 @@ block.hyper-processor.name = Гіперпроцесор block.logic-display.name = Логічний дисплей block.large-logic-display.name = Великий логічний дисплей block.memory-cell.name = Комірка пам’яті +block.memory-bank.name = Блок пам’яті team.blue.name = Синя team.crux.name = Червона team.sharded.name = Помаранчева team.orange.name = Помаранчева -team.derelict.name = Залишена +team.derelict.name = Знедолена team.green.name = Зелена team.purple.name = Фіолетова From 52a610a95740b11aa2d82040152a5afbb474ab2f Mon Sep 17 00:00:00 2001 From: Prosta4okua <31485341+Prosta4okua@users.noreply.github.com> Date: Fri, 25 Sep 2020 14:13:06 +0300 Subject: [PATCH 021/145] Update bundle_uk_UA.properties --- core/assets/bundles/bundle_uk_UA.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 5a218b2ff0..9fbbef2ab3 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -786,7 +786,7 @@ keybind.break_block.name = Зламати блок keybind.deselect.name = Скасувати keybind.pickupCargo.name = Взяти вантаж keybind.dropCargo.name = Скинути вантаж -keybind.command.name = Взяти командування над +keybind.command.name = Взяти командування над одиницями keybind.shoot.name = Постріл keybind.zoom.name = Наблизити keybind.menu.name = Меню From 8ce6520fca41e6337563473482b25b7b5018620d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Mon, 28 Sep 2020 00:03:51 +0200 Subject: [PATCH 022/145] Czech translation . update up to commit 9e0b29b --- core/assets/bundles/bundle_cs.properties | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index ece19396e9..3369dc1357 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -347,6 +347,7 @@ waves.invalid = Neplatné vlny ve schránce. waves.copied = Vlny byly zkopírovány. waves.none = Žádní nepřátelé nebyli definováni.\nVlny s prázdným rozložením budou automaticky upraveny na výchozí rozložení. +#these are intentionally in lower case wavemode.counts = počty wavemode.totals = součty wavemode.health = zdraví @@ -472,17 +473,12 @@ requirement.wave = Dosáhni vlny {0} na mapě {1} requirement.core = Znič nepřátelské jádro na mapě {0} requirement.research = Vynalezeno {0} requirement.capture = Polapeno {0} -resume = Zpět do mapy:\n[lightgray]{0}[] bestwave = [lightgray]Nejvyšší vlna: {0} launch = < VYSLAT > -launch.text = Vyslat -launch.title = Vyslání bylo úspěšné -launch.next = [lightgray]další možnost bude až ve vlně {0}[] -launch.unable2 = [scarlet]Není možno se vyslat.[] -launch.confirm = Toto vyšle veškeré suroviny ve Tvém jádře zpět.\nJiž se na tuto základnu nebudeš moci vrátit. -launch.skip.confirm = Jestli teď zůstaneš, budeš moci odejít až po několika dalších vlnách. +campaign.multiplayer = Když hraješ kampaň ve hře více hráčů, můžeš vynalézat pouze pomocí věcí ze [accent]svých[] sektorů, [scarlet]ne[] ze sektoru hostitele, kde jsi prívě teď.\n\nAbys získal věci do [accent]svých[] sektorů ve hře více hráčů, použij [accent]vysílací plošinu[]. uncover = Odkrýt mapu configure = Přizpůsobit vybavení +#TODO loadout = Načtení resources = Zdroje bannedblocks = Zakázané bloky @@ -523,6 +519,7 @@ sectors.launch = Vyslat sectors.select = Vybrat sectors.nonelaunch = [lightgray]žádné (slunce)[] +#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Základní tábor sector.craters.name = Krátery sector.frozenForest.name = Zamrzlý les @@ -535,6 +532,10 @@ sector.tarFields.name = Dehtová pole sector.saltFlats.name = Solné nížiny sector.fungalPass.name = Plísňový průsmyk +#unused +#sector.impact0078.name = Impact 0078 +#sector.crags.name = Crags + sector.groundZero.description = Optimální místo, kde znovu začít. Nízký výskyt nepřátel. Několik málo surovin.\nPosbírej co nejvíce olova a mědi.\nBěž dál. sector.frozenForest.description = Dokonce až sem, blízko hor, se dokázaly spóry rozrůst. Mráz je však nemůže zadržet navěky.\n\nPusť se do práce za pomocí energie. Stav spalovací generátory. Nauč se, jak používat opravovací věže. sector.saltFlats.description = Na okraji pouště leží Solné nížiny. V této lokaci se nachází jen několik málo surovin.\n\nNepřítel zde vybudoval zásobovací komplex. Znič jádro v jeho základně. Nenechej kámen na kameni. @@ -1307,3 +1308,4 @@ block.spectre.description = Velká střílna s kanónem s dvěma hlavněmi. Stř block.meltdown.description = Masivní laserový kanón. Nabije se a pak pálí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení. block.repair-point.description = Nepřetržitě léčí nejbližší poškozenou jednotku v poli své působnosti. block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. + From 250150a30c658b4d03c94166ca37429ef2dd9ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Mon, 28 Sep 2020 10:24:50 +0200 Subject: [PATCH 023/145] Czech cleanup --- core/assets/bundles/bundle_cs.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 3369dc1357..c4a3a6c4e7 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -474,7 +474,7 @@ requirement.core = Znič nepřátelské jádro na mapě {0} requirement.research = Vynalezeno {0} requirement.capture = Polapeno {0} bestwave = [lightgray]Nejvyšší vlna: {0} -launch = < VYSLAT > +launch.text = Vyslat campaign.multiplayer = Když hraješ kampaň ve hře více hráčů, můžeš vynalézat pouze pomocí věcí ze [accent]svých[] sektorů, [scarlet]ne[] ze sektoru hostitele, kde jsi prívě teď.\n\nAbys získal věci do [accent]svých[] sektorů ve hře více hráčů, použij [accent]vysílací plošinu[]. uncover = Odkrýt mapu configure = Přizpůsobit vybavení From 09934d9e123ac394b4903574b9aa6ad5acf7c3c0 Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Wed, 30 Sep 2020 19:15:52 +0300 Subject: [PATCH 024/145] Foreshadow --- core/assets/bundles/bundle_ro.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 9c640b307b..081e93c701 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -1111,6 +1111,7 @@ block.arc.name = Arc block.rtg-generator.name = Generator RTG block.spectre.name = Specter block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Platformă de Lansare block.launch-pad-large.name = Platformă de Lansare Mare From b7b2da6bbd0172b85090b352bba13dc344be0cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:01:30 +0800 Subject: [PATCH 025/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 32 ++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 9b5336dfbe..ce30641d53 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -107,7 +107,7 @@ mods.guide = 模组制作教程 mods.report = 报告 Bug mods.openfolder = 打开模组文件夹 mods.reload = 重载 -mods.reloadexit = 游戏将退出以重载模组 +mods.reloadexit = 游戏将退出以重载模组。 mod.display = [gray]模组:[orange] {0} mod.enabled = [lightgray]已启用 mod.disabled = [scarlet]已禁用 @@ -589,7 +589,7 @@ blocks.displaysize = 显示尺寸 blocks.liquidcapacity = 液体容量 blocks.powerrange = 能量范围 blocks.linkrange = 连接范围 -blocks.instructions = 指令 +blocks.instructions = 指令数量 blocks.powerconnections = 最多连接 blocks.poweruse = 使用能量 blocks.powerdamage = 功率/损伤 @@ -903,20 +903,20 @@ unit.nova.name = 新星 unit.pulsar.name = 脉冲星 unit.quasar.name = 超星 unit.crawler.name = 爬虫 -unit.atrax.name = 火萤 -unit.spiroct.name = 毒蝎 +unit.atrax.name = 火蛛 +unit.spiroct.name = 天蝎 unit.arkyid.name = 血蛭 -unit.toxopid.name = 狼蛛 +unit.toxopid.name = 毒蟒 unit.flare.name = 星耀 unit.horizon.name = 天垠 unit.zenith.name = 苍穹 unit.antumbra.name = 半影 unit.eclipse.name = 日蚀 -unit.mono.name = 血奴 -unit.poly.name = 圣魂 +unit.mono.name = 独幻 +unit.poly.name = 聚影 unit.mega.name = 巨像 -unit.quad.name = 影魔 -unit.oct.name = 梦魇 +unit.quad.name = 雷霆 +unit.oct.name = 要塞 unit.risso.name = 梭鱼 unit.minke.name = 刺鲸 unit.bryde.name = 虎鲨 @@ -927,8 +927,8 @@ unit.beta.name = 贝塔 unit.gamma.name = 伽玛 unit.scepter.name = 权杖 unit.reign.name = 君王 -unit.vela.name = 树妖 -unit.corvus.name = 武神 +unit.vela.name = 灾星 +unit.corvus.name = 死星 block.resupply-point.name = 补给点 block.parallax.name = 阻滞光束 @@ -1081,8 +1081,8 @@ block.ripple.name = 浪涌 block.phase-conveyor.name = 相织物传送带桥 block.bridge-conveyor.name = 传送带桥 block.plastanium-compressor.name = 塑钢压缩机 -block.pyratite-mixer.name = 硫混合器 -block.blast-mixer.name = 爆炸混合器 +block.pyratite-mixer.name = 硫化物混合器 +block.blast-mixer.name = 爆炸物混合器 block.solar-panel.name = 太阳能板 block.solar-panel-large.name = 大型太阳能板 block.oil-extractor.name = 石油钻井 @@ -1101,7 +1101,7 @@ block.blast-drill.name = 爆破钻头 block.thermal-pump.name = 热能泵 block.thermal-generator.name = 热能发电机 block.alloy-smelter.name = 合金冶炼厂 -block.mender.name = 修理者 +block.mender.name = 修复器 block.mend-projector.name = 修理投影器 block.surge-wall.name = 波动墙 block.surge-wall-large.name = 大型波动墙 @@ -1299,7 +1299,7 @@ block.salvo.description = 双管炮的升级版。中型,快速射出一串子 block.fuse.description = 大型近程炮塔,发射三道刺穿敌人的短程光束。 block.ripple.description = 大型远程炮台,非常强力,向远处的敌人投射一簇弹药。 block.cyclone.description = 大型炮塔,对空对地,发射在敌人周围引爆的爆炸物。 -block.spectre.description = 超大型炮塔,对空对地,一次射出两颗强大的穿甲弹药。 +block.spectre.description = 超大型炮塔,对空对地,一次射出两颗强大的破甲弹。 block.meltdown.description = 超大型激光炮塔,充能之后持续发射光束,需要冷却剂。 -block.repair-point.description = 持续治疗其附近伤势最重的单位。 +block.repair-point.description = 持续治疗其附近受损最严重的单位。 block.segment.description = 摧毁袭来的除激光以外的子弹或导弹. From 04b03b074918332e9f369ebc47c62e23cfd1a65a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E6=BB=91=E7=A8=BD?= <48855802+laohuaji233@users.noreply.github.com> Date: Fri, 2 Oct 2020 08:19:31 +0800 Subject: [PATCH 026/145] Update bundle_zh_CN.properties --- core/assets/bundles/bundle_zh_CN.properties | 58 ++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index ce30641d53..42af0e47c3 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -522,29 +522,29 @@ sectors.launch = 发射 sectors.select = 选择 sectors.nonelaunch = [lightgray]无 (太阳) -zone.groundZero.name = 零号地区 -zone.craters.name = 陨石带 -zone.frozenForest.name = 冰冻森林 -zone.ruinousShores.name = 遗迹海岸 -zone.stainedMountains.name = 绵延群山 -zone.desolateRift.name = 荒芜裂谷 -zone.nuclearComplex.name = 核裂阵 -zone.overgrowth.name = 增生区 -zone.tarFields.name = 油田 -zone.saltFlats.name = 盐碱荒滩 -zone.crags.name = 悬崖 +sector.groundZero.name = 零号地区 +sector.craters.name = 陨石带 +sector.frozenForest.name = 冰冻森林 +sector.ruinousShores.name = 遗迹海岸 +sector.stainedMountains.name = 绵延群山 +sector.desolateRift.name = 荒芜裂谷 +sector.nuclearComplex.name = 核裂阵 +sector.overgrowth.name = 增生区 +sector.tarFields.name = 油田 +sector.saltFlats.name = 盐碱荒滩 +sector.crags.name = 悬崖 -zone.groundZero.description = 踏上旅程的最佳位置。这儿的敌人威胁很小,但资源也少。\n收集尽可能多的铅和铜。\n出发吧! -zone.frozenForest.description = 即使是靠近山脉的这里,孢子也已经扩散。他们不能长期停留在寒冷的温度中。\n\n开始运用电力。建造火力发电机并学会使用修理者。 -zone.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。摧毁他们的核心。不要留下任何东西。 -zone.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水来加速炮塔和钻头。 -zone.ruinousShores.description = 穿过荒地,就是海岸线。这个地方曾经建造了一个海岸防御线。但现在所剩无几,只有最基本的防御结构仍然毫发无损,其他一切都被摧毁了。\n继续向外扩展。继续研究科技。 -zone.stainedMountains.description = 在更远的内陆地区是山脉,但这里没有被孢子污染。\n这一地区分布着丰富的钛,学习如何使用它。\n\n这里的敌人势力更大,不要给他们时间派出最强的部队。 -zone.overgrowth.description = 这个地区靠近孢子的来源,因此生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。 -zone.tarFields.description = 产油区边缘,位于山脉和沙漠之间。它少数几个有石油储量的地区之一。\n尽管被废弃,这附近仍有一些危险的敌方单位。不要低估他们。\n\n[lightgray]如果可能,研究石油加工技术。 -zone.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 -zone.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。 -zone.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 +sector.groundZero.description = 踏上旅程的最佳位置。这儿的敌人威胁很小,但资源也少。\n收集尽可能多的铅和铜。\n出发吧! +sector.frozenForest.description = 即使是靠近山脉的这里,孢子也已经扩散。他们不能长期停留在寒冷的温度中。\n\n开始运用电力。建造火力发电机并学会使用修理者。 +sector.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。摧毁他们的核心。不要留下任何东西。 +sector.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水来加速炮塔和钻头。 +sector.ruinousShores.description = 穿过荒地,就是海岸线。这个地方曾经建造了一个海岸防御线。但现在所剩无几,只有最基本的防御结构仍然毫发无损,其他一切都被摧毁了。\n继续向外扩展。继续研究科技。 +sector.stainedMountains.description = 在更远的内陆地区是山脉,但这里没有被孢子污染。\n这一地区分布着丰富的钛,学习如何使用它。\n\n这里的敌人势力更大,不要给他们时间派出最强的部队。 +sector.overgrowth.description = 这个地区靠近孢子的来源,因此生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。 +sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。它少数几个有石油储量的地区之一。\n尽管被废弃,这附近仍有一些危险的敌方单位。不要低估他们。\n\n[lightgray]如果可能,研究石油加工技术。 +sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 +sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。 +sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 settings.language = 语言 settings.data = 游戏数据 @@ -662,9 +662,9 @@ unit.timesspeed = 倍 速度 unit.percent = % unit.shieldhealth = 盾容 unit.items = 物品 -unit.thousands = kil -unit.millions = mil -unit.billions = bil +unit.thousands = K +unit.millions = M +unit.billions = B category.general = 普通 category.power = 能量 category.liquids = 液体 @@ -912,8 +912,8 @@ unit.horizon.name = 天垠 unit.zenith.name = 苍穹 unit.antumbra.name = 半影 unit.eclipse.name = 日蚀 -unit.mono.name = 独幻 -unit.poly.name = 聚影 +unit.mono.name = 独影 +unit.poly.name = 聚幻 unit.mega.name = 巨像 unit.quad.name = 雷霆 unit.oct.name = 要塞 @@ -1105,8 +1105,8 @@ block.mender.name = 修复器 block.mend-projector.name = 修理投影器 block.surge-wall.name = 波动墙 block.surge-wall-large.name = 大型波动墙 -block.cyclone.name = 气旋炮 -block.fuse.name = 雷光炮 +block.cyclone.name = 气旋 +block.fuse.name = 雷光 block.shock-mine.name = 脉冲地雷 block.overdrive-projector.name = 超速投影器 block.force-projector.name = 力墙投影器 From 50491755d1d4a3dcccdca5758c35c57c4acc893c Mon Sep 17 00:00:00 2001 From: ThePythonGuy <45978337+ThePythonGuy3@users.noreply.github.com> Date: Sat, 3 Oct 2020 16:59:39 +0200 Subject: [PATCH 027/145] typo and stuff --- core/assets/bundles/bundle_es.properties | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 8c538a6974..5c87f27455 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -2,14 +2,14 @@ credits.text = Creado por [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = Créditos contributors = Traductores y Contribuidores discord = ¡Únete al Discord de Mindustry! -link.discord.description = La sala oficial del Discord de Mindustry +link.discord.description = El servidor official de Discord de Mindustry link.reddit.description = El subreddit de Mindustry link.github.description = Código fuente del juego link.changelog.description = Lista de actualizaciones -link.dev-builds.description = Versiones de desarrollo inestables +link.dev-builds.description = Versiones en desarrollo inestables link.trello.description = Tablero de Trello oficial para las características planificadas link.itch.io.description = itch.io es la página donde podes descargar las versiones para PC y web -link.google-play.description = Ficha en la Google Play Store +link.google-play.description = Página de Mindustry en Google Play Store link.f-droid.description = Página de F-Droid del juego link.wiki.description = Wiki oficial de Mindustry link.suggestions.description = Sugerir nuevas funciones @@ -18,7 +18,7 @@ screenshot = Captura de pantalla guardada en {0} screenshot.invalid = Mapa demasiado grande, no hay suficiente memoria para la captura de pantalla. gameover = Tu núcleo ha sido destruido. gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! -highscore = [accent]¡Nueva mejor puntuación! +highscore = [accent]¡Nuevo récord de puntuación! copied = Copiado. indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. indev.notready = This part of the game isn't ready yet @@ -38,12 +38,12 @@ be.ignore = Ignorar be.noupdates = No se encontraron actualizaciones. be.check = Revisando actualizaciones -schematic = Esquemático -schematic.add = Guardar esquemático... -schematics = Esquemáticos -schematic.replace = Un esquemático con ese nombre ya existe. ¿Deseas remplazarlo? -schematic.exists = Un esquemático con ese nombre ya existe. -schematic.import = Importar esquemático... +schematic = Esquema +schematic.add = Guardar esquema... +schematics = Esquemas +schematic.replace = Un esquema con ese nombre ya existe. ¿Deseas remplazarlo? +schematic.exists = Un esquema con ese nombre ya existe. +schematic.import = Importar esquema... schematic.exportfile = Exportar archivo schematic.importfile = Importar archivo schematic.browseworkshop = Buscar en el Steam Workshop From f30a3392d5830604dc09a21e3f126c46ef9d7979 Mon Sep 17 00:00:00 2001 From: Leonid Skorospelov Date: Sat, 3 Oct 2020 19:54:25 +0300 Subject: [PATCH 028/145] Update servers.json --- servers.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers.json b/servers.json index 8bb2e2097c..f13878499e 100644 --- a/servers.json +++ b/servers.json @@ -70,5 +70,8 @@ }, { "address": "pandorum.su:9999" + }, + { + "address": "mindustryranked.ddns.net" } ] From 3e49c68ec2d3e980f69787e16125fcef35616279 Mon Sep 17 00:00:00 2001 From: Thomas Widyantoko <40286070+DaGamerFiles@users.noreply.github.com> Date: Sun, 4 Oct 2020 10:08:42 +0700 Subject: [PATCH 029/145] Updated for missing lines --- core/assets/bundles/bundle_in_ID.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 42a19d4934..d12018b9ca 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -840,7 +840,7 @@ rules.enemycorebuildradius = Dilarang Membangun Radius Inti Musuh :[lightgray] ( rules.wavespacing = Jarak Gelombang:[lightgray] (detik) rules.buildcostmultiplier = Multiplikasi Harga Bangunan rules.buildspeedmultiplier = Multiplikasi Waktu Pembuatan Bangunan -rules.deconstructrefundmultiplier = Penggembalian Dana Mendekonstraksi Blok +rules.deconstructrefundmultiplier = Penggembalian Dana Mendekonstruksi Blok rules.waitForWaveToEnd = Gelombang menunggu musuh rules.dropzoneradius = Radius Titik Muncul:[lightgray] (Blok) rules.unitammo = Unit Membutuhkan AMunisi @@ -851,6 +851,7 @@ rules.title.unit = Unit rules.title.experimental = Eksperimental rules.title.environment = Lingkungan rules.lighting = Penerangan +rules.enemyLights = Sinar dari Musuh rules.fire = Api rules.explosions = Kekuatan Ledakan Blok/Unit rules.ambientlight = Sinar Disekeliling @@ -1079,6 +1080,7 @@ block.power-source.name = Sumber Tenaga block.unloader.name = Pembongkar Muatan block.vault.name = Gudang block.wave.name = Ombak +block.tsunami.name = Tsunami block.swarmer.name = Pengurung block.salvo.name = Salvo block.ripple.name = Periak @@ -1118,6 +1120,7 @@ block.arc.name = Arca block.rtg-generator.name = Generator RTG block.spectre.name = Iblis block.meltdown.name = Pelebur +block.foreshadow.name = Foreshadow block.container.name = Kontainer block.launch-pad.name = Alas Peluncur block.launch-pad-large.name = Alas Peluncur Besar From 5d2c36f186345afda585de1dd8497b67bacf2cba Mon Sep 17 00:00:00 2001 From: grimsoul10 <66539247+grimsoul10@users.noreply.github.com> Date: Sun, 4 Oct 2020 10:48:48 +0700 Subject: [PATCH 030/145] Small changes (#1) * Small changes * Capitalizations --- core/assets/bundles/bundle_in_ID.properties | 36 ++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index d12018b9ca..255b9f40a8 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -882,7 +882,7 @@ item.scrap.name = Kepingan liquid.water.name = Air liquid.slag.name = Terak liquid.oil.name = Minyak -liquid.cryofluid.name = Cairan Dingin +liquid.cryofluid.name = Cairan Pendingin item.explosiveness = [lightgray]Tingkat Keledakan: {0}% item.flammability = [lightgray]Tingkat Kebakaran: {0}% @@ -891,10 +891,10 @@ item.radioactivity = [lightgray]Tingkat Radioaktif: {0}% unit.health = [lightgray]Darah: {0} unit.speed = [lightgray]Kecepatan: {0} unit.weapon = [lightgray]Senjata: {0} -unit.itemcapacity = [lightgray]Kpaasitan Item: {0} +unit.itemcapacity = [lightgray]Kapasitas Item: {0} unit.minespeed = [lightgray]Kecepatan Menambang: {0}% unit.minepower = [lightgray]Kekuatan Menambang: {0} -unit.ability = [lightgray]Abilitas: {0} +unit.ability = [lightgray]Kemampuan: {0} unit.buildspeed = [lightgray]Kecepatan Membangun: {0}% liquid.heatcapacity = [lightgray]Kapasitas Panas: {0} @@ -1026,9 +1026,9 @@ block.thorium-wall-large.name = Dinding Thorium Besar block.door.name = Pintu block.door-large.name = Pintu Besar block.duo.name = Duo -block.scorch.name = Penghangus -block.scatter.name = Penabur -block.hail.name = Penghujan +block.scorch.name = Scorch +block.scatter.name = Scatter +block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Pengantar block.titanium-conveyor.name = Pengantar Berbahan Titanium @@ -1079,11 +1079,11 @@ block.power-void.name = Penghilang Tenaga block.power-source.name = Sumber Tenaga block.unloader.name = Pembongkar Muatan block.vault.name = Gudang -block.wave.name = Ombak +block.wave.name = Wave block.tsunami.name = Tsunami -block.swarmer.name = Pengurung +block.swarmer.name = Swarmer block.salvo.name = Salvo -block.ripple.name = Periak +block.ripple.name = Ripple block.phase-conveyor.name = Pengantar Berbahan Phase block.bridge-conveyor.name = Jembatan Pengantar block.plastanium-compressor.name = Kompresor Plastanium @@ -1111,24 +1111,24 @@ block.mender.name = Reparator block.mend-projector.name = Proyeksi Reparator block.surge-wall.name = Dinding Listrik block.surge-wall-large.name = Dinding Listrik Besar -block.cyclone.name = Topan -block.fuse.name = Padu +block.cyclone.name = Cyclone +block.fuse.name = Fuse block.shock-mine.name = Ranjau Listrik block.overdrive-projector.name = Proyeksi Pencepat block.force-projector.name = Proyeksi Medan Gaya -block.arc.name = Arca +block.arc.name = Arc block.rtg-generator.name = Generator RTG -block.spectre.name = Iblis -block.meltdown.name = Pelebur +block.spectre.name = Spectre +block.meltdown.name = Meltdown block.foreshadow.name = Foreshadow block.container.name = Kontainer block.launch-pad.name = Alas Peluncur block.launch-pad-large.name = Alas Peluncur Besar -block.segment.name = Segmen +block.segment.name = Segment block.command-center.name = Pusat Perintah -block.ground-factory.name = Pabrik Darat -block.air-factory.name = Pabrik Udara -block.naval-factory.name = Pabrik Laut +block.ground-factory.name = Pabrik Angkatan Darat +block.air-factory.name = Pabrik Angkatan Udara +block.naval-factory.name = Pabrik Angkatan Laut block.additive-reconstructor.name = Rekonstruktor Aditif block.multiplicative-reconstructor.name = Rekonstruktor Multiplikatif block.exponential-reconstructor.name = Rekonstruktor Eksponensial From c1be33cf2f3d1e18b0caae9603961021e6d0ff6f Mon Sep 17 00:00:00 2001 From: TheMrAlbert <44728043+TheMrAlbert@users.noreply.github.com> Date: Sun, 4 Oct 2020 12:45:08 +0700 Subject: [PATCH 031/145] Minor update These are the minor translations, please review this translation before merging. Also, block.consecutive (line 611) are left untranslated to allow other translator who are capable to translate it well. --- core/assets/bundles/bundle_in_ID.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 255b9f40a8..968c159f13 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -35,7 +35,7 @@ be.update = Versi Bleeding Edge terbaru tersedia: be.update.confirm = Unduh dan ulang kembali sekarang? be.updating = Memperbarui... be.ignore = Abaikan -be.noupdates = Tidak ada pembaharuan yang ditemukan. +be.noupdates = Tidak ada pembaruan yang ditemukan. be.check = Cek versi baru schematic = Skema @@ -336,7 +336,7 @@ waves.never = waves.every = setiap waves.waves = gelombang waves.perspawn = per muncul -waves.shields = periasi/gelombang +waves.shields = perisai/gelombang waves.to = sampai waves.guardian = Guardian waves.preview = Pratinjau @@ -475,7 +475,7 @@ requirement.research = Kembangkan {0} requirement.capture = Kuasai {0} bestwave = [lightgray]Gelombang Terbaik: {0} launch.text = Luncurkan -campaign.multiplayer = While playing multiplayer in campaign, you can only research using items from [accent]your[] sectors, [scarlet]not[] the host's sector that you are on right now.\n\nTo get items to [accent]your[] sectors in multiplayer, use a [accent]launch pad[]. +campaign.multiplayer = Saat bermain bersama di kampanye, Kamu hanya bisa kembangkan menggunakan item dari sektor [accent]kamu[], [scarlet]Bukan[] sektor milik host yang kamu berada sekarang.\n\nUntuk mendapatkan item tersebut ke sektor [accent]kamu[] saat bermain bersama, gunakan [accent]alas peluncur[]. uncover = Buka configure = Konfigurasi Muatan #TODO @@ -483,7 +483,7 @@ loadout = Muatan resources = Sumber Daya bannedblocks = Balok yang dilarang addall = Tambah Semua -launch.destination = Destination: {0} +launch.destination = Destinasi: {0} configure.invalid = Jumlah harus berupa angka diantara 0 dan {0}. zone.unlocked = [lightgray]{0} terbuka. zone.requirement.complete = Gelombang {0} terselesaikan:\nPersyaratan zona {1} tercapai. From 55be1fd9698bc97ce26c69b3d2c7d07e6e59a166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Mon, 5 Oct 2020 11:55:01 +0200 Subject: [PATCH 032/145] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Roman Plášil --- core/assets/bundles/bundle_cs.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index c4a3a6c4e7..2df60c6172 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -475,7 +475,7 @@ requirement.research = Vynalezeno {0} requirement.capture = Polapeno {0} bestwave = [lightgray]Nejvyšší vlna: {0} launch.text = Vyslat -campaign.multiplayer = Když hraješ kampaň ve hře více hráčů, můžeš vynalézat pouze pomocí věcí ze [accent]svých[] sektorů, [scarlet]ne[] ze sektoru hostitele, kde jsi prívě teď.\n\nAbys získal věci do [accent]svých[] sektorů ve hře více hráčů, použij [accent]vysílací plošinu[]. +campaign.multiplayer = Když hraješ kampaň ve hře více hráčů, můžeš vynalézat pouze pomocí věcí ze [accent]svých[] sektorů, [scarlet]ne[] ze sektoru hostitele, kde jsi právě teď.\n\nAbys získal věci do [accent]svých[] sektorů ve hře více hráčů, použij [accent]vysílací plošinu[]. uncover = Odkrýt mapu configure = Přizpůsobit vybavení #TODO @@ -1308,4 +1308,3 @@ block.spectre.description = Velká střílna s kanónem s dvěma hlavněmi. Stř block.meltdown.description = Masivní laserový kanón. Nabije se a pak pálí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení. block.repair-point.description = Nepřetržitě léčí nejbližší poškozenou jednotku v poli své působnosti. block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. - From 26f6bcccb7fbb1ac8fdd7ddd8d9dbda71d761f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Mon, 5 Oct 2020 12:04:35 +0200 Subject: [PATCH 033/145] Czech - up to date for commit 14156c1 --- core/assets/bundles/bundle_cs.properties | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index cf8896d1d0..c17ee9e041 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -850,7 +850,8 @@ rules.title.enemy = Nepřátelé rules.title.unit = Jednotky rules.title.experimental = Experimentální rules.title.environment = Environmentální -rules.lighting = Světlo +rules.lighting = Osvětlení +rules.enemyLights = Světla nepřátel rules.fire = Výstřel rules.explosions = Výbušné poškození bloku/jednotky rules.ambientlight = Světlo prostředí @@ -1080,6 +1081,7 @@ block.unloader.name = Odbavovač block.vault.name = Trezor block.wave.name = Vlna block.swarmer.name = Rojiště +block.tsunami.name = Tsunami block.salvo.name = Salva block.ripple.name = Vlnění block.phase-conveyor.name = Fázový přepravník @@ -1116,8 +1118,9 @@ block.overdrive-projector.name = Urychlující projektor block.force-projector.name = Silový projektor block.arc.name = Oblouk block.rtg-generator.name = RTG -block.spectre.name = Spectre -block.meltdown.name = Meltdown +block.spectre.name = Přízrak +block.meltdown.name = Tavič +block.foreshadow.name = Znamení osudu block.container.name = Kontejnér block.launch-pad.name = Vysílací plošina block.launch-pad-large.name = Velká vysílací plošina From bf4b01e46c4f9f6a031c02a9afdea7bad0e11adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Mon, 5 Oct 2020 12:05:53 +0200 Subject: [PATCH 034/145] name change --- core/assets/bundles/bundle_cs.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 3940d3394c..daa71ce6e8 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -1119,7 +1119,7 @@ block.force-projector.name = Silový projektor block.arc.name = Oblouk block.rtg-generator.name = RTG block.spectre.name = Přízrak -block.meltdown.name = Tavič +block.meltdown.name = Rozpékač block.foreshadow.name = Znamení osudu block.container.name = Kontejnér block.launch-pad.name = Vysílací plošina From 38ef46aa4135ad421a5c9bf78270443958a4475b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Tue, 6 Oct 2020 10:09:24 +0200 Subject: [PATCH 035/145] Czech translation - update for commit 7088ae8 --- core/assets/bundles/bundle_cs.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index daa71ce6e8..8bcd567380 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -638,6 +638,8 @@ bar.progress = Stavba v průběhu bar.input = Vstup bar.output = Výstup +units.processorcontrol = [lightgray]Procesor je ovládán[] + bullet.damage = [stat]{0}[lightgray] poškození[] bullet.splashdamage = [stat]{0}[lightgray] plošného poškození ~[stat] {1}[lightgray] dlaždic bullet.incendiary = [stat]zápalné From 4b6289d957690c20ddc55a6e79bfed13a689801f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Tue, 6 Oct 2020 10:26:56 +0200 Subject: [PATCH 036/145] Czech translation for Steam, up to date --- fastlane/metadata/android/cs-CZ/changelogs/29661.txt | 9 +++++++++ fastlane/metadata/android/cs-CZ/changelogs/29664.txt | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 fastlane/metadata/android/cs-CZ/changelogs/29661.txt create mode 100644 fastlane/metadata/android/cs-CZ/changelogs/29664.txt diff --git a/fastlane/metadata/android/cs-CZ/changelogs/29661.txt b/fastlane/metadata/android/cs-CZ/changelogs/29661.txt new file mode 100644 index 0000000000..7d218735fd --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/29661.txt @@ -0,0 +1,9 @@ +- Opraveny některé chyby +- A některé opraveny nebyly +- Přidáno 6 nových jednotek, které zaplnily chybějící povýšení na T4/5 +- Přidán obrys jednotek pro vizuálbí čistotu, možná bude později odebráno +- Přidán povrch typu bláto (příspěvek od ThePlayerA) +- Přidána cena výzkumu k jednotkám v technologickém stromě +- Přidána schopnost hry nahradit malé kusy zdí přímo většími +- Přidána možnost vybrat si cíl vyslání (jen zběžně testováno) +- Přidány barvy týmů pro uskladněné bloky (příspěek od Voz-Duh) diff --git a/fastlane/metadata/android/cs-CZ/changelogs/29664.txt b/fastlane/metadata/android/cs-CZ/changelogs/29664.txt new file mode 100644 index 0000000000..8a5413885e --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/29664.txt @@ -0,0 +1,9 @@ +Toto je malá aktualizace. Neobsahuje mnoho nového obsahu, hlavně opravy chyb. +Další plánovaná aktualizace se zaměří na kampaň a pravděpodobně zabere více času. + +- Opravy chyb +- Přidána barva týmu pro řídicí středisko (příspěvek od Voz-Duh) +- Vyčištěny některé sprajty jednotek tak, aby ladily s V6 stylem (částěčný příspěvek od Voz-Duh) +- Přidána podpora na Androidu pro modifikace založené na Javě (aktuálně prakticky bez dokumentace) +- Přidána vysoce kapacitní pamě%tový banka (2x2) pro logické procesory +- Vyvážení hry From a698258b674833416ec3258db4c270e79aed5cc4 Mon Sep 17 00:00:00 2001 From: Sunny Kim <58885089+sk7725@users.noreply.github.com> Date: Thu, 8 Oct 2020 19:17:30 +0900 Subject: [PATCH 037/145] Update bundle_ko.properties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit some stuff, unit shield(방어막) vs force field(보호막) distinction and more --- core/assets/bundles/bundle_ko.properties | 42 ++++++++++++------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 87f3d00a1b..807ac30d92 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -115,7 +115,7 @@ mod.disable = 비활성화 mod.content = 콘텐츠: mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]V6 전용이 아닌 모드 (minGameVersion: 105 누락) mod.missingdependencies = [scarlet]누락된 요구 모드: {0} mod.erroredcontent = [scarlet]콘텐츠 오류 mod.errors = 콘텐츠를 로드하는 동안 오류가 발생함. @@ -148,7 +148,7 @@ techtree = 연구 기록 research.list = [lightgray]연구: research = 연구 researched = [lightgray]{0} 연구 완료. -research.progress = {0}% complete +research.progress = {0}% 완료 players = {0} 플레이어들 players.single = {0} 플레이어 players.search = 검색 @@ -335,7 +335,7 @@ waves.never = 여기까지 유닛생성 waves.every = 매 waves.waves = 웨이브마다 waves.perspawn = 생성 -waves.shields = 보호막/웨이브 +waves.shields = 방어막/웨이브 waves.to = 부터 waves.guardian = 보호자 waves.preview = 미리보기 @@ -469,8 +469,8 @@ locked = 잠김 complete = [lightgray]해금 조건 : requirement.wave = {1}지역에서 {0}웨이브 달성 requirement.core = {0}지역에서 적 코어를 파괴 -requirement.research = Research {0} -requirement.capture = Capture {0} +requirement.research = {0} 연구 +requirement.capture = {0} 점령 resume = 지역 재개:\n[lightgray]{0} bestwave = [lightgray]최고 웨이브: {0} launch = < 출격 > @@ -508,10 +508,10 @@ error.io = 네트워크 I/O 오류. error.any = 알 수 없는 네트워크 오류. error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n당신의 기기가 이 기능을 지원하지 않는 것일 수도 있습니다. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = 비 +weather.snow.name = 눈 +weather.sandstorm.name = 모래폭풍 +weather.sporestorm.name = 포자폭풍 sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -611,7 +611,7 @@ blocks.inaccuracy = 오차각 blocks.shots = 공격 속도 blocks.reload = 발/초 blocks.ammo = 탄약 -blocks.shieldhealth = Shield Health +blocks.shieldhealth = 보호막 체력 blocks.cooldowntime = Cooldown Time bar.drilltierreq = 더 좋은 드릴이 필요 @@ -1118,27 +1118,27 @@ block.container.name = 컨테이너 block.launch-pad.name = 출격 패드 block.launch-pad-large.name = 대형 출격 패드 block.segment.name = 세그먼트 -block.command-center.name = Command Center +block.command-center.name = 지휘소 block.ground-factory.name = 지상 공장 block.air-factory.name = 항공 공장 block.naval-factory.name = 해양 공장 block.additive-reconstructor.name = 첨가물 재구성기 block.multiplicative-reconstructor.name = 다중 재구성기 block.exponential-reconstructor.name = 지수 재구성기 -block.tetrative-reconstructor.name = 정서 재구성기 +block.tetrative-reconstructor.name = 발산 재구성기 block.payload-conveyor.name = 화물 컨베이어 block.payload-router.name = 화물 분배기 block.disassembler.name = 가속 분해기 block.silicon-crucible.name = 실리콘 도가니 block.overdrive-dome.name = 대형 과부하 프로젝터 -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = 스위치 +block.micro-processor.name = 소형 프로세서 +block.logic-processor.name = 명령 프로세서 +block.hyper-processor.name = 하이퍼 프로세서 +block.logic-display.name = 화면 +block.large-logic-display.name = 대형 화면 +block.memory-cell.name = 기억 블록 team.blue.name = 파랑색 팀 team.crux.name = 빨강색 팀 @@ -1241,7 +1241,7 @@ block.bridge-conveyor.description = 고급 자원 운송 블록. 지형이나 block.phase-conveyor.description = 고급 자원 운송 블록. 전력을 사용하여 여러 타일을 통해 연결된 컨베이어로 자원을 순간이동 시킵니다. block.sorter.description = 자원을 정렬합니다. 자원이 선택과 일치하면 앞방향으로 통과하며, 그렇지 않을 경우 왼쪽과 오른쪽으로 출력됩니다. block.inverted-sorter.description = 표준 분류기와 같은 자원을 처리하지만, 대신 선택된 자원을 측면으로 출력합니다. -block.router.description = 자원을 받아서 최대 3개의 다른 방향으로 동일하게 출력합니다. 하나의 소스에서 여러 대상으로 재료를 분할하는 데 유용합니다.\n\n[scarlet]공장에서 생산된 재료는 출력에 의해 막히게 되므로, 절대로 공장 옆에서 사용하지 마십시오. +block.router.description = 자원을 받아서 최대 3개의 다른 방향으로 동일하게 출력합니다. 하나의 공급원에서 여러 대상으로 재료를 분할하는 데 유용합니다.\n\n[scarlet]공장에서 생산된 재료는 출력에 의해 막히게 되므로, 절대로 공장 옆에서 사용하지 마십시오. block.distributor.description = 고급 분배기. 자원을 최대 7개의 다른 방향으로 동일하게 분할합니다. block.overflow-gate.description = 전면 경로가 차단 된 경우에만 왼쪽과 오른쪽으로 출력됩니다. block.underflow-gate.description = 오버플로 게이트의 반대. 왼쪽 및 오른쪽 경로가 차단되면 전면으로 출력됩니다. @@ -1252,7 +1252,7 @@ block.thermal-pump.description = 가장 강력한 펌프. block.conduit.description = 기본 액체 운송 블록. 액체를 앞으로 이동시킵미다. 펌프 및 기타 파이프와 함께 사용됩니다. block.pulse-conduit.description = 고급 액체 운송 블록. 액체를 더 빠르게 운반하고 표준 파이프보다 더 많이 저장합니다. block.plated-conduit.description = 펄스 파이프와 같은 속도로 이동하지만 더 높은 방어력을 가지고 있습니다. 파이프 이외의 물체로 측면의 액체를 받아들이지 않습니다.\n누설이 적습니다. -block.liquid-router.description = 한 방향에서 액체를 받아 최대 3개의 다른 방향으로 동일하게 출력합니다. 일정량의 액체를 저장할 수도 있으며 한 소스에서 여러 대상으로 액체를 분할하는 데 유용합니다. +block.liquid-router.description = 한 방향에서 액체를 받아 최대 3개의 다른 방향으로 동일하게 출력합니다. 일정량의 액체를 저장할 수도 있으며 한 공급원에서 여러 대상으로 액체를 분할하는 데 유용합니다. block.liquid-tank.description = 대량의 액체를 저장합니다. 재료가 일정하지 않은 상황에서 버퍼를 생성하거나 중요한 블록을 냉각하기 위한 보호 장치로 사용하세요. block.liquid-junction.description = 두 개의 교차 파이프를 위한 다리 역할을 합니다. 다른 액체를 다른 위치로 운반하는 두 개의 다른 파이프가 있는 상황에서 유용합니다. block.bridge-conduit.description = 고급 액체 운송 블록. 지형이나 건물을 넘어 최대 3개 타일 위로 액체를 운반할 수 있습니다. From 30a5c6631bb5db3c2407c61fa5e04c19fc19587b Mon Sep 17 00:00:00 2001 From: Sunny Kim <58885089+sk7725@users.noreply.github.com> Date: Fri, 9 Oct 2020 15:50:27 +0900 Subject: [PATCH 038/145] consistency --- core/assets/bundles/bundle_ko.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 807ac30d92..f03ff17264 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -1109,7 +1109,7 @@ block.cyclone.name = 사이클론 block.fuse.name = 퓨즈 block.shock-mine.name = 전격 지뢰 block.overdrive-projector.name = 과부하 프로젝터 -block.force-projector.name = 포스 프로젝터 +block.force-projector.name = 보호막 프로젝터 block.arc.name = 아크 block.rtg-generator.name = RTG 발전기 block.spectre.name = 스펙터 From 2e4cbdcc05b10ad00b00b5966b7273168120bfd3 Mon Sep 17 00:00:00 2001 From: Pietro303HD <47507131+Pietro303HD@users.noreply.github.com> Date: Sat, 10 Oct 2020 09:51:23 -0300 Subject: [PATCH 039/145] Update bundle_pt_BR.properties --- core/assets/bundles/bundle_pt_BR.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 80daa905fa..61de1fcd9b 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -958,7 +958,7 @@ block.thorium-wall-large.name = Muralha de Tório block.door.name = Porta block.door-large.name = Portão block.duo.name = Torreta dupla -block.scorch.name = Lança-fogo +block.scorch.name = Lança-chamas block.scatter.name = Dispersão block.hail.name = Artilharia block.lancer.name = Lanceiro @@ -1229,4 +1229,4 @@ block.cyclone.description = Uma grande torre que dispara balas explosivas que se block.spectre.description = Um grande canhão massivo. Dispara grandes tiros perfuradores de blindagem em inimigos aéreos e terrestres. block.meltdown.description = Um grande canhão laser massivo. Carrega e dispara um poderoso e persistente feixe nos seus inimigos. Requer uma refrigeração para ser operada. block.repair-point.description = Continuamente repara a unidade danificada mais proxima. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. +block.segment.description = Destrói projéteis inimigos. Projéteis de laser não são afetados. From 31617b906bdf84df4f1d56e98ea6ed271c523189 Mon Sep 17 00:00:00 2001 From: Pear Date: Sat, 10 Oct 2020 15:19:24 -0400 Subject: [PATCH 040/145] Add Pearkin Attack Server to server.json We're a new community starting out with Mindustry. Its a chill and relax attack server with RTV, stats, and Discord moderation setup. --- servers.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers.json b/servers.json index 6ee33c6d30..177f25f676 100644 --- a/servers.json +++ b/servers.json @@ -73,5 +73,8 @@ }, { "address": "pandorum.su:9999" + }, + { + "address": "attack.pearkin.net" } ] From 8ed6f1e3a8eb06602df7c4b51ada12adfdd0b775 Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Sun, 11 Oct 2020 21:01:37 +0300 Subject: [PATCH 041/145] Updates until commit 3fe79531a67c67aca9b7f417301cd83efe0acd3c --- core/assets/bundles/bundle_ro.properties | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 081e93c701..053fbdc7d7 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -291,6 +291,8 @@ waiting = [lightgray]În așteptare... waiting.players = Se așteaptă jucătorii... wave.enemies = [lightgray]Mai sunt {0} inamici wave.enemy = [lightgray]Mai e {0} inamic +wave.guardianwarn = Gardianul va veni în [accent]{0}[] valuri. +wave.guardianwarn.one = Gardianul va veni într-[accent]un[] val. loadimage = Încarcă Imagine saveimage = Salvează Imagine unknown = Necunoscut @@ -329,6 +331,7 @@ editor.generation = Generare: editor.ingame = Editează în Joc editor.publish.workshop = Publică pe Workshop editor.newmap = Hartă Nouă +editor.center = Centrează workshop = Workshop waves.title = Valuri waves.remove = Elimină @@ -421,7 +424,7 @@ filter.corespawn = Selectare Nucleu filter.median = Mediană filter.oremedian = Mediană Minereu filter.blend = Amestecare -filter.defaultores = Miercuri Prestabilite +filter.defaultores = Minereuri Prestabilite filter.ore = Minereu filter.rivernoise = Zgomot Vizual Râuri filter.mirror = Oglindă @@ -565,6 +568,7 @@ info.title = Info error.title = [scarlet]A apărut o eroare. error.crashtitle = A apărut o eroare. unit.nobuild = [scarlet]Unitatea nu poate construi. +lastaccessed = [lightgray]Ultima Accesare: {0} blocks.input = Necesită blocks.output = Produce blocks.booster = Booster @@ -620,6 +624,7 @@ bar.powerbalance = Electricitate: {0}/s bar.powerstored = Stocată: {0}/{1} bar.poweramount = Electricitate: {0} bar.poweroutput = Electricitate Produsă: {0} +bar.powerlines = Conexiuni: {0}/{1} bar.items = Materiale: {0} bar.capacity = Capacitate: {0} bar.unitcap = {0} {1}/{2} @@ -631,6 +636,8 @@ bar.progress = Progres bar.input = Necesită bar.output = Produce +units.processorcontrol = [lightgray]Controlat de Procesor + bullet.damage = [stat]{0}[lightgray] forță bullet.splashdamage = [stat]{0}[lightgray] forță explozivă ~[stat] {1}[lightgray] pătrate bullet.incendiary = [stat]incendiar @@ -843,7 +850,8 @@ rules.title.enemy = Inamici rules.title.unit = Unități rules.title.experimental = Experimental rules.title.environment = Mediu -rules.lighting = Luminozitate +rules.lighting = Luminozitate Ambientală +rules.enemyLights = Inamicii Luminează rules.fire = Foc rules.explosions = Explozia Deteriorează Blocul/Unitatea rules.ambientlight = Ambient @@ -933,6 +941,7 @@ block.cliff.name = Deal block.sand-boulder.name = Bolovan de Nisip block.grass.name = Iarbă block.slag.name = Zgură +block.space.name = Cosmos block.salt.name = Sare block.salt-wall.name = Perete de Sare block.pebbles.name = Pietricele @@ -1040,7 +1049,7 @@ block.underflow-gate.name = Poartă de Subversare block.silicon-smelter.name = Topitor de Silicon block.phase-weaver.name = Țesătorie de Fază block.pulverizer.name = Pulverizator -block.cryofluidmixer.name = Mixer de Criofluid +block.cryofluid-mixer.name = Mixer de Criofluid block.melter.name = Topitor block.incinerator.name = Incinerator block.spore-press.name = Presă de Spori @@ -1072,6 +1081,7 @@ block.power-source.name = Electricitate Infinită block.unloader.name = Descărcător block.vault.name = Seif block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1198,7 +1208,7 @@ block.kiln.description = Toarnă nisip și plumb în compusul numit metasticlă. block.plastanium-compressor.description = Produce plastaniu din petrol și titan. block.phase-weaver.description = Sintetizează fibră-fază din toriu radioactiv și nisip. Necesită electricitate pt a funcționa. block.alloy-smelter.description = Combină titan, plumb, silicon și cupru pt a produce supra aliaj. -block.cryofluidmixer.description = Amestecă apă și pudră fină de titan în criofluid. Esențial pt folosirea în reactoarele de toriu. +block.cryofluid-mixer.description = Amestecă apă și pudră fină de titan în criofluid. Esențial pt folosirea în reactoarele de toriu. block.blast-mixer.description = Zdrobește și amestecă gramezi de spori cu piratită pt a produce un compus explozibil. block.pyratite-mixer.description = Amestecă niște cărbune, plumb și nisip în inflamabila piratită. block.melter.description = Topește fierul vechi în zgură pt procesare ulterioară sau folosire în armele Wave. @@ -1250,7 +1260,7 @@ block.rotary-pump.description = O pompă avansată. Pompează mai mult lichid da block.thermal-pump.description = Cea mai bună pompă. block.conduit.description = Un bloc de transport al lichidelor. Împinge lichidele în față. Folosit cu pompe și alte conducte. block.pulse-conduit.description = Un bloc avansat de transport al lichidelor. Transportă lichidele mai rapid și stochează mai mult decât conductele standard. -block.plated-conduit.description = Transportă lichidele lafel de rapid precum conductele cu puls, dar este mai rezistent. Nu acceptă fluide din lateral de la altceva în afară de conducte.\nCurge mai puțin. +block.plated-conduit.description = Transportă lichidele lafel de rapid precum conductele cu puls, dar este mai rezistentă. Nu acceptă fluide din lateral de la altceva în afară de conducte.\nLichidul nu se varsă la exterior. block.liquid-router.description = Acceptă lichide dintr-o direcție și le distribuie în alte 3 direcții în mod egal. Poate stoca o anumită cantitate de lichid. Folositor pt a distribui lichidele dintr-o sursă către mai multe destinații. block.liquid-tank.description = Stochează o mare cantitate de lichid. Util pt depozita lichide pt situațiile în care cererea de materiale nu e constantă sau ca extra securitate pt răcirea blocurilor vitale. block.liquid-junction.description = Acționează ca un pod pt două conducte care se intersectează. Util în situația în care se intersectează 2 conducte diferite ce cară divesre lichide către diverse locații. From 7f5561f03718a814cc665ac2f96d54dfa065b856 Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Sun, 11 Oct 2020 17:03:48 -0700 Subject: [PATCH 042/145] add... --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/world/meta/values/AmmoListValue.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 70d7430557..cb365c3528 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -652,6 +652,7 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray] pierce bullet.freezing = [stat]freezing bullet.tarred = [stat]tarred bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier diff --git a/core/src/mindustry/world/meta/values/AmmoListValue.java b/core/src/mindustry/world/meta/values/AmmoListValue.java index d0d8624ea9..457bcca57b 100644 --- a/core/src/mindustry/world/meta/values/AmmoListValue.java +++ b/core/src/mindustry/world/meta/values/AmmoListValue.java @@ -50,6 +50,10 @@ public class AmmoListValue implements StatValue{ sep(bt, Core.bundle.format("bullet.knockback", Strings.fixed(type.knockback, 1))); } + if(type.pierce){ + sep(bt, Core.bundle.format("bullet.pierce", type.pierceCap == -1 ? "infinite" : type.pierceCap)); + } + if((type.status == StatusEffects.burning || type.status == StatusEffects.melting) || type.incendAmount > 0){ sep(bt, "@bullet.incendiary"); } From 966ee53cb99fe92c50ea6442fdbf7faa6a0918fc Mon Sep 17 00:00:00 2001 From: summetdev Date: Mon, 12 Oct 2020 21:13:28 +0300 Subject: [PATCH 043/145] Imports --- desktop/build.gradle | 7 +++---- tools/build.gradle | 11 ++++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/desktop/build.gradle b/desktop/build.gradle index 6b383b958d..628d28147c 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -1,8 +1,7 @@ -import com.badlogicgames.packr.Packr -import com.badlogicgames.packr.PackrConfig +import com.badlogicgames.packr.* -import java.nio.ByteBuffer -import java.security.MessageDigest +import java.nio.* +import java.security.* sourceSets.main.java.srcDirs = [ "src/" ] diff --git a/tools/build.gradle b/tools/build.gradle index 3266834485..692761e80d 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -3,15 +3,12 @@ sourceSets.main.java.srcDirs = ["src/"] import arc.struct.* import arc.graphics.* import arc.packer.* -import arc.util.Tmp +import arc.util.* -import javax.imageio.ImageIO +import javax.imageio.* import java.awt.* -import java.awt.image.BufferedImage -import java.util.List -import java.util.concurrent.ExecutorService -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit +import java.awt.image.* +import java.util.concurrent.* def genFolder = "../core/assets-raw/sprites_out/generated/" def doAntialias = !project.hasProperty("disableAntialias") From 334c8616b0c04b612506d6dee7a7d8e765b2bc28 Mon Sep 17 00:00:00 2001 From: summetdev Date: Mon, 12 Oct 2020 21:26:01 +0300 Subject: [PATCH 044/145] Fixed --- tools/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/build.gradle b/tools/build.gradle index 692761e80d..42b27b3ccb 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -6,7 +6,7 @@ import arc.packer.* import arc.util.* import javax.imageio.* -import java.awt.* +import java.awt.Graphics2D import java.awt.image.* import java.util.concurrent.* From 06877b457e692f024de3f32e939a9a29a8ed3aa2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 12 Oct 2020 15:59:22 -0400 Subject: [PATCH 045/145] Rule selection fixes --- core/src/mindustry/maps/Map.java | 4 +++- .../maps/planet/SerpuloPlanetGenerator.java | 16 ++++++++-------- .../mindustry/ui/dialogs/CustomRulesDialog.java | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/core/src/mindustry/maps/Map.java b/core/src/mindustry/maps/Map.java index edef90cea7..0fdc818139 100644 --- a/core/src/mindustry/maps/Map.java +++ b/core/src/mindustry/maps/Map.java @@ -98,7 +98,9 @@ public class Map implements Comparable, Publishable{ public Rules rules(Rules base){ try{ - Rules result = JsonIO.read(Rules.class, base, tags.get("rules", "{}")); + //this replacement is a MASSIVE hack but it fixes some incorrect overwriting of team-specific rules. + //may need to be tweaked later + Rules result = JsonIO.read(Rules.class, base, tags.get("rules", "{}").replace("teams:{2:{infiniteAmmo:true}},", "")); if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get(); return result; }catch(Exception e){ diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index fab208fd05..ee2f6b437c 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -145,7 +145,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ float constraint = 1.3f; float radius = width / 2f / Mathf.sqrt3; int rooms = rand.random(2, 5); - Seq array = new Seq<>(); + Seq roomseq = new Seq<>(); for(int i = 0; i < rooms; i++){ Tmp.v1.trns(rand.random(360f), rand.random(radius / constraint)); @@ -153,7 +153,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ float ry = (height/2f + Tmp.v1.y); float maxrad = radius - Tmp.v1.len(); float rrad = Math.min(rand.random(9f, maxrad / 2f), 30f); - array.add(new Room((int)rx, (int)ry, (int)rrad)); + roomseq.add(new Room((int)rx, (int)ry, (int)rrad)); } //check positions on the map to place the player spawn. this needs to be in the corner of the map @@ -182,13 +182,13 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ } if(waterTiles <= 4 || (i + angleStep >= 360)){ - array.add(spawn = new Room(cx, cy, rand.random(8, 15))); + roomseq.add(spawn = new Room(cx, cy, rand.random(8, 15))); for(int j = 0; j < enemySpawns; j++){ float enemyOffset = rand.range(60f); Tmp.v1.set(cx - width/2, cy - height/2).rotate(180f + enemyOffset).add(width/2, height/2); Room espawn = new Room((int)Tmp.v1.x, (int)Tmp.v1.y, rand.random(8, 15)); - array.add(espawn); + roomseq.add(espawn); enemies.add(espawn); } @@ -196,16 +196,16 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ } } - for(Room room : array){ + for(Room room : roomseq){ erase(room.x, room.y, room.radius); } int connections = rand.random(Math.max(rooms - 1, 1), rooms + 3); for(int i = 0; i < connections; i++){ - array.random(rand).connect(array.random(rand)); + roomseq.random(rand).connect(roomseq.random(rand)); } - for(Room room : array){ + for(Room room : roomseq){ spawn.connect(room); } @@ -269,7 +269,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ //tar if(floor == Blocks.darksand){ if(Math.abs(0.5f - noise(x - 40, y, 2, 0.7, 80)) > 0.25f && - Math.abs(0.5f - noise(x, y + sector.id*10, 1, 1, 60)) > 0.41f && !(enemies.contains(r -> Mathf.within(x, y, r.x, r.y, 15)))){ + Math.abs(0.5f - noise(x, y + sector.id*10, 1, 1, 60)) > 0.41f && !(roomseq.contains(r -> Mathf.within(x, y, r.x, r.y, 15)))){ floor = Blocks.tar; ore = Blocks.air; } diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index e14629b594..42fac7be72 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -24,8 +24,8 @@ import static arc.util.Time.*; import static mindustry.Vars.*; public class CustomRulesDialog extends BaseDialog{ - private Table main; Rules rules; + private Table main; private Prov resetter; private LoadoutDialog loadoutDialog; private BaseDialog banDialog; @@ -166,7 +166,7 @@ public class CustomRulesDialog extends BaseDialog{ title("@rules.title.enemy"); check("@rules.attack", b -> rules.attackMode = b, () -> rules.attackMode); - check("@rules.buildai", b -> rules.waveTeam.rules().ai = b, () -> rules.waveTeam.rules().ai); + check("@rules.buildai", b -> rules.teams.get(rules.waveTeam).ai = rules.teams.get(rules.waveTeam).infiniteResources = b, () -> rules.teams.get(rules.waveTeam).ai); number("@rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f * tilesize, () -> Math.min(rules.enemyCoreBuildRadius / tilesize, 200)); title("@rules.title.environment"); From 24d295a924a9c90beb3351100db392d1bc00e7d1 Mon Sep 17 00:00:00 2001 From: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Date: Mon, 12 Oct 2020 17:57:00 -0700 Subject: [PATCH 046/145] add infinitepierce + bugfixes --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/world/meta/values/AmmoListValue.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index cb365c3528..b001ad4cd4 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -653,6 +653,7 @@ bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback bullet.pierce = [stat]{0}[lightgray] pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]freezing bullet.tarred = [stat]tarred bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier diff --git a/core/src/mindustry/world/meta/values/AmmoListValue.java b/core/src/mindustry/world/meta/values/AmmoListValue.java index 457bcca57b..359b958a96 100644 --- a/core/src/mindustry/world/meta/values/AmmoListValue.java +++ b/core/src/mindustry/world/meta/values/AmmoListValue.java @@ -50,8 +50,8 @@ public class AmmoListValue implements StatValue{ sep(bt, Core.bundle.format("bullet.knockback", Strings.fixed(type.knockback, 1))); } - if(type.pierce){ - sep(bt, Core.bundle.format("bullet.pierce", type.pierceCap == -1 ? "infinite" : type.pierceCap)); + if(type.pierce || type.pierceCap != -1){ + sep(bt, type.pierceCap == -1 ? "@bullet.infinitepierce" : Core.bundle.format("bullet.pierce", type.pierceCap)); } if((type.status == StatusEffects.burning || type.status == StatusEffects.melting) || type.incendAmount > 0){ From 4364851cf4050324a482118a5508fd6060777af4 Mon Sep 17 00:00:00 2001 From: Sunny Kim <58885089+sk7725@users.noreply.github.com> Date: Tue, 13 Oct 2020 22:29:55 +0900 Subject: [PATCH 047/145] let buildTable accept `closeSelect` --- core/src/mindustry/world/blocks/ItemSelection.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/ItemSelection.java b/core/src/mindustry/world/blocks/ItemSelection.java index 921808eb08..f2c0b73084 100644 --- a/core/src/mindustry/world/blocks/ItemSelection.java +++ b/core/src/mindustry/world/blocks/ItemSelection.java @@ -15,6 +15,10 @@ public class ItemSelection{ private static float scrollPos = 0f; public static void buildTable(Table table, Seq items, Prov holder, Cons consumer){ + buildTable(table, items, holder, consumer, true); + } + + public static void buildTable(Table table, Seq items, Prov holder, Cons consumer, boolean closeSelect){ ButtonGroup group = new ButtonGroup<>(); group.setMinCheckCount(0); @@ -26,7 +30,9 @@ public class ItemSelection{ for(T item : items){ if(!item.unlockedNow()) continue; - ImageButton button = cont.button(Tex.whiteui, Styles.clearToggleTransi, 24, () -> control.input.frag.config.hideConfig()).group(group).get(); + ImageButton button = cont.button(Tex.whiteui, Styles.clearToggleTransi, 24, () -> { + if(closeSelect) control.input.frag.config.hideConfig(); + }).group(group).get(); button.changed(() -> consumer.get(button.isChecked() ? item : null)); button.getStyle().imageUp = new TextureRegionDrawable(item.icon(Cicon.small)); button.update(() -> button.setChecked(holder.get() == item)); From b2c236fe7bf391f71b1583f171318979e24b0dc7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 10:53:40 -0400 Subject: [PATCH 048/145] Difficulty settings for sector presets --- core/src/mindustry/content/SectorPresets.java | 15 +++-- core/src/mindustry/game/DefaultWaves.java | 65 ++++++++++++++----- core/src/mindustry/type/Planet.java | 2 +- core/src/mindustry/type/SectorPreset.java | 2 + 4 files changed, 63 insertions(+), 21 deletions(-) diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index 3b76795c1d..ff1f36bc22 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -18,47 +18,54 @@ public class SectorPresets implements ContentList{ groundZero = new SectorPreset("groundZero", serpulo, 15){{ alwaysUnlocked = true; captureWave = 10; + difficulty = 0; }}; saltFlats = new SectorPreset("saltFlats", serpulo, 101){{ - + difficulty = 5; }}; frozenForest = new SectorPreset("frozenForest", serpulo, 86){{ captureWave = 40; + difficulty = 1; }}; craters = new SectorPreset("craters", serpulo, 18){{ captureWave = 40; + difficulty = 2; }}; ruinousShores = new SectorPreset("ruinousShores", serpulo, 19){{ captureWave = 40; + difficulty = 3; }}; stainedMountains = new SectorPreset("stainedMountains", serpulo, 20){{ captureWave = 30; + difficulty = 2; }}; fungalPass = new SectorPreset("fungalPass", serpulo, 21){{ - + difficulty = 4; }}; overgrowth = new SectorPreset("overgrowth", serpulo, 22){{ - + difficulty = 5; }}; tarFields = new SectorPreset("tarFields", serpulo, 23){{ captureWave = 40; + difficulty = 5; }}; desolateRift = new SectorPreset("desolateRift", serpulo, 123){{ captureWave = 40; + difficulty = 8; }}; - nuclearComplex = new SectorPreset("nuclearComplex", serpulo, 130){{ captureWave = 60; + difficulty = 7; }}; } } diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/DefaultWaves.java index 53a0bfa99c..0ce0d3a6a2 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/DefaultWaves.java @@ -248,6 +248,11 @@ public class DefaultWaves{ //TODO move elsewhere public static Seq generate(float difficulty){ + return generate(new Rand(), difficulty); + } + + //TODO move elsewhere + public static Seq generate(Rand rand, float difficulty){ UnitType[][] species = { {dagger, mace, fortress, scepter, reign}, {nova, pulsar, quasar, vela, corvus}, @@ -263,7 +268,7 @@ public class DefaultWaves{ Seq out = new Seq<>(); //max reasonable wave, after which everything gets boring - int cap = 200; + int cap = 150; float shieldStart = 30, shieldsPerWave = 20 + difficulty*30f; @@ -274,18 +279,18 @@ public class DefaultWaves{ for(int i = start; i < cap;){ int f = i; - int next = Mathf.random(8, 16); + int next = rand.random(8, 16); float shieldAmount = Math.max((i - shieldStart) * shieldsPerWave, 0); - int space = start == 0 ? 1 : Mathf.random(1, 2); + int space = start == 0 ? 1 : rand.random(1, 2); //main progression out.add(new SpawnGroup(curSpecies[Math.min(curTier, curSpecies.length - 1)]){{ unitAmount = f == 0 ? 1 : 10; begin = f; end = f + next >= cap ? never : f + next; - max = 20; - unitScaling = Mathf.random(1f, 2f); + max = 14; + unitScaling = rand.random(1f, 2f); shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; @@ -295,16 +300,16 @@ public class DefaultWaves{ out.add(new SpawnGroup(curSpecies[Math.min(curTier, curSpecies.length - 1)]){{ unitAmount = 6; begin = f + next; - end = f + next + Mathf.random(8, 12); - max = 14; - unitScaling = Mathf.random(2f); - spacing = Mathf.random(2, 3); + end = f + next + rand.random(8, 12); + max = 11; + unitScaling = rand.random(2f); + spacing = rand.random(2, 3); shields = shieldAmount; shieldScaling = shieldsPerWave; }}); i += next; - if(curTier < 3 || Mathf.chance(0.2)){ + if(curTier < 3 || rand.chance(0.2)){ curTier ++; } @@ -312,7 +317,7 @@ public class DefaultWaves{ curTier = Math.min(curTier, 3); //small chance to switch species - if(Mathf.chance(0.3)){ + if(rand.chance(0.3)){ curSpecies = Structs.random(species); } } @@ -320,15 +325,15 @@ public class DefaultWaves{ createProgression.get(0); - int step = 5 + Mathf.random(3); + int step = 5 + rand.random(3); while(step <= cap){ createProgression.get(step); - step += (int)(Mathf.random(12, 25) * Mathf.lerp(1f, 0.4f, difficulty)); + step += (int)(rand.random(12, 25) * Mathf.lerp(1f, 0.4f, difficulty)); } - int bossWave = (int)(Mathf.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty)); - int bossSpacing = (int)(Mathf.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); + int bossWave = (int)(rand.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty)); + int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); //main boss progression out.add(new SpawnGroup(Structs.random(species)[4]){{ @@ -339,17 +344,45 @@ public class DefaultWaves{ max = 16; unitScaling = bossSpacing; shieldScaling = shieldsPerWave; + effect = StatusEffects.boss; }}); //alt boss progression out.add(new SpawnGroup(Structs.random(species)[4]){{ unitAmount = 1; - begin = bossWave + Mathf.random(3, 5) * bossSpacing; + begin = bossWave + rand.random(3, 5) * bossSpacing; spacing = bossSpacing; end = never; max = 16; unitScaling = bossSpacing; shieldScaling = shieldsPerWave; + effect = StatusEffects.boss; + }}); + + int finalBossStart = 120 + rand.random(30); + + //final boss waves + out.add(new SpawnGroup(Structs.random(species)[4]){{ + unitAmount = 1; + begin = finalBossStart; + spacing = bossSpacing/2; + end = never; + unitScaling = bossSpacing; + shields = 500; + shieldScaling = shieldsPerWave * 4; + effect = StatusEffects.boss; + }}); + + //final boss waves (alt) + out.add(new SpawnGroup(Structs.random(species)[4]){{ + unitAmount = 1; + begin = finalBossStart + 15; + spacing = bossSpacing/2; + end = never; + unitScaling = bossSpacing; + shields = 500; + shieldScaling = shieldsPerWave * 4; + effect = StatusEffects.boss; }}); //shift back waves on higher difficulty for a harder start diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 8c4b40b4c2..50a0b847e6 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -185,7 +185,7 @@ public class Planet extends UnlockableContent{ sum += 2f; } - sector.baseCoverage = Mathf.clamp(sum / 5f); + sector.baseCoverage = sector.preset == null ? Mathf.clamp(sum / 5f) : Mathf.clamp(sector.preset.difficulty / 10f); } } diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index c38ea7ad9f..923d023b25 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -16,6 +16,8 @@ public class SectorPreset extends UnlockableContent{ public int captureWave = 0; public Cons rules = rules -> rules.winWave = captureWave; + /** Difficulty, 0-10. */ + public float difficulty; public SectorPreset(String name, Planet planet, int sector){ super(name); From ca875876cdaaec6acee9c45e152944280e787329 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 11:18:30 -0400 Subject: [PATCH 049/145] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 77aed771ce..5a37b2f0ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=0605d29e603131326e519775758954e83866096a +archash=dfcb9ab4b9f9bb977ed3cff4b8a16c22e076368a From 5d76dd0e2fa7f2297e84aefd926a146747049886 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 15:56:00 -0400 Subject: [PATCH 050/145] Fixed #2929 --- core/src/mindustry/ai/BlockIndexer.java | 16 +++++---- core/src/mindustry/ai/types/LogicAI.java | 2 +- core/src/mindustry/entities/Units.java | 18 ++++------ .../mindustry/entities/comp/BulletComp.java | 14 +++----- core/src/mindustry/game/Team.java | 6 ++-- core/src/mindustry/game/Teams.java | 35 +++++++++++++++---- core/src/mindustry/logic/LExecutor.java | 8 +++-- 7 files changed, 58 insertions(+), 41 deletions(-) diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index 63151e0d11..6092c83910 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -10,6 +10,7 @@ import arc.util.*; import mindustry.content.*; import mindustry.game.EventType.*; import mindustry.game.*; +import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; @@ -205,13 +206,14 @@ public class BlockIndexer{ /** Get all enemy blocks with a flag. */ public Seq getEnemy(Team team, BlockFlag type){ returnArray.clear(); - for(Team enemy : team.enemies()){ - if(state.teams.isActive(enemy)){ - TileArray set = getFlagged(enemy)[type.ordinal()]; - if(set != null){ - for(Tile tile : set){ - returnArray.add(tile); - } + Seq data = state.teams.present; + for(int i = 0; i < data.size; i++){ + Team enemy = data.items[i].team; + if(enemy == team) continue; + TileArray set = getFlagged(enemy)[type.ordinal()]; + if(set != null){ + for(Tile tile : set){ + returnArray.add(tile); } } } diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index a7b606b932..76b81794a2 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -14,7 +14,7 @@ import static mindustry.Vars.*; public class LogicAI extends AIController{ /** Minimum delay between item transfers. */ - public static final float transferDelay = 60f * 2f; + public static final float transferDelay = 60f * 3f; /** Time after which the unit resets its controlled and reverts to a normal unit. */ public static final float logicControlTimeout = 10f * 60f; diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index c6f592f30f..1babb75e33 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -3,9 +3,11 @@ package mindustry.entities; import arc.*; import arc.func.*; import arc.math.geom.*; +import arc.struct.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.game.*; +import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; @@ -308,20 +310,12 @@ public class Units{ /** Iterates over all units that are enemies of this team. */ public static void nearbyEnemies(Team team, float x, float y, float width, float height, Cons cons){ - if(team.active()){ - for(Team enemy : state.teams.enemiesOf(team)){ - nearby(enemy, x, y, width, height, cons); - } - }else{ - //inactive teams have no cache, check everything - //TODO cache all teams with units OR blocks - for(Team other : Team.all){ - if(other != team && other.data().unitCount > 0){ - nearby(other, x, y, width, height, cons); - } + Seq data = state.teams.present; + for(int i = 0; i < data.size; i++){ + if(data.items[i].team != team){ + nearby(data.items[i].team, x, y, width, height, cons); } } - } /** Iterates over all units that are enemies of this team. */ diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 4deb7cc9dc..0eea7d84fe 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -9,6 +9,7 @@ import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.entities.bullet.*; import mindustry.game.*; +import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -28,15 +29,10 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw @Override public void getCollisions(Cons consumer){ - if(team.active()){ - for(Team team : team.enemies()){ - consumer.get(team.data().tree()); - } - }else{ - for(Team other : Team.all){ - if(other != team && team.data().unitCount > 0){ - consumer.get(team.data().tree()); - } + Seq data = state.teams.present; + for(int i = 0; i < data.size; i++){ + if(data.items[i].team != team){ + consumer.get(data.items[i].tree); } } } diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index 1ab345dc10..83061d20e8 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -83,9 +83,9 @@ public class Team implements Comparable{ return state.rules.teams.get(this); } - public Team[] enemies(){ - return state.teams.enemiesOf(this); - } + //public Team[] enemies(){ + // return state.teams.enemiesOf(this); + //} public TeamData data(){ return state.teams.get(this); diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 5e38b43eb2..f10194b80f 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -23,7 +23,9 @@ public class Teams{ /** Maps team IDs to team data. */ private TeamData[] map = new TeamData[256]; /** Active teams. */ - private Seq active = new Seq<>(); + public Seq active = new Seq<>(); + /** Teams with block or unit presence. */ + public Seq present = new Seq<>(TeamData.class); public Teams(){ active.add(get(Team.crux)); @@ -31,7 +33,7 @@ public class Teams{ @Nullable public CoreBuild closestEnemyCore(float x, float y, Team team){ - for(Team enemy : team.enemies()){ + for(Team enemy : team.data().coreEnemies){ CoreBuild tile = Geometry.findClosest(x, y, enemy.cores()); if(tile != null) return tile; } @@ -43,9 +45,9 @@ public class Teams{ return Geometry.findClosest(x, y, get(team).cores); } - public Team[] enemiesOf(Team team){ - return get(team).enemies; - } + //public Team[] enemiesOf(Team team){ + // return get(team).enemies; + //} public boolean eachEnemyCore(Team team, Boolf ret){ for(TeamData data : active){ @@ -145,9 +147,12 @@ public class Teams{ } public void updateTeamStats(){ + present.clear(); + for(Team team : Team.all){ TeamData data = team.data(); + data.presentFlag = false; data.unitCount = 0; data.units.clear(); if(data.tree != null){ @@ -168,10 +173,14 @@ public class Teams{ } } + //update presence flag. + Groups.build.each( b -> b.team.data().presentFlag = true); + for(Unit unit : Groups.unit){ TeamData data = unit.team.data(); data.tree().insert(unit); data.units.add(unit); + data.presentFlag = true; if(data.unitsByType == null || data.unitsByType.length <= unit.type().id){ data.unitsByType = new Seq[content.units().size]; @@ -185,6 +194,15 @@ public class Teams{ count(unit); } + + //update presence of each team. + for(Team team : Team.all){ + TeamData data = team.data(); + + if(data.presentFlag || data.active()){ + present.add(data); + } + } } private void updateEnemies(){ @@ -201,7 +219,7 @@ public class Teams{ } } - data.enemies = enemies.toArray(Team.class); + data.coreEnemies = enemies.toArray(Team.class); } } @@ -210,7 +228,10 @@ public class Teams{ public final Team team; public final BaseAI ai; - public Team[] enemies = {}; + private boolean presentFlag; + + /** Enemies with cores or spawn points. */ + public Team[] coreEnemies = {}; /** Planned blocks for drones. This is usually only blocks that have been broken. */ public Queue blocks = new Queue<>(); /** The current command for units to follow. */ diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 3bcfaf46ee..a8c5de8a9d 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -10,6 +10,7 @@ import mindustry.content.*; import mindustry.ctype.*; import mindustry.entities.*; import mindustry.game.*; +import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; @@ -674,8 +675,11 @@ public class LExecutor{ bestValue = 0; if(enemies){ - for(Team enemy : state.teams.enemiesOf(r.team())){ - find(r, range, sortDir, enemy); + Seq data = state.teams.present; + for(int i = 0; i < data.size; i++){ + if(data.items[i].team != r.team()){ + find(r, range, sortDir, data.items[i].team); + } } }else{ find(r, range, sortDir, r.team()); From b1acc90739c1ad8cc5cf485ff190df1c06b44953 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 16:13:18 -0400 Subject: [PATCH 051/145] Cleanup --- core/src/mindustry/game/Team.java | 4 ---- core/src/mindustry/game/Teams.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index 83061d20e8..1234c7b2d7 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -83,10 +83,6 @@ public class Team implements Comparable{ return state.rules.teams.get(this); } - //public Team[] enemies(){ - // return state.teams.enemiesOf(this); - //} - public TeamData data(){ return state.teams.get(this); } diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index f10194b80f..aa390c5d26 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -45,10 +45,6 @@ public class Teams{ return Geometry.findClosest(x, y, get(team).cores); } - //public Team[] enemiesOf(Team team){ - // return get(team).enemies; - //} - public boolean eachEnemyCore(Team team, Boolf ret){ for(TeamData data : active){ if(areEnemies(team, data.team)){ From 4bf2b3b43e160160ec6bcc12730e5c1c90c372db Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 16:18:11 -0400 Subject: [PATCH 052/145] Now in beta --- build.gradle | 2 +- core/assets/bundles/bundle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index e2a00358b6..e54f6b56b2 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ allprojects{ ext{ versionNumber = '6' - if(!project.hasProperty("versionModifier")) versionModifier = 'alpha' + if(!project.hasProperty("versionModifier")) versionModifier = 'beta' if(!project.hasProperty("versionType")) versionType = 'official' appName = 'Mindustry' steamworksVersion = '891ed912791e01fe9ee6237a6497e5212b85c256' diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index d76a792534..9581bc3778 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -20,7 +20,7 @@ gameover = Game Over gameover.pvp = The[accent] {0}[] team is victorious! highscore = [accent]New highscore! copied = Copied. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- SFX and music are unfinished/missing\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. +indev.popup = [accent]v6[] is currently in [accent]beta[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- SFX and music are unfinished/missing\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. indev.notready = This part of the game isn't ready yet load.sound = Sounds From 37bb48076dede8c777d9d0db9b20cddc68db8f05 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 17:41:47 -0400 Subject: [PATCH 053/145] Fixed #2931 --- core/src/mindustry/entities/comp/BulletComp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 0eea7d84fe..d9aa007c5e 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -32,7 +32,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw Seq data = state.teams.present; for(int i = 0; i < data.size; i++){ if(data.items[i].team != team){ - consumer.get(data.items[i].tree); + consumer.get(data.items[i].tree()); } } } From a8b55c27e8b037034cd56d367c88e02c02bda1bd Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 18:09:46 -0400 Subject: [PATCH 054/145] x --- core/assets/bundles/bundle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 9581bc3778..39fefc4c90 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -652,7 +652,7 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback -bullet.pierce = [stat]{0}[lightgray] pierce +bullet.pierce = [stat]{0}[lightgray]x pierce bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]freezing bullet.tarred = [stat]tarred From 1554fd039490106c14bf4f0d302605c53e2d2c0d Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 18:50:18 -0400 Subject: [PATCH 055/145] Planet selection for mods --- core/assets/bundles/bundle.properties | 4 +++ core/src/mindustry/type/Planet.java | 4 ++- .../mindustry/ui/dialogs/PlanetDialog.java | 21 +++++++++++++++ .../android/en-US/changelogs/29670.txt | 9 +++++++ .../{in_ID => in}/full_description.txt | 26 +++++++++---------- .../{in_ID => in}/short_description.txt | 0 .../android/{in_ID => in}/summary.txt | 0 .../metadata/android/{in_ID => in}/title.txt | 0 .../android/in_ID/changelogs/29659.txt | 10 ------- 9 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/29670.txt rename fastlane/metadata/android/{in_ID => in}/full_description.txt (98%) rename fastlane/metadata/android/{in_ID => in}/short_description.txt (100%) rename fastlane/metadata/android/{in_ID => in}/summary.txt (100%) rename fastlane/metadata/android/{in_ID => in}/title.txt (100%) delete mode 100644 fastlane/metadata/android/in_ID/changelogs/29659.txt diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 39fefc4c90..4a854f5c71 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -522,6 +522,10 @@ sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +planet.serpulo.name = Serpulo +#TODO better name +planet.sun.name = Sun + #NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Ground Zero sector.craters.name = The Craters diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 50a0b847e6..6153aa4721 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -19,7 +19,7 @@ import static mindustry.Vars.*; public class Planet extends UnlockableContent{ /** Default spacing between planet orbits in world units. */ - private static final float orbitSpacing = 6f; + private static final float orbitSpacing = 8f; /** intersect() temp var. */ private static final Vec3 intersectResult = new Vec3(); /** Mesh used for rendering. Created on load() - will be null on the server! */ @@ -46,6 +46,8 @@ public class Planet extends UnlockableContent{ public float sectorApproxRadius; /** Whether this planet is tidally locked relative to its parent - see https://en.wikipedia.org/wiki/Tidal_locking */ public boolean tidalLock = false; + /** Whether or not this planet is listed in the planet access UI. **/ + public boolean accessible = true; /** The default starting sector displayed to the map dialog. */ public int startSector = 0; /** Whether the bloom render effect is enabled. */ diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index dd63a1afeb..4d24bbe8b8 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -266,6 +266,27 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ //TODO localize t.top(); t.label(() -> mode == select ? "@sectors.select" : mode == launch ? "Select Launch Sector" : "").style(Styles.outlineLabel).color(Pal.accent); + }), + new Table(t -> { + t.right(); + if(content.planets().count(p -> p.accessible) > 1) { + t.table(Styles.black6, pt -> { + //TODO localize + pt.add("[accent]Planets[]"); + pt.row(); + pt.image().growX().height(4f).pad(6f).color(Pal.accent); + pt.row(); + for(int i = 0; i < content.planets().size; i++){ + Planet planet = content.planets().get(i); + if(planet.accessible){ + pt.button(planet.localizedName, Styles.clearTogglet, () -> { + renderer.planets.planet = planet; + }).width(200).height(40).growX().update(bb -> bb.setChecked(renderer.planets.planet == planet)); + pt.row(); + } + } + }); + } })).grow(); } diff --git a/fastlane/metadata/android/en-US/changelogs/29670.txt b/fastlane/metadata/android/en-US/changelogs/29670.txt new file mode 100644 index 0000000000..3a1e1f7b28 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29670.txt @@ -0,0 +1,9 @@ +Mindustry 6.0 is now in beta. This means most mechanics outside of the campaign have been more or less finalized. Any significant new content is unlikely to be added. + +- Added Foreshadow turret +- Added Tsunami turret (initial implementation by Slava0135, sprite by EyeOfDarkness) +- Added logic unit control system +- Added space floor block +- Added button to center map to editor +- Added rule setting for enemy lights +- Changed armored conduits to not leak diff --git a/fastlane/metadata/android/in_ID/full_description.txt b/fastlane/metadata/android/in/full_description.txt similarity index 98% rename from fastlane/metadata/android/in_ID/full_description.txt rename to fastlane/metadata/android/in/full_description.txt index b8e2e86092..2597618097 100644 --- a/fastlane/metadata/android/in_ID/full_description.txt +++ b/fastlane/metadata/android/in/full_description.txt @@ -1,14 +1,14 @@ -Buat rantai pasokan pengantar berjalan yang rumit untuk memasukkan amunisi ke menara Anda, menghasilkan bahan yang akan digunakan untuk membangun, dan mempertahankan bangunan Anda dari gelombang musuh. Bermain dengan teman-teman Anda dalam game co-op multipemain lintas platform, atau tantang mereka dalam pertandingan PvP berbasis tim. - -Fitur: -- 24 peta bawaan -- Kampanye, lengkap dengan pohon teknologi dan area yang dapat dibuka -- 4 bos gelombang yang kuat untuk dikalahkan -- Sistem transportasi energi, cairan dan barang -- 19 jenis drone, mech, dan kapal -- 120+ blok teknologi untuk dikuasai -- 75+ blok lingkungan yang berbeda -- Multipemain lintas platform melalui jaringan lokal atau server khusus -- Aturan permainan khusus: Ubah biaya blok, statistik musuh, item awal, waktu gelombang, dan lainnya -- Editor yang andal, dengan alat untuk menghasilkan sumber daya, medan, dekorasi, dan menerapkan simetri ke peta secara acak +Buat rantai pasokan pengantar berjalan yang rumit untuk memasukkan amunisi ke menara Anda, menghasilkan bahan yang akan digunakan untuk membangun, dan mempertahankan bangunan Anda dari gelombang musuh. Bermain dengan teman-teman Anda dalam game co-op multipemain lintas platform, atau tantang mereka dalam pertandingan PvP berbasis tim. + +Fitur: +- 24 peta bawaan +- Kampanye, lengkap dengan pohon teknologi dan area yang dapat dibuka +- 4 bos gelombang yang kuat untuk dikalahkan +- Sistem transportasi energi, cairan dan barang +- 19 jenis drone, mech, dan kapal +- 120+ blok teknologi untuk dikuasai +- 75+ blok lingkungan yang berbeda +- Multipemain lintas platform melalui jaringan lokal atau server khusus +- Aturan permainan khusus: Ubah biaya blok, statistik musuh, item awal, waktu gelombang, dan lainnya +- Editor yang andal, dengan alat untuk menghasilkan sumber daya, medan, dekorasi, dan menerapkan simetri ke peta secara acak - Tata letak gelombang peta yang dapat disesuaikan \ No newline at end of file diff --git a/fastlane/metadata/android/in_ID/short_description.txt b/fastlane/metadata/android/in/short_description.txt similarity index 100% rename from fastlane/metadata/android/in_ID/short_description.txt rename to fastlane/metadata/android/in/short_description.txt diff --git a/fastlane/metadata/android/in_ID/summary.txt b/fastlane/metadata/android/in/summary.txt similarity index 100% rename from fastlane/metadata/android/in_ID/summary.txt rename to fastlane/metadata/android/in/summary.txt diff --git a/fastlane/metadata/android/in_ID/title.txt b/fastlane/metadata/android/in/title.txt similarity index 100% rename from fastlane/metadata/android/in_ID/title.txt rename to fastlane/metadata/android/in/title.txt diff --git a/fastlane/metadata/android/in_ID/changelogs/29659.txt b/fastlane/metadata/android/in_ID/changelogs/29659.txt deleted file mode 100644 index 1999d52935..0000000000 --- a/fastlane/metadata/android/in_ID/changelogs/29659.txt +++ /dev/null @@ -1,10 +0,0 @@ -Ini adalah rilis alpha v6.0 pertama, kampanye besar-besaran dan pembaruan konten. -Meskipun versi ini telah diuji dalam multipemain, mungkin masih ada banyak masalah. Seperti biasa, laporkan masalah di Github. - -Ada terlalu banyak perubahan untuk dicantumkan di sini, tetapi bagian pentingnya meliputi: - -- Sistem produksi unit baru, dengan peningkatan bertahap -- Unit langsung dan kontrol menara -- Unit diganti namanya dan diperbarui -- Blok dan unit baru -- Satuan angkatan laut dan unit berbentuk serangga lainnya \ No newline at end of file From bea9deb38618fd9bb41091312e15f515250538d1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 13 Oct 2020 19:37:45 -0400 Subject: [PATCH 056/145] Removed planet switch debug code --- core/src/mindustry/content/Planets.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 873ba1c054..e07203313c 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -15,6 +15,7 @@ public class Planets implements ContentList{ public void load(){ sun = new Planet("sun", null, 0, 2){{ bloom = true; + accessible = false; //lightColor = Color.valueOf("f4ee8e"); From 6b4a7d025b20f6d2cb7b8722204fa7b9a316fdfa Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 08:49:05 -0400 Subject: [PATCH 057/145] Fixed #2938 / Fixed #2936 --- core/src/mindustry/ai/Pathfinder.java | 2 +- desktop/src/mindustry/desktop/DesktopLauncher.java | 4 +++- jitpack.yml | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 jitpack.yml diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index c24cecd49c..6d6e5fc8e9 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -86,7 +86,7 @@ public class Pathfinder implements Runnable{ } //special preset which may help speed things up; this is optional - preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); + //preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); start(); }); diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index bd9ec3e81b..76b72e3ca3 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -227,7 +227,9 @@ public class DesktopLauncher extends ClientLauncher{ @Override public void updateLobby(){ - SVars.net.updateLobby(); + if(SVars.net != null){ + SVars.net.updateLobby(); + } } @Override diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 0000000000..b2c514bc30 --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,2 @@ +jdk: + - openjdk14 From d6301103965542aa242fb3700d7a6e578424f26f Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 09:08:03 -0400 Subject: [PATCH 058/145] JITPack version check --- core/src/mindustry/ai/Pathfinder.java | 3 --- settings.gradle | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index 6d6e5fc8e9..4a951d3448 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -85,9 +85,6 @@ public class Pathfinder implements Runnable{ tiles[tile.x][tile.y] = packTile(tile); } - //special preset which may help speed things up; this is optional - //preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); - start(); }); diff --git a/settings.gradle b/settings.gradle index 52b0980311..265a6a5024 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal()){ +if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal() && System.getenv("JITPACK") != "true"){ throw new GradleException("!!! YOU MUST USE JAVA 14 OR ABOVE TO COMPILE AND RUN MINDUSTRY !!! Read the README. Your version: ${System.properties["java.version"]}") } From 2b435c2600b72adc61a20fd1ed3ec3e74bb8aa9f Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 09:13:29 -0400 Subject: [PATCH 059/145] UnitType serializer set --- core/src/mindustry/io/JsonIO.java | 12 ++++++++++++ settings.gradle | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index 39c3a1a821..eb3815ba76 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -165,6 +165,18 @@ public class JsonIO{ } }); + json.setSerializer(UnitType.class, new Serializer<>(){ + @Override + public void write(Json json, UnitType object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public UnitType read(Json json, JsonValue jsonData, Class type){ + return Vars.content.getByName(ContentType.unit, jsonData.asString()); + } + }); + json.setSerializer(ItemStack.class, new Serializer<>(){ @Override public void write(Json json, ItemStack object, Class knownType){ diff --git a/settings.gradle b/settings.gradle index 265a6a5024..52b0980311 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal() && System.getenv("JITPACK") != "true"){ +if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal()){ throw new GradleException("!!! YOU MUST USE JAVA 14 OR ABOVE TO COMPILE AND RUN MINDUSTRY !!! Read the README. Your version: ${System.properties["java.version"]}") } From fb0179da95308206f6c6e450039ed1d5a7da0109 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 09:15:47 -0400 Subject: [PATCH 060/145] Attempting jitpack Java 14 workaround --- jitpack.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jitpack.yml b/jitpack.yml index b2c514bc30..e1dfa83815 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,2 +1,4 @@ -jdk: - - openjdk14 +before_install: + - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh + - source install-jdk.sh --feature 14 + - jshell --version \ No newline at end of file From fa2cdb752a670bf19505273a57860e3c406ad9d7 Mon Sep 17 00:00:00 2001 From: Sharlotte <60801210+sharlotte-mobile@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:46:29 +0900 Subject: [PATCH 061/145] changed private -> public of checkRadius method when i try to change color of forceField by using draw method , the Mindustry is crashed because of that private method. --- core/src/mindustry/entities/abilities/ForceFieldAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/abilities/ForceFieldAbility.java b/core/src/mindustry/entities/abilities/ForceFieldAbility.java index fa9fa5e2c8..d341191a74 100644 --- a/core/src/mindustry/entities/abilities/ForceFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ForceFieldAbility.java @@ -94,7 +94,7 @@ public class ForceFieldAbility extends Ability{ } } - private void checkRadius(Unit unit){ + public void checkRadius(Unit unit){ //timer2 is used to store radius scale as an effect realRad = radiusScale * radius; } From 86c2fe880585bab8824356d7ed2e11a41df2b5e0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 13:44:20 -0400 Subject: [PATCH 062/145] too many things to list --- core/assets/bundles/bundle.properties | 3 +- core/assets/maps/craters.msav | Bin 11971 -> 11955 bytes core/src/mindustry/Vars.java | 2 - core/src/mindustry/ai/Pathfinder.java | 4 +- core/src/mindustry/ai/WaveSpawner.java | 16 +- core/src/mindustry/ai/types/FormationAI.java | 25 ++ core/src/mindustry/ai/types/MinerAI.java | 4 +- core/src/mindustry/ai/types/RepairAI.java | 6 +- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/content/Bullets.java | 2 +- core/src/mindustry/core/Logic.java | 65 +++- .../mindustry/ctype/UnlockableContent.java | 9 +- core/src/mindustry/editor/WaveGraph.java | 2 +- .../mindustry/entities/bullet/BulletType.java | 9 + .../bullet/ContinuousLaserBulletType.java | 6 + .../src/mindustry/entities/comp/UnitComp.java | 2 + .../mindustry/entities/comp/WeaponsComp.java | 2 +- core/src/mindustry/game/DefaultWaves.java | 4 +- core/src/mindustry/game/Rules.java | 2 + core/src/mindustry/game/SectorInfo.java | 8 + core/src/mindustry/game/SpawnGroup.java | 11 +- core/src/mindustry/game/Team.java | 6 +- core/src/mindustry/game/Universe.java | 30 +- core/src/mindustry/io/TypeIO.java | 10 + core/src/mindustry/logic/LAccess.java | 2 + core/src/mindustry/logic/LAssembler.java | 1 + core/src/mindustry/logic/LCanvas.java | 2 +- core/src/mindustry/logic/LExecutor.java | 8 +- core/src/mindustry/maps/SectorDamage.java | 331 +++++++++++++++++- core/src/mindustry/mod/Mods.java | 2 +- core/src/mindustry/net/NetworkIO.java | 16 + core/src/mindustry/type/Sector.java | 28 +- core/src/mindustry/type/UnitType.java | 15 +- core/src/mindustry/ui/dialogs/HostDialog.java | 12 +- core/src/mindustry/ui/dialogs/JoinDialog.java | 12 +- .../ui/dialogs/LaunchLoadoutDialog.java | 12 +- .../mindustry/ui/dialogs/PausedDialog.java | 19 +- .../mindustry/ui/dialogs/PlanetDialog.java | 14 +- .../mindustry/ui/dialogs/ResearchDialog.java | 11 +- .../ui/dialogs/SettingsMenuDialog.java | 1 - .../mindustry/ui/fragments/HudFragment.java | 2 +- .../ui/fragments/MinimapFragment.java | 10 +- .../world/blocks/defense/ForceProjector.java | 8 +- .../world/blocks/defense/MendProjector.java | 8 +- .../blocks/defense/OverdriveProjector.java | 8 +- .../blocks/defense/turrets/ItemTurret.java | 1 - .../blocks/defense/turrets/LiquidTurret.java | 5 +- .../blocks/defense/turrets/PowerTurret.java | 10 + .../world/blocks/defense/turrets/Turret.java | 3 + .../world/blocks/logic/SwitchBlock.java | 5 + gradle.properties | 2 +- tests/src/test/java/SectorTests.java | 4 +- 52 files changed, 665 insertions(+), 117 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 4a854f5c71..1253de6a13 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -478,7 +478,7 @@ requirement.research = Research {0} requirement.capture = Capture {0} bestwave = [lightgray]Best Wave: {0} launch.text = Launch -campaign.multiplayer = While playing multiplayer in campaign, you can only research using items from [accent]your[] sectors, [scarlet]not[] the host's sector that you are on right now.\n\nTo get items to [accent]your[] sectors in multiplayer, use a [accent]launch pad[]. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout #TODO @@ -695,7 +695,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Fluids setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] diff --git a/core/assets/maps/craters.msav b/core/assets/maps/craters.msav index b10b354bf009d65f7a94e7eda8c95064d58f0599..04c1aa73d36f10b689c7335883863b6ac7412757 100644 GIT binary patch delta 11429 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 E02sTY6951J delta 11487 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�#pC5AO4ko;X6>z{!ymhJy`1KPyNMr-c>N3ww?RZ zcVXPBHg;))G*R`HHEc30*MeW|&o;J_x&LcoPF3lM@s<0p zGB1AhOpEux{xgoLF1F1&cbvui5_rBxTKtU>dvJgM%kQD3-kU#~f2&>6{$Qq3C(|U2 zMN^x;`o4bdqA;~MO|JgDZCkOu6L(*La6)CWMLEmOm;;3o$BuVYOFcZ`bo$h?4c!)e z1rye(+wSmO>T^=~kZsT=ou&}uJRL5ZnJ?wt>g-*;XFAx)#4O2q)x{$leXaGwWDfgu zrN)-uJ~u^78?%^peC9e8C>^-$Lb3fMbTm3m(`=M;DfUK6qbAfX|Wm2moQePy9+NDpNEUi{7$n#sYIsfK|u#X?a z3v4&^S}vSCUro%c&%km^bgO~kx}Wm}#A#y6*9)`c0C%;xRt=C_;Cn;wB-4DQ91N zU}W{We1B12zvlM2O-U)Pf7PcjU-9?;^;7>;+798grQ7UVE2ae;Yya?<>zn$Ay|4Y* zYQO*Ex-|R1&kOkq_TDe{FZjLMf^Spok-`o0vn}Kv|Ij$p{@7F|-abLb=yO|<>Q-6y z`acsczP8vW)KlM96X$rpyu!}8;`!$67r_BC`x@UDcfEd<$+|rD+H%M3?;n3Q+SguD z^fNcy7W?r*-oxr}PRG_yY=_n^i0^-;v*v<*{>1pG z>iJ)D{&uzRPq}vRbAoj#<8`i0JERUQdA8E0v`nu4A;a_R6WN>(AMyO)e)4`>Rj9@K zl#Kg_b069!|2MyAmXx~szChfiKsWZ#FPk&@>tb)-TJ-9m=#({&9z;6s3p!HFdHw0O z!l@1SVz+cI?)vVt;U8yyhL zL)9u$wR{_FTQ}4{pTAoASgl*(TQNo5`nbTu&UHI_v*)`1u|Hrc!aVo5+?&-Lzd7x= z*$>>R$a;8i+W!6>b8VESENqT;`6GDhq2M9w$^-kqU-(yB(OOe8{X?^iMOzL3SA(RI zJx%|TYu9vr{$%mqc}u;-f4)Ig78FY#KVEPz z`o;YB3u5~fDN~-BA>bIWA(uuldo?ttTnu( zsW4ai)U&^asoC#X?(bHBlKKuI zQJBY3`QXPAjb(kB((e6=dxIrEKa5X}m)X<)db;7QbvLiQF57)>>of6V*F{eTX|7}Z z^CQYdMqlx*<(%2G?rmE6vsUKjo*Si4rvBAo`1*U#rpYt4G(&usJbuAwpJ09b+f}7$ zarYK)Z~Rx_c60Ad%PHrTuSB+3mApUyXpeiw^z=fRZ(0S*KFFqKf8Ts+9_ImzIkI<- zn>zBEG#hRgIB+MpY(AI4al^i+0?&9Ri)ky?htK)%%@NM`;Lg6?PIZaN5?9u@2jnjg z;F~UbJ%6J4dz-$4_ZGg|TP=Bi=bwE&U+$=Dq&`Xd?))MD%IRqJ!gs60U(e}%67c@> zi^&sbWuZ;H)I2>CWx==eZ<10{%hbL7>aG$W&U$x!?_qsX%k;HKqV|={ zr?|kF{w5pq*taY@D}NPxv2(i*_Q29niBhimZ=q09)A0G z?wVLXxuZMNFS32ID4+aRTfd&|C-c7a!g;3~6*haetgqNqP%XaUzvN)Nb;oEg)RwVDgsG}Kuytd=%o4OFQZ37vhw*Y?Xd7+u?cXma`m%eGhD2 z`=9!8yR?US;wICexWc-%6Z4}Zmq`>S-kW`IkF-ZR*YyCmScjSj_kWD%u1+w{s8)XQ z`gnla`UPk574N9>pBFvyIO}52hdSQp%TMs1@Oc#a{;$!w^V-pi8_$UC{l0$D-JL%s zS8Pa4eY`ySx6CQ`g?10_v-~<&`sA(ADJwVIxC3>Jr3)pYjSu spawns = new Seq<>(); private boolean spawning = false; private boolean any = false; + private Tile firstSpawn = null; public WaveSpawner(){ Events.on(WorldLoadEvent.class, e -> reset()); } + @Nullable + public Tile getFirstSpawn(){ + firstSpawn = null; + eachGroundSpawn((cx, cy) -> { + firstSpawn = world.tile(cx, cy); + }); + return firstSpawn; + } + public int countSpawns(){ return spawns.size; } @@ -47,7 +57,7 @@ public class WaveSpawner{ for(SpawnGroup group : state.rules.spawns){ if(group.type == null) continue; - int spawned = group.getUnitsSpawned(state.wave - 1); + int spawned = group.getSpawned(state.wave - 1); if(group.type.flying){ float spread = margin / 1.5f; @@ -89,6 +99,10 @@ public class WaveSpawner{ Time.run(40f, () -> Damage.damage(state.rules.waveTeam, x, y, state.rules.dropZoneRadius, 99999999f, true)); } + public void eachGroundSpawn(Intc2 cons){ + eachGroundSpawn((x, y, shock) -> cons.get(world.toTile(x), world.toTile(y))); + } + private void eachGroundSpawn(SpawnConsumer cons){ for(Tile spawn : spawns){ cons.accept(spawn.worldx(), spawn.worldy(), true); diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index cbe12a565e..d774719cab 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -7,6 +7,7 @@ import mindustry.ai.formations.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; +import mindustry.world.blocks.storage.CoreBlock.*; public class FormationAI extends AIController implements FormationMember{ public Unit leader; @@ -57,6 +58,30 @@ public class FormationAI extends AIController implements FormationMember{ }else{ unit.moveAt(realtarget.sub(unit).limit(type.speed)); } + + if(unit instanceof Minerc mine && leader instanceof Minerc com){ + if(mine.validMine(com.mineTile())){ + mine.mineTile(com.mineTile()); + + CoreBuild core = unit.team.core(); + + if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type().range) && !unit.acceptsItem(com.mineTile().drop())){ + if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ + Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); + + unit.clearItem(); + } + } + }else{ + mine.mineTile(null); + } + + } + + if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){ + build.clearBuilding(); + build.addBuild(com.buildPlan()); + } } @Override diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index a03481768f..d19b8e2c0a 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -24,7 +24,9 @@ public class MinerAI extends AIController{ } if(mining){ - targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && miner.canMine(i), i -> core.items.get(i)); + if(timer.get(timerTarget2, 60 * 4) || targetItem == null){ + targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && miner.canMine(i), i -> core.items.get(i)); + } //core full of the target item, do nothing if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){ diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index 5f021ae828..cb60a3bfc9 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -23,7 +23,7 @@ public class RepairAI extends AIController{ } if(target != null){ - if(!target.within(unit, unit.type().range * 0.65f)){ + if(!target.within(unit, unit.type().range * 0.65f) && target instanceof Building){ moveTo(target, unit.type().range * 0.65f); } @@ -33,12 +33,14 @@ public class RepairAI extends AIController{ @Override protected void updateTargeting(){ - 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 == null){ super.updateTargeting(); + }else{ + this.target = target; } } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 05ed572f7e..d18b011bea 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1713,7 +1713,7 @@ public class Blocks implements ContentList{ despawnEffect = Fx.instBomb; trailSpacing = 20f; damage = 1350; - tileDamageMultiplier = 0.5f; + tileDamageMultiplier = 0.3f; speed = brange; hitShake = 6f; ammoMultiplier = 1f; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 221dc44e8d..e2d42c0ef0 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -510,7 +510,7 @@ public class Bullets implements ContentList{ speed = 4f; knockback = 1.3f; puddleSize = 8f; - damage = 6f; + damage = 5f; drag = 0.001f; ammoMultiplier = 2f; statusDuration = 60f * 4f; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index df536552df..4d95b22820 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -5,10 +5,12 @@ import arc.math.*; import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.core.GameState.*; +import mindustry.ctype.*; import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.game.Teams.*; import mindustry.gen.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.type.Weather.*; import mindustry.world.*; @@ -84,20 +86,41 @@ public class Logic implements ApplicationListener{ Events.on(LaunchItemEvent.class, e -> state.secinfo.handleItemExport(e.stack)); //when loading a 'damaged' sector, propagate the damage - Events.on(WorldLoadEvent.class, e -> { + Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ - long seconds = state.rules.sector.getSecondsPassed(); CoreBuild core = state.rules.defaultTeam.core(); - //THE WAVES NEVER END - state.rules.waves = true; - //apply fractional damage based on how many turns have passed for this sector - //float turnsPassed = seconds / (turnDuration / 60f); + //how much wave time has passed + int wavesPassed = state.rules.sector.getWavesPassed(); - //TODO sector damage disabled for now - //if(state.rules.sector.hasWaves() && turnsPassed > 0 && state.rules.sector.hasBase()){ - // SectorDamage.apply(turnsPassed / sectorDestructionTurns); - //} + //reset passed waves + state.rules.sector.setWavesPassed(0); + + //wave has passed, remove all enemies, they are assumed to be dead + if(wavesPassed > 0){ + Groups.unit.each(u -> { + if(u.team == state.rules.waveTeam){ + u.remove(); + } + }); + } + + if(wavesPassed > 0){ + //simulate wave counter moving forward + state.wave += wavesPassed; + state.wavetime = state.rules.waveSpacing; + } + + //reset damage display + state.rules.sector.setDamage(0f); + + //simulate damage if applicable + if(wavesPassed > 0){ + SectorDamage.applyCalculatedDamage(wavesPassed); + } + + //waves depend on attack status. + state.rules.waves = state.rules.sector.isUnderAttack(); //add resources based on turns passed if(state.rules.sector.save != null && core != null){ @@ -121,7 +144,9 @@ public class Logic implements ApplicationListener{ state.rules.sector.setSecondsPassed(0); } + }); + Events.on(WorldLoadEvent.class, e -> { //enable infinite ammo for wave team by default state.rules.waveTeam.rules().infiniteAmmo = true; @@ -129,6 +154,13 @@ public class Logic implements ApplicationListener{ Core.settings.manualSave(); }); + //sync research + Events.on(ResearchEvent.class, e -> { + if(net.server()){ + Call.researched(e.content); + } + }); + } /** Adds starting items, resets wave time, and sets state to playing. */ @@ -199,8 +231,6 @@ public class Logic implements ApplicationListener{ state.rules.waves = false; } - //TODO capturing is disabled - /* //if there's a "win" wave and no enemies are present, win automatically if(state.rules.waves && state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()){ //the sector has been conquered - waves get disabled @@ -213,7 +243,7 @@ public class Logic implements ApplicationListener{ if(!headless){ control.saves.saveSector(state.rules.sector); } - }*/ + } }else{ if(!state.rules.attackMode && state.teams.playerCores().size == 0 && !state.gameOver){ state.gameOver = true; @@ -266,6 +296,15 @@ public class Logic implements ApplicationListener{ netClient.setQuiet(); } + //called when the remote server researches something + @Remote + public static void researched(Content content){ + if(!(content instanceof UnlockableContent u)) return; + + state.rules.researched.add(u.name); + ui.hudfrag.showUnlock(u); + } + @Override public void dispose(){ //save the settings before quitting diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index f6e6d0a2dc..21b72374ec 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -95,16 +95,17 @@ public abstract class UnlockableContent extends MappableContent{ } } - public final boolean unlocked(){ + public boolean unlocked(){ + if(net.client()) return state.rules.researched.contains(name); return unlocked || alwaysUnlocked; } /** @return whether this content is unlocked, or the player is in a custom (non-campaign) game. */ - public final boolean unlockedNow(){ - return unlocked || alwaysUnlocked || !state.isCampaign(); + public boolean unlockedNow(){ + return unlocked() || !state.isCampaign(); } - public final boolean locked(){ + public boolean locked(){ return !unlocked(); } } diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 14b2416085..2436c62c2a 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -154,7 +154,7 @@ public class WaveGraph extends Table{ int sum = 0; for(SpawnGroup spawn : groups){ - int spawned = spawn.getUnitsSpawned(i); + int spawned = spawn.getSpawned(i); values[index][spawn.type.id] += spawned; if(spawned > 0){ used.add(spawn.type); diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 0c3a605f1b..aafbb42504 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -137,6 +137,15 @@ public abstract class BulletType extends Content{ this(1f, 1f); } + /** @return estimated damage per shot. this can be very inaccurate. */ + public float estimateDPS(){ + float sum = damage + splashDamage*0.75f; + if(fragBullet != null && fragBullet != this){ + sum += fragBullet.estimateDPS() * fragBullets / 2f; + } + return sum; + } + /** Returns maximum distance the bullet this bullet type has can travel. */ public float range(){ return Math.max(speed * lifetime * (1f - drag), range); diff --git a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java index a862671040..4c52105b26 100644 --- a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java +++ b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java @@ -44,6 +44,12 @@ public class ContinuousLaserBulletType extends BulletType{ this(0); } + @Override + public float estimateDPS(){ + //assume firing duration is about 100 by default, may not be accurate there's no way of knowing in this method + return damage * 100f / 5f; + } + @Override public float range(){ return length; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 1cf0f7e216..605e2d1d1e 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -88,6 +88,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case rotation -> rotation; case health -> health; case maxHealth -> maxHealth; + case ammo -> state.rules.unitAmmo ? type.ammoCapacity : ammo; + case ammoCapacity -> type.ammoCapacity; case x -> x; case y -> y; case team -> team.id; diff --git a/core/src/mindustry/entities/comp/WeaponsComp.java b/core/src/mindustry/entities/comp/WeaponsComp.java index d891dbc1e4..dec0105c14 100644 --- a/core/src/mindustry/entities/comp/WeaponsComp.java +++ b/core/src/mindustry/entities/comp/WeaponsComp.java @@ -166,7 +166,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ Weapon weapon = mount.weapon; float baseX = this.x, baseY = this.y; - boolean delay = weapon.firstShotDelay > 0f; + boolean delay = weapon.firstShotDelay + weapon.shotDelay > 0f; (delay ? weapon.chargeSound : weapon.shootSound).at(x, y, Mathf.random(0.8f, 1.0f)); diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/DefaultWaves.java index 0ce0d3a6a2..12d1d28dfe 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/DefaultWaves.java @@ -290,7 +290,7 @@ public class DefaultWaves{ begin = f; end = f + next >= cap ? never : f + next; max = 14; - unitScaling = rand.random(1f, 2f); + unitScaling = rand.random(1f, 3f); shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; @@ -329,7 +329,7 @@ public class DefaultWaves{ while(step <= cap){ createProgression.get(step); - step += (int)(rand.random(12, 25) * Mathf.lerp(1f, 0.4f, difficulty)); + step += (int)(rand.random(13, 25) * Mathf.lerp(1f, 0.5f, difficulty)); } int bossWave = (int)(rand.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty)); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index a101fe8592..329e69c92a 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -82,6 +82,8 @@ public class Rules{ public Seq weather = new Seq<>(1); /** Blocks that cannot be placed. */ public ObjectSet bannedBlocks = new ObjectSet<>(); + /** Unlocked content names. Only used in multiplayer when the campaign is enabled. */ + public ObjectSet researched = new ObjectSet<>(); /** Whether ambient lighting is enabled. */ public boolean lighting = false; /** Whether enemy lighting is visible. diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index b66dc5bf95..8e7f73a256 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -5,6 +5,7 @@ import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.ctype.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.storage.CoreBlock.*; @@ -38,6 +39,10 @@ public class SectorInfo{ public @Nullable Sector destination; /** Resources known to occur at this sector. */ public Seq resources = new Seq<>(); + + /** Special variables for simulation. */ + public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope; + /** Time spent at this sector. Do not use unless you know what you're doing. */ public transient float internalTimeSpent; @@ -99,6 +104,9 @@ public class SectorInfo{ //update sector's internal time spent counter state.rules.sector.setTimeSpent(internalTimeSpent); + state.rules.sector.setUnderAttack(state.rules.waves); + + SectorDamage.writeParameters(this); } /** Update averages of various stats, updates some special sector logic. diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index f9ae7c74d3..92ba6811ea 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -52,8 +52,8 @@ public class SpawnGroup implements Serializable{ //serialization use only } - /** Returns the amount of units spawned on a specific wave. */ - public int getUnitsSpawned(int wave){ + /** @return amount of units spawned on a specific wave. */ + public int getSpawned(int wave){ if(spacing == 0) spacing = 1; if(wave < begin || wave > end || (wave - begin) % spacing != 0){ return 0; @@ -61,6 +61,11 @@ public class SpawnGroup implements Serializable{ return Math.min(unitAmount + (int)(((wave - begin) / spacing) / unitScaling), max); } + /** @return amount of shields each unit has at a specific wave. */ + public float getShield(int wave){ + return Math.max(shields + shieldScaling*(wave - begin), 0); + } + /** * Creates a unit, and assigns correct values based on this group's data. * This method does not add() the unit. @@ -76,7 +81,7 @@ public class SpawnGroup implements Serializable{ unit.addItem(items.item, items.amount); } - unit.shield(Math.max(shields + shieldScaling*(wave - begin), 0)); + unit.shield = getShield(wave); return unit; } diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index 1234c7b2d7..cbed06f4e7 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -31,9 +31,9 @@ public class Team implements Comparable{ Color.valueOf("ffd37f"), Color.valueOf("eab678"), Color.valueOf("d4816b")), crux = new Team(2, "crux", Color.valueOf("f25555"), Color.valueOf("fc8e6c"), Color.valueOf("f25555"), Color.valueOf("a04553")), - green = new Team(3, "green", Color.valueOf("4dd98b")), - purple = new Team(4, "purple", Color.valueOf("9a4bdf")), - blue = new Team(5, "blue", Color.royal.cpy()); + green = new Team(3, "green", Color.valueOf("54d67d")), + purple = new Team(4, "purple", Color.valueOf("995bb0")), + blue = new Team(5, "blue", Color.valueOf("5a4deb")); static{ Mathf.rand.setSeed(8); diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 892b93b731..82b53ce604 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -6,6 +6,7 @@ import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.game.EventType.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.world.blocks.storage.*; @@ -55,7 +56,7 @@ public class Universe{ /** @return sectors attacked on the current planet, minus the ones that are being played on right now. */ public Seq getAttacked(Planet planet){ - return planet.sectors.select(s -> s.hasWaves() && s.hasBase() && !s.isBeingPlayed() && s.getSecondsPassed() > 1); + return planet.sectors.select(s -> s.isUnderAttack() && s.hasBase() && !s.isBeingPlayed() && s.getWavesPassed() > 0); } /** Update planet rotations, global time and relevant state. */ @@ -138,11 +139,23 @@ public class Universe{ //increment seconds passed for this sector by the time that just passed with this turn if(!sector.isBeingPlayed()){ - sector.setSecondsPassed(sector.getSecondsPassed() + actuallyPassed); + int secPassed = sector.getSecondsPassed() + actuallyPassed; + + sector.setSecondsPassed(secPassed); + + boolean attacked = sector.isUnderAttack(); + + int wavesPassed = (int)(secPassed*60f / sector.save.meta.rules.waveSpacing); + float damage = attacked ? SectorDamage.getDamage(sector.save.meta.secinfo, sector.save.meta.rules.waveSpacing, sector.save.meta.wave, wavesPassed) : 0f; + + if(attacked){ + sector.setWavesPassed(wavesPassed); + } + + sector.setDamage(damage); - //TODO sector damage disabled for now //check if the sector has been attacked too many times... - /*if(sector.hasBase() && sector.hasWaves() && sector.getSecondsPassed() * 60f > turnDuration * sectorDestructionTurns){ + if(attacked && damage >= 0.999f){ //fire event for losing the sector Events.fire(new SectorLoseEvent(sector)); @@ -152,7 +165,14 @@ public class Universe{ //clear recieved sector.setExtraItems(new ItemSeq()); sector.save = null; - }*/ + sector.setDamage(0f); + }else if(attacked && wavesPassed > 0 && sector.save.meta.wave + wavesPassed >= sector.save.meta.rules.winWave && !sector.hasEnemyBase()){ + //autocapture the sector + sector.setUnderAttack(false); + + //fire the event + Events.fire(new SectorCaptureEvent(state.rules.sector)); + } } //export to another sector diff --git a/core/src/mindustry/io/TypeIO.java b/core/src/mindustry/io/TypeIO.java index 669cd65d53..bba4ffeb0a 100644 --- a/core/src/mindustry/io/TypeIO.java +++ b/core/src/mindustry/io/TypeIO.java @@ -450,6 +450,16 @@ public class TypeIO{ return color.set(read.i()); } + public static void writeContent(Writes write, Content cont){ + write.b(cont.getContentType().ordinal()); + write.s(cont.id); + } + + public static Content readContent(Reads read){ + byte id = read.b(); + return content.getByID(ContentType.all[id], read.s()); + } + public static void writeLiquid(Writes write, Liquid liquid){ write.s(liquid == null ? -1 : liquid.id); } diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index 5dc881a778..0d678554d1 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -15,6 +15,8 @@ public enum LAccess{ powerNetCapacity, powerNetIn, powerNetOut, + ammo, + ammoCapacity, health, maxHealth, heat, diff --git a/core/src/mindustry/logic/LAssembler.java b/core/src/mindustry/logic/LAssembler.java index 4f72d121aa..f353a8c38c 100644 --- a/core/src/mindustry/logic/LAssembler.java +++ b/core/src/mindustry/logic/LAssembler.java @@ -191,6 +191,7 @@ public class LAssembler{ try{ double value = Double.parseDouble(symbol); + if(Double.isNaN(value) || Double.isInfinite(value)) value = 0; //this creates a hidden const variable with the specified value String key = "___" + value; return putConst(key, value).id; diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index ed98bee8ff..e16aab6621 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -305,7 +305,7 @@ public class LCanvas extends Table{ statements.finishLayout(); } }); - }).growX(); + }).growX().height(38); row(); diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index a8c5de8a9d..fee780e145 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -110,12 +110,12 @@ public class LExecutor{ public double num(int index){ Var v = vars[index]; - return v.isobj ? v.objval != null ? 1 : 0 : v.numval; + return v.isobj ? v.objval != null ? 1 : 0 : Double.isNaN(v.numval) || Double.isInfinite(v.numval) ? 0 : v.numval; } public float numf(int index){ Var v = vars[index]; - return v.isobj ? v.objval != null ? 1 : 0 : (float)v.numval; + return v.isobj ? v.objval != null ? 1 : 0 : Double.isNaN(v.numval) || Double.isInfinite(v.numval) ? 0 : (float)v.numval; } public int numi(int index){ @@ -129,7 +129,7 @@ public class LExecutor{ public void setnum(int index, double value){ Var v = vars[index]; if(v.constant) return; - v.numval = value; + v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : 0; v.objval = null; v.isobj = false; } @@ -737,7 +737,7 @@ public class LExecutor{ v.objval = f.objval; v.isobj = true; }else{ - v.numval = f.numval; + v.numval = Double.isNaN(f.numval) || Double.isInfinite(f.numval) ? 0 : f.numval; v.isobj = false; } } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 5f4e267d74..b8afb42688 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -3,11 +3,18 @@ package mindustry.maps; import arc.math.*; import arc.math.geom.*; import arc.struct.*; +import arc.util.*; import mindustry.ai.*; import mindustry.content.*; import mindustry.entities.*; +import mindustry.entities.abilities.*; +import mindustry.game.*; import mindustry.gen.*; +import mindustry.logic.*; import mindustry.world.*; +import mindustry.world.blocks.defense.*; +import mindustry.world.blocks.defense.turrets.*; +import mindustry.world.blocks.defense.turrets.Turret.*; import mindustry.world.blocks.storage.*; import static mindustry.Vars.*; @@ -15,6 +22,264 @@ import static mindustry.Vars.*; public class SectorDamage{ //direct damage is for testing only private static final boolean direct = false, rubble = true; + private static final int maxWavesSimulated = 50; + + /** @return calculated capture progress of the enemy */ + public static float getDamage(SectorInfo info, float waveSpace, int wave, int wavesPassed){ + float health = info.sumHealth; + + //this approach is O(n), it simulates every wave passing. + //other approaches can assume all the waves come as one, but that's not as fair. + if(wavesPassed > 0){ + int waveBegin = wave; + int waveEnd = wave + wavesPassed; + + //do not simulate every single wave if there's too many + if(wavesPassed > maxWavesSimulated){ + waveBegin = waveEnd - maxWavesSimulated; + } + + for(int i = waveBegin; i <= waveEnd; i++){ + + float efficiency = health / info.sumHealth; + float dps = info.sumDps * efficiency; + float rps = info.sumRps * efficiency; + + float enemyDps = info.waveDpsBase + info.waveDpsSlope * (i); + float enemyHealth = info.waveHealthBase + info.waveHealthSlope * (i); + + //happens due to certain regressions + if(enemyHealth < 0 || enemyDps < 0) continue; + + //calculate time to destroy both sides + float timeDestroyEnemy = dps <= 0.0001f ? Float.POSITIVE_INFINITY : enemyHealth / dps; //if dps == 0, this is infinity + float timeDestroyBase = health / (enemyDps - rps); //if regen > enemyDps this is negative + + //sector is lost, enemy took too long. + if(timeDestroyEnemy > timeDestroyBase){ + health = 0f; + break; + } + + //otherwise, the enemy shoots for timeDestroyEnemy seconds, so calculate damage taken + float damageTaken = timeDestroyEnemy * (enemyDps - rps); + + //damage the base. + health -= damageTaken; + + //regen health after wave. + health = Math.min(health + rps / 60f * waveSpace, info.sumHealth); + } + } + + return 1f - Mathf.clamp(health / info.sumHealth); + } + + /** Applies wave damage based on sector parameters. */ + public static void applyCalculatedDamage(int wavesPassed){ + //calculate base damage fraction + float damage = getDamage(state.secinfo, state.rules.waveSpacing, state.wave, wavesPassed); + + //scaled damage has a power component to make it seem a little more realistic (as systems fail, enemy capturing gets easier and easier) + float scaled = Mathf.pow(damage, 1.5f); + + //apply damage to units + float unitDamage = damage * state.secinfo.sumHealth; + Tile spawn = spawner.getFirstSpawn(); + + //damage only units near the spawn point + if(spawn != null){ + Seq allies = new Seq<>(); + for(Unit ally : Groups.unit){ + if(ally.team == state.rules.defaultTeam && ally.within(spawn, state.rules.dropZoneRadius * 2.5f)){ + allies.add(ally); + } + } + + allies.sort(u -> u.dst2(spawn)); + + //damage units one by one, not uniformly + for(var u : allies){ + if(u.health < unitDamage){ + u.remove(); + unitDamage -= u.health; + }else{ + u.health -= unitDamage; + break; + } + } + } + + //finally apply scaled damage + apply(scaled); + } + + /** Calculates damage simulation parameters before a game is saved. */ + public static void writeParameters(SectorInfo info){ + Building core = state.rules.defaultTeam.core(); + Seq spawns = new Seq<>(); + spawner.eachGroundSpawn((x, y) -> spawns.add(world.tile(x, y))); + + if(core == null || spawns.isEmpty()) return; + + Tile start = spawns.first(); + + Time.mark(); + var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore); + Seq path = new Seq<>(); + boolean found = false; + + if(field != null && field.weights != null){ + int[][] weights = field.weights; + int count = 0; + Tile current = start; + while(count < world.width() * world.height()){ + int minCost = Integer.MAX_VALUE; + int cx = current.x, cy = current.y; + for(Point2 p : Geometry.d4){ + int nx = cx + p.x, ny = cy + p.y; + + Tile other = world.tile(nx, ny); + if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){ + minCost = weights[nx][ny]; + current = other; + } + } + + path.add(current); + + if(current.build == core){ + found = true; + break; + } + + count ++; + } + } + + if(!found){ + path = Astar.pathfind(start, core.tile, SectorDamage::cost, t -> !(t.block().isStatic() && t.solid())); + } + + //create sparse tile array for fast range query + int sparseSkip = 6; + //TODO if this is slow, use a quadtree + Seq sparse = new Seq<>(path.size / sparseSkip + 1); + + for(int i = 0; i < path.size; i++){ + if(i % sparseSkip == 0){ + sparse.add(path.get(i)); + } + } + + //regen is in health per second + //dps is per second + float sumHealth = 0f, sumRps = 0f, sumDps = 0f; + float totalPathBuild = 0; + + //first, calculate the total health of blocks in the path + + for(Tile t : path){ + int radius = 2; + + //radius is square. + for(int dx = -radius; dx <= radius; dx++){ + for(int dy = -radius; dy <= radius; dy++){ + int wx = dx + t.x, wy = dy + t.y; + if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height()){ + Tile tile = world.rawTile(wx, wy); + + if(tile.build != null && tile.team() == state.rules.defaultTeam){ + //health is divided by block size, because multiblocks are counted multiple times. + sumHealth += tile.build.health / tile.block().size; + totalPathBuild += 1f / tile.block().size; + } + } + } + } + } + + float avgHealth = totalPathBuild <= 1 ? sumHealth : sumHealth / totalPathBuild; + + //block dps + regen + extra health/shields + for(Building build : Groups.build){ + float e = build.efficiency(); + if(e > 0.08f){ + if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range()))){ + if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){ + sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e; + } + + if(build.block instanceof MendProjector m){ + sumRps += m.healPercent / m.reload * avgHealth * 60f / 100f * e; + } + + if(build.block instanceof ForceProjector f){ + sumHealth += f.breakage * e; + sumRps += 1f * e; + } + } + } + } + + float curEnemyHealth = 0f, curEnemyDps = 0f; + + //unit regen + health + dps + for(Unit unit : Groups.unit){ + //skip player + if(unit.isPlayer()) continue; + + if(unit.team == state.rules.defaultTeam){ + sumHealth += unit.health + unit.shield; + sumDps += unit.type().dpsEstimate; + if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ + sumRps += h.amount / h.reload * 60f; + } + }else{ + curEnemyDps += unit.type().dpsEstimate; + curEnemyHealth += unit.health; + } + } + + //calculate DPS and health for the next few waves and store in list + var reg = new LinearRegression(); + Seq waveDps = new Seq<>(), waveHealth = new Seq<>(); + + for(int wave = state.wave, i = 0; i < 3; wave += (1 + i++)){ + float sumWaveDps = 0f, sumWaveHealth = 0f; + + //first wave has to take into account current dps + if(wave == state.wave){ + sumWaveDps += curEnemyDps; + sumWaveHealth += curEnemyHealth; + } + + for(SpawnGroup group : state.rules.spawns){ + int spawned = group.getSpawned(wave); + if(spawned <= 0) continue; + sumWaveHealth += spawned * (group.getShield(wave) + group.type.health); + sumWaveDps += spawned * group.type.dpsEstimate; + } + waveDps.add(new Vec2(wave, sumWaveDps)); + waveHealth.add(new Vec2(wave, sumWaveHealth)); + } + + //calculate linear regression of the wave data and store it + reg.calculate(waveHealth); + info.waveHealthBase = reg.intercept; + info.waveHealthSlope = reg.slope; + + reg.calculate(waveDps); + info.waveDpsBase = reg.intercept; + info.waveDpsSlope = reg.slope; + + info.sumHealth = sumHealth; + info.sumDps = sumDps; + info.sumRps = sumRps; + + //finally, find an equation to put it all together and produce a 0-1 number + //due to the way most defenses are structured, this number will likely need a ^4 power or so + } public static void apply(float fraction){ Tiles tiles = world.tiles; @@ -35,22 +300,62 @@ public class SectorDamage{ if(core != null && !frontier.isEmpty()){ for(Tile spawner : frontier){ //find path from spawn to core - //TODO this is broken Seq path = Astar.pathfind(spawner, core.tile, SectorDamage::cost, t -> !(t.block().isStatic() && t.solid())); - int amount = (int)(path.size * fraction); - for(int i = 0; i < amount; i++){ - Tile t = path.get(i); - Geometry.circle(t.x, t.y, tiles.width, tiles.height, 5, (cx, cy) -> { - Tile other = tiles.getn(cx, cy); - //just remove all the buildings in the way - as long as they're not cores! - if(other.build != null && other.team() == state.rules.defaultTeam && !(other.block() instanceof CoreBlock)){ - if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ - Effect.rubble(other.build.x, other.build.y, other.block().size); - } + Seq removal = new Seq<>(); - other.remove(); + int radius = 3; + + //only penetrate a certain % by health, not by distance + float totalHealth = path.sumf(t -> { + float s = 0; + for(int dx = -radius; dx <= radius; dx++){ + for(int dy = -radius; dy <= radius; dy++){ + int wx = dx + t.x, wy = dy + t.y; + if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height() && Mathf.within(dx, dy, radius)){ + Tile other = world.rawTile(wx, wy); + s += other.team() == state.rules.defaultTeam ? other.build.health / other.block().size : 0f; + } } - }); + } + return s; + }); + float targetHealth = totalHealth * fraction; + float healthCount = 0; + + out: + for(int i = 0; i < path.size && healthCount < targetHealth; i++){ + Tile t = path.get(i); + + for(int dx = -radius; dx <= radius; dx++){ + for(int dy = -radius; dy <= radius; dy++){ + int wx = dx + t.x, wy = dy + t.y; + if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height() && Mathf.within(dx, dy, radius)){ + Tile other = world.rawTile(wx, wy); + + //just remove all the buildings in the way - as long as they're not cores + if(other.build != null && other.team() == state.rules.defaultTeam && !(other.block() instanceof CoreBlock)){ + if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ + Effect.rubble(other.build.x, other.build.y, other.block().size); + } + + //since the whole block is removed, count the whole health + healthCount += other.build.health; + + removal.add(other.build); + + if(healthCount >= targetHealth){ + break out; + } + } + } + } + } + } + + for(Building r : removal){ + if(r.tile.build == r){ + r.tile.remove(); + } } } } diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 12c33c7480..a596f3e7ae 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -629,7 +629,7 @@ public class Mods implements Loadable{ } //make sure the main class exists before loading it; if it doesn't just don't put it there - if(mainFile.exists()){ + if(mainFile.exists() && Core.settings.getBool("mod-" + meta.name.toLowerCase().replace(" ", "-") + "-enabled", true)){ //mobile versions don't support class mods if(ios){ throw new IllegalArgumentException("Java class mods are not supported on iOS."); diff --git a/core/src/mindustry/net/NetworkIO.java b/core/src/mindustry/net/NetworkIO.java index 3a32d5cb6b..acaf9f9640 100644 --- a/core/src/mindustry/net/NetworkIO.java +++ b/core/src/mindustry/net/NetworkIO.java @@ -3,7 +3,9 @@ package mindustry.net; import arc.*; import arc.util.*; import arc.util.io.*; +import mindustry.content.*; import mindustry.core.*; +import mindustry.ctype.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.io.*; @@ -21,6 +23,18 @@ public class NetworkIO{ public static void writeWorld(Player player, OutputStream os){ try(DataOutputStream stream = new DataOutputStream(os)){ + //write all researched content to rules if hosting + if(state.isCampaign()){ + state.rules.researched.clear(); + for(ContentType type : ContentType.all){ + for(Content c : content.getBy(type)){ + if(c instanceof UnlockableContent u && u.unlocked() && TechTree.get(u) != null){ + state.rules.researched.add(u.name); + } + } + } + } + stream.writeUTF(JsonIO.write(state.rules)); SaveIO.getSaveWriter().writeStringMap(stream, state.map.tags); @@ -44,6 +58,8 @@ public class NetworkIO{ state.rules = JsonIO.read(Rules.class, stream.readUTF()); state.map = new Map(SaveIO.getSaveWriter().readStringMap(stream)); + Log.info("READ RULES: @", state.rules.researched); + state.wave = stream.readInt(); state.wavetime = stream.readFloat(); diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 4c1df28945..f692293309 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -103,9 +103,22 @@ public class Sector{ return save != null && !save.meta.rules.waves; } - /** @return whether waves are present - if true, any bases here will be attacked. */ - public boolean hasWaves(){ - return save != null && save.meta.rules.waves; + /** @return whether waves are present - if true, any bases here will be attacked. + * only applicable to sectors with active player bases. */ + public boolean isUnderAttack(){ + return hasBase() && Core.settings.getBool(key("under-attack"), true); + } + + public void setUnderAttack(boolean underAttack){ + Core.settings.put(key("under-attack"), underAttack); + } + + public void setWavesPassed(int waves){ + put("waves-passed", waves); + } + + public int getWavesPassed(){ + return Core.settings.getInt(key("waves-passed"), 0); } public boolean hasSave(){ @@ -238,6 +251,15 @@ public class Sector{ return Core.settings.getInt(key("spawn-position"), Point2.pack(world.width() / 2, world.height() / 2)); } + /** @return sector damage from enemy, 0 to 1 */ + public float getDamage(){ + return Core.settings.getFloat(key("damage"), 0f); + } + + public void setDamage(float damage){ + put("damage", damage); + } + /** @return time spent in this sector this turn in ticks. */ public float getTimeSpent(){ //return currently counting time spent if being played on diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 661e735fa7..68fdd6837e 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -79,6 +79,8 @@ public class UnitType extends UnlockableContent{ public int mineTier = -1; public float buildSpeed = 1f, mineSpeed = 1f; + /** This is a VERY ROUGH estimate of unit DPS. */ + public float dpsEstimate = -1; public float clipSize = -1; public boolean canDrown = true; public float engineOffset = 5f, engineSize = 2.5f; @@ -266,6 +268,17 @@ public class UnitType extends UnlockableContent{ ammoCapacity = Math.max(1, (int)(shotsPerSecond * targetSeconds)); } + + //calculate estimated DPS for one target based on weapons + if(dpsEstimate < 0){ + dpsEstimate = weapons.sumf(w -> (w.bullet.estimateDPS() / w.reload) * w.shots * 60f); + + //suicide enemy + if(weapons.contains(w -> w.bullet.killShooter)){ + //scale down DPS to be insignificant + dpsEstimate /= 100f; + } + } } @CallSuper @@ -436,7 +449,7 @@ public class UnitType extends UnlockableContent{ applyColor(unit); //draw back items - if(unit.hasItem() && unit.itemTime > 0.01f){ + if(unit.item() != null && unit.itemTime > 0.01f){ float size = (itemSize + Mathf.absin(Time.time(), 5f, 1f)) * unit.itemTime; Draw.mixcol(Pal.accent, Mathf.absin(Time.time(), 5f, 0.5f)); diff --git a/core/src/mindustry/ui/dialogs/HostDialog.java b/core/src/mindustry/ui/dialogs/HostDialog.java index 25300fc0b1..1282d47b7d 100644 --- a/core/src/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/mindustry/ui/dialogs/HostDialog.java @@ -76,13 +76,15 @@ public class HostDialog extends BaseDialog{ platform.updateLobby(); }); })); + + if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){ + Core.settings.put("publichost", false); + platform.updateLobby(); + Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta")); + } } - if(Version.modifier.contains("beta")){ - Core.settings.put("publichost", false); - platform.updateLobby(); - Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta")); - } + }catch(IOException e){ ui.showException("@server.error", e); } diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 1c80418708..aa4d9c22c8 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -367,8 +367,10 @@ public class JoinDialog extends BaseDialog{ local.row(); - TextButton button = local.button("", Styles.cleart, () -> safeConnect(host.address, host.port, host.version)) - .width(w).pad(5f).get(); + TextButton button = local.button("", Styles.cleart, () -> { + Events.fire(new ClientPreConnectEvent(host)); + safeConnect(host.address, host.port, host.version); + }).width(w).pad(5f).get(); button.clearChildren(); buildServer(host, button); } @@ -379,8 +381,10 @@ public class JoinDialog extends BaseDialog{ global.row(); - TextButton button = global.button("", Styles.cleart, () -> safeConnect(host.address, host.port, host.version)) - .width(w).pad(5f).get(); + TextButton button = global.button("", Styles.cleart, () -> { + Events.fire(new ClientPreConnectEvent(host)); + safeConnect(host.address, host.port, host.version); + }).width(w).pad(5f).get(); button.clearChildren(); buildServer(host, button); } diff --git a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java index acb240d7c9..1ba7a0084b 100644 --- a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java @@ -2,6 +2,7 @@ package mindustry.ui.dialogs; import arc.*; import arc.func.*; +import arc.input.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; @@ -33,7 +34,14 @@ public class LaunchLoadoutDialog extends BaseDialog{ cont.clear(); buttons.clear(); - addCloseButton(); + buttons.defaults().size(160f, 64f); + buttons.button("@back", Icon.left, this::hide); + + keyDown(key -> { + if(key == KeyCode.escape || key == KeyCode.back){ + Core.app.post(this::hide); + } + }); //updates sum requirements Runnable update = () -> { @@ -79,7 +87,7 @@ public class LaunchLoadoutDialog extends BaseDialog{ update.run(); rebuildItems.run(); }); - }); + }).width(204); buttons.button("@launch.text", Icon.ok, () -> { universe.updateLoadout(core, selected); diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index f09e2fe185..f06c09ce30 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -34,12 +34,11 @@ public class PausedDialog extends BaseDialog{ }); if(!mobile){ - //TODO localize - //TODO capturing is disabled, remove? - //cont.label(() -> state.getSector() == null ? "" : - //("[lightgray]Next turn in [accent]" + state.getSector().displayTimeRemaining() + - // (state.rules.winWave > 0 && !state.getSector().isCaptured() ? "\n[lightgray]Reach wave[accent] " + state.rules.winWave + "[] to capture" : ""))) - // .visible(() -> state.getSector() != null).colspan(2); + //TODO localize + move to other wave menu + cont.label(() -> state.getSector() == null || state.rules.winWave <= 0 || state.getSector().isCaptured() ? "" : + (state.rules.winWave > 0 && !state.getSector().isCaptured() ? + (state.wave >= state.rules.winWave ? "\n[lightgray]Defeat remaining enemies to capture" : "\n[lightgray]Reach wave[accent] " + state.rules.winWave + "[] to capture") : "")) + .visible(() -> state.getSector() != null).colspan(2); cont.row(); float dw = 220f; @@ -89,7 +88,7 @@ public class PausedDialog extends BaseDialog{ cont.buttonRow("@launchcore", Icon.up, () -> { hide(); ui.planet.showLaunch(state.getSector(), player.team().core()); - }).disabled(b -> player.team().core() == null); + }).disabled(b -> player.team().core() == null || net.client()); cont.row(); @@ -101,7 +100,11 @@ public class PausedDialog extends BaseDialog{ cont.row(); } - cont.buttonRow("@hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); + if(state.isCampaign() && net.active()){ + cont.buttonRow("@research", Icon.tree, ui.research::show); + }else{ + cont.buttonRow("@hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); + } cont.buttonRow("@quit", Icon.exit, this::showQuitConfirm).update(s -> { s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "@save.quit" : "@quit"); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 4d24bbe8b8..d730d455d9 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -217,9 +217,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public void renderProjections(){ if(hovered != null){ planets.drawPlane(hovered, () -> { - Draw.color(Color.white, Pal.accent, Mathf.absin(5f, 1f)); + Draw.color(hovered.isUnderAttack() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f)); - TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : null; + TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : hovered.isUnderAttack() ? Icon.warning.getRegion() : null; if(icon != null){ Draw.rect(icon, 0, 0); @@ -355,20 +355,18 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.add("[accent]" + (sector.preset == null ? sector.id : sector.preset.localizedName)).row(); stable.image().color(Pal.accent).fillX().height(3f).pad(3f).row(); stable.add(sector.save != null ? sector.save.getPlayTime() : "@sectors.unexplored").row(); - if(sector.hasWaves() || sector.hasEnemyBase()){ + if(sector.isUnderAttack() || sector.hasEnemyBase()){ stable.add("[accent]Difficulty: " + (int)(sector.baseCoverage * 10)).row(); } - //TODO sector damage is disabled, remove when finalized - /* - if(sector.hasBase() && sector.hasWaves()){ + if(sector.isUnderAttack()){ //TODO localize when finalized //these mechanics are likely to change and as such are not added to the bundle stable.add("[scarlet]Under attack!"); stable.row(); - stable.add("[accent]" + Mathf.ceil(sectorDestructionTurns - (sector.getSecondsPassed() * 60) / turnDuration) + " turn(s)\nuntil destruction"); + stable.add("[accent]" + (int)(sector.getDamage() * 100) + "% damaged"); stable.row(); - }*/ + } if(sector.save != null){ stable.add("@sectors.resources").row(); diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index 9c5e6fd3ed..bb6841dcbb 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -164,13 +164,10 @@ public class ResearchDialog extends BaseDialog{ @Override public Dialog show(){ - Core.app.post(() -> { - if(net.client()){ - //TODO make this not display every time - //TODO rework this in the future - ui.showInfo("@campaign.multiplayer"); - } - }); + if(net.client()){ + ui.showInfo("@research.multiplayer"); + return null; + } return super.show(); } diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 8dd9753fda..190c4109f2 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -250,7 +250,6 @@ public class SettingsMenuDialog extends SettingsDialog{ if(!mobile){ game.checkPref("buildautopause", false); } - game.checkPref("mapcenter", true); if(steam){ game.sliderPref("playerlimit", 16, 2, 32, i -> { diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index f56d507c4d..44c39795be 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -54,7 +54,7 @@ public class HudFragment extends Fragment{ outer: for(int i = state.wave - 1; i <= state.wave + max; i++){ for(SpawnGroup group : state.rules.spawns){ - if(group.effect == StatusEffects.boss && group.getUnitsSpawned(i) > 0){ + if(group.effect == StatusEffects.boss && group.getSpawned(i) > 0){ int diff = (i + 2) - state.wave; //increments at which to warn about incoming guardian diff --git a/core/src/mindustry/ui/fragments/MinimapFragment.java b/core/src/mindustry/ui/fragments/MinimapFragment.java index 43ad3163b0..5acf3bc6d3 100644 --- a/core/src/mindustry/ui/fragments/MinimapFragment.java +++ b/core/src/mindustry/ui/fragments/MinimapFragment.java @@ -111,12 +111,10 @@ public class MinimapFragment extends Fragment{ } public void toggle(){ - if(Core.settings.getBool("mapcenter")){ - float size = baseSize * zoom * world.width(); - float ratio = (float)renderer.minimap.getTexture().height / renderer.minimap.getTexture().width; - panx = (size/2f - player.x() / (world.width() * tilesize) * size) / zoom; - pany = (size*ratio/2f - player.y() / (world.height() * tilesize) * size*ratio) / zoom; - } + float size = baseSize * zoom * world.width(); + float ratio = (float)renderer.minimap.getTexture().height / renderer.minimap.getTexture().width; + panx = (size/2f - player.x() / (world.width() * tilesize) * size) / zoom; + pany = (size*ratio/2f - player.y() / (world.height() * tilesize) * size*ratio) / zoom; shown = !shown; } } diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index b508e90965..3b90533745 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -12,6 +12,7 @@ import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.world.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -80,11 +81,16 @@ public class ForceProjector extends Block{ Draw.color(); } - public class ForceBuild extends Building{ + public class ForceBuild extends Building implements Ranged{ public boolean broken = true; public float buildup, radscl, hit, warmup, phaseHeat; public ForceDraw drawer; + @Override + public float range(){ + return realRadius(); + } + @Override public void created(){ super.created(); diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index a2efa6e8b0..2bc50d6d7a 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -9,6 +9,7 @@ import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -55,11 +56,16 @@ public class MendProjector extends Block{ Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, Pal.accent); } - public class MendBuild extends Building{ + public class MendBuild extends Building implements Ranged{ float heat; float charge = Mathf.random(reload); float phaseHeat; + @Override + public float range(){ + return range; + } + @Override public void updateTile(){ heat = Mathf.lerpDelta(heat, consValid() || cheating() ? 1f : 0f, 0.08f); diff --git a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java index 56010c7c0f..ae3c10f3fd 100644 --- a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java @@ -8,6 +8,7 @@ import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -60,11 +61,16 @@ public class OverdriveProjector extends Block{ } } - public class OverdriveBuild extends Building{ + public class OverdriveBuild extends Building implements Ranged{ float heat; float charge = Mathf.random(reload); float phaseHeat; + @Override + public float range(){ + return range; + } + @Override public void drawLight(){ Drawf.light(team, x, y, 50f * efficiency(), baseColor, 0.7f * efficiency()); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index ea94a670b9..521e6dc19b 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -19,7 +19,6 @@ import mindustry.world.meta.values.*; import static mindustry.Vars.*; public class ItemTurret extends Turret{ - public int maxAmmo = 30; public ObjectMap ammoTypes = new ObjectMap<>(); public ItemTurret(String name){ diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index e34d221d53..11d6213aa5 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -8,6 +8,7 @@ import mindustry.entities.bullet.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; +import mindustry.world.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; import mindustry.world.meta.values.*; @@ -83,7 +84,9 @@ public class LiquidTurret extends Turret{ int tr = (int)(range / tilesize); for(int x = -tr; x <= tr; x++){ for(int y = -tr; y <= tr; y++){ - if(Fires.has(x + tile.x, y + tile.y)){ + Tile other = world.tileWorld(x + tile.x, y + tile.y); + //do not extinguish fires on other team blocks + if(other != null && Fires.has(x + tile.x, y + tile.y) && (other.build == null || other.team() == team)){ target = Fires.get(x + tile.x, y + tile.y); return; } diff --git a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java index f8b49195da..85e5243e2f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java @@ -1,6 +1,7 @@ package mindustry.world.blocks.defense.turrets; import mindustry.entities.bullet.*; +import mindustry.logic.*; import mindustry.world.meta.*; public class PowerTurret extends Turret{ @@ -33,6 +34,15 @@ public class PowerTurret extends Turret{ super.updateTile(); } + @Override + public double sense(LAccess sensor){ + return switch(sensor){ + case ammo -> power.status; + case ammoCapacity -> 1; + default -> super.sense(sensor); + }; + } + @Override public BulletType useAmmo(){ //nothing used directly diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 411ee782ec..4199c4b3fb 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -41,6 +41,7 @@ public abstract class Turret extends Block{ public Effect ammoUseEffect = Fx.none; public Sound shootSound = Sounds.shoot; + public int maxAmmo = 30; public int ammoPerShot = 1; public float ammoEjectBack = 1f; public float range = 50f; @@ -192,6 +193,8 @@ public abstract class Turret extends Block{ @Override public double sense(LAccess sensor){ return switch(sensor){ + case ammo -> totalAmmo; + case ammoCapacity -> maxAmmo; case rotation -> rotation; case shootX -> targetPos.x; case shootY -> targetPos.y; diff --git a/core/src/mindustry/world/blocks/logic/SwitchBlock.java b/core/src/mindustry/world/blocks/logic/SwitchBlock.java index bca47a306a..d27cebb1b3 100644 --- a/core/src/mindustry/world/blocks/logic/SwitchBlock.java +++ b/core/src/mindustry/world/blocks/logic/SwitchBlock.java @@ -37,6 +37,11 @@ public class SwitchBlock extends Block{ } } + @Override + public Boolean config(){ + return enabled; + } + @Override public byte version(){ return 1; diff --git a/gradle.properties b/gradle.properties index 5a37b2f0ab..0cde4e83bc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=dfcb9ab4b9f9bb977ed3cff4b8a16c22e076368a +archash=171cba8dda6deed931b998a0eb368d61f68ea38c diff --git a/tests/src/test/java/SectorTests.java b/tests/src/test/java/SectorTests.java index 4110670eed..6f07e77313 100644 --- a/tests/src/test/java/SectorTests.java +++ b/tests/src/test/java/SectorTests.java @@ -66,7 +66,7 @@ public class SectorTests{ outer: for(int i = 1; i <= 1000; i++){ for(SpawnGroup spawn : spawns){ - if(spawn.effect == StatusEffects.boss && spawn.getUnitsSpawned(i) > 0){ + if(spawn.effect == StatusEffects.boss && spawn.getSpawned(i) > 0){ bossWave = i; break outer; } @@ -84,7 +84,7 @@ public class SectorTests{ for(int i = 1; i <= bossWave; i++){ int total = 0; for(SpawnGroup spawn : spawns){ - total += spawn.getUnitsSpawned(i); + total += spawn.getSpawned(i); } assertNotEquals(0, total, "Sector " + zone + " has no spawned enemies at wave " + i); From 45b87ec615a9d1fd467abfb823bbf635fce0b197 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 15:41:09 -0400 Subject: [PATCH 063/145] fixed some sector things, broke more things --- core/src/mindustry/core/Control.java | 14 +++++--------- core/src/mindustry/core/Logic.java | 2 +- core/src/mindustry/game/Objectives.java | 5 ++--- core/src/mindustry/game/Universe.java | 10 ++++------ core/src/mindustry/maps/SectorDamage.java | 7 +++++++ core/src/mindustry/type/Sector.java | 7 +++++-- core/src/mindustry/ui/dialogs/PlanetDialog.java | 4 +++- .../ui/dialogs/SettingsMenuDialog.java | 2 +- .../src/mindustry/ui/fragments/HudFragment.java | 2 +- .../world/blocks/storage/CoreBlock.java | 17 ----------------- gradle.properties | 2 +- tests/src/test/java/power/FakeGraphics.java | 5 ----- 12 files changed, 30 insertions(+), 47 deletions(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index efe2327074..e4b4e3d44f 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -160,9 +160,7 @@ public class Control implements ApplicationListener, Loadable{ //delete the save, it is gone. if(saves.getCurrent() != null && !state.rules.tutorial){ - Sector sector = state.getSector(); - sector.save = null; - saves.getCurrent().delete(); + saves.getCurrent().save(); } } }); @@ -283,18 +281,16 @@ public class Control implements ApplicationListener, Loadable{ state.rules.sector = sector; //if there is no base, simulate a new game and place the right loadout at the spawn position - //TODO this is broken? if(state.rules.defaultTeam.cores().isEmpty()){ + //reset wave so things are more fair + state.wave = 1; - //kill all friendly units, since they should be dead anwyay + //kill all units, since they should be dead anwyay for(Unit unit : Groups.unit){ - if(unit.team() == state.rules.defaultTeam){ - unit.remove(); - } + unit.remove(); } Tile spawn = world.tile(sector.getSpawnPosition()); - //TODO PLACE CORRECT LOADOUT Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); //set up camera/player locations diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 4d95b22820..3829c98cb6 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -120,7 +120,7 @@ public class Logic implements ApplicationListener{ } //waves depend on attack status. - state.rules.waves = state.rules.sector.isUnderAttack(); + state.rules.waves = state.rules.sector.isUnderAttack() || !state.rules.sector.hasBase(); //add resources based on turns passed if(state.rules.sector.save != null && core != null){ diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index a4097c51fc..7fc844a180 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -28,7 +28,6 @@ public class Objectives{ } } - //TODO fix public static class SectorComplete extends SectorObjective{ public SectorComplete(SectorPreset zone){ @@ -39,12 +38,12 @@ public class Objectives{ @Override public boolean complete(){ - return preset.sector.save != null && preset.sector.save.meta.wave >= preset.sector.save.meta.rules.winWave; + return preset.sector.save != null && preset.sector.save.meta.wave >= preset.captureWave; } @Override public String display(){ - return Core.bundle.format("requirement.wave", preset.sector.save == null ? "" : preset.sector.save.meta.rules.winWave, preset.localizedName); + return Core.bundle.format("requirement.capture", preset.localizedName); } } diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 82b53ce604..8eb9a8d2af 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -161,17 +161,14 @@ public class Universe{ //if so, just delete the save for now. it's lost. //TODO don't delete it later maybe - sector.save.delete(); - //clear recieved sector.setExtraItems(new ItemSeq()); - sector.save = null; - sector.setDamage(0f); + sector.setDamage(1.01f); }else if(attacked && wavesPassed > 0 && sector.save.meta.wave + wavesPassed >= sector.save.meta.rules.winWave && !sector.hasEnemyBase()){ //autocapture the sector sector.setUnderAttack(false); //fire the event - Events.fire(new SectorCaptureEvent(state.rules.sector)); + Events.fire(new SectorCaptureEvent(sector)); } } @@ -179,9 +176,10 @@ public class Universe{ if(sector.save != null && sector.save.meta != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.destination != null){ Sector to = sector.save.meta.secinfo.destination; if(to.save != null){ + float scl = Math.max(1f - sector.getDamage(), 0); ItemSeq items = new ItemSeq(); //calculated exported items to this sector - sector.save.meta.secinfo.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed))); + sector.save.meta.secinfo.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed * scl))); to.addItems(items); } } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index b8afb42688..fb7ee28e8f 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -360,6 +360,13 @@ public class SectorDamage{ } } + //kill every core if damage is maximum + if(damage >= 1){ + for(Building c : state.rules.defaultTeam.cores().copy()){ + c.tile.remove(); + } + } + float falloff = (damage) / (Math.max(tiles.width, tiles.height) * Mathf.sqrt2); int peak = 0; diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index f692293309..59fc6de8da 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -86,7 +86,7 @@ public class Sector{ /** @return whether the player has a base here. */ public boolean hasBase(){ - return save != null && !save.meta.tags.getBool("nocores"); + return save != null && !save.meta.tags.getBool("nocores") && getDamage() < 1f; } /** @return whether the enemy has a generated base here. */ @@ -229,9 +229,10 @@ public class Sector{ if(save != null){ long seconds = getSecondsPassed(); + float scl = Math.max(1f - getDamage(), 0); //add produced items - save.meta.secinfo.production.each((item, stat) -> count.add(item, (int)(stat.mean * seconds))); + save.meta.secinfo.production.each((item, stat) -> count.add(item, (int)(stat.mean * seconds * scl))); //add received items count.add(getExtraItems()); @@ -253,6 +254,8 @@ public class Sector{ /** @return sector damage from enemy, 0 to 1 */ public float getDamage(){ + //dead sector + if(save != null & save.meta.tags.getBool("nocores")) return 1.01f; return Core.settings.getFloat(key("damage"), 0f); } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index d730d455d9..44ef8eb17a 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -394,8 +394,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.table(t -> { t.left(); + float scl = Math.max(1f - sector.getDamage(), 0); + sector.save.meta.secinfo.production.each((item, stat) -> { - int total = (int)(stat.mean * 60); + int total = (int)(stat.mean * 60 * scl); if(total > 1){ t.image(item.icon(Cicon.small)).padRight(3); t.add(UI.formatAmount(total) + " " + Core.bundle.get("unit.perminute")).color(Color.lightGray); diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 190c4109f2..efcc6e68bb 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -291,7 +291,7 @@ public class SettingsMenuDialog extends SettingsDialog{ } return s + "%"; }); - graphics.sliderPref("bridgeopacity", 75, 0, 100, 5, s -> s + "%"); + graphics.sliderPref("bridgeopacity", 100, 0, 100, 5, s -> s + "%"); if(!mobile){ graphics.checkPref("vsync", true, b -> Core.graphics.setVSync(b)); diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 44c39795be..d37095be54 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -71,7 +71,7 @@ public class HudFragment extends Fragment{ //TODO details and stuff Events.on(SectorCaptureEvent.class, e ->{ //TODO localize - showToast("Sector[accent] captured[]!"); + showToast("Sector [accent]" + (e.sector.isBeingPlayed() ? "" : e.sector.id + " ") + "[]captured!"); }); //TODO localize diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index bdb16eb674..e0aae707fa 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -310,23 +310,6 @@ public class CoreBlock extends StorageBlock{ } } - @Override - public void onDestroyed(){ - super.onDestroyed(); - - if(state.isCampaign() && team == state.rules.waveTeam){ - //do not recache - world.setGenerating(true); - tile.setOverlay(Blocks.spawn); - world.setGenerating(false); - - if(!spawner.getSpawns().contains(tile)){ - spawner.getSpawns().add(tile); - } - spawner.doShockwave(x, y); - } - } - @Override public void placed(){ super.placed(); diff --git a/gradle.properties b/gradle.properties index 0cde4e83bc..6015307e9d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=171cba8dda6deed931b998a0eb368d61f68ea38c +archash=7ce118ba1fcbe652dd3b225fd7d16a7a761c238e diff --git a/tests/src/test/java/power/FakeGraphics.java b/tests/src/test/java/power/FakeGraphics.java index 378f675224..5f64aa61f3 100644 --- a/tests/src/test/java/power/FakeGraphics.java +++ b/tests/src/test/java/power/FakeGraphics.java @@ -63,11 +63,6 @@ public class FakeGraphics extends Graphics{ return 0; } - @Override - public float getRawDeltaTime(){ - return 0; - } - @Override public int getFramesPerSecond(){ return 0; From d177c8b8756db388936730a1ef89e379146b1ac1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 15:45:19 -0400 Subject: [PATCH 064/145] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6015307e9d..0ebd9ffd28 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=7ce118ba1fcbe652dd3b225fd7d16a7a761c238e +archash=46ebdb4aeb1e03ca6b3b4c27a93533dc92278a33 From 5ee4101ba4fd07c6bf38247739d9d93974c3303b Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 16:33:51 -0400 Subject: [PATCH 065/145] Moved some static regions --- core/src/mindustry/entities/comp/BuildingComp.java | 4 ++-- core/src/mindustry/graphics/BlockRenderer.java | 12 ++++++++++++ core/src/mindustry/logic/LExecutor.java | 2 +- core/src/mindustry/type/Sector.java | 2 ++ core/src/mindustry/world/Block.java | 13 ------------- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 15d79a8942..a3514cf76a 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -766,9 +766,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } public void drawCracks(){ - if(!damaged() || block.size > Block.maxCrackSize) return; + if(!damaged() || block.size > BlockRenderer.maxCrackSize) return; int id = pos(); - TextureRegion region = Block.cracks[block.size - 1][Mathf.clamp((int)((1f - healthf()) * Block.crackRegions), 0, Block.crackRegions-1)]; + TextureRegion region = renderer.blocks.cracks[block.size - 1][Mathf.clamp((int)((1f - healthf()) * BlockRenderer.crackRegions), 0, BlockRenderer.crackRegions-1)]; Draw.colorl(0.2f, 0.1f + (1f - healthf())* 0.6f); Draw.rect(region, x, y, (id%4)*90); Draw.color(); diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index a36230f0aa..223540e601 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -20,11 +20,14 @@ import static arc.Core.*; import static mindustry.Vars.*; public class BlockRenderer implements Disposable{ + public static final int crackRegions = 8, maxCrackSize = 9; + private static final int initialRequests = 32 * 32; private static final int expandr = 9; private static final Color shadowColor = new Color(0, 0, 0, 0.71f); public final FloorRenderer floor = new FloorRenderer(); + public TextureRegion[][] cracks; private Seq tileview = new Seq<>(false, initialRequests, Tile.class); private Seq lightview = new Seq<>(false, initialRequests, Tile.class); @@ -40,6 +43,15 @@ public class BlockRenderer implements Disposable{ public BlockRenderer(){ + Events.on(ClientLoadEvent.class, e -> { + cracks = new TextureRegion[maxCrackSize][crackRegions]; + for(int size = 1; size <= maxCrackSize; size++){ + for(int i = 0; i < crackRegions; i++){ + cracks[size - 1][i] = Core.atlas.find("cracks-" + size + "-" + i); + } + } + }); + Events.on(WorldLoadEvent.class, event -> { shadowEvents.clear(); lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index fee780e145..d493a7f7fe 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -129,7 +129,7 @@ public class LExecutor{ public void setnum(int index, double value){ Var v = vars[index]; if(v.constant) return; - v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : 0; + v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : value; v.objval = null; v.isobj = false; } diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 59fc6de8da..db3587674b 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -304,10 +304,12 @@ public class Sector{ return Core.settings.getInt(key("secondsi-passed")); } + //TODO this is terrible private String key(String key){ return planet.name + "-s-" + id + "-" + key; } + //TODO this is terrible private void put(String key, Object value){ Core.settings.put(key(key), value); } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 95d9a426e0..53dde34460 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -35,8 +35,6 @@ import java.util.*; import static mindustry.Vars.*; public class Block extends UnlockableContent{ - public static final int crackRegions = 8, maxCrackSize = 9; - public boolean hasItems; public boolean hasLiquids; public boolean hasPower; @@ -212,8 +210,6 @@ public class Block extends UnlockableContent{ public @Load("@-team") TextureRegion teamRegion; public TextureRegion[] teamRegions; - //TODO make this not static - public static TextureRegion[][] cracks; protected static final Seq tempTiles = new Seq<>(); protected static final Seq tempTileEnts = new Seq<>(); @@ -687,15 +683,6 @@ public class Block extends UnlockableContent{ public void load(){ region = Core.atlas.find(name); - if(cracks == null || (cracks[0][0].texture != null && cracks[0][0].texture.isDisposed())){ - cracks = new TextureRegion[maxCrackSize][crackRegions]; - for(int size = 1; size <= maxCrackSize; size++){ - for(int i = 0; i < crackRegions; i++){ - cracks[size - 1][i] = Core.atlas.find("cracks-" + size + "-" + i); - } - } - } - ContentRegions.loadRegions(this); //load specific team regions From 2f54edf34f9514281aa4e4caaedf0db4bc3e8a8b Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 11:02:24 -0400 Subject: [PATCH 066/145] Sector refactoring, invasions and cleanup --- core/assets/bundles/bundle.properties | 2 + core/src/mindustry/Vars.java | 4 + core/src/mindustry/core/Control.java | 8 +- core/src/mindustry/core/Logic.java | 53 +--- core/src/mindustry/core/World.java | 14 +- core/src/mindustry/game/EventType.java | 9 + core/src/mindustry/game/SectorInfo.java | 67 +++-- core/src/mindustry/game/Stats.java | 2 +- core/src/mindustry/game/Universe.java | 100 +++++--- core/src/mindustry/io/SaveMeta.java | 7 +- core/src/mindustry/io/SaveVersion.java | 8 +- core/src/mindustry/maps/SectorDamage.java | 30 ++- core/src/mindustry/type/Planet.java | 6 +- core/src/mindustry/type/Sector.java | 237 ++++-------------- core/src/mindustry/ui/IntFormat.java | 12 +- core/src/mindustry/ui/Styles.java | 1 + .../mindustry/ui/dialogs/PausedDialog.java | 7 - .../mindustry/ui/dialogs/PlanetDialog.java | 65 +++-- .../mindustry/ui/dialogs/ResearchDialog.java | 2 +- .../mindustry/ui/fragments/HudFragment.java | 18 +- core/src/mindustry/world/Tile.java | 9 + .../world/blocks/campaign/LaunchPad.java | 8 +- .../world/blocks/distribution/Conveyor.java | 2 +- .../blocks/distribution/StackConveyor.java | 2 +- .../world/blocks/storage/StorageBlock.java | 2 +- .../mindustry/world/modules/ItemModule.java | 16 +- tools/src/mindustry/tools/Generators.java | 4 +- 27 files changed, 319 insertions(+), 376 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 1253de6a13..aa515bfc6f 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -285,6 +285,7 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Wave {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Wave in {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Waiting... @@ -521,6 +522,7 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector planet.serpulo.name = Serpulo #TODO better name diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 6fdc1418dd..d88b6584f7 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -86,6 +86,10 @@ public class Vars implements Loadable{ public static final float logicItemTransferRange = 45f; /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; + /** chance of an invasion per turn, 1 = 100% */ + public static final float baseInvasionChance = 1f / 15f; + /** how many turns have to pass before invasions start */ + public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ public static final float minArmorDamage = 0.1f; /** launch animation duration */ diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index e4b4e3d44f..f6ae999945 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -279,6 +279,7 @@ public class Control implements ApplicationListener, Loadable{ slot.load(); slot.setAutosave(true); state.rules.sector = sector; + state.secinfo = state.rules.sector.info; //if there is no base, simulate a new game and place the right loadout at the spawn position if(state.rules.defaultTeam.cores().isEmpty()){ @@ -286,11 +287,9 @@ public class Control implements ApplicationListener, Loadable{ state.wave = 1; //kill all units, since they should be dead anwyay - for(Unit unit : Groups.unit){ - unit.remove(); - } + Groups.unit.clear(); - Tile spawn = world.tile(sector.getSpawnPosition()); + Tile spawn = world.tile(sector.info.spawnPosition); Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); //set up camera/player locations @@ -313,7 +312,6 @@ public class Control implements ApplicationListener, Loadable{ }else{ net.reset(); logic.reset(); - sector.setSecondsPassed(0); world.loadSector(sector); state.rules.sector = sector; //assign origin when launching diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 3829c98cb6..00787d9e43 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -16,7 +16,6 @@ import mindustry.type.Weather.*; import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.blocks.ConstructBlock.*; -import mindustry.world.blocks.storage.CoreBlock.*; import java.util.*; @@ -88,13 +87,10 @@ public class Logic implements ApplicationListener{ //when loading a 'damaged' sector, propagate the damage Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ - CoreBuild core = state.rules.defaultTeam.core(); + state.secinfo.write(); //how much wave time has passed - int wavesPassed = state.rules.sector.getWavesPassed(); - - //reset passed waves - state.rules.sector.setWavesPassed(0); + int wavesPassed = state.secinfo.wavesPassed; //wave has passed, remove all enemies, they are assumed to be dead if(wavesPassed > 0){ @@ -105,44 +101,22 @@ public class Logic implements ApplicationListener{ }); } + //simulate passing of waves if(wavesPassed > 0){ //simulate wave counter moving forward state.wave += wavesPassed; state.wavetime = state.rules.waveSpacing; + + SectorDamage.applyCalculatedDamage(); } - //reset damage display - state.rules.sector.setDamage(0f); + //reset values + state.secinfo.damage = 0f; + state.secinfo.wavesPassed = 0; + state.secinfo.hasCore = true; + state.secinfo.secondsPassed = 0; - //simulate damage if applicable - if(wavesPassed > 0){ - SectorDamage.applyCalculatedDamage(wavesPassed); - } - - //waves depend on attack status. - state.rules.waves = state.rules.sector.isUnderAttack() || !state.rules.sector.hasBase(); - - //add resources based on turns passed - if(state.rules.sector.save != null && core != null){ - //update correct storage capacity - state.rules.sector.save.meta.secinfo.storageCapacity = core.storageCapacity; - - //add new items received - state.rules.sector.calculateReceivedItems().each((item, amount) -> core.items.add(item, amount)); - - //clear received items - state.rules.sector.setExtraItems(new ItemSeq()); - - //validation - for(Item item : content.items()){ - //ensure positive items - if(core.items.get(item) < 0) core.items.set(item, 0); - //cap the items - if(core.items.get(item) > core.storageCapacity) core.items.set(item, core.storageCapacity); - } - } - - state.rules.sector.setSecondsPassed(0); + state.rules.sector.saveInfo(); } }); @@ -200,11 +174,6 @@ public class Logic implements ApplicationListener{ } public void skipWave(){ - if(state.isCampaign()){ - //warp time spent forward because the wave was just skipped. - state.secinfo.internalTimeSpent += state.wavetime; - } - state.wavetime = 0; } diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 03a18c01ed..d6fcb40a97 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -253,7 +253,7 @@ public class World{ setSectorRules(sector); if(state.rules.defaultTeam.core() != null){ - sector.setSpawnPosition(state.rules.defaultTeam.core().pos()); + sector.info.spawnPosition = state.rules.defaultTeam.core().pos(); } } @@ -267,8 +267,6 @@ public class World{ ObjectIntMap floorc = new ObjectIntMap<>(); ObjectSet content = new ObjectSet<>(); - float waterFloors = 0, totalFloors = 0; - for(Tile tile : world.tiles){ if(world.getDarkness(tile.x, tile.y) >= 3){ continue; @@ -280,10 +278,6 @@ public class World{ if(liquid != null) content.add(liquid); if(!tile.block().isStatic()){ - totalFloors ++; - if(liquid == Liquids.water){ - waterFloors += tile.floor().isDeep() ? 1f : 0.7f; - } floorc.increment(tile.floor()); if(tile.overlay() != Blocks.air){ floorc.increment(tile.overlay()); @@ -326,9 +320,9 @@ public class World{ state.rules.weather.add(new WeatherEntry(Weathers.sporestorm)); } - state.secinfo.resources = content.asArray(); - state.secinfo.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))); - + sector.info.resources = content.asArray(); + sector.info.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))); + sector.saveInfo(); } public Context filterContext(Map map){ diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 272c26363f..0ffb2f7369 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -73,6 +73,15 @@ public class EventType{ } } + /** Called when a sector is destroyed by waves when you're not there. */ + public static class SectorInvasionEvent{ + public final Sector sector; + + public SectorInvasionEvent(Sector sector){ + this.sector = sector; + } + } + public static class LaunchItemEvent{ public final ItemStack stack; diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 8e7f73a256..c6c5d3ee51 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -26,7 +26,7 @@ public class SectorInfo{ /** Export statistics. */ public ObjectMap export = new ObjectMap<>(); /** Items stored in all cores. */ - public ItemSeq coreItems = new ItemSeq(); + public ItemSeq items = new ItemSeq(); /** The best available core type. */ public Block bestCoreType = Blocks.air; /** Max storage capacity. */ @@ -39,13 +39,26 @@ public class SectorInfo{ public @Nullable Sector destination; /** Resources known to occur at this sector. */ public Seq resources = new Seq<>(); + /** Whether waves are enabled here. */ + public boolean waves = true; + /** Wave # from state */ + public int wave = 1, winWave = -1; + /** Time between waves. */ + public float waveSpacing = 60 * 60 * 2; + /** Damage dealt to sector. */ + public float damage; + /** How many waves have passed while the player was away. */ + public int wavesPassed; + /** Packed core spawn position. */ + public int spawnPosition; + /** How long the player has been playing elsewhere. */ + public float secondsPassed; + /** Display name. */ + public @Nullable String name; /** Special variables for simulation. */ public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope; - /** Time spent at this sector. Do not use unless you know what you're doing. */ - public transient float internalTimeSpent; - /** Counter refresh state. */ private transient Interval time = new Interval(); /** Core item storage to prevent spoofing. */ @@ -84,27 +97,55 @@ public class SectorInfo{ return export.get(item, ExportStat::new).mean; } + /** Write contents of meta into main storage. */ + public void write(){ + state.wave = wave; + state.rules.waves = waves; + state.rules.waveSpacing = waveSpacing; + state.rules.winWave = winWave; + + CoreBuild entity = state.rules.defaultTeam.core(); + if(entity != null){ + entity.items.clear(); + entity.items.add(items); + //ensure capacity. + entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.block.itemCapacity))); + } + + //TODO write items. + } + /** Prepare data for writing to a save. */ public void prepare(){ //update core items - coreItems.clear(); + items.clear(); CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ ItemModule items = entity.items; for(int i = 0; i < items.length(); i++){ - coreItems.set(content.item(i), items.get(i)); + this.items.set(content.item(i), items.get(i)); } + + spawnPosition = entity.pos(); } + waveSpacing = state.rules.waveSpacing; + wave = state.wave; + winWave = state.rules.winWave; + waves = state.rules.waves; hasCore = entity != null; bestCoreType = !hasCore ? Blocks.air : state.rules.defaultTeam.cores().max(e -> e.block.size).block; storageCapacity = entity != null ? entity.storageCapacity : 0; + secondsPassed = 0; + wavesPassed = 0; + damage = 0; - //update sector's internal time spent counter - state.rules.sector.setTimeSpent(internalTimeSpent); - state.rules.sector.setUnderAttack(state.rules.waves); + if(state.rules.sector != null){ + state.rules.sector.info = this; + state.rules.sector.saveInfo(); + } SectorDamage.writeParameters(this); } @@ -115,14 +156,6 @@ public class SectorInfo{ //updating in multiplayer as a client doesn't make sense if(net.client()) return; - internalTimeSpent += Time.delta; - - //autorun turns - if(internalTimeSpent >= turnDuration){ - internalTimeSpent = 0; - universe.runTurn(); - } - CoreBuild ent = state.rules.defaultTeam.core(); //refresh throughput diff --git a/core/src/mindustry/game/Stats.java b/core/src/mindustry/game/Stats.java index 1d175607ba..b963223518 100644 --- a/core/src/mindustry/game/Stats.java +++ b/core/src/mindustry/game/Stats.java @@ -40,7 +40,7 @@ public class Stats{ //weigh used fractions float frac = 0f; - Seq obtainable = zone.save == null ? new Seq<>() : zone.save.meta.secinfo.resources.select(i -> i instanceof Item).as(); + Seq obtainable = zone.save == null ? new Seq<>() : zone.info.resources.select(i -> i instanceof Item).as(); for(Item item : obtainable){ frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size; } diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 8eb9a8d2af..37a22d4209 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -18,6 +18,7 @@ public class Universe{ private int netSeconds; private float secondCounter; private int turn; + private float turnCounter; private Schematic lastLoadout; private ItemSeq lastLaunchResources = new ItemSeq(); @@ -54,17 +55,19 @@ public class Universe{ } } - /** @return sectors attacked on the current planet, minus the ones that are being played on right now. */ - public Seq getAttacked(Planet planet){ - return planet.sectors.select(s -> s.isUnderAttack() && s.hasBase() && !s.isBeingPlayed() && s.getWavesPassed() > 0); - } - /** Update planet rotations, global time and relevant state. */ public void update(){ //only update time when not in multiplayer if(!net.client()){ secondCounter += Time.delta / 60f; + turnCounter += Time.delta; + + //auto-run turns + if(turnCounter >= turnDuration){ + turnCounter = 0; + runTurn(); + } if(secondCounter >= 1){ seconds += (int)secondCounter; @@ -133,59 +136,84 @@ public class Universe{ //update relevant sectors for(Planet planet : content.planets()){ for(Sector sector : planet.sectors){ - if(sector.hasSave()){ - int spent = (int)(sector.getTimeSpent() / 60); - int actuallyPassed = Math.max(newSecondsPassed - spent, 0); + if(sector.hasSave() && sector.hasBase()){ //increment seconds passed for this sector by the time that just passed with this turn if(!sector.isBeingPlayed()){ - int secPassed = sector.getSecondsPassed() + actuallyPassed; + //increment time + sector.info.secondsPassed += turnDuration/60f; - sector.setSecondsPassed(secPassed); - - boolean attacked = sector.isUnderAttack(); - - int wavesPassed = (int)(secPassed*60f / sector.save.meta.rules.waveSpacing); - float damage = attacked ? SectorDamage.getDamage(sector.save.meta.secinfo, sector.save.meta.rules.waveSpacing, sector.save.meta.wave, wavesPassed) : 0f; + int wavesPassed = (int)(sector.info.secondsPassed*60f / sector.info.waveSpacing); + boolean attacked = sector.info.waves; if(attacked){ - sector.setWavesPassed(wavesPassed); + sector.info.wavesPassed = wavesPassed; } - sector.setDamage(damage); + float damage = attacked ? SectorDamage.getDamage(sector.info) : 0f; + + //damage never goes down until the player visits the sector, so use max + sector.info.damage = Math.max(sector.info.damage, damage); //check if the sector has been attacked too many times... if(attacked && damage >= 0.999f){ //fire event for losing the sector Events.fire(new SectorLoseEvent(sector)); - //if so, just delete the save for now. it's lost. - //TODO don't delete it later maybe - sector.setExtraItems(new ItemSeq()); - sector.setDamage(1.01f); - }else if(attacked && wavesPassed > 0 && sector.save.meta.wave + wavesPassed >= sector.save.meta.rules.winWave && !sector.hasEnemyBase()){ + //sector is dead. + sector.info.items.clear(); + sector.info.damage = 1f; + sector.info.hasCore = false; + sector.info.production.clear(); + }else if(attacked && wavesPassed > 0 && sector.info.wave + wavesPassed >= sector.info.winWave && !sector.hasEnemyBase()){ //autocapture the sector - sector.setUnderAttack(false); + sector.info.waves = false; //fire the event Events.fire(new SectorCaptureEvent(sector)); } + + float scl = sector.getProductionScale(); + + //export to another sector + if(sector.info.destination != null){ + Sector to = sector.info.destination; + if(to.hasBase()){ + ItemSeq items = new ItemSeq(); + //calculated exported items to this sector + sector.info.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed * scl))); + to.addItems(items); + } + } + + //add production, making sure that it's capped + sector.info.production.each((item, stat) -> sector.info.items.add(item, Math.min((int)(stat.mean * seconds * scl), sector.info.storageCapacity - sector.info.items.get(item)))); + + sector.saveInfo(); } - //export to another sector - if(sector.save != null && sector.save.meta != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.destination != null){ - Sector to = sector.save.meta.secinfo.destination; - if(to.save != null){ - float scl = Math.max(1f - sector.getDamage(), 0); - ItemSeq items = new ItemSeq(); - //calculated exported items to this sector - sector.save.meta.secinfo.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed * scl))); - to.addItems(items); + //queue random invasions + if(!sector.isAttacked() && turn > invasionGracePeriod){ + //TODO use factors like difficulty for better invasion chance + if(sector.near().contains(Sector::hasEnemyBase) && Mathf.chance(baseInvasionChance)){ + int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 4) * 5; + float waveSpace = Math.max(sector.info.waveSpacing - Mathf.random(1, 4) * 5 * 60, 40 * 60); + + //assign invasion-related things + if(sector.isBeingPlayed()){ + state.rules.winWave = waveMax; + state.rules.waves = true; + state.rules.waveSpacing = waveSpace; + }else{ + sector.info.winWave = waveMax; + sector.info.waves = true; + sector.info.waveSpacing = waveSpace; + sector.saveInfo(); + } + + Events.fire(new SectorInvasionEvent(sector)); } } - - //reset time spent to 0 - sector.setTimeSpent(0f); } } } @@ -202,7 +230,7 @@ public class Universe{ for(Planet planet : content.planets()){ for(Sector sector : planet.sectors){ if(sector.hasSave()){ - count.add(sector.calculateItems()); + count.add(sector.items()); } } } diff --git a/core/src/mindustry/io/SaveMeta.java b/core/src/mindustry/io/SaveMeta.java index f2e039f634..c6133889bc 100644 --- a/core/src/mindustry/io/SaveMeta.java +++ b/core/src/mindustry/io/SaveMeta.java @@ -14,12 +14,10 @@ public class SaveMeta{ public Map map; public int wave; public Rules rules; - public SectorInfo secinfo; public StringMap tags; public String[] mods; - public boolean hasProduction; - public SaveMeta(int version, long timestamp, long timePlayed, int build, String map, int wave, Rules rules, SectorInfo secinfo, StringMap tags){ + public SaveMeta(int version, long timestamp, long timePlayed, int build, String map, int wave, Rules rules, StringMap tags){ this.version = version; this.build = build; this.timestamp = timestamp; @@ -29,8 +27,5 @@ public class SaveMeta{ this.rules = rules; this.tags = tags; this.mods = JsonIO.read(String[].class, tags.get("mods", "[]")); - this.secinfo = secinfo; - - secinfo.production.each((e, amount) -> hasProduction |= amount.mean > 0.001f); } } diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index cacac7700a..e153b74587 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -40,7 +40,6 @@ public abstract class SaveVersion extends SaveFileReader{ map.get("mapname"), map.getInt("wave"), JsonIO.read(Rules.class, map.get("rules", "{}")), - JsonIO.read(SectorInfo.class, map.get("secinfo", "{}")), map ); } @@ -74,6 +73,7 @@ public abstract class SaveVersion extends SaveFileReader{ //prepare campaign data for writing if(state.isCampaign()){ state.secinfo.prepare(); + state.rules.sector.saveInfo(); } //flush tech node progress @@ -89,7 +89,6 @@ public abstract class SaveVersion extends SaveFileReader{ "wave", state.wave, "wavetime", state.wavetime, "stats", JsonIO.write(state.stats), - "secinfo", state.isCampaign() ? JsonIO.write(state.secinfo) : "{}", "rules", JsonIO.write(state.rules), "mods", JsonIO.write(mods.getModStrings().toArray(String.class)), "width", world.width(), @@ -107,14 +106,13 @@ public abstract class SaveVersion extends SaveFileReader{ state.wave = map.getInt("wave"); state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing); state.stats = JsonIO.read(Stats.class, map.get("stats", "{}")); - state.secinfo = JsonIO.read(SectorInfo.class, map.get("secinfo", "{}")); state.rules = JsonIO.read(Rules.class, map.get("rules", "{}")); if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get(); lastReadBuild = map.getInt("build", -1); - //load time spent on sector into state + //load in sector info if(state.rules.sector != null){ - state.secinfo.internalTimeSpent = state.rules.sector.getStoredTimeSpent(); + state.secinfo = state.rules.sector.info; } if(!headless){ diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index fb7ee28e8f..1c942d1228 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -25,8 +25,11 @@ public class SectorDamage{ private static final int maxWavesSimulated = 50; /** @return calculated capture progress of the enemy */ - public static float getDamage(SectorInfo info, float waveSpace, int wave, int wavesPassed){ + public static float getDamage(SectorInfo info){ float health = info.sumHealth; + int wavesPassed = info.wavesPassed; + int wave = info.wave; + float waveSpace = info.waveSpacing; //this approach is O(n), it simulates every wave passing. //other approaches can assume all the waves come as one, but that's not as fair. @@ -76,9 +79,9 @@ public class SectorDamage{ } /** Applies wave damage based on sector parameters. */ - public static void applyCalculatedDamage(int wavesPassed){ + public static void applyCalculatedDamage(){ //calculate base damage fraction - float damage = getDamage(state.secinfo, state.rules.waveSpacing, state.wave, wavesPassed); + float damage = getDamage(state.secinfo); //scaled damage has a power component to make it seem a little more realistic (as systems fail, enemy capturing gets easier and easier) float scaled = Mathf.pow(damage, 1.5f); @@ -110,6 +113,21 @@ public class SectorDamage{ } } + if(state.secinfo.wavesPassed > 0){ + //simply remove each block in the spawner range if a wave passed + for(Tile spawner : spawner.getSpawns()){ + spawner.circle((int)(state.rules.dropZoneRadius / tilesize), tile -> { + if(tile.team() == state.rules.defaultTeam){ + if(rubble && tile.floor().hasSurface() && Mathf.chance(0.4)){ + Effect.rubble(tile.build.x, tile.build.y, tile.block().size); + } + + tile.remove(); + } + }); + } + } + //finally apply scaled damage apply(scaled); } @@ -120,6 +138,10 @@ public class SectorDamage{ Seq spawns = new Seq<>(); spawner.eachGroundSpawn((x, y) -> spawns.add(world.tile(x, y))); + if(spawns.isEmpty() && state.rules.waveTeam.core() != null){ + spawns.add(state.rules.waveTeam.core().tile); + } + if(core == null || spawns.isEmpty()) return; Tile start = spawns.first(); @@ -361,7 +383,7 @@ public class SectorDamage{ } //kill every core if damage is maximum - if(damage >= 1){ + if(fraction >= 1){ for(Building c : state.rules.defaultTeam.cores().copy()){ c.tile.remove(); } diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 6153aa4721..911939b870 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -177,7 +177,7 @@ public class Planet extends UnlockableContent{ public void updateBaseCoverage(){ for(Sector sector : sectors){ float sum = 1f; - for(Sector other : sector.inRange(2)){ + for(Sector other : sector.near()){ if(other.generateEnemyBase){ sum += 1f; } @@ -204,6 +204,10 @@ public class Planet extends UnlockableContent{ @Override public void init(){ + for(Sector sector : sectors){ + sector.loadInfo(); + } + if(generator != null){ Noise.setSeed(id + 1); diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index db3587674b..37535bffca 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -7,6 +7,7 @@ import arc.struct.*; import arc.util.*; import mindustry.*; import mindustry.game.Saves.*; +import mindustry.game.*; import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.world.modules.*; @@ -25,6 +26,7 @@ public class Sector{ public @Nullable SaveSlot save; public @Nullable SectorPreset preset; + public SectorInfo info = new SectorInfo(); /** Number 0-1 indicating the difficulty based on nearby bases. */ public float baseCoverage; @@ -38,60 +40,50 @@ public class Sector{ this.id = tile.id; } - public Seq inRange(int range){ - //TODO cleanup/remove - if(true){ - tmpSeq1.clear(); - neighbors(tmpSeq1::add); - - return tmpSeq1; - } - + public Seq near(){ tmpSeq1.clear(); - tmpSeq2.clear(); - tmpSet.clear(); + near(tmpSeq1::add); - tmpSeq1.add(this); - tmpSet.add(this); - for(int i = 0; i < range; i++){ - while(!tmpSeq1.isEmpty()){ - Sector sec = tmpSeq1.pop(); - tmpSet.add(sec); - sec.neighbors(other -> { - if(tmpSet.add(other)){ - tmpSeq2.add(other); - } - }); - } - tmpSeq1.clear(); - tmpSeq1.addAll(tmpSeq2); - } - - tmpSeq3.clear().addAll(tmpSeq2); - return tmpSeq3; + return tmpSeq1; } - public void neighbors(Cons cons){ + public void near(Cons cons){ for(Ptile tile : tile.tiles){ cons.get(planet.getSector(tile)); } } /** @return whether this sector can be landed on at all. - * Only sectors adjacent to non-wave sectors can be landed on. - * TODO also preset sectors*/ + * Only sectors adjacent to non-wave sectors can be landed on. */ public boolean unlocked(){ return hasBase() || (preset != null && preset.alwaysUnlocked); } + public void saveInfo(){ + Core.settings.putJson(planet.name + "-s-" + id + "-info", info); + } + + public void loadInfo(){ + info = Core.settings.getJson(planet.name + "-s-" + id + "-info", SectorInfo.class, SectorInfo::new); + } + + public float getProductionScale(){ + return Math.max(1f - info.damage, 0); + } + + public boolean isAttacked(){ + if(isBeingPlayed()) return state.rules.waves; + return save != null && info.waves && info.hasCore; + } + /** @return whether the player has a base here. */ public boolean hasBase(){ - return save != null && !save.meta.tags.getBool("nocores") && getDamage() < 1f; + return save != null && info.hasCore; } /** @return whether the enemy has a generated base here. */ public boolean hasEnemyBase(){ - return generateEnemyBase && (save == null || save.meta.rules.waves); + return generateEnemyBase && (save == null || info.waves); } public boolean isBeingPlayed(){ @@ -99,26 +91,18 @@ public class Sector{ return Vars.state.isGame() && Vars.state.rules.sector == this && !Vars.state.gameOver; } + public String name(){ + if(preset != null) return preset.localizedName; + return info.name == null ? id + "" : info.name; + } + + public void setName(String name){ + info.name = name; + saveInfo(); + } + public boolean isCaptured(){ - return save != null && !save.meta.rules.waves; - } - - /** @return whether waves are present - if true, any bases here will be attacked. - * only applicable to sectors with active player bases. */ - public boolean isUnderAttack(){ - return hasBase() && Core.settings.getBool(key("under-attack"), true); - } - - public void setUnderAttack(boolean underAttack){ - Core.settings.put(key("under-attack"), underAttack); - } - - public void setWavesPassed(int waves){ - put("waves-passed", waves); - } - - public int getWavesPassed(){ - return Core.settings.getInt(key("waves-passed"), 0); + return save != null && !info.waves; } public boolean hasSave(){ @@ -143,15 +127,6 @@ public class Sector{ return res % 2 == 0 ? res : res + 1; } - //TODO this should be stored in a more efficient structure, and be updated each turn - public ItemSeq getExtraItems(){ - return Core.settings.getJson(key("extra-items"), ItemSeq.class, ItemSeq::new); - } - - public void setExtraItems(ItemSeq stacks){ - Core.settings.putJson(key("extra-items"), stacks); - } - public void addItem(Item item, int amount){ removeItem(item, -amount); } @@ -169,151 +144,27 @@ public class Sector{ int cap = state.rules.defaultTeam.core().storageCapacity; items.each((item, amount) -> storage.add(item, Math.min(cap - storage.get(item), amount))); } - }else{ - ItemSeq recv = getExtraItems(); - - if(save != null){ - //"shave off" extra items - - ItemSeq count = new ItemSeq(); - - //add items already present - count.add(save.meta.secinfo.coreItems); - - count.add(calculateReceivedItems()); - - int capacity = save.meta.secinfo.storageCapacity; - - //when over capacity, add that to the extra items - count.each((i, a) -> { - if(a > capacity){ - recv.remove(i, (a - capacity)); - } - }); - } - - recv.add(items); - - setExtraItems(recv); + }else if(hasBase()){ + items.each((item, amount) -> info.items.add(item, Math.min(info.storageCapacity - info.items.get(item), amount))); + saveInfo(); } } - public ItemSeq calculateItems(){ + /** @return items currently in this sector, taking into account playing state. */ + public ItemSeq items(){ ItemSeq count = new ItemSeq(); //for sectors being played on, add items directly if(isBeingPlayed()){ count.add(state.rules.defaultTeam.items()); - }else if(save != null){ + }else{ //add items already present - count.add(save.meta.secinfo.coreItems); - - count.add(calculateReceivedItems()); - - int capacity = save.meta.secinfo.storageCapacity; - - //validation - count.each((item, amount) -> { - //ensure positive items - if(amount < 0) count.set(item, 0); - //cap the items - if(amount > capacity) count.set(item, capacity); - }); + count.add(info.items); } return count; } - public ItemSeq calculateReceivedItems(){ - ItemSeq count = new ItemSeq(); - - if(save != null){ - long seconds = getSecondsPassed(); - float scl = Math.max(1f - getDamage(), 0); - - //add produced items - save.meta.secinfo.production.each((item, stat) -> count.add(item, (int)(stat.mean * seconds * scl))); - - //add received items - count.add(getExtraItems()); - } - - return count; - } - - //TODO these methods should maybe move somewhere else and/or be contained in a data object - public void setSpawnPosition(int position){ - put("spawn-position", position); - } - - /** Only valid after this sector has been landed on once. */ - //TODO move to sector data? - public int getSpawnPosition(){ - return Core.settings.getInt(key("spawn-position"), Point2.pack(world.width() / 2, world.height() / 2)); - } - - /** @return sector damage from enemy, 0 to 1 */ - public float getDamage(){ - //dead sector - if(save != null & save.meta.tags.getBool("nocores")) return 1.01f; - return Core.settings.getFloat(key("damage"), 0f); - } - - public void setDamage(float damage){ - put("damage", damage); - } - - /** @return time spent in this sector this turn in ticks. */ - public float getTimeSpent(){ - //return currently counting time spent if being played on - if(isBeingPlayed()) return state.secinfo.internalTimeSpent; - - //else return the stored value - return getStoredTimeSpent(); - } - - public void setTimeSpent(float time){ - put("time-spent", time); - - //update counting time - if(isBeingPlayed()){ - state.secinfo.internalTimeSpent = time; - } - } - - public String displayTimeRemaining(){ - float amount = Vars.turnDuration - getTimeSpent(); - int seconds = (int)(amount / 60); - int sf = seconds % 60; - return (seconds / 60) + ":" + (sf < 10 ? "0" : "") + sf; - } - - /** @return the stored amount of time spent in this sector this turn in ticks. - * Do not use unless you know what you're doing. */ - public float getStoredTimeSpent(){ - return Core.settings.getFloat(key("time-spent")); - } - - public void setSecondsPassed(int number){ - put("secondsi-passed", number); - } - - /** @return how much time has passed in this sector without the player resuming here. - * Used for resource production calculations. */ - public int getSecondsPassed(){ - return Core.settings.getInt(key("secondsi-passed")); - } - - //TODO this is terrible - private String key(String key){ - return planet.name + "-s-" + id + "-" + key; - } - - //TODO this is terrible - private void put(String key, Object value){ - Core.settings.put(key(key), value); - } - public String toString(){ return planet.name + "#" + id; } diff --git a/core/src/mindustry/ui/IntFormat.java b/core/src/mindustry/ui/IntFormat.java index 2ca0e9de1f..fab10cd67f 100644 --- a/core/src/mindustry/ui/IntFormat.java +++ b/core/src/mindustry/ui/IntFormat.java @@ -10,7 +10,7 @@ import arc.func.*; public class IntFormat{ private final StringBuilder builder = new StringBuilder(); private final String text; - private int lastValue = Integer.MIN_VALUE; + private int lastValue = Integer.MIN_VALUE, lastValue2 = Integer.MIN_VALUE; private Func converter = String::valueOf; public IntFormat(String text){ @@ -30,4 +30,14 @@ public class IntFormat{ lastValue = value; return builder; } + + public CharSequence get(int value1, int value2){ + if(lastValue != value1 || lastValue2 != value2){ + builder.setLength(0); + builder.append(Core.bundle.format(text, value1, value2)); + } + lastValue = value1; + lastValue2 = value2; + return builder; + } } diff --git a/core/src/mindustry/ui/Styles.java b/core/src/mindustry/ui/Styles.java index 13e97202e5..802a18004b 100644 --- a/core/src/mindustry/ui/Styles.java +++ b/core/src/mindustry/ui/Styles.java @@ -23,6 +23,7 @@ import static mindustry.gen.Tex.*; @StyleDefaults public class Styles{ + //TODO all these names are inconsistent and not descriptive public static Drawable black, black9, black8, black6, black3, black5, none, flatDown, flatOver; public static ButtonStyle defaultb, waveb; public static TextButtonStyle defaultt, squaret, nodet, cleart, discordt, infot, clearPartialt, clearTogglet, clearToggleMenut, togglet, transt, fullTogglet, logict; diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index f06c09ce30..5bd1e5abd3 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -34,13 +34,6 @@ public class PausedDialog extends BaseDialog{ }); if(!mobile){ - //TODO localize + move to other wave menu - cont.label(() -> state.getSector() == null || state.rules.winWave <= 0 || state.getSector().isCaptured() ? "" : - (state.rules.winWave > 0 && !state.getSector().isCaptured() ? - (state.wave >= state.rules.winWave ? "\n[lightgray]Defeat remaining enemies to capture" : "\n[lightgray]Reach wave[accent] " + state.rules.winWave + "[] to capture") : "")) - .visible(() -> state.getSector() != null).colspan(2); - cont.row(); - float dw = 220f; cont.defaults().width(dw).height(55).pad(5f); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 44ef8eb17a..9ad8c87831 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -217,9 +217,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public void renderProjections(){ if(hovered != null){ planets.drawPlane(hovered, () -> { - Draw.color(hovered.isUnderAttack() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f)); + Draw.color(hovered.isAttacked() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f)); - TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : hovered.isUnderAttack() ? Icon.warning.getRegion() : null; + TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : hovered.isAttacked() ? Icon.warning.getRegion() : null; if(icon != null){ Draw.rect(icon, 0, 0); @@ -352,69 +352,80 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.clear(); stable.background(Styles.black6); - stable.add("[accent]" + (sector.preset == null ? sector.id : sector.preset.localizedName)).row(); + stable.table(title -> { + title.add("[accent]" + sector.name()); + if(sector.preset == null){ + title.button(Icon.pencilSmall, Styles.clearPartiali, () -> { + ui.showTextInput("@sectors.rename", "@name", 20, sector.name(), v -> { + sector.setName(v); + updateSelected(); + }); + }).size(40f).padLeft(4); + } + }).row(); + stable.image().color(Pal.accent).fillX().height(3f).pad(3f).row(); stable.add(sector.save != null ? sector.save.getPlayTime() : "@sectors.unexplored").row(); - if(sector.isUnderAttack() || sector.hasEnemyBase()){ + + if(sector.isAttacked() || sector.hasEnemyBase()){ stable.add("[accent]Difficulty: " + (int)(sector.baseCoverage * 10)).row(); } - if(sector.isUnderAttack()){ + if(sector.isAttacked()){ //TODO localize when finalized //these mechanics are likely to change and as such are not added to the bundle stable.add("[scarlet]Under attack!"); stable.row(); - stable.add("[accent]" + (int)(sector.getDamage() * 100) + "% damaged"); + stable.add("[accent]" + (int)(sector.info.damage * 100) + "% damaged"); stable.row(); } if(sector.save != null){ stable.add("@sectors.resources").row(); stable.table(t -> { - - if(sector.save != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.resources.any()){ + if(sector.info.resources.any()){ t.left(); int idx = 0; int max = 5; - for(UnlockableContent c : sector.save.meta.secinfo.resources){ + for(UnlockableContent c : sector.info.resources){ t.image(c.icon(Cicon.small)).padRight(3); if(++idx % max == 0) t.row(); } }else{ t.add("@unknown").color(Color.lightGray); } - - }).fillX().row(); } //production - if(sector.hasBase() && sector.save.meta.hasProduction){ - stable.add("@sectors.production").row(); - stable.table(t -> { - t.left(); + if(sector.hasBase()){ + Table t = new Table().left(); - float scl = Math.max(1f - sector.getDamage(), 0); + float scl = sector.getProductionScale(); - sector.save.meta.secinfo.production.each((item, stat) -> { - int total = (int)(stat.mean * 60 * scl); - if(total > 1){ - t.image(item.icon(Cicon.small)).padRight(3); - t.add(UI.formatAmount(total) + " " + Core.bundle.get("unit.perminute")).color(Color.lightGray); - t.row(); - } - }); - }).row(); + sector.info.production.each((item, stat) -> { + int total = (int)(stat.mean * 60 * scl); + if(total > 1){ + t.image(item.icon(Cicon.small)).padRight(3); + t.add(UI.formatAmount(total) + " " + Core.bundle.get("unit.perminute")).color(Color.lightGray); + t.row(); + } + }); + + if(t.getChildren().any()){ + stable.add("@sectors.production").row(); + stable.add(t); + } } //stored resources - if(sector.hasBase() && sector.save.meta.secinfo.coreItems.total > 0){ + if(sector.hasBase() && sector.info.items.total > 0){ stable.add("@sectors.stored").row(); stable.table(t -> { t.left(); t.table(res -> { - ItemSeq items = sector.calculateItems(); + ItemSeq items = sector.items(); int i = 0; for(ItemStack stack : items){ diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index bb6841dcbb..b79aacbce5 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -60,7 +60,7 @@ public class ResearchDialog extends BaseDialog{ for(Planet planet : content.planets()){ for(Sector sector : planet.sectors){ if(sector.hasSave()){ - ItemSeq cached = sector.calculateItems(); + ItemSeq cached = sector.items(); add(cached); cache.put(sector, cached); } diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index d37095be54..327e65cd13 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -71,12 +71,17 @@ public class HudFragment extends Fragment{ //TODO details and stuff Events.on(SectorCaptureEvent.class, e ->{ //TODO localize - showToast("Sector [accent]" + (e.sector.isBeingPlayed() ? "" : e.sector.id + " ") + "[]captured!"); + showToast("Sector [accent]" + (e.sector.isBeingPlayed() ? "" : e.sector.name() + " ") + "[white]captured!"); }); //TODO localize Events.on(SectorLoseEvent.class, e -> { - showToast(Icon.warning, "Sector " + e.sector.id + " [scarlet]lost!"); + showToast(Icon.warning, "Sector [accent]" + e.sector.name() + "[white] lost!"); + }); + + //TODO localize + Events.on(SectorInvasionEvent.class, e -> { + showToast(Icon.warning, "Sector [accent]" + e.sector.name() + "[white] under attack!"); }); Events.on(ResetEvent.class, e -> { @@ -589,6 +594,7 @@ public class HudFragment extends Fragment{ StringBuilder ibuild = new StringBuilder(); IntFormat wavef = new IntFormat("wave"); + IntFormat wavefc = new IntFormat("wave.cap"); IntFormat enemyf = new IntFormat("wave.enemy"); IntFormat enemiesf = new IntFormat("wave.enemies"); IntFormat waitingf = new IntFormat("wave.waiting", i -> { @@ -714,7 +720,11 @@ public class HudFragment extends Fragment{ table.labelWrap(() -> { builder.setLength(0); - builder.append(wavef.get(state.wave)); + if(state.rules.winWave > 1 && state.rules.winWave >= state.wave && state.isCampaign()){ + builder.append(wavefc.get(state.wave, state.rules.winWave)); + }else{ + builder.append(wavef.get(state.wave)); + } builder.append("\n"); if(state.enemies > 0){ @@ -727,7 +737,7 @@ public class HudFragment extends Fragment{ } if(state.rules.waveTimer){ - builder.append((logic.isWaitingWave() ? Core.bundle.get("wave.waveInProgress") : ( waitingf.get((int)(state.wavetime/60))))); + builder.append((logic.isWaitingWave() ? Core.bundle.get("wave.waveInProgress") : (waitingf.get((int)(state.wavetime/60))))); }else if(state.enemies == 0){ builder.append(Core.bundle.get("waiting")); } diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 7478f81db4..8fdfd6c009 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -267,6 +267,10 @@ public class Tile implements Position, QuadTreeObject, Displayable{ Geometry.circle(x, y, world.width(), world.height(), radius, cons); } + public void circle(int radius, Cons cons){ + circle(radius, (x, y) -> cons.get(world.rawTile(x, y))); + } + public void recache(){ if(!headless && !world.isGenerating()){ renderer.blocks.floor.recacheTile(this); @@ -332,6 +336,11 @@ public class Tile implements Position, QuadTreeObject, Displayable{ recache(); } + /** Sets the overlay without a recache. */ + public void setOverlayQuiet(Block block){ + this.overlay = (Floor)block; + } + public void clearOverlay(){ setOverlayID((short)0); } diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 093fff4f70..dd1cc69007 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -121,9 +121,7 @@ public class LaunchPad extends Block{ return Core.bundle.format("launch.destination", dest == null ? Core.bundle.get("sectors.nonelaunch") : - dest.preset == null ? - "[accent]Sector " + dest.id : - "[accent]" + dest.preset.localizedName); + "[accent]" + dest.name()); }).pad(4); } @@ -213,7 +211,7 @@ public class LaunchPad extends Block{ //actually launch the items upon removal if(team() == state.rules.defaultTeam){ if(destsec != null && (destsec != state.rules.sector || net.client())){ - ItemSeq dest = destsec.getExtraItems(); + ItemSeq dest = new ItemSeq(); for(ItemStack stack : stacks){ dest.add(stack); @@ -223,7 +221,7 @@ public class LaunchPad extends Block{ Events.fire(new LaunchItemEvent(stack)); } - destsec.setExtraItems(dest); + destsec.addItems(dest); } } } diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index 457e7e65e7..60ab45f159 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -156,7 +156,7 @@ public class Conveyor extends Block implements Autotiler{ lastInserted = build.lastInserted; mid = build.mid; minitem = build.minitem; - items.addAll(build.items); + items.add(build.items); } } diff --git a/core/src/mindustry/world/blocks/distribution/StackConveyor.java b/core/src/mindustry/world/blocks/distribution/StackConveyor.java index e7095a686c..3327c62c15 100644 --- a/core/src/mindustry/world/blocks/distribution/StackConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/StackConveyor.java @@ -203,7 +203,7 @@ public class StackConveyor extends Block implements Autotiler{ if(front() instanceof StackConveyorBuild e && e.team == team){ // sleep if its occupied if(e.link == -1){ - e.items.addAll(items); + e.items.add(items); e.lastItem = lastItem; e.link = tile.pos(); // ▲ to | from ▼ diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index 50eb65a270..a8a5578d95 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -70,7 +70,7 @@ public class StorageBlock extends Block{ public void overwrote(Seq previous){ for(Building other : previous){ if(other.items != null){ - items.addAll(other.items); + items.add(other.items); } } diff --git a/core/src/mindustry/world/modules/ItemModule.java b/core/src/mindustry/world/modules/ItemModule.java index 16d49484f0..6cd96985cb 100644 --- a/core/src/mindustry/world/modules/ItemModule.java +++ b/core/src/mindustry/world/modules/ItemModule.java @@ -243,6 +243,16 @@ public class ItemModule extends BlockModule{ } } + public void add(ItemSeq stacks){ + stacks.each(this::add); + } + + public void add(ItemModule items){ + for(int i = 0; i < items.items.length; i++){ + add(i, items.items[i]); + } + } + public void add(Item item, int amount){ add(item.id, amount); } @@ -261,12 +271,6 @@ public class ItemModule extends BlockModule{ } } - public void addAll(ItemModule items){ - for(int i = 0; i < items.items.length; i++){ - add(i, items.items[i]); - } - } - public void remove(Item item, int amount){ amount = Math.min(amount, items[item.id]); diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index d8f67eee8c..645b2ea7f0 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -153,9 +153,9 @@ public class Generators{ ImagePacker.generate("cracks", () -> { RidgedPerlin r = new RidgedPerlin(1, 3); - for(int size = 1; size <= Block.maxCrackSize; size++){ + for(int size = 1; size <= BlockRenderer.maxCrackSize; size++){ int dim = size * 32; - int steps = Block.crackRegions; + int steps = BlockRenderer.crackRegions; for(int i = 0; i < steps; i++){ float fract = i / (float)steps; From f5decdaa1c3da58c095b50c3dce5c8a516226043 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 11:27:17 -0400 Subject: [PATCH 067/145] Disabled spawner radius/warning when waves off --- core/src/mindustry/ai/WaveSpawner.java | 2 +- core/src/mindustry/entities/comp/UnitComp.java | 2 +- core/src/mindustry/graphics/OverlayRenderer.java | 10 ++++++---- .../mindustry/world/blocks/storage/CoreBlock.java | 15 +++++++++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 9a1ffb9d1d..99b52d40e5 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -48,7 +48,7 @@ public class WaveSpawner{ /** @return true if the player is near a ground spawn point. */ public boolean playerNear(){ - return !player.dead() && spawns.contains(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < state.rules.dropZoneRadius && player.team() != state.rules.waveTeam); + return state.rules.waves && !player.dead() && spawns.contains(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < state.rules.dropZoneRadius && player.team() != state.rules.waveTeam); } public void spawnEnemies(){ diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 605e2d1d1e..72a8d115f0 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -286,7 +286,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I drag = type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f); //apply knockback based on spawns - if(team != state.rules.waveTeam){ + if(team != state.rules.waveTeam && state.rules.waves){ float relativeSize = state.rules.dropZoneRadius + hitSize/2f + 1f; for(Tile spawn : spawner.getSpawns()){ if(within(spawn.worldx(), spawn.worldy(), relativeSize)){ diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index 19569ed1a3..c7c0c697c3 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -121,10 +121,12 @@ public class OverlayRenderer{ Lines.stroke(2f); Draw.color(Color.gray, Color.lightGray, Mathf.absin(Time.time(), 8f, 1f)); - for(Tile tile : spawner.getSpawns()){ - if(tile.within(player.x, player.y, state.rules.dropZoneRadius + spawnerMargin)){ - Draw.alpha(Mathf.clamp(1f - (player.dst(tile) - state.rules.dropZoneRadius) / spawnerMargin)); - Lines.dashCircle(tile.worldx(), tile.worldy(), state.rules.dropZoneRadius); + if(state.rules.waves){ + for(Tile tile : spawner.getSpawns()){ + if(tile.within(player.x, player.y, state.rules.dropZoneRadius + spawnerMargin)){ + Draw.alpha(Mathf.clamp(1f - (player.dst(tile) - state.rules.dropZoneRadius) / spawnerMargin)); + Lines.dashCircle(tile.worldx(), tile.worldy(), state.rules.dropZoneRadius); + } } } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index e0aae707fa..99ae254e8b 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -196,6 +196,21 @@ public class CoreBlock extends StorageBlock{ return false; } + @Override + public void onDestroyed(){ + super.onDestroyed(); + + //add a spawn to the map for future reference - waves should be disabled, so it shouldn't matter + if(state.isCampaign() && team == state.rules.waveTeam){ + //do not recache + tile.setOverlayQuiet(Blocks.spawn); + + if(!spawner.getSpawns().contains(tile)){ + spawner.getSpawns().add(tile); + } + } + } + @Override public void drawLight(){ Drawf.light(team, x, y, 30f * size, Pal.accent, 0.5f + Mathf.absin(20f, 0.1f)); From 83756a6ea009b8d4ed35352ee926437e5d0330af Mon Sep 17 00:00:00 2001 From: abomb4 Date: Sat, 17 Oct 2020 00:05:19 +0800 Subject: [PATCH 068/145] New feature: bullet homing delay --- core/src/mindustry/entities/bullet/BulletType.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index aafbb42504..8e06cf466e 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -104,6 +104,8 @@ public abstract class BulletType extends Content{ public float incendChance = 1f; public float homingPower = 0f; public float homingRange = 50f; + /** Use a negative value to disable homing delay. */ + public float homingDelay = -1f; public Color lightningColor = Pal.surge; public int lightning; @@ -260,7 +262,7 @@ public abstract class BulletType extends Content{ } public void update(Bullet b){ - if(homingPower > 0.0001f){ + if(homingPower > 0.0001f && b.time >= homingDelay){ Teamc target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround); if(target != null){ b.vel.setAngle(Mathf.slerpDelta(b.rotation(), b.angleTo(target), homingPower)); From f391e7a5ac04ee9731b134e02f31eb26b553e04f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 12:16:00 -0400 Subject: [PATCH 069/145] Sector production bugfixes --- core/src/mindustry/content/SectorPresets.java | 14 ++++++------- core/src/mindustry/game/Universe.java | 5 +---- .../mindustry/ui/dialogs/PlanetDialog.java | 20 ++++++++----------- .../world/blocks/storage/CoreBlock.java | 1 + 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index ff1f36bc22..e516bab740 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -18,7 +18,7 @@ public class SectorPresets implements ContentList{ groundZero = new SectorPreset("groundZero", serpulo, 15){{ alwaysUnlocked = true; captureWave = 10; - difficulty = 0; + difficulty = 1; }}; saltFlats = new SectorPreset("saltFlats", serpulo, 101){{ @@ -26,23 +26,23 @@ public class SectorPresets implements ContentList{ }}; frozenForest = new SectorPreset("frozenForest", serpulo, 86){{ - captureWave = 40; - difficulty = 1; + captureWave = 20; + difficulty = 2; }}; craters = new SectorPreset("craters", serpulo, 18){{ - captureWave = 40; + captureWave = 20; difficulty = 2; }}; ruinousShores = new SectorPreset("ruinousShores", serpulo, 19){{ - captureWave = 40; + captureWave = 30; difficulty = 3; }}; stainedMountains = new SectorPreset("stainedMountains", serpulo, 20){{ captureWave = 30; - difficulty = 2; + difficulty = 3; }}; fungalPass = new SectorPreset("fungalPass", serpulo, 21){{ @@ -54,7 +54,7 @@ public class SectorPresets implements ContentList{ }}; tarFields = new SectorPreset("tarFields", serpulo, 23){{ - captureWave = 40; + captureWave = 50; difficulty = 5; }}; diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 37a22d4209..5577d3da2f 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -196,18 +196,15 @@ public class Universe{ if(!sector.isAttacked() && turn > invasionGracePeriod){ //TODO use factors like difficulty for better invasion chance if(sector.near().contains(Sector::hasEnemyBase) && Mathf.chance(baseInvasionChance)){ - int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 4) * 5; - float waveSpace = Math.max(sector.info.waveSpacing - Mathf.random(1, 4) * 5 * 60, 40 * 60); + int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 5) * 5; //assign invasion-related things if(sector.isBeingPlayed()){ state.rules.winWave = waveMax; state.rules.waves = true; - state.rules.waveSpacing = waveSpace; }else{ sector.info.winWave = waveMax; sector.info.waves = true; - sector.info.waveSpacing = waveSpace; sector.saveInfo(); } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 9ad8c87831..2d32588faa 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -380,19 +380,15 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.row(); } - if(sector.save != null){ + if(sector.save != null && sector.info.resources.any()){ stable.add("@sectors.resources").row(); stable.table(t -> { - if(sector.info.resources.any()){ - t.left(); - int idx = 0; - int max = 5; - for(UnlockableContent c : sector.info.resources){ - t.image(c.icon(Cicon.small)).padRight(3); - if(++idx % max == 0) t.row(); - } - }else{ - t.add("@unknown").color(Color.lightGray); + t.left(); + int idx = 0; + int max = 5; + for(UnlockableContent c : sector.info.resources){ + t.image(c.icon(Cicon.small)).padRight(3); + if(++idx % max == 0) t.row(); } }).fillX().row(); } @@ -414,7 +410,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(t.getChildren().any()){ stable.add("@sectors.production").row(); - stable.add(t); + stable.add(t).row(); } } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 99ae254e8b..b8c240e95d 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -342,6 +342,7 @@ public class CoreBlock extends StorageBlock{ @Override public void handleItem(Building source, Item item){ if(net.server() || !net.active()){ + state.secinfo.handleCoreItem(item, 1); if(items.get(item) >= getMaximumAccepted(item)){ //create item incineration effect at random intervals From b0ea725142240a51ca87c8e1e2fd521fd1db2004 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 12:56:48 -0400 Subject: [PATCH 070/145] Sector tweaks --- core/src/mindustry/core/Control.java | 11 +++++++++++ core/src/mindustry/game/Universe.java | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index f6ae999945..1d5e2de6fc 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -283,6 +283,17 @@ public class Control implements ApplicationListener, Loadable{ //if there is no base, simulate a new game and place the right loadout at the spawn position if(state.rules.defaultTeam.cores().isEmpty()){ + + //no spawn set -> delete the sector save + if(sector.info.spawnPosition == 0){ + //delete old save + sector.save = null; + slot.delete(); + //play again + playSector(origin, sector); + return; + } + //reset wave so things are more fair state.wave = 1; diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 5577d3da2f..5827f61168 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -165,7 +165,7 @@ public class Universe{ sector.info.damage = 1f; sector.info.hasCore = false; sector.info.production.clear(); - }else if(attacked && wavesPassed > 0 && sector.info.wave + wavesPassed >= sector.info.winWave && !sector.hasEnemyBase()){ + }else if(attacked && wavesPassed > 0 && sector.info.winWave > 1 && sector.info.wave + wavesPassed >= sector.info.winWave && !sector.hasEnemyBase()){ //autocapture the sector sector.info.waves = false; From 1fbced0433effb5edabc3555b2fe862ace3a0d9c Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 14:09:29 -0400 Subject: [PATCH 071/145] Corrected loadout placement function --- core/src/mindustry/core/Control.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 1d5e2de6fc..0b789d14fd 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -301,7 +301,7 @@ public class Control implements ApplicationListener, Loadable{ Groups.unit.clear(); Tile spawn = world.tile(sector.info.spawnPosition); - Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); + Schematics.placeLaunchLoadout(spawn.x, spawn.y); //set up camera/player locations player.set(spawn.x * tilesize, spawn.y * tilesize); From bddcdc0aa2f919237ed9b86b431283f070cad413 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 19:57:13 +0100 Subject: [PATCH 072/145] make planet stuff public, constructor protected --- .../mindustry/graphics/g3d/PlanetGrid.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index e4972e3eb7..3f5ee0630a 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -22,15 +22,16 @@ public class PlanetGrid{ {5, 3, 10, 1, 4}, {2, 5, 4, 0, 11}, {3, 7, 6, 1, 8}, {7, 2, 9, 0, 6} }; - public final int size; - public final Ptile[] tiles; - public final Corner[] corners; - public final Edge[] edges; + public int size; + public Ptile[] tiles; + public Corner[] corners; + public Edge[] edges; - PlanetGrid(int size){ + //this is protected so if you want to make strange grids you should know what you're doing. + protected PlanetGrid(int size){ this.size = size; - tiles = new Ptile[Buildingount(size)]; + tiles = new Ptile[tileCount(size)]; for(int i = 0; i < tiles.length; i++){ tiles[i] = new Ptile(i, i < 12 ? 5 : 6); } @@ -67,7 +68,7 @@ public class PlanetGrid{ return result; } - static PlanetGrid initialGrid(){ + public static PlanetGrid initialGrid(){ PlanetGrid grid = new PlanetGrid(0); for(Ptile t : grid.tiles){ @@ -111,7 +112,7 @@ public class PlanetGrid{ return grid; } - static PlanetGrid subdividedGrid(PlanetGrid prev){ + public static PlanetGrid subdividedGrid(PlanetGrid prev){ PlanetGrid grid = new PlanetGrid(prev.size + 1); int prevTiles = prev.tiles.length; @@ -162,7 +163,7 @@ public class PlanetGrid{ return grid; } - static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ + public static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ Corner c = grid.corners[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2], grid.tiles[t3]}; c.v.set(t[0].v).add(t[1].v).add(t[2].v).nor(); @@ -172,7 +173,7 @@ public class PlanetGrid{ } } - static void addEdge(int id, PlanetGrid grid, int t1, int t2){ + public static void addEdge(int id, PlanetGrid grid, int t1, int t2){ Edge e = grid.edges[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2]}; Corner[] c = { @@ -186,36 +187,36 @@ public class PlanetGrid{ } } - static int pos(Ptile t, Ptile n){ + public static int pos(Ptile t, Ptile n){ for(int i = 0; i < t.edgeCount; i++) if(t.tiles[i] == n) return i; return -1; } - static int pos(Ptile t, Corner c){ + public static int pos(Ptile t, Corner c){ for(int i = 0; i < t.edgeCount; i++) if(t.corners[i] == c) return i; return -1; } - static int pos(Corner c, Corner n){ + public static int pos(Corner c, Corner n){ for(int i = 0; i < 3; i++) if(c.corners[i] == n) return i; return -1; } - static int Buildingount(int size){ + public static int tileCount(int size){ return 10 * Mathf.pow(3, size) + 2; } - static int cornerCount(int size){ + public static int cornerCount(int size){ return 20 * Mathf.pow(3, size); } - static int edgeCount(int size){ + public static int edgeCount(int size){ return 30 * Mathf.pow(3, size); } From e00daffe6db59dc71c9bdd54f6d1387074432836 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 15:27:30 -0400 Subject: [PATCH 073/145] Bugfixes --- core/assets/bundles/bundle.properties | 1 - core/src/mindustry/Vars.java | 2 +- core/src/mindustry/core/Logic.java | 29 +---------------- .../src/mindustry/editor/MapEditorDialog.java | 11 ++++--- .../entities/bullet/LaserBulletType.java | 5 +++ .../entities/bullet/LiquidBulletType.java | 2 ++ .../mindustry/entities/comp/BuildingComp.java | 32 +++++++++++++++++++ core/src/mindustry/game/SectorInfo.java | 2 +- core/src/mindustry/game/Universe.java | 4 +-- core/src/mindustry/maps/SectorDamage.java | 8 +++-- .../ui/dialogs/SettingsMenuDialog.java | 3 -- .../ui/fragments/PlacementFragment.java | 2 +- .../world/blocks/storage/CoreBlock.java | 6 ++-- .../world/blocks/storage/StorageBlock.java | 4 ++- 14 files changed, 63 insertions(+), 48 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index aa515bfc6f..78c3259e9b 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -730,7 +730,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required) setting.fps.name = Show FPS & Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index d88b6584f7..3c8b57e7c5 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -87,7 +87,7 @@ public class Vars implements Loadable{ /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ - public static final float baseInvasionChance = 1f / 15f; + public static final float baseInvasionChance = 1f / 25f; /** how many turns have to pass before invasions start */ public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 00787d9e43..88aeeabed9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -14,8 +14,6 @@ import mindustry.maps.*; import mindustry.type.*; import mindustry.type.Weather.*; import mindustry.world.*; -import mindustry.world.blocks.*; -import mindustry.world.blocks.ConstructBlock.*; import java.util.*; @@ -40,32 +38,7 @@ public class Logic implements ApplicationListener{ //skip null entities or un-rebuildables, for obvious reasons; also skip client since they can't modify these requests if(tile.build == null || !tile.block().rebuildable || net.client()) return; - if(block instanceof ConstructBlock){ - - ConstructBuild entity = tile.bc(); - - //update block to reflect the fact that something was being constructed - if(entity.cblock != null && entity.cblock.synthetic()){ - block = entity.cblock; - }else{ - //otherwise this was a deconstruction that was interrupted, don't want to rebuild that - return; - } - } - - TeamData data = state.teams.get(tile.team()); - - //remove existing blocks that have been placed here. - //painful O(n) iteration + copy - for(int i = 0; i < data.blocks.size; i++){ - BlockPlan b = data.blocks.get(i); - if(b.x == tile.x && b.y == tile.y){ - data.blocks.removeIndex(i); - break; - } - } - - data.blocks.addFirst(new BlockPlan(tile.x, tile.y, (short)tile.build.rotation, block.id, tile.build.config())); + tile.build.addPlan(true); }); Events.on(BlockBuildEndEvent.class, event -> { diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 4f7eb008fd..dda95c6ed2 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -385,7 +385,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ } public void build(){ - float size = 60f; + float size = 58f; clearChildren(); table(cont -> { @@ -559,10 +559,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ mid.row(); - mid.table(t -> { - t.button("@editor.center", Icon.move, Styles.cleart, () -> view.center()).growX().margin(9f); - }).growX().top(); - + if(!mobile){ + mid.table(t -> { + t.button("@editor.center", Icon.move, Styles.cleart, () -> view.center()).growX().margin(9f); + }).growX().top(); + } }).margin(0).left().growY(); diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index ad5965f3b8..6d43baf95c 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -39,6 +39,11 @@ public class LaserBulletType extends BulletType{ this(1f); } + @Override + public float estimateDPS(){ + return super.estimateDPS() * 2f; + } + @Override public void init(){ super.init(); diff --git a/core/src/mindustry/entities/bullet/LiquidBulletType.java b/core/src/mindustry/entities/bullet/LiquidBulletType.java index 2d3de79977..5da33f95e0 100644 --- a/core/src/mindustry/entities/bullet/LiquidBulletType.java +++ b/core/src/mindustry/entities/bullet/LiquidBulletType.java @@ -22,6 +22,8 @@ public class LiquidBulletType extends BulletType{ if(liquid != null){ this.liquid = liquid; this.status = liquid.effect; + lightColor = liquid.lightColor; + lightOpacity = liquid.lightColor.a; } ammoMultiplier = 1f; diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index a3514cf76a..7e8bb19a1e 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -21,12 +21,14 @@ import mindustry.ctype.*; import mindustry.entities.*; import mindustry.game.EventType.*; import mindustry.game.*; +import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.blocks.ConstructBlock.*; import mindustry.world.blocks.environment.*; import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.power.*; @@ -191,6 +193,36 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, //endregion //region utility methods + public void addPlan(boolean checkPrevious){ + if(!block.rebuildable) return; + + if(self() instanceof ConstructBuild entity){ + //update block to reflect the fact that something was being constructed + if(entity.cblock != null && entity.cblock.synthetic()){ + block = entity.cblock; + }else{ + //otherwise this was a deconstruction that was interrupted, don't want to rebuild that + return; + } + } + + TeamData data = state.teams.get(team); + + if(checkPrevious){ + //remove existing blocks that have been placed here. + //painful O(n) iteration + copy + for(int i = 0; i < data.blocks.size; i++){ + BlockPlan b = data.blocks.get(i); + if(b.x == tile.x && b.y == tile.y){ + data.blocks.removeIndex(i); + break; + } + } + } + + data.blocks.addFirst(new BlockPlan(tile.x, tile.y, (short)rotation, block.id, config())); + } + /** Configure with the current, local player. */ public void configure(Object value){ //save last used config diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index c6c5d3ee51..1d928b00cd 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -109,7 +109,7 @@ public class SectorInfo{ entity.items.clear(); entity.items.add(items); //ensure capacity. - entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.block.itemCapacity))); + entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.storageCapacity))); } //TODO write items. diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 5827f61168..30f0100b2d 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -194,8 +194,8 @@ public class Universe{ //queue random invasions if(!sector.isAttacked() && turn > invasionGracePeriod){ - //TODO use factors like difficulty for better invasion chance - if(sector.near().contains(Sector::hasEnemyBase) && Mathf.chance(baseInvasionChance)){ + //invasion chance depends on # of nearby bases + if(Mathf.chance(baseInvasionChance * sector.near().count(Sector::hasEnemyBase))){ int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 5) * 5; //assign invasion-related things diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 1c942d1228..52a129c0b7 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -328,7 +328,7 @@ public class SectorDamage{ int radius = 3; //only penetrate a certain % by health, not by distance - float totalHealth = path.sumf(t -> { + float totalHealth = damage >= 1f ? 1f : path.sumf(t -> { float s = 0; for(int dx = -radius; dx <= radius; dx++){ for(int dy = -radius; dy <= radius; dy++){ @@ -345,7 +345,7 @@ public class SectorDamage{ float healthCount = 0; out: - for(int i = 0; i < path.size && healthCount < targetHealth; i++){ + for(int i = 0; i < path.size && (healthCount < targetHealth || damage >= 1f); i++){ Tile t = path.get(i); for(int dx = -radius; dx <= radius; dx++){ @@ -365,7 +365,7 @@ public class SectorDamage{ removal.add(other.build); - if(healthCount >= targetHealth){ + if(healthCount >= targetHealth && damage < 0.999f){ break out; } } @@ -376,6 +376,7 @@ public class SectorDamage{ for(Building r : removal){ if(r.tile.build == r){ + r.addPlan(false); r.tile.remove(); } } @@ -424,6 +425,7 @@ public class SectorDamage{ Effect.rubble(other.build.x, other.build.y, other.block().size); } + other.build.addPlan(false); other.remove(); } } diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index efcc6e68bb..c00076d92b 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -339,9 +339,6 @@ public class SettingsMenuDialog extends SettingsDialog{ graphics.checkPref("smoothcamera", true); graphics.checkPref("position", false); graphics.checkPref("fps", false); - if(!mobile){ - graphics.checkPref("blockselectkeys", true); - } graphics.checkPref("playerindicators", true); graphics.checkPref("indicators", true); graphics.checkPref("animatedwater", true); diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index 7b53a24012..25c009ff63 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -289,7 +289,7 @@ public class PlacementFragment extends Fragment{ topTable.table(header -> { String keyCombo = ""; - if(!mobile && Core.settings.getBool("blockselectkeys")){ + if(!mobile){ Seq blocks = getByCategory(currentCategory); for(int i = 0; i < blocks.size; i++){ if(blocks.get(i) == displayBlock && (i + 1) / 10 - 1 < blockSelect.length){ diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index b8c240e95d..1acf5d61c3 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -333,7 +333,7 @@ public class CoreBlock extends StorageBlock{ @Override public void itemTaken(Item item){ - if(state.isCampaign()){ + if(state.isCampaign() && team == state.rules.defaultTeam){ //update item taken amount state.secinfo.handleCoreItem(item, -1); } @@ -342,7 +342,9 @@ public class CoreBlock extends StorageBlock{ @Override public void handleItem(Building source, Item item){ if(net.server() || !net.active()){ - state.secinfo.handleCoreItem(item, 1); + if(team == state.rules.defaultTeam){ + state.secinfo.handleCoreItem(item, 1); + } if(items.get(item) >= getMaximumAccepted(item)){ //create item incineration effect at random intervals diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index a8a5578d95..b4bef2c05c 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -46,7 +46,9 @@ public class StorageBlock extends Block{ @Override public void handleItem(Building source, Item item){ if(linkedCore != null){ - incinerateEffect(this, source); + if(linkedCore.items.get(item) >= ((CoreBuild)linkedCore).storageCapacity){ + incinerateEffect(this, source); + } ((CoreBuild)linkedCore).noEffect = true; linkedCore.handleItem(source, item); }else{ From fd54c66726c7152bb44bc0e7baec0391edbcdf3c Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 22:26:50 +0100 Subject: [PATCH 074/145] make ptile/edge/corner mutable --- .../mindustry/graphics/g3d/PlanetGrid.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index 3f5ee0630a..c0c7ebbe9e 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -221,12 +221,12 @@ public class PlanetGrid{ } public static class Ptile{ - public final int id; - public final int edgeCount; + public int id; + public int edgeCount; - public final Ptile[] tiles; - public final Corner[] corners; - public final Edge[] edges; + public Ptile[] tiles; + public Corner[] corners; + public Edge[] edges; public Vec3 v = new Vec3(); @@ -241,11 +241,11 @@ public class PlanetGrid{ } public static class Corner{ - public final int id; - public final Ptile[] tiles = new Ptile[3]; - public final Corner[] corners = new Corner[3]; - public final Edge[] edges = new Edge[3]; - public final Vec3 v = new Vec3(); + public int id; + public Ptile[] tiles = new Ptile[3]; + public Corner[] corners = new Corner[3]; + public Edge[] edges = new Edge[3]; + public Vec3 v = new Vec3(); public Corner(int id){ this.id = id; @@ -253,9 +253,9 @@ public class PlanetGrid{ } public static class Edge{ - public final int id; - public final Ptile[] tiles = new Ptile[2]; - public final Corner[] corners = new Corner[2]; + public int id; + public Ptile[] tiles = new Ptile[2]; + public Corner[] corners = new Corner[2]; public Edge(int id){ this.id = id; From 97b0461d7ff8b05afb459cc508f7149b65d8062a Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 23:00:06 +0100 Subject: [PATCH 075/145] allow modded planets to customize drawing --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 4 +++- core/src/mindustry/type/Planet.java | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index e3eb74a7b5..75e9989232 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -110,8 +110,10 @@ public class PlanetRenderer implements Disposable{ } private void renderPlanet(Planet planet){ + if(!planet.visible()) return; + //render planet at offsetted position in the world - planet.mesh.render(cam.combined, planet.getTransform(mat)); + planet.render(cam.combined, planet.getTransform(mat)); renderOrbit(planet); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 6153aa4721..47c8bc1750 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -264,4 +264,12 @@ public class Planet extends UnlockableContent{ public ContentType getContentType(){ return ContentType.planet; } + + public boolean visible(){ + return true; + } + + public void draw(Mat3D projection, Mat3d Transform){ + mesh.render(projection, transform); + } } From 060152fc2959b4df337bfeb933e3ad0ad48820f3 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 23:06:46 +0100 Subject: [PATCH 076/145] make calc stuff pkg private again --- core/src/mindustry/graphics/g3d/PlanetGrid.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index c0c7ebbe9e..8fb19dff56 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -187,36 +187,36 @@ public class PlanetGrid{ } } - public static int pos(Ptile t, Ptile n){ + static int pos(Ptile t, Ptile n){ for(int i = 0; i < t.edgeCount; i++) if(t.tiles[i] == n) return i; return -1; } - public static int pos(Ptile t, Corner c){ + static int pos(Ptile t, Corner c){ for(int i = 0; i < t.edgeCount; i++) if(t.corners[i] == c) return i; return -1; } - public static int pos(Corner c, Corner n){ + static int pos(Corner c, Corner n){ for(int i = 0; i < 3; i++) if(c.corners[i] == n) return i; return -1; } - public static int tileCount(int size){ + static int tileCount(int size){ return 10 * Mathf.pow(3, size) + 2; } - public static int cornerCount(int size){ + static int cornerCount(int size){ return 20 * Mathf.pow(3, size); } - public static int edgeCount(int size){ + static int edgeCount(int size){ return 30 * Mathf.pow(3, size); } From 0fa947bfaa4bc7dd4a0242859267ccb2b20ed7a3 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 23:22:39 +0100 Subject: [PATCH 077/145] make calc stuff pkg private again --- core/src/mindustry/graphics/g3d/PlanetGrid.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index 8fb19dff56..380f937658 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -163,7 +163,7 @@ public class PlanetGrid{ return grid; } - public static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ + static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ Corner c = grid.corners[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2], grid.tiles[t3]}; c.v.set(t[0].v).add(t[1].v).add(t[2].v).nor(); @@ -173,7 +173,7 @@ public class PlanetGrid{ } } - public static void addEdge(int id, PlanetGrid grid, int t1, int t2){ + static void addEdge(int id, PlanetGrid grid, int t1, int t2){ Edge e = grid.edges[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2]}; Corner[] c = { From fc1b03f3226c483aad5a0157f60022b6eea35bb6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 20:09:48 -0400 Subject: [PATCH 078/145] Various tweaks --- core/src/mindustry/content/UnitTypes.java | 5 ++--- core/src/mindustry/core/Logic.java | 10 ++++++++- core/src/mindustry/game/DefaultWaves.java | 8 +++---- core/src/mindustry/game/SectorInfo.java | 4 ++++ .../src/mindustry/graphics/BlockRenderer.java | 21 ++++++++++--------- .../src/mindustry/graphics/LightRenderer.java | 1 - core/src/mindustry/maps/SectorDamage.java | 15 +++++++++---- .../world/blocks/storage/StorageBlock.java | 2 +- 8 files changed, 42 insertions(+), 24 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 9a1b851118..b9189ec64e 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -872,7 +872,6 @@ public class UnitTypes implements ContentList{ drag = 0.01f; flying = true; health = 75; - faceTarget = false; engineOffset = 5.5f; range = 140f; @@ -1449,13 +1448,13 @@ public class UnitTypes implements ContentList{ trailMult = 0.8f; hitEffect = Fx.massiveExplosion; knockback = 1.5f; - lifetime = 140f; + lifetime = 100f; height = 15.5f; width = 15f; collidesTiles = false; ammoMultiplier = 4f; splashDamageRadius = 60f; - splashDamage = 85f; + splashDamage = 80f; backColor = Pal.missileYellowBack; frontColor = Pal.missileYellow; trailEffect = Fx.artilleryTrail; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 88aeeabed9..c2274922de 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -96,6 +96,11 @@ public class Logic implements ApplicationListener{ Events.on(WorldLoadEvent.class, e -> { //enable infinite ammo for wave team by default state.rules.waveTeam.rules().infiniteAmmo = true; + if(state.isCampaign()){ + //enable building AI + state.rules.waveTeam.rules().ai = true; + state.rules.waveTeam.rules().infiniteResources = true; + } //save settings Core.settings.manualSave(); @@ -174,9 +179,12 @@ public class Logic implements ApplicationListener{ } //if there's a "win" wave and no enemies are present, win automatically - if(state.rules.waves && state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()){ + if(state.rules.waves && (state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()) || + (state.rules.attackMode && state.rules.waveTeam.cores().isEmpty())){ //the sector has been conquered - waves get disabled state.rules.waves = false; + //disable attack mode + state.rules.attackMode = false; //fire capture event Events.fire(new SectorCaptureEvent(state.rules.sector)); diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/DefaultWaves.java index 12d1d28dfe..f3c98f9fb4 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/DefaultWaves.java @@ -81,7 +81,7 @@ public class DefaultWaves{ effect = StatusEffects.overdrive; }}, - new SpawnGroup(mace){{ + new SpawnGroup(pulsar){{ begin = 120; spacing = 2; unitScaling = 3; @@ -122,7 +122,7 @@ public class DefaultWaves{ shieldScaling = 30; }}, - new SpawnGroup(dagger){{ + new SpawnGroup(nova){{ begin = 35; spacing = 3; unitAmount = 4; @@ -233,7 +233,7 @@ public class DefaultWaves{ shieldScaling = 20f; }}, - new SpawnGroup(atrax){{ + new SpawnGroup(toxopid){{ begin = 210; unitAmount = 1; unitScaling = 1; @@ -258,7 +258,7 @@ public class DefaultWaves{ {nova, pulsar, quasar, vela, corvus}, {crawler, atrax, spiroct, arkyid, toxopid}, //{risso, minke, bryde, sei, omura}, //questionable choices - //{mono, poly, mega, quad, oct}, //do not attack + {poly, poly, mega, quad, quad}, {flare, horizon, zenith, antumbra, eclipse} }; diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 1d928b00cd..04e0be38ef 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -41,6 +41,8 @@ public class SectorInfo{ public Seq resources = new Seq<>(); /** Whether waves are enabled here. */ public boolean waves = true; + /** Whether attack mode is enabled here. */ + public boolean attack = false; /** Wave # from state */ public int wave = 1, winWave = -1; /** Time between waves. */ @@ -103,6 +105,7 @@ public class SectorInfo{ state.rules.waves = waves; state.rules.waveSpacing = waveSpacing; state.rules.winWave = winWave; + state.rules.attackMode = attack; CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ @@ -135,6 +138,7 @@ public class SectorInfo{ wave = state.wave; winWave = state.rules.winWave; waves = state.rules.waves; + attack = state.rules.attackMode; hasCore = entity != null; bestCoreType = !hasCore ? Blocks.air : state.rules.defaultTeam.cores().max(e -> e.block.size).block; storageCapacity = entity != null ? entity.storageCapacity : 0; diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 223540e601..afe2e3182b 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -38,7 +38,7 @@ public class BlockRenderer implements Disposable{ private FrameBuffer dark = new FrameBuffer(); private Seq outArray2 = new Seq<>(); private Seq shadowEvents = new Seq<>(); - private IntSet processedEntities = new IntSet(), processedLinks = new IntSet(); + private IntSet procEntities = new IntSet(), procLinks = new IntSet(), procLights = new IntSet(); private boolean displayStatus = false; public BlockRenderer(){ @@ -191,8 +191,9 @@ public class BlockRenderer implements Disposable{ tileview.clear(); lightview.clear(); - processedEntities.clear(); - processedLinks.clear(); + procEntities.clear(); + procLinks.clear(); + procLights.clear(); int minx = Math.max(avgx - rangex - expandr, 0); int miny = Math.max(avgy - rangey - expandr, 0); @@ -209,25 +210,25 @@ public class BlockRenderer implements Disposable{ tile = tile.build.tile; } - if(block != Blocks.air && block.cacheLayer == CacheLayer.normal && (tile.build == null || !processedEntities.contains(tile.build.id))){ + if(block != Blocks.air && block.cacheLayer == CacheLayer.normal && (tile.build == null || !procEntities.contains(tile.build.id))){ if(block.expanded || !expanded){ - if(tile.build == null || processedLinks.add(tile.build.id)){ + if(tile.build == null || procLinks.add(tile.build.id)){ tileview.add(tile); if(tile.build != null){ - processedEntities.add(tile.build.id); - processedLinks.add(tile.build.id); + procEntities.add(tile.build.id); + procLinks.add(tile.build.id); } } } //lights are drawn even in the expanded range - if(tile.build != null || tile.block().emitLight){ + if(((tile.build != null && procLights.add(tile.build.pos())) || tile.block().emitLight)){ lightview.add(tile); } if(tile.build != null && tile.build.power != null && tile.build.power.links.size > 0){ for(Building other : tile.build.getPowerConnections(outArray2)){ - if(other.block instanceof PowerNode && processedLinks.add(other.id)){ //TODO need a generic way to render connections! + if(other.block instanceof PowerNode && procLinks.add(other.id)){ //TODO need a generic way to render connections! tileview.add(other.tile); } } @@ -235,7 +236,7 @@ public class BlockRenderer implements Disposable{ } //special case for floors - if(block == Blocks.air && tile.floor().emitLight){ + if((block == Blocks.air && tile.floor().emitLight) && procLights.add(tile.pos())){ lightview.add(tile); } } diff --git a/core/src/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java index 10ffa727b6..0a05c7409b 100644 --- a/core/src/mindustry/graphics/LightRenderer.java +++ b/core/src/mindustry/graphics/LightRenderer.java @@ -100,7 +100,6 @@ public class LightRenderer{ Draw.vert(ledge.texture, vertices, 0, vertices.length); - Vec2 v3 = Tmp.v2.trnsExact(rot, stroke); u = ledge.u; diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 52a129c0b7..325881760b 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -11,6 +11,7 @@ import mindustry.entities.abilities.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.logic.*; +import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.defense.*; import mindustry.world.blocks.defense.turrets.*; @@ -252,7 +253,10 @@ public class SectorDamage{ if(unit.isPlayer()) continue; if(unit.team == state.rules.defaultTeam){ - sumHealth += unit.health + unit.shield; + //scale health based on armor - yes, this is inaccurate, but better than nothing + float healthMult = 1f + Mathf.clamp(unit.armor / 20f); + + sumHealth += unit.health*healthMult + unit.shield; sumDps += unit.type().dpsEstimate; if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ sumRps += h.amount / h.reload * 60f; @@ -277,10 +281,12 @@ public class SectorDamage{ } for(SpawnGroup group : state.rules.spawns){ + float healthMult = 1f + Mathf.clamp(group.type.armor / 20f); + StatusEffect effect = (group.effect == null ? StatusEffects.none : group.effect); int spawned = group.getSpawned(wave); if(spawned <= 0) continue; - sumWaveHealth += spawned * (group.getShield(wave) + group.type.health); - sumWaveDps += spawned * group.type.dpsEstimate; + sumWaveHealth += spawned * (group.getShield(wave) + group.type.health * effect.healthMultiplier * healthMult); + sumWaveDps += spawned * group.type.dpsEstimate * effect.damageMultiplier; } waveDps.add(new Vec2(wave, sumWaveDps)); waveHealth.add(new Vec2(wave, sumWaveHealth)); @@ -295,7 +301,8 @@ public class SectorDamage{ info.waveDpsBase = reg.intercept; info.waveDpsSlope = reg.slope; - info.sumHealth = sumHealth; + //enemy units like to aim for a lot of non-essential things, so increase resulting health slightly + info.sumHealth = sumHealth * 1.2f; info.sumDps = sumDps; info.sumRps = sumRps; diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index b4bef2c05c..71045e166b 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -26,7 +26,7 @@ public class StorageBlock extends Block{ } public static void incinerateEffect(Building self, Building source){ - if(Mathf.chance(0.1)){ + if(Mathf.chance(0.3)){ Tile edge = Edges.getFacingEdge(source, self); Tile edge2 = Edges.getFacingEdge(self, source); if(edge != null && edge2 != null){ From 05b77d787e109c38cd2f9a714b71abb80bd151aa Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 12:10:52 +0100 Subject: [PATCH 079/145] hide orbits of hidden planets --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 75e9989232..734a3efbdf 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -140,7 +140,7 @@ public class PlanetRenderer implements Disposable{ } private void renderOrbit(Planet planet){ - if(planet.parent == null) return; + if(planet.parent == null || !planet.visible()) return; Vec3 center = planet.parent.position; float radius = planet.orbitRadius; From 54b0d308bed46dab324f9be9eb3d6ea84e2235c3 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 12:16:47 +0100 Subject: [PATCH 080/145] h --- core/src/mindustry/type/Planet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 47c8bc1750..07147b5cd9 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -269,7 +269,7 @@ public class Planet extends UnlockableContent{ return true; } - public void draw(Mat3D projection, Mat3d Transform){ + public void draw(Mat3D projection, Mat3D Transform){ mesh.render(projection, transform); } } From 8e0c5023c934cc1d8823c01b2c77783b30c9b67b Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 12:28:46 +0100 Subject: [PATCH 081/145] hh --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 2 +- core/src/mindustry/type/Planet.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 734a3efbdf..33176408c8 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -113,7 +113,7 @@ public class PlanetRenderer implements Disposable{ if(!planet.visible()) return; //render planet at offsetted position in the world - planet.render(cam.combined, planet.getTransform(mat)); + planet.draw(cam.combined, planet.getTransform(mat)); renderOrbit(planet); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 07147b5cd9..e67a4a493f 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -269,7 +269,7 @@ public class Planet extends UnlockableContent{ return true; } - public void draw(Mat3D projection, Mat3D Transform){ + public void draw(Mat3D projection, Mat3D transform){ mesh.render(projection, transform); } } From c3d0819cc114165acdfa66bdf12ddb28aba8a032 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 09:17:16 -0400 Subject: [PATCH 082/145] Fixed #2988 --- core/src/mindustry/world/blocks/campaign/LaunchPad.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index dd1cc69007..860eb522d2 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -115,6 +115,8 @@ public class LaunchPad extends Block{ public void display(Table table){ super.display(table); + if(!state.isCampaign()) return; + table.row(); table.label(() -> { Sector dest = state.secinfo.getRealDestination(); From e05ba886e8d4fca3e3b0a1905b835dabd493eb75 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 09:37:09 -0400 Subject: [PATCH 083/145] Update README.md --- README.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5c9c797297..209775b7f6 100644 --- a/README.md +++ b/README.md @@ -9,34 +9,34 @@ _[Trello Board](https://trello.com/b/aE2tcUwF/mindustry-40-plans)_ _[Wiki](https://mindustrygame.github.io/wiki)_ _[Javadoc](https://mindustrygame.github.io/docs/)_ -### Contributing +## Contributing See [CONTRIBUTING](CONTRIBUTING.md). -### Building +## Building Bleeding-edge builds are generated automatically for every commit. You can see them [here](https://github.com/Anuken/MindustryBuilds/releases). If you'd rather compile on your own, follow these instructions. First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands: -#### Windows +### Windows _Running:_ `gradlew desktop:run` _Building:_ `gradlew desktop:dist` _Sprite Packing:_ `gradlew tools:pack` -#### Linux/Mac OS +### Linux/Mac OS _Running:_ `./gradlew desktop:run` _Building:_ `./gradlew desktop:dist` _Sprite Packing:_ `./gradlew tools:pack` -#### Server +### Server Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`. -#### 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. 2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory. @@ -44,20 +44,29 @@ Server builds are bundled with each released build (in Releases). If you'd rathe To debug the application on a connected phone, run `gradlew android:installDebug android:run`. -##### Troubleshooting +### Troubleshooting + +#### Permission Denied If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.* +#### Can not attach to current VM / Error during attachment using [...] + +This is a problem related to [Jabel](https://github.com/bsideup/jabel), which I use to compile Java 8-compatible bytecode while using Java 9+ language features. +I don't know of a complete fix to this issue. However, if you're getting the error when running through IntelliJ, a workaround is to launch through Gradle *once*, which starts a daemon and avoids the problem in future runs through IntelliJ. + + + --- Gradle may take up to several minutes to download files. Be patient.
After building, the output .JAR file should be in `/desktop/build/libs/Mindustry.jar` for desktop builds, and in `/server/build/libs/server-release.jar` for server builds. -### Feature Requests +## Feature Requests Post feature requests and feedback [here](https://github.com/Anuken/Mindustry-Suggestions/issues/new/choose). -### Downloads +## Downloads [Get it on Itch.io Date: Sat, 17 Oct 2020 09:59:20 -0400 Subject: [PATCH 084/145] Checks to prevent uncaptureable sectors --- core/src/mindustry/ai/BaseAI.java | 2 +- core/src/mindustry/game/Rules.java | 2 ++ core/src/mindustry/game/SectorInfo.java | 13 +++++++++++-- .../maps/planet/SerpuloPlanetGenerator.java | 6 +++--- core/src/mindustry/type/SectorPreset.java | 1 + .../mindustry/world/blocks/units/UnitFactory.java | 7 +++++++ 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 3b45d8a17b..3a4965aa88 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -40,7 +40,7 @@ public class BaseAI{ } public void update(){ - if(timer.get(timerSpawn, 60) && data.hasCore()){ + if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){ CoreBlock block = (CoreBlock)data.core().block; //create AI core unit diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 329e69c92a..2a927cc59b 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -106,6 +106,8 @@ public class Rules{ public boolean ai; /** TODO Tier of blocks/designs that the AI uses for building. [0, 1]*/ public float aiTier = 0f; + /** Whether, when AI is enabled, ships should be spawned from the core. */ + public boolean aiCoreSpawn = true; /** If true, blocks don't require power or resources. */ public boolean cheat; /** If true, resources are not consumed when building. */ diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 04e0be38ef..f9e30f7d02 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -101,6 +101,17 @@ public class SectorInfo{ /** Write contents of meta into main storage. */ public void write(){ + //enable attack mode when there's a core. + if(state.rules.waveTeam.core() != null){ + attack = true; + winWave = 0; + } + + //if there are infinite waves and no win wave, add a win wave. + if(waves && winWave <= 0 && !attack){ + winWave = 30; + } + state.wave = wave; state.rules.waves = waves; state.rules.waveSpacing = waveSpacing; @@ -114,8 +125,6 @@ public class SectorInfo{ //ensure capacity. entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.storageCapacity))); } - - //TODO write items. } /** Prepare data for writing to a save. */ diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index ee2f6b437c..9065467dff 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -412,12 +412,12 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ if(sector.hasEnemyBase()){ basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector, difficulty); - state.rules.attackMode = true; + state.rules.attackMode = sector.info.attack = true; }else{ - state.rules.winWave = 15 * (int)Math.max(difficulty * 10, 1); + state.rules.winWave = sector.info.winWave = 15 * (int)Math.max(difficulty * 10, 1); } - state.rules.waves = true; + state.rules.waves = sector.info.waves = true; //TODO better waves state.rules.spawns = DefaultWaves.generate(difficulty); diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index 923d023b25..f08374fa70 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -23,6 +23,7 @@ public class SectorPreset extends UnlockableContent{ super(name); this.generator = new FileMapGenerator(name); this.planet = planet; + sector %= planet.sectors.size; this.sector = planet.sectors.get(sector); planet.preset(sector, this); diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index 74248f9932..52a3af85c7 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -14,6 +14,7 @@ import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.blocks.*; @@ -122,6 +123,12 @@ public class UnitFactory extends UnitBlock{ return currentPlan == -1 ? 0 : progress / plans.get(currentPlan).time; } + @Override + public Object senseObject(LAccess sensor){ + if(sensor == LAccess.config) return currentPlan == -1 ? null : plans.get(currentPlan).unit; + return super.senseObject(sensor); + } + @Override public void buildConfiguration(Table table){ Seq units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow()); From 35a86a1aacf77fccb718dd23d61565a985130947 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 15:34:00 +0100 Subject: [PATCH 085/145] add universe draw events --- core/src/mindustry/game/EventType.java | 5 ++- .../graphics/g3d/PlanetRenderer.java | 31 +++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 0ffb2f7369..b786bb47f7 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -35,7 +35,10 @@ public class EventType{ preDraw, postDraw, uiDrawBegin, - uiDrawEnd + uiDrawEnd, + //before/after bloom used, skybox or planets drawn - use Vars.renderer.planets + universeDrawBegin, + universeDrawEnd } public static class WinEvent{} diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index e3eb74a7b5..14a4cc8820 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -10,6 +10,7 @@ import arc.math.geom.*; import arc.struct.*; import arc.util.*; import mindustry.content.*; +import mindustry.game.EventType.*; import mindustry.graphics.*; import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.type.*; @@ -38,19 +39,19 @@ public class PlanetRenderer implements Disposable{ public float zoom = 1f; private final Mesh[] outlines = new Mesh[10]; - private final PlaneBatch3D projector = new PlaneBatch3D(); - private final Mat3D mat = new Mat3D(); - private final FrameBuffer buffer = new FrameBuffer(2, 2, true); - private PlanetInterfaceRenderer irenderer; + public final PlaneBatch3D projector = new PlaneBatch3D(); + public final Mat3D mat = new Mat3D(); + public final FrameBuffer buffer = new FrameBuffer(2, 2, true); + public PlanetInterfaceRenderer irenderer; - private final Bloom bloom = new Bloom(Core.graphics.getWidth()/4, Core.graphics.getHeight()/4, true, false){{ + public final Bloom bloom = new Bloom(Core.graphics.getWidth()/4, Core.graphics.getHeight()/4, true, false){{ setThreshold(0.8f); blurPasses = 6; }}; - private final Mesh atmosphere = MeshBuilder.buildHex(Color.white, 2, false, 1.5f); + public final Mesh atmosphere = MeshBuilder.buildHex(Color.white, 2, false, 1.5f); //seed: 8kmfuix03fw - private final CubemapMesh skybox = new CubemapMesh(new Cubemap("cubemaps/stars/")); + public final CubemapMesh skybox = new CubemapMesh(new Cubemap("cubemaps/stars/")); public PlanetRenderer(){ camPos.set(0, 0f, camLength); @@ -82,6 +83,8 @@ public class PlanetRenderer implements Disposable{ projector.proj(cam.combined); batch.proj(cam.combined); + Events.fire(Trigger.universeDrawBegin); + beginBloom(); skybox.render(cam.combined); @@ -90,6 +93,8 @@ public class PlanetRenderer implements Disposable{ endBloom(); + Events.fire(Trigger.universeDrawEnd); + Gl.enable(Gl.blend); irenderer.renderProjections(); @@ -100,16 +105,16 @@ public class PlanetRenderer implements Disposable{ cam.update(); } - private void beginBloom(){ + public void beginBloom(){ bloom.resize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4); bloom.capture(); } - private void endBloom(){ + public void endBloom(){ bloom.render(); } - private void renderPlanet(Planet planet){ + public void renderPlanet(Planet planet){ //render planet at offsetted position in the world planet.mesh.render(cam.combined, planet.getTransform(mat)); @@ -137,7 +142,7 @@ public class PlanetRenderer implements Disposable{ } } - private void renderOrbit(Planet planet){ + public void renderOrbit(Planet planet){ if(planet.parent == null) return; Vec3 center = planet.parent.position; @@ -147,7 +152,7 @@ public class PlanetRenderer implements Disposable{ batch.flush(Gl.lineLoop); } - private void renderSectors(Planet planet){ + public void renderSectors(Planet planet){ //apply transformed position batch.proj().mul(planet.getTransform(mat)); @@ -268,7 +273,7 @@ public class PlanetRenderer implements Disposable{ } } - private Mesh outline(int size){ + public Mesh outline(int size){ if(outlines[size] == null){ outlines[size] = MeshBuilder.buildHex(new HexMesher(){ @Override From 46ec45781937b9ae085e6963b4a9c4b4a17cd670 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 10:37:28 -0400 Subject: [PATCH 086/145] Cleanup --- core/assets/bundles/bundle.properties | 3 +-- core/src/mindustry/ai/BaseAI.java | 2 +- core/src/mindustry/ai/WaveSpawner.java | 2 +- core/src/mindustry/ai/types/BuilderAI.java | 4 ++-- core/src/mindustry/ai/types/FlyingAI.java | 4 ++-- core/src/mindustry/ai/types/FormationAI.java | 8 +++---- core/src/mindustry/ai/types/GroundAI.java | 8 +++---- core/src/mindustry/ai/types/LogicAI.java | 4 ++-- core/src/mindustry/ai/types/MinerAI.java | 12 +++++----- core/src/mindustry/ai/types/RepairAI.java | 6 ++--- core/src/mindustry/ai/types/SuicideAI.java | 10 ++++---- core/src/mindustry/async/PhysicsProcess.java | 2 +- core/src/mindustry/content/Fx.java | 6 ++--- core/src/mindustry/core/Logic.java | 2 +- core/src/mindustry/core/NetServer.java | 4 ++-- core/src/mindustry/entities/Units.java | 2 +- .../mindustry/entities/comp/BuildingComp.java | 2 +- .../entities/comp/CommanderComp.java | 6 ++--- .../mindustry/entities/comp/PlayerComp.java | 8 +++---- .../mindustry/entities/comp/PuddleComp.java | 2 +- .../src/mindustry/entities/comp/UnitComp.java | 24 ++++++------------- .../entities/units/AIController.java | 8 +++---- core/src/mindustry/game/SpawnGroup.java | 18 ++++++++++++++ core/src/mindustry/game/Teams.java | 10 ++++---- .../mindustry/graphics/MinimapRenderer.java | 2 +- .../mindustry/graphics/OverlayRenderer.java | 2 +- core/src/mindustry/input/DesktopInput.java | 14 +++++------ core/src/mindustry/input/InputHandler.java | 14 +++++------ core/src/mindustry/input/MobileInput.java | 8 +++---- core/src/mindustry/logic/LExecutor.java | 2 +- core/src/mindustry/maps/SectorDamage.java | 4 ++-- core/src/mindustry/mod/ContentParser.java | 14 +++++++++-- core/src/mindustry/type/AmmoTypes.java | 4 ++-- core/src/mindustry/type/ItemStack.java | 7 ++++++ core/src/mindustry/type/StatusEffect.java | 2 +- core/src/mindustry/type/UnitType.java | 2 +- .../mindustry/ui/fragments/HudFragment.java | 2 +- .../blocks/defense/TractorBeamTurret.java | 2 +- .../world/blocks/payloads/UnitPayload.java | 4 ++-- .../world/blocks/units/Reconstructor.java | 14 +++++------ .../world/blocks/units/ResupplyPoint.java | 4 ++-- .../src/mindustry/desktop/steam/SStats.java | 2 +- 42 files changed, 142 insertions(+), 118 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 78c3259e9b..196b6e87af 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -100,8 +100,7 @@ committingchanges = Comitting Changes done = Done feature.unsupported = Your device does not support this feature. -mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord. -mods.alpha = [accent](Alpha) +mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub. mods = Mods mods.none = [lightgray]No mods found! mods.guide = Modding Guide diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 3a4965aa88..b1f83d95d2 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -44,7 +44,7 @@ public class BaseAI{ CoreBlock block = (CoreBlock)data.core().block; //create AI core unit - if(!state.isEditor() && !Groups.unit.contains(u -> u.team() == data.team && u.type() == block.unitType)){ + if(!state.isEditor() && !Groups.unit.contains(u -> u.team() == data.team && u.type == block.unitType)){ Unit unit = block.unitType.create(data.team); unit.set(data.core()); unit.add(); diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 99b52d40e5..91c7f61467 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -175,7 +175,7 @@ public class WaveSpawner{ } private void spawnEffect(Unit unit){ - Call.spawnEffect(unit.x, unit.y, unit.type()); + Call.spawnEffect(unit.x, unit.y, unit.type); Time.run(30f, unit::add); } diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 8e8c74f986..c3558ca58a 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -79,7 +79,7 @@ public class BuilderAI extends AIController{ float dist = Math.min(cons.dst(unit) - buildingRange, 0); //make sure you can reach the request in time - if(dist / unit.type().speed < cons.buildCost * 0.9f){ + if(dist / unit.type.speed < cons.buildCost * 0.9f){ following = b; found = true; } @@ -112,7 +112,7 @@ public class BuilderAI extends AIController{ @Override public AIController fallback(){ - return unit.type().flying ? new FlyingAI() : new GroundAI(); + return unit.type.flying ? new FlyingAI() : new GroundAI(); } @Override diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index 0758f9016a..9d4c2d38f9 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -12,7 +12,7 @@ public class FlyingAI extends AIController{ @Override public void updateMovement(){ if(target != null && unit.hasWeapons() && command() == UnitCommand.attack){ - if(unit.type().weapons.first().rotate){ + if(unit.type.weapons.first().rotate){ moveTo(target, unit.range() * 0.8f); unit.lookAt(target); }else{ @@ -57,7 +57,7 @@ public class FlyingAI extends AIController{ vec.setAngle(Mathf.slerpDelta(unit.vel().angle(), vec.angle(), 0.6f)); } - vec.setLength(unit.type().speed); + vec.setLength(unit.type.speed); unit.moveAt(vec); } diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index d774719cab..ed175524d8 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -27,14 +27,14 @@ public class FormationAI extends AIController implements FormationMember{ @Override public void updateUnit(){ - UnitType type = unit.type(); + UnitType type = unit.type; if(leader.dead){ unit.resetController(); return; } - if(unit.type().canBoost && unit.canPassOn()){ + if(unit.type.canBoost && unit.canPassOn()){ unit.elevation = Mathf.approachDelta(unit.elevation, 0f, 0.08f); } @@ -43,7 +43,7 @@ public class FormationAI extends AIController implements FormationMember{ unit.aim(leader.aimX(), leader.aimY()); - if(unit.type().rotateShooting){ + if(unit.type.rotateShooting){ unit.lookAt(leader.aimX(), leader.aimY()); }else if(unit.moving()){ unit.lookAt(unit.vel.angle()); @@ -65,7 +65,7 @@ public class FormationAI extends AIController implements FormationMember{ CoreBuild core = unit.team.core(); - if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type().range) && !unit.acceptsItem(com.mineTile().drop())){ + if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type.range) && !unit.acceptsItem(com.mineTile().drop())){ if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); diff --git a/core/src/mindustry/ai/types/GroundAI.java b/core/src/mindustry/ai/types/GroundAI.java index 157ed2eb9d..0134a424fc 100644 --- a/core/src/mindustry/ai/types/GroundAI.java +++ b/core/src/mindustry/ai/types/GroundAI.java @@ -45,13 +45,13 @@ public class GroundAI extends AIController{ } } - if(unit.type().canBoost && !unit.onSolid()){ + if(unit.type.canBoost && !unit.onSolid()){ unit.elevation = Mathf.approachDelta(unit.elevation, 0f, 0.08f); } - if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type().rotateShooting){ - if(unit.type().hasWeapons()){ - unit.lookAt(Predict.intercept(unit, target, unit.type().weapons.first().bullet.speed)); + if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting){ + if(unit.type.hasWeapons()){ + unit.lookAt(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed)); } }else if(unit.moving()){ unit.lookAt(unit.vel().angle()); diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index 76b81794a2..1166c2ff96 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -98,7 +98,7 @@ public class LogicAI extends AIController{ } } - if(unit.type().canBoost && !unit.type().flying){ + if(unit.type.canBoost && !unit.type.flying){ unit.elevation = Mathf.approachDelta(unit.elevation, Mathf.num(boost || unit.onSolid()), 0.08f); } @@ -129,7 +129,7 @@ public class LogicAI extends AIController{ @Override protected boolean shouldShoot(){ - return shoot && !(unit.type().canBoost && boost); + return shoot && !(unit.type.canBoost && boost); } //always aim for the main target diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index d19b8e2c0a..aa7d1403c5 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -19,7 +19,7 @@ public class MinerAI extends AIController{ if(!(unit instanceof Minerc miner) || core == null) return; - if(miner.mineTile() != null && !miner.mineTile().within(unit, unit.type().range)){ + if(miner.mineTile() != null && !miner.mineTile().within(unit, unit.type.range)){ miner.mineTile(null); } @@ -36,7 +36,7 @@ public class MinerAI extends AIController{ } //if inventory is full, drop it off. - if(unit.stack.amount >= unit.type().itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){ + if(unit.stack.amount >= unit.type.itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){ mining = false; }else{ if(retarget() && targetItem != null){ @@ -44,9 +44,9 @@ public class MinerAI extends AIController{ } if(ore != null){ - moveTo(ore, unit.type().range / 2f); + moveTo(ore, unit.type.range / 2f); - if(unit.within(ore, unit.type().range)){ + if(unit.within(ore, unit.type.range)){ miner.mineTile(ore); } @@ -63,7 +63,7 @@ public class MinerAI extends AIController{ return; } - if(unit.within(core, unit.type().range)){ + if(unit.within(core, unit.type.range)){ if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); } @@ -72,7 +72,7 @@ public class MinerAI extends AIController{ mining = true; } - circle(core, unit.type().range / 1.8f); + circle(core, unit.type.range / 1.8f); } } diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index cb60a3bfc9..36504f908d 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -12,7 +12,7 @@ public class RepairAI extends AIController{ if(target instanceof Building){ boolean shoot = false; - if(target.within(unit, unit.type().range)){ + if(target.within(unit, unit.type.range)){ unit.aim(target); shoot = true; } @@ -23,8 +23,8 @@ public class RepairAI extends AIController{ } if(target != null){ - if(!target.within(unit, unit.type().range * 0.65f) && target instanceof Building){ - moveTo(target, unit.type().range * 0.65f); + if(!target.within(unit, unit.type.range * 0.65f) && target instanceof Building){ + moveTo(target, unit.type.range * 0.65f); } unit.lookAt(target); diff --git a/core/src/mindustry/ai/types/SuicideAI.java b/core/src/mindustry/ai/types/SuicideAI.java index 2eae6e409f..0ef3ece228 100644 --- a/core/src/mindustry/ai/types/SuicideAI.java +++ b/core/src/mindustry/ai/types/SuicideAI.java @@ -21,7 +21,7 @@ public class SuicideAI extends GroundAI{ } if(retarget()){ - target = target(unit.x, unit.y, unit.range(), unit.type().targetAir, unit.type().targetGround); + target = target(unit.x, unit.y, unit.range(), unit.type.targetAir, unit.type.targetGround); } Building core = unit.closestEnemyCore(); @@ -30,11 +30,11 @@ public class SuicideAI extends GroundAI{ if(!Units.invalidateTarget(target, unit, unit.range()) && unit.hasWeapons()){ rotate = true; - shoot = unit.within(target, unit.type().weapons.first().bullet.range() + + shoot = unit.within(target, unit.type.weapons.first().bullet.range() + (target instanceof Building ? ((Building)target).block.size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f)); - if(unit.type().hasWeapons()){ - unit.aimLook(Predict.intercept(unit, target, unit.type().weapons.first().bullet.speed)); + if(unit.type.hasWeapons()){ + unit.aimLook(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed)); } //do not move toward walls or transport blocks @@ -65,7 +65,7 @@ public class SuicideAI extends GroundAI{ if(!blocked){ moveToTarget = true; //move towards target directly - unit.moveAt(vec.set(target).sub(unit).limit(unit.type().speed)); + unit.moveAt(vec.set(target).sub(unit).limit(unit.type.speed)); } } diff --git a/core/src/mindustry/async/PhysicsProcess.java b/core/src/mindustry/async/PhysicsProcess.java index 07d44d4717..a60dab7f68 100644 --- a/core/src/mindustry/async/PhysicsProcess.java +++ b/core/src/mindustry/async/PhysicsProcess.java @@ -57,7 +57,7 @@ public class PhysicsProcess implements AsyncProcess{ PhysicRef ref = entity.physref(); ref.body.layer = - entity.type().allowLegStep ? layerLegs : + entity.type.allowLegStep ? layerLegs : entity.isGrounded() ? layerGround : layerFlying; ref.x = entity.x(); ref.y = entity.y(); diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 6ca6ccb24d..ca5bf9a0d0 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -56,7 +56,7 @@ public class Fx{ mixcol(Pal.accent, 1f); alpha(e.fout()); - rect(block ? ((BlockUnitc)select).tile().block.icon(Cicon.full) : select.type().icon(Cicon.full), select.x, select.y, block ? 0f : select.rotation - 90f); + rect(block ? ((BlockUnitc)select).tile().block.icon(Cicon.full) : select.type.icon(Cicon.full), select.x, select.y, block ? 0f : select.rotation - 90f); alpha(1f); Lines.stroke(e.fslope() * 1f); Lines.square(select.x, select.y, e.fout() * select.hitSize * 2f, 45); @@ -66,7 +66,7 @@ public class Fx{ }), unitDespawn = new Effect(100f, e -> { - if(!(e.data instanceof Unit) || e.data().type() == null) return; + if(!(e.data instanceof Unit) || e.data().type == null) return; Unit select = e.data(); float scl = e.fout(Interp.pow2Out); @@ -74,7 +74,7 @@ public class Fx{ Draw.scl *= scl; mixcol(Pal.accent, 1f); - rect(select.type().icon(Cicon.full), select.x, select.y, select.rotation - 90f); + rect(select.type.icon(Cicon.full), select.x, select.y, select.rotation - 90f); reset(); Draw.scl = p; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index c2274922de..a96ea101a9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -272,7 +272,7 @@ public class Logic implements ApplicationListener{ if(state.isGame()){ if(!net.client()){ - state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.type().isCounted); + state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.type.isCounted); } if(!state.isPaused()){ diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 77ab732cf6..d9f944c1aa 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -575,7 +575,7 @@ public class NetServer implements ApplicationListener{ shooting = false; } - if(!player.dead() && (player.unit().type().flying || !player.unit().type().canBoost)){ + if(!player.dead() && (player.unit().type.flying || !player.unit().type.canBoost)){ boosting = false; } @@ -629,7 +629,7 @@ public class NetServer implements ApplicationListener{ Unit unit = player.unit(); long elapsed = Time.timeSinceMillis(con.lastReceivedClientTime); - float maxSpeed = ((player.unit().type().canBoost && player.unit().isFlying()) ? player.unit().type().boostMultiplier : 1f) * player.unit().type().speed; + float maxSpeed = ((player.unit().type.canBoost && player.unit().isFlying()) ? player.unit().type.boostMultiplier : 1f) * player.unit().type.speed; if(unit.isGrounded()){ maxSpeed *= unit.floorSpeedMultiplier(); } diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index 1babb75e33..e4591a0ed0 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -126,7 +126,7 @@ public class Units{ nearby(x, y, width, height, unit -> { if(boolResult) return; - if((unit.isGrounded() && !unit.type().hovering) == ground){ + if((unit.isGrounded() && !unit.type.hovering) == ground){ unit.hitbox(hitrect); if(hitrect.overlaps(x, y, width, height)){ diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 7e8bb19a1e..6891744fce 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1295,7 +1295,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, case type -> block; case firstItem -> items == null ? null : items.first(); case config -> block.configurations.containsKey(Item.class) || block.configurations.containsKey(Liquid.class) ? config() : null; - case payloadType -> getPayload() instanceof UnitPayload p1 ? p1.unit.type() : getPayload() instanceof BuildPayload p2 ? p2.block() : null; + case payloadType -> getPayload() instanceof UnitPayload p1 ? p1.unit.type : getPayload() instanceof BuildPayload p2 ? p2.block() : null; default -> noSensed; }; diff --git a/core/src/mindustry/entities/comp/CommanderComp.java b/core/src/mindustry/entities/comp/CommanderComp.java index b0fbddcf85..e03147d63c 100644 --- a/core/src/mindustry/entities/comp/CommanderComp.java +++ b/core/src/mindustry/entities/comp/CommanderComp.java @@ -59,7 +59,7 @@ abstract class CommanderComp implements Entityc, Posc{ units.clear(); Units.nearby(team, x, y, 150f, u -> { - if(u.isAI() && include.get(u) && u != self() && u.type().flying == type.flying && u.hitSize <= hitSize * 1.1f){ + if(u.isAI() && include.get(u) && u != self() && u.type.flying == type.flying && u.hitSize <= hitSize * 1.1f){ units.add(u); } }); @@ -82,7 +82,7 @@ abstract class CommanderComp implements Entityc, Posc{ FormationAI ai; unit.controller(ai = new FormationAI(self(), formation)); spacing = Math.max(spacing, ai.formationSize()); - minFormationSpeed = Math.min(minFormationSpeed, unit.type().speed); + minFormationSpeed = Math.min(minFormationSpeed, unit.type.speed); } this.formation = formation; @@ -106,7 +106,7 @@ abstract class CommanderComp implements Entityc, Posc{ //reset controlled units for(Unit unit : controlling){ if(unit.controller().isBeingControlled(self())){ - unit.controller(unit.type().createController()); + unit.controller(unit.type.createController()); } } diff --git a/core/src/mindustry/entities/comp/PlayerComp.java b/core/src/mindustry/entities/comp/PlayerComp.java index 4ee481b032..736a1b68e5 100644 --- a/core/src/mindustry/entities/comp/PlayerComp.java +++ b/core/src/mindustry/entities/comp/PlayerComp.java @@ -79,7 +79,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra admin = typing = false; textFadeTime = 0f; if(!dead()){ - unit.controller(unit.type().createController()); + unit.controller(unit.type.createController()); unit = Nulls.unit; } } @@ -91,7 +91,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra @Replace public float clipSize(){ - return unit.isNull() ? 20 : unit.type().hitSize * 2f; + return unit.isNull() ? 20 : unit.type.hitSize * 2f; } @Override @@ -123,7 +123,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra deathTimer = 0; //update some basic state to sync things - if(unit.type().canBoost){ + if(unit.type.canBoost){ Tile tile = unit.tileOn(); unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f); } @@ -177,7 +177,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra if(this.unit != Nulls.unit){ //un-control the old unit - this.unit.controller(this.unit.type().createController()); + this.unit.controller(this.unit.type.createController()); } this.unit = unit; if(unit != Nulls.unit){ diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 669ee7e1f2..d83408c734 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -74,7 +74,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ unit.apply(liquid.effect, 60 * 2); if(unit.vel.len() > 0.1){ - Fx.ripple.at(unit.x, unit.y, unit.type().rippleScale, liquid.color); + Fx.ripple.at(unit.x, unit.y, unit.type.rippleScale, liquid.color); } } } diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 72a8d115f0..897305e87a 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -36,7 +36,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Import int id; private UnitController controller; - private UnitType type; + UnitType type; boolean spawnedByCore; double flag; @@ -110,7 +110,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case firstItem -> stack().amount == 0 ? null : item(); case payloadType -> self() instanceof Payloadc pay ? (pay.payloads().isEmpty() ? null : - pay.payloads().peek() instanceof UnitPayload p1 ? p1.unit.type() : + pay.payloads().peek() instanceof UnitPayload p1 ? p1.unit.type : pay.payloads().peek() instanceof BuildPayload p2 ? p2.block() : null) : null; default -> noSensed; }; @@ -163,22 +163,12 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void set(UnitType def, UnitController controller){ - type(type); + if(this.type != def){ + setType(def); + } controller(controller); } - @Override - public void type(UnitType type){ - if(this.type == type) return; - - setStats(type); - } - - @Override - public UnitType type(){ - return type; - } - /** @return pathfinder path type for calculating costs */ public int pathType(){ return Pathfinder.costGround; @@ -208,7 +198,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I return Units.getCap(team); } - public void setStats(UnitType type){ + public void setType(UnitType type){ this.type = type; this.maxHealth = type.health; this.drag = type.drag; @@ -226,7 +216,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void afterSync(){ //set up type info after reading - setStats(this.type); + setType(this.type); controller.unit(self()); } diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index b02fa5dc00..ca005fe25d 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -95,7 +95,7 @@ public class AIController implements UnitController{ if(tile == targetTile || (costType == Pathfinder.costWater && !targetTile.floor().isLiquid)) return; - unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.type().speed)); + unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.type.speed)); } protected void updateWeapons(){ @@ -105,7 +105,7 @@ public class AIController implements UnitController{ boolean ret = retarget(); if(ret){ - target = findTarget(unit.x, unit.y, unit.range(), unit.type().targetAir, unit.type().targetGround); + target = findTarget(unit.x, unit.y, unit.range(), unit.type.targetAir, unit.type.targetGround); } if(invalid(target)){ @@ -119,7 +119,7 @@ public class AIController implements UnitController{ float mountX = unit.x + Angles.trnsx(rotation, weapon.x, weapon.y), mountY = unit.y + Angles.trnsy(rotation, weapon.x, weapon.y); - if(unit.type().singleTarget){ + if(unit.type.singleTarget){ targets[i] = target; }else{ if(ret){ @@ -176,7 +176,7 @@ public class AIController implements UnitController{ } protected void circle(Position target, float circleLength){ - circle(target, circleLength, unit.type().speed); + circle(target, circleLength, unit.type.speed); } protected void circle(Position target, float circleLength, float speed){ diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index 92ba6811ea..86ba7b6324 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -9,6 +9,8 @@ import mindustry.gen.*; import mindustry.io.legacy.*; import mindustry.type.*; +import java.util.*; + import static mindustry.Vars.*; /** @@ -138,4 +140,20 @@ public class SpawnGroup implements Serializable{ ", items=" + items + '}'; } + + @Override + public boolean equals(Object o){ + if(this == o) return true; + if(o == null || getClass() != o.getClass()) return false; + SpawnGroup group = (SpawnGroup)o; + return end == group.end && begin == group.begin && spacing == group.spacing && max == group.max + && Float.compare(group.unitScaling, unitScaling) == 0 && Float.compare(group.shields, shields) == 0 + && Float.compare(group.shieldScaling, shieldScaling) == 0 && unitAmount == group.unitAmount && + type == group.type && effect == group.effect && Structs.eq(items, group.items); + } + + @Override + public int hashCode(){ + return Arrays.hashCode(new Object[]{type, end, begin, spacing, max, unitScaling, shields, shieldScaling, unitAmount, effect, items}); + } } diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index aa390c5d26..6a2972f074 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -131,7 +131,7 @@ public class Teams{ } private void count(Unit unit){ - unit.team.data().updateCount(unit.type(), 1); + unit.team.data().updateCount(unit.type, 1); if(unit instanceof Payloadc){ ((Payloadc)unit).payloads().each(p -> { @@ -178,15 +178,15 @@ public class Teams{ data.units.add(unit); data.presentFlag = true; - if(data.unitsByType == null || data.unitsByType.length <= unit.type().id){ + if(data.unitsByType == null || data.unitsByType.length <= unit.type.id){ data.unitsByType = new Seq[content.units().size]; } - if(data.unitsByType[unit.type().id] == null){ - data.unitsByType[unit.type().id] = new Seq<>(); + if(data.unitsByType[unit.type.id] == null){ + data.unitsByType[unit.type.id] = new Seq<>(); } - data.unitsByType[unit.type().id].add(unit); + data.unitsByType[unit.type.id].add(unit); count(unit); } diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index cdb84e9044..1c34b4424e 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -96,7 +96,7 @@ public class MinimapRenderer implements Disposable{ Draw.mixcol(unit.team().color, 1f); float scale = Scl.scl(1f) / 2f * scaling * 32f; - Draw.rect(unit.type().icon(Cicon.full), x + rx, y + ry, scale, scale, unit.rotation() - 90); + Draw.rect(unit.type.icon(Cicon.full), x + rx, y + ry, scale, scale, unit.rotation() - 90); Draw.reset(); //only disable player names in multiplayer diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index c7c0c697c3..524ee79ea6 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -85,7 +85,7 @@ public class OverlayRenderer{ //special selection for block "units" Fill.square(select.x, select.y, ((BlockUnitc)select).tile().block.size * tilesize/2f); }else{ - Draw.rect(select.type().icon(Cicon.full), select.x(), select.y(), select.rotation() - 90); + Draw.rect(select.type.icon(Cicon.full), select.x(), select.y(), select.rotation() - 90); } Lines.stroke(unitFade); diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 7099f254dd..e66f119f8f 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -599,11 +599,11 @@ public class DesktopInput extends InputHandler{ } protected void updateMovement(Unit unit){ - boolean omni = unit.type().omniMovement; + boolean omni = unit.type.omniMovement; boolean ground = unit.isGrounded(); - float strafePenalty = ground ? 1f : Mathf.lerp(1f, unit.type().strafePenalty, Angles.angleDist(unit.vel().angle(), unit.rotation()) / 180f); - float baseSpeed = unit.type().speed; + float strafePenalty = ground ? 1f : Mathf.lerp(1f, unit.type.strafePenalty, Angles.angleDist(unit.vel().angle(), unit.rotation()) / 180f); + float baseSpeed = unit.type.speed; //limit speed to minimum formation speed to preserve formation if(unit.isCommanding()){ @@ -611,7 +611,7 @@ public class DesktopInput extends InputHandler{ baseSpeed = unit.minFormationSpeed * 0.95f; } - float speed = baseSpeed * Mathf.lerp(1f, unit.isCommanding() ? 1f : unit.type().canBoost ? unit.type().boostMultiplier : 1f, unit.elevation) * strafePenalty; + float speed = baseSpeed * Mathf.lerp(1f, unit.isCommanding() ? 1f : unit.type.canBoost ? unit.type.boostMultiplier : 1f, unit.elevation) * strafePenalty; float xa = Core.input.axis(Binding.move_x); float ya = Core.input.axis(Binding.move_y); boolean boosted = (unit instanceof Mechc && unit.isFlying()); @@ -622,7 +622,7 @@ public class DesktopInput extends InputHandler{ } float mouseAngle = Angles.mouseAngle(unit.x, unit.y); - boolean aimCursor = omni && player.shooting && unit.type().hasWeapons() && unit.type().faceTarget && !boosted && unit.type().rotateShooting; + boolean aimCursor = omni && player.shooting && unit.type.hasWeapons() && unit.type.faceTarget && !boosted && unit.type.rotateShooting; if(aimCursor){ unit.lookAt(mouseAngle); @@ -637,11 +637,11 @@ public class DesktopInput extends InputHandler{ }else{ unit.moveAt(Tmp.v2.trns(unit.rotation, movement.len())); if(!movement.isZero() && ground){ - unit.vel.rotateTo(movement.angle(), unit.type().rotateSpeed); + unit.vel.rotateTo(movement.angle(), unit.type.rotateSpeed); } } - unit.aim(unit.type().faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation, Core.input.mouseWorld().dst(unit)).add(unit.x, unit.y)); + unit.aim(unit.type.faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation, Core.input.mouseWorld().dst(unit)).add(unit.x, unit.y)); unit.controlWeapons(true, player.shooting && !boosted); player.boosting = Core.input.keyDown(Binding.boost) && !movement.isZero(); diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index eebe40e15b..4a5c26eb9d 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -158,7 +158,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Payloadc pay = (Payloadc)unit; if(target.isAI() && target.isGrounded() && pay.canPickup(target) - && target.within(unit, unit.type().hitSize * 2f + target.type().hitSize * 2f)){ + && target.within(unit, unit.type.hitSize * 2f + target.type.hitSize * 2f)){ Call.pickedUnitPayload(unit, target); } } @@ -365,7 +365,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(commander.isCommanding()){ commander.clearCommand(); - }else if(player.unit().type().commandLimit > 0){ + }else if(player.unit().type.commandLimit > 0){ //TODO try out some other formations commander.commandNearby(new CircleFormation()); @@ -398,17 +398,17 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && player.unit().ammo <= 0){ - player.unit().type().weapons.first().noAmmoSound.at(player.unit()); + player.unit().type.weapons.first().noAmmoSound.at(player.unit()); } wasShooting = player.shooting; if(!player.dead()){ - controlledType = player.unit().type(); + controlledType = player.unit().type; } if(controlledType != null && player.dead()){ - Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType && !u.dead); + Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead); if(unit != null){ Call.unitControl(player, unit); @@ -418,7 +418,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public void checkUnit(){ if(controlledType != null){ - Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType && !u.dead); + Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead); if(unit == null && controlledType == UnitTypes.block){ unit = world.buildWorld(player.x, player.y) instanceof ControlBlock ? ((ControlBlock)world.buildWorld(player.x, player.y)).unit() : null; } @@ -437,7 +437,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Unit unit = player.unit(); if(!(unit instanceof Payloadc pay)) return; - Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitSize * 2.5f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); + Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type.hitSize * 2.5f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); if(target != null){ Call.requestUnitPayload(player, target); }else{ diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 19f458ea88..d5d45192b0 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -85,7 +85,7 @@ public class MobileInput extends InputHandler implements GestureListener{ if(tile != null && player.team().isEnemy(tile.team)){ player.miner().mineTile(null); target = tile; - }else if(tile != null && player.unit().type().canHeal && tile.team == player.team() && tile.damaged()){ + }else if(tile != null && player.unit().type.canHeal && tile.team == player.team() && tile.damaged()){ player.miner().mineTile(null); target = tile; } @@ -834,10 +834,10 @@ public class MobileInput extends InputHandler implements GestureListener{ protected void updateMovement(Unit unit){ Rect rect = Tmp.r3; - UnitType type = unit.type(); + UnitType type = unit.type; if(type == null) return; - boolean omni = unit.type().omniMovement; + boolean omni = unit.type.omniMovement; boolean legs = unit.isGrounded(); boolean allowHealing = type.canHeal; boolean validHealTarget = allowHealing && target instanceof Building && ((Building)target).isValid() && target.team() == unit.team && @@ -855,7 +855,7 @@ public class MobileInput extends InputHandler implements GestureListener{ float attractDst = 15f; float strafePenalty = legs ? 1f : Mathf.lerp(1f, type.strafePenalty, Angles.angleDist(unit.vel.angle(), unit.rotation) / 180f); - float baseSpeed = unit.type().speed; + float baseSpeed = unit.type.speed; //limit speed to minimum formation speed to preserve formation if(unit.isCommanding()){ diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index d493a7f7fe..124f3e0d50 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -395,7 +395,7 @@ public class LExecutor{ if(unit instanceof Payloadc pay){ //units if(exec.bool(p1)){ - Unit result = Units.closest(unit.team, unit.x, unit.y, unit.type().hitSize * 2f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); + Unit result = Units.closest(unit.team, unit.x, unit.y, unit.type.hitSize * 2f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); if(result != null){ Call.pickedUnitPayload(unit, result); diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 325881760b..02e2c20016 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -257,12 +257,12 @@ public class SectorDamage{ float healthMult = 1f + Mathf.clamp(unit.armor / 20f); sumHealth += unit.health*healthMult + unit.shield; - sumDps += unit.type().dpsEstimate; + sumDps += unit.type.dpsEstimate; if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ sumRps += h.amount / h.reload * 60f; } }else{ - curEnemyDps += unit.type().dpsEstimate; + curEnemyDps += unit.type.dpsEstimate; curEnemyHealth += unit.health; } } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index b9c119ee32..2d5310d325 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -260,8 +260,8 @@ public class ContentParser{ //TODO test this! read(() -> { //add reconstructor type - if(value.hasChild("requirements")){ - JsonValue rec = value.remove("requirements"); + if(value.has("requirements")){ + JsonValue rec = value.remove("requirements"); //intermediate class for parsing class UnitReq{ @@ -286,6 +286,16 @@ public class ContentParser{ } + //read extra default waves + if(value.has("waves")){ + SpawnGroup[] groups = parser.readValue(SpawnGroup[].class, value.get("waves")); + for(SpawnGroup group : groups){ + group.type = unit; + } + + Vars.defaultWaves.get().addAll(groups); + } + readFields(unit, value, true); }); diff --git a/core/src/mindustry/type/AmmoTypes.java b/core/src/mindustry/type/AmmoTypes.java index 5b7c885519..534bdbe703 100644 --- a/core/src/mindustry/type/AmmoTypes.java +++ b/core/src/mindustry/type/AmmoTypes.java @@ -48,8 +48,8 @@ public class AmmoTypes implements ContentList{ if(build.block.consumes.hasPower() && build.block.consumes.getPower().buffered){ float amount = closest.build.power.status * build.block.consumes.getPower().capacity; - float powerPerAmmo = totalPower / unit.type().ammoCapacity; - float ammoRequired = unit.type().ammoCapacity - unit.ammo; + float powerPerAmmo = totalPower / unit.type.ammoCapacity; + float ammoRequired = unit.type.ammoCapacity - unit.ammo; float powerRequired = ammoRequired * powerPerAmmo; float powerTaken = Math.min(amount, powerRequired); diff --git a/core/src/mindustry/type/ItemStack.java b/core/src/mindustry/type/ItemStack.java index d5f4097b58..e2e0d2d5f4 100644 --- a/core/src/mindustry/type/ItemStack.java +++ b/core/src/mindustry/type/ItemStack.java @@ -64,6 +64,13 @@ public class ItemStack implements Comparable{ return item.compareTo(itemStack.item); } + @Override + public boolean equals(Object o){ + if(this == o) return true; + if(!(o instanceof ItemStack stack)) return false; + return amount == stack.amount && item == stack.item; + } + @Override public String toString(){ return "ItemStack{" + diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index eb0bedb60c..90488c62ea 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -56,7 +56,7 @@ public class StatusEffect extends MappableContent{ } if(effect != Fx.none && Mathf.chanceDelta(effectChance)){ - Tmp.v1.rnd(unit.type().hitSize /2f); + Tmp.v1.rnd(unit.type.hitSize /2f); effect.at(unit.x + Tmp.v1.x, unit.y + Tmp.v1.y); } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 68fdd6837e..7d0c3fd98b 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -117,7 +117,7 @@ public class UnitType extends UnlockableContent{ public Unit create(Team team){ Unit unit = constructor.get(); unit.team = team; - unit.type(this); + unit.setType(this); unit.ammo = ammoCapacity; //fill up on ammo upon creation unit.elevation = flying ? 1f : 0; unit.heal(); diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 327e65cd13..d51c83881d 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -712,7 +712,7 @@ public class HudFragment extends Fragment{ t.add(new SideBar(() -> player.unit().healthf(), () -> true, true)).width(bw).growY().padRight(pad); t.image(() -> player.icon()).scaling(Scaling.bounded).grow().maxWidth(54f); t.add(new SideBar(() -> player.dead() ? 0f : player.displayAmmo() ? player.unit().ammof() : player.unit().healthf(), () -> !player.displayAmmo(), false)).width(bw).growY().padLeft(pad).update(b -> { - b.color.set(player.displayAmmo() ? player.dead() || player.unit() instanceof BlockUnitc ? Pal.ammo : player.unit().type().ammoType.color : Pal.health); + b.color.set(player.displayAmmo() ? player.dead() || player.unit() instanceof BlockUnitc ? Pal.ammo : player.unit().type.ammoType.color : Pal.health); }); t.getChildren().get(1).toFront(); diff --git a/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java b/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java index 1f74360ed5..3808f7c360 100644 --- a/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java +++ b/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java @@ -75,7 +75,7 @@ public class TractorBeamTurret extends Block{ } //look at target - if(target != null && target.within(this, range) && target.team() != team && target.type().flying && efficiency() > 0.01f){ + if(target != null && target.within(this, range) && target.team() != team && target.type.flying && efficiency() > 0.01f){ any = true; float dest = angleTo(target); rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta()); diff --git a/core/src/mindustry/world/blocks/payloads/UnitPayload.java b/core/src/mindustry/world/blocks/payloads/UnitPayload.java index 724df792fa..2292244864 100644 --- a/core/src/mindustry/world/blocks/payloads/UnitPayload.java +++ b/core/src/mindustry/world/blocks/payloads/UnitPayload.java @@ -43,7 +43,7 @@ public class UnitPayload implements Payload{ @Override public boolean dump(){ - if(!Units.canCreate(unit.team, unit.type())){ + if(!Units.canCreate(unit.team, unit.type)){ deactiveTime = 1f; return false; } @@ -74,7 +74,7 @@ public class UnitPayload implements Payload{ @Override public void draw(){ Drawf.shadow(unit.x, unit.y, 20); - Draw.rect(unit.type().icon(Cicon.full), unit.x, unit.y, unit.rotation - 90); + Draw.rect(unit.type.icon(Cicon.full), unit.x, unit.y, unit.rotation - 90); //draw warning if(deactiveTime > 0){ diff --git a/core/src/mindustry/world/blocks/units/Reconstructor.java b/core/src/mindustry/world/blocks/units/Reconstructor.java index 5b5696bf4c..326a9f06eb 100644 --- a/core/src/mindustry/world/blocks/units/Reconstructor.java +++ b/core/src/mindustry/world/blocks/units/Reconstructor.java @@ -90,7 +90,7 @@ public class Reconstructor extends UnitBlock{ return this.payload == null && relativeTo(source) != rotation && payload instanceof UnitPayload - && hasUpgrade(((UnitPayload)payload).unit.type()); + && hasUpgrade(((UnitPayload)payload).unit.type); } @Override @@ -114,9 +114,9 @@ public class Reconstructor extends UnitBlock{ if(constructing() && hasArrived()){ Draw.draw(Layer.blockOver, () -> { Draw.alpha(1f - progress/ constructTime); - Draw.rect(payload.unit.type().icon(Cicon.full), x, y, rotdeg() - 90); + Draw.rect(payload.unit.type.icon(Cicon.full), x, y, rotdeg() - 90); Draw.reset(); - Drawf.construct(this, upgrade(payload.unit.type()), rotdeg() - 90f, progress / constructTime, speedScl, time); + Drawf.construct(this, upgrade(payload.unit.type), rotdeg() - 90f, progress / constructTime, speedScl, time); }); }else{ Draw.z(Layer.blockOver); @@ -135,7 +135,7 @@ public class Reconstructor extends UnitBlock{ if(payload != null){ //check if offloading - if(!hasUpgrade(payload.unit.type())){ + if(!hasUpgrade(payload.unit.type)){ moveOutPayload(); }else{ //update progress if(moveInPayload()){ @@ -146,7 +146,7 @@ public class Reconstructor extends UnitBlock{ //upgrade the unit if(progress >= constructTime){ - payload.unit = upgrade(payload.unit.type()).create(payload.unit.team()); + payload.unit = upgrade(payload.unit.type).create(payload.unit.team()); progress = 0; Effect.shake(2f, 3f, this); Fx.producesmoke.at(this); @@ -168,12 +168,12 @@ public class Reconstructor extends UnitBlock{ public UnitType unit(){ if(payload == null) return null; - UnitType t = upgrade(payload.unit.type()); + UnitType t = upgrade(payload.unit.type); return t != null && t.unlockedNow() ? t : null; } public boolean constructing(){ - return payload != null && hasUpgrade(payload.unit.type()); + return payload != null && hasUpgrade(payload.unit.type); } public boolean hasUpgrade(UnitType type){ diff --git a/core/src/mindustry/world/blocks/units/ResupplyPoint.java b/core/src/mindustry/world/blocks/units/ResupplyPoint.java index 2714be2358..6402b20147 100644 --- a/core/src/mindustry/world/blocks/units/ResupplyPoint.java +++ b/core/src/mindustry/world/blocks/units/ResupplyPoint.java @@ -65,10 +65,10 @@ public class ResupplyPoint extends Block{ public static boolean resupply(Team team, float x, float y, float range, float ammoAmount, Color ammoColor, Boolf valid){ if(!state.rules.unitAmmo) return false; - Unit unit = Units.closest(team, x, y, range, u -> u.type().ammoType instanceof ItemAmmoType && u.ammo <= u.type().ammoCapacity - ammoAmount && valid.get(u)); + Unit unit = Units.closest(team, x, y, range, u -> u.type.ammoType instanceof ItemAmmoType && u.ammo <= u.type.ammoCapacity - ammoAmount && valid.get(u)); if(unit != null){ Fx.itemTransfer.at(x, y, ammoAmount / 2f, ammoColor, unit); - unit.ammo = Math.min(unit.ammo + ammoAmount, unit.type().ammoCapacity); + unit.ammo = Math.min(unit.ammo + ammoAmount, unit.type.ammoCapacity); return true; } diff --git a/desktop/src/mindustry/desktop/steam/SStats.java b/desktop/src/mindustry/desktop/steam/SStats.java index 7e7c9ecef3..925c670223 100644 --- a/desktop/src/mindustry/desktop/steam/SStats.java +++ b/desktop/src/mindustry/desktop/steam/SStats.java @@ -60,7 +60,7 @@ public class SStats implements SteamUserStatsCallback{ // active10Phantoms.complete(); //} - if(Groups.unit.count(u -> u.type() == UnitTypes.crawler && u.team() == player.team()) >= 50){ + if(Groups.unit.count(u -> u.type == UnitTypes.crawler && u.team() == player.team()) >= 50){ active50Crawlers.complete(); } From ef2bf2e12906b7e61005dc2d9e59f27d9c819c54 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 15:38:12 +0100 Subject: [PATCH 087/145] add universeDraw event --- core/src/mindustry/game/EventType.java | 5 ++++- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index b786bb47f7..cc71e17224 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -36,8 +36,11 @@ public class EventType{ postDraw, uiDrawBegin, uiDrawEnd, - //before/after bloom used, skybox or planets drawn - use Vars.renderer.planets + //before/after bloom used, skybox or planets drawn universeDrawBegin, + //skybox drawn and bloom is enabled - use Vars.renderer.planets + universeDraw, + //planets drawn and bloom disabled universeDrawEnd } diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 14a4cc8820..6398839677 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -89,6 +89,8 @@ public class PlanetRenderer implements Disposable{ skybox.render(cam.combined); + Events.fire(Trigger.universeDraw); + renderPlanet(solarSystem); endBloom(); From c99873c8236d787de25338e53b68b541704346f3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 11:02:48 -0400 Subject: [PATCH 088/145] Added bool to enable editor cliff button --- .../sprites/blocks/environment/cliff.png | Bin 258 -> 274 bytes core/assets/sprites/block_colors.png | Bin 825 -> 827 bytes core/assets/sprites/fallback/sprites5.png | Bin 186601 -> 190052 bytes core/assets/sprites/fallback/sprites6.png | Bin 381400 -> 381360 bytes core/assets/sprites/fallback/sprites7.png | Bin 438916 -> 439082 bytes core/assets/sprites/fallback/sprites8.png | Bin 1446263 -> 1447636 bytes core/assets/sprites/sprites2.png | Bin 187893 -> 191167 bytes core/assets/sprites/sprites3.png | Bin 362945 -> 362837 bytes core/assets/sprites/sprites4.png | Bin 436017 -> 436118 bytes core/assets/sprites/sprites5.png | Bin 1495323 -> 1497416 bytes core/src/mindustry/Vars.java | 2 + core/src/mindustry/editor/MapEditor.java | 47 ++++++++++++++++++ .../src/mindustry/editor/MapEditorDialog.java | 10 +++- core/src/mindustry/mod/ContentParser.java | 3 +- 14 files changed, 60 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/blocks/environment/cliff.png b/core/assets-raw/sprites/blocks/environment/cliff.png index 9d76c62084dde6fe50471e08ff9657408b4b7708..0ea51ef09b8fabdac4d0e506141471e6dc65dd67 100644 GIT binary patch delta 233 zcmZo-n#450u>Opvi(^Pc>)Gj%d<_abE=Pagm$bi=+<4B1arTTIhVNHSOpV-f>bP6D z(8D4z?SQH*i+;f!4=msB*4&%4z$fGZ^Zq6ePL~B7;VOHWd@Zye3Kkre?40HxTGy0y zJ!;OZ25!DP$(y{G1Y#y`m?ZF{^1v2D))xxf-hN)gwA}bf_zJJ2B?%Tf8?BgkU)8r` zylTLd$Ljl+cj|%-eH{~bNVAq6o#OH(fyMKSR9~!6TE>GGmT4~xRg1m9%$Z`Q>gIF0 qTS!@4O`g*<|JS1s-O9>+j9n#*q(%OHoW{Vwz~JfX=d#Wzp$PzM;$sy6 delta 217 zcmbQl)WkHwuzruHi(^Pc>(yxo`3@`aI6uz(|Nr!xmMLy8xo#*Q-X5k~r>Lguv*KD* zbrlVEKI7i^0R|)qGM;As7w~s~*hwi+Y!t*02>+gq~mzvJFa0cFM zDr)$D{s4!_;_oXuA6=gP(u{edQ|Qq+h7B@KSNj5%H#EL@Ul*HT!o2zI$L!qys@<(M a3|doi1VbM_*vP=Zz~JfX=d#Wzp$Py9bz%+x diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index 3e19c96e6186b90b07a2038235d4b03b0126f6c7..e8845aa0722d468a56a91b9ad216f89726cd3985 100644 GIT binary patch delta 804 zcmdnVwwrB&N;P^t{zC|J>=fw2XBX z%WT_*gY{yy`SNcM>OH-5U1WOs%xz}`c1(F-@cuJ%%f{`qoi-l)-v6*)+`!0&$Nui) z2l^fSNB@76P-!-J*YoL(<)f36>zNm>?l}0*(8oOGOq%NlAK|V=ofEgOH@H;U`;g!6 z>7<9sdi&~Uo(^A^^yh=j@?Go|>v#8;@Ba1T?d}5yW`3SyU(C1L_{@b16AVhE{%zi0 zvCBha+EIC*2mGoL=bqeH6JD`IZ_zUG3De3ic&Tpb6*^nebhf8ume=Iz(m$9aSDh7F zSl?OrZL^--(>WH0_HX|oz5mb5NA2;8TjrQLt&{q*hu435#m~iar~AJ>A=-PVNY?dY z>!NKDe z*|n}7|A?KImS?YQ;h(MCaq&sQsT}8NTru-EBy6h)tXJ_oq8j@`cPbax#5a10^{pw} zT(SbwAHS;&(=L5hT>WB}N{O%F{mjg+qIv7LrG8u0eMkR%vHpIK$K9fG_f9_ED$aSN z>rBO@9d9F7t>h^>;jXoM!s#m!@e?|hz89DupPHH5`FGc$?OU1pUkjamW!1a3RLfi2 z<&IujZJ^RZm6f;a9mSF?FMVPbn#t?++WJTSJqNE-Ia5MoiX&w7D4idDC6%~T0FslKR8*zorAD`7z< zr`O(Jb!&h0%C)C5QYHJXTdxW^cD;7W`dYq1Zg)$$RsTto(>G>JogsU_|MJX(Hcy}B ZTgNN?3Y~O5j)8%J!PC{xWt~$(69AC+oVox2 delta 802 zcmdnZwv%mwNRESI|K-!^OQwGn_m!$!$@T5})lMF@Y5}$6SBrNa zSdimiC-!~AcH6fH9?oh1TyicmJKOPXO)$fwssHUQ3U7JuS3Ky@Uf=oso?ObSuI9(G z&nul}o;?(Q{~_x3>n~rv6n{#wkBzn6B5&=M?`|E=-oIIL-jcsB0?%#Te{|yE_6;|g zCH^eG`2E|(ckhDqY!~d!Z784}QuQqK8XTV=CqP`8!z z_IDeiRvOR0?R;HjVRqM#IPc&opKEsOZVr!q;#WEE_D@%-`1J+v)8y9g^-u^)IX3x7 z?)f0!)CtaZL6NO7%Z~kOa?z=s{Ns<7ceeMN>!SNsi&lh8&j`DonX@)HGD`7Lnc?eh zAx>4#yBwPY>Q7Ic_I}cdoPenN2kZYz1qG!oUh`$iP>guc>iyxbHhNbq|2)HIb5Cz%=g+?u(sL!x1n2!@JEWyj V_3BB65Ca1PgQu&X%Q~loCIIHEakt5%=b9_r)a} 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%0A>1DA1?W`9! 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

;ub8cAxA&ioc6FTM_k)k`3Ht9? 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­}$mEy0T_F*VpF)=>^hDS1jC=p87og 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%0D|_Uf@-Iz@&c}Z{`y5MM^T~ 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ℜ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 |z1EkjSzP(v+ul&**@egr)*&l4fvd?_^ z<`&*55s)Uht9?n?d{eID-;Z3VegEKG#S_MPH~6omhpm2}FzfI2*$1B=V$UmpB%8+p zap{R=x^F-3xh;OL@utXC*$KRH_H%C~7q(4%a>RetHQ`jKQ4pkS#_%*MS-un9W-kT0_o;4O%=2Yk>GrtdC`D?=u-5cxB z)^8)+pE=vag-2umHJg(Whv#!XyBw@8*RT98#sidukIqjvIBM}h^~25wGoxj+m_bc1 ziz(M5XT*BnF2DBCyC?A}+orl(Z|869`T6V8P2u*OqmfIB)GG5!T{LADOmY|E|FHOh z%9MFo+-=>*5-s$WGhQ!PbmrkirCv#gU0bVkUUiu4TKU1XYdXV`_YGhDtZt>xbu1Uu ze|PW|i%8@ZnbeHnnTNNk>|?yH-4QR56L?1X$kzhdH{ca=YwoqZo&DmMV9QF~Ups3e z&ZznS*~1x{ez`t0$9L97xkLGDV-49oM9!y`*7em}PSX!NVM+g(9B zybsiG(D$>8IOFIWsBus9Z&B0dxrWDjgl;`<`W;~w_U?vwLhP4$?T4eJLakjmrz~7) zx;^9CXB~t2soDPJa~AK2?aV*;b@tP@J6S(l7&0(4FnGE+hU{wZjc1;>_WFFO_EVrW zoThwFOU2Tz2mRvNR4u2o>g|2K#Q!Ip?o9WbRy0rJ|1JsbVxjyUqO(;Z!|G?ZH?rxmm}PEj*OHH27H_ z>!e1%3CzuQa$)%Yv1Yy1`A()nrR3v*W^Wmv*xsHglKPDCJMWhHzc)-tOX>0cZdtb| zt6gK`r=lls!()TCO*{YS{M=pDtIF1^fArlk&;5((gPS{auUmxhiOmPCzhA%EVE43d z5&QaTljOtdOe+u6=I3ZU_>p9^vd3|uS7v~ZhODbvyP#R+)dL2R*Cv`huKaST;Wx+g z{yCR8BWGFul{(tS{BnhU4Qp=PABl+j-TNn0apg&ioo{}v!Oj2roWnmwr-u3ma~5t3 zjGSsAuUCBG-p;MB-Z`z=jHPUOq^dEcdBG&QcTIEj%8m% zx;_b>Kk!QRy5OU}?WPK6H12MZ?Ah$8*;W%MbLdZc=J(?-@2&gFchqwBEj!Kc?CC*Y zOidMd{=aNBev^AksbecTpD-!L5E`~Rz_Y|$L0o7HH1AZp| z=~xtC^FDmT$LlvNeq|p_|MZ3Bz`R>GHZ(r&KDor`+^oU}(H629-yCl}o1JNDaORVF zqU^ke0IOqaywCqhsdcNLIb7zl!DMq(YFtjs#Izqr#2*wrR1%kGdiC?70`M@Cm>aC~f-`y)&TV-?ol|^ce>y9<33%_GFka^it^y-%KtB9XlOUx#OcYEgu zJ~|s=9r>vC?ZUFukD6ztcK;IT+3s#@@#oWa`%fop`RnFQd⁣dGO;=m!O|bi)4Lz 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%0AG|6%(=|t| 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