diff --git a/android/build.gradle b/android/build.gradle index fdc7b4d271..a57048a4c6 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -7,7 +7,7 @@ buildscript{ } dependencies{ - classpath 'com.android.tools.build:gradle:7.0.1' + classpath 'com.android.tools.build:gradle:7.0.3' } } diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 49cc082c14..720abdcf90 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1775,6 +1775,7 @@ lenum.itemdrop = Drop an item. lenum.itemtake = Take an item from a building. lenum.paydrop = Drop current payload. lenum.paytake = Pick up payload at current location. +lenum.payenter = Enter/land on the payload block the unit is on. lenum.flag = Numeric unit flag. lenum.mine = Mine at a position. lenum.build = Build a structure. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index e88115e724..ae1b4061ea 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -23,7 +23,7 @@ gameover.pvp = Das[accent] {0}[] Team ist siegreich! gameover.waiting = [accent]Warte auf neue Karte... highscore = [accent]Neuer Highscore! copied = Kopiert. -indev.notready = Dieser Teil vom Spiel ist noch unfertig. +indev.notready = Dieser Teil vom Spiel ist noch nicht fertig. indev.campaign = [accent]Glückwunsch! Du hast das Ende der Kampagne erreicht![]\n\nMehr gibt es noch nicht. In einem zukünftigen Update wird interplanetarisches Reisen möglich werden. load.sound = Audio @@ -34,25 +34,25 @@ load.system = System load.mod = Mods load.scripts = Scripts -be.update = Ein neuer Bleeding Edge build ist verfügbar: +be.update = Ein neuer Bleeding-Edge-Build ist verfügbar: be.update.confirm = Herunterladen und neu starten? -be.updating = Aktualisieren... +be.updating = Aktualisiert... be.ignore = Ignorieren be.noupdates = Keine Aktualisierungen gefunden. be.check = Auf Aktualisierungen prüfen -mod.featured.dialog.title = Mod Browser +mod.featured.dialog.title = Mod-Browser mods.browser.selected = Ausgewählter Mod mods.browser.add = Installieren -mods.browser.reinstall = Neu Installieren -mods.github.open = Github -mods.browser.sortdate = Nach neusten sortieren +mods.browser.reinstall = Neu installieren +mods.github.open = GitHub-Repo +mods.browser.sortdate = Nach neuesten sortieren mods.browser.sortstars = Nach Sternen sortieren schematic = Entwurf schematic.add = Entwurf speichern... schematics = Entwürfe -schematic.replace = Ein anderer Entwurf hat bereits diesen Namen. Diesen ersetzen? +schematic.replace = Es gibt bereits einen Entwurf mit diesem Namen. Diesen ersetzen? schematic.exists = Es gibt schon einen Entwurf mit diesem Namen. schematic.import = Entwurf importieren... schematic.exportfile = Datei exportieren @@ -107,7 +107,7 @@ position = Position close = Schließen website = Website quit = Verlassen -save.quit = Speichern & Verlassen +save.quit = Speichern & verlassen maps = Karten maps.browse = Karten durchsuchen continue = Weiter @@ -138,7 +138,7 @@ mod.disabled = [scarlet]Deaktiviert mod.multiplayer.compatible = [gray]Mehrspieler-kompatibel mod.disable = Deaktivieren mod.content = Inhalt: -mod.delete.error = Unfähig Mod zu löschen. Datei könnte in Benutzung sein. +mod.delete.error = Mod konnte nicht gelöscht werden. Datei könnte in Benutzung sein. mod.requiresversion = [scarlet]Benötigt mindestens Version:[accent] {0} mod.outdated = [scarlet]Nicht mit V6 kompatibel (no minGameVersion: 105) mod.missingdependencies = [scarlet]Fehlende Abhängigkeiten: {0} @@ -151,9 +151,9 @@ mod.requiresrestart = Das Spiel wird jetzt beendet, um die Mod-Änderungen anzuw mod.reloadrequired = [scarlet]Neuladen benötigt mod.import = Mod importieren mod.import.file = Datei importieren -mod.import.github = GitHub-Mod importieren -mod.jarwarn = [scarlet]JAR Mods sind nicht sicher.[]\nInstalliere nur Mods von vertrauenswürdigen Quellen! -mod.item.remove = Dies ist Teil vom [accent] '{0}'[] Mod. Deaktiviere diesen Mod, um dies zu entfernen. +mod.import.github = Aus GitHub importieren +mod.jarwarn = [scarlet]JAR-Mods sind nicht sicher.[]\nInstalliere nur Mods von vertrauenswürdigen Quellen! +mod.item.remove = Dieses Item ist Teil vom [accent] '{0}'[] Mod. Deaktiviere diesen Mod, um dies zu entfernen. mod.remove.confirm = Dieser Mod wird gelöscht. mod.author = [lightgray]Autor:[] {0} mod.missing = Dieser Spielstand enthält Mods, welche nicht mehr vorhanden sind oder aktualisiert wurden. Spielstandfehler könnten passieren. Bist du dir sicher, dass du ihn laden möchtest?\n[lightgray]Mods:\n{0} @@ -327,7 +327,7 @@ enablebuilding = [scarlet][[{0}][] um zu bauen showui = Bedienflächen versteckt.\nDrücke [accent][[{0}][], um sie wieder anzuzeigen. wave = [accent]Welle {0} wave.cap = [accent]Welle {0}/{1} -wave.waiting = Welle in {0} +wave.waiting = Nächste Welle in {0} wave.waveInProgress = [lightgray]Welle im Gange waiting = Warten... waiting.players = Warte auf Spieler... @@ -354,7 +354,7 @@ map.publish.confirm = Willst du diese Karte wirklich veröffentlichen?\n\n[light workshop.menu = Wähle aus, was du mit diesem Objekt tun willst. workshop.info = Objekt-Info changelog = Änderungen (optional): -eula = Steam EULA +eula = Steam-EULA missing = Dieses Objekt wurde gelöscht oder verschoben.\n[lightgray]Die Workshop-Auflistung ist nun automatisch getrennt worden. publishing = [accent]Veröffentlichen... publish.confirm = Willst du das wirklich veröffentlichen?\n\n[lightgray]Vergewissere dich, dass du der Workshop-EULA zugestimmt hast, sonst tauchen deine Objekte nicht auf! @@ -1494,7 +1494,7 @@ block.laser-drill.description = Erlaubt es, durch Lasertechnologie noch schnelle block.blast-drill.description = Der ultimative Bohrer. Benötigt große Mengen an Strom. block.water-extractor.description = Extrahiert Wasser aus dem Boden. Verwende ihn, wenn es keinen See in der Nähe gibt. block.cultivator.description = Kultiviert winzige Mengen atmosphärischer Mikrosporen in Sporen-Pods. -block.cultivator.details = Zurückgewonnene Technologie. Wird benutzt, um große Mengen Biomasse so effizient wie möglich herzustellen. Wahrscheinlich der ehemaliger Inkubator der Sporen, die Serpulo heute bedecken. +block.cultivator.details = Zurückgewonnene Technologie. Wird benutzt, um große Mengen Biomasse so effizient wie möglich herzustellen. Wahrscheinlich der ehemalige Inkubator der Sporen, die Serpulo heute bedecken. block.oil-extractor.description = Verwendet große Mengen an Strom, Sand und Wasser, um Öl zu extrahieren. block.core-shard.description = Kern der Basis. Einmal zerstört, ist jeglicher Kontakt zum Sektor verloren. block.core-shard.details = Die erste Version. Kompakt. Selbstduplizierend. Mit Einmalraketen ausgestattet. Nicht für Interplanetarische Reisen geeignet. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index d4a4d09a1f..35e6d20c08 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -24,7 +24,7 @@ gameover.waiting = [accent]Esperando el próximo mapa... highscore = [accent]¡Nuevo récord de puntuación! copied = Copiado indev.notready = Esta parte del juego no esta lista aún. -indev.campaign = [accent]Has llegado al final de la campaña![]\n\nEsto es lo más lejos que puedes llegar por ahora.\nLos viajes interplanetarios se añadirán en futuras actualizaciones. +indev.campaign = [accent]¡Has llegado al final de la campaña![]\n\nEsto es lo más lejos que puedes llegar por ahora.\nLos viajes interplanetarios se añadirán en futuras actualizaciones. load.sound = Sonidos load.map = Mapas @@ -83,9 +83,7 @@ stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0} stat.built = Estructuras Construidas:[accent] {0} stat.destroyed = Estructuras Destruidas:[accent] {0} stat.deconstructed = Estructuras Desconstruidas:[accent] {0} -stat.delivered = Recursos Lanzados: stat.playtime = Tiempo jugado:[accent] {0} -stat.rank = Rango final: [accent]{0} globalitems = [accent]Recursos Totales map.delete = ¿Quieres borrar el mapa "[accent]{0}[]"? @@ -103,6 +101,7 @@ customgame = Crear Partida newgame = Nueva Partida none = none.found = [lightgray] +none.inmap = [lightgray] minimap = Minimapa position = Posición close = Cerrar @@ -123,7 +122,7 @@ committingchanges = Confirmando Cambios done = Hecho feature.unsupported = Tu dispositivo no es compatible con esta función. -mods.initfailed = [red]⚠[] La anterior ejecución de Mindustry encontró un fallo al inicializarse. Seguramente fue causado por algún mod erróneo.\n\nPara evitar un bucle de erroes al iniciar el juego, [red]se han desactivado todos los mods.[]\n\nPuedes desactivar ésta medida de seguridad desde [accent]Opciones->Juego->Desactivar mods si el juego encuentra un error al iniciarse.[]. +mods.initfailed = [red]⚠[] La anterior ejecución de Mindustry encontró un fallo al inicializarse. Seguramente fue causado por algún mod erróneo.\n\nPara evitar un bucle de erroes al iniciar el juego, [red]se han desactivado todos los mods.[] mods = Mods mods.none = [lightgray]¡No se encontraron Mods! mods.guide = Guía sobre Mods @@ -131,7 +130,7 @@ mods.report = Reportar Error mods.openfolder = Abrir carpeta de mods mods.viewcontent = Ver Contenido mods.reload = Recargar -mods.reloadexit = A continuación se cerrará el juego para recargar los mods. +mods.reloadexit = A continuación se cerrará el juego para cargar los mods. mod.installed = [[Instalado] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Activado @@ -154,8 +153,8 @@ mod.import = Importar mod mod.import.file = Importar archivo mod.import.github = Importar desde Github mod.jarwarn = [scarlet]Los mods JAR pueden no ser seguros.[]\n¡Asegúrate de haberlos descargado de una fuente en la que confíes! -mod.item.remove = Este objeto es parte del[accent] '{0}'[] mod. Para eliminarlo, desinstala ese mod. -mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar? +mod.item.remove = Este objeto es parte del mod[accent] '{0}'[]. Para eliminarlo, desinstala ese mod. +mod.remove.confirm = Este mod será eliminado. mod.author = [lightgray]Autor:[] {0} mod.missing = Esta partida guardada usa mods que has actualizado recientemente o que no tienes instalados. Se puede corromper la partida guardada. ¿Quieres cargarla a pesar de ello?\n[lightgray]Mods:\n{0} mod.preview.missing = Antes de publicar este mod en Steam Workshop, debes añadir una imagen de vista previa.\nAñade una imagen llamada[accent] preview.png[] en la carpeta del mod e inténtalo de nuevo. @@ -318,7 +317,6 @@ data.exported = Datos exportados. data.invalid = Esta data del juego no es valida. data.import.confirm = Importando los datos externos borrará[scarlet] todo[] tu progreso.\n[accent]Esto no se puede rehacer![]\n\nUna vez que los datos hayan sido importados, el juego saldrá automaticamente. quit.confirm = ¿Quieres salir de la partida? -quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo en[accent] Ajustes->Juego->Volver a hacer tutorial.[] loading = [accent]Cargando... downloading = [accent]Descargando... saving = [accent]Guardando... @@ -327,6 +325,7 @@ cancelbuilding = [accent][[{0}][] para limpiar el plan selectschematic = [accent][[{0}][] para seleccionar+copiar pausebuilding = [accent][[{0}][] para pausar la construcción resumebuilding = [scarlet][[{0}][] para reanudar la construcción +enablebuilding = [scarlet][[{0}][] para activar la construcción showui = Interfaz oculta.\nPulsa [accent][[{0}][] para volver a mostrar la Interfaz. wave = [accent]Oleada {0} wave.cap = [accent]Oleada {0}/{1} @@ -580,7 +579,8 @@ sectorlist.attacked = {0} Bajo ataque sectors.unexplored = [lightgray]No explorado sectors.resources = Recursos: sectors.production = Producción: -sectors.export = Exportado: +sectors.export = Exportaciones: +sectors.import = Importaciones: sectors.time = Tiempo: sectors.threat = Amenaza: sectors.wave = Oleada: @@ -598,7 +598,7 @@ sectors.go = Ir sector.curcapture = Sector Capturado sector.curlost = Sector Perdido sector.missingresources = [scarlet]Recursos Insuficientes -sector.attacked = Sector [accent]{0}[white] bajo ataque[]! +sector.attacked = ¡Sector [accent]{0}[white] bajo ataque[]! sector.lost = ¡Sector [accent]{0}[white] perdido[]! #nota: el espacio en blanco en la línea siguiente es intencionado sector.captured = ¡Sector [accent]{0}[white] capturado! @@ -653,17 +653,17 @@ sector.planetaryTerminal.description = El objetivo final.\n\nÉsta base costera status.burning.name = En llamas status.freezing.name = Congelado -status.wet.name = Húmedo +status.wet.name = Mojado status.muddy.name = Fangoso status.melting.name = Fundido status.sapped.name = Debilitado -status.electrified.name = Electrificado +status.electrified.name = Aturdido status.spore-slowed.name = Ralentizado status.tarred.name = Alquitranado -status.overdrive.name = Sobremarcha +status.overdrive.name = Acelerado status.overclock.name = Sobrecargado -status.shocked.name = Aturdido -status.blasted.name = Explotado +status.shocked.name = Electrificado +status.blasted.name = Explosión status.unmoving.name = Inmóvil status.boss.name = Guardián @@ -687,7 +687,7 @@ settings.clearcampaignsaves = Borrar datos de campaña settings.clearcampaignsaves.confirm = ¿Quieres borrar tus partidas guardadas en el modo campaña? paused = [accent] < Pausado > clear = Vaciar -banned = [scarlet]Baneado +banned = [scarlet]Vetado unsupported.environment = [scarlet]Entorno no válido yes = Sí no = No @@ -695,10 +695,10 @@ info.title = Información error.title = [crimson]Ha ocurrido un error. error.crashtitle = Ha ocurrido un error. unit.nobuild = [scarlet]Esta unidad no puede construir -lastaccessed = [lightgray]Último usado: {0} +lastaccessed = [lightgray]Último uso: {0} block.unknown = [lightgray]??? -stat.showinmap = +stat.showinmap = stat.description = Objetivo stat.input = Entrada stat.output = Salida @@ -749,9 +749,9 @@ stat.ammo = Munición stat.shieldhealth = Escudo stat.cooldowntime = Enfriamiento stat.explosiveness = Explosividad -stat.basedeflectchance = Probabilidad de desvío +stat.basedeflectchance = Probabilidad base de desvío stat.lightningchance = Probabilidad de descarga -stat.lightningdamage = Daño por rayo +stat.lightningdamage = Daño de descarga eléctrica stat.flammability = Inflamabilidad stat.radioactivity = Radioactividad stat.charge = Carga eléctrica @@ -762,10 +762,10 @@ stat.speed = Velocidad stat.buildspeed = Velocidad de construcción stat.minespeed = Velocidad de extracción stat.minetier = Nivel de taladro -stat.payloadcapacity = Capacidad de carga -stat.commandlimit = Límite de comando +stat.payloadcapacity = Capacidad de Almacenamiento +stat.commandlimit = Límite de escuadrón stat.abilities = Habilidades -stat.canboost = Potenciador +stat.canboost = Puede Volar stat.flying = Aéreo stat.ammouse = Usa Munición stat.damagemultiplier = Multiplicador de Daño @@ -776,10 +776,10 @@ stat.buildspeedmultiplier = Multiplicador de Velocidad de Construcción stat.reactive = Reacciona stat.healing = Sanador -ability.forcefield = Campo de Escudo -ability.repairfield = Campo de Reparación -ability.statusfield = {0} Campo de aceleración -ability.unitspawn = {0} Fábrica +ability.forcefield = Campo de Fuerza +ability.repairfield = Zona de Reparación +ability.statusfield = {0} Campo aceleración +ability.unitspawn = Fábrica de {0} ability.shieldregenfield = Regeneración de Armaduras ability.movelightning = Movimiento Relámpago ability.energyfield = Campo de Energía: [accent]{0}[] daño ~ [accent]{1}[] bloques / [accent]{2}[] objetivos @@ -791,15 +791,14 @@ bar.drillspeed = Velocidad del Taladro: {0}/s bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% bar.boost = Aceleración: +{0}% -bar.powerbalance = Energía: {0} -bar.powerstored = Almacenados: {0}/{1} +bar.powerbalance = Energía: {0}/s +bar.powerstored = Almacenado: {0}/{1} bar.poweramount = Energía: {0} bar.poweroutput = Salida de Energía: {0} bar.powerlines = Conexiones: {0}/{1} bar.items = Objetos: {0} bar.capacity = Capacidad: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = Líquido bar.heat = Calor bar.power = Energía @@ -808,7 +807,7 @@ bar.input = Entrada bar.output = Salida bar.strength = [stat]{0}[lightgray]x fuerza -units.processorcontrol = [lightgray]Controlado por Procesador +units.processorcontrol = [lightgray]Controlado desde procesador bullet.damage = [stat]{0}[lightgray] Daño bullet.splashdamage = [stat]{0}[lightgray] área daño ~[stat] {1}[lightgray] bloques @@ -860,24 +859,23 @@ setting.blockreplace.name = Sugerir bloques al construir setting.linear.name = Filtrado Lineal setting.hints.name = Consejos setting.logichints.name = Consejos sobre "Bloques Lógicos" -setting.flow.name = Mostrar tasa de flujo de recursos setting.backgroundpause.name = Pausar en segundo plano setting.buildautopause.name = Auto-pausar construcción setting.doubletapmine.name = Doble-Click para Extraer minerales setting.modcrashdisable.name = Desactivar Mods si se cuelga el juego -setting.animatedwater.name = Animación de Terreno +setting.animatedwater.name = Animaciones de Terreno setting.animatedshields.name = Animación de Escudos -setting.antialias.name = Antialias[lightgray] (necesita un reinicio)[] setting.playerindicators.name = Indicadores de Jugadores setting.indicators.name = Indicadores de Enemigos setting.autotarget.name = Auto-Apuntado setting.keyboard.name = Controles de Ratón+Teclado setting.touchscreen.name = Controles Táctiles setting.fpscap.name = FPS Maxímos -setting.fpscap.none = Nada +setting.fpscap.none = No setting.fpscap.text = {0} FPS -setting.uiscale.name = Escala de Interfaz[lightgray] (necesita reiniciar)[] -setting.swapdiagonal.name = Siempre Construir Diagonalmente +setting.uiscale.name = Escala de Interfaz +setting.uiscale.description = Es necesario reiniciar para aplicar los cambios. +setting.swapdiagonal.name = Permitir Siempre Construcción Diagonal setting.difficulty.training = Entrenamiento setting.difficulty.easy = Fácil setting.difficulty.normal = Normal @@ -899,11 +897,11 @@ setting.borderlesswindow.name.windows = Pantalla Completa sin Bordes setting.borderlesswindow.description = Un reinicio podría ser requerido para aplicar cambios. setting.fps.name = Mostrar FPS y Ping setting.smoothcamera.name = Movimiento de cámara suave -setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla) +setting.vsync.name = VSync setting.pixelate.name = Pixelar setting.minimap.name = Mostrar Minimapa -setting.coreitems.name = Mostrar Objetos en el nucleo (WIP) -setting.position.name = Mostrar indicadores de posición de jugadores. +setting.coreitems.name = Mostrar Objetos en el nucleo +setting.position.name = Mostrar indicadores de posición de jugadores setting.musicvol.name = Volumen de la Música setting.atmosphere.name = Mostrar Atmósfera del planeta setting.ambientvol.name = Volumen del Ambiente @@ -977,7 +975,7 @@ keybind.break_block.name = Destruir Bloque keybind.deselect.name = Deseleccionar keybind.pickupCargo.name = Recoger carga keybind.dropCargo.name = Soltar carga -keybind.command.name = Ordenar +keybind.command.name = Formar Escuadrón keybind.shoot.name = Disparar keybind.zoom.name = Zoom keybind.menu.name = Menú @@ -985,7 +983,7 @@ keybind.pause.name = Pausa keybind.pause_building.name = Pausar/Reanudar construcción keybind.minimap.name = Minimapa keybind.planet_map.name = Mapa del Planeta -keybind.research.name = Investigar +keybind.research.name = Menú Investigaciones keybind.block_info.name = Información del Bloque keybind.chat.name = Chat keybind.player_list.name = Lista de jugadores @@ -1318,7 +1316,6 @@ block.meltdown.name = Meltdown block.foreshadow.name = Foreshadow block.container.name = Contenedor block.launch-pad.name = Plataforma de Lanzamiento -block.launch-pad-large.name = Plataforma de Lanzamiento Grande block.segment.name = Segment block.command-center.name = Centro de Comando block.ground-factory.name = Fábrica Terrestre @@ -1333,17 +1330,17 @@ block.payload-router.name = Enrutador de Carga block.duct.name = Túnel block.duct-router.name = Túnel Enrutador block.duct-bridge.name = Túnel Puente -block.payload-propulsion-tower.name = Torre de Propulsión de Bloques -block.payload-void.name = Vacío de Bloques -block.payload-source.name = Fuente de Bloques +block.payload-propulsion-tower.name = Torre de Propulsión de Carga +block.payload-void.name = Vacío de carga +block.payload-source.name = Fuente de carga block.disassembler.name = Desensamblador block.silicon-crucible.name = Crisol de silicio block.overdrive-dome.name = Campo de Aceleración -#experimental, puede ser eliminado -block.block-forge.name = Forja de Bloques -block.block-loader.name = Cargador de Bloques -block.block-unloader.name = Descargador de Bloques block.interplanetary-accelerator.name = Acelerador Interplanetario +#experimental, puede ser eliminado +block.block-forge.name = Forja de Carga +block.block-loader.name = Cargador de Carga +block.block-unloader.name = Descargador de Carga block.switch.name = Interruptor block.micro-processor.name = Micro Processador @@ -1357,7 +1354,7 @@ block.memory-bank.name = Servidor de memoria team.blue.name = azul team.crux.name = crux team.sharded.name = sharded -team.derelict.name = delerict +team.derelict.name = abandonado team.green.name = verde team.purple.name = morado @@ -1378,6 +1375,7 @@ hint.placeTurret = Construye \uf861 [accent]Torretas[] para defender tu base de hint.breaking = Pulsa [accent]Clic-derecho[] y arrastra para destruir bloques. hint.breaking.mobile = Activa el botón con el \ue817 [accent]martillo[] situado abajo a la derecha y selecciona bloques para eliminarlos.\n\nMantén el dedo un segundo y arrastra para eliminar bloques directamente en esa selección. hint.blockInfo = Puedes visualizar información de un bloque seleccionándolo en el [accent]menú de construcción[], mediante el botón [accent][[?][] en la derecha. +hint.derelict = Las estructuras [accent]abandonadas[] son ruinas inservibles de antiguas bases no operativas.\n\nEstas estructuras pueden ser [accent]deconstruidas[] para obtener recursos. hint.research = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos. hint.research.mobile = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos. hint.unitControl = Mantén [accent][[L-ctrl][] y [accent]haz clic[] sobre unidades o torretas aliadas para controlarlas manualmente. @@ -1390,8 +1388,8 @@ hint.conveyorPathfind.mobile = Activa el\ue844 [accent]modo diagonal[] y arrastr hint.boost = Mantén [accent][[L-Shift][] para sobrevolar obstáculos con tu unidad actual.\n\nSólo algunas unidades terrestres disponen de estos propulsores. hint.command = Pulsa [accent][[G][] para comandar unidades aliadas cercanas. hint.command.mobile = [accent][[Toca dos veces][] tu unidad para comandar unidades aliadas cercanas. -hint.payloadPickup = Pulsa [accent][[[] para recoger bloques pequeños o unidades. -hint.payloadPickup.mobile = [accent]Mantén[] sobre un bloque pequeño o unidad para recogerlo. +hint.payloadPickup = Pulsa [accent][[[] para recoger bloques o unidades. +hint.payloadPickup.mobile = [accent]Mantén[] sobre un bloque o unidad para recogerlo. hint.payloadDrop = Pulsa [accent]][] para soltar la carga. hint.payloadDrop.mobile = [accent]Mantén[] sobre un lugar vacío para soltar la carga. hint.waveFire = Cuando las torretas [accent]Wave[] usen agua como munición, apagarán fuego e incendios cercanos automáticamente. @@ -1399,6 +1397,7 @@ hint.generator = Los \uf879[accent]Generadores de combustión[] querman carbón hint.guardian = Los [accent]Guardianes[] poseen una robusta armadura. Municiones débiles como el [accent]Cobre[] o el [accent]Plomo[] no son [scarlet]effectivas[] contra él.\n\nUsa torretas de mayor categoría o por ejemplo, munición de \uf835[accent]Grafito[] \uf861Duo/\uf859 en torretas Salvo para derribar a los Guardianes. hint.coreUpgrade = Los núcleos se pueden mejorar [accent]construyendo núcleos de mayor calidad encima[].\n\nColoca un  núcleo [accent]Foundation[] sobre el  núcleo [accent]Shard[]. Asegúrate de que no hay obstáculos cerca. hint.presetLaunch = Las zonas de aterrizaje de los [accent]sectores grises[], como el [accent]Bosque Congelado[], son accesibles desde cualquier lugar. No requieren capturar sectores adyacentes.\n\nLos [accent]sectores numerados[], como este, son [accent]opcionales[]. +hint.presetDifficulty = Este sector tiene un [scarlet]alto nivel de amenaza enemiga[].\n[accent]No es recomendable[] viajar a sectores como estos sin las tecnologías adecuadas y preparación. hint.coreIncinerate = Tras completar la capacidad máxima de almacenamiento en el núcleo para un tipo de objeto, cualquier recurso adicional de ese tipo que reciba el núcleo será [accent]incinerado[]. hint.coopCampaign = Sí estás jugando el modo [accent]campaña en multijugador[], los objetos producidos en el mapa actual también se enviarán [accent]a los sectores locales de cada jugador[].\n\nCualquier nueva investigación tecnológica realizada por el anfitrión también se desbloqueará para los demás jugadores. @@ -1429,138 +1428,139 @@ liquid.slag.description = Diferentes tipos de metales fundidos mezclados. Puede liquid.oil.description = Se utiliza en producción de materiales avanzados, y en munición incendiaria. liquid.cryofluid.description = Usado como refrigerante para reactores, torretas, y fábricas. -block.armored-conveyor.description = Mueve objetos. No acepta objetos si entran por los lados. +block.derelict =  [lightgray]Abandonado +block.armored-conveyor.description = Mueve objetos. No los acepta si entran por los lados. block.illuminator.description = Emite luz. -block.message.description = Almacena un mensaje. Puedes usarlo para comunicarte con aliados o dejar recordatorios. +block.message.description = Almacena un mensaje para comunicarte con aliados o dejar recordatorios. block.graphite-press.description = Comprime carbón en piezas de grafito puro. -block.multi-press.description = Una versión mejorada de la prensa de grafito. Utiliza agua y energía para procesar carbón rápida y eficientemente. -block.silicon-smelter.description = Reduce la arena con carbón puro. Produce silicio. -block.kiln.description = Funde arena y plomo en metacristal. Requiere cantidades pequeñas de energía para funcionar. +block.multi-press.description = Utiliza agua y energía para procesar carbón más eficientemente. +block.silicon-smelter.description = Refina silicio procesando arena y carbón. +block.kiln.description = Funde arena y plomo en metacristal. block.plastanium-compressor.description = Produce plastanio con petróleo y titanio. block.phase-weaver.description = Produce tejido de fase del torio radioactivo y altas cantidades de arena. block.alloy-smelter.description = Produce aleación eléctrica con titanio, plomo, silicio y cobre. -block.cryofluid-mixer.description = Combina agua y titanio en líquido criogénico, que es mucho más eficiente para enfriar. -block.blast-mixer.description = Usa esporas para transformar pirotita en un objeto menos inflamable pero más explosivo: el compuesto explosivo. -block.pyratite-mixer.description = Mezcla carbón, plomo y arena en pirotita altamente inflamable. -block.melter.description = Calienta chatarra a temperaturas muy altas para obtener magma. +block.cryofluid-mixer.description = Mezcla agua y polvo de titanio refinado para obtener líquido criogénico. +block.blast-mixer.description = Usa esporas para transformar pirotita en compuestos explosivos. +block.pyratite-mixer.description = Produce pirotita mezclando carbón, plomo y arena. +block.melter.description = Funde chatarra para producir magma. block.separator.description = Separa el magma en sus componentes minerales. -block.spore-press.description = Comprime esporas en petróleo. -block.pulverizer.description = Despedaza la chatarra en arena. Útil cuando no hay arena natural. -block.coal-centrifuge.description = Solidifica petróleo en piezas de carbón. -block.incinerator.description = Se deshace de cualquier líquido o material producido en exceso. -block.power-void.description = Elimina toda la energía que se le da. Solo disponible en el modo Libre. -block.power-source.description = Da energía infinita. Solo disponible en el modo Libre. +block.spore-press.description = Comprime vainas de esporas en petróleo. +block.pulverizer.description = Prensa chatarra hasta obtener arena. +block.coal-centrifuge.description = Solidifica petróleo en trozos de carbón. +block.incinerator.description = Vaporiza cualquier líquido o material que recive. +block.power-void.description = Elimina toda la energía que recive. Solo disponible en el modo Libre. +block.power-source.description = Genera energía infinita. Solo disponible en el modo Libre. block.item-source.description = Genera objetos de forma infinita. Solo disponible en el modo Libre. block.item-void.description = Destruye los objetos que entran en él. Solo disponible en el modo Libre. -block.liquid-source.description = Genera líquido infinito. Solo disponible en el modo Libre. +block.liquid-source.description = Genera cualquier líquido de forma infinita. Solo disponible en el modo Libre. block.liquid-void.description = Elimina los liquidos que entran en él. Solo disponible en el modo Libre. -block.payload-source.description = Genera salidas de cargas infinitas. Solo disponible en el modo Libre. -block.payload-void.description = Destruye cualquier carga. Solo disponible en el modo Libre. -block.copper-wall.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas. -block.copper-wall-large.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.\nOcupa múltiples casillas. -block.titanium-wall.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos. -block.titanium-wall-large.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos.\nOcupa múltiples casillas. -block.plastanium-wall.description = Un tipo especial de pared que absorbe los arcos eléctricos y bloquea las conexiones automáticas de los nodos de potencia. -block.plastanium-wall-large.description = Un tipo especial de pared que absorbe los arcos eléctricos y bloquea las conexiones automáticas de los nodos de potencia.\nOcupa múltiples casillas. -block.thorium-wall.description = Un bloque defensivo fuerte.\nBuena protección contra enemigos. -block.thorium-wall-large.description = Un bloque defensivo fuerte.\nBuena protección contra enemigos.\nOcupa múltiples casillas. -block.phase-wall.description = No es tan fuerte como un muro de torio pero hace rebotar las balas del enemigo si no son demasiado fuertes. -block.phase-wall-large.description = No es tan fuerte como un muro de torio pero rebota balas al enemigo si no son demasiado fuertes.\nOcupa múltiples casillas. -block.surge-wall.description = El bloque defensivo más fuerte.\nTiene una pequeña probabilidad de disparar rayos al atacante. -block.surge-wall-large.description = El bloque defensivo más fuerte.\nTiene una pequeña probabilidad de disparar rayos al atacante.\nOcupa múltiplies casillas. -block.door.description = Una puerta pequeña que puede ser abierta y cerrada tocándola.\nSi está abierta, los enemigos pueden moverse y disparar a través de ella. -block.door-large.description = Una puerta grande que puede ser abierta y cerrada tocándola.\nSi está abierta, los enemigos pueden moverse y disparar a través de ella.\nOcupa múltiples casillas. -block.mender.description = Repara bloques cercanos de forma constante. Mantiene a las defensas reparadas entre oleadas. Puede usar silicio opcionalmente para mejorar el alcance y la eficiencia. -block.mend-projector.description = Regenera edificios cercanos de forma constante. Ocupa multiples casillas. -block.overdrive-projector.description = Aumenta la velocidad de edificios cercanos como taladros y transportadores. -block.force-projector.description = Crea un área de fuerza hexagonal alrededor de él, protegiendo edificios y unidades dentro de él del daño de las balas hasta que se agota. \nRequiere de un suministro constante de energía para mantenerse activo. -block.shock-mine.description = Daña enemigos que pisan a mina. Casi invisible al enemigo. -block.conveyor.description = Bloque de transporte básico. Mueve objetos hacia adelante y los deposita automáticamente en torres o fábricas. Rotable. -block.titanium-conveyor.description = Bloque de transporte avanzado. Mueve objetos más rápido que los transportadores estándar. -block.plastanium-conveyor.description = Mueve objetos por lotes.\nAcepta objetos por detrás, y los descarga en tres direcciones hacia el frente, como un enrutador. -block.junction.description = Actúa como puente para dos transportadores que se cruzan. Útil en situaciones con dos diferentes transportadores transportando diferentes materiales a diferentes lugares. -block.bridge-conveyor.description = Bloque avanzado de transporte. Puede transportar objetos por encima hasta 3 casillas de cualquier terreno o construcción. -block.phase-conveyor.description = Bloque de transporte avanzado. Usa energía para transportar objetos a otro transportador de fase conectado a través de varias casillas. -block.sorter.description = Clasifica objetos. Si un objeto es igual al seleccionado, pasará al frente. Si no, el objeto saldrá por la izquierda y la derecha. -block.inverted-sorter.description = Procesa elementos como un clasificador estándar, pero en su lugar pasa elementos seleccionados a los lados. -block.router.description = Acepta objetos de una dirección luego los deja equitativamente en hasta 3 direcciones diferentes. Útil para dividir los materiales de una fuente de recursos a múltiples objetivos. \n\n[scarlet]Nunca usar como entrada de producción porque puede tapar con los objetos de salida.[] -block.router.details = Un mal necesario... No se recomienda usarlo junto a estructuras de producción ya que puede atascar una cadena de transporte. -block.distributor.description = Un enrutador avanzado que distribuye objetos equitativamente en hasta otras 7 direcciones. -block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. -block.underflow-gate.description = El opuesto de la compuerda de desborde. Solo dispensa hacia el frente si los lados están bloqueados. -block.mass-driver.description = El mejor bloque de transorte. Recoge varios objetos y los dispara a otro conductor de masa en un largo rango. Requiere energía para operar. -block.mechanical-pump.description = Una bomba de agua barata algo lenta, pero funciona sin energía. -block.rotary-pump.description = Una bomba algo mas avanzada. Bombea más líquido, pero requiere energía. -block.thermal-pump.description = La mejor bomba de líquidos. Utiliza energía. -block.conduit.description = Bloque de transporte de líquidos básico. Funciona como un transportador, pero con líquidos. Usado con bombas, extractores u otros conductos. -block.pulse-conduit.description = Bloque de transporte de líquidos avanzado. Transporta líquidos más rápidamente y almacena más que los conductos estándar. -block.plated-conduit.description = Mueve líquidos a la misma velocidad que los conductos de pulso, pero posee más armadura. No acepta líquidos de los lados por otra cosa que no sean conductos.\nGotea menos. -block.liquid-router.description = Acepta líquidos de una dirección y los deja en hasta 3 direcciones equitativamente. También puede almacenar cierta capacidad de líquido. Útil para dividir los líquidos de una fuente a varios objetivos. -block.liquid-tank.description = Almacena una gran cantidad de líquidos. Úsalo para crear almacenes cuando no hay una demanda constante de materiales o para asegurarse de enfriar bloques vitales. -block.liquid-junction.description = Actúa como un puente para dos conductos que se cruzan. Útil en situaciones en las que hay dos conductos con líquidos diferentes a diferentes lugares. -block.bridge-conduit.description = Bloque avanzado de transporte de líquidos. Permite transportar líquidos por encima de hasta 3 casillas de cualquier terreno o construcción. -block.phase-conduit.description = Bloque de transporte de líquidos avanzado. Usa energía para transportar líquidos a otro conducto de fase conectado a través de varias casillas. -block.power-node.description = Transmite energía a nodos conectados, conecta hasta diez fuentes de energía, edificios que usan energía o nodos. El nodo obtendrá o transmitirá energía de cualquier bloque adyacente. -block.power-node-large.description = Tiene un radio más amplio que el nodo de energía y conecta hasta diez fuentes de energía, edificios que usan energía o nodos. -block.surge-tower.description = Un nodo con un gran alcance, pero sólo dos conexiones disponibles. -block.diode.description = La energía de la batería puede fluir a través de este bloque en una sola dirección, pero solo si el otro lado tiene menos energía almacenada. -block.battery.description = Guarda energía cuando hay abundancia y proporciona energía cuando hay escasez de energía mientras la batería tenga energía. -block.battery-large.description = Almacena mucha más energía que una batería normal. -block.combustion-generator.description = Genera energía quemando materiales inflamables o petróleo. -block.thermal-generator.description = Genera una gran cantidad de energía con el magma. -block.steam-generator.description = Más eficiente que un generador de combustión, pero requiere agua adicional. -block.differential-generator.description = Genera grandes cantidades de energía. Utiliza la diferencia de temperatura entre el fluído criogenico y la quema de pirotita. -block.rtg-generator.description = Un generador radioisótropo termoeléctrico que no necesita enfriamiento, pero proporciona menos energía que un reactor de torio. -block.solar-panel.description = Proporciona una pequeña cantidad de energía. -block.solar-panel-large.description = Genera un mayor suministro de energía que un panel solar estándar, pero también es mucho más caro de construir. -block.thorium-reactor.description = Genera grandes cantidades de energía del torio altamente radioactivo. Necesita enfriamiento constante. Explotará violentamente si no se le aporta suficiente enfriamiento. -block.impact-reactor.description = Un generador avanzado, capaz de crear cantidades masivas de energía a máxima eficiencia. Requiere una cantidad significante de energía para impulsar el comienzo del proceso. -block.mechanical-drill.description = Un taladro barato. Cuando es colocado en casillas apropiadas, extrae objetos lentamente de forma indefinida. Solo es capaz de minar recursos básicos. -block.pneumatic-drill.description = Un taladro mejorado, es capaz de minar titanio. Más rápido que un taladro mécanico. -block.laser-drill.description = Su tecnología láser le permite obtener minerales incluso más rápido, pero requiere energía. Además, se puede obtener torio radioactivo con este taladro. -block.blast-drill.description = El mejor taladro. Requiere grandes cantidades de energía y refrigeración. -block.water-extractor.description = Extrae agua de la tierra. Úsalo cuando no haya lagos cercanos. -block.cultivator.description = Cultiva concentraciones de esporas en la atmosfera a vainas. +block.payload-source.description = Genera estructuras o unidades de forma infinita. Solo disponible en el modo Libre. +block.payload-void.description = Destruye cualquier bloque o unidad. Solo disponible en el modo Libre. +block.copper-wall.description = Protege estructuras de proyectiles enemigos. +block.copper-wall-large.description = Protege estructuras de proyectiles enemigos. +block.titanium-wall.description = Protege estructuras de proyectiles enemigos. +block.titanium-wall-large.description = Protege estructuras de proyectiles enemigos. +block.plastanium-wall.description = Protege estructuras de proyectiles enemigos. Absorbe láseres y rayos. Bloquea las conexiones automáticas de nodos de energía. +block.plastanium-wall-large.description = Protege estructuras de proyectiles enemigos. Absorbe láseres y rayos. Bloquea las conexiones automáticas de nodos de energía. +block.thorium-wall.description = Protege estructuras de proyectiles enemigos. +block.thorium-wall-large.description = Protege estructuras de proyectiles enemigos. +block.phase-wall.description = Protege estructuras de proyectiles enemigos. Puede reflejar la mayoría de proyectiles al imapctar. +block.phase-wall-large.description = Protege estructuras de proyectiles enemigos. Puede reflejar la mayoría de proyectiles al impactar. +block.surge-wall.description = Protege estructuras de proyectiles enemigos. Al contaco, libera arcos eléctricos periódicamente. +block.surge-wall-large.description = Protege estructuras de proyectiles enemigos. Al contaco, libera arcos eléctricos periódicamente. +block.door.description = Un muro que puede estar cerrado o abierto, permitiendo el paso a través de él. +block.door-large.description = Un muro que puede estar cerrado o abierto, permitiendo el paso a través de él. +block.mender.description = Repara estructuras cercanas constantemente. Puede usar silicio para potenciar su alcance y eficiencia. +block.mend-projector.description = Repara estructuras cercanas constantemente. Puede usar tejido de fase para potenciar su alcance y eficiencia. +block.overdrive-projector.description = Incrementa la velocidad de estructuras cercanas. Puede usar tejido de fase para potenciar su alcance y eficiencia. +block.force-projector.description = Crea un campo de fuerza hexagonal a su alrededor, protegiendo unidades y estructuras cercanas.\nSe sobrecalentará si absorbe demasiado daño, lo que se puede evitar utilizando refrigerante. Se puede usar tejido de fase para aumentar el escudo. +block.shock-mine.description = Libera arcos eléctricos al contacto con una unidad enemiga. +block.conveyor.description = Mueve objetos hacia adelante. +block.titanium-conveyor.description = Mueve objetos más rápido. +block.plastanium-conveyor.description = Mueve objetos por lotes.\nAcepta objetos por detrás, y los descarga en tres direcciones hacia el frente. Requiere múltiples puntos de entrada y salida para alcanzar su máxima eficacia. +block.junction.description = Actúa como puente para dos transportadores que se cruzan. +block.bridge-conveyor.description = Transporta objetos sobre cualquier terreno o estructura. +block.phase-conveyor.description = Transporta objetos instantáneamente sobre cualquier terreno o estructura. Tiene un mayor alcance que el puente básico, pero requiere energía. +block.sorter.description = Si el objeto entrante es igual al seleccionado, pasará al frente. Si no, los objetos saldrán por la izquierda y la derecha. +block.inverted-sorter.description = Similar a un clasificador normal, pero devuelve el elemento seleccionado a los lados. +block.router.description = Distribuye los objetos entrantes hasta en 3 direcciones de salida equitativamente. +block.router.details = Un mal necesario... No se recomienda usarlo junto a estructuras de producción ya que los objetos de salida pueden atascar la entrada del mismo bloque, e incluso toda la cadena de transporte. +block.distributor.description = Distribuye objetos equitativamente en hasta otras 7 direcciones. +block.overflow-gate.description = Saca los objetos entrantes por los lados cuando la cinta del frente está llena. +block.underflow-gate.description = El opuesto de la compuerta de desborde. Sólo devuelve objetos hacia el frente si los lados están bloqueados. +block.mass-driver.description = Estructura de transporte de largo alcance. Acumula varios objetos y los dispara a otro del mismo tipo. +block.mechanical-pump.description = Extrae y bombea líquidos. Funciona sin energía. +block.rotary-pump.description = Extrae y bombea líquidos. Requiere energía. +block.thermal-pump.description = Extrae y bombea líquidos. +block.conduit.description = Mueve líquidos hacia delante. Se usa junto con bombas y otros conductos. +block.pulse-conduit.description = Transporta líquidos rápidamente y almacena más que los conductos estándar. +block.plated-conduit.description = Transporta líquidos rápidamente pero no acepta líquidos por los lados. Resiste más ante fugas, por lo que no gotea. +block.liquid-router.description = Acepta líquidos de una dirección y los reparte en hasta 3 direcciones equitativamente. También puede almacenar cierta capacidad de líquido. +block.liquid-tank.description = Almacena una gran cantidad de líquidos. Lo devuelve en todas direcciones de salida válidas, como un enrutador de líquidos. +block.liquid-junction.description = Actúa como un puente para dos conductos que se cruzan. +block.bridge-conduit.description = Permite transportar líquidos sobre cualquier terreno o estructura. +block.phase-conduit.description = Tiene más alcance que un conducto puente normal, pero requiere energía. +block.power-node.description = Transmite energía a nodos conectados. Además, el nodo obtendrá o transmitirá energía de cualquier bloque adyacente. +block.power-node-large.description = Nodo de energía avanzado con un mayor alcance. +block.surge-tower.description = Un nodo de largo alcance, con sólo un par de conexiones disponibles. +block.diode.description = Mueve la energía entre baterías en una sola dirección, pero sólo si el otro lado tiene menos energía almacenada. +block.battery.description = Almacena energía cuando se genera en abundancia. Proporciona energía cuando escasea. +block.battery-large.description = Almacena energía cuando se genera en abundancia. Proporciona energía cuando escasea. Tiene más capacidad que una batería normal. +block.combustion-generator.description = Genera energía quemando materiales inflamables, como el carbón. +block.thermal-generator.description = Genera una gran cantidad de energía si se construye sobre zonas con altas temperaturas. +block.steam-generator.description = Genera energía quemando materiales inflamables y convirtiendo agua en vapor. +block.differential-generator.description = Genera grandes cantidades de energía. Utiliza la diferencia de temperatura entre el fluído criogenico y el quemado de pirotita. +block.rtg-generator.description = Usa el calor de generado en la descomposición de elementos radioactivos para producir energía lentamente. +block.solar-panel.description = Proporciona una pequeña cantidad de energía de los rayos solares. +block.solar-panel-large.description = Proporciona una pequeña cantidad de energía de los rayos solares. Es más eficiente que el panel solar estándar. +block.thorium-reactor.description = Genera grandes cantidades de energía procesando torio. Necesita enfriamiento constante. Explotará violentamente si no se refrigera constantemente. +block.impact-reactor.description = Capaz de crear cantidades masivas de energía a máxima eficiencia. Requiere una cantidad significante de energía para impulsar la producción. +block.mechanical-drill.description = Si se construye sobre vetas de minerales, extrae objetos lentamente de forma indefinida. Solo es capaz de minar recursos básicos. +block.pneumatic-drill.description = Un taladro mejorado, capaz de extraer titanio. Más rápido que un taladro mécanico. +block.laser-drill.description = Su tecnología láser le permite obtener minerales incluso más rápido, pero requiere energía. Puede extraer torio. +block.blast-drill.description = El mejor taladro. Requiere grandes cantidades de energía. +block.water-extractor.description = Extrae agua subterránea. Úsalo cuando no haya agua disponible en la superficie. +block.cultivator.description = Cultiva pequeñas concentraciones de esporas en la atmosfera en vainas de esporas. block.cultivator.details = Tecnología recuperada. Usada para producir cantidades masivas de biomasa. Parecido al primer incubador de esporas, que ahora cubren Serpulo. -block.oil-extractor.description = Usa grandes cantidades de energía, arena y agua para obtener petróleo. Úsalo cuando no hay fuentes directas de petróleo cerca. -block.core-shard.description = El núcleo de la base. Compacto. Puede auto-replicarse. Equipado con propulsores de uso único. -block.core-shard.details = La primera iteración. Si es destruido, todo contacto con el sector está perdido. No designado para viajes interplanetarios. +block.oil-extractor.description = Usa grandes cantidades de energía, arena y agua para obtener petróleo. +block.core-shard.description = El núcleo de la base. Si es destruido, todo contacto con el sector está perdido. +block.core-shard.details = La primera iteración. Compacto. Puede auto-replicarse. Equipado con propulsores de uso único. No designado para viajes interplanetarios. block.core-foundation.description = El núcleo de la base. Mejor blindado. Almacena más recursos que el modelo Shard. block.core-foundation.details = La segunda iteración. block.core-nucleus.description = El núcleo de la base. Extremadamente bien armado. Almacena cantidades masivas de recursos. block.core-nucleus.details = La tercera y última iteración. -block.vault.description = Almacena una gran cantidad de objetos. Úsalo para crear almacenes cuando no hay una demanda constante de materales. Un [lightgray] descargador[] puede usarse para obtener los objetos almacenados. -block.container.description = Almacena una pequeña cantidad de objetos. Úsalo para crear almacenes cuando no hay una demanda constante de materales. Un [lightgray] descargador[] puede usarse para obtener objetos del contenedor. -block.unloader.description = Descarga objetos de un contenedor, almacén o el núcleo a un transportador o directamente a un bloque adyacente. El tipo de objeto descargado puede ser cambiado tocando el descagador. -block.launch-pad.description = Lanza paquetes de recursos a los sectores seleccionados. -block.duo.description = Una torre pequeña y barata. Útil contra enemigos terrestres no demasiado fuertes. -block.scatter.description = Una torreta antiaérea de tamaño medio. Dispara proyectiles de plomo o chatarra a las unidades enemigas. +block.vault.description = Almacena una gran cantidad de objetos de cada tipo. Su contenido se puede recuperar con un descargador. +block.container.description = Almacena una pequeña cantidad de objetos de cada tipo. Su contenido se puede recuperar con un descargador. +block.unloader.description = Descarga el objeto seleccionado de bloques cercanos. +block.launch-pad.description = Lanza lotes de recursos a los sectores seleccionados. +block.duo.description = Dispara balas sencillas a los enemigos. +block.scatter.description = Dispara proyectiles de plomo, chatarra o metacristal a las unidades aéreas enemigas. block.scorch.description = Quema a cualquier enemigo terrestre cercano a él. Altamente efectivo a corto alcance. -block.hail.description = Una torre de artillería pequeña de largo alcance. -block.wave.description = Una torre de tamaño mediano. Dispara chorros de líquido a enemigos. Apaga el fuego en su rango de acción si recibe agua. -block.lancer.description = Una torre láser anti-terrestre de tamaño mediano. Dispara y carga poderosos rayos de energía. -block.arc.description = Una pequeña torre eléctrica de rango corto. Dispara arcos de electricidad a los enemigos. -block.swarmer.description = Una torre de tamaño mediano que dispara misiles. Ataca a aire y tierra. Dispara misiles teledirigidos. -block.salvo.description = Una versión más grande y avanzada de la torre dúo. Dispara ráfagas a enemigos terrestres y aéreos. -block.fuse.description = Una torre grande de energía de corto alcance. Dispara tres rayos perforantes a enemigos cercanos. -block.ripple.description = Una torre extramadamente poderosa. Dispara conjuntos de balas a los enemigos desde grandes distancias. -block.cyclone.description = Una torre grande anti-aérea y anti-terrestre. Dispara conjuntos fragmentados explosivos a enemigos cercanos. -block.spectre.description = Un cañon masivo de dos barriles. Dispara balas perforantes a objetivos de aire y tierra. -block.meltdown.description = Un cañon láser masivo. Carga y dispara un rayo láser continuo a enemigos cercanos. Requiere enfriamiento para operar. -block.foreshadow.description = Dispara un rayo de un solo objetivo a grandes distancias. +block.hail.description = Dispara proyectiles a enemigos terrestres sobre largas distancias. +block.wave.description = Dispara chorros de líquido a enemigos. Apaga fuego automáticamente si se lo suministra con agua. +block.lancer.description = Carga y dispara poderosos rayos de energía a objetivos terrestres. +block.arc.description = Dispara arcos de electricidad a objetivos terrestres. +block.swarmer.description = Dispara misiles autodirigidos a enemigos. +block.salvo.description = Dispara ráfagas de balas a enemigos. +block.fuse.description = Dispara tres rayos perforantes de corta distancia a enemigos cercanos. +block.ripple.description = Dispara cúmulos de balas a los enemigos desde grandes distancias. +block.cyclone.description = Dispara fragmentados explosivos a enemigos cercanos. +block.spectre.description = Dispara poderosas balas perforantes a objetivos aéreos y terrestres. +block.meltdown.description = Carga y dispara un poderoso rayo láser persistente. Necesita refrigerante para funcionar. +block.foreshadow.description = Dispara un rayo de objetivo único a larga distancia. Prioriza enemigos con mayor salud máxima. block.repair-point.description = Repara constantemente la unidad dañada más cercana dentro de su área. -block.segment.description = Daña y destruye proyectiles que se acerquen. No afecta a los láseres. +block.segment.description = Daña y destruye proyectiles enemigos. No afecta a láseres. block.parallax.description = Dispara un rayo tractor que atrae enemigos aéreos, dañándolos en el proceso. block.tsunami.description = Dispara poderosos torrentes de líquido a los enemigos. También apaga fuegos automáticamente si se lo abastece con agua. block.silicon-crucible.description = Refina silicio a partir de arena y carbón, usando pirotita como una fuente de calor adicional. Es más eficiente en lugares cálidos. block.disassembler.description = Separa magma en cantidades moderadas de componentes minerales exóticos con baja eficiencia. Puede producir Torio. -block.overdrive-dome.description = Incrementa la velocidad de estructuras cercanas. Requiere Tejido de Fase y Silicio para operar. -block.payload-conveyor.description = Mueve tanto grandes cargas, como unidades recién ensambladas de sus fábricas. +block.overdrive-dome.description = Incrementa la velocidad de estructuras cercanas. Requiere tejido de fase y silicio para operar. +block.payload-conveyor.description = Mueve grandes cargas, como estructuras o unidades recién ensambladas de sus fábricas. block.payload-router.description = Divide las cargas entrantes en 3 direcciones de salida. block.command-center.description = Controla el comportamiento de las unidades con diferentes órdenes. -block.ground-factory.description = Produce unidades terrestres. Las unidades resultantes se pueden usar directamente, o se pueden llevar a reconstructores para mejorarlas. -block.air-factory.description = Produce unidades aéreas. Las unidades resultantes se pueden usar directamente, o se pueden llevar a reconstructores para mejorarlas. -block.naval-factory.description = Produce unidades navales. Las unidades resultantes se pueden usar directamente, o se pueden llevar a reconstructores para mejorarlas. +block.ground-factory.description = Produce unidades terrestres. Las unidades resultantes se pueden usar directamente, o se pueden transportar a reconstructores para mejorarlas. +block.air-factory.description = Produce unidades aéreas. Las unidades resultantes se pueden usar directamente, o se pueden tranportar a reconstructores para mejorarlas. +block.naval-factory.description = Produce unidades navales. Las unidades resultantes se pueden usar directamente, o se pueden transportar a reconstructores para mejorarlas. block.additive-reconstructor.description = Mejora unidades a segunda categoría. block.multiplicative-reconstructor.description = Mejora unidades a tercera categoría. block.exponential-reconstructor.description = Mejora unidades a cuarta categoría. @@ -1571,48 +1571,50 @@ block.logic-processor.description = Ejecuta una secuencia de instrucciones lógi block.hyper-processor.description = Ejecuta una secuencia de instrucciones lógicas en bucle. Se puede usar para controlar unidades y estructuras. Es más rápido que el procesador lógico. block.memory-cell.description = Almacena información para los procesadores lógicos. block.memory-bank.description = Almacena información para los procesadores lógicos. Alta capacidad. -block.logic-display.description = Muestra gráficos arbitrarios desde un procesador lógico. -block.large-logic-display.description = También muestra gráficos arbitrarios desde un procesador lógico. +block.logic-display.description = Muestra gráficos arbitrarios dibujados desde un procesador lógico. +block.large-logic-display.description = También muestra gráficos arbitrarios dibujados desde un procesador lógico. block.interplanetary-accelerator.description = Una torre de proyección electromagnética masiva. Acelera núcleos hasta la velocidad necesaria para escapar del campo gravitatorio del planeta, habilitando el despliegue interplanetario. +block.repair-turret.description = Repara continuamente la unidad dañada más cercana dentro de su alcance. Opcionalmente acepta refrigerante. +block.payload-propulsion-tower.description = Estructura de transporte de cargas a largo alcance. Dispara cargas, tales como unidades o estructuras hasta otras torres de propulsión elazadas. unit.dagger.description = Dispara proyectiles básicos a enemigos cercanos. -unit.mace.description = Lanza torrentes de llamas a enemigos cercanos. +unit.mace.description = Ataca con llamaradas a enemigos cercanos. unit.fortress.description = Utiliza artillería de largo alcance contra enemigos terrestres. unit.scepter.description = Bombardea enemigos cercanos con proyectiles cargados. -unit.reign.description = Bombardea enemigos con proyectiles penetrantes. +unit.reign.description = Bombardea enemigos con proyectiles perforantes. unit.nova.description = Dispara rayos láser que dañan enemigos y reparan estructuras aliadas. Puede volar. unit.pulsar.description = Dispara arcos eléctricos que dañan enemigos y reparan estructuras aliadas. Puede volar. -unit.quasar.description = Dispara rayos láser perforantes que dañan enemigos, pueden provocar incendios y reparan estructuras aliadas. Puede volar. Posee escudo. -unit.vela.description = Dispara un rayo láser continuo que daña enemigos, provoca incendios y reparan estructuras aliadas. Puede volar. +unit.quasar.description = Dispara rayos láser perforantes que dañan enemigos y reparan estructuras aliadas. Puede volar. Posee escudo. +unit.vela.description = Dispara un rayo láser continuo que daña enemigos, provoca incendios y repara estructuras aliadas. Puede volar. unit.corvus.description = Dispara poderosos láseres que dañan enemigos, y reparan estructuras aliadas. Puede pisar sobre la mayoría de terreno. unit.crawler.description = Corre hacia enemigos y se autodestruye, provocando una gran explosión. unit.atrax.description = Dispara orbes de magma debilitantes a enemigos terrestres. Puede pisar sobre la mayoría de terreno. -unit.spiroct.description = Dispara láseres que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno. -unit.arkyid.description = Dispara grandes rayos láser que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno. +unit.spiroct.description = Dispara láseres que debilitan al enemigo, regenerándose en el proceso. Puede pisar sobre la mayoría de terreno. +unit.arkyid.description = Dispara grandes rayos láser que debilitan al enemigo, regenerándose en el proceso. Puede pisar sobre la mayoría de terreno. unit.toxopid.description = Dispara grandes fragmentos electrizados y láseres perforantes. Puede pisar sobre la mayoría de terreno. -unit.flare.description = Dispara proyectiles básicos a enemigos cercanos. -unit.horizon.description = Suelta fragmentos explosivos sobre objetivos terrestres. +unit.flare.description = Dispara proyectiles básicos a enemigos terrestres cercanos. +unit.horizon.description = Suelta conjuntos de bombas sobre objetivos terrestres. unit.zenith.description = Dispara ráfagas de misiles a enemigos cercanos. unit.antumbra.description = Dispara un enjambre de balas a cualquer enemigo cercano. unit.eclipse.description = Dispara dos láseres perforantes y un enjambre de balas de fragmentación. -unit.mono.description = Extrae cobre y plomo, y los deposita en el núcleo. +unit.mono.description = Extrae automáticamente cobre y plomo, y los deposita en el núcleo. unit.poly.description = Reconstruye automáticamente estructuras dañadas y asiste a otras unidades en la construcción. -unit.mega.description = Repara automáticamente estructuras dañadas. Puede llevar estructuras y unidades terrestres pequeñas. +unit.mega.description = Repara automáticamente estructuras dañadas. Puede cargar con estructuras y otras unidades terrestres pequeñas. unit.quad.description = Suelta grandes bombas sobre objetivos terrestres, repara estructuras aliadas y daña enemigos. Puede cargar con unidades terrestres de tamaño medio. unit.oct.description = Protege aliados con su escudo. Puede cargar con la mayoría de unidades terrestres. unit.risso.description = Dispara un enjambre de misiles y proyectiles a enemigos cercanos. -unit.minke.description = Dispara proyectiles variados a enemigos terrestres. -unit.bryde.description = Dispara misiles de largo alcance a enemigos. +unit.minke.description = Dispara proyectiles simples variados a enemigos terrestres. +unit.bryde.description = Dispara misiles de artillería de largo alcance a enemigos. unit.sei.description = Dispara un enjambre de misiles y proyectiles perforantes a enemigos. -unit.omura.description = Dispara rayos contínuos perforantes. Construye unidades Flare. +unit.omura.description = Dispara un rayo perforante de largo alcance. Construye unidades Flare. unit.alpha.description = Defiende el núcleo Shard de los enemigos. Construye estructuras. unit.beta.description = Defiende el núcleo Foundation de los enemigos. Construye estructuras. unit.gamma.description = Defiende el núcleo Nucleus de los enemigos. Construye estructuras. unit.retusa.description = Coloca minas de proximidad. Repara unidades aliadas. -unit.oxynoe.description = Dispara llamaradas de fuego que reparan estructuras aliadas y daña unidades enemigas cercanas. Destruye proyectiles enemigos cercanos con una torreta de defensa precisa. -unit.cyerce.description = Dispara misiles rastreadores en grupos. Repara unidades aliadas. -unit.aegires.description = Impacta a todas las unidades y estructuras enemigas que entran en su campo de energía y repara a las aliadas. -unit.navanax.description = Dispara proyectiles EMP explosivos que infligen un daño significativo a las redes eléctricas enemigas y reparan las estructuras aliadas. Derrite a los enemigos cercanos con 4 torretas láser autónomas. +unit.oxynoe.description = Dispara llamaradas de fuego que reparan estructuras aliadas. Su torreta de defensa móvil fija y destruye proyectiles enemigos automáticamente. +unit.cyerce.description = Dispara grupos de misiles rastreadores. Repara unidades aliadas. +unit.aegires.description = Electrifica a todas las unidades y estructuras que entran en su campo de energía. Repara todas las unidades aliadas. +unit.navanax.description = Dispara proyectiles EMP explosivos que infligen mucho daño a las redes eléctricas enemigas y reparan las estructuras aliadas. Funde a los enemigos cercanos con 4 torretas láser autónomas. lst.read = Lee un número desde una unidad de memoria conectada. lst.write = Escribe un número en una unidad de memoria conectada. @@ -1641,7 +1643,7 @@ lenum.type = El tipo de bloque/unidad\nEjemplo: "para cualquier enrutador", devo lenum.shoot = Dispara a una posición. lenum.shootp = Dispara a una unidad/bloque con predicción de velocidad. lenum.config = Configuración de bloque, por ejemplo: clasificador. -lenum.enabled = Si el bloque está activado o no. +lenum.enabled = Si el bloque está activado. laccess.color = Color del iluminador. laccess.controller = Controlador de unidad. Si se controla mediante un procesador, devuelve dicho procesador.\nSi está en formación, devuelve su líder.\nDe otra forma, devuelve la misma unidad. @@ -1764,4 +1766,4 @@ lenum.mine = Extrae minerales de una posición. lenum.build = Construye una estructura. lenum.getblock = Obtiene la construcción y su categoría en unas coordenadas específicas.\nLa unidad debe estar en el rango de su posición.\nLos bloques no-construcciones tendrán el tipo [accent]@solid[]. lenum.within = Comprueba si una unidad se encuentra cerca de una posición. -lenum.boost = Inicia/Detiene potenciación. +lenum.boost = Iniciar/Detener potenciación. diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index fab2e11f35..8d6e617e0b 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -379,6 +379,9 @@ editor.ingame = 인 게임 편집 editor.publish.workshop = 창작마당 게시 editor.newmap = 신규 맵 editor.center = 중앙 +editor.search = 맵 검색하기 +editor.filters = 맵 필터링하기 +editor.showAll = 기본 맵 보기 workshop = 창작마당 waves.title = 단계 waves.remove = 삭제 @@ -631,6 +634,8 @@ sector.biomassFacility.name = 유기물 합성 시설 sector.windsweptIslands.name = 폭풍의 격전지 sector.extractionOutpost.name = 자원 추출기지 sector.planetaryTerminal.name = 대행성 출격단지 +sector.coastline.name = 해안선 +sector.navalFortress.name = 해군 요새 sector.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지닌 장소입니다. 적의 위협 수준이 낮으며, 자원이 거의 없습니다.\n가능 한 많은 양의 구리와 납을 수집하세요.\n이제 출격할 시간입니다! sector.frozenForest.description = 이곳에서도, 산에 가까운 곳에 포자가 퍼졌습니다. 추운 온도에서도 포자들을 막을 수 없을 것 같습니다.\n화력 발전기를 건설하고, 멘더를 사용하는 방법을 배우세요. @@ -1128,6 +1133,7 @@ block.sand-boulder.name = 사암 바위 block.basalt-boulder.name = 현무암 바위 block.grass.name = 잔디 block.molten-slag.name = 용암 +block.pooled-cryofluid.name = 얼음물 block.space.name = 우주 block.salt.name = 소금 block.salt-wall.name = 소금 벽 @@ -1608,7 +1614,7 @@ unit.omura.description = 적에게 장거리 관통 레일건을 발사합니다 unit.alpha.description = 적으로부터 코어: 조각을 방어합니다. 구조물을 짓습니다. unit.beta.description = 적으로부터 코어: 기반을 방어합니다. 구조물을 짓습니다. unit.gamma.description = 적으로부터 코어: 핵심을 방어합니다. 구조물을 짓습니다. -unit.retusa.description = 근접 시한지뢰를 설치합니다. 아군 유닛을 수리할 수 있습니다. +unit.retusa.description = 주변 적에게 유도 어뢰를 발사합니다. 아군 유닛을 수리할 수 있습니다. unit.oxynoe.description = 주변 적에게 블록을 수리하는 화염을 발사합니다. 주변 적 탄환을 요격 포탑으로 요격할 수 있습니다. unit.cyerce.description = 주변 적에게 유도 집속 미사일을 발사합니다. 아군 유닛을 수리할 수 있습니다. unit.aegires.description = 애너지 필드 안의 모든 적 유닛과 블록을 감전시킵니다. 아군에겐 전격으로 수리합니다. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index e69c27cd19..efc43e7f74 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -587,6 +587,7 @@ sectors.select = Выбор sectors.nonelaunch = [lightgray]нет (солнце) sectors.rename = Переименовать сектор sectors.enemybase = [scarlet]Вражеская база +sectors.import = Импорт: sectors.vulnerable = [scarlet]Уязвим sectors.underattack = [scarlet]Атакован! [accent]{0}% повреждений sectors.survives = [accent]Продержится {0} волн(ы) @@ -1021,6 +1022,7 @@ rules.blockdamagemultiplier = Множитель урона блоков rules.unitbuildspeedmultiplier = Множитель скорости производства боев. ед. rules.aitier = Уровень ИИ rules.unithealthmultiplier = Множитель прочности боев. ед. +rules.aitier = Уровень ИИ rules.unitdamagemultiplier = Множитель урона боев. ед. rules.unitcapvariable = Ядра увеличивают лимит единиц rules.unitcap = Начальный лимит единиц @@ -1045,6 +1047,8 @@ rules.enemyteam = Команда Врагов rules.playerteam = Команда Игрока rules.explosions = Урон от взрывов блоков/единиц rules.ambientlight = Окружающий свет +rules.enemyteam = Команда Врагов +rules.playerteam = Команда Игрока rules.weather = Погода rules.weather.frequency = Периодичность: rules.weather.always = Всегда diff --git a/core/assets/bundles/bundle_sr.properties b/core/assets/bundles/bundle_sr.properties index 64075538f1..f4a885ec4f 100644 --- a/core/assets/bundles/bundle_sr.properties +++ b/core/assets/bundles/bundle_sr.properties @@ -1229,78 +1229,78 @@ block.scatter.name = Flak block.hail.name = Grad block.lancer.name = Koplje block.conveyor.name = Pokretna traka -block.titanium-conveyor.name = Titanium Conveyor -block.plastanium-conveyor.name = Plastanium Conveyor -block.armored-conveyor.name = Armored Conveyor -block.junction.name = Junction -block.router.name = Router -block.distributor.name = Distributor +block.titanium-conveyor.name = Titanijumska traka +block.plastanium-conveyor.name = Plastanijumska traka +block.armored-conveyor.name = Oklopna traka +block.junction.name = Raskršće +block.router.name = Ruter +block.distributor.name = Distributer block.sorter.name = Sorter -block.inverted-sorter.name = Inverted Sorter -block.message.name = Message -block.illuminator.name = Illuminator -block.overflow-gate.name = Overflow Gate -block.underflow-gate.name = Underflow Gate -block.silicon-smelter.name = Silicon Smelter -block.phase-weaver.name = Phase Weaver -block.pulverizer.name = Pulverizer -block.cryofluid-mixer.name = Cryofluid Mixer -block.melter.name = Melter -block.incinerator.name = Incinerator -block.spore-press.name = Spore Press -block.separator.name = Separator -block.coal-centrifuge.name = Coal Centrifuge -block.power-node.name = Power Node -block.power-node-large.name = Large Power Node -block.surge-tower.name = Surge Tower -block.diode.name = Battery Diode -block.battery.name = Battery -block.battery-large.name = Large Battery -block.combustion-generator.name = Combustion Generator -block.steam-generator.name = Steam Generator -block.differential-generator.name = Differential Generator -block.impact-reactor.name = Impact Reactor -block.mechanical-drill.name = Mechanical Drill -block.pneumatic-drill.name = Pneumatic Drill -block.laser-drill.name = Laser Drill -block.water-extractor.name = Water Extractor -block.cultivator.name = Cultivator -block.conduit.name = Conduit -block.mechanical-pump.name = Mechanical Pump -block.item-source.name = Item Source -block.item-void.name = Item Void -block.liquid-source.name = Liquid Source -block.liquid-void.name = Liquid Void -block.power-void.name = Power Void -block.power-source.name = Power Source -block.unloader.name = Unloader -block.vault.name = Vault +block.inverted-sorter.name = Naopaki sorter +block.message.name = Poruka +block.illuminator.name = Svetlo +block.overflow-gate.name = Prelivna kapija +block.underflow-gate.name = Podlivna kapija +block.silicon-smelter.name = Silicijumska pećnica +block.phase-weaver.name = Fazni razboj +block.pulverizer.name = Usitnjavač +block.cryofluid-mixer.name = Mešalica rashladne tečnosti +block.melter.name = Topionica +block.incinerator.name = Spaljivač +block.spore-press.name = Kompresor spora +block.separator.name = Razdvajač +block.coal-centrifuge.name = Centrifuga za ugajl +block.power-node.name = Strujni čvor +block.power-node-large.name = Veliki strujni čvor +block.surge-tower.name = Impulsni toranj +block.diode.name = Baterijska dioda +block.battery.name = Baterija +block.battery-large.name = Velika baterija +block.combustion-generator.name = Sagorevački generator +block.steam-generator.name = Parna turbina +block.differential-generator.name = Diferencijalni generator +block.impact-reactor.name = Udarni reaktor +block.mechanical-drill.name = Mehanička bušilica +block.pneumatic-drill.name = Pneumatska bušilica +block.laser-drill.name = Laserka bušilica +block.water-extractor.name = Hidrofor +block.cultivator.name = Kultivator +block.conduit.name = Cev +block.mechanical-pump.name = Mehanička pumpa +block.item-source.name = Izvor resursa +block.item-void.name = Brisač resursa +block.liquid-source.name = Izvor tečnosti +block.liquid-void.name = Brisač tečnosti +block.power-void.name = Brisač struje +block.power-source.name = Izvor strujue +block.unloader.name = Istovarivač +block.vault.name = Trezor block.wave.name = Talas block.tsunami.name = Cunami block.swarmer.name = Roj block.salvo.name = Salvo block.ripple.name = Impuls -block.phase-conveyor.name = Phase Conveyor -block.bridge-conveyor.name = Bridge Conveyor -block.plastanium-compressor.name = Plastanium Compressor -block.pyratite-mixer.name = Pyratite Mixer -block.blast-mixer.name = Blast Mixer -block.solar-panel.name = Solar Panel -block.solar-panel-large.name = Large Solar Panel -block.oil-extractor.name = Oil Extractor -block.repair-point.name = Repair Point -block.repair-turret.name = Repair Turret -block.pulse-conduit.name = Pulse Conduit -block.plated-conduit.name = Plated Conduit -block.phase-conduit.name = Phase Conduit -block.liquid-router.name = Liquid Router -block.liquid-tank.name = Liquid Tank -block.liquid-junction.name = Liquid Junction -block.bridge-conduit.name = Bridge Conduit -block.rotary-pump.name = Rotary Pump +block.phase-conveyor.name = Fazna traka +block.bridge-conveyor.name = Premostna traka +block.plastanium-compressor.name = Kompresor plastanijuma +block.pyratite-mixer.name = Mešalica piratita +block.blast-mixer.name = Mešalica eksploziva +block.solar-panel.name = Solarni panel +block.solar-panel-large.name = Veliki solarni panel +block.oil-extractor.name = Naftna bušotina +block.repair-point.name = Popravna tačka +block.repair-turret.name = Popravni top +block.pulse-conduit.name = Pulsna cev +block.plated-conduit.name = Oklopna cev +block.phase-conduit.name = Fazna cev +block.liquid-router.name = Ruter tečnosti +block.liquid-tank.name = Rezervoar +block.liquid-junction.name = Raskršće tečnosti +block.bridge-conduit.name = Premostna cev +block.rotary-pump.name = Obrtna pumpa block.thorium-reactor.name = Nuklearni reaktor block.mass-driver.name = Akcelerator -block.blast-drill.name = Vazdušna pumpa +block.blast-drill.name = Vazdušna bušilica block.thermal-pump.name = Termalna pumpa block.thermal-generator.name = Termalni generator block.alloy-smelter.name = Topionica impulsne legure @@ -1321,39 +1321,39 @@ block.foreshadow.name = Predznak block.container.name = Kontejner block.launch-pad.name = Launch Pad block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Payload Conveyor -block.payload-router.name = Payload Router -block.duct.name = Duct -block.duct-router.name = Duct Router -block.duct-bridge.name = Duct Bridge -block.payload-propulsion-tower.name = Payload Propulsion Tower -block.payload-void.name = Payload Void -block.payload-source.name = Payload Source -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome -block.interplanetary-accelerator.name = Interplanetary Accelerator +block.command-center.name = Komandni toranj +block.ground-factory.name = Zemna fabrika +block.air-factory.name = Vazdučna fabrika +block.naval-factory.name = Mornarička fabrika +block.additive-reconstructor.name = Dodatni rekonstruktor +block.multiplicative-reconstructor.name = Multiplikativni rekonstruktor +block.exponential-reconstructor.name = Eksponencijalni rekonstruktor +block.tetrative-reconstructor.name = Tetrativni rekonstruktor +block.payload-conveyor.name = Tovarna traka +block.payload-router.name = Tovarni ruter +block.duct.name = Kanal +block.duct-router.name = Kanalski ruter +block.duct-bridge.name = Kanalski most +block.payload-propulsion-tower.name = Tovani akcelerator +block.payload-void.name = Brisač tovara +block.payload-source.name = Izvor tovara +block.disassembler.name = Rastavljač +block.silicon-crucible.name = Silicijumska topionica +block.overdrive-dome.name = Ubrzavna kupola +block.interplanetary-accelerator.name = Interplanetarni akcelerator #experimental, may be removed -block.block-forge.name = Block Forge -block.block-loader.name = Block Loader -block.block-unloader.name = Block Unloader +block.block-forge.name = Kovnica blokova +block.block-loader.name = Utovarivač blokova +block.block-unloader.name = Istovarivač blokova -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell -block.memory-bank.name = Memory Bank +block.switch.name = Prekidač +block.micro-processor.name = Mikro procesor +block.logic-processor.name = Logički procesor +block.hyper-processor.name = Hiper procesor +block.logic-display.name = Logički displej +block.large-logic-display.name = Veliki logički displej +block.memory-cell.name = Memorijska ćelija +block.memory-bank.name = Memorijska banka team.blue.name = plavi team.crux.name = kruks diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index 0d5041dd93..de447c3a59 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -13,6 +13,7 @@ import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.world.*; +import mindustry.world.blocks.environment.*; import mindustry.world.blocks.storage.*; import mindustry.world.meta.*; @@ -40,7 +41,7 @@ public class Pathfinder implements Runnable{ public static final Seq costTypes = Seq.with( //ground - (team, tile) -> (PathTile.team(tile) == team.id || PathTile.team(tile) == 0) && PathTile.solid(tile) ? impassable : 1 + + (team, tile) -> (PathTile.allDeep(tile) || (PathTile.team(tile) == team.id || PathTile.team(tile) == 0) && PathTile.solid(tile)) ? impassable : 1 + PathTile.health(tile) * 5 + (PathTile.nearSolid(tile) ? 2 : 0) + (PathTile.nearLiquid(tile) ? 6 : 0) + @@ -109,14 +110,16 @@ public class Pathfinder implements Runnable{ /** Packs a tile into its internal representation. */ private int packTile(Tile tile){ - boolean nearLiquid = false, nearSolid = false, nearGround = false, solid = tile.solid(); + boolean nearLiquid = false, nearSolid = false, nearGround = false, solid = tile.solid(), allDeep = tile.floor().isDeep(); for(int i = 0; i < 4; i++){ Tile other = tile.nearby(i); if(other != null){ - if(other.floor().isLiquid) nearLiquid = true; + Floor floor = other.floor(); + if(floor.isLiquid) nearLiquid = true; if(other.solid()) nearSolid = true; - if(!other.floor().isLiquid) nearGround = true; + if(!floor.isLiquid) nearGround = true; + if(!floor.isDeep()) allDeep = false; } } @@ -132,7 +135,8 @@ public class Pathfinder implements Runnable{ nearGround, nearSolid, tile.floor().isDeep(), - tile.floor().damageTaken > 0.00001f + tile.floor().damageTaken > 0.00001f, + allDeep ); } @@ -495,5 +499,7 @@ public class Pathfinder implements Runnable{ boolean deep; //whether the floor damages boolean damages; + //whether all tiles nearby are deep + boolean allDeep; } } diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index d14f362b6d..d18da8b0a3 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -12,6 +12,7 @@ import mindustry.game.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; +import mindustry.world.Block; import static arc.graphics.g2d.Draw.rect; import static arc.graphics.g2d.Draw.*; @@ -26,6 +27,17 @@ public class Fx{ public static final Effect none = new Effect(0, 0f, e -> {}), + + blockCrash = new Effect(100f, e -> { + if(!(e.data instanceof Block block)) return; + + alpha(e.fin() + 0.5f); + float offset = Mathf.lerp(0f, 200f, e.fout()); + color(0f, 0f, 0f, 0.44f); + rect(block.fullIcon, e.x - offset * 4f, e.y, (float)block.size * 8f, (float)block.size * 8f); + color(Color.white); + rect(block.fullIcon, e.x + offset, e.y + offset * 5f, (float)block.size * 8f, (float)block.size * 8f); + }), trailFade = new Effect(400f, e -> { if(!(e.data instanceof Trail trail)) return; @@ -67,9 +79,8 @@ public class Fx{ }), unitControl = new Effect(30f, e -> { - if(!(e.data instanceof Unit)) return; + if(!(e.data instanceof Unit select)) return; - Unit select = e.data(); boolean block = select instanceof BlockUnitc; mixcol(Pal.accent, 1f); @@ -84,9 +95,8 @@ public class Fx{ }), unitDespawn = new Effect(100f, e -> { - if(!(e.data instanceof Unit) || e.data().type == null) return; + if(!(e.data instanceof Unit select) || select.type == null) return; - Unit select = e.data(); float scl = e.fout(Interp.pow2Out); float p = Draw.scl; Draw.scl *= scl; @@ -99,8 +109,7 @@ public class Fx{ }), unitSpirit = new Effect(17f, e -> { - if(!(e.data instanceof Position)) return; - Position to = e.data(); + if(!(e.data instanceof Position to)) return; color(Pal.accent); @@ -118,8 +127,7 @@ public class Fx{ }), itemTransfer = new Effect(12f, e -> { - if(!(e.data instanceof Position)) return; - Position to = e.data(); + if(!(e.data instanceof Position to)) return; Tmp.v1.set(e.x, e.y).interpolate(Tmp.v2.set(to), e.fin(), Interp.pow3) .add(Tmp.v2.sub(e.x, e.y).nor().rotate90(1).scl(Mathf.randomSeedRange(e.id, 1f) * e.fslope() * 10f)); float x = Tmp.v1.x, y = Tmp.v1.y; @@ -133,9 +141,7 @@ public class Fx{ }), pointBeam = new Effect(25f, 300f, e -> { - if(!(e.data instanceof Position)) return; - - Position pos = e.data(); + if(!(e.data instanceof Position pos)) return; Draw.color(e.color, e.fout()); Lines.stroke(1.5f); @@ -229,11 +235,10 @@ public class Fx{ }), unitWreck = new Effect(200f, e -> { - if(!(e.data instanceof TextureRegion)) return; + if(!(e.data instanceof TextureRegion reg)) return; Draw.mixcol(Pal.rubble, 1f); - TextureRegion reg = e.data(); float vel = e.fin(Interp.pow5Out) * 2f * Mathf.randomSeed(e.id, 1f); float totalRot = Mathf.randomSeed(e.id + 1, 10f); Tmp.v1.trns(Mathf.randomSeed(e.id + 2, 360f), vel); @@ -1929,9 +1934,7 @@ public class Fx{ }).layer(Layer.groundUnit + 1f), unitShieldBreak = new Effect(35, e -> { - if(!(e.data instanceof Unitc)) return; - - Unit unit = e.data(); + if(!(e.data instanceof Unit unit)) return; float radius = unit.hitSize() * 1.3f; diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 08c811f0f1..4f5990dcab 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -225,7 +225,7 @@ public class Control implements ApplicationListener, Loadable{ Effect.shake(5f, 5f, core); core.thrusterTime = 1f; - if(state.isCampaign() && Vars.showSectorLandInfo){ + if(state.isCampaign() && Vars.showSectorLandInfo && (state.rules.sector.preset == null || state.rules.sector.preset.showSectorLandInfo)){ ui.announce("[accent]" + state.rules.sector.name() + "\n" + (state.rules.sector.info.resources.any() ? "[lightgray]" + bundle.get("sectors.resources") + "[white] " + state.rules.sector.info.resources.toString(" ", u -> u.emoji()) : ""), 5); diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index c6cccfbcf7..ce2498792a 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -181,6 +181,13 @@ public class NetClient implements ApplicationListener{ effect.at(x, y, rotation, color); } + + @Remote(variants = Variant.both, unreliable = true) + public static void effect(Effect effect, float x, float y, float rotation, Color color, Object data){ + if(effect == null) return; + + effect.at(x, y, rotation, color, data); + } @Remote(variants = Variant.both) public static void effectReliable(Effect effect, float x, float y, float rotation, Color color){ diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index de06a1b0df..f558443880 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -404,25 +404,27 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, //region handler methods /** @return whether the player can select (but not actually control) this building. */ - public boolean canControlSelect(Player player){ + public boolean canControlSelect(Unit player){ return false; } /** Called when a player control-selects this building - not called for ControlBlock subclasses. */ - public void onControlSelect(Player player){ + public void onControlSelect(Unit player){ } - public void acceptPlayerPayload(Player player, Cons grabber){ + public void handleUnitPayload(Unit player, Cons grabber){ Fx.spawn.at(player); - var unit = player.unit(); - player.clearUnit(); - //player.deathTimer = Player.deathDelay + 1f; //for instant respawn - unit.remove(); - grabber.get(new UnitPayload(unit)); - Fx.unitDrop.at(unit); + + if(player.isPlayer()){ + player.getPlayer().clearUnit(); + } + + player.remove(); + grabber.get(new UnitPayload(player)); + Fx.unitDrop.at(player); if(Vars.net.client()){ - Vars.netClient.clearRemovedEntity(unit.id); + Vars.netClient.clearRemovedEntity(player.id); } } diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 18019a7165..7236f5618b 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -38,6 +38,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Import int id; @Import @Nullable Tile mineTile; @Import Vec2 vel; + @Import WeaponMount[] mounts; private UnitController controller; UnitType type; @@ -502,6 +503,14 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I Events.fire(Trigger.suicideBomb); } + for(WeaponMount mount : mounts){ + if(mount.weapon.shootOnDeath && !(mount.weapon.bullet.killShooter && mount.shoot)){ + mount.reload = 0f; + mount.shoot = true; + mount.weapon.update(self(), mount); + } + } + //if this unit crash landed (was flying), damage stuff in a radius if(type.flying && !spawnedByCore){ Damage.damage(team, x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true); diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 6f9d62dac9..a6a5e3d8e2 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -367,8 +367,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ throw new ValidateException(player, "Player cannot control a building."); } - if(player.team() == build.team && build.canControlSelect(player)){ - build.onControlSelect(player); + if(player.team() == build.team && build.canControlSelect(player.unit())){ + build.onControlSelect(player.unit()); + } + } + + @Remote(called = Loc.server) + public static void unitBuildingControlSelect(Unit unit, Building build){ + if(unit == null || unit.dead()) return; + + //client skips checks to prevent ghost units + if(unit.team() == build.team && (net.client() || build.canControlSelect(unit))){ + build.onControlSelect(unit); } } @@ -1112,7 +1122,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public @Nullable Building selectedControlBuild(){ Building build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); - if(build != null && !player.dead() && build.canControlSelect(player) && build.team == player.team()){ + if(build != null && !player.dead() && build.canControlSelect(player.unit()) && build.team == player.team()){ return build; } return null; diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index c0dc4df1c5..8baa4fb693 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -448,6 +448,12 @@ public class LExecutor{ ai.payTimer = LogicAI.transferDelay; } } + case payEnter -> { + Building build = world.buildWorld(unit.x, unit.y); + if(build != null && unit.team() == build.team && build.canControlSelect(unit)){ + Call.unitBuildingControlSelect(unit, build); + } + } case build -> { if(state.rules.logicUnitBuild && unit.canBuild() && exec.obj(p3) instanceof Block block && block.canBeBuilt()){ int x = World.toTile(x1 - block.offset/tilesize), y = World.toTile(y1 - block.offset/tilesize); diff --git a/core/src/mindustry/logic/LUnitControl.java b/core/src/mindustry/logic/LUnitControl.java index f5bc4dbd52..4647c28e00 100644 --- a/core/src/mindustry/logic/LUnitControl.java +++ b/core/src/mindustry/logic/LUnitControl.java @@ -13,6 +13,7 @@ public enum LUnitControl{ itemTake("from", "item", "amount"), payDrop, payTake("takeUnits"), + payEnter, mine("x", "y"), flag("value"), build("x", "y", "block", "rotation", "config"), diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 73886727dd..77065f2e67 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -97,8 +97,6 @@ public class ClassMap{ classes.put("AcceleratorBuild", mindustry.world.blocks.campaign.Accelerator.AcceleratorBuild.class); classes.put("LaunchPad", mindustry.world.blocks.campaign.LaunchPad.class); classes.put("LaunchPadBuild", mindustry.world.blocks.campaign.LaunchPad.LaunchPadBuild.class); - classes.put("PayloadLaunchPad", mindustry.world.blocks.campaign.PayloadLaunchPad.class); - classes.put("PayloadLaunchPadBuild", mindustry.world.blocks.campaign.PayloadLaunchPad.PayloadLaunchPadBuild.class); classes.put("Door", mindustry.world.blocks.defense.Door.class); classes.put("DoorBuild", mindustry.world.blocks.defense.Door.DoorBuild.class); classes.put("ForceProjector", mindustry.world.blocks.defense.ForceProjector.class); diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index 3aa2743dc2..63ff4fe509 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -18,6 +18,7 @@ public class SectorPreset extends UnlockableContent{ public float difficulty; public float startWaveTimeMultiplier = 2f; public boolean addStartingItems = false; + public boolean showSectorLandInfo = true; public SectorPreset(String name, Planet planet, int sector){ super(name); diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index d88651fa04..dc83c9282f 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -117,6 +117,8 @@ public class Weapon implements Cloneable{ public Func mountType = WeaponMount::new; /** status effect duration when shot */ public float shootStatusDuration = 60f * 5f; + /** whether this weapon should fire when its owner dies */ + public boolean shootOnDeath = false; public Weapon(String name){ this.name = name; diff --git a/core/src/mindustry/ui/Menus.java b/core/src/mindustry/ui/Menus.java index 511bd7b55b..016b3416c0 100644 --- a/core/src/mindustry/ui/Menus.java +++ b/core/src/mindustry/ui/Menus.java @@ -11,11 +11,12 @@ import static mindustry.Vars.*; /** Class for handling menus and notifications across the network. Unstable API! */ public class Menus{ - private static IntMap menuListeners = new IntMap<>(); + private static final Seq menuListeners = new Seq<>(); /** Register a *global* menu listener. If no option is chosen, the option is returned as -1. */ - public static void registerMenu(int id, MenuListener listener){ - menuListeners.put(id, listener); + public static int registerMenu(MenuListener listener){ + menuListeners.add(listener); + return menuListeners.size - 1; } //do not invoke any of the methods below directly, use Call @@ -30,7 +31,7 @@ public class Menus{ @Remote(targets = Loc.both, called = Loc.both) public static void menuChoose(@Nullable Player player, int menuId, int option){ - if(player != null && menuListeners.containsKey(menuId)){ + if(player != null && menuId >= 0 && menuId < menuListeners.size){ Events.fire(new MenuOptionChooseEvent(player, menuId, option)); menuListeners.get(menuId).get(player, option); } diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index fc64c37c7d..1e971d884c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -418,7 +418,7 @@ public class Turret extends ReloadTurret{ tr.trns(rotation, shootLength); recoil = recoilAmount; heat = 1f; - bullet(type, rotation + Mathf.range(inaccuracy)); + bullet(type, rotation + Mathf.range(inaccuracy + type.inaccuracy)); effects(); charging = false; }); @@ -448,7 +448,7 @@ public class Turret extends ReloadTurret{ float i = (shotCounter % shots) - (shots-1)/2f; tr.trns(rotation - 90, spread * i + Mathf.range(xRand), shootLength); - bullet(type, rotation + Mathf.range(inaccuracy)); + bullet(type, rotation + Mathf.range(inaccuracy + type.inaccuracy)); }else{ tr.trns(rotation, shootLength, Mathf.range(xRand)); diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index f60ffaa389..2681376e35 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -75,13 +75,13 @@ public class PayloadConveyor extends Block{ public int step = -1, stepAccepted = -1; @Override - public boolean canControlSelect(Player player){ - return this.item == null && !player.unit().spawnedByCore && player.unit().hitSize / tilesize <= payloadLimit && player.tileOn() != null && player.tileOn().build == this; + public boolean canControlSelect(Unit player){ + return this.item == null && !player.spawnedByCore && player.hitSize / tilesize <= payloadLimit && player.tileOn() != null && player.tileOn().build == this; } @Override - public void onControlSelect(Player player){ - acceptPlayerPayload(player, p -> item = p); + public void onControlSelect(Unit player){ + handleUnitPayload(player, p -> item = p); } @Override diff --git a/core/src/mindustry/world/blocks/distribution/Router.java b/core/src/mindustry/world/blocks/distribution/Router.java index 141f188446..cddef060f0 100644 --- a/core/src/mindustry/world/blocks/distribution/Router.java +++ b/core/src/mindustry/world/blocks/distribution/Router.java @@ -104,7 +104,7 @@ public class Router extends Block{ int angle = Mathf.mod((int)((angleTo(unit.aimX(), unit.aimY()) + 45) / 90), 4); if(unit.isShooting()){ - Building other = nearby(angle); + Building other = nearby(rotation = angle); if(other != null && other.acceptItem(this, item)){ return other; } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java index a7885e76c7..17f74ac4ad 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java @@ -80,16 +80,16 @@ public class PayloadBlock extends Block{ } @Override - public boolean canControlSelect(Player player){ - return !player.unit().spawnedByCore && this.payload == null && acceptUnitPayload(player.unit()) && player.tileOn() != null && player.tileOn().build == this; + public boolean canControlSelect(Unit player){ + return !player.spawnedByCore && this.payload == null && acceptUnitPayload(player) && player.tileOn() != null && player.tileOn().build == this; } @Override - public void onControlSelect(Player player){ + public void onControlSelect(Unit player){ float x = player.x, y = player.y; - acceptPlayerPayload(player, p -> payload = (T)p); + handleUnitPayload(player, p -> payload = (T)p); this.payVector.set(x, y).sub(this).clamp(-size * tilesize / 2f, -size * tilesize / 2f, size * tilesize / 2f, size * tilesize / 2f); - this.payRotation = player.unit().rotation; + this.payRotation = player.rotation; } @Override diff --git a/core/src/mindustry/world/blocks/production/Drill.java b/core/src/mindustry/world/blocks/production/Drill.java index fc1e86d120..fa3a274301 100644 --- a/core/src/mindustry/world/blocks/production/Drill.java +++ b/core/src/mindustry/world/blocks/production/Drill.java @@ -46,6 +46,8 @@ public class Drill extends Block{ public boolean drawMineItem = true; /** Effect played when an item is produced. This is colored. */ public Effect drillEffect = Fx.mine; + /** Drill effect randomness. Block size by default. */ + public float drillEffectRnd = -1f; /** Speed the drill bit rotates at. */ public float rotateSpeed = 2f; /** Effect randomly played while drilling. */ @@ -73,6 +75,12 @@ public class Drill extends Block{ ambientSoundVolume = 0.018f; } + @Override + public void init(){ + super.init(); + if(drillEffectRnd < 0) drillEffectRnd = size; + } + @Override public void drawRequestConfigTop(BuildPlan req, Eachable list){ if(!req.worldContext) return; @@ -285,7 +293,7 @@ public class Drill extends Block{ progress %= delay; - drillEffect.at(x + Mathf.range(size), y + Mathf.range(size), dominantItem.color); + drillEffect.at(x + Mathf.range(drillEffectRnd), y + Mathf.range(drillEffectRnd), dominantItem.color); } } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 7f3e67e5ce..7d76842a86 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -242,12 +242,15 @@ public class CoreBlock extends StorageBlock{ } @Override - public boolean canControlSelect(Player player){ - return true; + public boolean canControlSelect(Unit player){ + return player.isPlayer(); } @Override - public void onControlSelect(Player player){ + public void onControlSelect(Unit unit){ + if(!unit.isPlayer()) return; + Player player = unit.getPlayer(); + Fx.spawn.at(player); if(net.client() && player == Vars.player){ control.input.controlledType = null; diff --git a/fastlane/metadata/steam/polish/achievements.vdf b/fastlane/metadata/steam/polish/achievements.vdf index 8c8e7404b5..e3dc3ffb14 100644 --- a/fastlane/metadata/steam/polish/achievements.vdf +++ b/fastlane/metadata/steam/polish/achievements.vdf @@ -84,7 +84,7 @@ "NEW_ACHIEVEMENT_21_12_NAME" "Tłum" "NEW_ACHIEVEMENT_21_12_DESC" "Hostuj serwer z 10 graczami." "NEW_ACHIEVEMENT_21_13_NAME" "Nietykalny" - "NEW_ACHIEVEMENT_21_13_DESC" "Zbuduj Rozpad i Huragan." + "NEW_ACHIEVEMENT_21_13_DESC" "Zbuduj Rozpad, Foreshadow i Huragan." "NEW_ACHIEVEMENT_21_14_NAME" "Wystrzelenie" "NEW_ACHIEVEMENT_21_14_DESC" "Użyj wyrzutni." "NEW_ACHIEVEMENT_21_15_NAME" "Samozadowolenie" @@ -121,7 +121,7 @@ "NEW_ACHIEVEMENT_21_30_DESC" "Dołącz do nich." "NEW_ACHIEVEMENT_21_31_NAME" "Produkcja I" "NEW_ACHIEVEMENT_21_31_DESC" "Osiągnij 5000 przedmiotów/minute w kampani." - "NEW_ACHIEVEMENT_26_0_NAME" "Production II" + "NEW_ACHIEVEMENT_26_0_NAME" "Produkcja II" "NEW_ACHIEVEMENT_26_0_DESC" "Osiągnij 50000 przedmiotów/minute w kampani." "NEW_ACHIEVEMENT_26_1_NAME" "Pewne Zwycięstwo" "NEW_ACHIEVEMENT_26_1_DESC" "Podbij sektor grając na innym sektorze." diff --git a/servers_v7.json b/servers_v7.json index 73a584e8aa..9e3ad434d4 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -54,5 +54,9 @@ { "name": "devass.su", "address": ["185.22.152.66"] + }, + { + "name": "Phoenix Network", + "address": ["172.104.253.198"] } ] diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index ed27820c79..1349312ddf 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -471,13 +471,14 @@ public class Generators{ } //draw base region on top to mask weapons - if(type.drawBody) image.draw(get(type.region), true); - int baseColor = Color.valueOf("ffa665").rgba(); + if(type.drawCell) image.draw(get(type.region), true); if(type.drawCell){ Pixmap baseCell = get(type.cellRegion); - Pixmap cell = new Pixmap(type.cellRegion.width, type.cellRegion.height); - cell.each((x, y) -> cell.set(x, y, Color.muli(baseCell.getRaw(x, y), baseColor))); + Pixmap cell = baseCell.copy(); + + //replace with 0xffd37fff : 0xdca463ff for sharded colors? + cell.replace(in -> in == 0xffffffff ? 0xffa664ff : in == 0xdcc6c6ff ? 0xd06b53ff : 0); image.draw(cell, image.width / 2 - cell.width / 2, image.height / 2 - cell.height / 2, true); }