diff --git a/build.gradle b/build.gradle index 8f262d8a3d..c1987daf5b 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.8' roboVMVersion = '2.3.0' - uCoreVersion = '2f18f69ffb' + uCoreVersion = 'e492954e86' getVersionString = { String buildVersion = getBuildVersion() @@ -194,7 +194,9 @@ project(":server") { apply plugin: "java" configurations { - compile.exclude module: android + if(findProject(":android") != null){ + compile.exclude module: android + } } dependencies { diff --git a/core/assets-raw/sprites/units/dagger.png b/core/assets-raw/sprites/units/dagger.png index 25474f4e5a..ccce8b0729 100644 Binary files a/core/assets-raw/sprites/units/dagger.png and b/core/assets-raw/sprites/units/dagger.png differ diff --git a/core/assets-raw/sprites/units/drone.png b/core/assets-raw/sprites/units/drone.png index 18367666ce..75a86d9cdd 100644 Binary files a/core/assets-raw/sprites/units/drone.png and b/core/assets-raw/sprites/units/drone.png differ diff --git a/core/assets-raw/sprites/units/fabricator.png b/core/assets-raw/sprites/units/fabricator.png index 10d9e47b98..ab23162064 100644 Binary files a/core/assets-raw/sprites/units/fabricator.png and b/core/assets-raw/sprites/units/fabricator.png differ diff --git a/core/assets-raw/sprites/units/interceptor.png b/core/assets-raw/sprites/units/interceptor.png index d33f701bb9..b0da8131f2 100644 Binary files a/core/assets-raw/sprites/units/interceptor.png and b/core/assets-raw/sprites/units/interceptor.png differ diff --git a/core/assets-raw/sprites/units/monsoon.png b/core/assets-raw/sprites/units/monsoon.png index 2c89a57c48..bed8802a5b 100644 Binary files a/core/assets-raw/sprites/units/monsoon.png and b/core/assets-raw/sprites/units/monsoon.png differ diff --git a/core/assets-raw/sprites/units/power-cell.png b/core/assets-raw/sprites/units/power-cell.png new file mode 100644 index 0000000000..cc8ea4f2dc Binary files /dev/null and b/core/assets-raw/sprites/units/power-cell.png differ diff --git a/core/assets-raw/sprites/units/titan.png b/core/assets-raw/sprites/units/titan.png index 63dcb6f8e3..a11d23d604 100644 Binary files a/core/assets-raw/sprites/units/titan.png and b/core/assets-raw/sprites/units/titan.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index cb5bf10f69..11414b0695 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -87,7 +87,7 @@ text.server.kicked.serverOutdated=Outdated server! Ask the host to update! text.server.kicked.banned=You are banned on this server. text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again. text.server.kicked.nameInUse=There is someone with that name\nalready on this server. -text.server.kicked.nameEmpty=Your name must contain at least one character or number. +text.server.kicked.nameEmpty=Your chosen name is invalid. text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted. text.server.kicked.customClient=This server does not support custom builds. Download an official version. text.host.info=The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. @@ -356,6 +356,11 @@ setting.mutemusic.name=Mute Music setting.sfxvol.name=SFX Volume setting.mutesound.name=Mute Sound text.keybind.title=Rebind Keys + +category.general.name=General +category.view.name=View +category.multiplayer.name=Multiplayer + keybind.move_x.name=Move x keybind.move_y.name=Move y keybind.select.name=Select @@ -368,8 +373,15 @@ keybind.pause.name=Pause keybind.dash.name=Dash keybind.chat.name=Chat keybind.player_list.name=Player list -keybind.console.name=console +keybind.console.name=Console keybind.rotate.name=Rotate +keybind.toggle_menus.name=Toggle menus +keybind.chat_history_prev.name=Chat history prev +keybind.chat_history_next.name=Chat history next +keybind.chat_scroll.name=Chat scroll +keybind.drop_unit.name=drop unit +keybind.zoom_minimap.name=Zoom minimap + mode.text.help.title=Description of modes mode.waves.name=waves mode.waves.description=the normal mode. limited resources and automatic incoming waves. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index d4a6c10095..782a4db285 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -15,7 +15,6 @@ text.players={0} Spieler online text.players.single={0} Spieler online text.server.mismatch=Paketfehler: Mögliche Client / Server-Version stimmt nicht überein. Stell sicher, dass du und der Host die neueste Version von Mindustry haben! text.server.kicked.kick=Du wurdest vom Server gekickt! -text.server.kicked.invalidPassword=Falsches Passwort. text.hostserver=Server hosten text.host=Host text.hosting=[accent] Server wird geöffnet... @@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump block.nuclear-reactor.name=Nuclear Reactor text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release. text.customgame=Custom Game -text.campaign=Campaign text.sectors=Sectors text.sector=Selected Sector: [LIGHT_GRAY]{0} text.sector.time=Time: [LIGHT_GRAY]{0} @@ -503,8 +501,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 291b4de50c..ff702e836e 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -1,518 +1,564 @@ +text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) text.credits=Créditos text.discord=¡Únete al Discord de Mindustry! -text.link.discord.description=La sala oficial del discord de Mindustry +text.link.discord.description=La sala oficial del Discord de Mindustry text.link.github.description=Código fuente del juego -text.link.dev-builds.description=Estados en desarrollo inestables -text.link.trello.description=Tablero trello oficial para las características planificadas -text.link.itch.io.description=itch.io és la página con descargas para PC y la versión web -text.link.google-play.description=Listado en la tienda de Google Play -text.link.wiki.description=Wiki oficial de Mindustry -text.linkfail=¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles +text.link.dev-builds.description=Versiones de desarrollo inestable +text.link.trello.description=Tablero de Trello oficial para las características planificadas +text.link.itch.io.description=itch.io es la página donde podes descargar las versiones para PC y web +text.link.google-play.description=Ficha en la Google Play Store +text.link.wiki.description=wiki oficial de Mindustry +text.linkfail=¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles. text.editor.web=¡La versión web no es compatible con el editor!\nDescargue el juego para usarlo. -text.gameover=El núcleo fue destruido. -text.highscore=[YELLOW]¡Nueva mejor puntuación! -text.level.highscore=Puntuación màs alta: [accent] +text.web.unsupported=¡La versión web no soporta esta característica! Descarga el juego para poder usarla. +text.gameover=Tu núcleo ha sido destruido. +text.sector.gameover=Este sector ha sido perdido. ¿Re-instaurar? +text.sector.retry=Reintentar +text.highscore=[accent]¡Nueva mejor puntuación! +text.wave.lasted=Duraste hasta la ronda [accent]{0}[]. +text.level.highscore=Puntuación màs alta: [accent]{0} text.level.delete.title=Confirmar Eliminación +text.map.delete=¿Estás seguro que quieres borrar el mapa "[orange]{0}[]"? text.level.select=Selección de nivel text.level.mode=Modo de juego: +text.construction.title=Guía de Construcción de Bloques +text.construction=\ +Acaba de seleccionar el [accent]modo de construcción de bloques[].\n\n\ +Para empezar a colocar, simplemente presione en una localización valida cerca de su nave.\n\ +Cuando haya terminado de seleccionar algunos bloques, presiona la casilla para confirmar, y su nave empezara a construirlos.\n\ +\n\ +- [accent]Remueve bloques[] de tu selección presionando en ellos.\n\ +- [accent]Cambia tu selección de lugar[] manteniendo y arrastrando cualquier bloque en la selección.\n\ +- [accent]Coloca bloques en línea[] presionando y manteniendo en un espacio vacío, y arrastrando hacia cualquier dirección.\n\ +- [accent]Cancela la construcción o selección[] presionando la X abajo a la izquierda. + +text.deconstruction.title=Guía de Deconstrucción de Bloques +text.deconstruction=\ +Acaba de seleccionar el [accent]modo de deconstrucción de bloques[].\n\n\ +Para empezar a destruir, simplemente presione en un bloque cercano a su nave.\n\ +Cuando haya terminado de seleccionar algunos bloques, presiona la casilla para confirmar, y su nave empezara a de-construirlos.\n\ +\n\ +- [accent]Remueve bloques[] de tu selección presionando en ellos.\n\ +- [accent]Remueve bloques en un area[] presionando y manteniendo en un espacio vacío, y arrastrando hacia cualquier dirección.\n\ +- [accent]Cancela la deconstrucción o selección[] presionando la X abajo a la izquierda. +text.showagain=No mostrar devuelta en la próxima sesión +text.coreattack=< ¡El núcleo está bajo ataque! > +text.unlocks=Desbloqueos text.savegame=Guardar Partida text.loadgame=Cargar Partida -text.joingame=Unirse a una Partida +text.joingame=Unirse a la Partida +text.addplayers=Agregar/Remover Jugadores +text.customgame=Partida personalizada +text.sectors=Sectores +text.sector=Sector: [LIGHT_GRAY]{0} +text.sector.time=Tiempo: [LIGHT_GRAY]{0} +text.sector.deploy=Desplegar +text.sector.resume=Resumir +text.sector.locked=[scarlet][[Incompleto] +text.sector.unexplored=[accent][[Inexplorado] +text.mission=Misión:[LIGHT_GRAY] {0} +text.mission.complete=¡Misión completada! +text.mission.complete.body=Sector {0},{1} ha sido conquistado. +text.mission.wave=Sobrevive [accent]{0}[] hordas. +text.mission.battle=Destruye la base enemiga. +text.mission.resource=Obtén {0} x{1} +text.none= +text.close=Cerrar text.quit=Salir +text.maps=Mapas +text.continue=Continuar +text.nextmission=Próxima Misión +text.maps.none=[LIGHT_GRAY]¡No se han encontrado mapas! text.about.button=Acerca de -text.name=Nombre -text.players={0} Jugadores en línea -text.players.single={0} jugador en línea -text.server.mismatch=Error de paquete: posible desajuste de la versión cliente / servidor.\n¡Asegúrate de que tú y el anfitrión tengáis la última versión de Mindustry! -text.server.closing=[accent] Cerrando servidor ... -text.server.kicked.kick=¡Has sido expulsado del servidor! -text.server.kicked.invalidPassword=¡Contraseña inválida! -text.server.kicked.clientOutdated=Cliente desactualizado ¡Actualiza tu juego! -text.server.kicked.serverOutdated=Servidor desactualizado ¡Pidele actualizar al anfitrión! -text.server.kicked.banned=Tu entrada está prohibida en este servidor. -text.server.kicked.recentKick=Has sido echado recientemente.\nEspera antes de conectarte de nuevo. -text.host.info=El botón [acento] host [] aloja un servidor en los puertos [escarlata] 6567 [] y [escarlata] 6568. [] Cualquiera en el mismo [LIGHT_GRAY] wifi o red local [] debería poder ver su servidor en su servidor lista. Si desea que las personas puedan conectarse desde cualquier lugar mediante IP, se requiere [acento] reenvío de puerto []. [LIGHT_GRAY] Nota: Si alguien tiene problemas para conectarse a su juego LAN, asegúrese de haber permitido a Mindustry el acceso a su red local en la configuración de su firewall. -text.join.info=Aquí puede ingresar un servidor [acento] IP [] para conectarse, o descubrir servidores de [acento] red local [] para conectarse. Tanto el modo multijugador LAN como WAN son compatibles. [LIGHT_GRAY] Nota: no hay una lista de servidores global automática; si desea conectarse con alguien por IP, deberá solicitar al host su IP. -text.hostserver=Hostear servidor +text.name=Nombre: +text.unlocked=¡Nuevo Bloque Desbloqueado! +text.unlocked.plural=¡Nuevos Bloques Desbloqueados! +text.players={0} jugadores online +text.players.single={0} jugador online +text.server.mismatch=Error de paquete: posiblemente versión incompatible de cliente/servidor.\n¡Asegurate de que tu y el anfitrión tengan\nla última versión de Mindustry! +text.server.closing=[accent]Cerrando servidor... +text.server.kicked.kick=¡Has sido kickeado del servidor! +text.server.kicked.fastShoot=Estás disparando demasiado rápido. +text.server.kicked.serverClose=El servidor ha cerrado. +text.server.kicked.sectorComplete=Sector completado. +text.server.kicked.sectorComplete.text=Tu misión ha sido completada.\nEl servidor ahora continuara con el próximo sector. +text.server.kicked.clientOutdated=¡Cliente desactualizado! ¡Actualiza tu juego! +text.server.kicked.serverOutdated=¡Servidor desactualizado! ¡Pídele al anfitrión que lo actualice! +text.server.kicked.banned=Has sido baneado del servidor. +text.server.kicked.recentKick=Has sido kickeado recientemente.\nEspera para poder conectarte devuelta. +text.server.kicked.nameInUse=Ya hay alguien con ese nombre\nen el servidor. +text.server.kicked.nameEmpty=Tu nombre debe por lo menos contener un carácter o número. +text.server.kicked.idInUse=¡Ya estás en el servidor! Conectarse con dos cuentas no está permitido. +text.server.kicked.customClient=Este servidor no soporta versiones personalizadas. Descarga una versión oficial. +text.host.info=El botón [accent]hostear[] hostea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall. +text.join.info=Acá, tu puedes escribir la [accent]IP de un servidor[] para conectarte, o para descubrir servidores de [accent]red local[] para conectarte.\nLAN y WAN es soportado para jugar en multijugador.\n\n[LIGHT_GRAY]Nota: No hay lista automática global de servidores; si quieres conectarte por IP, tendrás que preguntarle al anfitrión por la IP. +text.hostserver=Hostear Servidor text.host=Hostear -text.hosting=[acento] Abriendo servidor ... -text.hosts.refresh=Refrescar -text.hosts.discovering=Descubriendo juegos en LAN -text.server.refreshing=Servidor refrescante -text.hosts.none=[lightgray] ¡No se encontraron juegos LAN! -text.host.invalid=[escarlata] No se puede conectar al host. -text.trace=Rastro del jugador -text.trace.playername=Nombre del jugador: [acento] {0} -text.trace.ip=IP: [acento] {0} -text.trace.id=ID único: [acento] {0} -text.trace.android=Cliente de Android: [acento] {0} -text.trace.modclient=Cliente personalizado: [acento] {0} -text.trace.totalblocksbroken=Total de bloques rotos: [acento] {0} -text.trace.structureblocksbroken=Bloques de estructura rotos: [acento] {0} -text.trace.lastblockbroken=Último bloque roto: [acento] {0} -text.trace.totalblocksplaced=Total de bloques colocados: [acento] {0} -text.trace.lastblockplaced=Último bloque colocado: [acento] {0} -text.invalidid=ID de cliente no válido Presente un informe del error. -text.server.bans=Baneos -text.server.bans.none=¡No se encontraron jugadores baneados! +text.hosting=[accent]Abriendo servidor... +text.hosts.refresh=Actualizar +text.hosts.discovering=Descubrir partidas LAN +text.server.refreshing=Actualizando servidor +text.hosts.none=[lightgray]¡No se han encontrado partidas LAN! +text.host.invalid=[scarlet]No se ha podido conectar al anfitrión +text.trace=Rastrear Jugador +text.trace.playername=Nombre de jugador: [accent]{0} +text.trace.ip=IP: [accent]{0} +text.trace.id=ID Única: [accent]{0} +text.trace.android=Cliente de Android: [accent]{0} +text.trace.modclient=Cliente Personalizado: [accent]{0} +text.trace.totalblocksbroken=Total de bloques removidos: [accent]{0} +text.trace.structureblocksbroken=Bloques de estructura removidos: [accent]{0} +text.trace.lastblockbroken=Último bloque removido: [accent]{0} +text.trace.totalblocksplaced=Total de bloques colocados: [accent]{0} +text.trace.lastblockplaced=Último bloque colocado: [accent]{0} +text.invalidid=¡ID de cliente invalida! Envía un informe del error. +text.server.bans=Bans +text.server.bans.none=¡Ningún usuario ha sido baneado! text.server.admins=Admins -text.server.admins.none=¡No se encontraron administradores! -text.server.add=Agregar servidor -text.server.delete=¿Seguro que quieres eliminar este servidor? +text.server.admins.none=¡Ningún admin ha sido encontrado! +text.server.add=Agregar Servidor +text.server.delete=¿Estás seguro que quieres borrar este servidor? text.server.hostname=Anfitrión: {0} -text.server.edit=Editar servidor -text.server.outdated=[crimson] ¡Servidor obsoleto! [] -text.server.outdated.client=[carmesí] Cliente desactualizado! [] -text.server.version=[lightgray] Versión: {0} -text.server.custombuild=[amarillo] Creación personalizada -text.confirmban=¿Estás seguro de que quieres prohibir este jugador? -text.confirmunban=¿Estás seguro de que quieres desbloquear a este jugador? -text.confirmadmin=¿Seguro que quieres que este jugador sea un administrador? -text.confirmunadmin=¿Seguro que quieres eliminar el estado de administrador de este reproductor? -text.joingame.title=Unirse a una partida +text.server.edit=Editar Servidor +text.server.outdated=[crimson]¡Servidor desactualizado![] +text.server.outdated.client=[crimson]¡Cliente desactualizado![] +text.server.version=[lightgray]Versión: {0} +text.server.custombuild=[yellow]Versión personalizada +text.confirmban=¿Estás seguro que quieres banear este jugador? +text.confirmunban=¿Estás seguro que quieres desbanear este jugador? +text.confirmadmin=¿Estás seguro que quieres hacer admin a este jugador? +text.confirmunadmin=¿Estás seguro que quieres remover como admin a este jugador? +text.joingame.title=Unirse a la partida text.joingame.ip=IP: text.disconnect=Desconectado. -text.disconnect.data=¡Fallo al cargar datos mundiales! -text.connecting=[accent] Conectando ... -text.connecting.data=[accent] Cargando información del mapa... -text.connectfail=[crimson] Fallo al conectar al servidor: [orange] +text.disconnect.data=¡Se ha fallado la carga de datos del mundo! +text.connecting=[accent]Conectando... +text.connecting.data=[accent]Cargando datos del mundo... +text.connectfail=[crimson]Ha fallado la conexión con el servidor: [orange]{0} text.server.port=Puerto: -text.server.addressinuse=¡Dirección ya en uso! -text.server.invalidport=¡Número de puerto inválido! -text.server.error=[crimson] Error en la creación del servidor: [orange] -text.save.new=Nuevo Guardado -text.save.overwrite=¿Seguro que quieres sobrescribir este juego guardado? -text.overwrite=Sobreescribir -text.save.none=¡No hay juegos guardados! -text.saveload=[accent] Guardando... -text.savefail=¡Error al guardar el juego! -text.save.delete.confirm=¿Estás seguro de que deseas eliminar este guardado? +text.server.addressinuse=¡La dirección está en uso! +text.server.invalidport=¡El número de puerto es invalido! +text.server.error=[crimson]Error hosteando el servidor: [orange]{0} +text.save.old=Este punto de guardado es para una versión más antigua de este juego, y ya no puede ser usada.\n\n[LIGHT_GRAY]Guardados con retrocompatibilidad serán completamente implementados en la versión 4.0. +text.save.new=Nuevo Punto de Guardado +text.save.overwrite=¿Estás seguro que quieres sobrescribir\neste punto de guardado? +text.overwrite=Sobrescribir +text.save.none=¡No se ha encontrado ningún punto de guardado! +text.saveload=[accent]Guardando... +text.savefail=¡No se ha podido guardar la partida! +text.save.delete.confirm=¿Estás seguro que quieres borrar este punto de guardado? text.save.delete=Borrar -text.save.export=Exportar guardado -text.save.import.invalid=[orange] ¡Este guardado es inválido! -text.save.import.fail=[crimson] Fallo al importar guardado: [orange] {0} -text.save.export.fail=[crimson] Fallo al exportar guardado: [orange] {0} -text.save.import=Importar Guardado -text.save.newslot=Nombre del guardado: +text.save.export=Exportar Punto de Guardado +text.save.import.invalid=[orange]¡Este punto de guardado es invalido! +text.save.import.fail=[crimson]Se ha fallado la importación del punto de guardado: [orange]{0} +text.save.export.fail=[crimson]Se ha fallado la exportación del punto de guardado: [orange]{0} +text.save.import=Importar Punto de Guardado +text.save.newslot=Nombre del Punto de Guardado: text.save.rename=Renombrar -text.save.rename.text=Nuevo nombre -text.selectslot=Seleccionar una guardado -text.slot=[accent] Casilla {0} -text.save.corrupted=[orange] ¡Arhivo de guardado corrupto o inválido! -text.empty= +text.save.rename.text=Nuevo nombre: +text.selectslot=Selecciona un Punto de Guardado. +text.slot=[accent]Casilla {0} +text.save.corrupted=[orange]El punto de guardado está corrupto o es invalido!\nSi acabas de actualizar el juego, esto debe ser probablemente un cambio en el formato de guardado y [scarlet]no[] un error. +text.sector.corrupted=[orange]El punto de guardado de este sector fue encontrado, pero su carga ha fallado.\nUn nuevo punto ha sido creado. +text.empty= text.on=Encendido text.off=Apagado -text.save.autosave=Guardado automático: {0} +text.save.autosave=Auto-guardado: {0} text.save.map=Mapa: {0} -text.save.wave=Horda: {0} +text.save.wave=Horda {0} text.save.difficulty=Dificultad: {0} -text.save.date=Guardado por última vez: {0} +text.save.date=Ultima vez guardado: {0} +text.save.playtime=Tiempo de juego: {0} text.confirm=Confirmar -text.delete=Eliiminar +text.delete=Borrar text.ok=OK text.open=Abrir text.cancel=Cancelar -text.openlink=Abrir enlace -text.copylink=Copiar link -text.back=Atrás -text.quit.confirm=¿Seguro que quieres salir? -text.changelog.title=Changelog -text.changelog.loading=Obteniendo changelog ... -text.changelog.error.android=[naranja] Tenga en cuenta que el registro de cambios no funciona en Android 4.4 y versiones posteriores. Esto se debe a un error interno de Android. -text.changelog.error=[escarlata] ¡Error al obtener el registro de cambios! Comprueba tu conexión a Internet. -text.changelog.current=[amarillo] [[Versión actual] -text.changelog.latest=[naranja] [[Última versión] -text.loading=[accent] Cargando... -text.wave=[orange] Horda {0} +text.openlink=Abrir Enlace +text.copylink=Copiar Enlace +text.back=Atras +text.quit.confirm=¿Estás seguro que quieres salir de la partida? +text.changelog.title=Registro de Parches +text.changelog.loading=Consiguiendo el registro de parches... +text.changelog.error.android=[orange]¡Nota que el registro de parches a veces no funciona en Android 4.4 o inferior!\nEsto es por un error de Android interno. +text.changelog.error.ios=[orange]El registro de parches no es actualmente soportado por iOS. +text.changelog.error=[scarlet]¡Error consiguiendo el registro de parches!\nChequeá tu conexión a Internet. +text.changelog.current=[yellow][[Versión actual] +text.changelog.latest=[orange][[Última version] +text.loading=[accent]Cargando... +text.saving=[accent]Guardando... +text.wave=[orange]Horda {0} text.wave.waiting=Horda en {0} text.waiting=Esperando... text.enemies={0} Enemigos text.enemies.single={0} Enemigo -text.loadimage=Cargar imagen -text.saveimage=Guardar imagen -text.editor.badsize=[orange]¡Dimensiones de imagen inválidas![]\nDimensiones de mapa válidas: {0} -text.editor.errorimageload=Error al cargar el archivo de imagen: [orange] {0} -text.editor.errorimagesave=Error al guardar el archivo de imagen: [orange] {0} +text.loadimage=Cargar Imagen +text.saveimage=Guardar Imagen +text.unknown=Desconocido +text.custom=Personalizado +text.builtin=Incorporado +text.map.delete.confirm=¿Estás seguro que quieres borrar este mapa? ¡Recuerda que está acción no puede ser descartada! +text.map.random=[accent]Mapa Aleatorio +text.map.nospawn=¡Este mapa no tiene ningún núcleo en el cual pueda meter al jugador! Agrega un núcleo [ROYAL]azul[] al mapa con el editor. +text.map.invalid=Error cargando el mapa: corrupto o archivo invalido. +text.editor.brush=Pincel +text.editor.slope=\\ +text.editor.openin=Abrir en el Editor +text.editor.oregen=Generación de Minerales +text.editor.oregen.info=Generación de Minerales: +text.editor.mapinfo=Info del Mapa +text.editor.author=Autor: +text.editor.description=Descripción: +text.editor.name=Nombre: +text.editor.teams=Equipos +text.editor.elevation=Elevación +text.editor.badsize=[orange]¡La dimensión de la imagen es invalida![]\nDimensiones validas para el mapa: {0} +text.editor.errorimageload=Error cargando el archivo:\n[orange]{0} +text.editor.errorimagesave=Error guardando el archivo:\n[orange]{0} text.editor.generate=Generar -text.editor.resize=Cambiar tamaño -text.editor.loadmap=Cargar mapa -text.editor.savemap=Guardar mapa -text.editor.loadimage=Cargar imagen -text.editor.saveimage=Guardar imagen -text.editor.unsaved=[scarlet] ¡Tienes cambios sin guardar! [] ¿Estás seguro de que quieres salir? -text.editor.resizemap=Cambiar el tamaño del mapa -text.editor.mapname=Nombre del mapa -text.editor.overwrite=[acento] ¡Advertencia!\nEsto sobrescribe un mapa existente. -text.editor.selectmap=Seleccione un mapa para cargar: +text.editor.resize=Cambiar Tamaño +text.editor.loadmap=Cargar Mapa +text.editor.savemap=Guardar Mapa +text.editor.saved=¡Guardado! +text.editor.save.noname=¡Tu mapa no tiene un nombre! Pon uno en el menu 'Info del Mapa'. +text.editor.save.overwrite=¡Tu mapa sobrescribe uno ya incorporado! Elige un nombre diferente en el menu 'Info del Mapa'. +text.editor.import.exists=[scarlet]¡No se ha podido importar:[] un mapa incorporado con el nombre '{0}' ya existe! +text.editor.import=Importar... +text.editor.importmap=Importar Mapa +text.editor.importmap.description=Importar un mapa ya existente +text.editor.importfile=Importar Archivo +text.editor.importfile.description=Importar un archivo externo del mapa +text.editor.importimage=Importar Imagen del Terreno +text.editor.importimage.description=Importar archivo externo de imagen del mapa +text.editor.export=Exportar... +text.editor.exportfile=Exportar Archivo +text.editor.exportfile.description=Exportar archivo del mapa +text.editor.exportimage=Exportar Imagen del Terreno +text.editor.exportimage.description=Exportar archivo de imagen del mapa +text.editor.loadimage=Importar Terreno +text.editor.saveimage=Exportar Terreno +text.editor.unsaved=[scarlet]¡Tienes cambios sin guardar![]\n¿Estás seguro que quieres salir? +text.editor.resizemap=Cambiar Tamaño del Mapa +text.editor.mapname=Nombre del Mapa: +text.editor.overwrite=[accent]¡Advertencia!\nEsto sobrescribe un mapa ya existente. +text.editor.overwrite.confirm=[scarlet]¡Advertencia![] Un mapa con ese nombre ya existe. ¿Estás seguro que quieres sobrescribirlo? +text.editor.selectmap=Selecciona un mapa para cargar: text.width=Ancho: text.height=Altura: -text.menu=Menú +text.menu=Menu text.play=Jugar text.load=Cargar -text.save=Salvar -text.language.restart=Por favor, reinicie su juego para que la configuración de idioma surta efecto. -text.settings.language=Idioma +text.save=Guardar +text.fps=FPS: {0} +text.tps=TPS: {0} +text.ping=Ping: {0}ms +text.language.restart=Por favor reinicie el juego para que los cambios del lenguaje surgan efecto. +text.settings.language=Languaje text.settings=Ajustes text.tutorial=Tutorial text.editor=Editor -text.mapeditor=Editor de Mapas +text.mapeditor=Editor de Mapa text.donate=Donar -text.settings.reset=Restablecer los valores predeterminados +text.settings.reset=Reiniciar por los de defecto +text.settings.rebind=Reasignar text.settings.controls=Controles text.settings.game=Juego text.settings.sound=Sonido text.settings.graphics=Gráficos text.paused=Pausado -text.info.title=[acento] Información -text.error.title=[carmesí] Se ha producido un error -text.error.crashtitle=Ha ocurrido un error -text.blocks.blockinfo=Información de bloque -text.blocks.powercapacity=Capacidad de energía -text.blocks.powershot=Energía/disparo +text.yes=Si +text.no=No +text.info.title=[accent]Info +text.error.title=[crimson]Un error ha ocurrido +text.error.crashtitle=Un error ha ocurrido +text.blocks.blockinfo=Información del Bloque +text.blocks.powercapacity=Capacidad de Energía +text.blocks.powershot=Energía/Disparo +text.blocks.targetsair=Apunta al Aire +text.blocks.itemspeed=Unidades Movidas +text.blocks.shootrange=Rango text.blocks.size=Tamaño -text.blocks.liquidcapacity=Capacidad de liquido -text.blocks.maxitemssecond=Objetos máximos/segundo -text.blocks.powerrange=Rango de energía -text.blocks.itemcapacity=Capacidad de items -text.blocks.inputliquid=Entrada de líquidos -text.blocks.inputitem=Entrada de ítems -text.blocks.explosive=¡Altamente explosivo! +text.blocks.liquidcapacity=Capacidad de Líquidos +text.blocks.maxitemssecond=Máximo de Objetos +text.blocks.powerrange=Rango de Energía +text.blocks.poweruse=Consumo de Energía +text.blocks.inputitemcapacity=Capacidad de Entrada de los Objetos +text.blocks.outputitemcapacity=Capacidad de Salida de los Objetos +text.blocks.itemcapacity=Capacidad de Objetos +text.blocks.maxpowergeneration=Generación Maxima de Energía +text.blocks.powertransferspeed=Transferencia de Energía +text.blocks.craftspeed=Velocidad de Producción +text.blocks.inputliquid=Líquidos de Entrada +text.blocks.inputliquidaux=Líquido Auxiliar +text.blocks.inputitem=Objeto de Entrada +text.blocks.inputitems=Objetos de Entrada +text.blocks.outputitem=Objeto de Salida +text.blocks.drilltier=Taladrable +text.blocks.drillspeed=Velocidad de Base del Taladro +text.blocks.liquidoutput=Líquido de Salida +text.blocks.liquiduse=Uso del Líquido +text.blocks.coolant=Refrigerante +text.blocks.coolantuse=Uso del Refrigerante +text.blocks.inputliquidfuel=Combustible Líquido +text.blocks.liquidfueluse=Uso del Combustible Líquido +text.blocks.explosive=¡Altamente Explosivo! text.blocks.health=Vida -text.blocks.inaccuracy=Inexactitud +text.blocks.inaccuracy=Imprecisión text.blocks.shots=Disparos +text.blocks.reload=Recarga +text.blocks.inputfuel=Combustible +text.blocks.fuelburntime=Tiempo de Quema del Combustible text.blocks.inputcapacity=Capacidad de entrada text.blocks.outputcapacity=Capacidad de salida -setting.difficulty.easy=Fácil -setting.difficulty.normal=Mormal -setting.difficulty.hard=Difícil -setting.difficulty.insane=Insano -setting.difficulty.purge=Purga + +text.unit.blocks=bloques +text.unit.powersecond=unidades de energía/segundo +text.unit.liquidsecond=unidades de líquido/segundo +text.unit.itemssecond=objetos/segundo +text.unit.pixelssecond=píxeles/segundo +text.unit.liquidunits=unidades de líquido +text.unit.powerunits=unidades de energía +text.unit.degrees=grados +text.unit.seconds=segundos +text.unit.none= +text.unit.items=objetos + +text.category.general=General +text.category.power=Energía +text.category.liquids=Líquidos +text.category.items=Objetos +text.category.crafting=Fabricación +text.category.shooting=Disparo +setting.fpscap.name=Max FPS +setting.fpscap.none=Nada +setting.fpscap.text={0} FPS +setting.difficulty.easy=fácil +setting.difficulty.normal=normal +setting.difficulty.hard=difícil +setting.difficulty.insane=locura +setting.difficulty.purge=purgar setting.difficulty.name=Dificultad: -setting.screenshake.name=Shake de pantalla -setting.indicators.name=Indicador del enemigo -setting.effects.name=Mostrar efectos -setting.sensitivity.name=Sensibilidad del controlador -setting.saveinterval.name=Intervalo de autoguardado -setting.seconds=Segundos -setting.fullscreen.name=Pantalla completa -setting.multithread.name=Multithreading -setting.fps.name=Mostrar fps +setting.screenshake.name=Movimiento de la Pantalla +setting.indicators.name=Indicador de Enemigos +setting.effects.name=Mostrar Efectos +setting.sensitivity.name=Sensibilidad del Control +setting.saveinterval.name=Intervalo del Auto-guardado +setting.seconds={0} Segundos +setting.fullscreen.name=Pantalla Completa +setting.multithread.name=Multihilo +setting.fps.name=Mostrar FPS setting.vsync.name=VSync -setting.lasers.name=Mostrar láseres de poder -setting.healthbars.name=Mostrar barras de vida de enemigos y jugadores -setting.musicvol.name=Volumen de la música -setting.mutemusic.name=Apagar música -setting.sfxvol.name=Volumen de los efectos de sonido -setting.mutesound.name=Apagar sonidos -text.keybind.title=Vuelva a conectar las llaves -keybind.move_x.name=mover_x -keybind.move_y.name=mover_y -keybind.select.name=Elija -keybind.break.name=Romper -keybind.shoot.name=¡Dispara! -keybind.zoom_hold.name=Enfoque_Mantener -keybind.zoom.name=Enfoquè -keybind.menu.name=Menú +setting.lasers.name=Mostrar Energía de los Lasers +setting.healthbars.name=Mostrar la barra de Vida de las Entidades +setting.minimap.name=Mostrar Minimapa +setting.musicvol.name=Volumen de la Musica +setting.mutemusic.name=Mutear Musica +setting.sfxvol.name=Volumen de los SFX +setting.mutesound.name=Mutear Sonido +text.keybind.title=Reasignar Teclas +keybind.move_x.name=Mover x +keybind.move_y.name=Mover y +keybind.select.name=Seleccionar +keybind.break.name=Remover +keybind.shoot.name=Dispar +keybind.zoom_hold.name=Mantener Zoom +keybind.zoom.name=Zoom +keybind.menu.name=Menu keybind.pause.name=Pausa -keybind.dash.name=Deslizar +keybind.dash.name=Correr keybind.chat.name=Chat -keybind.player_list.name=Jugadores_lista -keybind.console.name=Console -keybind.rotate.name=Girar +keybind.player_list.name=Lista de jugadores +keybind.console.name=consola +keybind.rotate.name=Rotar mode.text.help.title=Descripción de modos -mode.waves.name=Hordas -mode.waves.description=El modo normal. Recursos limitados y las hordas vendrán automáticamente -mode.sandbox.name=Sandbox -mode.sandbox.description=Recursos infinitos y sin temporizador para las olas. -mode.freebuild.name=Construcción libre -mode.freebuild.description=Recursos limitados y sin tiempo definido para las hordas +mode.waves.name=hordas +mode.waves.description=el modo normal. con recursos limitados y entrada de hordas automática. +mode.sandbox.name=sandbox +mode.sandbox.description=recursos ilimitados y no hay temporizador para las hordas. +mode.sandbox.warning=Nota que los bloques no pueden ser usados en modo sandbox hasta que sean desbloqueados en otros modos.\n\n[LIGHT_GRAY]Si todavía no has desbloqueado un bloque, ningún aparecerá. +mode.freebuild.name=construcción libre +mode.freebuild.description=recursos limitados y no hay temporizador para las hordas. + +content.item.name=Objetos +content.liquid.name=Líquidos +content.unit-type.name=Unidades +content.recipe.name=Bloques + item.stone.name=Piedra +item.stone.description=Un material muy común. Usado para separar y para refinarse a otros objetos, y también derretir en lava. +item.tungsten.name=Tungsteno +item.tungsten.description=Un material de estructura común, pero muy útil. Usado en taladros y bloques con resistencia al calor como generadores y hornos. +item.lead.name=Plomo +item.lead.description=Un material básico. Usado extensivamente en electrónicos y bloques de transferencia de líquidos. item.coal.name=Carbón +item.coal.description=Un combustible común y preparado para ser quemado. +item.carbide.name=Carburo +item.carbide.description=Una aleación dura hecha con tungsteno y carbón. Usado en bloques avanzados de transportación y taladros de alto nivel. item.titanium.name=Titanio +item.titanium.description=Un metal raro super ligero usado extensivamente en transportación de liquidos, taladros y aeronaves. +item.thorium.name=Torio +item.thorium.description=Un metal radiactivo, muy denso usado en soporte de estructuras y combustible nuclear. +item.silicon.name=Silicona +item.silcion.description=Un semiconductor muy útil, se usa para paneles solares y muchos electrónicos complejos. +item.plastanium.name=Plastanio +item.plastanium.description=Un material dúctil, ligero usado en aeronaves y proyectiles de fragmentación. +item.phase-matter.name=Materia de Fase +item.surge-alloy.name=Surge Alloy +item.biomatter.name=Biomateria +item.biomatter.description=Una bola de restos orgánicos; usado para convertirlo a petróleo o combustible básico. item.sand.name=Arena +item.sand.description=Un material común que es usado extensivamente en la fundición, para alear y como fundente. +item.blast-compound.name=Compuesto Explosivo +item.blast-compound.description=Un compuesto volatil usado en bombas y explosivos. Aunque se puede quemar como combustible, esto no es recomendable. +item.pyratite.name=Pirotita +item.pyratite.description=Una substancia extremadamente inflamable usada en armas incendiarias. + liquid.water.name=Agua liquid.lava.name=Lava -liquid.oil.name=Aceite +liquid.oil.name=Petróleo +liquid.cryofluid.name=Criogénico + +text.item.explosiveness=[LIGHT_GRAY]Explosividad: {0} +text.item.flammability=[LIGHT_GRAY]Inflamabilidad: {0} +text.item.radioactivity=[LIGHT_GRAY]Radioactividad: {0} +text.item.fluxiness=[LIGHT_GRAY]Poder como Fundente: {0} +text.item.hardness=[LIGHT_GRAY]Dureza: {0} + +text.unit.health=[LIGHT_GRAY]Vida: {0} +text.unit.speed=[LIGHT_GRAY]Velocidad: {0} + +text.liquid.heatcapacity=[LIGHT_GRAY]Capacidad Térmica: {0} +text.liquid.viscosity=[LIGHT_GRAY]Viscosidad: {0} +text.liquid.temperature=[LIGHT_GRAY]Temperatura: {0} + +block.deepwater.name=aguas profundas +block.water.name=agua +block.lava.name=lava +block.oil.name=petróleo +block.blackstone.name=piedra negra +block.stone.name=piedra +block.dirt.name=tierra +block.sand.name=arena +block.ice.name=hielo +block.snow.name=nieve +block.grass.name=pasto +block.shrub.name=arbusto +block.rock.name=roca +block.blackrock.name=roca negra +block.icerock.name=roca de hielo +block.tungsten-wall.name=Pared de Tungsteno +block.tungsten-wall-large.name=Pared de Tungsteno Larga +block.carbide-wall.name=Pared de Carburo +block.carbide-wall-large.name=Pared de Carburo Larga +block.thorium-wall.name=Pared de Torio +block.thorium-wall-large.name=Pared de Torio Larga block.door.name=Puerta -block.door-large.name=Puerta grande -block.conduit.name=Conducto -block.pulseconduit.name=Conducto de pulso -block.liquidrouter.name=Enrutador líquido -block.conveyor.name=Transportador +block.door-large.name=Puerta Larga +block.duo.name=Dúo +block.scorch.name=Lanzallamas +block.hail.name=Granizo +block.lancer.name=Lancero +block.conveyor.name=Cinta Transportadora +block.titanium-conveyor.name=Cinta Transportadora de Titanio +block.junction.name=Cruce +block.splitter.name=Enrutador +block.splitter.description=Saca los objetos en tres posiciones diferentes cuando son recibidas. block.router.name=Enrutador -block.junction.name=Union -block.liquidjunction.name=Unión líquida +block.router.description=Separa los objetos en las 4 direcciones. Puede guardar objetos en un buffer. +block.distributor.name=Distribuidor +block.distributor.description=Un separador que puede separar en 8 direcciones. block.sorter.name=Clasificador -block.smelter.name=horno de fundición -text.web.unsupported=The web version does not support this feature! Download the game to use it. -text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"? -text.construction.title=Block Construction Guide -text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left. -text.deconstruction.title=Block Deconstruction Guide -text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left. -text.showagain=Don't show again next session -text.unlocks=Unlocks -text.addplayers=Add/Remove Players -text.maps=Maps -text.maps.none=[LIGHT_GRAY]No maps found! -text.unlocked=New Block Unlocked! -text.unlocked.plural=New Blocks Unlocked! -text.server.kicked.fastShoot=You are shooting too quickly. -text.server.kicked.nameInUse=There is someone with that name\nalready on this server. -text.server.kicked.nameEmpty=Your name must contain at least one character or number. -text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted. -text.server.kicked.customClient=This server does not support custom builds. Download an official version. -text.changelog.error.ios=[orange]The changelog is currently not supported in iOS. -text.saving=[accent]Saving... -text.unknown=Unknown -text.custom=Custom -text.builtin=Built-In -text.map.delete.confirm=Are you sure you want to delete this map? This action cannot be undone! -text.map.random=[accent]Random Map -text.map.nospawn=This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor. -text.editor.slope=\\ -text.editor.openin=Open In Editor -text.editor.oregen=Ore Generation -text.editor.oregen.info=Ore Generation: -text.editor.mapinfo=Map Info -text.editor.author=Author: -text.editor.description=Description: -text.editor.name=Name: -text.editor.teams=Teams -text.editor.elevation=Elevation -text.editor.saved=Saved! -text.editor.save.noname=Your map does not have a name! Set one in the 'map info' menu. -text.editor.save.overwrite=Your map overwrites a built-in map! Pick a different name in the 'map info' menu. -text.editor.import.exists=[scarlet]Unable to import:[] a built-in map named '{0}' already exists! -text.editor.import=Import... -text.editor.importmap=Import Map -text.editor.importmap.description=Import an already existing map -text.editor.importfile=Import File -text.editor.importfile.description=Import an external map file -text.editor.importimage=Import Terrain Image -text.editor.importimage.description=Import an external map image file -text.editor.export=Export... -text.editor.exportfile=Export File -text.editor.exportfile.description=Export a map file -text.editor.exportimage=Export Terrain Image -text.editor.exportimage.description=Export a map image file -text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? -text.fps=FPS: {0} -text.tps=TPS: {0} -text.ping=Ping: {0}ms -text.settings.rebind=Rebind -text.yes=Yes -text.no=No -text.blocks.targetsair=Targets Air -text.blocks.itemspeed=Units Moved -text.blocks.shootrange=Range -text.blocks.poweruse=Power Use -text.blocks.inputitemcapacity=Input Item Capacity -text.blocks.outputitemcapacity=Input Item Capacity -text.blocks.maxpowergeneration=Max Power Generation -text.blocks.powertransferspeed=Power Transfer -text.blocks.craftspeed=Production Speed -text.blocks.inputliquidaux=Aux Liquid -text.blocks.inputitems=Input Items -text.blocks.outputitem=Output Item -text.blocks.drilltier=Drillables -text.blocks.drillspeed=Base Drill Speed -text.blocks.liquidoutput=Liquid Output -text.blocks.liquiduse=Liquid Use -text.blocks.coolant=Coolant -text.blocks.coolantuse=Coolant Use -text.blocks.inputliquidfuel=Fuel Liquid -text.blocks.liquidfueluse=Liquid Fuel Use -text.blocks.reload=Reload -text.blocks.inputfuel=Fuel -text.blocks.fuelburntime=Fuel Burn Time -text.unit.blocks=blocks -text.unit.powersecond=power units/second -text.unit.liquidsecond=liquid units/second -text.unit.itemssecond=items/second -text.unit.pixelssecond=pixels/second -text.unit.liquidunits=liquid units -text.unit.powerunits=power units -text.unit.degrees=degrees -text.unit.seconds=seconds -text.unit.none= -text.unit.items=items -text.category.general=General -text.category.power=Power -text.category.liquids=Liquids -text.category.items=Items -text.category.crafting=Crafting -text.category.shooting=Shooting -setting.minimap.name=Show Minimap -content.item.name=Items -content.liquid.name=Liquids -content.unit-type.name=Units -content.recipe.name=Blocks -item.stone.description=A common raw material. Used for separating and refining into other materials, or melting into lava. -item.tungsten.name=Tungsten -item.tungsten.description=A common, but very useful structure material. Used in drills and heat-resistant blocks such as generators and smelteries. -item.lead.name=Lead -item.lead.description=A basic starter material. Used extensively in electronics and liquid transportation blocks. -item.coal.description=A common and readily available fuel. -item.carbide.name=Carbide -item.carbide.description=A tough alloy made with tungsten and carbon. Used in advanced transportation blocks and high-tier drills. -item.titanium.description=A rare super-light metal used extensively in liquid transportation, drills and aircraft. -item.thorium.name=Thorium -item.thorium.description=A dense, radioactive metal used as structural support and nuclear fuel. -item.silicon.name=Silicon -item.silcion.description=An extremely useful semiconductor, with applications in solar panels and many complex electronics. -item.plastanium.name=Plastanium -item.plastanium.description=A light, ductile material used in advanced aircraft and fragmentation ammunition. -item.phase-matter.name=Phase Matter -item.surge-alloy.name=Surge Alloy -item.biomatter.name=Biomatter -item.biomatter.description=A clump of organic mush; used for conversion into oil or as a basic fuel. -item.sand.description=A common material that is used extensively in smelting, both in alloying and as a flux. -item.blast-compound.name=Blast Compound -item.blast-compound.description=A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. -item.pyratite.name=Pyratite -item.pyratite.description=An extremely flammable substance used in incendiary weapons. -liquid.cryofluid.name=Cryofluid -text.item.explosiveness=[LIGHT_GRAY]Explosiveness: {0} -text.item.flammability=[LIGHT_GRAY]Flammability: {0} -text.item.radioactivity=[LIGHT_GRAY]Radioactivity: {0} -text.item.fluxiness=[LIGHT_GRAY]Flux Power: {0} -text.item.hardness=[LIGHT_GRAY]Hardness: {0} -text.liquid.heatcapacity=[LIGHT_GRAY]Heat Capacity: {0} -text.liquid.viscosity=[LIGHT_GRAY]Viscosity: {0} -text.liquid.temperature=[LIGHT_GRAY]Temperature: {0} -block.tungsten-wall.name=Tungsten Wall -block.tungsten-wall-large.name=Large Tungsten Wall -block.carbide-wall.name=Carbide Wall -block.carbide-wall-large.name=Large Carbide Wall -block.thorium-wall.name=Thorium Wall -block.thorium-wall-large.name=Large Thorium Wall -block.duo.name=Duo -block.scorch.name=Scorch -block.hail.name=Hail -block.lancer.name=Lancer -block.titanium-conveyor.name=Titanium Conveyor -block.splitter.name=Splitter -block.splitter.description=Outputs items into two opposite directions immediately after they are recieved. -block.router.description=Splits items into all 4 directions. Can store items as a buffer. -block.distributor.name=Distributor -block.distributor.description=A splitter that can split items into 8 directions. -block.sorter.description=Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right. -block.overflow-gate.name=Overflow Gate -block.overflow-gate.description=A combination splitter and router that only outputs to the left and right if the front path is blocked. -block.bridgeconveyor.name=Bridge Conveyor -block.bridgeconveyor.description=A conveyor that can go over other blocks, for up to two total blocks. -block.arc-smelter.name=Arc Smelter -block.silicon-smelter.name=Silicon Smelter -block.phase-weaver.name=Phase Weaver -block.pulverizer.name=Pulverizer -block.cryofluidmixer.name=Cryofluid Mixer -block.melter.name=Melter -block.incinerator.name=Incinerator -block.biomattercompressor.name=Biomatter Compressor -block.separator.name=Separator -block.centrifuge.name=Centrifuge -block.power-node.name=Power Node -block.power-node-large.name=Large Power Node -block.battery.name=Battery -block.battery-large.name=Large Battery -block.combustion-generator.name=Combustion Generator -block.turbine-generator.name=Turbine Generator -block.tungsten-drill.name=Tungsten Drill -block.carbide-drill.name=Carbide Drill -block.laser-drill.name=Laser Drill -block.water-extractor.name=Water Extractor -block.cultivator.name=Cultivator -block.dart-ship-factory.name=Dart Ship Factory -block.delta-mech-factory.name=Delta Mech Factory -block.repairpoint.name=Repair Point -block.resupplypoint.name=Resupply Point -block.liquidtank.name=Liquid Tank -block.bridgeconduit.name=Bridge Conduit -block.mechanical-pump.name=Mechanical Pump -block.itemsource.name=Item Source -block.itemvoid.name=Item Void -block.liquidsource.name=Liquid Source -block.powervoid.name=Power Void -block.powerinfinite.name=Power Infinite -block.unloader.name=Unloader -block.sortedunloader.name=Sorted Unloader -block.vault.name=Vault -block.wave.name=Wave -block.swarmer.name=Swarmer -block.salvo.name=Salvo -block.ripple.name=Ripple -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.solidifer.name=Solidifer -block.solar-panel.name=Solar Panel -block.solar-panel-large.name=Large Solar Panel -block.oil-extractor.name=Oil Extractor -block.javelin-ship-factory.name=Javelin Ship factory -block.repair-point.name=Repair Point -block.resupply-point.name=Resupply Point -block.pulse-conduit.name=Pulse 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.nuclear-reactor.name=Nuclear Reactor -text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release. -text.customgame=Custom Game -text.campaign=Campaign -text.sectors=Sectors -text.sector=Selected Sector: [LIGHT_GRAY]{0} -text.sector.time=Time: [LIGHT_GRAY]{0} -text.sector.deploy=Deploy -text.sector.resume=Resume -text.sector.locked=[scarlet][[Incomplete] -text.sector.unexplored=[accent][[Unexplored] -text.close=Close -text.save.playtime=Playtime: {0} -text.editor.brush=Brush -text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) -text.sector.gameover=This sector has been lost. Re-deploy? -text.sector.retry=Retry -text.wave.lasted=You lasted until wave [accent]{0}[]. -setting.fpscap.name=Max FPS -setting.fpscap.none=None -setting.fpscap.text={0} FPS -block.command-center.name=Command Center -text.mission=Mission:[LIGHT_GRAY] {0} -text.mission.wave=Survive [accent]{0}[] waves. -text.mission.battle=Destroy the enemy base. -text.none= -text.sector.corrupted=[orange]A save file for this sector was found, but loading failed.\nA new one has been created. -text.mission.complete=Mission complete! -text.mission.complete.body=Sector {0},{1} has been conquered. -text.mission.resource=Obtain {0} x{1} -text.unit.health=[LIGHT_GRAY]Health: {0} -text.unit.speed=[LIGHT_GRAY]Speed: {0} -block.drone-pad.name=Drone Pad -block.fabricator-pad.name=Fabricator Pad -block.interceptor-pad.name=Interceptor Pad -block.monsoon-pad.name=Monsoon Pad -block.mass-driver.name=Mass Driver -block.blast-drill.name=Blast Drill -unit.drone.name=Drone -unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. -unit.fabricator.name=Fabricator -unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. -unit.titan.name=Titan -unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. -unit.monsoon.name=Monsoon -unit.monsoon.description=A heavy carpet bomber. Uses blast compound or pyratite as ammo. -unit.interceptor.name=Interceptor -unit.interceptor.description=A fast, hit-and-run strike unit. Uses lead as ammo. -mode.sandbox.warning=Note that blocks cannot be used in sandbox mode until they are unlocked in other modes.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -block.thermal-pump.name=Thermal Pump -block.dagger-pad.name=Dagger Pad -block.titan-pad.name=Titan Pad -block.thermal-generator.name=Thermal Generator +block.sorter.description=Clasifica objetos. Si un objeto es igual a uno seleccionado, va a pasar. O si no, el objeto saldrá en la izquierda y la derecha. +block.overflow-gate.name=Compuerta de Desborde +block.overflow-gate.description=Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. +block.bridgeconveyor.name=Puente Transportador +block.bridgeconveyor.description=Una cinta transportadora que puede estar arriba de otros bloques, para un máximo de dos bloques. +block.smelter.name=Horno de Fundición +block.arc-smelter.name=Horno de Arco Eléctrico +block.silicon-smelter.name=Horno para Silicona +block.phase-weaver.name=Tejedor de Fase +block.pulverizer.name=Pulverizador +block.cryofluidmixer.name=Mezclador de Criogénicos +block.melter.name=Fundidor +block.incinerator.name=Incinerador +block.biomattercompressor.name=Compresor de Biomateria +block.separator.name=Separador +block.centrifuge.name=Centrifugadora +block.power-node.name=Nodo de Energía +block.power-node-large.name=Nodo de Energía Largo +block.battery.name=Batería +block.battery-large.name=Batería Larga +block.combustion-generator.name=Generador de Combustión +block.turbine-generator.name=Turbina +block.tungsten-drill.name=Taladro de Tungsteno +block.carbide-drill.name=Taladro de Carburo +block.laser-drill.name=Taladro Laser +block.water-extractor.name=Extractor de Agua +block.cultivator.name=Cultivador +block.dart-ship-factory.name=Reconstructor de Nave Dardo +block.delta-mech-factory.name=Reconstructor de Mecha Delta +block.javelin-ship-factory.name=Reconstructor de Nave Jabalina +block.repairpoint.name=Punto de Reparación +block.resupplypoint.name=Punto de Reabastecimiento +block.conduit.name=Conducto +block.pulseconduit.name=Conducto de Pulso +block.liquidrouter.name=Enrutador de Líquidos +block.liquidtank.name=Tanque de Líquido +block.liquidjunction.name=Cruce de Líquidos +block.bridgeconduit.name=Conducto Puente +block.mechanical-pump.name=Bomba Mecánica +block.itemsource.name=Objeto Fuente +block.itemvoid.name=Objeto Vacío +block.liquidsource.name=Líquido Fuente +block.powervoid.name=Energía Vacía +block.powerinfinite.name=Energía Infinita +block.unloader.name=Descargador +block.sortedunloader.name=Descargador Clasificado +block.vault.name=Bóveda +block.wave.name=Horda +block.swarmer.name=Enjambredor +block.salvo.name=Salva +block.ripple.name=Onda +block.phase-conveyor.name=Cinta Transportadora de Fase +block.bridge-conveyor.name=Cinta Transportadora Puente +block.plastanium-compressor.name=Compresor de Plastanio +block.pyratite-mixer.name=Mezclador de Pirotita +block.blast-mixer.name=Mezclador de Explosivos +block.solidifer.name=Solidificador +block.solar-panel.name=Panel Solar +block.solar-panel-large.name=Panel Solar Largo +block.oil-extractor.name=Extractor de Petróleo +block.drone-pad.name=Plataforma de Drones +block.fabricator-pad.name=Plataforma de Fabricación +block.interceptor-pad.name=Plataforma Interceptadora +block.monsoon-pad.name=Plataforma de Monzón +block.repair-point.name=Punto de Reparación +block.resupply-point.name=Punto de Reabastecimiento +block.pulse-conduit.name=Conducto de Pulso +block.phase-conduit.name=Conducto de Fase +block.liquid-router.name=Enrutador de Líquidos +block.liquid-tank.name=Tanque de Líquido +block.liquid-junction.name=Cruce de Líquidos +block.bridge-conduit.name=Conducto Puente +block.rotary-pump.name=Bomba Rotatoria +block.nuclear-reactor.name=Reactor Nuclear +block.command-center.name=Centro de Comando +block.mass-driver.name=Teletransportador de Masa +block.blast-drill.name=Taladro Gigante +block.thermal-pump.name=Bomba Térmica +block.dagger-pad.name=Plataforma de Daga +block.titan-pad.name=Plataforma de Titán +block.thermal-generator.name=Generador Térmico + +unit.drone.name=Dron +unit.drone.description=La unidad dron del comienzo. Aparece en el núcleo por defecto. Automáticamente mina minerales, recolecta objetos y repara bloques. +unit.fabricator.name=Fabricador +unit.fabricator.description=Una unidad dron avanzada. Automáticamente mina minerales, recolecta objetos y repara bloques. Mucho más efectivo que el dron. +unit.dagger.name=Daga +unit.dagger.description=Una unidad de terreno. Útil con enjambres. +unit.titan.name=Titán +unit.titan.description=Una unidad blindada de terreno, avanzada. Ataca blancos de aire y de terreno. +unit.monsoon.name=Monzón +unit.monsoon.description=Un bombardero pesado de alfombra. Usa pirotita o compuestos explosivos. +unit.interceptor.name=Interceptador +unit.interceptor.description=Una unidad de ataque que pega y corre, muy veloz. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 05733570dc..6e2d375621 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -16,7 +16,6 @@ text.players.single=joueur en ligne text.server.mismatch=Erreur de paquet: possible incompatibilité de version client/serveur. Assurez-vous que vous et l'hôte avez la dernière version de Mindustry! text.server.closing=[accent]Fermeture du serveur ... text.server.kicked.kick=Vous avez été expulsé du serveur! -text.server.kicked.invalidPassword=Mot de passe non valide ! text.server.kicked.clientOutdated=Client dépassé! Mettez à jour votre jeu! text.server.kicked.serverOutdated=Serveur dépassé! Demandez à l'hôte de le mettre à jour! text.server.kicked.banned=Vous êtes banni sur ce serveur. @@ -224,19 +223,20 @@ block.liquidjunction.name=jonction à liquide block.sorter.name=trieur block.smelter.name=fonderie text.credits=Credits -text.link.discord.description=the official Mindustry discord chatroom -text.link.github.description=Game source code -text.link.dev-builds.description=Unstable development builds -text.link.trello.description=Official trello board for planned features -text.link.itch.io.description=itch.io page with PC downloads and web version -text.link.google-play.description=Google Play store listing -text.link.wiki.description=official Mindustry wiki -text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard. -text.editor.web=The web version does not support the editor!\nDownload the game to use it. -text.web.unsupported=The web version does not support this feature! Download the game to use it. -text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"? -text.construction.title=Block Construction Guide -text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left. +text.link.discord.description=Le discord officiel de Mindustry +text.link.github.description=code source du jeu +text.link.dev-builds.description=version de développement instable +text.link.trello.description=le tableau trelli officiel pour les futures ajouts +text.link.itch.io.description=la page itch.io avec la version Web et PC à télécharger + +text.link.google-play.description=la page Google play Store +text.link.wiki.description=wiki officiel de Mindustry +text.linkfail=Erreur lors de l'ouverture du lien !\nL'URL as bien été copier dans le presse-papiers. +text.editor.web=Votre navigateur ne supporte pas l'éditeur !\nTéléchargez le jeu pour l'utiliser. +text.web.unsupported=votre navigateur ne supporte pas cette fonctionnalité ! Téléchargez le jeu pour l'utiliser. +text.map.delete=êtes vous sûre de supprimer la carte "[orange]{0}[]"? +text.construction.title=Guide des blocs de construction +text.construction=Voou avez sélectionné le [accent]mode de construction de blocs[].\n\n pour commencer à en placer, taper sur un emplacement validé près de votre vaisseau '.\nUne fois que vous avez sélectionné des blocs, appuyez sur la flèche pour valider, et votre vaisseau va les construire.\n\n- [accent]Enlever des blocs[] de votre sélection en les touchant.\n- [accent]étendez la sélection[] en maintenant et en étirant les blocs de la selection.\n- [accent]Placer des blocs en ligne[] en touchant et en laissant appuyer sur une case vide, puis étirez dans une direction.\n- [accent]Annulez une construction ou une selection[]en appuyant sur X en bas à gauche . text.deconstruction.title=Block Deconstruction Guide text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left. text.showagain=Don't show again next session @@ -464,7 +464,6 @@ block.rotary-pump.name=Rotary Pump block.nuclear-reactor.name=Nuclear Reactor text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release. text.customgame=Custom Game -text.campaign=Campaign text.sectors=Sectors text.sector=Selected Sector: [LIGHT_GRAY]{0} text.sector.time=Time: [LIGHT_GRAY]{0} @@ -503,8 +502,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +513,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index e69195ed9e..c198499407 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -16,7 +16,6 @@ text.players.single={0} pemain online text.server.mismatch=Kesalahan paket: kemungkinan versi client / server tidak sesuai.\nPastikan Anda dan host memiliki versi terbaru Mindustry! text.server.closing=[accent]Menutup server... text.server.kicked.kick=Anda telah dikeluarkan dari server! -text.server.kicked.invalidPassword=Kata sandi salah! text.server.kicked.clientOutdated=Client versi lama! Update game Anda! text.server.kicked.serverOutdated=Server versi lama! Tanyakan host untuk mengupdate! text.hostserver=Host Server @@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump block.nuclear-reactor.name=Nuclear Reactor text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release. text.customgame=Custom Game -text.campaign=Campaign text.sectors=Sectors text.sector=Selected Sector: [LIGHT_GRAY]{0} text.sector.time=Time: [LIGHT_GRAY]{0} @@ -503,8 +501,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_ita.properties b/core/assets/bundles/bundle_ita.properties index 413e6a94c0..13affd756b 100644 --- a/core/assets/bundles/bundle_ita.properties +++ b/core/assets/bundles/bundle_ita.properties @@ -26,7 +26,6 @@ text.players.single={0} giocatori online text.server.mismatch=Errore nel pacchetto: possibile discrepanza nella versione client / server. Assicurati che tu e l'host abbiate l'ultima versione di Mindustry! text.server.closing=[accent]Chiusura server ... text.server.kicked.kick=Sei stato cacciato dal server! -text.server.kicked.invalidPassword=Password non valida. text.server.kicked.clientOutdated=Versione del client obsoleta! Aggiorna il tuo gioco! text.server.kicked.serverOutdated=Server obsoleto! Chiedi all'host di aggiornare! text.server.kicked.banned=Sei bannato da questo server. @@ -254,7 +253,6 @@ text.showagain=non mostrare più text.unlocks=Sblocchi text.addplayers=Aggiungi/rimuovi giocatori text.customgame=Gioco personalizzato -text.campaign=Campagna text.sectors=Settori text.sector=Settori Selezionati: [LIGHT_GRAY]{0} text.sector.time=Tempo: [LIGHT_GRAY]{0} @@ -308,28 +306,28 @@ text.editor.export=Esportazione... text.editor.exportfile=Esporta file text.editor.exportfile.description=Esporta file mappa text.editor.exportimage=Esporta immagine terreno -text.editor.exportimage.description=Export a map image file -text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? +text.editor.exportimage.description=Esporta file immagine mappa +text.editor.overwrite.confirm=[scarlet]Attenzione![] Una mappa con questo nome esiste già. Sei sicuro di volerla sovrascrivere? text.fps=FPS: {0} text.tps=TPS: {0} text.ping=Ping: {0}ms -text.settings.rebind=Rebind -text.yes=Yes +text.settings.rebind=Reinposta +text.yes=Si text.no=No -text.blocks.targetsair=Targets Air -text.blocks.itemspeed=Units Moved -text.blocks.shootrange=Range -text.blocks.poweruse=Power Use -text.blocks.inputitemcapacity=Input Item Capacity -text.blocks.outputitemcapacity=Input Item Capacity -text.blocks.maxpowergeneration=Max Power Generation -text.blocks.powertransferspeed=Power Transfer -text.blocks.craftspeed=Production Speed -text.blocks.inputliquidaux=Aux Liquid -text.blocks.inputitems=Input Items -text.blocks.outputitem=Output Item -text.blocks.drilltier=Drillables -text.blocks.drillspeed=Base Drill Speed +text.blocks.targetsair=Attacca nemici aerei +text.blocks.itemspeed=Unità spostate +text.blocks.shootrange=Raggio +text.blocks.poweruse=Utilizzo energia +text.blocks.inputitemcapacity=Capacità oggetti in entrata +text.blocks.outputitemcapacity=Capacità oggetti in uscità +text.blocks.maxpowergeneration=Produzione massima energia +text.blocks.powertransferspeed=Velocità trasferimento energia +text.blocks.craftspeed=Velocità produzione +text.blocks.inputliquidaux=Liquidi extra +text.blocks.inputitems=Oggetti in entrata +text.blocks.outputitem=Oggetti in uscita +text.blocks.drilltier=Scavabili +text.blocks.drillspeed=Velocità scavo stbile text.blocks.liquidoutput=Uscita liquidi text.blocks.liquiduse=Uso liquidi text.blocks.coolant=Refrigerante @@ -508,11 +506,36 @@ unit.drone.name=Drone unit.drone.description=Un'unità base, che mina e costruisce. unit.fabricator.name=Costruttore unit.fabricator.description=Un drone molto avanzato che raccoglie minerali e costruisce molto meglio e più velocemente di un drone base. -unit.scout.name=Esploratore -unit.scout.description=Un unità di base a terra. Usa piombo come munizioni. unit.titan.name=Titano unit.titan.description=Un'unità di terra corazzata avanzata. Utilizza carburo come munizione. Attacca sia bersagli terrestri che aerei. unit.monsoon.name=Monsone unit.monsoon.description=Un bombardiere molto potente, che raderà al suolo chiunque gli passi davanti. unit.interceptor.name=Intercettatore unit.interceptor.description=Un veloce ed efficiente torretta che funziona con il piombo. +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 9eb3daa3ec..e194623f7b 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -40,7 +40,6 @@ text.server.mismatch=클라이언트와 서버 버전이 일치하지 않습니 text.server.closing=[accent]서버 닫는중... text.server.kicked.kick=당신은 서버에서 추방되었습니다! text.server.kicked.fastShoot=당신은 총을 너무 빨리 발사했습니다. -text.server.kicked.invalidPassword=알 수 없는 비밀번호 입니다! text.server.kicked.clientOutdated=오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요! text.server.kicked.serverOutdated=오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요! text.server.kicked.banned=당신은 서버에서 밴 망치를 맞아 차단당했습니다. @@ -281,7 +280,6 @@ text.category.liquids=액체 text.category.items=아이템 text.category.crafting=제작 text.category.shooting=사격 - setting.difficulty.easy=쉬움 setting.difficulty.normal=보통 setting.difficulty.hard=어려움 @@ -304,9 +302,7 @@ setting.musicvol.name=음악 크기 setting.mutemusic.name=음소거 setting.sfxvol.name=효과음 크기 setting.mutesound.name=소리 끄기 - text.keybind.title=키 바인딩 - keybind.move_x.name=오른쪽/왼쪽 이동 keybind.move_y.name=위쪽/아래쪽 이동 keybind.select.name=선택 @@ -321,7 +317,6 @@ keybind.chat.name=채팅 keybind.player_list.name=플레이어 목록 keybind.console.name=콘솔 keybind.rotate.name=회전 - mode.text.help.title=도움말 mode.waves.name=단계 mode.waves.description=이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다. @@ -329,12 +324,10 @@ mode.sandbox.name=샌드박스 mode.sandbox.description=무한한 자원과 다음단계 시작을 위한 타이머가 없습니다. mode.freebuild.name=자유 건축 mode.freebuild.description=제한된 자원과 다음단계 시작을 위한 타이머가 없습니다. - content.item.name=아이템 content.liquid.name=액체 content.unit-type.name=종류 content.recipe.name=블록 - item.stone.name=돌 item.stone.description=흔히 찾을 수 있는 자원. 바닥에서 돌을 캐거나 용암을 사용하여 얻을 수 있습니다. item.tungsten.name=텅스텐 @@ -363,12 +356,10 @@ item.blast-compound.name=폭발 화합물 item.blast-compound.description=폭탄 및 폭발물에 사용되는 휘발성 화합물. 이 연료로 불을 낼 수 있지만, 별로 추천하지는 않습니다. item.pyratite.name=피러레이트 item.pyratite.description=화염 무기에 사용되는 엄청난 가연성 물질. - liquid.water.name=물 liquid.lava.name=용암 liquid.oil.name=석유 liquid.cryofluid.name=냉각수 - text.item.explosiveness=[LIGHT_GRAY]폭발력:{0} text.item.flammability=[LIGHT_GRAY]인화성:{0} text.item.radioactivity=[LIGHT_GRAY]방사능:{0} @@ -377,7 +368,6 @@ text.item.hardness=[LIGHT_GRAY]강도:{0} text.liquid.heatcapacity=[LIGHT_GRAY]발열량:{0} text.liquid.viscosity=[LIGHT_GRAY]점도:{0} text.liquid.temperature=[LIGHT_GRAY]온도:{0} - block.deepwater.name=깊은물 block.water.name=물 block.lava.name=용암 @@ -485,10 +475,8 @@ block.liquid-junction.name=액체 교차기 block.bridge-conduit.name=다리 파이프 block.rotary-pump.name=동력 펌프 block.nuclear-reactor.name=원자로 - text.save.old=이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다. text.customgame=커스텀 게임 -text.campaign=캠페인 text.sectors=구역 text.sector=선택된 구역:[LIGHT_GRAY]{0} text.sector.time=시간:[LIGHT_GRAY]{0} @@ -503,13 +491,10 @@ text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GR text.sector.gameover=이 구역을 잃었습니다. 다시 배치하시겠습니까? text.sector.retry=다시할꺼임 text.wave.lasted=[accent]{0}[] 까지 버티셨습니다. - setting.fpscap.name=최대 FPS setting.fpscap.none=없음 setting.fpscap.text={0} FPS - block.command-center.name=명령 본부 - text.mission=목표:[LIGHT_GRAY] {0} text.mission.wave=[accent]{0}[]단계가 될때까지 생존하세요. text.mission.battle=적 본부를 파괴하세요. @@ -520,20 +505,16 @@ text.mission.complete.body=구역 {0},{1} 탐색 성공. text.mission.resource=Obtain {0} x{1} text.unit.health=[LIGHT_GRAY]체력:{0} text.unit.speed=[LIGHT_GRAY]속도:{0} - block.drone-pad.name=드론 공장 block.fabricator-pad.name=페버 공장 block.interceptor-pad.name=인터셉터 공장 block.monsoon-pad.name=문순 공장 block.mass-driver.name=물질 이동기 block.blast-drill.name=고속 발열 드릴 - unit.drone.name=드론 unit.drone.description=초기형 드론 유닛입니다. 기본적으로 코어에서 1대를 스폰합니다. 자동으로 아이템을 수집/채광하며 블럭들을 수리합니다. unit.fabricator.name=페버 unit.fabricator.description=고급 드론 유닛입니다. 자동으로 아이템과 수집/채광/블록들을 수리하며, 일반 드론보다 더 빠르게 작업할 수 있습니다. -unit.scout.name=스카웃 -unit.scout.description=기본 지상 유닛입니다. 납을 탄약으로 사용합니다. unit.titan.name=타이탄 unit.titan.description=고급 지상 유닛입니다. 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다. unit.monsoon.name=문순 @@ -542,9 +523,19 @@ unit.interceptor.name=인터셉터 unit.interceptor.description=빠르고, 공격하고 튀는 방식을 사용합니다. 납을 탄약으로 사용합니다. unit.dagger.name=디거 unit.dagger.description=기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다. - mode.sandbox.warning=Note that blocks cannot be used in sandbox mode until they are unlocked in other modes.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. block.thermal-pump.name=지열 펌프 block.dagger-pad.name=디거 공장 block.titan-pad.name=타이탄 공장 -block.thermal-generator.name=지열 발전기 \ No newline at end of file +block.thermal-generator.name=지열 발전기 +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +setting.difficulty.purge=purge +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index e23156e686..33fb18bf2d 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -16,7 +16,6 @@ text.players.single={0} gracz online text.server.mismatch=Błąd pakietu: możliwa niezgodność wersji klienta/serwera.\nUpewnij się, że Ty i host macie najnowszą wersję Mindustry! text.server.closing=[accent] Zamykanie serwera ... text.server.kicked.kick=Zostałeś wyrzucony z serwera! -text.server.kicked.invalidPassword=Nieprawidłowe hasło! text.server.kicked.clientOutdated=Nieaktualna gra! Zaktualizują ją! text.server.kicked.serverOutdated=Nieaktualna gra! Zaktualizują ją! text.hostserver=Stwórz Serwer @@ -462,7 +461,6 @@ block.rotary-pump.name=Wirowa Pompa block.nuclear-reactor.name=Reaktor Nuklearny text.save.old=Ten zapis jest ze starej wersji i gra nie może go teraz wczytać.\n\n[LIGHT_GRAY]Wsparcie starych zapisów będzie w pełnej wersji 4.0. text.customgame=Własna Gra -text.campaign=Kampania text.sectors=Sektory text.sector=Wybrany Sektor: [LIGHT_GRAY]{0} text.sector.time=Czas: [LIGHT_GRAY]{0} @@ -503,8 +501,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index eb0579d4d2..13a657a115 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -162,7 +162,6 @@ text.server.mismatch=Packet error: Versão do Cliente/Servidor Incompativel.\nTe text.server.closing=[accent]Fechando servidor... text.server.kicked.kick=Voce foi expulso do servidor! text.server.kicked.fastShoot=Voce esta atirando rapido demais. -text.server.kicked.invalidPassword=Senha Incorreta! text.server.kicked.clientOutdated=Cliente desatualizado! Atualize seu jogo! text.server.kicked.serverOutdated=Servidor desatualiado! Peca ao dono para atualizar! text.server.kicked.banned=Voce foi banido do servidor. @@ -463,7 +462,6 @@ block.rotary-pump.name=Bomba Rotatoria block.nuclear-reactor.name=Reator Nuclear text.save.old=Este save é para uma versão antiga do jogo, E não pode ser usado.\n\n[LIGHT_GRAY]Salvar Versões antigas vai ser Implementado Na versão 4.0 completa text.customgame=Jogo Customizado -text.campaign=Campanha text.sectors=Setores text.sector=Setor Selecionado: [LIGHT_GRAY]{0} text.sector.time=Tempo: [LIGHT_GRAY]{0} @@ -503,8 +501,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index a5e1427a13..cde9a41b32 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -33,7 +33,6 @@ text.loadgame=Загрузить игру text.joingame=Присоединиться text.addplayers=Доб/удалить игроков text.customgame=Пользовательская игра -text.campaign=Кампания text.sectors=Секторы text.sector=Выбранный сектор: [LIGHT_GRAY]{0} text.sector.time=Время: [LIGHT_GRAY]{0} @@ -64,7 +63,9 @@ text.server.mismatch=Ошибка пакета: возможное несоот text.server.closing=[accent]Закрытие сервера... text.server.kicked.kick=Вас выгнали с сервера! text.server.kicked.fastShoot=Вы стреляете слишком быстро. -text.server.kicked.invalidPassword=Неверный пароль. +text.server.kicked.serverClose=Сервер закрыт. +text.server.kicked.sectorComplete=Сектор завершён. +text.server.kicked.sectorComplete.text=Ваша миссия завершена.\nТеперь сервер продолжит работу в следующем секторе. text.server.kicked.clientOutdated=Устаревший клиент! Обновите игру! text.server.kicked.serverOutdated=Устаревший сервер! Попросите хост обновить! text.server.kicked.banned=Вы заблокированы на этом сервере. @@ -337,6 +338,9 @@ setting.mutemusic.name=Заглушить музыку setting.sfxvol.name=Громкость звуковых эффектов setting.mutesound.name=Заглушить звук text.keybind.title=Переназначить клавиши +section.general.name=Oснoвнoe +section.view.name=Прoсмoтр +section.multiplayer.name=Мультиплеер keybind.move_x.name=Движение x keybind.move_y.name=Движение y keybind.select.name=выбрать @@ -535,3 +539,9 @@ unit.monsoon.name=Муссон unit.monsoon.description=Тяжелый ковровый бомбардировщик. Использует взрывоопасное соединение или пиратит в качестве боеприпасов. unit.interceptor.name=Истребитель-перехватчик unit.interceptor.description=Быстрая и ударная боевая единица, которая использует набег с отскоком. +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index 0d4ec3fd11..ba2db113b1 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -26,7 +26,6 @@ text.players.single={0} Oyuncu Çevrimiçi text.server.mismatch=Paket hatası: olası istemci / sunucu sürümü uyuşmazlığı. Siz ve ev sahibi Mindustry'nin en son sürümüne sahip olduğunuzdan emin olun! text.server.closing=[accent] Sunucu kapatılıyor ... text.server.kicked.kick=Sunucudan kovuldun! -text.server.kicked.invalidPassword=Geçersiz şifre! text.server.kicked.clientOutdated=Oyun sürümünüz geçerli değil. Oyununu güncelleyin! text.server.kicked.serverOutdated=Eski sunucu! Ev sahibinden güncellemesini isteyin! text.server.kicked.banned=Bu sunucudan yasaklandınız. @@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump block.nuclear-reactor.name=Nuclear Reactor text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release. text.customgame=Custom Game -text.campaign=Campaign text.sectors=Sectors text.sector=Selected Sector: [LIGHT_GRAY]{0} text.sector.time=Time: [LIGHT_GRAY]{0} @@ -503,8 +501,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index cb7fc3916c..3a98155084 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -22,9 +22,9 @@ text.map.delete=Ви впевнені, що хочете видалити кар text.level.select=Вибір рівня text.level.mode=Ігровий режим: text.construction.title=Block Construction Guide -text.construction=\You've just selected [accent]block construction mode[].\n\n\To begin placing, simply tap a valid location near your ship.\n\Once you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\\n\- [accent]Remove blocks[] from your selection by tapping them.\n\- [accent]Shift the selection[] by holding and dragging any block in the selection.\n\- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n\- [accent]Cancel construction or selection[] by pressing the X at the bottom left. +text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left. text.deconstruction.title=Block Deconstruction Guide -text.deconstruction=\You've just selected [accent]block deconstruction mode[].\n\n\To begin breaking, simply tap a block near your ship.\n\Once you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\\n\- [accent]Remove blocks[] from your selection by tapping them.\n\- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n\- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left. +text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left. text.showagain=Не показувати знову до наступного сеансу text.coreattack=< Ядро під атакою! > text.unlocks=Разблоковане @@ -535,3 +535,7 @@ unit.monsoon.name=Мусон unit.monsoon.description=Важкий килимовий бомбардувальник. Використовує вибухонебезпечну речовину або піратит як боєприпаси. unit.interceptor.name=Винищувач-перехполювач unit.interceptor.description=Швидка, ударна бойова одиниця, котра використовує набіг з відскоком +text.settings.language=Language +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index a26b822571..576a5f23be 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -32,7 +32,6 @@ text.loadgame=载入游戏 text.joingame=加入游戏 text.addplayers=增加/删除玩家 text.customgame=自定义游戏 -text.campaign=战役 text.sectors=区域 text.sector=区域: [LIGHT_GRAY]{0} text.sector.time=时间: [LIGHT_GRAY]{0} @@ -59,7 +58,6 @@ text.server.mismatch=Packet error: 可能是客户端/服务器版本不匹配\n text.server.closing=[accent]正在关闭服务器... text.server.kicked.kick=你被踢出服务器了! text.server.kicked.fastShoot=你发射得太快了! -text.server.kicked.invalidPassword=无效的密码! text.server.kicked.clientOutdated=客户端版本过旧!请升级! text.server.kicked.serverOutdated=服务器版本过旧!请联系房主升级! text.server.kicked.banned=你被这个服务器拉黑了。 @@ -497,8 +495,6 @@ unit.drone.name=无人机 unit.drone.description=初始的无人机单位.自动在核心生成,自动采矿,收集物品,修复方块 unit.fabricator.name=装配工 unit.fabricator.description=高级无人机单位,自动采矿,收集物品和修复方块.比普通无人机快很多. -unit.scout.name=侦察机 -unit.scout.description=基础地面单位,使用钨作为弹药. unit.titan.name=泰坦 unit.titan.description=高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位. unit.monsoon.name=狂风 @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 0bfaf23406..147f64c2c6 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -27,7 +27,6 @@ text.server.mismatch=封包錯誤:客戶端與伺服器版本可能不相符 text.server.closing=[accent] 正在關閉伺服器... text.server.kicked.kick=您已被踢出伺服器! text.server.kicked.fastShoot=您射擊的太快了! -text.server.kicked.invalidPassword=密碼無效! text.server.kicked.clientOutdated=客戶端版本過舊!請更新遊戲! text.server.kicked.serverOutdated=伺服器版本過舊!請聯絡伺服主更新伺服器! text.server.kicked.banned=您已經從這個伺服器被封禁。 @@ -464,7 +463,6 @@ block.bridge-conduit.name=Bridge Conduit block.rotary-pump.name=Rotary Pump block.nuclear-reactor.name=Nuclear Reactor text.customgame=Custom Game -text.campaign=Campaign text.sectors=Sectors text.sector=Selected Sector: [LIGHT_GRAY]{0} text.sector.time=Time: [LIGHT_GRAY]{0} @@ -503,8 +501,6 @@ unit.drone.name=Drone unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.fabricator.name=Fabricator unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. -unit.scout.name=Scout -unit.scout.description=A basic ground unit. Uses lead as ammo. unit.titan.name=Titan unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.monsoon.name=Monsoon @@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump block.dagger-pad.name=Dagger Pad block.titan-pad.name=Titan Pad block.thermal-generator.name=Thermal Generator +text.coreattack=< Core is under attack! > +text.continue=Continue +text.nextmission=Next Mission +text.server.kicked.serverClose=Server closed. +text.server.kicked.sectorComplete=Sector completed. +text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector. +text.map.invalid=Error loading map: corrupted or invalid map file. +section.general.name=General +section.view.name=View +section.multiplayer.name=Multiplayer +block.deepwater.name=deepwater +block.water.name=water +block.lava.name=lava +block.oil.name=oil +block.blackstone.name=blackstone +block.stone.name=stone +block.dirt.name=dirt +block.sand.name=sand +block.ice.name=ice +block.snow.name=snow +block.grass.name=grass +block.shrub.name=shrub +block.rock.name=rock +block.blackrock.name=blackrock +block.icerock.name=icerock +unit.dagger.name=Dagger +unit.dagger.description=A basic ground unit. Useful in swarms. diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 4bde4b30c4..6f31aaff97 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -13,287 +13,287 @@ background index: -1 bridge-conveyor-arrow rotate: false - xy: 425, 37 + xy: 823, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 425, 27 + xy: 813, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 425, 17 + xy: 823, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 813, 188 + xy: 843, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 823, 198 + xy: 843, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 823, 188 + xy: 843, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 833, 268 + xy: 843, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 833, 258 + xy: 843, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 833, 248 + xy: 843, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 833, 238 + xy: 843, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 833, 228 + xy: 843, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 833, 218 + xy: 853, 286 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 833, 208 + xy: 863, 281 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 833, 198 + xy: 853, 276 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 833, 188 + xy: 853, 266 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 841, 278 + xy: 863, 271 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 843, 268 + xy: 853, 256 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 843, 258 + xy: 863, 261 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 843, 248 + xy: 853, 246 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 843, 238 + xy: 863, 251 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 843, 228 + xy: 853, 236 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 843, 218 + xy: 863, 241 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 429, 104 + xy: 943, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 449, 114 + xy: 943, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 439, 104 + xy: 953, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 459, 114 + xy: 943, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 449, 104 + xy: 953, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 459, 104 + xy: 963, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 469, 114 + xy: 943, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 469, 104 + xy: 953, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 427, 94 + xy: 963, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 437, 94 + xy: 973, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 447, 94 + xy: 943, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 457, 94 + xy: 953, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 467, 94 + xy: 963, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 428, 84 + xy: 973, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 428, 74 + xy: 983, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 438, 84 + xy: 943, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 428, 64 + xy: 953, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 438, 74 + xy: 963, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 448, 84 + xy: 973, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -307,21 +307,21 @@ mass-driver-turret index: -1 phase-conveyor-arrow rotate: false - xy: 1013, 221 + xy: 933, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 983, 189 + xy: 883, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 993, 199 + xy: 893, 227 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -552,7 +552,7 @@ blackstone2 index: -1 blackstone3 rotate: false - xy: 1015, 371 + xy: 677, 194 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -566,553 +566,553 @@ blackstoneedge index: -1 coal1 rotate: false - xy: 425, 7 + xy: 813, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal2 rotate: false - xy: 813, 288 + xy: 823, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 823, 288 + xy: 813, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 873, 283 + xy: 863, 211 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 883, 283 + xy: 853, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirtedge rotate: false - xy: 905, 307 + xy: 921, 307 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 generic-cliff-edge rotate: false - xy: 863, 273 + xy: 873, 251 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge rotate: false - xy: 863, 273 + xy: 873, 251 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-1 rotate: false - xy: 853, 256 + xy: 873, 241 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-1 rotate: false - xy: 853, 256 + xy: 873, 241 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-2 rotate: false - xy: 863, 263 + xy: 873, 231 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-2 rotate: false - xy: 863, 263 + xy: 873, 231 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-side rotate: false - xy: 873, 273 + xy: 873, 221 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-side rotate: false - xy: 873, 273 + xy: 873, 221 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge rotate: false - xy: 873, 263 + xy: 873, 191 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-1 rotate: false - xy: 883, 273 + xy: 873, 181 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-2 rotate: false - xy: 853, 236 + xy: 413, 7 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-side rotate: false - xy: 863, 243 + xy: 423, 7 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass2 rotate: false - xy: 853, 246 + xy: 873, 211 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass3 rotate: false - xy: 863, 253 + xy: 873, 201 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassedge rotate: false - xy: 891, 293 + xy: 213, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 ice2 rotate: false - xy: 883, 263 + xy: 187, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice3 rotate: false - xy: 893, 273 + xy: 197, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iceedge rotate: false - xy: 919, 293 + xy: 241, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 icerock2 rotate: false - xy: 853, 226 + xy: 207, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow1 rotate: false - xy: 863, 233 + xy: 217, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow1 rotate: false - xy: 863, 233 + xy: 217, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow2 rotate: false - xy: 873, 243 + xy: 227, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow2 rotate: false - xy: 873, 243 + xy: 227, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavaedge rotate: false - xy: 961, 303 + xy: 283, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 lead1 rotate: false - xy: 893, 233 + xy: 459, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead2 rotate: false - xy: 903, 243 + xy: 449, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead3 rotate: false - xy: 913, 253 + xy: 459, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor2 rotate: false - xy: 883, 203 + xy: 438, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor3 rotate: false - xy: 893, 213 + xy: 428, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor4 rotate: false - xy: 903, 223 + xy: 438, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor5 rotate: false - xy: 913, 233 + xy: 448, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor6 rotate: false - xy: 923, 243 + xy: 438, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalflooredge rotate: false - xy: 989, 289 + xy: 367, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 oiledge rotate: false - xy: 199, 19 + xy: 1003, 353 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 rock2 rotate: false - xy: 1003, 181 + xy: 913, 227 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand2 rotate: false - xy: 581, 182 + xy: 933, 247 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand3 rotate: false - xy: 581, 172 + xy: 883, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandedge rotate: false - xy: 227, 19 + xy: 1005, 325 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shrubshadow rotate: false - xy: 247, 9 + xy: 923, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow2 rotate: false - xy: 257, 9 + xy: 933, 227 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow3 rotate: false - xy: 267, 9 + xy: 903, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowedge rotate: false - xy: 255, 19 + xy: 963, 303 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 spaceedge rotate: false - xy: 269, 19 + xy: 977, 303 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 stone-cliff-edge rotate: false - xy: 357, 11 + xy: 903, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-1 rotate: false - xy: 357, 1 + xy: 913, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-2 rotate: false - xy: 367, 11 + xy: 923, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-side rotate: false - xy: 367, 1 + xy: 933, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 347, 11 + xy: 883, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 347, 1 + xy: 893, 177 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneedge rotate: false - xy: 283, 19 + xy: 991, 303 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 thorium1 rotate: false - xy: 377, 11 + xy: 882, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 377, 1 + xy: 892, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 419, 114 + xy: 902, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 419, 104 + xy: 912, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 429, 114 + xy: 922, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 439, 114 + xy: 932, 167 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tungsten1 rotate: false - xy: 448, 74 + xy: 943, 223 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tungsten2 rotate: false - xy: 458, 84 + xy: 953, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tungsten3 rotate: false - xy: 448, 64 + xy: 963, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge rotate: false - xy: 458, 74 + xy: 973, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-1 rotate: false - xy: 458, 64 + xy: 983, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-2 rotate: false - xy: 468, 84 + xy: 943, 213 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-side rotate: false - xy: 468, 74 + xy: 953, 223 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 wateredge rotate: false - xy: 311, 19 + xy: 1005, 297 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 block-border rotate: false - xy: 1005, 327 + xy: 662, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-elevation rotate: false - xy: 1015, 321 + xy: 672, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 1015, 321 + xy: 672, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-middle rotate: false - xy: 415, 47 + xy: 821, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 415, 47 + xy: 821, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-slope rotate: false - xy: 415, 37 + xy: 813, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 border rotate: false - xy: 415, 27 + xy: 831, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 813, 228 + xy: 833, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-1 rotate: false - xy: 843, 208 + xy: 853, 226 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1140,7 +1140,7 @@ cross-4 index: -1 enemyspawn rotate: false - xy: 853, 266 + xy: 873, 261 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1154,21 +1154,21 @@ nuclearreactor-shadow index: -1 place-arrow rotate: false - xy: 1003, 201 + xy: 903, 237 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 playerspawn rotate: false - xy: 1013, 211 + xy: 913, 247 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ripples rotate: false - xy: 532, 185 + xy: 641, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1217,7 +1217,7 @@ rubble-3-1 index: -1 shadow-1 rotate: false - xy: 557, 194 + xy: 653, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1259,14 +1259,14 @@ shadow-6 index: -1 shadow-corner rotate: false - xy: 569, 194 + xy: 665, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-1 rotate: false - xy: 581, 192 + xy: 557, 182 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1294,154 +1294,154 @@ shadow-rounded-2 index: -1 bridge-conduit-arrow rotate: false - xy: 415, 17 + xy: 813, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 415, 7 + xy: 823, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 425, 47 + xy: 813, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 813, 268 + xy: 813, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 831, 278 + xy: 823, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 813, 258 + xy: 813, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 823, 268 + xy: 823, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 813, 248 + xy: 823, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 823, 258 + xy: 833, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 813, 238 + xy: 833, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 823, 248 + xy: 833, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 823, 238 + xy: 833, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 813, 218 + xy: 833, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 823, 228 + xy: 833, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 813, 208 + xy: 833, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 823, 218 + xy: 833, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 813, 198 + xy: 841, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 823, 208 + xy: 843, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router rotate: false - xy: 903, 233 + xy: 457, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 913, 243 + xy: 467, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 923, 253 + xy: 428, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 933, 263 + xy: 428, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1469,70 +1469,70 @@ liquid-tank-top index: -1 phase-conduit-arrow rotate: false - xy: 983, 199 + xy: 903, 247 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 993, 209 + xy: 913, 257 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 1003, 211 + xy: 923, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 993, 189 + xy: 923, 257 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 1003, 191 + xy: 933, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 1013, 201 + xy: 883, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 1013, 191 + xy: 893, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 943, 179 + xy: 903, 227 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 953, 179 + xy: 913, 237 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 963, 179 + xy: 923, 247 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1637,7 +1637,7 @@ nuclear-reactor-lights index: -1 rtg-generator-top rotate: false - xy: 1013, 181 + xy: 923, 237 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1812,14 +1812,14 @@ cultivator-top index: -1 lavasmelter rotate: false - xy: 883, 223 + xy: 439, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oilrefinery rotate: false - xy: 923, 223 + xy: 435, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1861,21 +1861,21 @@ poweralloysmelter-top index: -1 pulverizer rotate: false - xy: 973, 179 + xy: 933, 257 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 983, 179 + xy: 883, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 227, 9 + xy: 903, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1896,21 +1896,21 @@ core-top index: -1 sortedunloader rotate: false - xy: 317, 9 + xy: 923, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1 rotate: false - xy: 1005, 337 + xy: 642, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1-top rotate: false - xy: 1015, 331 + xy: 652, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1980,7 +1980,7 @@ cyclone index: -1 duo rotate: false - xy: 853, 276 + xy: 873, 271 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2001,14 +2001,14 @@ spectre index: -1 hail rotate: false - xy: 873, 253 + xy: 177, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scatter rotate: false - xy: 873, 253 + xy: 177, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2085,14 +2085,14 @@ salvo-panel-right index: -1 scorch rotate: false - xy: 207, 9 + xy: 933, 237 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch-shoot rotate: false - xy: 217, 9 + xy: 893, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2246,7 +2246,14 @@ reconstructor-open index: -1 repair-point-turret rotate: false - xy: 993, 179 + xy: 893, 207 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +resupply-point + rotate: false + xy: 903, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2274,7 +2281,7 @@ door-large-open index: -1 door-open rotate: false - xy: 933, 283 + xy: 873, 281 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2330,35 +2337,35 @@ clear index: -1 command-attack rotate: false - xy: 811, 278 + xy: 823, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-idle rotate: false - xy: 833, 288 + xy: 813, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-retreat rotate: false - xy: 821, 278 + xy: 823, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 enemyarrow rotate: false - xy: 544, 185 + xy: 403, 8 size: 8, 7 orig: 8, 7 offset: 0, 0 index: -1 error rotate: false - xy: 933, 307 + xy: 863, 291 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -2400,14 +2407,14 @@ minelaser-end index: -1 missile rotate: false - xy: 593, 193 + xy: 546, 187 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 missile-back rotate: false - xy: 604, 193 + xy: 569, 183 size: 9, 9 orig: 9, 9 offset: 0, 0 @@ -2449,21 +2456,21 @@ scorch5 index: -1 shell rotate: false - xy: 615, 193 + xy: 580, 181 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shell-back rotate: false - xy: 626, 193 + xy: 591, 181 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shot rotate: false - xy: 237, 9 + xy: 913, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2477,7 +2484,7 @@ transfer index: -1 transfer-arrow rotate: false - xy: 438, 64 + xy: 983, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2491,28 +2498,28 @@ transfer-end index: -1 blackstone-cliff-edge rotate: false - xy: 1015, 361 + xy: 602, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-1 rotate: false - xy: 1015, 351 + xy: 612, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-2 rotate: false - xy: 1005, 347 + xy: 622, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-side rotate: false - xy: 1015, 341 + xy: 632, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2540,28 +2547,28 @@ block-icon-blast-drill index: -1 block-icon-bridge-conduit rotate: false - xy: 1005, 317 + xy: 388, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 1005, 317 + xy: 388, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-bridge-conveyor rotate: false - xy: 1015, 311 + xy: 398, 73 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 1015, 311 + xy: 398, 73 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2575,14 +2582,14 @@ block-icon-carbide-drill index: -1 block-icon-carbide-wall rotate: false - xy: 1015, 301 + xy: 481, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 carbide-wall rotate: false - xy: 1015, 301 + xy: 481, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2617,14 +2624,14 @@ centrifuge index: -1 block-icon-combustion-generator rotate: false - xy: 1015, 291 + xy: 491, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 1015, 291 + xy: 491, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2645,21 +2652,21 @@ command-center index: -1 block-icon-conduit rotate: false - xy: 1015, 281 + xy: 501, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-conveyor rotate: false - xy: 637, 194 + xy: 511, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 637, 194 + xy: 511, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2722,42 +2729,42 @@ dart-ship-factory index: -1 block-icon-deepwater rotate: false - xy: 647, 194 + xy: 521, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater rotate: false - xy: 647, 194 + xy: 521, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-deflector-wall rotate: false - xy: 657, 194 + xy: 531, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deflector-wall rotate: false - xy: 657, 194 + xy: 531, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 657, 194 + xy: 531, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall rotate: false - xy: 657, 194 + xy: 531, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2806,14 +2813,14 @@ delta-mech-factory index: -1 block-icon-dirt rotate: false - xy: 667, 194 + xy: 481, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 667, 194 + xy: 481, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2834,14 +2841,14 @@ distributor index: -1 block-icon-door rotate: false - xy: 677, 194 + xy: 491, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door rotate: false - xy: 677, 194 + xy: 491, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2869,21 +2876,21 @@ block-icon-drone-pad index: -1 block-icon-drop-point rotate: false - xy: 481, 174 + xy: 501, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 drop-point rotate: false - xy: 481, 174 + xy: 501, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-duo rotate: false - xy: 491, 175 + xy: 511, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2911,63 +2918,63 @@ block-icon-fusion-reactor index: -1 block-icon-grass rotate: false - xy: 501, 175 + xy: 521, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass1 rotate: false - xy: 501, 175 + xy: 521, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-hail rotate: false - xy: 511, 175 + xy: 531, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-ice rotate: false - xy: 521, 175 + xy: 682, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice1 rotate: false - xy: 521, 175 + xy: 682, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-icerock rotate: false - xy: 531, 175 + xy: 692, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerock1 rotate: false - xy: 531, 175 + xy: 692, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-incinerator rotate: false - xy: 481, 164 + xy: 702, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 incinerator rotate: false - xy: 481, 164 + xy: 702, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2981,28 +2988,28 @@ block-icon-interceptor-pad index: -1 block-icon-itemsource rotate: false - xy: 491, 165 + xy: 712, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemsource rotate: false - xy: 491, 165 + xy: 712, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemvoid rotate: false - xy: 501, 165 + xy: 541, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemvoid rotate: false - xy: 501, 165 + xy: 541, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3023,14 +3030,14 @@ javelin-ship-factory index: -1 block-icon-junction rotate: false - xy: 511, 165 + xy: 541, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 junction rotate: false - xy: 511, 165 + xy: 541, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3051,35 +3058,35 @@ block-icon-laser-drill index: -1 block-icon-lava rotate: false - xy: 521, 165 + xy: 551, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava rotate: false - xy: 521, 165 + xy: 551, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-junction rotate: false - xy: 531, 165 + xy: 561, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 531, 165 + xy: 561, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-router rotate: false - xy: 388, 71 + xy: 551, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3093,14 +3100,14 @@ block-icon-liquid-tank index: -1 block-icon-liquidsource rotate: false - xy: 398, 73 + xy: 561, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidsource rotate: false - xy: 398, 73 + xy: 561, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3121,14 +3128,14 @@ mass-driver index: -1 block-icon-mechanical-pump rotate: false - xy: 541, 175 + xy: 409, 107 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 541, 175 + xy: 409, 107 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3142,28 +3149,28 @@ block-icon-meltdown index: -1 block-icon-melter rotate: false - xy: 541, 165 + xy: 409, 97 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 melter rotate: false - xy: 541, 165 + xy: 409, 97 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-metalfloor rotate: false - xy: 554, 184 + xy: 407, 87 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor1 rotate: false - xy: 554, 184 + xy: 407, 87 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3191,14 +3198,14 @@ nuclear-reactor index: -1 block-icon-oil rotate: false - xy: 564, 184 + xy: 408, 77 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil rotate: false - xy: 564, 184 + xy: 408, 77 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3212,42 +3219,42 @@ block-icon-oil-extractor index: -1 block-icon-overflow-gate rotate: false - xy: 551, 174 + xy: 408, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 551, 174 + xy: 408, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-conduit rotate: false - xy: 561, 174 + xy: 398, 63 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 561, 174 + xy: 398, 63 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-conveyor rotate: false - xy: 551, 164 + xy: 395, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 551, 164 + xy: 395, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3282,14 +3289,14 @@ plastanium-compressor index: -1 block-icon-power-node rotate: false - xy: 561, 164 + xy: 395, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 power-node rotate: false - xy: 561, 164 + xy: 395, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3310,42 +3317,42 @@ power-node-large index: -1 block-icon-powerinfinite rotate: false - xy: 571, 174 + xy: 395, 33 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powerinfinite rotate: false - xy: 571, 174 + xy: 395, 33 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-powervoid rotate: false - xy: 571, 164 + xy: 408, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powervoid rotate: false - xy: 571, 164 + xy: 408, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulse-conduit rotate: false - xy: 409, 107 + xy: 405, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulverizer rotate: false - xy: 409, 97 + xy: 405, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3408,28 +3415,14 @@ reconstructor index: -1 block-icon-repair-point rotate: false - xy: 407, 87 + xy: 395, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 repair-point rotate: false - xy: 407, 87 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -block-icon-resupply-point - rotate: false - xy: 408, 77 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -resupply-point - rotate: false - xy: 408, 77 + xy: 395, 23 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3443,14 +3436,14 @@ block-icon-ripple index: -1 block-icon-rock rotate: false - xy: 408, 67 + xy: 405, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rock1 rotate: false - xy: 408, 67 + xy: 405, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3471,14 +3464,14 @@ rotary-pump index: -1 block-icon-rtg-generator rotate: false - xy: 398, 63 + xy: 393, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 398, 63 + xy: 393, 13 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3492,49 +3485,49 @@ block-icon-salvo index: -1 block-icon-sand rotate: false - xy: 395, 53 + xy: 405, 17 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand1 rotate: false - xy: 395, 53 + xy: 405, 17 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-scorch rotate: false - xy: 395, 43 + xy: 417, 87 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-separator rotate: false - xy: 408, 57 + xy: 418, 77 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator rotate: false - xy: 408, 57 + xy: 418, 77 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shrub rotate: false - xy: 405, 47 + xy: 418, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shrub rotate: false - xy: 405, 47 + xy: 418, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3555,42 +3548,42 @@ silicon-smelter index: -1 block-icon-smelter rotate: false - xy: 405, 37 + xy: 418, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 smelter rotate: false - xy: 405, 37 + xy: 418, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-snow rotate: false - xy: 395, 33 + xy: 415, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow1 rotate: false - xy: 395, 33 + xy: 415, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel rotate: false - xy: 385, 31 + xy: 415, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 385, 31 + xy: 415, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3611,42 +3604,42 @@ solar-panel-large index: -1 block-icon-solidifer rotate: false - xy: 385, 21 + xy: 415, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solidifer rotate: false - xy: 385, 21 + xy: 415, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sorter rotate: false - xy: 395, 23 + xy: 415, 17 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sorter rotate: false - xy: 395, 23 + xy: 415, 17 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-space rotate: false - xy: 405, 27 + xy: 425, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space rotate: false - xy: 405, 27 + xy: 425, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3660,28 +3653,28 @@ block-icon-spectre index: -1 block-icon-splitter rotate: false - xy: 405, 17 + xy: 425, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 splitter rotate: false - xy: 405, 17 + xy: 425, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-stone rotate: false - xy: 395, 13 + xy: 425, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone1 rotate: false - xy: 395, 13 + xy: 425, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3723,14 +3716,14 @@ thermal-pump index: -1 block-icon-thorium-wall rotate: false - xy: 405, 7 + xy: 425, 17 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 405, 7 + xy: 425, 17 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3758,21 +3751,21 @@ block-icon-titan-pad index: -1 block-icon-titanium-conveyor rotate: false - xy: 417, 87 + xy: 813, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 417, 87 + xy: 813, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor rotate: false - xy: 417, 87 + xy: 813, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3786,14 +3779,14 @@ block-icon-tungsten-drill index: -1 block-icon-tungsten-wall rotate: false - xy: 418, 77 + xy: 823, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tungsten-wall rotate: false - xy: 418, 77 + xy: 823, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3828,14 +3821,14 @@ turbine-generator index: -1 block-icon-unloader rotate: false - xy: 418, 67 + xy: 811, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unloader rotate: false - xy: 418, 67 + xy: 811, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3870,14 +3863,14 @@ warp-gate index: -1 block-icon-water rotate: false - xy: 418, 57 + xy: 833, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water rotate: false - xy: 418, 57 + xy: 833, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3898,938 +3891,938 @@ block-icon-wave index: -1 deepwater-cliff-edge rotate: false - xy: 843, 198 + xy: 863, 231 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-1 rotate: false - xy: 843, 188 + xy: 853, 216 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-2 rotate: false - xy: 853, 286 + xy: 863, 221 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-side rotate: false - xy: 863, 283 + xy: 853, 206 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge rotate: false - xy: 893, 283 + xy: 863, 201 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-1 rotate: false - xy: 903, 283 + xy: 853, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-2 rotate: false - xy: 913, 283 + xy: 863, 191 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-side rotate: false - xy: 923, 283 + xy: 863, 181 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge rotate: false - xy: 923, 273 + xy: 429, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-1 rotate: false - xy: 853, 196 + xy: 439, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-2 rotate: false - xy: 863, 203 + xy: 429, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-side rotate: false - xy: 873, 213 + xy: 449, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-cryofluid rotate: false - xy: 933, 273 + xy: 469, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-lava rotate: false - xy: 873, 203 + xy: 427, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-oil rotate: false - xy: 883, 213 + xy: 437, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-water rotate: false - xy: 893, 223 + xy: 447, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mech-icon-alpha-mech rotate: false - xy: 975, 303 + xy: 297, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 989, 303 + xy: 311, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 947, 289 + xy: 325, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-halberd-ship rotate: false - xy: 961, 289 + xy: 339, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-trident-ship rotate: false - xy: 961, 289 + xy: 339, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-omega-mech rotate: false - xy: 975, 289 + xy: 353, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-tau-mech rotate: false - xy: 975, 289 + xy: 353, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 metalfloor-cliff-edge rotate: false - xy: 933, 253 + xy: 448, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-1 rotate: false - xy: 893, 203 + xy: 458, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-2 rotate: false - xy: 903, 213 + xy: 448, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-side rotate: false - xy: 913, 223 + xy: 458, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil-cliff-edge rotate: false - xy: 923, 233 + xy: 458, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil-cliff-edge-1 rotate: false - xy: 933, 243 + xy: 468, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil-cliff-edge-2 rotate: false - xy: 903, 203 + xy: 468, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil-cliff-side rotate: false - xy: 913, 213 + xy: 468, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone1 rotate: false - xy: 933, 233 + xy: 435, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone2 rotate: false - xy: 913, 203 + xy: 445, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone3 rotate: false - xy: 923, 213 + xy: 435, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass1 rotate: false - xy: 933, 223 + xy: 445, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass2 rotate: false - xy: 923, 203 + xy: 455, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass3 rotate: false - xy: 933, 213 + xy: 435, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice1 rotate: false - xy: 933, 203 + xy: 445, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice2 rotate: false - xy: 853, 186 + xy: 455, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice3 rotate: false - xy: 863, 193 + xy: 465, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand1 rotate: false - xy: 873, 193 + xy: 445, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand2 rotate: false - xy: 883, 193 + xy: 455, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand3 rotate: false - xy: 893, 193 + xy: 465, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow1 rotate: false - xy: 903, 193 + xy: 455, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow2 rotate: false - xy: 913, 193 + xy: 465, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow3 rotate: false - xy: 923, 193 + xy: 465, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone1 rotate: false - xy: 933, 193 + xy: 435, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone2 rotate: false - xy: 863, 183 + xy: 445, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone3 rotate: false - xy: 873, 183 + xy: 455, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone1 rotate: false - xy: 883, 183 + xy: 465, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone2 rotate: false - xy: 893, 183 + xy: 433, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone3 rotate: false - xy: 903, 183 + xy: 443, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass1 rotate: false - xy: 913, 183 + xy: 453, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass2 rotate: false - xy: 923, 183 + xy: 463, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass3 rotate: false - xy: 933, 183 + xy: 477, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice1 rotate: false - xy: 943, 279 + xy: 478, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice2 rotate: false - xy: 953, 279 + xy: 478, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice3 rotate: false - xy: 943, 269 + xy: 478, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand1 rotate: false - xy: 963, 279 + xy: 475, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand2 rotate: false - xy: 943, 259 + xy: 475, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand3 rotate: false - xy: 953, 269 + xy: 475, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow1 rotate: false - xy: 973, 279 + xy: 475, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow2 rotate: false - xy: 943, 249 + xy: 475, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow3 rotate: false - xy: 953, 259 + xy: 473, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone1 rotate: false - xy: 963, 269 + xy: 485, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone2 rotate: false - xy: 983, 279 + xy: 485, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone3 rotate: false - xy: 993, 279 + xy: 485, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone1 rotate: false - xy: 943, 239 + xy: 485, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone2 rotate: false - xy: 953, 249 + xy: 485, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone3 rotate: false - xy: 963, 259 + xy: 483, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass1 rotate: false - xy: 973, 269 + xy: 722, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass2 rotate: false - xy: 943, 229 + xy: 732, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass3 rotate: false - xy: 953, 239 + xy: 742, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice1 rotate: false - xy: 963, 249 + xy: 752, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice2 rotate: false - xy: 973, 259 + xy: 762, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice3 rotate: false - xy: 983, 269 + xy: 772, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand1 rotate: false - xy: 943, 219 + xy: 782, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand2 rotate: false - xy: 953, 229 + xy: 792, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand3 rotate: false - xy: 963, 239 + xy: 802, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow1 rotate: false - xy: 973, 249 + xy: 812, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow2 rotate: false - xy: 983, 259 + xy: 822, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow3 rotate: false - xy: 993, 269 + xy: 832, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone1 rotate: false - xy: 1003, 271 + xy: 842, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone2 rotate: false - xy: 943, 209 + xy: 852, 176 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone3 rotate: false - xy: 953, 219 + xy: 862, 171 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone1 rotate: false - xy: 963, 229 + xy: 872, 171 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone2 rotate: false - xy: 973, 239 + xy: 879, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone3 rotate: false - xy: 983, 249 + xy: 889, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass1 rotate: false - xy: 993, 259 + xy: 899, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass2 rotate: false - xy: 1003, 261 + xy: 909, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass3 rotate: false - xy: 1013, 271 + xy: 919, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice1 rotate: false - xy: 943, 199 + xy: 929, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice2 rotate: false - xy: 953, 209 + xy: 939, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice3 rotate: false - xy: 963, 219 + xy: 949, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand1 rotate: false - xy: 973, 229 + xy: 959, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand2 rotate: false - xy: 983, 239 + xy: 969, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand3 rotate: false - xy: 993, 249 + xy: 979, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow1 rotate: false - xy: 1003, 251 + xy: 989, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow2 rotate: false - xy: 1013, 261 + xy: 883, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow3 rotate: false - xy: 943, 189 + xy: 883, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone1 rotate: false - xy: 953, 199 + xy: 893, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone2 rotate: false - xy: 963, 209 + xy: 883, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone3 rotate: false - xy: 973, 219 + xy: 893, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-blackstone1 rotate: false - xy: 983, 229 + xy: 903, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-blackstone2 rotate: false - xy: 993, 239 + xy: 883, 257 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-blackstone3 rotate: false - xy: 1003, 241 + xy: 893, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-grass1 rotate: false - xy: 1013, 251 + xy: 903, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-grass2 rotate: false - xy: 953, 189 + xy: 913, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-grass3 rotate: false - xy: 963, 199 + xy: 883, 247 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-ice1 rotate: false - xy: 973, 209 + xy: 893, 257 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-ice2 rotate: false - xy: 983, 219 + xy: 903, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-ice3 rotate: false - xy: 993, 229 + xy: 913, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-sand1 rotate: false - xy: 1003, 231 + xy: 923, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-sand2 rotate: false - xy: 1013, 241 + xy: 883, 237 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-sand3 rotate: false - xy: 963, 189 + xy: 893, 247 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-snow1 rotate: false - xy: 973, 199 + xy: 903, 257 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-snow2 rotate: false - xy: 983, 209 + xy: 913, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-snow3 rotate: false - xy: 993, 219 + xy: 923, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-stone1 rotate: false - xy: 1003, 221 + xy: 933, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-stone2 rotate: false - xy: 1013, 231 + xy: 883, 227 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-tungsten-stone3 rotate: false - xy: 973, 189 + xy: 893, 237 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge rotate: false - xy: 581, 162 + xy: 893, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-1 rotate: false - xy: 177, 9 + xy: 903, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-2 rotate: false - xy: 187, 9 + xy: 913, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-side rotate: false - xy: 197, 9 + xy: 923, 227 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge rotate: false - xy: 277, 9 + xy: 913, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-1 rotate: false - xy: 287, 9 + xy: 923, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-2 rotate: false - xy: 297, 9 + xy: 933, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-side rotate: false - xy: 307, 9 + xy: 913, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge rotate: false - xy: 327, 11 + xy: 933, 207 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-1 rotate: false - xy: 327, 1 + xy: 923, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-2 rotate: false - xy: 337, 11 + xy: 933, 197 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-side rotate: false - xy: 337, 1 + xy: 933, 187 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 297, 19 + xy: 1005, 311 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -4843,112 +4836,112 @@ unit-icon-titan index: -1 item-biomatter rotate: false - xy: 903, 273 + xy: 257, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 853, 216 + xy: 267, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-carbide rotate: false - xy: 863, 223 + xy: 277, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-coal rotate: false - xy: 873, 233 + xy: 287, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead rotate: false - xy: 883, 243 + xy: 297, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-phase-matter rotate: false - xy: 893, 253 + xy: 307, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 903, 263 + xy: 317, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 913, 273 + xy: 327, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-sand rotate: false - xy: 853, 206 + xy: 337, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 863, 213 + xy: 347, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-stone rotate: false - xy: 873, 223 + xy: 357, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 883, 233 + xy: 367, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 893, 243 + xy: 377, 7 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 903, 253 + xy: 419, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-tungsten rotate: false - xy: 913, 263 + xy: 419, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon rotate: false - xy: 923, 263 + xy: 469, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -5025,63 +5018,63 @@ dagger-leg index: -1 delta-mech rotate: false - xy: 877, 307 + xy: 893, 307 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 891, 307 + xy: 907, 307 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 213, 19 + xy: 1005, 339 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 213, 19 + xy: 1005, 339 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 863, 307 + xy: 879, 307 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 halberd-ship rotate: false - xy: 905, 293 + xy: 227, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 905, 293 + xy: 227, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 javelin-ship rotate: false - xy: 947, 303 + xy: 269, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-javelin-ship rotate: false - xy: 947, 303 + xy: 269, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -5314,28 +5307,28 @@ icon-arrow-16 index: -1 icon-arrow-down rotate: false - xy: 325, 21 + xy: 1003, 381 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 337, 21 + xy: 723, 188 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 349, 21 + xy: 735, 188 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 361, 21 + xy: 747, 188 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5370,7 +5363,7 @@ icon-cancel index: -1 icon-chat rotate: false - xy: 1003, 381 + xy: 759, 188 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5384,21 +5377,21 @@ icon-check index: -1 icon-crafting rotate: false - xy: 1003, 369 + xy: 771, 188 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 1003, 357 + xy: 783, 188 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 1003, 305 + xy: 383, 53 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5419,7 +5412,7 @@ icon-discord index: -1 icon-distribution rotate: false - xy: 1003, 293 + xy: 383, 41 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5559,14 +5552,14 @@ icon-grid index: -1 icon-hold rotate: false - xy: 373, 21 + xy: 383, 29 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 1003, 281 + xy: 381, 17 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5587,7 +5580,7 @@ icon-host index: -1 icon-info rotate: false - xy: 723, 188 + xy: 486, 197 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5601,14 +5594,14 @@ icon-itch.io index: -1 icon-item rotate: false - xy: 735, 188 + xy: 498, 197 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 883, 253 + xy: 237, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -5629,7 +5622,7 @@ icon-link index: -1 icon-liquid rotate: false - xy: 747, 188 + xy: 510, 197 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5671,7 +5664,7 @@ icon-locked index: -1 icon-logic rotate: false - xy: 759, 188 + xy: 522, 197 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5685,7 +5678,7 @@ icon-map index: -1 icon-menu rotate: false - xy: 771, 188 + xy: 534, 197 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5699,28 +5692,28 @@ icon-menu-large index: -1 icon-missing rotate: false - xy: 783, 188 + xy: 484, 185 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-none rotate: false - xy: 383, 53 + xy: 496, 185 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-nullitem rotate: false - xy: 893, 263 + xy: 247, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 383, 41 + xy: 508, 185 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5748,7 +5741,7 @@ icon-pick index: -1 icon-play rotate: false - xy: 486, 197 + xy: 520, 185 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5762,21 +5755,21 @@ icon-play-2 index: -1 icon-players rotate: false - xy: 498, 197 + xy: 532, 185 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-power rotate: false - xy: 510, 197 + xy: 557, 194 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-production rotate: false - xy: 522, 197 + xy: 569, 194 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5867,7 +5860,7 @@ icon-save-map index: -1 icon-settings rotate: false - xy: 534, 197 + xy: 581, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5888,14 +5881,14 @@ icon-tools index: -1 icon-touch rotate: false - xy: 484, 185 + xy: 593, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 496, 185 + xy: 605, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5937,7 +5930,7 @@ icon-undo index: -1 icon-units rotate: false - xy: 508, 185 + xy: 617, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5951,7 +5944,7 @@ icon-unlocks index: -1 icon-weapon rotate: false - xy: 520, 185 + xy: 629, 192 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -6167,14 +6160,14 @@ dagger index: -1 drone rotate: false - xy: 919, 307 + xy: 935, 307 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-drone rotate: false - xy: 919, 307 + xy: 935, 307 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -6195,14 +6188,14 @@ unit-icon-fabricator index: -1 interceptor rotate: false - xy: 933, 293 + xy: 255, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-interceptor rotate: false - xy: 933, 293 + xy: 255, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -6221,6 +6214,13 @@ unit-icon-monsoon orig: 18, 18 offset: 0, 0 index: -1 +power-cell + rotate: false + xy: 863, 305 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 titan rotate: false xy: 265, 81 @@ -6258,28 +6258,28 @@ chain-blaster-equip index: -1 flakgun-equip rotate: false - xy: 863, 293 + xy: 185, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 877, 293 + xy: 199, 19 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 185, 19 + xy: 1003, 367 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 241, 19 + xy: 949, 303 size: 12, 12 orig: 12, 12 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 0ddbc04325..de70589648 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/src/io/anuke/mindustry/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java index 2c926d4bed..7d2b17db88 100644 --- a/core/src/io/anuke/mindustry/content/Recipes.java +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -142,7 +142,6 @@ public class Recipes implements ContentList{ new Recipe(units, UnitBlocks.monsoonPad, new ItemStack(Items.plastanium, 80), new ItemStack(Items.titanium, 100), new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 220)).setMode(GameMode.noWaves); new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30)); - new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30)); new Recipe(units, UnitBlocks.commandCenter, new ItemStack(Items.lead, 100), new ItemStack(Items.carbide, 100), new ItemStack(Items.silicon, 200)).setMode(GameMode.noWaves); //LIQUIDS diff --git a/core/src/io/anuke/mindustry/content/Weapons.java b/core/src/io/anuke/mindustry/content/Weapons.java index 934b05ea69..7909578967 100644 --- a/core/src/io/anuke/mindustry/content/Weapons.java +++ b/core/src/io/anuke/mindustry/content/Weapons.java @@ -19,7 +19,7 @@ public class Weapons implements ContentList{ reload = 15f; roundrobin = true; ejectEffect = ShootFx.shellEjectSmall; - setAmmo(AmmoTypes.bulletLead); + ammo = AmmoTypes.bulletLead; }}; missiles = new Weapon("missiles"){{ @@ -30,7 +30,7 @@ public class Weapons implements ContentList{ roundrobin = false; roundrobin = true; ejectEffect = Fx.none; - setAmmo(AmmoTypes.weaponMissile); + ammo = AmmoTypes.weaponMissile; }}; chainBlaster = new Weapon("chain-blaster"){{ @@ -38,7 +38,7 @@ public class Weapons implements ContentList{ reload = 28f; roundrobin = true; ejectEffect = ShootFx.shellEjectSmall; - setAmmo(AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletTungsten, AmmoTypes.bulletSilicon, AmmoTypes.bulletThorium); + ammo = AmmoTypes.bulletLead; }}; shockgun = new Weapon("shockgun"){{ @@ -50,7 +50,7 @@ public class Weapons implements ContentList{ recoil = 2f; velocityRnd = 0.7f; ejectEffect = ShootFx.shellEjectSmall; - setAmmo(AmmoTypes.shotgunTungsten); + ammo = AmmoTypes.shotgunTungsten; }}; flakgun = new Weapon("flakgun"){{ @@ -62,7 +62,7 @@ public class Weapons implements ContentList{ recoil = 3f; velocityRnd = 0.1f; ejectEffect = ShootFx.shellEjectMedium; - setAmmo(AmmoTypes.shellCarbide); + ammo = AmmoTypes.shellCarbide; }}; flamethrower = new Weapon("flamethrower"){{ @@ -71,7 +71,7 @@ public class Weapons implements ContentList{ roundrobin = true; recoil = 1f; ejectEffect = Fx.none; - setAmmo(AmmoTypes.flamerThermite); + ammo = AmmoTypes.flamerThermite; }}; sapper = new Weapon("sapper"){{ @@ -79,7 +79,7 @@ public class Weapons implements ContentList{ reload = 12f; roundrobin = true; ejectEffect = ShootFx.shellEjectSmall; - setAmmo(AmmoTypes.bulletCarbide); + ammo = AmmoTypes.bulletCarbide; }}; swarmer = new Weapon("swarmer"){{ @@ -87,7 +87,7 @@ public class Weapons implements ContentList{ reload = 10f; roundrobin = true; ejectEffect = ShootFx.shellEjectSmall; - setAmmo(AmmoTypes.bulletPyratite); + ammo = AmmoTypes.bulletPyratite; }}; bomber = new Weapon("bomber"){{ @@ -98,7 +98,7 @@ public class Weapons implements ContentList{ ejectEffect = Fx.none; velocityRnd = 1f; inaccuracy = 40f; - setAmmo(AmmoTypes.bombExplosive, AmmoTypes.bombIncendiary, AmmoTypes.bombOil); + ammo = AmmoTypes.bombExplosive; }}; } diff --git a/core/src/io/anuke/mindustry/content/blocks/Blocks.java b/core/src/io/anuke/mindustry/content/blocks/Blocks.java index 1e5a793f91..a9ae94fc43 100644 --- a/core/src/io/anuke/mindustry/content/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/Blocks.java @@ -106,7 +106,7 @@ public class Blocks extends BlockList implements ContentList{ stone = new Floor("stone"){{ hasOres = true; drops = new ItemStack(Items.stone, 1); - blends = block -> block != this && !(block instanceof Ore); + blends = block -> block != this && !(block instanceof OreBlock); minimapColor = Color.valueOf("323232"); playerUnmineable = true; }}; diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java index 2159d0ab48..179b2b4642 100644 --- a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java @@ -8,7 +8,7 @@ import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.blocks.units.*; public class UnitBlocks extends BlockList implements ContentList{ - public static Block resupplyPoint, repairPoint, dronePad, + public static Block repairPoint, dronePad, fabricatorPad, interceptorPad, monsoonPad, daggerPad, titanPad, dropPoint, reconstructor, overdriveProjector, shieldProjector, commandCenter; @@ -64,11 +64,6 @@ public class UnitBlocks extends BlockList implements ContentList{ consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 20), new ItemStack(Items.thorium, 30)}); }}; - resupplyPoint = new ResupplyPoint("resupply-point"){{ - shadow = "shadow-round-1"; - itemCapacity = 30; - }}; - dropPoint = new DropPoint("drop-point"){{ shadow = "shadow-round-1"; itemCapacity = 40; diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 3834ff5fce..75bc5b9ece 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -473,6 +473,9 @@ public class NetServer extends Module{ } String fixName(String name){ + if(name.equals("[") || name.equals("]")){ + return ""; + } for(int i = 0; i < name.length(); i++){ if(name.charAt(i) == '[' && i != name.length() - 1 && name.charAt(i + 1) != '[' && (i == 0 || name.charAt(i - 1) != '[')){ diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index e16b96770d..5f4e1022f7 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -331,8 +331,8 @@ public class Renderer extends RendererModule{ Graphics.beginShaders(Shaders.outline); Graphics.shader(Shaders.mix, true); - drawAndInterpolate(unitGroups[team.ordinal()], u -> u.isFlying() == flying && !u.isDead()); - drawAndInterpolate(playerGroup, p -> p.isFlying() == flying && p.getTeam() == team); + drawAndInterpolate(unitGroups[team.ordinal()], u -> u.isFlying() == flying && !u.isDead(), Unit::drawAll); + drawAndInterpolate(playerGroup, p -> p.isFlying() == flying && p.getTeam() == team, Unit::drawAll); Graphics.shader(); blocks.drawTeamBlocks(Layer.turret, team); Graphics.endShaders(); diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index 85ff219551..94ad6f9dcd 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -363,6 +363,10 @@ public class World extends Module{ return null; } + public void raycastEachWorld(float x0, float y0, float x1, float y1, Raycaster cons){ + raycastEach(toTile(x0), toTile(y0), toTile(x1), toTile(y1), cons); + } + public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){ int x0 = x0f; int y0 = y0f; diff --git a/core/src/io/anuke/mindustry/entities/Damage.java b/core/src/io/anuke/mindustry/entities/Damage.java index 1d7a86ff08..af1d73f53e 100644 --- a/core/src/io/anuke/mindustry/entities/Damage.java +++ b/core/src/io/anuke/mindustry/entities/Damage.java @@ -6,6 +6,7 @@ import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.content.bullets.TurretBullets; import io.anuke.mindustry.content.fx.ExplosionFx; import io.anuke.mindustry.content.fx.Fx; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.Lightning; import io.anuke.mindustry.game.Team; @@ -15,7 +16,6 @@ import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; -import io.anuke.ucore.entities.impl.SolidEntity; import io.anuke.ucore.function.Consumer; import io.anuke.ucore.function.Predicate; import io.anuke.ucore.util.Mathf; @@ -84,8 +84,17 @@ public class Damage{ * Damages entities in a line. * Only enemies of the specified team are damaged. */ - public static void collideLine(SolidEntity hitter, Team team, Effect effect, float x, float y, float angle, float length){ + public static void collideLine(Bullet hitter, Team team, Effect effect, float x, float y, float angle, float length){ tr.trns(angle, length); + world.raycastEachWorld(x, y, x + tr.x, y + tr.y, (cx, cy) -> { + Tile tile = world.tile(cx, cy); + if(tile != null && tile.entity != null && tile.entity.collide(hitter)){ + tile.entity.collision(hitter); + Effects.effect(effect, tile.worldx(), tile.worldy()); + } + return false; + }); + rect.setPosition(x, y).setSize(tr.x, tr.y); float x2 = tr.x + x, y2 = tr.y + y; diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index ed24d8053c..7419299a35 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -129,11 +129,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra return mech.itemCapacity; } - @Override - public int getAmmoCapacity(){ - return mech.ammoCapacity; - } - @Override public void interpolate(){ super.interpolate(); @@ -187,21 +182,11 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra return mech.armor; } - @Override - public boolean acceptsAmmo(Item item){ - return mech.weapon.getAmmoType(item) != null && inventory.canAcceptAmmo(mech.weapon.getAmmoType(item)); - } - @Override public void added(){ baseRotation = 90f; } - @Override - public void addAmmo(Item item){ - inventory.addAmmo(mech.weapon.getAmmoType(item)); - } - @Override public float getMass(){ return mech.mass; @@ -273,6 +258,23 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra Draw.rect(mech.iconRegion, x , y, rotation - 90); } + @Override + public void drawAll(){ + boolean snap = snapCamera && isLocal; + + float px = x, py = y; + + if(snap){ + x = (int) (x + 0.0001f); + y = (int) (y + 0.0001f); + } + + super.drawAll(); + + x = px; + y = py; + } + @Override public void draw(){ if((debug && (!showPlayer || !showUI)) || dead) return; @@ -284,15 +286,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra boostHeat = Mathf.lerpDelta(boostHeat, isBoosting && ((!movement.isZero() && moved) || !isLocal) ? 1f : 0f, 0.08f); - boolean snap = snapCamera && isLocal; - - float px = x, py = y; - - if(snap){ - x = (int) (x + 0.0001f); - y = (int) (y + 0.0001f); - } - float ft = Mathf.sin(walktime, 6f, 2f) * (1f - boostHeat); Floor floor = getFloorOn(); @@ -351,9 +344,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra } Draw.alpha(1f); - - x = px; - y = py; } @Override @@ -620,20 +610,20 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra y += Mathf.cos(Timers.time() + id * 999, 25f, 0.08f); //update shooting if not building, not mining and there's ammo left - if(!isBuilding() && inventory.hasAmmo() && getMineTile() == null){ + if(!isBuilding() && getMineTile() == null){ //autofire: mobile only! if(mobile){ if(target == null){ isShooting = false; - target = Units.getClosestTarget(team, x, y, inventory.getAmmoRange()); + target = Units.getClosestTarget(team, x, y, getWeapon().getAmmo().getRange()); }else if(target.isValid()){ //rotate toward and shoot the target rotation = Mathf.slerpDelta(rotation, angleTo(target), 0.2f); Vector2 intercept = - Predict.intercept(x, y, target.getX(), target.getY(), target.getVelocity().x - velocity.x, target.getVelocity().y - velocity.y, inventory.getAmmo().bullet.speed); + Predict.intercept(x, y, target.getX(), target.getY(), target.getVelocity().x - velocity.x, target.getVelocity().y - velocity.y, getWeapon().getAmmo().bullet.speed); pointerX = intercept.x; pointerY = intercept.y; @@ -677,7 +667,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra } public boolean isShooting(){ - return isShooting && inventory.hasAmmo() && (!isBoosting || mech.flying); + return isShooting && (!isBoosting || mech.flying); } public void updateRespawning(){ diff --git a/core/src/io/anuke/mindustry/entities/Unit.java b/core/src/io/anuke/mindustry/entities/Unit.java index e234c4936a..b3900c5726 100644 --- a/core/src/io/anuke/mindustry/entities/Unit.java +++ b/core/src/io/anuke/mindustry/entities/Unit.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.entities; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.content.blocks.Blocks; @@ -8,8 +9,8 @@ import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.net.Interpolator; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.StatusEffect; +import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.Floor; import io.anuke.ucore.core.Effects; @@ -33,17 +34,11 @@ import static io.anuke.mindustry.Vars.state; import static io.anuke.mindustry.Vars.world; public abstract class Unit extends DestructibleEntity implements SaveTrait, TargetTrait, SyncTrait, DrawTrait, TeamTrait, CarriableTrait, InventoryTrait{ - /** - * total duration of hit flash effect - */ + /**Total duration of hit flash effect*/ public static final float hitDuration = 9f; - /** - * Percision divisor of velocity, used when writing. For example a value of '2' would mean the percision is 1/2 = 0.5-size chunks. - */ + /**Percision divisor of velocity, used when writing. For example a value of '2' would mean the percision is 1/2 = 0.5-size chunks.*/ public static final float velocityPercision = 8f; - /** - * Maximum absolute value of a velocity vector component. - */ + /**Maximum absolute value of a velocity vector component.*/ public static final float maxAbsVelocity = 127f / velocityPercision; private static final Vector2 moveVector = new Vector2(); @@ -300,16 +295,30 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ } } - public float getAmmoFraction(){ - return inventory.totalAmmo() / (float) inventory.ammoCapacity(); - } - public void drawUnder(){ } public void drawOver(){ } + public void drawStats(){ + Draw.color(Color.BLACK, team.color, healthf() + Mathf.absin(Timers.time(), healthf()*5f, 1f - healthf())); + Draw.alpha(hitTime); + Draw.rect(getPowerCellRegion(), x, y, rotation - 90); + Draw.color(); + } + + public TextureRegion getPowerCellRegion(){ + return Draw.region("power-cell"); + } + + public void drawAll(){ + if(!isDead()){ + draw(); + drawStats(); + } + } + public void drawShadow(){ Draw.rect(getIconRegion(), x , y, rotation - 90); } @@ -318,26 +327,18 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ Fill.circle(x, y, getViewDistance()); } - public boolean isInfiniteAmmo(){ - return false; - } - public float getViewDistance(){ return 135f; } public abstract TextureRegion getIconRegion(); + public abstract Weapon getWeapon(); + public abstract int getItemCapacity(); - public abstract int getAmmoCapacity(); - public abstract float getArmor(); - public abstract boolean acceptsAmmo(Item item); - - public abstract void addAmmo(Item item); - public abstract float getMass(); public abstract boolean isFlying(); diff --git a/core/src/io/anuke/mindustry/entities/UnitInventory.java b/core/src/io/anuke/mindustry/entities/UnitInventory.java index 0ebfcb27f9..834f0b8779 100644 --- a/core/src/io/anuke/mindustry/entities/UnitInventory.java +++ b/core/src/io/anuke/mindustry/entities/UnitInventory.java @@ -1,10 +1,7 @@ package io.anuke.mindustry.entities; -import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.entities.traits.Saveable; -import io.anuke.mindustry.type.AmmoEntry; -import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; @@ -14,8 +11,6 @@ import java.io.IOException; public class UnitInventory implements Saveable{ private final Unit unit; - private Array ammos = new Array<>(); - private int totalAmmo; private ItemStack item = new ItemStack(Items.stone, 0); public UnitInventory(Unit unit){ @@ -30,90 +25,19 @@ public class UnitInventory implements Saveable{ public void writeSave(DataOutput stream) throws IOException{ stream.writeShort(item.amount); stream.writeByte(item.item.id); - stream.writeShort(totalAmmo); - stream.writeByte(ammos.size); - for(int i = 0; i < ammos.size; i++){ - stream.writeByte(ammos.get(i).type.id); - stream.writeShort(ammos.get(i).amount); - } } @Override public void readSave(DataInput stream) throws IOException{ short iamount = stream.readShort(); byte iid = stream.readByte(); - this.totalAmmo = stream.readShort(); - byte ammoa = stream.readByte(); - for(int i = 0; i < ammoa; i++){ - byte aid = stream.readByte(); - int am = stream.readShort(); - ammos.add(new AmmoEntry(AmmoType.getByID(aid), am)); - } item.item = Item.getByID(iid); item.amount = iamount; } - /** - * Returns ammo range, or MAX_VALUE if this inventory has no ammo. - */ - public float getAmmoRange(){ - return hasAmmo() ? getAmmo().getRange() : Float.MAX_VALUE; - } - - public AmmoType getAmmo(){ - return ammos.size == 0 ? null : ammos.peek().type; - } - - public boolean hasAmmo(){ - return totalAmmo > 0; - } - - public void useAmmo(){ - if(unit.isInfiniteAmmo()) return; - AmmoEntry entry = ammos.peek(); - entry.amount--; - if(entry.amount == 0) ammos.pop(); - totalAmmo--; - } - - public int totalAmmo(){ - return totalAmmo; - } - - public int ammoCapacity(){ - return unit.getAmmoCapacity(); - } - - public boolean canAcceptAmmo(AmmoType type){ - return totalAmmo + type.quantityMultiplier <= unit.getAmmoCapacity(); - } - - public void addAmmo(AmmoType type){ - if(type == null) return; - totalAmmo += type.quantityMultiplier; - - //find ammo entry by type - for(int i = ammos.size - 1; i >= 0; i--){ - AmmoEntry entry = ammos.get(i); - - //if found, put it to the right - if(entry.type == type){ - entry.amount += type.quantityMultiplier; - ammos.swap(i, ammos.size - 1); - return; - } - } - - //must not be found - AmmoEntry entry = new AmmoEntry(type, (int) type.quantityMultiplier); - ammos.add(entry); - } - - public void fillAmmo(AmmoType type){ - totalAmmo = ammoCapacity(); - ammos.clear(); - ammos.add(new AmmoEntry(type, ammoCapacity())); + public void clear(){ + item.amount = 0; } public int capacity(){ @@ -140,12 +64,6 @@ public class UnitInventory implements Saveable{ return (!hasItem() && amount <= unit.getItemCapacity()) || (item.item == type && item.amount + amount <= unit.getItemCapacity()); } - public void clear(){ - item.amount = 0; - ammos.clear(); - totalAmmo = 0; - } - public void clearItem(){ item.amount = 0; } diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index 7afd5b28b6..22e6800b2d 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -51,7 +51,7 @@ public class Units{ * See {@link #invalidateTarget(TargetTrait, Team, float, float, float)} */ public static boolean invalidateTarget(TargetTrait target, Unit targeter){ - return invalidateTarget(target, targeter.team, targeter.x, targeter.y, targeter.inventory.getAmmoRange()); + return invalidateTarget(target, targeter.team, targeter.x, targeter.y, targeter.getWeapon().getAmmo().getRange()); } /** diff --git a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java index d4d750035d..47bce4794d 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java @@ -13,41 +13,23 @@ public abstract class BulletType extends BaseBulletType implements Conte private static Array types = new Array<>(); public final int id; - /** - * Knockback in velocity. - */ + /**Knockback in velocity.*/ public float knockback; - /** - * Whether this bullet hits tiles. - */ + /**Whether this bullet hits tiles.*/ public boolean hitTiles = true; - /** - * Status effect applied on hit. - */ + /**Status effect applied on hit.*/ public StatusEffect status = StatusEffects.none; - /** - * Intensity of applied status effect in terms of duration. - */ + /**Intensity of applied status effect in terms of duration.*/ public float statusIntensity = 0.5f; - /** - * What fraction of armor is pierced, 0-1 - */ + /**What fraction of armor is pierced, 0-1*/ public float armorPierce = 0f; - /** - * Whether to sync this bullet to clients. - */ + /**Whether to sync this bullet to clients.*/ public boolean syncable; - /** - * Whether this bullet type collides with tiles. - */ + /**Whether this bullet type collides with tiles.*/ public boolean collidesTiles = true; - /** - * Whether this bullet types collides with anything at all. - */ + /**Whether this bullet types collides with anything at all.*/ public boolean collides = true; - /** - * Whether velocity is inherited from the shooter. - */ + /**Whether velocity is inherited from the shooter.*/ public boolean keepVelocity = true; public BulletType(float speed, float damage){ diff --git a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java b/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java index 27ef69d948..bf23331e32 100644 --- a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java +++ b/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java @@ -34,14 +34,6 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{ public ItemTransfer(){ } - @Remote(called = Loc.server, unreliable = true) - public static void transferAmmo(Item item, float x, float y, Unit to){ - if(to == null) return; - to.addAmmo(item); - create(item, x, y, to, () -> { - }); - } - @Remote(called = Loc.server, unreliable = true) public static void transferItemEffect(Item item, float x, float y, Unit to){ if(to == null) return; diff --git a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java index 8a3b2696b6..315c2f88a8 100644 --- a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java @@ -19,7 +19,6 @@ import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Tile; @@ -185,7 +184,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ } public void targetClosest(){ - target = Units.getClosestTarget(team, x, y, inventory.getAmmoRange()); + target = Units.getClosestTarget(team, x, y, getWeapon().getAmmo().getRange()); } public TileEntity getClosestEnemyCore(){ @@ -253,16 +252,6 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ return type.itemCapacity; } - @Override - public int getAmmoCapacity(){ - return type.ammoCapacity; - } - - @Override - public boolean isInfiniteAmmo(){ - return isWave; - } - @Override public void interpolate(){ super.interpolate(); @@ -282,16 +271,6 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ return type.armor; } - @Override - public boolean acceptsAmmo(Item item){ - return getWeapon().getAmmoType(item) != null && inventory.canAcceptAmmo(getWeapon().getAmmoType(item)); - } - - @Override - public void addAmmo(Item item){ - inventory.addAmmo(getWeapon().getAmmoType(item)); - } - @Override public float getSize(){ return 8; diff --git a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java index e7085f93b6..6dc76ac680 100644 --- a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java @@ -28,22 +28,6 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{ protected CarriableTrait carrying; protected final UnitState - resupply = new UnitState(){ - public void entered(){ - target = null; - } - - public void update(){ - if(inventory.totalAmmo() + 10 >= inventory.ammoCapacity()){ - state.set(attack); - }else if(!targetHasFlag(BlockFlag.resupplyPoint)){ - retarget(() -> targetClosestAllyFlag(BlockFlag.resupplyPoint)); - }else{ - circle(20f); - } - } - }, - idle = new UnitState(){ public void update(){ if(!isCommanded()){ @@ -75,9 +59,7 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{ target = null; } - if(!inventory.hasAmmo()){ - state.set(resupply); - }else if(target == null){ + if(target == null){ retarget(() -> { targetClosest(); if(target == null) targetClosestEnemyFlag(BlockFlag.target); @@ -91,10 +73,9 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{ }else{ attack(150f); - if((Mathf.angNear(angleTo(target), rotation, 15f) || !inventory.getAmmo().bullet.keepVelocity) //bombers don't care about rotation - && distanceTo(target) < inventory.getAmmo().getRange()){ - AmmoType ammo = inventory.getAmmo(); - inventory.useAmmo(); + if((Mathf.angNear(angleTo(target), rotation, 15f) || !getWeapon().getAmmo().bullet.keepVelocity) //bombers don't care about rotation + && distanceTo(target) < getWeapon().getAmmo().getRange()){ + AmmoType ammo = getWeapon().getAmmo(); Vector2 to = Predict.intercept(FlyingUnit.this, target, ammo.bullet.speed); diff --git a/core/src/io/anuke/mindustry/entities/units/GroundUnit.java b/core/src/io/anuke/mindustry/entities/units/GroundUnit.java index 9f2027c05c..38bcda1ff3 100644 --- a/core/src/io/anuke/mindustry/entities/units/GroundUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/GroundUnit.java @@ -12,11 +12,9 @@ import io.anuke.mindustry.type.Upgrade; import io.anuke.mindustry.type.Weapon; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.Floor; -import io.anuke.mindustry.world.meta.BlockFlag; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.util.Angles; -import io.anuke.ucore.util.Geometry; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; @@ -35,24 +33,6 @@ public abstract class GroundUnit extends BaseUnit{ public final UnitState - resupply = new UnitState(){ - public void entered(){ - target = null; - } - - public void update(){ - Tile tile = Geometry.findClosest(x, y, world.indexer().getAllied(team, BlockFlag.resupplyPoint)); - - if(tile != null && distanceTo(tile) > 40){ - moveAwayFromCore(); - } - - //TODO move toward resupply point - if(isWave || inventory.totalAmmo() + 10 >= inventory.ammoCapacity()){ - state.set(attack); - } - } - }, attack = new UnitState(){ public void entered(){ target = null; @@ -62,17 +42,15 @@ public abstract class GroundUnit extends BaseUnit{ TileEntity core = getClosestEnemyCore(); float dst = core == null ? 0 : distanceTo(core); - if(core != null && inventory.hasAmmo() && dst < inventory.getAmmo().getRange() / 1.1f){ + if(core != null && dst < getWeapon().getAmmo().getRange() / 1.1f){ target = core; }else{ retarget(() -> targetClosest()); } - if(!inventory.hasAmmo()){ - state.set(resupply); - }else if(target != null){ + if(target != null){ if(core != null){ - if(dst > inventory.getAmmo().getRange() * 0.5f){ + if(dst > getWeapon().getAmmo().getRange() * 0.5f){ moveToCore(); } @@ -80,11 +58,11 @@ public abstract class GroundUnit extends BaseUnit{ moveToCore(); } - if(distanceTo(target) < inventory.getAmmo().getRange()){ + if(distanceTo(target) < getWeapon().getAmmo().getRange()){ rotate(angleTo(target)); if(Mathf.angNear(angleTo(target), rotation, 13f)){ - AmmoType ammo = inventory.getAmmo(); + AmmoType ammo = getWeapon().getAmmo(); Vector2 to = Predict.intercept(GroundUnit.this, target, ammo.bullet.speed); @@ -143,14 +121,14 @@ public abstract class GroundUnit extends BaseUnit{ @Override public UnitState getStartState(){ - return resupply; + return attack; } @Override public void update(){ super.update(); - if(!velocity.isZero(0.0001f) && (target == null || !inventory.hasAmmo() || (inventory.hasAmmo() && distanceTo(target) > inventory.getAmmoRange()))){ + if(!velocity.isZero(0.0001f) && (target == null || (distanceTo(target) > getWeapon().getAmmo().getRange()))){ rotation = Mathf.slerpDelta(rotation, velocity.angle(), 0.2f); } } diff --git a/core/src/io/anuke/mindustry/entities/units/UnitDrops.java b/core/src/io/anuke/mindustry/entities/units/UnitDrops.java index 2ba240de70..4ea154cae6 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitDrops.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitDrops.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.entities.units; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.entities.effect.ItemDrop; +import io.anuke.mindustry.game.Team; import io.anuke.mindustry.type.Item; import io.anuke.ucore.util.Mathf; @@ -11,7 +12,7 @@ public class UnitDrops{ private static Item[] dropTable; public static void dropItems(BaseUnit unit){ - if(Vars.itemGroup.size() > maxItems){ + if(Vars.itemGroup.size() > maxItems || unit.getTeam() != Team.red){ return; } diff --git a/core/src/io/anuke/mindustry/entities/units/types/Drone.java b/core/src/io/anuke/mindustry/entities/units/types/Drone.java index c5b50d620b..61f9948237 100644 --- a/core/src/io/anuke/mindustry/entities/units/types/Drone.java +++ b/core/src/io/anuke/mindustry/entities/units/types/Drone.java @@ -395,11 +395,6 @@ public class Drone extends FlyingUnit implements BuilderTrait{ return isBuilding() ? placeDistance * 2f : 30f; } - @Override - public float getAmmoFraction(){ - return inventory.getItem().amount / (float) type.itemCapacity; - } - protected void findItem(){ TileEntity entity = getClosestCore(); if(entity == null){ diff --git a/core/src/io/anuke/mindustry/game/SpawnGroup.java b/core/src/io/anuke/mindustry/game/SpawnGroup.java index 4d8fe850be..63faefda7d 100644 --- a/core/src/io/anuke/mindustry/game/SpawnGroup.java +++ b/core/src/io/anuke/mindustry/game/SpawnGroup.java @@ -3,7 +3,6 @@ package io.anuke.mindustry.game; import io.anuke.mindustry.entities.units.BaseUnit; import io.anuke.mindustry.entities.units.GroundUnit; import io.anuke.mindustry.entities.units.UnitType; -import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.StatusEffect; import io.anuke.mindustry.type.Weapon; @@ -62,10 +61,6 @@ public class SpawnGroup{ * Items this unit spawns with. Null to disable. */ protected ItemStack items; - /** - * Ammo type this unit spawns with. Null to use the first available ammo. - */ - protected Item ammoItem; public SpawnGroup(UnitType type){ this.type = type; @@ -114,12 +109,6 @@ public class SpawnGroup{ unit.inventory.addItem(items.item, items.amount); } - if(ammoItem != null){ - unit.inventory.addAmmo(unit.getWeapon().getAmmoType(ammoItem)); - }else{ - unit.inventory.addAmmo(unit.getWeapon().getAmmoType(unit.getWeapon().getAcceptedItems().iterator().next())); - } - return unit; } } diff --git a/core/src/io/anuke/mindustry/game/Waves.java b/core/src/io/anuke/mindustry/game/Waves.java index 7267e88d6d..148c41b06b 100644 --- a/core/src/io/anuke/mindustry/game/Waves.java +++ b/core/src/io/anuke/mindustry/game/Waves.java @@ -41,7 +41,6 @@ public class Waves{ unitScaling = 2; unitAmount = 1; spacing = 2; - ammoItem = Items.tungsten; end = 30; }}, @@ -86,7 +85,6 @@ public class Waves{ groupAmount = 2; unitScaling = 3; effect = StatusEffects.overdrive; - ammoItem = Items.silicon; }}, new SpawnGroup(UnitTypes.dagger){{ @@ -95,7 +93,6 @@ public class Waves{ unitAmount = 1; unitScaling = 3; effect = StatusEffects.shielded; - ammoItem = Items.thorium; max = 10; }}, @@ -121,7 +118,6 @@ public class Waves{ new SpawnGroup(UnitTypes.monsoon){{ begin = 40; - ammoItem = Items.blastCompound; unitAmount = 2; spacing = 2; unitScaling = 3; @@ -140,7 +136,6 @@ public class Waves{ new SpawnGroup(UnitTypes.monsoon){{ begin = 53; - ammoItem = Items.pyratite; unitAmount = 2; unitScaling = 3; spacing = 4; @@ -150,7 +145,6 @@ public class Waves{ new SpawnGroup(UnitTypes.monsoon){{ begin = 53; - ammoItem = Items.coal; unitAmount = 2; unitScaling = 3; spacing = 4; @@ -176,10 +170,6 @@ public class Waves{ System.out.print(":" + spawn.weapon.name); } - if(spawn.ammoItem != null){ - System.out.print(":" + spawn.ammoItem.name); - } - System.out.print(" "); } } diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java index ba3942d9b4..437b4b90e2 100644 --- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java @@ -7,14 +7,12 @@ import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.meta.BlockBar; import io.anuke.ucore.core.Graphics; -import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Fill; @@ -176,32 +174,7 @@ public class OverlayRenderer{ Draw.color(); } } - } - - if((!debug || showUI) && Settings.getBool("healthbars")){ - for(TeamData ally : (debug ? state.teams.getTeams() : state.teams.getTeams(true))){ - renderer.drawAndInterpolate(unitGroups[ally.team.ordinal()], u -> !u.isDead(), this::drawStats); - } - - renderer.drawAndInterpolate(playerGroup, u -> !u.isDead(), this::drawStats); - } - } - - void drawStats(Unit unit){ - if(unit.isDead()) return; - - float x = unit.x; - float y = unit.y; - - if(unit == players[0] && players.length == 1 && snapCamera){ - x = (int) (x + 0.0001f); - y = (int) (y + 0.0001f); - } - - drawEncloser(x, y - 9f, 2f); - drawBar(Palette.healthstats, x, y - 8f, unit.healthf()); - drawBar(Palette.ammo, x, y - 9f, unit.getAmmoFraction()); } void drawBar(Color color, float x, float y, float finion){ diff --git a/core/src/io/anuke/mindustry/graphics/Palette.java b/core/src/io/anuke/mindustry/graphics/Palette.java index d62d980823..29e42f3289 100644 --- a/core/src/io/anuke/mindustry/graphics/Palette.java +++ b/core/src/io/anuke/mindustry/graphics/Palette.java @@ -3,70 +3,72 @@ package io.anuke.mindustry.graphics; import com.badlogic.gdx.graphics.Color; public class Palette{ - public static final Color command = Color.valueOf("eab678"); + public static final Color - public static final Color bulletYellow = Color.valueOf("ffeec9"); - public static final Color bulletYellowBack = Color.valueOf("f9c87a"); + command = Color.valueOf("eab678"), - public static final Color missileYellow = Color.valueOf("ffd2ae"); - public static final Color missileYellowBack = Color.valueOf("e58956"); + bulletYellow = Color.valueOf("ffeec9"), + bulletYellowBack = Color.valueOf("f9c87a"), - public static final Color plastaniumBack = Color.valueOf("d8d97f"); - public static final Color plastaniumFront = Color.valueOf("fffac6"); + missileYellow = Color.valueOf("ffd2ae"), + missileYellowBack = Color.valueOf("e58956"), - public static final Color lightFlame = Color.valueOf("ffdd55"); - public static final Color darkFlame = Color.valueOf("db401c"); + plastaniumBack = Color.valueOf("d8d97f"), + plastaniumFront = Color.valueOf("fffac6"), - public static final Color turretHeat = Color.valueOf("ab3400"); + lightFlame = Color.valueOf("ffdd55"), + darkFlame = Color.valueOf("db401c"), - public static final Color lightOrange = Color.valueOf("f68021"); - public static final Color lightishOrange = Color.valueOf("f8ad42"); - public static final Color lighterOrange = Color.valueOf("f6e096"); + turretHeat = Color.valueOf("ab3400"), - public static final Color lightishGray = Color.valueOf("a2a2a2"); - public static final Color darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f); + lightOrange = Color.valueOf("f68021"), + lightishOrange = Color.valueOf("f8ad42"), + lighterOrange = Color.valueOf("f6e096"), - public static final Color lancerLaser = Color.valueOf("a9d8ff"); + lightishGray = Color.valueOf("a2a2a2"), + darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f), - public static final Color stoneGray = Color.valueOf("8f8f8f"); + lancerLaser = Color.valueOf("a9d8ff"), - public static final Color portalLight = Color.valueOf("9054ea"); - public static final Color portal = Color.valueOf("6344d7"); - public static final Color portalDark = Color.valueOf("3f3dac"); + stoneGray = Color.valueOf("8f8f8f"), - public static final Color powerLaserFrom = Color.valueOf("e3e3e3"); - public static final Color powerLaserTo = Color.valueOf("ffe7a8"); + portalLight = Color.valueOf("9054ea"), + portal = Color.valueOf("6344d7"), + portalDark = Color.valueOf("3f3dac"), - public static final Color description = Color.WHITE; - public static final Color turretinfo = Color.ORANGE; - public static final Color iteminfo = Color.LIGHT_GRAY; - public static final Color powerinfo = Color.YELLOW; - public static final Color liquidinfo = Color.ROYAL; - public static final Color craftinfo = Color.LIGHT_GRAY; + powerLaserFrom = Color.valueOf("e3e3e3"), + powerLaserTo = Color.valueOf("ffe7a8"), - public static final Color missingitems = Color.SCARLET; - public static final Color health = Color.YELLOW; - public static final Color ammo = Color.valueOf("32cf6d"); - public static final Color healthstats = Color.SCARLET; - public static final Color bar = Color.SLATE; - public static final Color interact = Color.ORANGE; - public static final Color accent = Color.valueOf("f4ba6e"); - public static final Color place = Color.valueOf("6335f8"); - public static final Color remove = Color.valueOf("e55454"); - public static final Color placeRotate = accent; - public static final Color breakInvalid = Color.valueOf("d44b3d"); - public static final Color range = Color.valueOf("f4ba6e"); - public static final Color power = Color.valueOf("fbd367"); - public static final Color placing = Color.valueOf("616161"); + description = Color.WHITE, + turretinfo = Color.ORANGE, + iteminfo = Color.LIGHT_GRAY, + powerinfo = Color.YELLOW, + liquidinfo = Color.ROYAL, + craftinfo = Color.LIGHT_GRAY, - public static final Color lightTrail = Color.valueOf("ffe2a9"); + missingitems = Color.SCARLET, + health = Color.YELLOW, + ammo = Color.valueOf("32cf6d"), + healthstats = Color.SCARLET, + bar = Color.SLATE, + interact = Color.ORANGE, + accent = Color.valueOf("f4ba6e"), + place = Color.valueOf("6335f8"), + remove = Color.valueOf("e55454"), + placeRotate = accent, + breakInvalid = Color.valueOf("d44b3d"), + range = Color.valueOf("f4ba6e"), + power = Color.valueOf("fbd367"), + placing = Color.valueOf("616161"), - public static final Color redSpark = Color.valueOf("fbb97f"); - public static final Color orangeSpark = Color.valueOf("d2b29c"); + lightTrail = Color.valueOf("ffe2a9"), - public static final Color redDust = Color.valueOf("ffa480"); - public static final Color redderDust = Color.valueOf("ff7b69"); + redSpark = Color.valueOf("fbb97f"), + orangeSpark = Color.valueOf("d2b29c"), - public static final Color plasticSmoke = Color.valueOf("f1e479"); - public static final Color plasticBurn = Color.valueOf("e9ead3"); + redDust = Color.valueOf("ffa480"), + redderDust = Color.valueOf("ff7b69"), + + plasticSmoke = Color.valueOf("f1e479"), + plasticBurn = Color.valueOf("e9ead3"); } diff --git a/core/src/io/anuke/mindustry/input/DefaultKeybinds.java b/core/src/io/anuke/mindustry/input/DefaultKeybinds.java index 94e07bf924..7df23aeff6 100644 --- a/core/src/io/anuke/mindustry/input/DefaultKeybinds.java +++ b/core/src/io/anuke/mindustry/input/DefaultKeybinds.java @@ -16,7 +16,7 @@ public class DefaultKeybinds{ for(String section : sections){ KeyBinds.defaultSection(section, DeviceType.keyboard, - new Category("General"), + new Category("general"), "move_x", new Axis(Input.A, Input.D), "move_y", new Axis(Input.S, Input.W), //"select", Input.MOUSE_LEFT, @@ -25,14 +25,14 @@ public class DefaultKeybinds{ "rotate", new Axis(Input.SCROLL), "dash", Input.SHIFT_LEFT, "drop_unit", Input.SHIFT_LEFT, - new Category("View"), + new Category("view"), "zoom_hold", Input.CONTROL_LEFT, "zoom", new Axis(Input.SCROLL), "zoom_minimap", new Axis(Input.MINUS, Input.PLUS), "menu", Gdx.app.getType() == ApplicationType.Android ? Input.BACK : Input.ESCAPE, "pause", Input.SPACE, "toggle_menus", Input.C, - new Category("Multiplayer"), + new Category("multiplayer"), "player_list", Input.TAB, "chat", Input.ENTER, "chat_history_prev", Input.UP, @@ -42,7 +42,7 @@ public class DefaultKeybinds{ ); KeyBinds.defaultSection(section, DeviceType.controller, - new Category("General"), + new Category("general"), "move_x", new Axis(Input.CONTROLLER_L_STICK_HORIZONTAL_AXIS), "move_y", new Axis(Input.CONTROLLER_L_STICK_VERTICAL_AXIS), "cursor_x", new Axis(Input.CONTROLLER_R_STICK_HORIZONTAL_AXIS), @@ -53,12 +53,12 @@ public class DefaultKeybinds{ "dash", Input.CONTROLLER_Y, "rotate_alt", new Axis(Input.CONTROLLER_DPAD_RIGHT, Input.CONTROLLER_DPAD_LEFT), "rotate", new Axis(Input.CONTROLLER_A, Input.CONTROLLER_B), - new Category("View"), + new Category("view"), "zoom_hold", Input.ANY_KEY, "zoom", new Axis(Input.CONTROLLER_DPAD_DOWN, Input.CONTROLLER_DPAD_UP), "menu", Input.CONTROLLER_X, "pause", Input.CONTROLLER_L_TRIGGER, - new Category("Multiplayer"), + new Category("multiplayer"), "player_list", Input.CONTROLLER_START ); diff --git a/core/src/io/anuke/mindustry/io/versions/Save16.java b/core/src/io/anuke/mindustry/io/versions/Save16.java index 498c77b44c..ad35778110 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save16.java +++ b/core/src/io/anuke/mindustry/io/versions/Save16.java @@ -76,7 +76,9 @@ public class Save16 extends SaveFileVersion{ short width = stream.readShort(); short height = stream.readShort(); - if(map == null){ + if(world.getSector() != null){ + world.setMap(new Map("Sector " + world.getSector().x + ", " + world.getSector().y, width, height)); + }else if(map == null){ world.setMap(new Map("unknown", width, height)); } diff --git a/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java b/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java index 021123cf1a..725072d6f3 100644 --- a/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generation/FortressGenerator.java @@ -15,7 +15,6 @@ import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret; import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret; -import io.anuke.mindustry.world.blocks.units.ResupplyPoint; import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.world; @@ -186,7 +185,6 @@ public class FortressGenerator{ } Block fixBlock(Block result){ - if(result == UnitBlocks.resupplyPoint) result = DefenseBlocks.tungstenWall; if(result == UnitBlocks.dronePad) result = DefenseBlocks.tungstenWallLarge; if(result == UnitBlocks.fabricatorPad) result = DefenseBlocks.tungstenWallLarge; return result; @@ -201,8 +199,6 @@ public class FortressGenerator{ ItemTurret turret = (ItemTurret)block; AmmoType[] type = turret.getAmmoTypes(); block.handleStack(type[0].item, block.acceptStack(type[0].item, 1000, tile, null), tile, null); - }else if(block instanceof ResupplyPoint){ - tile.entity.items.add(Items.lead, tile.block().itemCapacity); } } diff --git a/core/src/io/anuke/mindustry/type/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java index 623be27e86..e900563bdd 100644 --- a/core/src/io/anuke/mindustry/type/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -1,7 +1,6 @@ package io.anuke.mindustry.type; import com.badlogic.gdx.graphics.g2d.TextureRegion; -import com.badlogic.gdx.utils.OrderedMap; import io.anuke.annotations.Annotations.Loc; import io.anuke.annotations.Annotations.Remote; import io.anuke.mindustry.Vars; @@ -19,64 +18,37 @@ import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; public class Weapon extends Upgrade{ - /** - * minimum cursor distance from player, fixes 'cross-eyed' shooting. - */ + /**minimum cursor distance from player, fixes 'cross-eyed' shooting.*/ protected static float minPlayerDist = 20f; - public TextureRegion equipRegion, region; - /** - * ammo type map. set with setAmmo() - */ - protected OrderedMap ammoMap = new OrderedMap<>(); - /** - * shell ejection effect - */ + /**ammo type map. set with setAmmo()*/ + protected AmmoType ammo; + /**shell ejection effect*/ protected Effect ejectEffect = Fx.none; - /** - * weapon reload in frames - */ + /**weapon reload in frames*/ protected float reload; - /** - * amount of shots per fire - */ + /**amount of shots per fire*/ protected int shots = 1; - /** - * spacing in degrees between multiple shots, if applicable - */ + /**spacing in degrees between multiple shots, if applicable*/ protected float spacing = 12f; - /** - * inaccuracy of degrees of each shot - */ + /**inaccuracy of degrees of each shot*/ protected float inaccuracy = 0f; - /** - * intensity and duration of each shot's screen shake - */ + /**intensity and duration of each shot's screen shake*/ protected float shake = 0f; - /** - * visual weapon knockback. - */ + /**visual weapon knockback.*/ protected float recoil = 1.5f; - /** - * shoot barrel y offset - */ + /**shoot barrel y offset*/ protected float length = 3f; - /** - * shoot barrel x offset. - */ + /**shoot barrel x offset.*/ protected float width = 4f; - /** - * fraction of velocity that is random - */ + /**fraction of velocity that is random*/ protected float velocityRnd = 0f; - /** - * whether to shoot the weapons in different arms one after another, rather than all at once - */ + /**whether to shoot the weapons in different arms one after another, rather than all at once*/ protected boolean roundrobin = false; - /** - * translator for vector calulations - */ + /**translator for vector calulations*/ protected Translator tr = new Translator(); + public TextureRegion equipRegion, region; + protected Weapon(String name){ super(name); } @@ -103,12 +75,9 @@ public class Weapon extends Upgrade{ Weapon weapon = shooter.getWeapon(); Angles.shotgun(weapon.shots, weapon.spacing, rotation, f -> weapon.bullet(shooter, x, y, f + Mathf.range(weapon.inaccuracy))); + AmmoType ammo = weapon.ammo; - AmmoType type = shooter.getInventory().getAmmo(); - - if(type == null) return; - - weapon.tr.trns(rotation + 180f, type.recoil); + weapon.tr.trns(rotation + 180f, ammo.recoil); shooter.getVelocity().add(weapon.tr); @@ -116,8 +85,8 @@ public class Weapon extends Upgrade{ Effects.shake(weapon.shake, weapon.shake, x, y); Effects.effect(weapon.ejectEffect, x, y, rotation * -Mathf.sign(left)); - Effects.effect(type.shootEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter); - Effects.effect(type.smokeEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter); + Effects.effect(ammo.shootEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter); + Effects.effect(ammo.smokeEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter); //reset timer for remote players shooter.getTimer().get(shooter.getShootTimer(left), weapon.reload); @@ -134,13 +103,17 @@ public class Weapon extends Upgrade{ return "weapon"; } + public AmmoType getAmmo(){ + return ammo; + } + public void update(ShooterTrait shooter, float pointerX, float pointerY){ update(shooter, true, pointerX, pointerY); update(shooter, false, pointerX, pointerY); } private void update(ShooterTrait shooter, boolean left, float pointerX, float pointerY){ - if(shooter.getInventory().hasAmmo() && shooter.getTimer().get(shooter.getShootTimer(left), reload)){ + if(shooter.getTimer().get(shooter.getShootTimer(left), reload)){ if(roundrobin){ shooter.getTimer().reset(shooter.getShootTimer(!left), reload / 2f); } @@ -180,29 +153,13 @@ public class Weapon extends Upgrade{ Call.onGenericShootWeapon(p, x, y, angle, left); } } - - p.getInventory().useAmmo(); - } - - public Iterable getAcceptedItems(){ - return ammoMap.orderedKeys(); - } - - public AmmoType getAmmoType(Item item){ - return ammoMap.get(item); - } - - protected void setAmmo(AmmoType... types){ - for(AmmoType type : types){ - ammoMap.put(type.item, type); - } } void bullet(ShooterTrait owner, float x, float y, float angle){ - if(owner == null || !owner.getInventory().hasAmmo()) return; + if(owner == null) return; tr.trns(angle, 3f); - Bullet.create(owner.getInventory().getAmmo().bullet, + Bullet.create(ammo.bullet, owner, owner.getTeam(), x + tr.x, y + tr.y, angle, (1f - velocityRnd) + Mathf.random(velocityRnd)); } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java index 10aa2d8460..a3461fe929 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java @@ -145,7 +145,6 @@ public class DebugFragment extends Fragment{ for(UnitType type : UnitType.all()){ dialog.content().addImageButton("white", 40, () -> { BaseUnit unit = type.create(player.getTeam()); - unit.inventory.addAmmo(type.weapon.getAmmoType(type.weapon.getAcceptedItems().iterator().next())); unit.setWave(); unit.set(player.x, player.y); unit.add(); diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index 49e26841b2..1836b9dba8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -217,6 +217,9 @@ public class BuildBlock extends Block{ if(recipe != null){ ItemStack[] requirements = recipe.requirements; + if(requirements.length != accumulator.length || totalAccumulator.length != requirements.length){ + setDeconstruct(previous); + } for(int i = 0; i < requirements.length; i++){ accumulator[i] += Math.min(requirements[i].amount * amount / 2f, requirements[i].amount/2f - totalAccumulator[i]); //add scaled amount progressed to the accumulator diff --git a/core/src/io/anuke/mindustry/world/blocks/Ore.java b/core/src/io/anuke/mindustry/world/blocks/Ore.java deleted file mode 100644 index 398771f070..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/Ore.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.anuke.mindustry.world.blocks; - -import io.anuke.mindustry.content.blocks.Blocks; - -public class Ore extends Floor{ - - public Ore(String name){ - super(name); - blends = block -> block != this && block != Blocks.stone; - } - -} diff --git a/core/src/io/anuke/mindustry/world/blocks/OreBlock.java b/core/src/io/anuke/mindustry/world/blocks/OreBlock.java index 5d79dacc2c..79c09df684 100644 --- a/core/src/io/anuke/mindustry/world/blocks/OreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/OreBlock.java @@ -14,7 +14,7 @@ public class OreBlock extends Floor{ public OreBlock(Item ore, Floor base){ super("ore-" + ore.name + "-" + base.name); - this.formalName = ore.name + " " + base.formalName; + this.formalName = ore.localizedName() + " " + base.formalName; this.drops = new ItemStack(ore, 1); this.base = base; this.variants = 3; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 3759f48182..c1eca5d14d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -227,7 +227,7 @@ public class PowerNode extends PowerBlock{ } protected boolean shouldDistribute(Tile tile, Tile other){ - return other != null && other.getTeamID() == tile.getTeamID() && other.entity.power.amount / other.block().powerCapacity <= tile.entity.power.amount / powerCapacity && + return other != null && other.entity != null && other.block().hasPower && other.getTeamID() == tile.getTeamID() && other.entity.power.amount / other.block().powerCapacity <= tile.entity.power.amount / powerCapacity && !(other.block() instanceof PowerGenerator); //do not distribute to power generators } diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java index d6d90797e6..7b23a65ccf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java @@ -235,25 +235,6 @@ public class CoreBlock extends StorageBlock{ entity.heat = Mathf.lerpDelta(entity.heat, 0f, 0.1f); } - - if(entity.solid && tile.entity.timer.get(timerSupply, supplyInterval)){ - rect.setSize(supplyRadius * 2).setCenter(tile.drawx(), tile.drawy()); - - Units.getNearby(tile.getTeam(), rect, unit -> { - if(unit.isDead() || unit.distanceTo(tile.drawx(), tile.drawy()) > supplyRadius || unit.getGroup() == null) - return; - - for(int i = 0; i < Item.all().size; i++){ - Item item = Item.getByID(i); - if(tile.entity.items.get(item) > 0 && unit.acceptsAmmo(item)){ - tile.entity.items.remove(item, 1); - unit.addAmmo(item); - Call.transferAmmo(item, tile.drawx(), tile.drawy(), unit); - return; - } - } - }); - } } @Override @@ -261,19 +242,6 @@ public class CoreBlock extends StorageBlock{ return new CoreEntity(); } - /* - @Remote(called = Loc.server) - public static void onCoreUnitSet(Tile tile, Unit player){ - CoreEntity entity = tile.entity(); - entity.currentUnit = player; - entity.progress = 0f; - player.set(tile.drawx(), tile.drawy()); - - if(player instanceof Player){ - ((Player) player).setRespawning(true); - } - } - */ public class CoreEntity extends TileEntity implements SpawnerTrait{ public Unit currentUnit; int droneID = -1; diff --git a/core/src/io/anuke/mindustry/world/blocks/units/ResupplyPoint.java b/core/src/io/anuke/mindustry/world/blocks/units/ResupplyPoint.java deleted file mode 100644 index 6f0c5a6281..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/units/ResupplyPoint.java +++ /dev/null @@ -1,144 +0,0 @@ -package io.anuke.mindustry.world.blocks.units; - -import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.math.Vector2; -import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.entities.Unit; -import io.anuke.mindustry.entities.Units; -import io.anuke.mindustry.graphics.Layer; -import io.anuke.mindustry.graphics.Palette; -import io.anuke.mindustry.type.Item; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.meta.BlockFlag; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.graphics.Draw; -import io.anuke.ucore.graphics.Lines; -import io.anuke.ucore.graphics.Shapes; -import io.anuke.ucore.util.Angles; -import io.anuke.ucore.util.EnumSet; -import io.anuke.ucore.util.Mathf; - -public class ResupplyPoint extends Block{ - private static Rectangle rect = new Rectangle(); - - protected int timerSupply = timers++; - protected int timerTarget = timers++; - - protected float supplyRadius = 50f; - protected float supplyInterval = 10f; - - public ResupplyPoint(String name){ - super(name); - update = true; - solid = true; - flags = EnumSet.of(BlockFlag.resupplyPoint); - layer = Layer.laser; - hasItems = true; - hasPower = true; - powerCapacity = 20f; - - consumes.power(0.02f); - } - - @Override - public void drawSelect(Tile tile){ - Draw.color(Palette.accent); - Lines.dashCircle(tile.drawx(), tile.drawy(), supplyRadius); - Draw.color(); - } - - @Override - public void drawLayer(Tile tile){ - ResupplyPointEntity entity = tile.entity(); - - if(entity.strength > 0f){ - float ang = entity.angleTo(entity.lastx, entity.lasty); - float len = 5f; - float x1 = tile.drawx() + Angles.trnsx(ang, len), y1 = tile.drawy() + Angles.trnsy(ang, len); - float dstTo = Vector2.dst(x1, y1, entity.lastx, entity.lasty); - float space = 4f; - - float xf = entity.lastx - x1, yf = entity.lasty - y1; - - Shapes.laser("transfer", "transfer-end", - x1, y1, entity.lastx, entity.lasty, entity.strength); - - Draw.color(Palette.accent); - for(int i = 0; i < dstTo / space - 1; i++){ - float fract = (i * space) / dstTo + ((Timers.time() / 90f) % (space / dstTo)); - Draw.alpha(Mathf.clamp(fract * 1.5f)); - Draw.rect("transfer-arrow", x1 + fract * xf, y1 + fract * yf, - 8, 8 * entity.strength, ang); - } - - Draw.color(); - - } - } - - @Override - public void update(Tile tile){ - ResupplyPointEntity entity = tile.entity(); - - if(!validTarget(entity, entity.target) || entity.target.distanceTo(tile) > supplyRadius){ - entity.target = null; - }else if(entity.target != null && entity.strength > 0.5f){ - - if(entity.timer.get(timerSupply, supplyInterval)){ - for(int i = 0; i < Item.all().size; i++){ - Item item = Item.getByID(i); - if(tile.entity.items.has(item) && entity.target.acceptsAmmo(item)){ - tile.entity.items.remove(item, 1); - entity.target.addAmmo(item); - break; - } - } - } - - entity.rotation = Mathf.slerpDelta(entity.rotation, entity.angleTo(entity.target), 0.5f); - } - - if(entity.target != null && entity.cons.valid()){ - entity.lastx = entity.target.x; - entity.lasty = entity.target.y; - entity.strength = Mathf.lerpDelta(entity.strength, 1f, 0.08f * Timers.delta()); - }else{ - entity.strength = Mathf.lerpDelta(entity.strength, 0f, 0.08f * Timers.delta()); - } - - if(entity.timer.get(timerTarget, 20)){ - rect.setSize(supplyRadius * 2).setCenter(tile.drawx(), tile.drawy()); - - entity.target = Units.getClosest(tile.getTeam(), tile.drawx(), tile.drawy(), supplyRadius, unit -> validTarget(entity, unit)); - } - } - - @Override - public boolean acceptItem(Item item, Tile tile, Tile source){ - return tile.entity.items.total() < itemCapacity; - } - - @Override - public TileEntity getEntity(){ - return new ResupplyPointEntity(); - } - - boolean validTarget(ResupplyPointEntity entity, Unit unit){ - if(unit == null || unit.inventory.totalAmmo() >= unit.inventory.ammoCapacity() - || unit.isDead()) return false; - - for(int i = 0; i < Item.all().size; i++){ - Item item = Item.getByID(i); - if(entity.items.has(item) && unit.acceptsAmmo(item)){ - return true; - } - } - return false; - } - - public class ResupplyPointEntity extends TileEntity{ - public Unit target; - public float strength, rotation = 90, lastx, lasty; - } -} diff --git a/core/src/io/anuke/mindustry/world/blocks/units/UnitPad.java b/core/src/io/anuke/mindustry/world/blocks/units/UnitPad.java index fe6a617435..3a247e11e2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/UnitPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/UnitPad.java @@ -13,7 +13,6 @@ import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Shaders; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.BarType; @@ -74,10 +73,6 @@ public class UnitPad extends Block{ unit.set(tile.drawx(), tile.drawy()); unit.add(); unit.getVelocity().y = factory.launchVelocity; - - //fill inventory with 1st ammo - AmmoType type = unit.getWeapon().getAmmoType(unit.getWeapon().getAcceptedItems().iterator().next()); - unit.inventory.fillAmmo(type); } } diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java index 5162e7f56b..ba55af64f6 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java @@ -11,6 +11,7 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.core.ThreadHandler.ThreadProvider; +import io.anuke.mindustry.game.GameMode; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.ui.dialogs.FileChooser; import io.anuke.ucore.function.Consumer; @@ -78,14 +79,24 @@ public class DesktopPlatform extends Platform{ DiscordRichPresence presence = new DiscordRichPresence(); if(!state.is(State.menu)){ - presence.state = Strings.capitalize(state.mode.name()) + ", Solo"; - presence.details = Strings.capitalize(world.getMap().name) + " | Wave " + state.wave; - presence.largeImageText = "Wave " + state.wave; + presence.state = Strings.capitalize(state.mode.name()); + if(state.mode == GameMode.noWaves){ + presence.details = Strings.capitalize(world.getMap().name); + }else{ + presence.details = Strings.capitalize(world.getMap().name) + " | Wave " + state.wave; + presence.largeImageText = "Wave " + state.wave; + } + + if(state.mode != GameMode.noWaves){ + presence.state = Strings.capitalize(state.mode.name()); + }else{ + presence.state = unitGroups[players[0].getTeam().ordinal()].size() == 1 ? "1 Unit Active" : + (unitGroups[players[0].getTeam().ordinal()].size() + " Units Active"); + } if(Net.active()){ presence.partyMax = 16; presence.partySize = playerGroup.size(); - presence.state = Strings.capitalize(state.mode.name()); } }else{ if(ui.editor != null && ui.editor.isShown()){ diff --git a/ios/Info.plist.xml b/ios/Info.plist.xml index 144e6b4c87..bc072235db 100644 --- a/ios/Info.plist.xml +++ b/ios/Info.plist.xml @@ -1,118 +1,119 @@ - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${app.name} - CFBundleExecutable - ${app.executable} - CFBundleIdentifier - ${app.id} - CFBundleInfoDictionaryVersion - 6.0 - MinimumOSVersion - 9.0.0 - CFBundleName - ${app.name} - CFBundlePackageType - APPL - CFBundleShortVersionString - ${app.version} - CFBundleIconName - AppIcon - CFBundleSignature - ???? - CFBundleVersion - ${app.build} - LSRequiresIPhoneOS - - UIViewControllerBasedStatusBarAppearance - - UIStatusBarHidden - - UIRequiresFullScreen - - NSPhotoLibraryAddUsageDescription - Mindustry - UIDeviceFamily - - 1 - 2 - - UIRequiredDeviceCapabilities - - armv7 - opengles-2 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${app.name} + CFBundleExecutable + ${app.executable} + CFBundleIdentifier + ${app.id} + CFBundleInfoDictionaryVersion + 6.0 + MinimumOSVersion + 9.0.0 + CFBundleName + ${app.name} + CFBundlePackageType + APPL + CFBundleShortVersionString + ${app.version} + CFBundleIconName + AppIcon + CFBundleSignature + ???? + CFBundleVersion + ${app.build} + LSRequiresIPhoneOS + + UIViewControllerBasedStatusBarAppearance + + UIStatusBarHidden + + UIRequiresFullScreen + + NSPhotoLibraryAddUsageDescription + Mindustry + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + armv7 + opengles-2 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait + - CFBundleDocumentTypes - - - CFBundleTypeIconFiles - - icon-72.png - - CFBundleTypeName - Mindustry Map File - CFBundleTypeRole - Editor - LSHandlerRank - Owner - LSItemContentTypes - - io.anuke.mindustry.mapfile + CFBundleDocumentTypes + + + CFBundleTypeIconFiles + + icon-72.png + + CFBundleTypeName + Mindustry Map File + CFBundleTypeRole + Editor + LSHandlerRank + Owner + LSItemContentTypes + + io.anuke.mindustry.mapfile + io.anuke.mindustry.savefile + + + + + UTExportedTypeDeclarations + + + UTTypeConformsTo + + public.data + + UTTypeDescription + Mindustry Save File + UTTypeIdentifier io.anuke.mindustry.savefile - - - - - UTExportedTypeDeclarations - - - UTTypeConformsTo - - public.data - - UTTypeDescription - Mindustry Save File - UTTypeIdentifier - io.anuke.mindustry.savefile - UTTypeTagSpecification - - public.filename-extension - msav - public.mime-type - mindustry/msav + UTTypeTagSpecification + + public.filename-extension + msav + public.mime-type + mindustry/msav + - - + - UTExportedTypeDeclarations - - - UTTypeConformsTo - - public.data - - UTTypeDescription - Mindustry Map File - UTTypeIdentifier - io.anuke.mindustry.mapfile - UTTypeTagSpecification + UTExportedTypeDeclarations + - public.filename-extension - mmap - public.mime-type - mindustry/mmap + UTTypeConformsTo + + public.data + + UTTypeDescription + Mindustry Map File + UTTypeIdentifier + io.anuke.mindustry.mapfile + UTTypeTagSpecification + + public.filename-extension + mmap + public.mime-type + mindustry/mmap + - - - + + diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index c9aa73d1c9..f407263e8a 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -32,6 +32,8 @@ import static io.anuke.mindustry.Vars.*; import static org.robovm.apple.foundation.NSPathUtilities.getDocumentsDirectory; public class IOSLauncher extends IOSApplication.Delegate { + private boolean forced; + @Override protected IOSApplication createApplication() { Net.setClientProvider(new KryoClient()); @@ -86,7 +88,17 @@ public class IOSLauncher extends IOSApplication.Delegate { p.getPopoverPresentationController().setSourceView(UIApplication.getSharedApplication().getKeyWindow().getRootViewController().getView()); UIApplication.getSharedApplication().getKeyWindow().getRootViewController() - .presentViewController(p, true, () -> io.anuke.ucore.util.Log.info("Success! Presented {0}", to)); + .presentViewController(p, true, () -> io.anuke.ucore.util.Log.info("Success! Presented {0}", to)); + } + + @Override + public void beginForceLandscape(){ + forced = true; + } + + @Override + public void endForceLandscape(){ + forced = false; } }; @@ -94,6 +106,11 @@ public class IOSLauncher extends IOSApplication.Delegate { return new IOSApplication(new Mindustry(), config); } + @Override + public UIInterfaceOrientationMask getSupportedInterfaceOrientations(UIApplication application, UIWindow window){ + return forced ? UIInterfaceOrientationMask.Landscape : UIInterfaceOrientationMask.All; + } + @Override public boolean openURL(UIApplication app, NSURL url, UIApplicationOpenURLOptions options) { System.out.println("Opened URL: " + url.getPath()); diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index 8008fb973c..e063d664f9 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -405,7 +405,6 @@ public class ServerControl extends Module{ for(Player player : playerGroup.all()){ if(player.name.equalsIgnoreCase(arg[0])){ target = player; - break; } } @@ -457,7 +456,6 @@ public class ServerControl extends Module{ if(player.con.address != null && player.con.address.equals(arg[0])){ netServer.kick(player.con.id, KickReason.banned); - break; } } }else{ @@ -472,7 +470,6 @@ public class ServerControl extends Module{ for(Player player : playerGroup.all()){ if(player.uuid.equals(arg[0])){ netServer.kick(player.con.id, KickReason.banned); - break; } } }else{