diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 9076c9ac22..847a65256a 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -26,7 +26,7 @@ android:screenOrientation="user" android:exported="true" android:launchMode="singleTask" - android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"> + android:configChanges="uiMode|keyboard|keyboardHidden|orientation|screenSize|screenLayout"> diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index e9d7faeb4d..0d8dc32dc1 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1324,6 +1324,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1375,6 +1376,7 @@ unit.liquidunits = liquid units unit.powerunits = power units unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = degrees unit.seconds = seconds unit.minutes = mins @@ -1616,6 +1618,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer diff --git a/core/assets/bundles/bundle_be.properties b/core/assets/bundles/bundle_be.properties index 5dd2bce180..2537691389 100644 --- a/core/assets/bundles/bundle_be.properties +++ b/core/assets/bundles/bundle_be.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/сек[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Кантралюецца Працэссарам @@ -1370,6 +1371,7 @@ unit.liquidunits = вадкасных адзінак unit.powerunits = энерг. адзінак unit.powerequilibrium = power equilibrium unit.heatunits = адзінкі энергіі +unit.heatunitsperside = heat units per side unit.degrees = град. unit.seconds = сек. unit.minutes = хв. @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Калі ўключана, разгрузчыкі з rules.derelictrepair = Дазволіць рамантаваць пакінутыя блокі rules.reactorexplosions = Выбухі рэактараў rules.coreincinerates = Ядро Спальвае Рэсурсы +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Адключыць сусветныя працэсары rules.schematic = Схемы Дазволены rules.wavetimer = Інтэрвал хваляў diff --git a/core/assets/bundles/bundle_bg.properties b/core/assets/bundles/bundle_bg.properties index 4c01408c35..d1c0eeab71 100644 --- a/core/assets/bundles/bundle_bg.properties +++ b/core/assets/bundles/bundle_bg.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x сила bar.regenerationrate = [stat]{0}/sec[lightgray] скорост на регенерация bar.activationtimer = Ацтивация след {0} bar.activated = Активирано +bar.upto = Up to {0} units.processorcontrol = [lightgray]Контролиран от процесор @@ -1370,6 +1371,7 @@ unit.liquidunits = течност unit.powerunits = електричество unit.powerequilibrium = електрически баланс unit.heatunits = единици горещина +unit.heatunitsperside = heat units per side unit.degrees = градуси unit.seconds = секунди unit.minutes = минути @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Когато е включено, разтоварв rules.derelictrepair = Разрешете поправянето на изоставени блокове rules.reactorexplosions = Експлозивни реактори rules.coreincinerates = Унищожаване на ресурси при преливане +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Изключване на процесорите за света rules.schematic = Позволена употребата на схеми rules.wavetimer = Таймер за Вълни diff --git a/core/assets/bundles/bundle_ca.properties b/core/assets/bundles/bundle_ca.properties index fa3420152a..ba7bc8a4d1 100644 --- a/core/assets/bundles/bundle_ca.properties +++ b/core/assets/bundles/bundle_ca.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]× força bar.regenerationrate = [stat]{0}/sec[lightgray] de taxa de regen. bar.activationtimer = S’activa d’aquí a {0} bar.activated = Activat +bar.upto = Up to {0} units.processorcontrol = [lightgray]Controlat pel processador @@ -1370,6 +1371,7 @@ unit.liquidunits = unitats de líquid unit.powerunits = unitats d’energia unit.powerequilibrium = potència d’equilibri unit.heatunits = unitats de calor +unit.heatunitsperside = heat units per side unit.degrees = ° unit.seconds = s unit.minutes = min @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Si s’activa, els descarregadors de Serpulo podran t rules.derelictrepair = Permet la reparació dels blocs en ruïnes rules.reactorexplosions = Explosions als reactors rules.coreincinerates = El nucli incinera els excedents +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Desactiva els processadors integrats rules.schematic = Permetre l’ús d’esquemes rules.wavetimer = Temporitzador d’onades diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index bd1fb93de8..173cc52fb9 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x síla bar.regenerationrate = [stat]{0}/sek[lightgray] rychlost regenerace bar.activationtimer = Aktivuje se za {0} bar.activated = Aktivováno +bar.upto = Up to {0} units.processorcontrol = [lightgray]Procesor je ovládán[] @@ -1370,6 +1371,7 @@ unit.liquidunits = jednotek kapalin unit.powerunits = jednotek energie unit.powerequilibrium = rovnováha energie unit.heatunits = jednotek tepla +unit.heatunitsperside = heat units per side unit.degrees = úhly unit.seconds = sekundy unit.minutes = minuty @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Pokud je zapnuto, vykladače na Serpulu mohou brát p rules.derelictrepair = Povolit opravu opuštěných bloků rules.reactorexplosions = Výbuch reaktoru rules.coreincinerates = Jádro Spaluje Nadbytečné Suroviny +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Zakázat Světové Procesory rules.schematic = Šablony povoleny rules.wavetimer = Časovač vln diff --git a/core/assets/bundles/bundle_da.properties b/core/assets/bundles/bundle_da.properties index bc9b5b099b..e599fc8d7b 100644 --- a/core/assets/bundles/bundle_da.properties +++ b/core/assets/bundles/bundle_da.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor kontrolleret @@ -1370,6 +1371,7 @@ unit.liquidunits = væskeenheder unit.powerunits = strømenheder unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = grader unit.seconds = sekunder unit.minutes = minutter @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reaktor-eksplosioner rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Skabeloner tilladt rules.wavetimer = Bølge-æggeur diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 5ce70c44a3..6fe7a4d804 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x Stärke bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Prozessorgesteuert @@ -1370,6 +1371,7 @@ unit.liquidunits = Flüssigkeitseinheiten unit.powerunits = Stromeinheiten unit.powerequilibrium = power equilibrium unit.heatunits = Hitzeeinheiten +unit.heatunitsperside = heat units per side unit.degrees = Grad unit.seconds = Sekunden unit.minutes = Minuten @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reaktor-Explosionen rules.coreincinerates = Kern verbrennt überflüssige Materialien +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Deaktiviere Weltprozessoren rules.schematic = Entwürfe erlaubt rules.wavetimer = Wellen-Timer diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index e9bb0590ff..06272eebb5 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x potencia bar.regenerationrate = [stat]{0}/seg[lightgray] regeneración bar.activationtimer = Se activa en {0} bar.activated = Activado +bar.upto = Up to {0} units.processorcontrol = [lightgray]Controlado desde el procesador @@ -1370,6 +1371,7 @@ unit.liquidunits = unidades de líquido unit.powerunits = unidades de energía unit.powerequilibrium = power equilibrium unit.heatunits = unidades de calor +unit.heatunitsperside = heat units per side unit.degrees = grados unit.seconds = segundos unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Cuando está activado, Los descargadores de Serpulo p rules.derelictrepair = Permitir reparar bloques abandonados rules.reactorexplosions = Explosiones de reactores rules.coreincinerates = Incinerar exceso de recursos en el núcleo +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Desactivar procesadores estáticos rules.schematic = Permitir esquemas rules.wavetimer = Temporizador de oleadas diff --git a/core/assets/bundles/bundle_et.properties b/core/assets/bundles/bundle_et.properties index 0302afc0b0..fdb14450c3 100644 --- a/core/assets/bundles/bundle_et.properties +++ b/core/assets/bundles/bundle_et.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1370,6 +1371,7 @@ unit.liquidunits = vedelikuühikut unit.powerunits = energiaühikut unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = kraadi unit.seconds = s unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Kasuta taimerit diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties index 33727c76c9..aa53746715 100644 --- a/core/assets/bundles/bundle_eu.properties +++ b/core/assets/bundles/bundle_eu.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x indarra bar.regenerationrate = [stat]{0}/seg[lightgray] birsorkuntza tasa bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Prozesadorea kontrolatua @@ -1370,6 +1371,7 @@ unit.liquidunits = likido unitate unit.powerunits = energia unitate unit.powerequilibrium = power equilibrium unit.heatunits = berotze unitateak +unit.heatunitsperside = heat units per side unit.degrees = grado unit.seconds = segundo unit.minutes = minutuak @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Baimendu bloke abandonatuen konponketa rules.reactorexplosions = Erreaktorearen eztandak rules.coreincinerates = Nukleoen erraustegien gainezkatzea +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Munduko prozesadoreak desgaitu rules.schematic = Onartutako eskemak rules.wavetimer = Boladen denboragailua diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index a892e478d6..d7e32e008a 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x voimakkuus bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Prosessorin hallitsema @@ -1370,6 +1371,7 @@ unit.liquidunits = nesteyksikköä unit.powerunits = energiayksikköä unit.powerequilibrium = power equilibrium unit.heatunits = lämpöyksikköä +unit.heatunitsperside = heat units per side unit.degrees = astetta unit.seconds = sekunttia unit.minutes = minuuttia @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reaktorien räjähtäminen rules.coreincinerates = Ydin höyrystää ylivuodon +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Poista maailmaprosessorit käytöstä rules.schematic = Salli kaaviot rules.wavetimer = Tasojen aikaraja diff --git a/core/assets/bundles/bundle_fil.properties b/core/assets/bundles/bundle_fil.properties index 8fa1d88598..80e1bb75b3 100644 --- a/core/assets/bundles/bundle_fil.properties +++ b/core/assets/bundles/bundle_fil.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1370,6 +1371,7 @@ unit.liquidunits = mga yunit ng likido unit.powerunits = mga yunit ng kuryente unit.powerequilibrium = power equilibrium unit.heatunits = mga yunit ng init +unit.heatunitsperside = heat units per side unit.degrees = digri unit.seconds = segundo unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 38df7fb19e..8da5e5cb3e 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x puissance bar.regenerationrate = [stat]{0}/sec[lightgray] taux de régénération bar.activationtimer = S'active dans {0} bar.activated = Activé +bar.upto = Up to {0} units.processorcontrol = [lightgray]Contrôlé par un processeur. @@ -1370,6 +1371,7 @@ unit.liquidunits = unités de liquide unit.powerunits = unités d'énergie unit.powerequilibrium = équilibre énergétique unit.heatunits = unités de température +unit.heatunitsperside = heat units per side unit.degrees = degrés unit.seconds = sec unit.minutes = min @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Lorsque cette option est activée, les déchargeurs d rules.derelictrepair = Autoriser la réparation des structures abandonnées rules.reactorexplosions = Explosion des Réacteurs rules.coreincinerates = Incinération des surplus du Noyau +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Désactiver les Processeurs Globaux rules.schematic = Schémas autorisés rules.wavetimer = Compte à rebours des vagues diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index c43fee4d2e..a9f2ea8d1a 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x erő bar.regenerationrate = [stat]{0}/mp[lightgray] regenerálási sebesség bar.activationtimer = Aktiválás {0} mp múlva bar.activated = Aktiválva +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processzorvezérelt @@ -1370,6 +1371,7 @@ unit.liquidunits = folyadékegység unit.powerunits = áramegység unit.powerequilibrium = áramegyensúly unit.heatunits = hőegység +unit.heatunitsperside = heat units per side unit.degrees = fok unit.seconds = másodperc unit.minutes = perc @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Ha engedélyezve van, akkor a Serpulo kirakodói nyer rules.derelictrepair = Elhagyatott épületek javításának engedélyezése rules.reactorexplosions = Reaktorrobbanások rules.coreincinerates = Többletnyersanyagok megsemmisítése a támaszpontban +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Világprocesszorok letiltása rules.schematic = Vázlatok engedélyezése rules.wavetimer = Hullámok időzítése diff --git a/core/assets/bundles/bundle_id_ID.properties b/core/assets/bundles/bundle_id_ID.properties index 051bccf6ab..85dcaa2b24 100644 --- a/core/assets/bundles/bundle_id_ID.properties +++ b/core/assets/bundles/bundle_id_ID.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x penguatan bar.regenerationrate = [stat]{0}/dtk[lightgray] waktu pemulihan bar.activationtimer = Aktif dalam {0} bar.activated = Aktif +bar.upto = Up to {0} units.processorcontrol = [lightgray]Dikendalikan Prosesor @@ -1370,6 +1371,7 @@ unit.liquidunits = unit zat cair unit.powerunits = unit tenaga unit.powerequilibrium = keseimbangan tenaga unit.heatunits = unit panas +unit.heatunitsperside = heat units per side unit.degrees = derajat unit.seconds = detik unit.minutes = menit @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Saat diaktifkan, pembongkar Serpulo dapat membongkar rules.derelictrepair = Izinkan Perbaikan Blok Derelik rules.reactorexplosions = Ledakan Reaktor rules.coreincinerates = Penghangusan Luapan Inti +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Nonaktifkan Prosesor Dunia rules.schematic = Skematik Diperbolehkan rules.wavetimer = Pengaturan Waktu Gelombang diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index c3ee2ce922..156c231c27 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x forza bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Attivazione in {0} bar.activated = Attivato +bar.upto = Up to {0} units.processorcontrol = [lightgray]Controllato dal Processore @@ -1370,6 +1371,7 @@ unit.liquidunits = unità liquidi unit.powerunits = unità energetica unit.powerequilibrium = power equilibrium unit.heatunits = unità termica +unit.heatunitsperside = heat units per side unit.degrees = gradi unit.seconds = secondi unit.minutes = minuti @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Esplosioni Reattore rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disabilita processori rules.schematic = Schematiche Consentite rules.wavetimer = Timer Ondate diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index a16c9aa84a..5eb2dccdd3 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x 強化 bar.regenerationrate = [stat]{0}/秒[lightgray] 再生率 bar.activationtimer = 発動まで {0} bar.activated = アクティブ +bar.upto = Up to {0} units.processorcontrol = [lightgray]プロセッサーの制御下 @@ -1370,6 +1371,7 @@ unit.liquidunits = 液体 unit.powerunits = 電力 unit.powerequilibrium = 電力均衡 unit.heatunits = 熱量 +unit.heatunitsperside = heat units per side unit.degrees = 度 unit.seconds = 秒 unit.minutes = 分 @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = 有効にすると、セルプロの搬出機がコ rules.derelictrepair = 廃墟修復可能 rules.reactorexplosions = リアクターの爆発 rules.coreincinerates = 余剰アイテムの焼却 +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = ワールドプロセッサーを無効にする rules.schematic = 設計図を許可 rules.wavetimer = ウェーブの自動進行 diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 291767570b..54f5427839 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x 치료 속도[][] bar.regenerationrate = [stat]{0}/초[lightgray] 재생률 bar.activationtimer = {0}초 후 활성화 bar.activated = 활성화됨 +bar.upto = Up to {0} units.processorcontrol = [lightgray]프로세서 제어됨[] @@ -1370,6 +1371,7 @@ unit.liquidunits = 액체 unit.powerunits = 전력 unit.powerequilibrium = 전력 균형 unit.heatunits = 열 단위 +unit.heatunitsperside = heat units per side unit.degrees = 도 unit.seconds = 초 unit.minutes = 분 @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = 이 기능을 활성화하면, 세르풀로 언로더 rules.derelictrepair = 잔해 블록 수리 허용 rules.reactorexplosions = 원자로 폭발 허용 rules.coreincinerates = 코어에 특정 자원량 초과 시 자동 소각 허용 +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = 월드 프로세서 비활성화 rules.schematic = 설계도 허용 rules.wavetimer = 시간 제한이 있는 단계 diff --git a/core/assets/bundles/bundle_lt.properties b/core/assets/bundles/bundle_lt.properties index 89725177c3..b452738360 100644 --- a/core/assets/bundles/bundle_lt.properties +++ b/core/assets/bundles/bundle_lt.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1370,6 +1371,7 @@ unit.liquidunits = skysčio vienetai unit.powerunits = energijos vienetai unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = laipsnių unit.seconds = sekundės unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reaktorių Sprogimai rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Bangų Laikmatis diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 29d2a6e76e..2aff471416 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x sterkte bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Gestuurd @@ -1370,6 +1371,7 @@ unit.liquidunits = vloeistof eenheden unit.powerunits = stroom eenheden unit.powerequilibrium = power equilibrium unit.heatunits = warmte eenheden +unit.heatunitsperside = heat units per side unit.degrees = graden unit.seconds = seconden unit.minutes = minuten @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Ontploffende Reactors rules.coreincinerates = Core verbrandt overvloed aan materialen. +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Zet Wereld-Processors Uit. rules.schematic = Ontwerpen Toegestaan rules.wavetimer = Vijandelijke Golven Timer diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index ab29a1e0df..6e753151e1 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1370,6 +1371,7 @@ unit.liquidunits = liquid units unit.powerunits = power units unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = degrees unit.seconds = seconds unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 1abadc2b2d..00072433c7 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x siły bar.regenerationrate = [stat]{0}/sek[lightgray] szybkość regeneracji bar.activationtimer = Aktywuje się za {0} bar.activated = Aktywowane +bar.upto = Up to {0} units.processorcontrol = [lightgray]Kontrolowany przez procesor @@ -1370,6 +1371,7 @@ unit.liquidunits = jednostek płynu unit.powerunits = jednostek prądu unit.powerequilibrium = równowaga energii unit.heatunits = jednostek ciepła +unit.heatunitsperside = heat units per side unit.degrees = stopnie unit.seconds = sekundy unit.minutes = min @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Gdy włączone, rozładowywacze Serpulo mogą pobiera rules.derelictrepair = Zezwól na naprawę opuszczonego bloku rules.reactorexplosions = Eksplozje Reaktorów rules.coreincinerates = Rdzeń Spala Nadmiarowe Przedmioty +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Wyłącz Procesor Świata rules.schematic = Zezwalaj na schematy rules.wavetimer = Zegar Fal diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index dac2406eda..970edb4d18 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x força bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Ativa em {0} bar.activated = Ativado +bar.upto = Up to {0} units.processorcontrol = [lightgray]Controlado por Processador @@ -1370,6 +1371,7 @@ unit.liquidunits = unidades de líquido unit.powerunits = unidades de energia unit.powerequilibrium = equilíbrio de energia unit.heatunits = unidades de calor +unit.heatunitsperside = heat units per side unit.degrees = Graus unit.seconds = segundos unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Quando ativado, descarregadores de Serpulo podem tira rules.derelictrepair = Permitir Reparo de Blocos Abandonados rules.reactorexplosions = Reatores explodem rules.coreincinerates = Núcleo incinera itens em excesso +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Desativar processadores mundiais rules.schematic = Permitir Esquemas rules.wavetimer = Tempo de horda diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index db7e3a86a2..bcf27c7f00 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x força bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Controlado por Processador @@ -1370,6 +1371,7 @@ unit.liquidunits = Unidades de líquido unit.powerunits = Unidades de energia unit.powerequilibrium = power equilibrium unit.heatunits = Unidades de calor +unit.heatunitsperside = heat units per side unit.degrees = Graus unit.seconds = segundos unit.minutes = minutos @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Permitir Reparação de Blocos Derelict rules.reactorexplosions = Esploções de Reatores rules.coreincinerates = Núcleo destrói Itens em Excesso +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Desativar Processadores Globais rules.schematic = Esquemas Permitidos rules.wavetimer = Tempo de Horda diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 42acc18915..c86e08c595 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x putere bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Controlat de Procesor @@ -1370,6 +1371,7 @@ unit.liquidunits = unități lichid unit.powerunits = electricitate unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = grade unit.seconds = secunde unit.minutes = min @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactoarele Explodează rules.coreincinerates = Nucleul Incinerează Resursele în Plus +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Se Pot Folosi Scheme rules.wavetimer = Valuri pe Timp diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index a920318399..3c719fb38a 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x эффективность bar.regenerationrate = [stat]{0}/сек[lightgray] скорость регенерации bar.activationtimer = Активируется через {0} bar.activated = Активировано +bar.upto = Up to {0} units.processorcontrol = [lightgray]Управляется процессором @@ -1370,6 +1371,7 @@ unit.liquidunits = жидкостных единиц unit.powerunits = энерг. единиц unit.powerequilibrium = энерг. равновесие unit.heatunits = единиц тепла +unit.heatunitsperside = heat units per side unit.degrees = ° unit.seconds = сек unit.minutes = мин @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = При включении, разгрузчики н rules.derelictrepair = Разрешить починку покинутых построек rules.reactorexplosions = Взрывы реакторов rules.coreincinerates = Ядро сжигает избыток ресурсов +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Отключить мировые процессоры rules.schematic = Разрешить схемы rules.wavetimer = Интервал волн diff --git a/core/assets/bundles/bundle_sr.properties b/core/assets/bundles/bundle_sr.properties index be24eb758b..d57139c53d 100644 --- a/core/assets/bundles/bundle_sr.properties +++ b/core/assets/bundles/bundle_sr.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x snage bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Procesno Upravljan @@ -1370,6 +1371,7 @@ unit.liquidunits = jedinica tečnosti unit.powerunits = jedinica energije unit.powerequilibrium = power equilibrium unit.heatunits = jedinica toplote +unit.heatunitsperside = heat units per side unit.degrees = stepeni unit.seconds = sekunde unit.minutes = minuti @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Eksplozije Reaktora rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Onesposobi Svetovne Procesore rules.schematic = Šeme Su Dozvoljene rules.wavetimer = Talasna Štoperica diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties index 1ed8729b63..a5e718406a 100644 --- a/core/assets/bundles/bundle_sv.properties +++ b/core/assets/bundles/bundle_sv.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1370,6 +1371,7 @@ unit.liquidunits = liquid units unit.powerunits = power units unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = grader unit.seconds = sekunder unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Vågtimer diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 9ab80c71fb..6f3ac52ea6 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -1319,6 +1319,7 @@ bar.strength = [lightgray]ความรุนแรง [stat]{0}[lightgray]x bar.regenerationrate = [stat]{0}/วิ[lightgray] อัตราการฟื้นฟู bar.activationtimer = เปิดใช้งานใน {0} bar.activated = เปิดใช้งานแล้ว +bar.upto = Up to {0} units.processorcontrol = [lightgray]ถูกตัวประมวลผลควบคุมอยู่ @@ -1370,6 +1371,7 @@ unit.liquidunits = หน่วยของเหลว unit.powerunits = หน่วยพลังงาน unit.powerequilibrium = สมดุลพลังงาน unit.heatunits = หน่วยความร้อน +unit.heatunitsperside = heat units per side unit.degrees = องศา unit.seconds = วินาที unit.minutes = นาที @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = เมื่อเปิดใช้งาน ตั rules.derelictrepair = อนุญาตการซ่อมแซมบล็อกทิ้งร้าง rules.reactorexplosions = เปิดการระเบิดของเตาปฏิกร rules.coreincinerates = แกนกลางเผาทรัพยากรส่วนเกิน +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = ปิดการทำงานของตัวประมวลผลโลก rules.schematic = อนุญาตให้ใช้แผนผัง rules.wavetimer = นับถอยหลังการปล่อยคลื่น diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index 0c4716927c..093b24f23e 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x strength bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]Processor Controlled @@ -1370,6 +1371,7 @@ unit.liquidunits = Litre unit.powerunits = Volt unit.powerequilibrium = power equilibrium unit.heatunits = heat units +unit.heatunitsperside = heat units per side unit.degrees = derece unit.seconds = saniye unit.minutes = mins @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = When enabled, Serpulo unloaders can take items from t rules.derelictrepair = Allow Derelict Block Repair rules.reactorexplosions = Reactor Explosions rules.coreincinerates = Core Incinerates Overflow +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Disable World Processors rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index d1b7ecfc52..fbd2cb95ef 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x Güç bar.regenerationrate = [stat]{0}/sec[lightgray] tamir hızı bar.activationtimer = {0} saniyede aktif olucak bar.activated = Aktif +bar.upto = Up to {0} units.processorcontrol = [lightgray]İşlemci Kontrolünde @@ -1370,6 +1371,7 @@ unit.liquidunits = sıvı birimi unit.powerunits = enerji birimi unit.powerequilibrium = enerji dengesi unit.heatunits = ısı birimi +unit.heatunitsperside = heat units per side unit.degrees = derece unit.seconds = saniye unit.minutes = dakika @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Aktifken, Serpulo Boşaltıcıları Merkezden malzeme rules.derelictrepair = Kalıntıları Tamir Etmeye İzin Ver rules.reactorexplosions = Reaktör Patlamaları rules.coreincinerates = Merkez Taşanları Eritir +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Evrensel İşlemcileri Devredışı Bırak rules.schematic = Şema Kullanılabilir rules.wavetimer = Dalga Zamanlayıcısı diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 612ab78218..33f8064bca 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -1319,6 +1319,7 @@ bar.strength = x[stat]{0}[lightgray] сила bar.regenerationrate = [stat]{0} [lightgray]відновлення [stat]за сек. bar.activationtimer = Активується через {0} bar.activated = Готово +bar.upto = Up to {0} units.processorcontrol = [lightgray]Керується процесором @@ -1370,6 +1371,7 @@ unit.liquidunits = одиниць рідини unit.powerunits = одиниць енергії unit.powerequilibrium = енергорівновага unit.heatunits = одиниць нагрівання +unit.heatunitsperside = heat units per side unit.degrees = град. unit.seconds = сек. unit.minutes = хв. @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Якщо увімкнено, розвантажува rules.derelictrepair = Дозволити відновлення будівель Переможених rules.reactorexplosions = Вибухи реактора rules.coreincinerates = Ядро спалює надлишкові предмети +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Вимкнути світові процесори rules.schematic = Використання схем дозволено rules.wavetimer = Таймер для хвиль diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index e6525a725c..8cb7fbd6c2 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x sức mạnh bar.regenerationrate = [stat]{0}/sec[lightgray] tốc độ hồi phục bar.activationtimer = Kích hoạt trong {0} bar.activated = Đã kích hoạt +bar.upto = Up to {0} units.processorcontrol = [lightgray]Điều khiển bởi bộ xử lý @@ -1370,6 +1371,7 @@ unit.liquidunits = đơn vị chất lỏng unit.powerunits = đơn vị năng lượng unit.powerequilibrium = cân bằng năng lượng unit.heatunits = đơn vị nhiệt +unit.heatunitsperside = heat units per side unit.degrees = độ unit.seconds = giây unit.minutes = phút @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = Khi bật, điểm dỡ hàng của Serpulo có thể rules.derelictrepair = Cho Phép Sửa Khối Bỏ Hoang rules.reactorexplosions = Nổ Nò Phản Ứng rules.coreincinerates = Hủy Vật Phẩm Khi Lõi Đầy +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = Vô Hiệu Hoá Bộ Xử Lý Thế Giới rules.schematic = Cho Phép Dùng Bản Thiết Kế rules.wavetimer = Đếm Ngược Đợt diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 766daf634f..e834359ba6 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x 效率 bar.regenerationrate = [stat]{0}/秒[lightgray] 恢复率 bar.activationtimer = 在 {0} 后激活 bar.activated = 已激活 +bar.upto = Up to {0} units.processorcontrol = [lightgray]由处理器控制 @@ -1370,6 +1371,7 @@ unit.liquidunits = 液体 unit.powerunits = 电力 unit.powerequilibrium = 电力平衡 unit.heatunits = 单位热量 +unit.heatunitsperside = heat units per side unit.degrees = 度 unit.seconds = 秒 unit.minutes = 分 @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = 当启用时,塞普罗的装卸器可以从核心 rules.derelictrepair = 允许修复残骸建筑 rules.reactorexplosions = 允许反应堆爆炸 rules.coreincinerates = 核心焚烧溢出资源 +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = 禁用世界处理器 rules.schematic = 允许使用蓝图 rules.wavetimer = 波次计时器 @@ -1836,8 +1840,8 @@ unit.renale.name = Renale block.parallax.name = 差扰 block.cliff.name = 悬崖 -block.sand-boulder.name = 砂岩 -block.basalt-boulder.name = 玄武岩石块 +block.sand-boulder.name = 砂岩块 +block.basalt-boulder.name = 玄武岩块 block.grass.name = 草地 block.molten-slag.name = 矿渣液 block.pooled-cryofluid.name = 冷冻液 @@ -1850,10 +1854,10 @@ block.sand-wall.name = 沙墙 block.spore-pine.name = 孢子树 block.spore-wall.name = 孢子墙 block.boulder.name = 石块 -block.snow-boulder.name = 雪石块 +block.snow-boulder.name = 雪岩块 block.snow-pine.name = 雪树 block.shale.name = 页岩地 -block.shale-boulder.name = 页岩石块 +block.shale-boulder.name = 页岩块 block.moss.name = 苔藓地 block.shrubs.name = 灌木丛 block.spore-moss.name = 孢子苔藓地 @@ -1891,7 +1895,7 @@ block.char.name = 焦土 block.dacite.name = 安山岩 block.rhyolite.name = 流纹岩 block.dacite-wall.name = 安山岩墙 -block.dacite-boulder.name = 安山石块 +block.dacite-boulder.name = 安山岩块 block.ice-snow.name = 冰雪地 block.stone-wall.name = 石墙 block.ice-wall.name = 冰墙 @@ -2388,7 +2392,7 @@ onset.enemies = 敌人来袭,准备防御。 onset.defenses = [accent]建立防御:[lightgray] {0} onset.attack = 敌军基地十分脆弱。发动反攻。 onset.cores = 你可以在[accent]核心地块[]上建造新的核心。\n新核心的功能类似于前沿基地,且与其他核心共享资源仓库。\n放置一个 :core-bastion: 核心。 -onset.detect = 敌军将在两分钟内发现你。\n设立防御,挖掘矿物,并建造生产设施。 +onset.detect = 两分钟后敌人来袭。\n设立防御,挖掘矿物,并建造生产设施。 onset.commandmode = 按住[accent]shift[]键进入[accent]指挥模式[]。\n按住[accent]鼠标左键[]框选单位。\n[accent]右键[]指挥所选单位移动或攻击。 onset.commandmode.mobile = 点击左下角的[accent]指挥[]进入[accent]指挥模式[]。\n按住屏幕,[accent]拖动[]框选单位。\n[accent]点击[]指挥所选单位移动或攻击。 aegis.tungsten = 钨可以使用[accent]冲击钻[]进行开采。\n该结构需要[accent]水[]和[accent]电力[]。 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 17e5324d65..f26c1ab337 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -1319,6 +1319,7 @@ bar.strength = [stat]{0}[lightgray]x 強度 bar.regenerationrate = [stat]{0}/sec[lightgray] regen rate bar.activationtimer = Activates in {0} bar.activated = Activated +bar.upto = Up to {0} units.processorcontrol = [lightgray]由微處理器控制 @@ -1370,6 +1371,7 @@ unit.liquidunits = 液體單位 unit.powerunits = 能量單位 unit.powerequilibrium = power equilibrium unit.heatunits = 熱量單位 +unit.heatunitsperside = heat units per side unit.degrees = 度 unit.seconds = 秒 unit.minutes = 分 @@ -1611,6 +1613,8 @@ rules.coreunloaders.info = 開啟後,裝卸器可從核心提取物資。\n不 rules.derelictrepair = 允許修復殘骸建築 rules.reactorexplosions = 反應爐爆炸 rules.coreincinerates = 核心銷毀物品 +rules.corebuildandconfig = Deconstruct And Configure Cores +rules.corebuildandconfig.info = Allows building and deconstructing cores anywhere, not just on core zones.\nAlso shows ui on cores to change player team. rules.disableworldprocessors = 停用世界處理器 rules.schematic = 允許使用藍圖 rules.wavetimer = 波次時間 diff --git a/core/assets/contributors b/core/assets/contributors index 3963cd528b..f3048de1a6 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -189,13 +189,15 @@ buj Agzam4 ItsKirby69 TheCuber -萌新-hhgs Jovinull +Adleanogare +萌新-hhgs Alon 硫缺铅/PyratiteNoLead Space -DeterMination +rylid-umil NeilGreenFly +DeterMination Sunky.MP3G jhonnata.andre -Zaxerf1234 \ No newline at end of file +Zaxerf1234 diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index b551eb7c4c..c9aeb4bb57 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -173,6 +173,7 @@ const BuildSelectEvent = Packages.mindustry.game.EventType.BuildSelectEvent const BuildRotateEvent = Packages.mindustry.game.EventType.BuildRotateEvent const BlockBuildEndEvent = Packages.mindustry.game.EventType.BlockBuildEndEvent const BlockBuildBeginEvent = Packages.mindustry.game.EventType.BlockBuildBeginEvent +const RulesLoadEvent = Packages.mindustry.game.EventType.RulesLoadEvent const ResearchEvent = Packages.mindustry.game.EventType.ResearchEvent const UnlockEvent = Packages.mindustry.game.EventType.UnlockEvent const StateChangeEvent = Packages.mindustry.game.EventType.StateChangeEvent diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index d5cccf7328..5b4284f9a9 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2379,6 +2379,7 @@ public class Blocks{ hasPower = false; liquidCapacity = 100f; explosivenessScale = flammabilityScale = 20f/100f; + noAcceptDisabled = true; }}; phaseConduit = new LiquidBridge("phase-conduit"){{ @@ -2392,6 +2393,7 @@ public class Blocks{ pulse = true; explosivenessScale = flammabilityScale = 20f/100f; liquidCapacity = 100f; + noAcceptDisabled = true; consumePower(0.30f); }}; diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 121f74bc5d..e3bcd76a9b 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -435,6 +435,7 @@ public class Control implements ApplicationListener, Loadable{ if(playtest) state.playtestingMap = map; state.rules.sector = null; state.rules.editor = false; + Events.fire(new RulesLoadEvent(state.rules)); logic.play(); if(settings.getBool("savecreate") && !world.isInvalidMap() && !playtest){ control.saves.addSave(map.name() + " " + new SimpleDateFormat("MMM dd h:mm", Locale.getDefault()).format(new Date())); @@ -574,6 +575,7 @@ public class Control implements ApplicationListener, Loadable{ }); } }else{ + Events.fire(new RulesLoadEvent(state.rules, true)); state.set(State.playing); reloader.end(); } @@ -608,6 +610,7 @@ public class Control implements ApplicationListener, Loadable{ beforePlay.run(); } + Events.fire(new RulesLoadEvent(state.rules)); logic.play(); control.saves.saveSector(sector); Events.fire(new SectorLaunchEvent(sector)); diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 306dd569ad..47a3b46ab4 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -555,6 +555,30 @@ public class World{ } } + public static void raycastEachNoDiagonalWorld(float x0, float y0, float x1, float y1, Raycaster cons){ + raycastEachNoDiagonal(toTile(x0), toTile(y0), toTile(x1), toTile(y1), cons); + } + + public static void raycastEachNoDiagonal(int startX, int startY, int endX, int endY, Raycaster cons){ + int xDist = Math.abs(endX - startX); + int yDist = -Math.abs(endY - startY); + int xStep = (startX < endX ? +1 : -1); + int yStep = (startY < endY ? +1 : -1); + int error = xDist + yDist; + + while(true){ + if(cons.accept(startX, startY) || (startX == endX && startY == endY)) break; + + if(2 * error - yDist > xDist - 2 * error){ + error += yDist; + startX += xStep; + }else{ + error += xDist; + startY += yStep; + } + } + } + public static boolean raycast(int x1, int y1, int x2, int y2, Raycaster cons){ int x = x1, dx = Math.abs(x2 - x), sx = x < x2 ? 1 : -1; int y = y1, dy = Math.abs(y2 - y), sy = y < y2 ? 1 : -1; @@ -644,6 +668,11 @@ public class World{ super.end(); } + @Override + public boolean isMap(){ + return true; + } + public void applyFilters(){ Seq filters = map.filters(); diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index d68aaf3934..71f9781a05 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -140,18 +140,22 @@ public abstract class UnlockableContent extends MappableContent{ return minfo.mod == null || isPatchContent() ? description : description + "\n" + Core.bundle.format("mod.display", minfo.mod.meta.displayName); } - /** Checks stat initialization state. Call before displaying stats. */ + /** @deprecated just call computeStats() every time, there's no reason to cache it. This will be removed in v9. */ + @Deprecated public void checkStats(){ - if(!stats.intialized){ - setStats(); - stats.intialized = true; - } + computeStats(); } - /** Initializes stats on demand. Should only be called once. Only called before something is displayed. */ + /** Initializes stats on demand. Called every time the block stats are shown. */ public void setStats(){ } + public Stats computeStats(){ + this.stats = new Stats(); + setStats(); + return this.stats; + } + /** Display any extra info after details. */ public void displayExtra(Table table){ diff --git a/core/src/mindustry/editor/MapObjectivesDialog.java b/core/src/mindustry/editor/MapObjectivesDialog.java index aa86f4e996..32d789f3ad 100644 --- a/core/src/mindustry/editor/MapObjectivesDialog.java +++ b/core/src/mindustry/editor/MapObjectivesDialog.java @@ -3,6 +3,8 @@ package mindustry.editor; import arc.*; import arc.func.*; import arc.graphics.*; +import arc.input.*; +import arc.math.*; import arc.math.geom.*; import arc.scene.event.*; import arc.scene.ui.*; @@ -538,6 +540,46 @@ public class MapObjectivesDialog extends BaseDialog{ out.get(canvas.objectives); out = arr -> {}; }); + + update(() -> { + if(hasKeyboard()){ + doInput(); + } + }); + } + + private void doInput(){ + if(Core.input.ctrl() && Core.input.keyTap(KeyCode.c)){ + Vec2 pos = screenToLocalCoordinates(Core.input.mouse()); + int pasteX = Mathf.round((pos.x - objWidth * canvas.unitSize / 2f) / canvas.unitSize); + int pasteY = Mathf.floor((pos.y - canvas.unitSize) / canvas.unitSize); + Tmp.r1.set(pasteX, pasteY, 1, 1).grow(-0.001f); + for(var obj : canvas.objectives){ + if(Tmp.r2.set(obj.editorX - 2, obj.editorY - 1, objWidth, objHeight).overlaps(Tmp.r1)){ + Core.app.setClipboardText(JsonIO.json.toJson(obj, Object.class)); + break; + } + } + } + + if(Core.input.ctrl() && Core.input.keyTap(KeyCode.v)){ + String text = Core.app.getClipboardText(); + if(text == null) return; + + try{ + MapObjective obj = JsonIO.read(MapObjective.class, text); + Vec2 pos = screenToLocalCoordinates(Core.input.mouse()); + int tx = Mathf.round((pos.x - objWidth * canvas.unitSize / 2f) / canvas.unitSize); + int ty = Mathf.floor((pos.y - canvas.unitSize) / canvas.unitSize); + if(obj != null && canvas.tilemap.validPlace(tx, ty, null)){ + obj.editorX = tx; + obj.editorY = ty; + canvas.tilemap.createTile(tx, ty, obj, true); + canvas.objectives.add(obj); + } + }catch(Exception e){ //in case serialization fails + } + } } public void show(Seq objectives, Cons> out){ diff --git a/core/src/mindustry/editor/OperationStack.java b/core/src/mindustry/editor/OperationStack.java index 91bb183457..d971317942 100755 --- a/core/src/mindustry/editor/OperationStack.java +++ b/core/src/mindustry/editor/OperationStack.java @@ -3,7 +3,7 @@ package mindustry.editor; import arc.struct.*; public class OperationStack{ - private static final int maxSize = 10; + private static final int maxSize = 30; private Seq stack = new Seq<>(); private int index = 0; diff --git a/core/src/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java index 61bc01c95a..c836cdc58a 100644 --- a/core/src/mindustry/entities/Damage.java +++ b/core/src/mindustry/entities/Damage.java @@ -263,7 +263,7 @@ public class Damage{ if(hitter.type.collidesGround && hitter.type.collidesTiles){ seg1.set(x, y); seg2.set(seg1).add(vec); - World.raycastEachWorld(x, y, seg2.x, seg2.y, (cx, cy) -> { + World.raycastEachNoDiagonalWorld(x, y, seg2.x, seg2.y, (cx, cy) -> { Building tile = world.build(cx, cy); boolean collide = tile != null && tile.collide(hitter) && hitter.checkUnderBuild(tile, cx * tilesize, cy * tilesize) && ((tile.team != team && tile.collide(hitter)) || hitter.type.testCollision(hitter, tile)) && collidedBlocks.add(tile.pos()); diff --git a/core/src/mindustry/entities/abilities/ShieldArcAbility.java b/core/src/mindustry/entities/abilities/ShieldArcAbility.java index 188783f6e7..7da8364473 100644 --- a/core/src/mindustry/entities/abilities/ShieldArcAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldArcAbility.java @@ -95,7 +95,7 @@ public class ShieldArcAbility extends Ability{ paramField.data -= unit.health() * paramField.missileUnitMultiplier * Vars.state.rules.unitDamage(unit.team); paramField.alpha = 1f; - }else if(paramField.pushUnits && !(!unit.isFlying() && paramUnit.isFlying())){ + }else if(paramField.pushUnits && (paramField.pushDiffLayer || paramUnit.isFlying() == unit.isFlying())){ float reach = paramField.radius + paramField.width; float overlapDst = reach - unit.dst(paramPos); @@ -158,6 +158,8 @@ public class ShieldArcAbility extends Ability{ public boolean offsetRegion = false; /** If true, enemy units are pushed out. */ public boolean pushUnits = true; + /** If pushUnits is true, allow ground units to push air or air units to push ground */ + public boolean pushDiffLayer = true; public Effect pushEffect = Fx.circleColorSpark; /** State. */ diff --git a/core/src/mindustry/entities/bullet/LiquidBulletType.java b/core/src/mindustry/entities/bullet/LiquidBulletType.java index 98769d4a11..eabcfbd3f9 100644 --- a/core/src/mindustry/entities/bullet/LiquidBulletType.java +++ b/core/src/mindustry/entities/bullet/LiquidBulletType.java @@ -96,7 +96,7 @@ public class LiquidBulletType extends BulletType{ Puddles.deposit(world.tileWorld(hitx, hity), liquid, puddleSize); if(liquid.temperature <= 0.5f && liquid.flammability < 0.3f){ - float intensity = 400f * puddleSize/6f; + float intensity = 400f * (liquid.heatCapacity / 0.4f) * (puddleSize / 6f); Fires.extinguish(world.tileWorld(hitx, hity), intensity); for(Point2 p : Geometry.d4){ Fires.extinguish(world.tileWorld(hitx + p.x * tilesize, hity + p.y * tilesize), intensity); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index f822da9aef..b2f7d74194 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1836,6 +1836,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, if(was){ indexer.addIndex(tile); Events.fire(teamChangeEvent.set(last, self())); + pathfinder.updateTile(tile); + updateProximity(); } checkAllowUpdate(); diff --git a/core/src/mindustry/entities/effect/ParticleEffect.java b/core/src/mindustry/entities/effect/ParticleEffect.java index 66c61b3329..77335fb5b4 100644 --- a/core/src/mindustry/entities/effect/ParticleEffect.java +++ b/core/src/mindustry/entities/effect/ParticleEffect.java @@ -14,8 +14,11 @@ public class ParticleEffect extends Effect{ private static final Rand rand = new Rand(); private static final Vec2 rv = new Vec2(); + /** Particle color. */ public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy(); + /** Number of particles created. */ public int particles = 6; + /** If true, the particle's length is set in a random range from 0 to length. */ public boolean randLength = true; /** Gives the effect flipping compatability like casing effects. */ public boolean casingFlip; @@ -24,8 +27,13 @@ public class ParticleEffect extends Effect{ public Interp interp = Interp.linear; /** Particle size interpolation. Null to use interp. */ public @Nullable Interp sizeInterp = null; + /** Particle color interpolation. Null to use interp. */ + public @Nullable Interp colorInterp = null; + /** Offset position of the particle. */ public float offsetX, offsetY; + /** Particle light properties. */ public float lightScl = 2f, lightOpacity = 0.6f; + /** Color of the light each particle emits. */ public @Nullable Color lightColor; //region only @@ -36,12 +44,22 @@ public class ParticleEffect extends Effect{ public float sizeFrom = 2f, sizeTo = 0f; /** Controls the amount of ticks the effect waits before changing size. */ public float sizeChangeStart = 0f; + /** Controls the amount of ticks the effect waits before changing width. */ + public float widthChangeStart = 0f; + /** Controls the amount of ticks the effect waits before changing height. */ + public float heightChangeStart = 0f; /** Whether the rotation adds with the parent */ public boolean useRotation = true; /** Rotation offset. */ public float offset = 0; /** Sprite to draw. */ public String region = "circle"; + /** Particle width and height properties as a ratio of its radius. Does nothing to line particles. */ + public float widthFrom = 1f, widthTo = 1f, heightFrom = 1f, heightTo = 1f; + /** Particle width interpolation. Null to use sizeInterp. */ + public @Nullable Interp widthInterp = null; + /** Particle height interpolation. Null to use sizeInterp. */ + public @Nullable Interp heightInterp = null; //line only public boolean line; @@ -55,6 +73,9 @@ public class ParticleEffect extends Effect{ clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo)); sizeChangeStart = Mathf.clamp(sizeChangeStart, 0f, lifetime); if(sizeInterp == null) sizeInterp = interp; + if(widthInterp == null) widthInterp = sizeInterp; + if(heightInterp == null) heightInterp = sizeInterp; + if(colorInterp == null) colorInterp = interp; } @Override @@ -65,10 +86,13 @@ public class ParticleEffect extends Effect{ int flip = casingFlip ? -Mathf.sign(e.rotation) : 1; float rawfin = e.fin(); float fin = e.fin(interp); + float colFin = e.fin(colorInterp); float rad = sizeInterp.apply(sizeFrom, sizeTo, Mathf.curve(rawfin, sizeChangeStart / lifetime, 1f)) * 2; + float width = rad * (widthInterp.apply(widthFrom, widthTo, Mathf.curve(rawfin, widthChangeStart / lifetime, 1f)) * 2); + float height = rad * (heightInterp.apply(heightFrom, heightTo, Mathf.curve(rawfin, heightChangeStart / lifetime, 1f)) * 2); float ox = e.x + Angles.trnsx(realRotation, offsetX * flip, offsetY), oy = e.y + Angles.trnsy(realRotation, offsetX * flip, offsetY); - Draw.color(colorFrom, colorTo, fin); + Draw.color(colorFrom, colorTo, colFin); Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor; if(line){ @@ -91,7 +115,7 @@ public class ParticleEffect extends Effect{ rv.trns(realRotation + rand.range(cone), !randLength ? l : rand.random(l)); float x = rv.x, y = rv.y; - Draw.rect(tex, ox + x, oy + y, rad, rad / tex.ratio(), realRotation + offset + e.time * spin); + Draw.rect(tex, ox + x, oy + y, width, height / tex.ratio(), realRotation + offset + e.time * spin); Drawf.light(ox + x, oy + y, rad * lightScl, lightColor, lightOpacity * Draw.getColorAlpha()); } } diff --git a/core/src/mindustry/entities/effect/TriangleEffect.java b/core/src/mindustry/entities/effect/TriangleEffect.java new file mode 100644 index 0000000000..87e7b1a246 --- /dev/null +++ b/core/src/mindustry/entities/effect/TriangleEffect.java @@ -0,0 +1,72 @@ +package mindustry.entities.effect; + +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.math.geom.*; +import arc.util.*; +import mindustry.entities.*; +import mindustry.graphics.*; + +/** Creates a triangle with heavily customizable parameters. */ +public class TriangleEffect extends Effect{ + private static final Rand rand = new Rand(); + + /** Triangle color. */ + public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy(); + /** Gives the effect flipping compatability like casing effects. */ + public boolean flippable; + /** Triangle position interpolation. Also used as a fallback.*/ + public Interp interp = Interp.linear; + /** Width interpolation. Null to use interp. */ + public @Nullable Interp widthInterp = null; + /** Height interpolation. Null to use interp. */ + public @Nullable Interp heightInterp = null; + /** Triangle color interpolation. Null to use interp. */ + public @Nullable Interp colorInterp = null; + /** Controls the starting and ending positions of the triangle. */ + public float startX = 0, startY = 0, endX = 0, endY = 0; + /** Triangle light properties. */ + public float lightScl = 8f, lightOpacityFrom = 0.6f, lightOpacityTo = 0f; + /** Color of the light the triangle emits. */ + public @Nullable Color lightColor; + + /** Controls the initial and final positions of each point on the triangle. */ + public float widthFrom = 4f, widthTo = 0f, heightFrom = 4f, heightTo = 4f; + /** Whether the rotation adds with the parent */ + public boolean useRotation = true; + /** Spin in degrees/tick. */ + public int spin = 0; + /** Rotation offset. */ + public float offset = 0; + + @Override + public void init(){ + if(widthInterp == null) widthInterp = interp; + if(heightInterp == null) heightInterp = interp; + if(colorInterp == null) colorInterp = interp; + } + + @Override + public void render(EffectContainer e){ + float realRotation = (useRotation ? (flippable ? Math.abs(e.rotation) : e.rotation) : baseRotation); + int flip = flippable ? -Mathf.sign(e.rotation) : 1; + float rawfin = e.fin(); + float colFin = e.fin(interp); + float width = widthInterp.apply(widthFrom, widthTo, Mathf.curve(rawfin, 0, 1f)); + float height = heightInterp.apply(heightFrom, heightTo, Mathf.curve(rawfin, 0, 1f)); + float lightOpac = colorInterp.apply(lightOpacityFrom, lightOpacityTo, Mathf.curve(rawfin, 0, 1f)); + + float cx = interp.apply(startX, endX, Mathf.curve(rawfin, 0, 1f)); + float cy = interp.apply(startY, endY, Mathf.curve(rawfin, 0, 1f)); + Vec2 pos = new Vec2(cx, cy); + pos.rotate(realRotation); + + Draw.color(colorFrom, colorTo, colFin); + Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor; + + Drawf.tri(pos.x + e.x, pos.y + e.y, width, height, realRotation + offset + e.time * spin); + Drawf.light(pos.x + e.x, pos.y + e.y, lightScl, lightColor, lightOpac * Draw.getColorAlpha()); + } +} diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index b10d39748f..5df96c79d0 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -519,6 +519,22 @@ public class EventType{ } } + /** Called when all rules of the current map are loaded. */ + public static class RulesLoadEvent{ + public final Rules rules; + public final boolean fromSave; + + public RulesLoadEvent(Rules rules){ + this.rules = rules; + this.fromSave = false; + } + + public RulesLoadEvent(Rules rules, boolean fromSave){ + this.rules = rules; + this.fromSave = fromSave; + } + } + /** * Called when block building begins by placing down the ConstructBlock. * The tile's block will nearly always be a ConstructBlock. diff --git a/core/src/mindustry/game/MapObjectives.java b/core/src/mindustry/game/MapObjectives.java index 93344fb4d8..761126bffe 100644 --- a/core/src/mindustry/game/MapObjectives.java +++ b/core/src/mindustry/game/MapObjectives.java @@ -308,7 +308,7 @@ public class MapObjectives implements Iterable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable, Eachable { - playerPlanTree = new QuadTree<>(new Rect(0f, 0f, world.unitWidth(), world.unitHeight())); - selectPlanTree = new QuadTree<>(new Rect(0f, 0f, world.unitWidth(), world.unitHeight())); - createPlanLists(); - }); + Events.on(WorldLoadEvent.class, e -> initQuadtrees()); - Events.on(ResetEvent.class, e -> { - reset(); - }); + Events.on(ResetEvent.class, e -> reset()); + } + + protected void initQuadtrees(){ + playerPlanTree = new QuadTree<>(new Rect(0f, 0f, world.unitWidth(), world.unitHeight())); + selectPlanTree = new QuadTree<>(new Rect(0f, 0f, world.unitWidth(), world.unitHeight())); + createPlanLists(); } //methods to override @@ -2262,6 +2262,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ config.build(group); planConfig.build(group); } + + initQuadtrees(); } public boolean canShoot(){ diff --git a/core/src/mindustry/io/SaveIO.java b/core/src/mindustry/io/SaveIO.java index 8aec7acaef..aac5f642c2 100644 --- a/core/src/mindustry/io/SaveIO.java +++ b/core/src/mindustry/io/SaveIO.java @@ -171,6 +171,11 @@ public class SaveIO{ ver.read(stream, counter, new SaveReadState(context)); Events.fire(new SaveLoadEvent(context.isMap())); + + //this gets handled elsewhere when starting a new game or loading a sector + if(!context.isMap() && !state.isCampaign()){ + Events.fire(new RulesLoadEvent(state.rules, true)); + } }catch(Throwable e){ throw new SaveException(e); }finally{ diff --git a/core/src/mindustry/maps/generators/FileMapGenerator.java b/core/src/mindustry/maps/generators/FileMapGenerator.java index 368ade888e..e9804dd94c 100644 --- a/core/src/mindustry/maps/generators/FileMapGenerator.java +++ b/core/src/mindustry/maps/generators/FileMapGenerator.java @@ -79,11 +79,6 @@ public class FileMapGenerator implements WorldGenerator{ applyFilters(); //no super.end(), don't call world load event twice } - - @Override - public boolean isMap(){ - return true; - } }); world.setGenerating(true); diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 1a1ab3d733..b6a9b484f1 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -75,6 +75,7 @@ public class ClassMap{ classes.put("RadialEffect", mindustry.entities.effect.RadialEffect.class); classes.put("SeqEffect", mindustry.entities.effect.SeqEffect.class); classes.put("SoundEffect", mindustry.entities.effect.SoundEffect.class); + classes.put("TriangleEffect", mindustry.entities.effect.TriangleEffect.class); classes.put("WaveEffect", mindustry.entities.effect.WaveEffect.class); classes.put("WrapEffect", mindustry.entities.effect.WrapEffect.class); classes.put("DrawPart", mindustry.entities.part.DrawPart.class); diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 04723af66f..9bdd7540fa 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -101,6 +101,10 @@ public class Weapon implements Cloneable{ public float velocityRnd = 0f; /** extra velocity that is added as a fraction */ public float extraVelocity = 0f; + /** fraction of lifetime that is random */ + public float lifeRnd = 0f; + /** extra lifetime that is added as a fraction */ + public float extraLife = 0f; /** The half-radius of the cone in which shooting will start. */ public float shootCone = 5f; /** Cone in which the weapon can rotate relative to its mount. */ @@ -117,8 +121,10 @@ public class Weapon implements Cloneable{ public boolean ignoreRotation = false; /** If true, this weapon cannot be used to attack targets. */ public boolean noAttack = false; - /** min velocity required for this weapon to shoot */ + /** min velocity required for this weapon to shoot. -1 to disable the limit. */ public float minShootVelocity = -1f; + /** max velocity at which this weapon to shoot. -1 to disable the limit. */ + public float maxShootVelocity = -1f; /** should the shoot effects follow the unit (effects need followParent set to true for this to work) */ public boolean parentizeEffects; /** internal value used for alternation - do not change! */ @@ -434,7 +440,7 @@ public class Weapon implements Cloneable{ !(bullet.killShooter && mount.totalShots > 0) && //if the bullet kills the shooter, you should only ever be able to shoot once (!alternate || wasFlipped == flipSprite) && mount.warmup >= minWarmup && //must be warmed up - velLen >= minShootVelocity && //check velocity requirements + velLen >= minShootVelocity && (maxShootVelocity == -1 || velLen <= maxShootVelocity) && //check velocity requirements (mount.reload <= 0.0001f || (alwaysContinuous && mount.bullet == null)) && //reload has to be 0, or it has to be an always-continuous weapon (alwaysShooting || Angles.within(rotate ? mount.rotation : unit.rotation + baseRotation, mount.targetRotation, shootCone)) //has to be within the cone ){ @@ -497,7 +503,8 @@ public class Weapon implements Cloneable{ bulletX = mountX + Angles.trnsx(weaponRotation, this.shootX + xOffset + xSpread, this.shootY + yOffset + ySpread), bulletY = mountY + Angles.trnsy(weaponRotation, this.shootX + xOffset + xSpread, this.shootY + yOffset + ySpread), shootAngle = bulletRotation(unit, mount, bulletX, bulletY) + angleOffset, - lifeScl = bullet.scaleLife ? Mathf.clamp(Mathf.dst(bulletX, bulletY, mount.aimX, mount.aimY) / bullet.range) : 1f, + baseLife = (1f - lifeRnd) + Mathf.random(lifeRnd) + extraLife, + lifeScl = bullet.scaleLife ? baseLife * Mathf.clamp(Mathf.dst(bulletX, bulletY, mount.aimX, mount.aimY) / bullet.range) : baseLife, angle = shootAngle + Mathf.range(inaccuracy + bullet.inaccuracy); Entityc shooter = unit.controller() instanceof MissileAI ai ? ai.shooter : unit; //Pass the missile's shooter down to its bullets diff --git a/core/src/mindustry/ui/dialogs/ContentInfoDialog.java b/core/src/mindustry/ui/dialogs/ContentInfoDialog.java index 061214ea1a..227a4a1461 100644 --- a/core/src/mindustry/ui/dialogs/ContentInfoDialog.java +++ b/core/src/mindustry/ui/dialogs/ContentInfoDialog.java @@ -38,8 +38,9 @@ public class ContentInfoDialog extends BaseDialog{ Table table = new Table(); table.margin(10); - //initialize stats if they haven't been yet - content.checkStats(); + //compute stats every time + var stats = content.computeStats(); + var statMap = stats.toMap(); table.table(title1 -> { title1.image(content.uiIcon).size(iconXLarge).scaling(Scaling.fit); @@ -58,7 +59,7 @@ public class ContentInfoDialog extends BaseDialog{ } if(content.description != null){ - var any = content.stats.toMap().size > 0; + var any = statMap.size > 0; if(any){ table.add("@category.purpose").color(Pal.accent).fillX().padTop(10); @@ -68,16 +69,14 @@ public class ContentInfoDialog extends BaseDialog{ table.add("[lightgray]" + UI.formatIcons(content.displayDescription())).wrap().fillX().padLeft(any ? 10 : 0).width(500f).padTop(any ? 0 : 10).left(); table.row(); - if(!content.stats.useCategories && any){ + if(!stats.useCategories && any){ table.add("@category.general").fillX().color(Pal.accent); table.row(); } } - Stats stats = content.stats; - - for(StatCat cat : stats.toMap().keys()){ - OrderedMap> map = stats.toMap().get(cat); + for(StatCat cat : statMap.keys()){ + var map = statMap.get(cat); if(map.size == 0) continue; diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index e99e2eb62d..a8f28384d2 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -164,6 +164,7 @@ public class CustomRulesDialog extends BaseDialog{ category("resourcesbuilding"); check("@rules.alloweditworldprocessors", b -> rules.allowEditWorldProcessors = b, () -> rules.allowEditWorldProcessors); check("@rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources); + check("@rules.corebuildandconfig", b -> rules.coreBuildAndConfig = b, () -> rules.coreBuildAndConfig); check("@rules.onlydepositcore", b -> rules.onlyDepositCore = b, () -> rules.onlyDepositCore); check("@rules.coreunloaders", b -> rules.allowCoreUnloaders = b, () -> rules.allowCoreUnloaders); check("@rules.derelictrepair", b -> rules.derelictRepair = b, () -> rules.derelictRepair); diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 28b2da26c1..51f20bcc24 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -1093,7 +1093,7 @@ public class HudFragment{ String text = obj.text(); if(text != null && !text.isEmpty()){ - if(!first) builder.append("\n[white]"); + if(!first) builder.append("\n\n[white]"); builder.append(UI.formatIcons(text)); first = false; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 5137aa1e85..7ed341aa52 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -636,6 +636,8 @@ public class Block extends UnlockableContent implements Senseable{ public void setStats(){ super.setStats(); + stats.useCategories = true; + stats.add(Stat.size, "@x@", size, size); if(synthetic()){ @@ -1463,8 +1465,6 @@ public class Block extends UnlockableContent implements Senseable{ setBars(); - stats.useCategories = true; - //TODO check for double power consumption if(!logicConfigurable){ diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 6724dcf7ba..ce5eb5a5f4 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -58,6 +58,12 @@ public class Turret extends ReloadTurret{ public float inaccuracy = 0f; /** Fraction of bullet velocity that is random. */ public float velocityRnd = 0f; + /** extra velocity that is added as a fraction */ + public float extraVelocity = 0f; + /** fraction of lifetime that is random */ + public float lifeRnd = 0f; + /** extra lifetime that is added as a fraction */ + public float extraLife = 0f; /** Fraction of lifetime that is added to bullets with lifeScale. */ public float scaleLifetimeOffset = 0f; /** Maximum angle difference in degrees at which turret will still try to shoot. */ @@ -785,11 +791,12 @@ public class Turret extends ReloadTurret{ bulletX = x + Angles.trnsx(rotation - 90, shootX + xOffset + xSpread, shootY + yOffset), bulletY = y + Angles.trnsy(rotation - 90, shootX + xOffset + xSpread, shootY + yOffset), shootAngle = rotation + angleOffset + Mathf.range(inaccuracy + type.inaccuracy); - - float lifeScl = type.scaleLife ? Mathf.clamp((1 + scaleLifetimeOffset) * Mathf.dst(bulletX, bulletY, targetPos.x, targetPos.y) / type.range, minRange() / type.range, range() / type.range) : 1f; + + float baseLife = (1f - lifeRnd) + Mathf.random(lifeRnd) + extraLife, + lifeScl = type.scaleLife ? Mathf.clamp((baseLife + scaleLifetimeOffset) * Mathf.dst(bulletX, bulletY, targetPos.x, targetPos.y) / type.range, minRange() / type.range, range() / type.range) : baseLife; //TODO aimX / aimY for multi shot turrets? - handleBullet(type.create(this, team, bulletX, bulletY, shootAngle, -1f, (1f - velocityRnd) + Mathf.random(velocityRnd), lifeScl, null, mover, targetPos.x, targetPos.y), xOffset, yOffset, shootAngle - rotation); + handleBullet(type.create(this, team, bulletX, bulletY, shootAngle, -1f, (1f - velocityRnd) + Mathf.random(velocityRnd) + extraVelocity, lifeScl, null, mover, targetPos.x, targetPos.y), xOffset, yOffset, shootAngle - rotation); (shootEffect == null ? type.shootEffect : shootEffect).at(bulletX, bulletY, rotation + angleOffset, type.hitColor); (smokeEffect == null ? type.smokeEffect : smokeEffect).at(bulletX, bulletY, rotation + angleOffset, type.hitColor); diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index bac97b8f6c..93b2c786c6 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -37,6 +37,7 @@ public class ItemBridge extends Block{ public float arrowSpacing = 4f, arrowOffset = 2f, arrowPeriod = 0.4f; public float arrowTimeScl = 6.2f; public float bridgeWidth = 6.5f; + public boolean noAcceptDisabled = false; //for autolink public @Nullable ItemBridgeBuild lastBuild; @@ -460,7 +461,7 @@ public class ItemBridge extends Block{ @Override public boolean acceptLiquid(Building source, Liquid liquid){ return - hasLiquids && team == source.team && + hasLiquids && team == source.team && (!noAcceptDisabled || enabled) && (liquids.current() == liquid || liquids.get(liquids.current()) < 0.2f) && checkAccept(source, world.tile(link)); } diff --git a/core/src/mindustry/world/blocks/logic/LogicDisplay.java b/core/src/mindustry/world/blocks/logic/LogicDisplay.java index 96feb13b11..3150c9a631 100644 --- a/core/src/mindustry/world/blocks/logic/LogicDisplay.java +++ b/core/src/mindustry/world/blocks/logic/LogicDisplay.java @@ -147,8 +147,9 @@ public class LogicDisplay extends Block{ } public void getBufferRegion(TextureRegion region){ - if(buffer != null){ - region.set(buffer.texture, 0, buffer.texture.height, buffer.texture.width, -buffer.texture.height); + if(rootDisplay.buffer != null){ + region.set(rootDisplay.buffer.texture, 0, rootDisplay.buffer.texture.height, + rootDisplay.buffer.texture.width, -rootDisplay.buffer.texture.height); } } @@ -194,7 +195,7 @@ public class LogicDisplay extends Block{ int id = packed >> 5; if(ctype == displayDrawType){ if(id != index && id < displays.size && id >= 0 && displays.get(id).buffer != null){ - displays.get(id).getBufferRegion(Tmp.tr1); + displays.get(id).rootDisplay.getBufferRegion(Tmp.tr1); Draw.rect(Tmp.tr1, x, y, p2, p2 / Tmp.tr1.ratio(), p3); } }else if(ctype < ContentType.all.length && Vars.content.getByID(ContentType.all[ctype], id) instanceof UnlockableContent u){ diff --git a/core/src/mindustry/world/blocks/logic/TileableLogicDisplay.java b/core/src/mindustry/world/blocks/logic/TileableLogicDisplay.java index bf67334753..712ce9b8ee 100644 --- a/core/src/mindustry/world/blocks/logic/TileableLogicDisplay.java +++ b/core/src/mindustry/world/blocks/logic/TileableLogicDisplay.java @@ -268,11 +268,11 @@ public class TileableLogicDisplay extends LogicDisplay{ @Override public void ensureBuffer() { - if(buffer == null){ - buffer = new FrameBuffer(32 * tilesWidth - 2 * frameSize, 32 * tilesHeight - 2 * frameSize); + if(rootDisplay.buffer == null){ + rootDisplay.buffer = new FrameBuffer(32 * tilesWidth - 2 * frameSize, 32 * tilesHeight - 2 * frameSize); //clear the buffer - some OSs leave garbage in it - buffer.begin(backgroundColor); - buffer.end(); + rootDisplay.buffer.begin(backgroundColor); + rootDisplay.buffer.end(); } } diff --git a/core/src/mindustry/world/blocks/power/NuclearReactor.java b/core/src/mindustry/world/blocks/power/NuclearReactor.java index 7ec3f4c5f8..7bbaaa58d7 100644 --- a/core/src/mindustry/world/blocks/power/NuclearReactor.java +++ b/core/src/mindustry/world/blocks/power/NuclearReactor.java @@ -90,6 +90,14 @@ public class NuclearReactor extends PowerGenerator{ if(hasItems){ stats.add(Stat.productionTime, itemDuration / 60f, StatUnit.seconds); } + if(heatOutput > 0f && (ui.planet.isShown() ? ui.planet.state.planet : state.isGame() ? state.getPlanet() : null) == Planets.erekir){ + stats.add(Stat.output, table -> { + //using StatUnit.localized() strips the icon + String unit = "[red]" + Iconc.waves + "[] " + Strings.fixed(heatOutput, 0) + " " + Core.bundle.get("unit.heatunitsperside"); + + table.add(Core.bundle.format("bar.upto", unit)); + }); + } } @Override diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 8f1737cbc1..bea06ba57f 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -171,7 +171,8 @@ public class CoreBlock extends StorageBlock{ @Override public boolean canBreak(Tile tile){ - return state.isEditor(); + //always keep at least 1 core to not lose the save + return state.isEditor() || (state.rules.coreBuildAndConfig && tile.block() instanceof CoreBlock && state.teams.cores(tile.team()).size > 1); } @Override @@ -183,8 +184,8 @@ public class CoreBlock extends StorageBlock{ @Override public boolean canPlaceOn(Tile tile, Team team, int rotation){ if(tile == null) return false; - //in the editor, you can place them anywhere for convenience - if(state.isEditor()) return true; + //in the editor or with gamerule, you can place them anywhere for convenience + if(state.isEditor() || state.rules.coreBuildAndConfig) return true; CoreBuild core = team.core(); @@ -283,6 +284,57 @@ public class CoreBlock extends StorageBlock{ return block.unloadable && state.rules.allowCoreUnloaders; } + @Override + public void buildConfiguration(Table table){ + if(!state.rules.coreBuildAndConfig) return; + + ButtonGroup group = new ButtonGroup<>(); + group.setMinCheckCount(0); + Table cont = new Table(); + cont.defaults().size(32f); + + int i = 0; + for(Team team : Team.baseTeams){ + ImageButton button = cont.button(Tex.whiteui, Styles.clearTogglei, 24f, () -> { + }).group(group).get(); + button.changed(() -> { + if(button.isChecked()){ + configure(team.id); + } + }); + button.getStyle().imageUpColor = team.color; + button.update(() -> button.setChecked(this.team == team)); + + if(i++ % 3 == 2){ + cont.row(); + } + } + + ScrollPane pane = new ScrollPane(cont, Styles.smallPane); + pane.setScrollingDisabled(true, false); + pane.setOverscroll(false, false); + table.add(pane).maxHeight(Scl.scl(40f * 2f)).left(); + table.row(); + } + + @Override + public void configured(@Nullable Unit builder, @Nullable Object value){ + super.configured(builder, value); + if(!state.rules.coreBuildAndConfig || !(value instanceof Integer)) return; + + Team next = Team.get((int)value); + if(builder != null && builder.isPlayer()){ + builder.team(next); + builder.getPlayer().team(next); + } + changeTeam(next); + } + + @Override + public boolean shouldHideConfigure(Player player){ + return !state.rules.coreBuildAndConfig; + } + @Override public void draw(){ //draw thrusters when just landed @@ -532,6 +584,7 @@ public class CoreBlock extends StorageBlock{ @Override public void created(){ super.created(); + block.configurable = state.rules.coreBuildAndConfig; Events.fire(new CoreChangeEvent(this)); } @@ -591,6 +644,7 @@ public class CoreBlock extends StorageBlock{ @Override public void updateTile(){ + block.configurable = state.rules.coreBuildAndConfig; iframes -= Time.delta; thrusterTime -= Time.delta/90f; } diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 451c0b909d..07b991c067 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -7,7 +7,6 @@ import arc.graphics.g2d.*; import arc.math.*; import arc.scene.*; import arc.scene.event.*; -import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.Tooltip.*; import arc.scene.ui.layout.*; @@ -655,13 +654,13 @@ public class StatValues{ bt.row(); } - if(blockName != null && t instanceof UnlockableContent){ - UnlockableContent content = (UnlockableContent) t; - tableInfo(bt, "block." + blockName + "." + content.name + ".info"); + if(blockName != null && t != null){ + tableInfo(bt, "block." + blockName + "." + t.name + ".info"); + bt.row(); } if(type.damage > 0 && (type.collides || type.splashDamage <= 0)){ - bt.add(Core.bundle.format("bullet.damage", type.damage) + (type.continuousDamage() > 0 ? + bt.add(Core.bundle.format("bullet.damage", type.damage) + (type.continuousDamage() > 0 ? "[lightgray] ~ [stat]" + Core.bundle.format("bullet.damage", type.continuousDamage()) + StatUnit.perSecond.localized() : "")); } @@ -732,7 +731,7 @@ public class StatValues{ Strings.autoFixed(b.timeDuration / 60f, 1)) + " " + StatUnit.seconds.localized()); } if(b.timeDuration > 0f && b.powerSclDecrease < 1f){ - sep(bt, Core.bundle.format("bullet.empslowdown", + sep(bt, Core.bundle.format("bullet.empslowdown", (b.powerSclDecrease < 1f ? "[negstat]" : "") + Strings.autoFixed((b.powerSclDecrease - 1f) * 100f, 2), Strings.autoFixed(b.timeDuration / 60f, 1)) + " " + StatUnit.seconds.localized()); } @@ -856,12 +855,10 @@ public class StatValues{ /** Adds an info table with an icon and description key from the bundle */ private static Cell tableInfo(Table table, String key){ + if(!Core.bundle.has(key)) return null; return table.table(t -> { - if(Core.bundle.has(key) && !Vars.headless){ - t.image(Icon.info.getRegion()).size(20).color(Color.lightGray).scaling(Scaling.fit).padRight(8).padLeft(12); - t.add("[lightgray]" + Core.bundle.get(key)); - t.row().add().height(10f).row(); - } + if(!Vars.headless) t.image(Icon.info.getRegion()).size(20).color(Color.lightGray).scaling(Scaling.fit).padRight(8).padLeft(12); + t.add("[lightgray]" + Core.bundle.get(key)).padBottom(10f); }); } diff --git a/core/src/mindustry/world/meta/Stats.java b/core/src/mindustry/world/meta/Stats.java index 5f7ce8f08e..8a1bd0d5da 100644 --- a/core/src/mindustry/world/meta/Stats.java +++ b/core/src/mindustry/world/meta/Stats.java @@ -15,7 +15,8 @@ import java.util.*; public class Stats{ /** Whether to display stats with categories. If false, categories are completely ignored during display. */ public boolean useCategories = false; - /** Whether these stats are initialized yet. */ + /** @deprecated does nothing, will be removed in v9 */ + @Deprecated public boolean intialized = false; /** Production time period in ticks. Used for crafters. **/ public float timePeriod = -1; diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt new file mode 100644 index 0000000000..5a22fc0619 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/full_description.txt @@ -0,0 +1,34 @@ +Mindustry é um jogo de construção de fábricas com elementos de defesa de torres e estratégia em tempo real. Crie cadeias de suprimento elaboradas para alimentar suas torres com munição, produza materiais para construir e fabricar unidades. Comande tropas para capturar bases inimigas e expanda sua produção. Defenda seu núcleo contra hordas de inimigos. + +

Recursos de Jogabilidade

+ +- Use blocos de produção para criar uma grande variedade de materiais avançados +- Defenda suas estruturas contra hordas de inimigos +- Jogue com seus amigos em partidas cooperativas multijogador entre plataformas ou desafie-os em confrontos PvP por equipes +- Distribua líquidos e enfrente desafios constantes, como incêndios ou ataques de unidades aéreas inimigas +- Tire o máximo da sua produção fornecendo refrigeramento e lubrificante opcionais +- Produza uma ampla variedade de unidades para gerenciar automaticamente sua base ou atacar bases inimigas +- Configure linhas de montagem para construir exércitos de unidades mecanizadas +- Use suas tropas para enfrentar bases inimigas totalmente funcionais + + +

Campanha

+ +- Conquiste os planetas Serpulo e Erekir avançando por 35 mapas feitos à mão e mais de 250 setores gerados proceduralmente +- Capture território e instale fábricas para produzir recursos enquanto joga em outros setores +- Defenda seus setores contra invasões periódicas +- Coordene a distribuição de recursos entre setores por meio de plataformas de lançamento +- Pesquise novos blocos para impulsionar o progresso +- Convide seus amigos para completar missões juntos +- Mais de 250 blocos tecnológicos para dominar +- Mais de 50 tipos diferentes de drones, mechs e naves + + +

Jogos Personalizados e Multijogador Entre Plataformas

+ +- Mais de 16 mapas integrados para jogos personalizados, além de duas campanhas completas +- Jogue em modo cooperativo, PvP ou sandbox +- Entre em um servidor dedicado público ou convide amigos para sua própria sessão privada +- Regras de jogo personalizáveis: altere custos de blocos, estatísticas de inimigos, itens iniciais, tempo das hordas e muito mais +- Editor de mapas totalmente funcional com suporte a scripts +- Navegador de mods integrado e suporte completo a modificações diff --git a/fastlane/metadata/android/pt-BR/short_description.txt b/fastlane/metadata/android/pt-BR/short_description.txt new file mode 100644 index 0000000000..e862d6a550 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/short_description.txt @@ -0,0 +1 @@ +Construa fábricas e defenda seu núcleo com estratégia em tempo real. diff --git a/fastlane/metadata/android/pt-BR/summary.txt b/fastlane/metadata/android/pt-BR/summary.txt new file mode 100644 index 0000000000..e862d6a550 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/summary.txt @@ -0,0 +1 @@ +Construa fábricas e defenda seu núcleo com estratégia em tempo real. diff --git a/fastlane/metadata/android/pt-BR/title.txt b/fastlane/metadata/android/pt-BR/title.txt new file mode 100644 index 0000000000..e2842b447a --- /dev/null +++ b/fastlane/metadata/android/pt-BR/title.txt @@ -0,0 +1 @@ +Mindustry diff --git a/fastlane/metadata/steam/brazilian/achievements.vdf b/fastlane/metadata/steam/brazilian/achievements.vdf new file mode 100644 index 0000000000..f3ca2a8b44 --- /dev/null +++ b/fastlane/metadata/steam/brazilian/achievements.vdf @@ -0,0 +1,183 @@ +"lang" +{ + "Language" "brazilian" + "Tokens" + { + "NEW_ACHIEVEMENT_20_1_NAME" "Sucateiro" + "NEW_ACHIEVEMENT_20_1_DESC" "Destrua 1000 unidades inimigas." + "NEW_ACHIEVEMENT_20_2_NAME" "Expurgação" + "NEW_ACHIEVEMENT_20_2_DESC" "Destrua 100.000 unidades inimigas." + "NEW_ACHIEVEMENT_20_5_NAME" "Transportes Sem Fim" + "NEW_ACHIEVEMENT_20_5_DESC" "Lance 100.000 itens no total." + "NEW_ACHIEVEMENT_20_6_NAME" "Conquistador" + "NEW_ACHIEVEMENT_20_6_DESC" "Vença 10 partidas no modo de ataque." + "NEW_ACHIEVEMENT_20_7_NAME" "Campeão" + "NEW_ACHIEVEMENT_20_7_DESC" "Vença 10 partidas PvP em multijogador." + "NEW_ACHIEVEMENT_20_8_NAME" "Blitz" + "NEW_ACHIEVEMENT_20_8_DESC" "Destrua o núcleo inimigo na zona de ataque em 5 hordas ou menos." + "NEW_ACHIEVEMENT_20_9_NAME" "Chuva de Núcleos" + "NEW_ACHIEVEMENT_20_9_DESC" "Lance seu núcleo 30 vezes." + "NEW_ACHIEVEMENT_20_10_NAME" "Persistente" + "NEW_ACHIEVEMENT_20_10_DESC" "Sobreviva 100 hordas." + "NEW_ACHIEVEMENT_20_12_NAME" "Pesquisador" + "NEW_ACHIEVEMENT_20_12_DESC" "Pesquise tudo." + "NEW_ACHIEVEMENT_20_14_NAME" "Sobrecarga" + "NEW_ACHIEVEMENT_20_14_DESC" "Atinja um inimigo coberto de água com eletricidade." + "NEW_ACHIEVEMENT_20_15_NAME" "Deflexão" + "NEW_ACHIEVEMENT_20_15_DESC" "Destrua uma unidade com sua própria bala refletida." + "NEW_ACHIEVEMENT_20_17_NAME" "Um Erro Grave" + "NEW_ACHIEVEMENT_20_17_DESC" "Pesquise o Roteador." + "NEW_ACHIEVEMENT_20_18_NAME" "Criação" + "NEW_ACHIEVEMENT_20_18_DESC" "Coloque 10.000 blocos." + "NEW_ACHIEVEMENT_20_19_NAME" "Arraso" + "NEW_ACHIEVEMENT_20_19_DESC" "Destrua 1.000 blocos inimigos." + "NEW_ACHIEVEMENT_20_20_NAME" "Um Desastre Espetacular" + "NEW_ACHIEVEMENT_20_20_DESC" "Faça com que um Reator de Tório sobreaqueça e exploda." + "NEW_ACHIEVEMENT_20_21_NAME" "Mapeador" + "NEW_ACHIEVEMENT_20_21_DESC" "Crie um novo mapa 10 vezes." + "NEW_ACHIEVEMENT_20_22_NAME" "Navegador" + "NEW_ACHIEVEMENT_20_22_DESC" "Faça o download de um mapa da Oficina." + "NEW_ACHIEVEMENT_20_23_NAME" "Criador" + "NEW_ACHIEVEMENT_20_23_DESC" "Publique um mapa na Oficina." + "NEW_ACHIEVEMENT_20_24_NAME" "Exterminador" + "NEW_ACHIEVEMENT_20_24_DESC" "Derrote um chefe." + "NEW_ACHIEVEMENT_20_29_NAME" "Material II" + "NEW_ACHIEVEMENT_20_29_DESC" "Desbloqueie Tório." + "NEW_ACHIEVEMENT_20_31_NAME" "Material I" + "NEW_ACHIEVEMENT_20_31_DESC" "Desbloqueie Titânio." + "NEW_ACHIEVEMENT_21_0_NAME" "Kamikaze" + "NEW_ACHIEVEMENT_21_0_DESC" "Encha qualquer unidade, exceto núcleos, com materiais explosivos e morra." + "NEW_ACHIEVEMENT_21_1_NAME" "Assim Começa" + "NEW_ACHIEVEMENT_21_1_DESC" "Construa uma fábrica de unidades terrestres." + "NEW_ACHIEVEMENT_21_2_NAME" "Ofensiva Direta" + "NEW_ACHIEVEMENT_21_2_DESC" "Ordene que qualquer unidade ataque um alvo." + "NEW_ACHIEVEMENT_21_3_NAME" "Enxame" + "NEW_ACHIEVEMENT_21_3_DESC" "Tenha 100 unidades ativas ao mesmo tempo." + "NEW_ACHIEVEMENT_21_4_NAME" "Rebanho" + "NEW_ACHIEVEMENT_21_4_DESC" "Tenha 10 drones Poly ativos ao mesmo tempo." + "NEW_ACHIEVEMENT_21_5_NAME" "Roboticista" + "NEW_ACHIEVEMENT_21_5_DESC" "Construa todos os tipos de unidades." + "NEW_ACHIEVEMENT_21_6_NAME" "Legiões" + "NEW_ACHIEVEMENT_21_6_DESC" "Construa 1000 unidades no total." + "NEW_ACHIEVEMENT_21_9_NAME" "Você Devia Ter Escutado" + "NEW_ACHIEVEMENT_21_9_DESC" "Morra na zona de exclusão do ponto de queda." + "NEW_ACHIEVEMENT_21_10_NAME" "Há Unidades Navais para Isso" + "NEW_ACHIEVEMENT_21_10_DESC" "Afogue." + "NEW_ACHIEVEMENT_21_11_NAME" "Colecionador" + "NEW_ACHIEVEMENT_21_11_DESC" "Encha o núcleo até a capacidade máxima com todos os tipos de materiais." + "NEW_ACHIEVEMENT_21_12_NAME" "Multidão" + "NEW_ACHIEVEMENT_21_12_DESC" "Hospede um servidor com 10 jogadores nele." + "NEW_ACHIEVEMENT_21_13_NAME" "Invulnerável" + "NEW_ACHIEVEMENT_21_13_DESC" "Construa o Meltdown, Spectre e Foreshadow." + "NEW_ACHIEVEMENT_21_14_NAME" "Decolagem" + "NEW_ACHIEVEMENT_21_14_DESC" "Use a Plataforma de Lançamento." + "NEW_ACHIEVEMENT_21_16_NAME" "Heresia" + "NEW_ACHIEVEMENT_21_16_DESC" "Construa dois roteadores próximos um do outro." + "NEW_ACHIEVEMENT_21_17_NAME" "Guardião Solitário" + "NEW_ACHIEVEMENT_21_17_DESC" "Sobreviva 10 hordas em qualquer zona sem colocar qualquer bloco." + "NEW_ACHIEVEMENT_21_18_NAME" "Incineração" + "NEW_ACHIEVEMENT_21_18_DESC" "Use Piratita em qualquer torreta." + "NEW_ACHIEVEMENT_21_19_NAME" "Eficiência" + "NEW_ACHIEVEMENT_21_19_DESC" "Refrigere uma torreta com água ou criofluido." + "NEW_ACHIEVEMENT_21_20_NAME" "Modo Clássico" + "NEW_ACHIEVEMENT_21_20_DESC" "Habilite pixelização." + "NEW_ACHIEVEMENT_21_21_NAME" "Estudioso" + "NEW_ACHIEVEMENT_21_21_DESC" "Abra a Wiki através do jogo." + "NEW_ACHIEVEMENT_21_22_NAME" "Vantagem Inicial" + "NEW_ACHIEVEMENT_21_22_DESC" "Lance-se em uma zona com 10.000 ou mais itens configurados." + "NEW_ACHIEVEMENT_21_23_NAME" "Ignição" + "NEW_ACHIEVEMENT_21_23_DESC" "Ligue um Reator de Impacto." + "NEW_ACHIEVEMENT_21_25_NAME" "A Espiral" + "NEW_ACHIEVEMENT_21_25_DESC" "Gira, gira sem parar..." + "NEW_ACHIEVEMENT_21_26_NAME" "Escalação" + "NEW_ACHIEVEMENT_21_26_DESC" "Construa uma unidade de Tier 5." + "NEW_ACHIEVEMENT_21_27_NAME" "Arquiteto" + "NEW_ACHIEVEMENT_21_27_DESC" "Crie 20 esquemas." + "NEW_ACHIEVEMENT_21_28_NAME" "Dominação Global" + "NEW_ACHIEVEMENT_21_28_DESC" "Capture todos os setores em Serpulo." + "NEW_ACHIEVEMENT_21_29_NAME" "Transporte Aéreo" + "NEW_ACHIEVEMENT_21_29_DESC" "Pegue uma unidade T5 em uma unidade de carga Oct." + "NEW_ACHIEVEMENT_21_30_NAME" "A Forma de Vida Suprema" + "NEW_ACHIEVEMENT_21_30_DESC" "Junte-se a eles." + "NEW_ACHIEVEMENT_21_31_NAME" "Produção I" + "NEW_ACHIEVEMENT_21_31_DESC" "Atinga uma taxa de produção total de 5.000 itens por minuto na campanha." + "NEW_ACHIEVEMENT_26_0_NAME" "Produção II" + "NEW_ACHIEVEMENT_26_0_DESC" "Atinga uma taxa de produção total de 50.000 itens por minuto na campanha." + "NEW_ACHIEVEMENT_26_1_NAME" "Vitória Assegurada" + "NEW_ACHIEVEMENT_26_1_DESC" "Capture um setor enquanto joga em outro." + "NEW_ACHIEVEMENT_26_2_NAME" "Pequeno Império" + "NEW_ACHIEVEMENT_26_2_DESC" "Controle 10 setores de uma vez." + "NEW_ACHIEVEMENT_26_3_NAME" "Designer" + "NEW_ACHIEVEMENT_26_3_DESC" "Crie 500 esquemas." + "NEW_ACHIEVEMENT_26_4_NAME" "Mestre da Distribuição" + "NEW_ACHIEVEMENT_26_4_DESC" "Use todos blocos de transporte (de um planeta) em um único mapa." + "NEW_ACHIEVEMENT_26_5_NAME" "Potência Máxima" + "NEW_ACHIEVEMENT_26_5_DESC" "Construa um Projetor de Sobrecarga." + "NEW_ACHIEVEMENT_26_6_NAME" "Remendo" + "NEW_ACHIEVEMENT_26_6_DESC" "Construa um Projetor de Reparo." + "NEW_ACHIEVEMENT_26_7_NAME" "Ineficiência" + "NEW_ACHIEVEMENT_26_7_DESC" "Construa um Extrator de Água sobre a água, em vez de usar uma bomba." + "NEW_ACHIEVEMENT_26_8_NAME" "Estoque" + "NEW_ACHIEVEMENT_26_8_DESC" "Colete um total de 10 milhões de itens na campanha." + "NEW_ACHIEVEMENT_26_9_NAME" "Contra Tudo e Contra Todos" + "NEW_ACHIEVEMENT_26_9_DESC" "Desfira o golpe final em uma unidade Eclipse com uma torreta Duo." + "NEW_ACHIEVEMENT_26_10_NAME" "Conclusão de Erekir" + "NEW_ACHIEVEMENT_26_10_DESC" "Capture o setor final em Erekir." + "NEW_ACHIEVEMENT_26_11_NAME" "Conclusão de Serpulo" + "NEW_ACHIEVEMENT_26_11_DESC" "Capture o setor final em Serpulo." + "NEW_ACHIEVEMENT_26_12_NAME" "Arsenal" + "NEW_ACHIEVEMENT_26_12_DESC" "Lance-se com um esquema de núcleo personalizado em Serpulo." + "NEW_ACHIEVEMENT_26_13_NAME" "Preparado ao Extremo" + "NEW_ACHIEVEMENT_26_13_DESC" "Aprimore o núcleo em Marco Zero para um Centro do Núcleo." + "NEW_ACHIEVEMENT_26_14_NAME" "Surto" + "NEW_ACHIEVEMENT_26_14_DESC" "Faça neoplasma se espalhar para qualquer bloco que contenha água." + "NEW_ACHIEVEMENT_26_15_NAME" "Quebradiço" + "NEW_ACHIEVEMENT_26_15_DESC" "Cause dano explosivo adicional a uma unidade com o efeito de status Congelamento." + "NEW_ACHIEVEMENT_26_16_NAME" "Maestria em Estruturas de Serpulo" + "NEW_ACHIEVEMENT_26_16_DESC" "Construa todos blocos disponíveis em Serpulo." + "NEW_ACHIEVEMENT_26_17_NAME" "Maestria em Estruturas de Erekir" + "NEW_ACHIEVEMENT_26_17_DESC" "Construa todos blocos disponíveis em Erekir." + "NEW_ACHIEVEMENT_26_18_NAME" "Defesas Rompidas" + "NEW_ACHIEVEMENT_26_18_DESC" "Quebre o escudo de um Projetor de Campo de Força inimigo." + "NEW_ACHIEVEMENT_26_19_NAME" "Onde Está o Manual?" + "NEW_ACHIEVEMENT_26_19_DESC" "Pesquise o microprocessador." + "NEW_ACHIEVEMENT_26_20_NAME" "Apagão" + "NEW_ACHIEVEMENT_26_20_DESC" "Atinga -10.000 de energia por segundo em uma rede." + "NEW_ACHIEVEMENT_26_21_NAME" "Pico de Energia" + "NEW_ACHIEVEMENT_26_21_DESC" "Atinga 100.000 de energia por segundo." + "NEW_ACHIEVEMENT_26_22_NAME" "Alta Capacidade" + "NEW_ACHIEVEMENT_26_22_DESC" "Tenha 1 milhão de energia armazenada em baterias em uma rede." + "NEW_ACHIEVEMENT_26_23_NAME" "Má Ideia" + "NEW_ACHIEVEMENT_26_23_DESC" "Insira composto explosivo em um gerador a combustão." + "NEW_ACHIEVEMENT_26_24_NAME" "Contaminação" + "NEW_ACHIEVEMENT_26_24_DESC" "Faça um Reator de Neoplasia explodir devido ao acúmulo de neoplasma." + "NEW_ACHIEVEMENT_26_25_NAME" "Modificado" + "NEW_ACHIEVEMENT_26_25_DESC" "Instale um mod." + "NEW_ACHIEVEMENT_26_26_NAME" "roteador" + "NEW_ACHIEVEMENT_26_26_DESC" "roteador" + "NEW_ACHIEVEMENT_26_27_NAME" "A Experiência Completa" + "NEW_ACHIEVEMENT_26_27_DESC" "Junte-se a um servidor da comunidade." + "NEW_ACHIEVEMENT_26_28_NAME" "Hackerman" + "NEW_ACHIEVEMENT_26_28_DESC" "Abra o console de scripts." + "NEW_ACHIEVEMENT_26_29_NAME" "Controle Direto" + "NEW_ACHIEVEMENT_26_29_DESC" "Comande manualmente uma torre." + "NEW_ACHIEVEMENT_26_30_NAME" "Em Campo Hostil" + "NEW_ACHIEVEMENT_26_30_DESC" "Ponha unidades dentro da zona proibida de construção do núcleo inimigo." + "NEW_ACHIEVEMENT_26_31_NAME" "Vingança" + "NEW_ACHIEVEMENT_26_31_DESC" "Destrua uma torreta Scatter usando uma unidade Flare." + "NEW_ACHIEVEMENT_29_0_NAME" "Em Voo" + "NEW_ACHIEVEMENT_29_0_DESC" "Use a função de impulso de uma unidade terrestre." + "NEW_ACHIEVEMENT_29_1_NAME" "Aerobarco" + "NEW_ACHIEVEMENT_29_1_DESC" "Use uma unidade Elude para atravessar um líquido." + "NEW_ACHIEVEMENT_29_2_NAME" "Lugar Certo, Hora Certa" + "NEW_ACHIEVEMENT_29_2_DESC" "Aumente a eficiência de uma estrutura ao colocá-la em terrenos específicos." + "NEW_ACHIEVEMENT_29_3_NAME" "Limpeza" + "NEW_ACHIEVEMENT_29_3_DESC" "Quebre 100 rochedos." + "NEW_ACHIEVEMENT_29_4_NAME" "A Faxina Global" + "NEW_ACHIEVEMENT_29_4_DESC" "Quebre 10.000 rochedos." + "NEW_ACHIEVEMENT_29_5_NAME" "Neutralizado" + "NEW_ACHIEVEMENT_29_5_DESC" "Use uma Torre de Onda de Choque para absorver projéteis inimigos." + "NEW_ACHIEVEMENT_29_6_NAME" "Infelizmente," + "NEW_ACHIEVEMENT_29_6_DESC" "Use o emoji :alphachan: no chat multijogador. Ou não, a escolha é sua." + } +} diff --git a/fastlane/metadata/steam/brazilian/description.txt b/fastlane/metadata/steam/brazilian/description.txt new file mode 100644 index 0000000000..88b75052ee --- /dev/null +++ b/fastlane/metadata/steam/brazilian/description.txt @@ -0,0 +1,62 @@ +Mindustry é um jogo de construção de fábricas com elementos de defesa de torres e estratégia em tempo real. Crie cadeias de suprimento elaboradas para alimentar suas torres com munição, produza materiais para construir e fabricar unidades. Comande tropas para capturar bases inimigas e expanda sua produção. Defenda seu núcleo contra hordas de inimigos. + +Jogue a campanha sozinho ou com seus amigos em modo cooperativo multijogador entre plataformas e desafie-os em partidas PvP por equipes. + +[img]{STEAM_APP_IMAGE}/extras/factory.gif[/img] + +[h2]Construção de Fábricas[/h2] + +[list] +[*] Crie cadeias de suprimento elaboradas com esteiras para alimentar suas torretas com munição e produzir materiais para construção +[*] Use blocos de produção para criar uma grande variedade de materiais avançados +[*] Distribua líquidos e enfrente desafios constantes, como surtos de fogo ou ataques de unidades aéreas inimigas +[*] Tire o máximo da sua produção fornecendo refrigeramento e lubrificante opcionais +[*] Produza uma ampla variedade de unidades para gerenciar automaticamente sua base ou atacar bases inimigas +[/list] + +[h2]Defesa de Torres[/h2] + +[list] +[*] Defenda suas estruturas contra hordas de inimigos +[*] Posicione estrategicamente suas torretas para destruí-los antes que alcancem o núcleo +[*] Abasteça suas torretas com munição, refrigeramento e energia +[*] Reforce suas defesas com escudos energizados, projetores de regeneração e outras construções de suporte +[/list] + +[img]{STEAM_APP_IMAGE}/extras/rts3.png[/img] + +[h2]Estratégia em Tempo Real[/h2] + +[list] +[*] Configure linhas de montagem para construir exércitos de unidades mecanizadas +[*] Use suas unidades para enfrentar bases inimigas totalmente funcionais +[*] Capture mais território para instalar novos núcleos e obter acesso a recursos adicionais para expansão +[/list] + +[h2]Campanha[/h2] + +[list] +[*] Jogue duas campanhas planetárias distintas +[*] Conquiste os planetas Serpulo e Erekir avançando por 35 mapas feitos à mão e mais de 250 setores gerados proceduralmente +[*] Capture território e instale fábricas para produzir recursos enquanto joga em outros setores +[*] Defenda seus setores contra invasões periódicas +[*] Coordene a distribuição de recursos entre setores por meio de plataformas de lançamento +[*] Pesquise novos blocos para impulsionar o progresso +[*] Convide seus amigos para completar missões juntos +[*] Mais de 250 blocos tecnológicos para dominar +[*] Mais de 50 tipos diferentes de drones, mechs e naves +[*] Mais de 80 conquistas para completar +[/list] + +[h2]Comunidade e Modding[/h2] + +[list] +[*] Use a Oficina Steam para navegar por mapas e esquemas criados pela comunidade +[*] Junte-se a servidores públicos para jogar com outros jogadores em diferentes plataformas +[*] Jogue em modo cooperativo, PvP ou sandbox +[*] Servidores da comunidade suportam plugins para mapas e modos de jogo personalizados +[*] Crie seu servidor dedicado público ou convide amigos para sua própria sessão privada +[*] Regras de jogo personalizáveis: altere custos de blocos, estatísticas de inimigos, itens iniciais, tempo das hordas e muito mais +[*] O editor de mapas integrado permite criar seus próprios mapas para jogar e compartilhar com a comunidade +[*] Explore mods feitos pela comunidade para adicionar ou remixar ainda mais conteúdo +[/list] diff --git a/fastlane/metadata/steam/brazilian/short-description.txt b/fastlane/metadata/steam/brazilian/short-description.txt new file mode 100644 index 0000000000..b17e5f4625 --- /dev/null +++ b/fastlane/metadata/steam/brazilian/short-description.txt @@ -0,0 +1 @@ +Um jogo de construção e gerenciamento de fábricas com liberdade total, misturando estratégia em tempo real e defesa de torres. diff --git a/gradle.properties b/gradle.properties index 09ba49ec6c..33f1c9f07f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,4 +26,4 @@ org.gradle.caching=true org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 android.enableR8.fullMode=false -archash=bf16a0099f +archash=5a9e602f75 diff --git a/server/src/mindustry/server/ServerControl.java b/server/src/mindustry/server/ServerControl.java index 6fadce6783..15664b7708 100644 --- a/server/src/mindustry/server/ServerControl.java +++ b/server/src/mindustry/server/ServerControl.java @@ -550,6 +550,7 @@ public class ServerControl implements ApplicationListener{ try{ world.loadMap(result, result.applyRules(lastMode)); state.rules = result.applyRules(preset); + Events.fire(new RulesLoadEvent(state.rules)); logic.play(); info("Map loaded."); @@ -1379,6 +1380,7 @@ public class ServerControl implements ApplicationListener{ run.run(); state.rules = state.map.applyRules(lastMode); + Events.fire(new RulesLoadEvent(state.rules)); logic.play(); reloader.end(); diff --git a/tests/src/test/java/PatcherTests.java b/tests/src/test/java/PatcherTests.java index 846dcb9e7a..c2c5bd281c 100644 --- a/tests/src/test/java/PatcherTests.java +++ b/tests/src/test/java/PatcherTests.java @@ -173,7 +173,6 @@ public class PatcherTests{ @Test void unitWeapons() throws Exception{ - UnitTypes.dagger.checkStats(); UnitTypes.dagger.stats.add(Stat.charge, 999); assertNotNull(UnitTypes.dagger.stats.toMap().get(StatCat.general).get(Stat.charge)); @@ -195,7 +194,7 @@ public class PatcherTests{ Vars.logic.reset(); - UnitTypes.dagger.checkStats(); + UnitTypes.dagger.computeStats(); assertNull(UnitTypes.dagger.stats.toMap().get(StatCat.general).get(Stat.charge)); }