Merge branch 'master' of https://github.com/Anuken/Mindustry into 7.0-features
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 4.6 KiB |
@@ -363,6 +363,7 @@ publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure
|
|||||||
publish.error = Error publishing item: {0}
|
publish.error = Error publishing item: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Failed to initialize Steam services.\nError: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Walls To Cliffs
|
||||||
editor.brush = Brush
|
editor.brush = Brush
|
||||||
editor.openin = Open In Editor
|
editor.openin = Open In Editor
|
||||||
editor.oregen = Ore Generation
|
editor.oregen = Ore Generation
|
||||||
@@ -400,6 +401,8 @@ waves.sort.reverse = Reverse Sort
|
|||||||
waves.sort.begin = Begin
|
waves.sort.begin = Begin
|
||||||
waves.sort.health = Health
|
waves.sort.health = Health
|
||||||
waves.sort.type = Type
|
waves.sort.type = Type
|
||||||
|
waves.units.hide = Hide All
|
||||||
|
waves.units.show = Show All
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = counts
|
wavemode.counts = counts
|
||||||
@@ -628,6 +631,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility
|
|||||||
sector.windsweptIslands.name = Windswept Islands
|
sector.windsweptIslands.name = Windswept Islands
|
||||||
sector.extractionOutpost.name = Extraction Outpost
|
sector.extractionOutpost.name = Extraction Outpost
|
||||||
sector.planetaryTerminal.name = Planetary Launch Terminal
|
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||||
|
sector.coastline.name = Coastline
|
||||||
|
sector.navalFortress.name = Naval Fortress
|
||||||
|
|
||||||
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
|
sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
|
||||||
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders.
|
sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders.
|
||||||
@@ -1395,6 +1400,7 @@ hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit p
|
|||||||
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down.
|
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down.
|
||||||
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a [accent]Foundation[] core over the [accent]Shard[] core. Make sure it is free from nearby obstructions.
|
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a [accent]Foundation[] core over the [accent]Shard[] core. Make sure it is free from nearby obstructions.
|
||||||
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
|
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
|
||||||
|
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.
|
||||||
hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[].
|
hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[].
|
||||||
hint.coopCampaign = When playing the [accent]co-op campaign[], items that are produced in the current map will also be sent [accent]to your local sectors[].\n\nAny new research done by the host also carries over.
|
hint.coopCampaign = When playing the [accent]co-op campaign[], items that are produced in the current map will also be sent [accent]to your local sectors[].\n\nAny new research done by the host also carries over.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ credits.text = Creado por [royal]Anuken[] - [sky]anukendev@gmail.com[]
|
|||||||
credits = Créditos
|
credits = Créditos
|
||||||
contributors = Traductores y Contribuidores
|
contributors = Traductores y Contribuidores
|
||||||
discord = ¡Únete al Discord de Mindustry!
|
discord = ¡Únete al Discord de Mindustry!
|
||||||
link.discord.description = El servidor official de Discord de Mindustry
|
link.discord.description = El servidor oficial de Discord de Mindustry
|
||||||
link.reddit.description = El subreddit de Mindustry
|
link.reddit.description = El subreddit de Mindustry
|
||||||
link.github.description = Código fuente del juego
|
link.github.description = Código fuente del juego
|
||||||
link.changelog.description = Lista de actualizaciones
|
link.changelog.description = Lista de actualizaciones
|
||||||
@@ -49,24 +49,24 @@ mods.github.open = Repositorio
|
|||||||
mods.browser.sortdate = Más recientes
|
mods.browser.sortdate = Más recientes
|
||||||
mods.browser.sortstars = Mejor valorados
|
mods.browser.sortstars = Mejor valorados
|
||||||
|
|
||||||
schematic = Plantilla
|
schematic = Esquema
|
||||||
schematic.add = Guardar plantilla...
|
schematic.add = Guardar Esquema...
|
||||||
schematics = Plantillas
|
schematics = Esquemas
|
||||||
schematic.replace = Ya existe una plantilla con ese nombre. ¿Deseas remplazarla?
|
schematic.replace = Ya existe un esquema con ese nombre. ¿Deseas remplazarlo?
|
||||||
schematic.exists = Ya existe una plantilla con ese nombre.
|
schematic.exists = Ya existe un esquema con ese nombre.
|
||||||
schematic.import = Importar plantilla...
|
schematic.import = Importar Esquema...
|
||||||
schematic.exportfile = Exportar archivo
|
schematic.exportfile = Exportar Archivo
|
||||||
schematic.importfile = Importar archivo
|
schematic.importfile = Importar Archivo
|
||||||
schematic.browseworkshop = Buscar en Steam Workshop
|
schematic.browseworkshop = Buscar en Steam Workshop
|
||||||
schematic.copy = Copiar al portapapeles.
|
schematic.copy = Copiar al portapapeles.
|
||||||
schematic.copy.import = Importar desde el portapapeles.
|
schematic.copy.import = Importar desde el portapapeles.
|
||||||
schematic.shareworkshop = Compartir en Steam Workshop
|
schematic.shareworkshop = Compartir en Steam Workshop
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar plantilla
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar esquema
|
||||||
schematic.saved = Plantilla guardada.
|
schematic.saved = Esquema guardado.
|
||||||
schematic.delete.confirm = Se borrará ésta plantilla.
|
schematic.delete.confirm = Se borrará éste esquema.
|
||||||
schematic.rename = Renombrar plantilla
|
schematic.rename = Renombrar Esquema
|
||||||
schematic.info = {0}x{1}, {2} bloques
|
schematic.info = {0}x{1}, {2} bloques
|
||||||
schematic.disabled = [scarlet]Plantillas desactivadas.[]\nNo puedes usar plantillas en este [accent]mapa[] o [accent]servidor.
|
schematic.disabled = [scarlet]Esquemas desactivados.[]\nNo puedes usar esquemas en este [accent]mapa[] o [accent]servidor.
|
||||||
schematic.tags = Etiquetas:
|
schematic.tags = Etiquetas:
|
||||||
schematic.edittags = Editar Etiquetas
|
schematic.edittags = Editar Etiquetas
|
||||||
schematic.addtag = Añadir Etiqueta
|
schematic.addtag = Añadir Etiqueta
|
||||||
@@ -78,6 +78,7 @@ schematic.tagexists = Esa etiqueta ya existe.
|
|||||||
|
|
||||||
stats = Estadísticas
|
stats = Estadísticas
|
||||||
stat.wave = Oleadas Derrotadas:[accent] {0}
|
stat.wave = Oleadas Derrotadas:[accent] {0}
|
||||||
|
stat.unitsCreated = Unidades Creadas:[accent] {0}
|
||||||
stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0}
|
stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0}
|
||||||
stat.built = Estructuras Construidas:[accent] {0}
|
stat.built = Estructuras Construidas:[accent] {0}
|
||||||
stat.destroyed = Estructuras Destruidas:[accent] {0}
|
stat.destroyed = Estructuras Destruidas:[accent] {0}
|
||||||
@@ -93,7 +94,8 @@ level.select = Selección de Nivel
|
|||||||
level.mode = Modo de juego:
|
level.mode = Modo de juego:
|
||||||
coreattack = < ¡El núcleo está bajo ataque! >
|
coreattack = < ¡El núcleo está bajo ataque! >
|
||||||
nearpoint = [[ [scarlet]ABANDONA EL PUNTO DE ATERRIZAJE INMEDIATAMENTE[] ]\nRiesgo de aniquilación inminente
|
nearpoint = [[ [scarlet]ABANDONA EL PUNTO DE ATERRIZAJE INMEDIATAMENTE[] ]\nRiesgo de aniquilación inminente
|
||||||
database = Base de datos
|
database = Base de Datos del Núcleo
|
||||||
|
database.button = Base de Datos
|
||||||
savegame = Guardar Partida
|
savegame = Guardar Partida
|
||||||
loadgame = Cargar Partida
|
loadgame = Cargar Partida
|
||||||
joingame = Unirse a Partida
|
joingame = Unirse a Partida
|
||||||
@@ -168,8 +170,9 @@ launchcore = Lanzar núcleo
|
|||||||
filename = Nombre del archivo:
|
filename = Nombre del archivo:
|
||||||
unlocked = ¡Nuevo contenido en la Base de Datos!
|
unlocked = ¡Nuevo contenido en la Base de Datos!
|
||||||
available = ¡Nueva investigación disponible!
|
available = ¡Nueva investigación disponible!
|
||||||
|
unlock.incampaign = < Desbloquealo en campaña para más detalles >
|
||||||
completed = [accent]Completado
|
completed = [accent]Completado
|
||||||
techtree = Tecnologías
|
techtree = Árbol de Tecnologías
|
||||||
research.legacy = Se han encontrado datos guardados de investigaciones tecnológicas realizadas en la versión [accent]5.0[].\n¿Quieres [accent]cargar estos datos[], o [accent]descartarlos[] para reiniciar los descubrimientos tecnológicos del nuevo modo Campaña? (Recomendado)
|
research.legacy = Se han encontrado datos guardados de investigaciones tecnológicas realizadas en la versión [accent]5.0[].\n¿Quieres [accent]cargar estos datos[], o [accent]descartarlos[] para reiniciar los descubrimientos tecnológicos del nuevo modo Campaña? (Recomendado)
|
||||||
research.load = Cargar
|
research.load = Cargar
|
||||||
research.discard = Descartar
|
research.discard = Descartar
|
||||||
@@ -214,6 +217,7 @@ hosts.none = [lightgray]No se han encontrado partidas en LAN
|
|||||||
host.invalid = [scarlet]No se pudo conectar con el anfitrión
|
host.invalid = [scarlet]No se pudo conectar con el anfitrión
|
||||||
|
|
||||||
servers.local = Servidores Locales
|
servers.local = Servidores Locales
|
||||||
|
servers.local.steam = Partidas Públicas y Lervidores Locales
|
||||||
servers.remote = Servidores Remotos
|
servers.remote = Servidores Remotos
|
||||||
servers.global = Servidores de la Comunidad
|
servers.global = Servidores de la Comunidad
|
||||||
|
|
||||||
@@ -316,7 +320,7 @@ data.import.confirm = Importando los datos externos borrará[scarlet] todo[] tu
|
|||||||
quit.confirm = ¿Quieres salir de la partida?
|
quit.confirm = ¿Quieres salir de la partida?
|
||||||
quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo en[accent] Ajustes->Juego->Volver a hacer tutorial.[]
|
quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo en[accent] Ajustes->Juego->Volver a hacer tutorial.[]
|
||||||
loading = [accent]Cargando...
|
loading = [accent]Cargando...
|
||||||
reloading = [accent]Recargando mods...
|
downloading = [accent]Descargando...
|
||||||
saving = [accent]Guardando...
|
saving = [accent]Guardando...
|
||||||
respawn = [accent][[{0}][] para reaparecer en el núcleo
|
respawn = [accent][[{0}][] para reaparecer en el núcleo
|
||||||
cancelbuilding = [accent][[{0}][] para limpiar el plan
|
cancelbuilding = [accent][[{0}][] para limpiar el plan
|
||||||
@@ -360,6 +364,7 @@ publish.confirm = ¿Estás seguro de que quieres publicar esto?\n\n[lightgray]¡
|
|||||||
publish.error = Error publicando el artículo: {0}
|
publish.error = Error publicando el artículo: {0}
|
||||||
steam.error = Error al inicializar los servicios de Steam.\nError: {0}
|
steam.error = Error al inicializar los servicios de Steam.\nError: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Paredes a Colinas
|
||||||
editor.brush = Pincel
|
editor.brush = Pincel
|
||||||
editor.openin = Abrir en el Editor
|
editor.openin = Abrir en el Editor
|
||||||
editor.oregen = Generación de Minerales
|
editor.oregen = Generación de Minerales
|
||||||
@@ -383,6 +388,7 @@ waves.waves = oleada(s)
|
|||||||
waves.perspawn = por lugar de aparición
|
waves.perspawn = por lugar de aparición
|
||||||
waves.shields = escudo/oleadas
|
waves.shields = escudo/oleadas
|
||||||
waves.to = hasta
|
waves.to = hasta
|
||||||
|
waves.max = Oleadas máximas
|
||||||
waves.guardian = Guardián
|
waves.guardian = Guardián
|
||||||
waves.preview = Vista previa
|
waves.preview = Vista previa
|
||||||
waves.edit = Editar...
|
waves.edit = Editar...
|
||||||
@@ -391,6 +397,13 @@ waves.load = Cargar del Portapapeles
|
|||||||
waves.invalid = Oleadas inválidaas en el portapapeles.
|
waves.invalid = Oleadas inválidaas en el portapapeles.
|
||||||
waves.copied = Oleadas copiadas.
|
waves.copied = Oleadas copiadas.
|
||||||
waves.none = No hay enemigos definidos.\nNótese que las listas de oleadas vacías se sustituirán por la lista por defecto.
|
waves.none = No hay enemigos definidos.\nNótese que las listas de oleadas vacías se sustituirán por la lista por defecto.
|
||||||
|
waves.sort = Ordenar por
|
||||||
|
waves.sort.reverse = Al revés
|
||||||
|
waves.sort.begin = Inicio
|
||||||
|
waves.sort.health = Vida
|
||||||
|
waves.sort.type = Tipo
|
||||||
|
waves.units.hide = Ocultar Todo
|
||||||
|
waves.units.show = Mostrar Todo
|
||||||
|
|
||||||
#Estos están en minúscula intencionadamente.
|
#Estos están en minúscula intencionadamente.
|
||||||
wavemode.counts = limitadas
|
wavemode.counts = limitadas
|
||||||
@@ -537,6 +550,7 @@ configure = Configurar carga inicial
|
|||||||
loadout = Carga Inicial
|
loadout = Carga Inicial
|
||||||
resources = Recursos
|
resources = Recursos
|
||||||
bannedblocks = Bloques prohibidos
|
bannedblocks = Bloques prohibidos
|
||||||
|
bannedunits = Unidades prohibidas
|
||||||
addall = Añadir todo
|
addall = Añadir todo
|
||||||
launch.from = Lanzando desde: [accent]{0}
|
launch.from = Lanzando desde: [accent]{0}
|
||||||
launch.destination = Destino: {0}
|
launch.destination = Destino: {0}
|
||||||
@@ -561,6 +575,8 @@ weather.sandstorm.name = Tormenta de arena
|
|||||||
weather.sporestorm.name = Tormenta de esporas
|
weather.sporestorm.name = Tormenta de esporas
|
||||||
weather.fog.name = Niebla
|
weather.fog.name = Niebla
|
||||||
|
|
||||||
|
sectorlist = Sectores
|
||||||
|
sectorlist.attacked = {0} Bajo ataque
|
||||||
sectors.unexplored = [lightgray]No explorado
|
sectors.unexplored = [lightgray]No explorado
|
||||||
sectors.resources = Recursos:
|
sectors.resources = Recursos:
|
||||||
sectors.production = Producción:
|
sectors.production = Producción:
|
||||||
@@ -585,7 +601,7 @@ sector.missingresources = [scarlet]Recursos Insuficientes
|
|||||||
sector.attacked = Sector [accent]{0}[white] bajo ataque[]!
|
sector.attacked = Sector [accent]{0}[white] bajo ataque[]!
|
||||||
sector.lost = ¡Sector [accent]{0}[white] perdido[]!
|
sector.lost = ¡Sector [accent]{0}[white] perdido[]!
|
||||||
#nota: el espacio en blanco en la línea siguiente es intencionado
|
#nota: el espacio en blanco en la línea siguiente es intencionado
|
||||||
sector.captured = ¡Sector [accent]{0}[white] capturado[]!
|
sector.captured = ¡Sector [accent]{0}[white] capturado!
|
||||||
sector.changeicon = Cambiar Icono
|
sector.changeicon = Cambiar Icono
|
||||||
|
|
||||||
threat.low = Baja
|
threat.low = Baja
|
||||||
@@ -615,6 +631,8 @@ sector.biomassFacility.name = Centro de Sintetización de Biomasa
|
|||||||
sector.windsweptIslands.name = Islas Windswept
|
sector.windsweptIslands.name = Islas Windswept
|
||||||
sector.extractionOutpost.name = Puesto de avanzada de Extracción
|
sector.extractionOutpost.name = Puesto de avanzada de Extracción
|
||||||
sector.planetaryTerminal.name = Terminal de Lanzamiento Interplanetario
|
sector.planetaryTerminal.name = Terminal de Lanzamiento Interplanetario
|
||||||
|
sector.coastline.name = Línea Costera
|
||||||
|
sector.navalFortress.name = Fortaleza Naval
|
||||||
|
|
||||||
sector.groundZero.description = La ubicación adecuada para empezar una vez más. Amenaza enemiga baja. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante.
|
sector.groundZero.description = La ubicación adecuada para empezar una vez más. Amenaza enemiga baja. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante.
|
||||||
sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no las contendrán para siempre.\n\nAprende a usar la energía. Construye generadores de combustión. Aprende a usar reparadores.
|
sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no las contendrán para siempre.\n\nAprende a usar la energía. Construye generadores de combustión. Aprende a usar reparadores.
|
||||||
@@ -642,10 +660,12 @@ status.sapped.name = Debilitado
|
|||||||
status.electrified.name = Electrificado
|
status.electrified.name = Electrificado
|
||||||
status.spore-slowed.name = Ralentizado
|
status.spore-slowed.name = Ralentizado
|
||||||
status.tarred.name = Alquitranado
|
status.tarred.name = Alquitranado
|
||||||
|
status.overdrive.name = Sobremarcha
|
||||||
status.overclock.name = Sobrecargado
|
status.overclock.name = Sobrecargado
|
||||||
status.shocked.name = Aturdido
|
status.shocked.name = Aturdido
|
||||||
status.blasted.name = Explotado
|
status.blasted.name = Explotado
|
||||||
status.unmoving.name = Inmóvil
|
status.unmoving.name = Inmóvil
|
||||||
|
status.boss.name = Guardián
|
||||||
|
|
||||||
settings.language = Idioma
|
settings.language = Idioma
|
||||||
settings.data = Datos del Juego
|
settings.data = Datos del Juego
|
||||||
@@ -770,6 +790,7 @@ bar.corereq = Necesitas un núcleo base
|
|||||||
bar.drillspeed = Velocidad del Taladro: {0}/s
|
bar.drillspeed = Velocidad del Taladro: {0}/s
|
||||||
bar.pumpspeed = Velocidad de bombeado: {0}/s
|
bar.pumpspeed = Velocidad de bombeado: {0}/s
|
||||||
bar.efficiency = Eficiencia: {0}%
|
bar.efficiency = Eficiencia: {0}%
|
||||||
|
bar.boost = Aceleración: +{0}%
|
||||||
bar.powerbalance = Energía: {0}
|
bar.powerbalance = Energía: {0}
|
||||||
bar.powerstored = Almacenados: {0}/{1}
|
bar.powerstored = Almacenados: {0}/{1}
|
||||||
bar.poweramount = Energía: {0}
|
bar.poweramount = Energía: {0}
|
||||||
@@ -832,6 +853,7 @@ category.items = Objetos
|
|||||||
category.crafting = Fabricación
|
category.crafting = Fabricación
|
||||||
category.function = Función
|
category.function = Función
|
||||||
category.optional = Mejoras Opcionales
|
category.optional = Mejoras Opcionales
|
||||||
|
setting.skipcoreanimation.name = Saltar animación de Lanzamiento/Aterrizaje del Núcleo
|
||||||
setting.landscape.name = Bloquear modo horizontal
|
setting.landscape.name = Bloquear modo horizontal
|
||||||
setting.shadows.name = Sombras
|
setting.shadows.name = Sombras
|
||||||
setting.blockreplace.name = Sugerir bloques al construir
|
setting.blockreplace.name = Sugerir bloques al construir
|
||||||
@@ -872,7 +894,9 @@ setting.saveinterval.name = Intervalo del Autoguardado
|
|||||||
setting.seconds = {0} segundos
|
setting.seconds = {0} segundos
|
||||||
setting.milliseconds = {0} milisegundos
|
setting.milliseconds = {0} milisegundos
|
||||||
setting.fullscreen.name = Pantalla Completa
|
setting.fullscreen.name = Pantalla Completa
|
||||||
setting.borderlesswindow.name = Ventana sin Bordes[lightgray] (podría requerir un reinicio)
|
setting.borderlesswindow.name = Ventana sin Bordes[lightgray]
|
||||||
|
setting.borderlesswindow.name.windows = Pantalla Completa sin Bordes
|
||||||
|
setting.borderlesswindow.description = Un reinicio podría ser requerido para aplicar cambios.
|
||||||
setting.fps.name = Mostrar FPS y Ping
|
setting.fps.name = Mostrar FPS y Ping
|
||||||
setting.smoothcamera.name = Movimiento de cámara suave
|
setting.smoothcamera.name = Movimiento de cámara suave
|
||||||
setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla)
|
setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla)
|
||||||
@@ -995,6 +1019,8 @@ rules.wavetimer = Temporizador de Oleadas
|
|||||||
rules.waves = Oleadas
|
rules.waves = Oleadas
|
||||||
rules.attack = Asalto
|
rules.attack = Asalto
|
||||||
rules.buildai = Contrucción de IA
|
rules.buildai = Contrucción de IA
|
||||||
|
rules.aitier = Nivel de IA
|
||||||
|
rules.cleanupdeadteams = Limpiar las construcciones de enemigos derrotados (PvP)
|
||||||
rules.corecapture = Capturar Núcleo al Destruirlo
|
rules.corecapture = Capturar Núcleo al Destruirlo
|
||||||
rules.polygoncoreprotection = Protección de Núcleo Poligonal
|
rules.polygoncoreprotection = Protección de Núcleo Poligonal
|
||||||
rules.enemyCheat = La IA (Equipo Rojo) tiene recursos infinitos
|
rules.enemyCheat = La IA (Equipo Rojo) tiene recursos infinitos
|
||||||
@@ -1013,12 +1039,15 @@ rules.deconstructrefundmultiplier = Multiplicador de devolución de desconstrucc
|
|||||||
rules.waitForWaveToEnd = Las oleadas esperan a los enemigos
|
rules.waitForWaveToEnd = Las oleadas esperan a los enemigos
|
||||||
rules.dropzoneradius = Radio de zona de caída:[lightgray] (casillas)
|
rules.dropzoneradius = Radio de zona de caída:[lightgray] (casillas)
|
||||||
rules.unitammo = Las unidades necesitan munición
|
rules.unitammo = Las unidades necesitan munición
|
||||||
|
rules.enemyteam = Equipo Enemigo
|
||||||
|
rules.playerteam = Equipo del jugador
|
||||||
rules.title.waves = Oleadas
|
rules.title.waves = Oleadas
|
||||||
rules.title.resourcesbuilding = Recursos y Construcción
|
rules.title.resourcesbuilding = Recursos y Construcción
|
||||||
rules.title.enemy = Enemigos
|
rules.title.enemy = Enemigos
|
||||||
rules.title.unit = Unidades
|
rules.title.unit = Unidades
|
||||||
rules.title.experimental = Experimental
|
rules.title.experimental = Experimental
|
||||||
rules.title.environment = Entorno
|
rules.title.environment = Entorno
|
||||||
|
rules.title.teams = Equipos
|
||||||
rules.lighting = Iluminación
|
rules.lighting = Iluminación
|
||||||
rules.enemyLights = Luces enemigas
|
rules.enemyLights = Luces enemigas
|
||||||
rules.fire = Fuego
|
rules.fire = Fuego
|
||||||
@@ -1097,7 +1126,6 @@ unit.reign.name = Reign
|
|||||||
unit.vela.name = Vela
|
unit.vela.name = Vela
|
||||||
unit.corvus.name = Corvus
|
unit.corvus.name = Corvus
|
||||||
|
|
||||||
block.resupply-point.name = Punto de reabastecimiento
|
|
||||||
block.parallax.name = Parallax
|
block.parallax.name = Parallax
|
||||||
block.cliff.name = Pared
|
block.cliff.name = Pared
|
||||||
block.sand-boulder.name = Roca de arena
|
block.sand-boulder.name = Roca de arena
|
||||||
@@ -1137,6 +1165,7 @@ block.core-nucleus.name = Núcleo: Nucleus
|
|||||||
block.deep-water.name = Aguas profundas
|
block.deep-water.name = Aguas profundas
|
||||||
block.shallow-water.name = Agua
|
block.shallow-water.name = Agua
|
||||||
block.tainted-water.name = Agua contaminada
|
block.tainted-water.name = Agua contaminada
|
||||||
|
block.deep-tainted-water.name = Agua profunda contaminada
|
||||||
block.darksand-tainted-water.name = Agua contaminada con arena oscura
|
block.darksand-tainted-water.name = Agua contaminada con arena oscura
|
||||||
block.tar.name = Alquitrán
|
block.tar.name = Alquitrán
|
||||||
block.stone.name = Piedra
|
block.stone.name = Piedra
|
||||||
@@ -1400,7 +1429,6 @@ liquid.slag.description = Diferentes tipos de metales fundidos mezclados. Puede
|
|||||||
liquid.oil.description = Se utiliza en producción de materiales avanzados, y en munición incendiaria.
|
liquid.oil.description = Se utiliza en producción de materiales avanzados, y en munición incendiaria.
|
||||||
liquid.cryofluid.description = Usado como refrigerante para reactores, torretas, y fábricas.
|
liquid.cryofluid.description = Usado como refrigerante para reactores, torretas, y fábricas.
|
||||||
|
|
||||||
block.resupply-point.description = Reabastece unidades cercanas con munición de cobre. No es compatible con unidades que requieren energía.
|
|
||||||
block.armored-conveyor.description = Mueve objetos. No acepta objetos si entran por los lados.
|
block.armored-conveyor.description = Mueve objetos. No acepta objetos si entran por los lados.
|
||||||
block.illuminator.description = Emite luz.
|
block.illuminator.description = Emite luz.
|
||||||
block.message.description = Almacena un mensaje. Puedes usarlo para comunicarte con aliados o dejar recordatorios.
|
block.message.description = Almacena un mensaje. Puedes usarlo para comunicarte con aliados o dejar recordatorios.
|
||||||
@@ -1420,12 +1448,14 @@ block.spore-press.description = Comprime esporas en petróleo.
|
|||||||
block.pulverizer.description = Despedaza la chatarra en arena. Útil cuando no hay arena natural.
|
block.pulverizer.description = Despedaza la chatarra en arena. Útil cuando no hay arena natural.
|
||||||
block.coal-centrifuge.description = Solidifica petróleo en piezas de carbón.
|
block.coal-centrifuge.description = Solidifica petróleo en piezas de carbón.
|
||||||
block.incinerator.description = Se deshace de cualquier líquido o material producido en exceso.
|
block.incinerator.description = Se deshace de cualquier líquido o material producido en exceso.
|
||||||
block.power-void.description = Elimina toda la energía que se le da. Solo en disponible en el modo Libre.
|
block.power-void.description = Elimina toda la energía que se le da. Solo disponible en el modo Libre.
|
||||||
block.power-source.description = Da energía infinita. Solo disponible en el modo Libre.
|
block.power-source.description = Da energía infinita. Solo disponible en el modo Libre.
|
||||||
block.item-source.description = Hace aparecer minerales de forma infinita. Solo disponible en el modo Libre.
|
block.item-source.description = Genera objetos de forma infinita. Solo disponible en el modo Libre.
|
||||||
block.item-void.description = Destruye cuanquier objeto que entra en él. Solo disponible en el modo Libre.
|
block.item-void.description = Destruye los objetos que entran en él. Solo disponible en el modo Libre.
|
||||||
block.liquid-source.description = Da líquido infinito. Solo disponible en el modo Libre.
|
block.liquid-source.description = Genera líquido infinito. Solo disponible en el modo Libre.
|
||||||
block.liquid-void.description = Elimina cualquier liquido que entra en él. Solo disponible en el modo Libre.
|
block.liquid-void.description = Elimina los liquidos que entran en él. Solo disponible en el modo Libre.
|
||||||
|
block.payload-source.description = Genera salidas de cargas infinitas. Solo disponible en el modo Libre.
|
||||||
|
block.payload-void.description = Destruye cualquier carga. Solo disponible en el modo Libre.
|
||||||
block.copper-wall.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.
|
block.copper-wall.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.
|
||||||
block.copper-wall-large.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.\nOcupa múltiples casillas.
|
block.copper-wall-large.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.\nOcupa múltiples casillas.
|
||||||
block.titanium-wall.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos.
|
block.titanium-wall.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos.
|
||||||
@@ -1578,6 +1608,11 @@ unit.omura.description = Dispara rayos contínuos perforantes. Construye unidade
|
|||||||
unit.alpha.description = Defiende el núcleo Shard de los enemigos. Construye estructuras.
|
unit.alpha.description = Defiende el núcleo Shard de los enemigos. Construye estructuras.
|
||||||
unit.beta.description = Defiende el núcleo Foundation de los enemigos. Construye estructuras.
|
unit.beta.description = Defiende el núcleo Foundation de los enemigos. Construye estructuras.
|
||||||
unit.gamma.description = Defiende el núcleo Nucleus de los enemigos. Construye estructuras.
|
unit.gamma.description = Defiende el núcleo Nucleus de los enemigos. Construye estructuras.
|
||||||
|
unit.retusa.description = Coloca minas de proximidad. Repara unidades aliadas.
|
||||||
|
unit.oxynoe.description = Dispara llamaradas de fuego que reparan estructuras aliadas y daña unidades enemigas cercanas. Destruye proyectiles enemigos cercanos con una torreta de defensa precisa.
|
||||||
|
unit.cyerce.description = Dispara misiles rastreadores en grupos. Repara unidades aliadas.
|
||||||
|
unit.aegires.description = Impacta a todas las unidades y estructuras enemigas que entran en su campo de energía y repara a las aliadas.
|
||||||
|
unit.navanax.description = Dispara proyectiles EMP explosivos que infligen un daño significativo a las redes eléctricas enemigas y reparan las estructuras aliadas. Derrite a los enemigos cercanos con 4 torretas láser autónomas.
|
||||||
|
|
||||||
lst.read = Lee un número desde una unidad de memoria conectada.
|
lst.read = Lee un número desde una unidad de memoria conectada.
|
||||||
lst.write = Escribe un número en una unidad de memoria conectada.
|
lst.write = Escribe un número en una unidad de memoria conectada.
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ level.mode = Mode de jeu :
|
|||||||
coreattack = [scarlet]< Le Noyau est attaqué ! >
|
coreattack = [scarlet]< Le Noyau est attaqué ! >
|
||||||
nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente
|
nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente
|
||||||
database = Base de données
|
database = Base de données
|
||||||
|
database.button = Base de données
|
||||||
savegame = Sauvegarder la partie
|
savegame = Sauvegarder la partie
|
||||||
loadgame = Charger une partie
|
loadgame = Charger une partie
|
||||||
joingame = Rejoindre une partie
|
joingame = Rejoindre une partie
|
||||||
@@ -168,6 +169,7 @@ launchcore = Lancer le Noyau
|
|||||||
filename = Nom du fichier :
|
filename = Nom du fichier :
|
||||||
unlocked = Nouveau contenu débloqué !
|
unlocked = Nouveau contenu débloqué !
|
||||||
available = Nouvelle recherche disponible !
|
available = Nouvelle recherche disponible !
|
||||||
|
unlock.incampaign = < Débloquer dans la campagne pour plus de détails >
|
||||||
completed = [accent]Complété
|
completed = [accent]Complété
|
||||||
techtree = Arbre technologique
|
techtree = Arbre technologique
|
||||||
research.legacy = Des données de recherche de la [accent]5.0[] ont été trouvées.\nVoulez-vous [accent]charger ces données[] ou [accent]les ignorer[] et recommencer la recherche dans la nouvelle campagne ? (recommandé)
|
research.legacy = Des données de recherche de la [accent]5.0[] ont été trouvées.\nVoulez-vous [accent]charger ces données[] ou [accent]les ignorer[] et recommencer la recherche dans la nouvelle campagne ? (recommandé)
|
||||||
@@ -393,6 +395,13 @@ waves.load = Coller depuis le presse-papiers
|
|||||||
waves.invalid = Vagues invalides dans le presse-papiers.
|
waves.invalid = Vagues invalides dans le presse-papiers.
|
||||||
waves.copied = Vagues copiées
|
waves.copied = Vagues copiées
|
||||||
waves.none = Aucun ennemi défini.\nNotez que les vagues vides seront automatiquement remplacées par une vague générée par défaut.
|
waves.none = Aucun ennemi défini.\nNotez que les vagues vides seront automatiquement remplacées par une vague générée par défaut.
|
||||||
|
waves.sort = Trier Par
|
||||||
|
waves.sort.reverse = Tri inversé
|
||||||
|
waves.sort.begin = Commence par
|
||||||
|
waves.sort.health = Santé
|
||||||
|
waves.sort.type = Type
|
||||||
|
waves.units.hide = Tout masquer
|
||||||
|
waves.units.show = Tout afficher
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = compte
|
wavemode.counts = compte
|
||||||
@@ -618,6 +627,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility
|
|||||||
sector.windsweptIslands.name = Windswept Islands
|
sector.windsweptIslands.name = Windswept Islands
|
||||||
sector.extractionOutpost.name = Extraction Outpost
|
sector.extractionOutpost.name = Extraction Outpost
|
||||||
sector.planetaryTerminal.name = Planetary Launch Terminal
|
sector.planetaryTerminal.name = Planetary Launch Terminal
|
||||||
|
sector.coastline.name = Coastline
|
||||||
|
sector.navalFortress.name = Naval Fortress
|
||||||
|
|
||||||
sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration.
|
sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration.
|
||||||
sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprenez à utiliser les bâtiments de soin.
|
sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprenez à utiliser les bâtiments de soin.
|
||||||
@@ -646,6 +657,7 @@ status.sapped.name = Sapé
|
|||||||
status.electrified.name = Electrifié
|
status.electrified.name = Electrifié
|
||||||
status.spore-slowed.name = Spore ralentie
|
status.spore-slowed.name = Spore ralentie
|
||||||
status.tarred.name = Goudronné
|
status.tarred.name = Goudronné
|
||||||
|
status.overdrive.name = Surmultiplié
|
||||||
status.overclock.name = Surcadençage
|
status.overclock.name = Surcadençage
|
||||||
status.shocked.name = Étourdie
|
status.shocked.name = Étourdie
|
||||||
status.blasted.name = Foudroyé
|
status.blasted.name = Foudroyé
|
||||||
@@ -1151,9 +1163,10 @@ block.spawn.name = Point d'Apparition Ennemi
|
|||||||
block.core-shard.name = Noyau: Fragment
|
block.core-shard.name = Noyau: Fragment
|
||||||
block.core-foundation.name = Noyau: Fondation
|
block.core-foundation.name = Noyau: Fondation
|
||||||
block.core-nucleus.name = Noyau: Épicentre
|
block.core-nucleus.name = Noyau: Épicentre
|
||||||
block.deep-water.name = Eau profonde
|
block.deep-water.name = Eau Profonde
|
||||||
block.shallow-water.name = Eau
|
block.shallow-water.name = Eau
|
||||||
block.tainted-water.name = Eau Contaminée
|
block.tainted-water.name = Eau Contaminée
|
||||||
|
block.deep-tainted-water.name = Eau Profonde Contaminée
|
||||||
block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable sombre
|
block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable sombre
|
||||||
block.tar.name = Goudron
|
block.tar.name = Goudron
|
||||||
block.stone.name = Roche
|
block.stone.name = Roche
|
||||||
@@ -1387,6 +1400,7 @@ hint.generator = \uf879 Les [accent]Générateurs à combustion[] brûlent du Ch
|
|||||||
hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien.
|
hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien.
|
||||||
hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un Noyau [accent]Fondation[] sur le Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction.
|
hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un Noyau [accent]Fondation[] sur le Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction.
|
||||||
hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[].
|
hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[].
|
||||||
|
hint.presetDifficulty = Ce secteur a un niveau de menace ennemi [scarlet]élevé[].\nIl n'est [accent]pas recommandé[] de se lancer dans de tels secteurs sans la technologie et la préparation appropriées.
|
||||||
hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[].
|
hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[].
|
||||||
hint.coopCampaign = Quand vous jouez en [accent]campagne multijoueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées.
|
hint.coopCampaign = Quand vous jouez en [accent]campagne multijoueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées.
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ stat.destroyed = 破壊した建造物数:[accent] {0}
|
|||||||
stat.deconstructed = 解体した建造物数:[accent] {0}
|
stat.deconstructed = 解体した建造物数:[accent] {0}
|
||||||
stat.playtime = プレイ時間:[accent] {0}
|
stat.playtime = プレイ時間:[accent] {0}
|
||||||
|
|
||||||
globalitems = [accent]グローバルアイテム
|
globalitems = [accent]トータルアイテム
|
||||||
map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
|
map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
|
||||||
level.highscore = ハイスコア: [accent]{0}
|
level.highscore = ハイスコア: [accent]{0}
|
||||||
level.select = レベル選択
|
level.select = レベル選択
|
||||||
@@ -93,6 +93,7 @@ level.mode = ゲームモード:
|
|||||||
coreattack = < コアが攻撃を受けています! >
|
coreattack = < コアが攻撃を受けています! >
|
||||||
nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます
|
nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます
|
||||||
database = コアデータベース
|
database = コアデータベース
|
||||||
|
database.button = データベース
|
||||||
savegame = 保存
|
savegame = 保存
|
||||||
loadgame = 読み込む
|
loadgame = 読み込む
|
||||||
joingame = マルチプレイ
|
joingame = マルチプレイ
|
||||||
@@ -121,12 +122,12 @@ committingchanges = 変更を適応中
|
|||||||
done = 完了
|
done = 完了
|
||||||
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
|
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
|
||||||
|
|
||||||
mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。おそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。
|
mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。\nおそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [lightgray]Modが見つかりませんでした!
|
mods.none = [lightgray]Modが見つかりませんでした!
|
||||||
mods.guide = Mod作成ガイド
|
mods.guide = Mod作成ガイド
|
||||||
mods.report = バグを報告する
|
mods.report = バグを報告する
|
||||||
mods.openfolder = Modのフォルダを開く
|
mods.openfolder = Modフォルダを開く
|
||||||
mods.viewcontent = コンテンツを見る
|
mods.viewcontent = コンテンツを見る
|
||||||
mods.reload = 再読み込み
|
mods.reload = 再読み込み
|
||||||
mods.reloadexit = Modを読み込む為にゲームを再起動します。
|
mods.reloadexit = Modを読み込む為にゲームを再起動します。
|
||||||
@@ -168,6 +169,7 @@ launchcore = コアを打ち上げる
|
|||||||
filename = ファイル名:
|
filename = ファイル名:
|
||||||
unlocked = 新しい要素をアンロック!
|
unlocked = 新しい要素をアンロック!
|
||||||
available = 新しい研究が利用可能です!
|
available = 新しい研究が利用可能です!
|
||||||
|
unlock.incampaign = < 詳細はキャンペーンでアンロックしてください >
|
||||||
completed = [accent]完了
|
completed = [accent]完了
|
||||||
techtree = テックツリー
|
techtree = テックツリー
|
||||||
research.legacy = [accent]5.0[] の研究データが見つかりました。\n[accent]このデータを読み込みますか?[] それとも、[accent]破棄して新しいキャンペーンで研究をやり直しますか?[](推奨)
|
research.legacy = [accent]5.0[] の研究データが見つかりました。\n[accent]このデータを読み込みますか?[] それとも、[accent]破棄して新しいキャンペーンで研究をやり直しますか?[](推奨)
|
||||||
@@ -361,6 +363,7 @@ publish.confirm = 公開してもよろしいですか?\n\n[lightgray]最初
|
|||||||
publish.error = 公開中のエラー: {0}
|
publish.error = 公開中のエラー: {0}
|
||||||
steam.error = Steam サービスの初期化に失敗しました。\nエラー: {0}
|
steam.error = Steam サービスの初期化に失敗しました。\nエラー: {0}
|
||||||
|
|
||||||
|
editor.cliffs = 壁を崖にする
|
||||||
editor.brush = ブラシ
|
editor.brush = ブラシ
|
||||||
editor.openin = エディターで開く
|
editor.openin = エディターで開く
|
||||||
editor.oregen = 鉱石の生成
|
editor.oregen = 鉱石の生成
|
||||||
@@ -393,6 +396,13 @@ waves.load = クリップボードから読み込む
|
|||||||
waves.invalid = クリップボードのウェーブは無効なウェーブです。
|
waves.invalid = クリップボードのウェーブは無効なウェーブです。
|
||||||
waves.copied = ウェーブをコピーしました。
|
waves.copied = ウェーブをコピーしました。
|
||||||
waves.none = 敵が定義されていません。\n空のウェーブレイアウトはデフォルトのレイアウトに自動的に置き換えられます。
|
waves.none = 敵が定義されていません。\n空のウェーブレイアウトはデフォルトのレイアウトに自動的に置き換えられます。
|
||||||
|
waves.sort = 昇順
|
||||||
|
waves.sort.reverse = 降順
|
||||||
|
waves.sort.begin = 開始
|
||||||
|
waves.sort.health = 体力
|
||||||
|
waves.sort.type = タイプ
|
||||||
|
waves.units.hide = すべて非表示
|
||||||
|
aves.units.show = すべて表示
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = 数
|
wavemode.counts = 数
|
||||||
@@ -447,19 +457,19 @@ editor.exists = すでに同じ名前のマップが存在します。
|
|||||||
editor.selectmap = 読み込むマップを選択:
|
editor.selectmap = 読み込むマップを選択:
|
||||||
|
|
||||||
toolmode.replace = 置換
|
toolmode.replace = 置換
|
||||||
toolmode.replace.description = 固体ブロックのみに描きます。
|
toolmode.replace.description = 同系統のブロックのみを置換する。
|
||||||
toolmode.replaceall = 全て置換
|
toolmode.replaceall = 全て置換
|
||||||
toolmode.replaceall.description = このマップにあるすべてのブロックを置き換えます。
|
toolmode.replaceall.description = マップ内の同ブロックをすべて置換する。
|
||||||
toolmode.orthogonal = 直角
|
toolmode.orthogonal = 水平垂直
|
||||||
toolmode.orthogonal.description = 直角の線を描きます。
|
toolmode.orthogonal.description = 水平もしくは垂直に線を描きます。
|
||||||
toolmode.square = 四角形
|
toolmode.square = 四角形
|
||||||
toolmode.square.description = 四角形のブラシです。
|
toolmode.square.description = 四角形のブラシです。
|
||||||
toolmode.eraseores = 鉱石消しゴム
|
toolmode.eraseores = 鉱石消しゴム
|
||||||
toolmode.eraseores.description = 鉱石のみを消します。
|
toolmode.eraseores.description = 鉱石のみを消します。(敵の出現場所含む)
|
||||||
toolmode.fillteams = チームで埋める
|
toolmode.fillteams = チームを変更
|
||||||
toolmode.fillteams.description = ブロックの代わりにチームで埋めます。
|
toolmode.fillteams.description = ブロックの所属チームを上書きします。
|
||||||
toolmode.drawteams = チームを描く
|
toolmode.drawteams = チームを変更
|
||||||
toolmode.drawteams.description = ブロックの代わりにチームを描きます。
|
toolmode.drawteams.description = ブロックの所属チームを上書きします。
|
||||||
|
|
||||||
filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。
|
filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。
|
||||||
|
|
||||||
@@ -475,7 +485,7 @@ filter.defaultores = デフォルトの鉱石
|
|||||||
filter.ore = 鉱石
|
filter.ore = 鉱石
|
||||||
filter.rivernoise = 川の生成
|
filter.rivernoise = 川の生成
|
||||||
filter.mirror = 反転
|
filter.mirror = 反転
|
||||||
filter.clear = クリアー
|
filter.clear = クリア
|
||||||
filter.option.ignore = 無視
|
filter.option.ignore = 無視
|
||||||
filter.scatter = 分散
|
filter.scatter = 分散
|
||||||
filter.terrain = 地形
|
filter.terrain = 地形
|
||||||
@@ -582,7 +592,7 @@ sectors.nonelaunch = [lightgray]無し (sun)
|
|||||||
sectors.rename = セクター名を変更
|
sectors.rename = セクター名を変更
|
||||||
sectors.enemybase = [scarlet]敵基地
|
sectors.enemybase = [scarlet]敵基地
|
||||||
sectors.vulnerable = [scarlet]脆弱
|
sectors.vulnerable = [scarlet]脆弱
|
||||||
sectors.underattack = [scarlet]攻撃を受けます! [accent]{0}% 破損
|
sectors.underattack = [scarlet]攻撃を受けています! [accent]{0}% 破損
|
||||||
sectors.survives = [accent]{0} ウェーブ生存
|
sectors.survives = [accent]{0} ウェーブ生存
|
||||||
sectors.go = Go
|
sectors.go = Go
|
||||||
sector.curcapture = 制圧したセクター
|
sector.curcapture = 制圧したセクター
|
||||||
@@ -621,6 +631,8 @@ sector.biomassFacility.name = バイオマス · シンテシス · ファシリ
|
|||||||
sector.windsweptIslands.name = ウインドスイープト · アイランズ
|
sector.windsweptIslands.name = ウインドスイープト · アイランズ
|
||||||
sector.extractionOutpost.name = エクストラクション · アウトポスト
|
sector.extractionOutpost.name = エクストラクション · アウトポスト
|
||||||
sector.planetaryTerminal.name = プラネタリー · ローンチ · ターミナル
|
sector.planetaryTerminal.name = プラネタリー · ローンチ · ターミナル
|
||||||
|
sector.coastline.name = 海岸線
|
||||||
|
sector.navalFortress.name = 海軍要塞
|
||||||
|
|
||||||
sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威は低いですが、資源が乏しいです。\nできるだけ多くの銅と鉛を集めます。\n始めましょう。
|
sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威は低いですが、資源が乏しいです。\nできるだけ多くの銅と鉛を集めます。\n始めましょう。
|
||||||
sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。\n極寒の気温もそれらを永遠に封じ込めることはできませんでした。\n\n電気に挑みましょう。\n火力発電機を建設し、修復機の使い方を学びましょう。
|
sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。\n極寒の気温もそれらを永遠に封じ込めることはできませんでした。\n\n電気に挑みましょう。\n火力発電機を建設し、修復機の使い方を学びましょう。
|
||||||
@@ -648,6 +660,7 @@ status.sapped.name = 吸収
|
|||||||
status.electrified.name = 帯電
|
status.electrified.name = 帯電
|
||||||
status.spore-slowed.name = 鈍化胞子
|
status.spore-slowed.name = 鈍化胞子
|
||||||
status.tarred.name = 石油塗れ
|
status.tarred.name = 石油塗れ
|
||||||
|
status.overdrive.name = オーバードライブ
|
||||||
status.overclock.name = オーバークロック
|
status.overclock.name = オーバークロック
|
||||||
status.shocked.name = 電撃
|
status.shocked.name = 電撃
|
||||||
status.blasted.name = 爆破
|
status.blasted.name = 爆破
|
||||||
@@ -904,7 +917,7 @@ setting.savecreate.name = 自動保存
|
|||||||
setting.publichost.name = 誰でもゲームに参加できるようにする
|
setting.publichost.name = 誰でもゲームに参加できるようにする
|
||||||
setting.playerlimit.name = プレイヤー数制限
|
setting.playerlimit.name = プレイヤー数制限
|
||||||
setting.chatopacity.name = チャットの透明度
|
setting.chatopacity.name = チャットの透明度
|
||||||
setting.lasersopacity.name = レーザーの透明度
|
setting.lasersopacity.name = 電線の透明度
|
||||||
setting.bridgeopacity.name = ブリッジの透明度
|
setting.bridgeopacity.name = ブリッジの透明度
|
||||||
setting.playerchat.name = ゲーム内にチャットを表示
|
setting.playerchat.name = ゲーム内にチャットを表示
|
||||||
setting.showweather.name = 天気のグラフィックを表示
|
setting.showweather.name = 天気のグラフィックを表示
|
||||||
@@ -990,14 +1003,14 @@ keybind.drop_unit.name = ドロップユニット
|
|||||||
keybind.zoom_minimap.name = ミニマップのズーム
|
keybind.zoom_minimap.name = ミニマップのズーム
|
||||||
mode.help.title = モード説明
|
mode.help.title = モード説明
|
||||||
mode.survival.name = サバイバル
|
mode.survival.name = サバイバル
|
||||||
mode.survival.description = 通常のモードです。 資源も限られる中、自動的にウェーブが進行していきます。\n[gray]プレイするには、マップに敵が出現する必要があります。
|
mode.survival.description = 通常のモードです。資源も限られる中、自動的にウェーブが進行していきます。\n[gray]マップに敵の出現設定が必要です。
|
||||||
mode.sandbox.name = サンドボックス
|
mode.sandbox.name = サンドボックス
|
||||||
mode.sandbox.description = 無限の資源があり、ウェーブを自由に進行できます。
|
mode.sandbox.description = 無限の資源があり、ウェーブを自由に進行できます。
|
||||||
mode.editor.name = エディター
|
mode.editor.name = エディター
|
||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[gray]プレイするには、マップに少なくとも二つの異なる色のコアが必要です。
|
mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[gray]マップに少なくとも異なる2色のコアが必要です。
|
||||||
mode.attack.name = アタック
|
mode.attack.name = アタック
|
||||||
mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。\n[gray]プレイするには、マップに赤色のコアが必要です。
|
mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。\n[gray]マップに赤色のコアが必要です。
|
||||||
mode.custom = カスタムルール
|
mode.custom = カスタムルール
|
||||||
|
|
||||||
rules.infiniteresources = 資源の無限化
|
rules.infiniteresources = 資源の無限化
|
||||||
@@ -1019,7 +1032,7 @@ rules.unitbuildspeedmultiplier = ユニットの製造速度倍率
|
|||||||
rules.unithealthmultiplier = ユニットの体力倍率
|
rules.unithealthmultiplier = ユニットの体力倍率
|
||||||
rules.unitdamagemultiplier = ユニットのダメージ倍率
|
rules.unitdamagemultiplier = ユニットのダメージ倍率
|
||||||
rules.unitcapvariable = コア数によってユニット上限を変動
|
rules.unitcapvariable = コア数によってユニット上限を変動
|
||||||
rules.unitcap = ベースのユニット上限数
|
rules.unitcap = 基礎ユニット上限数
|
||||||
rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル)
|
rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル)
|
||||||
rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒)
|
rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒)
|
||||||
rules.buildcostmultiplier = 建設コストの倍率
|
rules.buildcostmultiplier = 建設コストの倍率
|
||||||
@@ -1153,7 +1166,8 @@ block.core-foundation.name = コア: ファンデーション
|
|||||||
block.core-nucleus.name = コア: ニュークリアス
|
block.core-nucleus.name = コア: ニュークリアス
|
||||||
block.deep-water.name = 深層水
|
block.deep-water.name = 深層水
|
||||||
block.shallow-water.name = 水
|
block.shallow-water.name = 水
|
||||||
block.tainted-water.name = 汚れた水
|
block.tainted-water.name = 汚水
|
||||||
|
block.deep-tainted-water.name = 深層汚水
|
||||||
block.darksand-tainted-water.name = 黒い砂で汚れた水
|
block.darksand-tainted-water.name = 黒い砂で汚れた水
|
||||||
block.tar.name = タール
|
block.tar.name = タール
|
||||||
block.stone.name = 石
|
block.stone.name = 石
|
||||||
@@ -1388,6 +1402,7 @@ hint.generator = \uf879 [accent]火力発電機[]石炭を燃やし、隣接す
|
|||||||
hint.guardian = [accent]ガーディアン[]ユニットは装甲を搭載しています。[accent]銅[]や[accent]鉛[]などの弱い弾薬は[scarlet]効果がありません[]。\n\n強力なターレット、または\uf861デュオ/\uf859サルボーの弾薬に\uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。
|
hint.guardian = [accent]ガーディアン[]ユニットは装甲を搭載しています。[accent]銅[]や[accent]鉛[]などの弱い弾薬は[scarlet]効果がありません[]。\n\n強力なターレット、または\uf861デュオ/\uf859サルボーの弾薬に\uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。
|
||||||
hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n [accent]シャード[]コアの上に、 [accent]ファンデーション[]コアを置きます。近くに障害物がないことを確認してください。
|
hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n [accent]シャード[]コアの上に、 [accent]ファンデーション[]コアを置きます。近くに障害物がないことを確認してください。
|
||||||
hint.presetLaunch = [accent]フローズン · フォレスト[]などの灰色の[accent]着陸ゾーンセクター[]には、どこからでも発射できるため近くの領土を確保する必要はありません。\n\nしかし、このような[accent]数字のセクター[]では[accent]この限りではありません[]。
|
hint.presetLaunch = [accent]フローズン · フォレスト[]などの灰色の[accent]着陸ゾーンセクター[]には、どこからでも発射できるため近くの領土を確保する必要はありません。\n\nしかし、このような[accent]数字のセクター[]では[accent]この限りではありません[]。
|
||||||
|
hint.presetDifficulty = このセクターは[scarlet]敵の脅威レベルが高いです[]。\nこのようなセクターへの出撃は、適切な技術と準備なしには[accent]お勧めできません[]。
|
||||||
hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず[accent]破棄[]されます。
|
hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず[accent]破棄[]されます。
|
||||||
hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは[accent]あなたのセクター[]に移送されます。\n\nホストが行った新しい研究も引き継がれます。
|
hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは[accent]あなたのセクター[]に移送されます。\n\nホストが行った新しい研究も引き継がれます。
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ level.mode = 게임 모드:
|
|||||||
coreattack = < 코어가 공격을 받고 있습니다! >
|
coreattack = < 코어가 공격을 받고 있습니다! >
|
||||||
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 파괴됩니다!
|
nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 파괴됩니다!
|
||||||
database = 코어 데이터베이스
|
database = 코어 데이터베이스
|
||||||
|
database.button = 데이터베이스
|
||||||
savegame = 게임 저장
|
savegame = 게임 저장
|
||||||
loadgame = 게임 불러오기
|
loadgame = 게임 불러오기
|
||||||
joingame = 게임 참여
|
joingame = 게임 참여
|
||||||
@@ -168,6 +169,7 @@ launchcore = 코어 출격
|
|||||||
filename = 파일 이름:
|
filename = 파일 이름:
|
||||||
unlocked = 새로운 콘텐츠가 해금되었습니다!
|
unlocked = 새로운 콘텐츠가 해금되었습니다!
|
||||||
available = 새로운 콘텐츠 해금이 가능합니다!
|
available = 새로운 콘텐츠 해금이 가능합니다!
|
||||||
|
unlock.incampaign = < 해금 후 상세정보 열람이 가능합니다 >
|
||||||
completed = [accent]완료됨
|
completed = [accent]완료됨
|
||||||
techtree = 연구 기록
|
techtree = 연구 기록
|
||||||
research.legacy = [accent]5.0[] 연구 데이터를 찾았습니다.\n[accent]이 데이터를 불러오시겠습니까?[], 아니면 이 데이터를 무시하고 캠페인을 새로 시작하시겠습니까? [accent]무시한 데이터는 삭제됩니다.[] (권장됨)
|
research.legacy = [accent]5.0[] 연구 데이터를 찾았습니다.\n[accent]이 데이터를 불러오시겠습니까?[], 아니면 이 데이터를 무시하고 캠페인을 새로 시작하시겠습니까? [accent]무시한 데이터는 삭제됩니다.[] (권장됨)
|
||||||
@@ -361,6 +363,7 @@ publish.confirm = 이것을 게시하시겠습니까?[lightgray]창작마당 EUL
|
|||||||
publish.error = 아이템 게시 오류: {0}
|
publish.error = 아이템 게시 오류: {0}
|
||||||
steam.error = 스팀 서비스를 초기화하지 못했습니다.\n오류: {0}
|
steam.error = 스팀 서비스를 초기화하지 못했습니다.\n오류: {0}
|
||||||
|
|
||||||
|
editor.cliffs = 언덕 전환
|
||||||
editor.brush = 브러쉬
|
editor.brush = 브러쉬
|
||||||
editor.openin = 편집기 열기
|
editor.openin = 편집기 열기
|
||||||
editor.oregen = 광물 무작위 생성
|
editor.oregen = 광물 무작위 생성
|
||||||
@@ -381,10 +384,10 @@ waves.title = 단계
|
|||||||
waves.remove = 삭제
|
waves.remove = 삭제
|
||||||
waves.every = 매
|
waves.every = 매
|
||||||
waves.waves = 단계마다
|
waves.waves = 단계마다
|
||||||
waves.perspawn = 마리씩 생성됨
|
waves.perspawn = 마리씩
|
||||||
waves.shields = 방어막 hp/단계
|
waves.shields = 방어막만큼 소환
|
||||||
waves.to = 부터
|
waves.to = 부터
|
||||||
waves.max = 최대 유닛 수
|
waves.max = 마리 까지
|
||||||
waves.guardian = 수호자
|
waves.guardian = 수호자
|
||||||
waves.preview = 미리보기
|
waves.preview = 미리보기
|
||||||
waves.edit = 편집
|
waves.edit = 편집
|
||||||
@@ -393,6 +396,13 @@ waves.load = 클립보드에서 불러오기
|
|||||||
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
|
waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다.
|
||||||
waves.copied = 단계 복사됨.
|
waves.copied = 단계 복사됨.
|
||||||
waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계 데이터로 설정됩니다.
|
waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계 데이터로 설정됩니다.
|
||||||
|
waves.sort = 보기 정렬
|
||||||
|
waves.sort.reverse = 정렬 뒤집기
|
||||||
|
waves.sort.begin = 시작 단계순
|
||||||
|
waves.sort.health = 체력순
|
||||||
|
waves.sort.type = 유닛순
|
||||||
|
waves.units.hide = 모두 숨기기
|
||||||
|
waves.units.show = 모두 보이기
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = 마리
|
wavemode.counts = 마리
|
||||||
@@ -409,7 +419,7 @@ editor.teams = 팀
|
|||||||
editor.errorload = 파일을 불러오지 못했습니다.
|
editor.errorload = 파일을 불러오지 못했습니다.
|
||||||
editor.errorsave = 파일을 저장하지 못했습니다.
|
editor.errorsave = 파일을 저장하지 못했습니다.
|
||||||
editor.errorimage = 이것은 맵이 아니라 사진입니다.
|
editor.errorimage = 이것은 맵이 아니라 사진입니다.
|
||||||
editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원되지 않는 구형 맵 형식을 사용합니다.
|
editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원하지 않는 구형 맵 형식을 사용합니다.
|
||||||
editor.errornot = 맵 파일이 아닙니다.
|
editor.errornot = 맵 파일이 아닙니다.
|
||||||
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
|
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
|
||||||
editor.errorname = 맵에 이름이 지정되어 있지 않습니다. 저장 파일을 불러오려고 시도하는 건가요?
|
editor.errorname = 맵에 이름이 지정되어 있지 않습니다. 저장 파일을 불러오려고 시도하는 건가요?
|
||||||
@@ -447,7 +457,7 @@ editor.exists = 이 이름의 맵이 이미 존재합니다.
|
|||||||
editor.selectmap = 불러올 맵을 선택하세요:
|
editor.selectmap = 불러올 맵을 선택하세요:
|
||||||
|
|
||||||
toolmode.replace = 재배치
|
toolmode.replace = 재배치
|
||||||
toolmode.replace.description = 단단한 블록에만 그립니다.
|
toolmode.replace.description = 지형 블록에만 그립니다.
|
||||||
toolmode.replaceall = 모두 재배치
|
toolmode.replaceall = 모두 재배치
|
||||||
toolmode.replaceall.description = 맵에 있는 모든 블록을 재배치합니다.
|
toolmode.replaceall.description = 맵에 있는 모든 블록을 재배치합니다.
|
||||||
toolmode.orthogonal = 직각
|
toolmode.orthogonal = 직각
|
||||||
@@ -648,6 +658,7 @@ status.sapped.name = 피로
|
|||||||
status.electrified.name = 과전류
|
status.electrified.name = 과전류
|
||||||
status.spore-slowed.name = 포자감속
|
status.spore-slowed.name = 포자감속
|
||||||
status.tarred.name = 침유됨
|
status.tarred.name = 침유됨
|
||||||
|
status.overdrive.name = 과부하
|
||||||
status.overclock.name = 가속화
|
status.overclock.name = 가속화
|
||||||
status.shocked.name = 감전
|
status.shocked.name = 감전
|
||||||
status.blasted.name = 파손
|
status.blasted.name = 파손
|
||||||
@@ -1150,6 +1161,7 @@ block.core-nucleus.name = 코어: 핵심
|
|||||||
block.deep-water.name = 깊은 물
|
block.deep-water.name = 깊은 물
|
||||||
block.shallow-water.name = 물
|
block.shallow-water.name = 물
|
||||||
block.tainted-water.name = 오염된 물
|
block.tainted-water.name = 오염된 물
|
||||||
|
block.deep-tainted-water.name = 오염된 깊은 물
|
||||||
block.darksand-tainted-water.name = 오염된 젖은 검은 모래
|
block.darksand-tainted-water.name = 오염된 젖은 검은 모래
|
||||||
block.tar.name = 타르
|
block.tar.name = 타르
|
||||||
block.stone.name = 바위
|
block.stone.name = 바위
|
||||||
@@ -1316,7 +1328,7 @@ block.payload-router.name = 화물 분배기
|
|||||||
block.duct.name = 도관
|
block.duct.name = 도관
|
||||||
block.duct-router.name = 도관 분배기
|
block.duct-router.name = 도관 분배기
|
||||||
block.duct-bridge.name = 도관 다리
|
block.duct-bridge.name = 도관 다리
|
||||||
block.payload-propulsion-tower.name = 화물 추진탑
|
block.payload-propulsion-tower.name = 화물 드라이버
|
||||||
block.payload-void.name = 화물 소멸기
|
block.payload-void.name = 화물 소멸기
|
||||||
block.payload-source.name = 화물 공급기
|
block.payload-source.name = 화물 공급기
|
||||||
block.disassembler.name = 광재 분해기
|
block.disassembler.name = 광재 분해기
|
||||||
@@ -1383,8 +1395,9 @@ hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변
|
|||||||
hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오.
|
hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오.
|
||||||
hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오.
|
hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오.
|
||||||
hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다.
|
hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다.
|
||||||
|
hint.presetDifficulty = 이 지역은 [scarlet]고위험 레벨[] 지역입니다.\n적절한 기술과 준비 없이 이런 지역들로 출격하는건 [accent]비추천[]합니다.
|
||||||
hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다.
|
hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다.
|
||||||
hint.coopCampaign = [accent]협동 캠페인[]을 할 때, 현재 맵에서 생산된 자원들은 [accent]캠페인 지역[]으로도 보내집니다.\n\n호스트가 새로 해금한 모든 것들도 가져갑니다.
|
hint.coopCampaign = [accent]협동 캠페인[]을 할 때, 현재 맵에서 생산된 자원들은 [accent]캠페인 지역[]으로도 보내집니다.\n\n호스트가 새로 해금한 모든 자원들도 가져갑니다.
|
||||||
|
|
||||||
item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다.
|
item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다.
|
||||||
item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포합니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다.
|
item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포합니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다.
|
||||||
@@ -1560,7 +1573,7 @@ block.logic-display.description = 프로세서를 이용해 그래픽을 출력
|
|||||||
block.large-logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다.
|
block.large-logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다.
|
||||||
block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다.
|
block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다.
|
||||||
block.repair-turret.description = 가장 가까운 유닛을 지속적으로 수리합니다. 냉각수를 넣을 수 있습니다.
|
block.repair-turret.description = 가장 가까운 유닛을 지속적으로 수리합니다. 냉각수를 넣을 수 있습니다.
|
||||||
block.payload-propulsion-tower.description = 장거리 화물 운반 구조물. 화물을 연결된 다른 화물 추진탑으로 발사합니다.
|
block.payload-propulsion-tower.description = 장거리 화물 운반 구조물. 화물을 연결된 다른 화물 드라이버로 발사합니다.
|
||||||
|
|
||||||
unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다.
|
unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다.
|
||||||
unit.mace.description = 주변 모든 적에게 화염 줄기를 발사합니다.
|
unit.mace.description = 주변 모든 적에게 화염 줄기를 발사합니다.
|
||||||
@@ -1956,10 +1969,10 @@ unit.minke.details =
|
|||||||
unit.bryde.details =
|
unit.bryde.details =
|
||||||
unit.sei.details = [lightgray][비공식][]세이 sei!
|
unit.sei.details = [lightgray][비공식][]세이 sei!
|
||||||
unit.omura.details = [lightgray][비공식][]오무라이스?
|
unit.omura.details = [lightgray][비공식][]오무라이스?
|
||||||
unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠.
|
unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮여보죠.
|
||||||
unit.oxynoe.details =
|
unit.oxynoe.details =
|
||||||
unit.cyerce.details = [lightgray][비공식][]폭죽놀이다!
|
unit.cyerce.details = [lightgray][비공식][]폭죽놀이다!
|
||||||
unit.aegires.details = [lightgray][비공식][]플레이어가 할 수 있는건 운전과 공사뿐...
|
unit.aegires.details = [lightgray][비공식][]공격 컨트롤을 할 수 없습니다.
|
||||||
unit.navanax.details = [lightgray][비공식][]플레이어에게 잠깐의 섬광뽕을 입힙니다.
|
unit.navanax.details = [lightgray][비공식][]플레이어에게 잠깐의 섬광뽕을 입힙니다.
|
||||||
unit.alpha.details =
|
unit.alpha.details =
|
||||||
unit.beta.details =
|
unit.beta.details =
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ launchcore = Lansează Nucleu
|
|||||||
filename = Nume Fișier:
|
filename = Nume Fișier:
|
||||||
unlocked = Nou conținut deblocat!
|
unlocked = Nou conținut deblocat!
|
||||||
available = Poți cerceta noi tehnologii!
|
available = Poți cerceta noi tehnologii!
|
||||||
|
unlock.incampaign = < Deblochează în campanie pt detalii >
|
||||||
completed = [accent]Finalizat
|
completed = [accent]Finalizat
|
||||||
techtree = Cercetează
|
techtree = Cercetează
|
||||||
research.legacy = Au fost găsite date de cercetare din versiunea [accent]5.0[].\n Dorești să [accent]păstrezi aceste date[], sau [accent]să renunți la ele[] și să reîncepi cercetarea în noua campanie (recomandat)?
|
research.legacy = Au fost găsite date de cercetare din versiunea [accent]5.0[].\n Dorești să [accent]păstrezi aceste date[], sau [accent]să renunți la ele[] și să reîncepi cercetarea în noua campanie (recomandat)?
|
||||||
@@ -362,6 +363,7 @@ publish.confirm = Sigur vrei să publici asta?\n\n[lightgray]Asigură-te că ai
|
|||||||
publish.error = Eroare la publicarea itemului: {0}
|
publish.error = Eroare la publicarea itemului: {0}
|
||||||
steam.error = Inițializarea serviciilor Steam a eșuat.\nEroare: {0}
|
steam.error = Inițializarea serviciilor Steam a eșuat.\nEroare: {0}
|
||||||
|
|
||||||
|
editor.cliffs = Pereți >> Dealuri
|
||||||
editor.brush = Pensulă
|
editor.brush = Pensulă
|
||||||
editor.openin = Deschide în Editor
|
editor.openin = Deschide în Editor
|
||||||
editor.oregen = Generarea Minereurilor
|
editor.oregen = Generarea Minereurilor
|
||||||
@@ -394,6 +396,13 @@ waves.load = Încarcă din Clipboard
|
|||||||
waves.invalid = Valuri invalide în clipboard.
|
waves.invalid = Valuri invalide în clipboard.
|
||||||
waves.copied = Valuri copiate.
|
waves.copied = Valuri copiate.
|
||||||
waves.none = Niciun inamic definit.\nDe reținut că o listă de valuri goală va fi înlocuită automat cu lista de valuri prestabilită.
|
waves.none = Niciun inamic definit.\nDe reținut că o listă de valuri goală va fi înlocuită automat cu lista de valuri prestabilită.
|
||||||
|
waves.sort = Sortează După
|
||||||
|
waves.sort.reverse = Inversează Sortarea
|
||||||
|
waves.sort.begin = Început
|
||||||
|
waves.sort.health = Viață
|
||||||
|
waves.sort.type = Tip
|
||||||
|
waves.units.hide = Ascunde
|
||||||
|
waves.units.show = Vezi Tot
|
||||||
|
|
||||||
#intenționat cu literă mică
|
#intenționat cu literă mică
|
||||||
wavemode.counts = numere
|
wavemode.counts = numere
|
||||||
@@ -622,6 +631,8 @@ sector.biomassFacility.name = Facilitatea de Sinteză a Biomasei
|
|||||||
sector.windsweptIslands.name = Insulele Măturate de Vânt
|
sector.windsweptIslands.name = Insulele Măturate de Vânt
|
||||||
sector.extractionOutpost.name = Avanpostul de Extracție
|
sector.extractionOutpost.name = Avanpostul de Extracție
|
||||||
sector.planetaryTerminal.name = Terminalul de Lansare Planetară
|
sector.planetaryTerminal.name = Terminalul de Lansare Planetară
|
||||||
|
sector.coastline.name = Zona de Coastă
|
||||||
|
sector.navalFortress.name = Fortăreața Navală
|
||||||
|
|
||||||
sector.groundZero.description = Locația optimă pt a începe încă odată. Risc de inamici scăzut. Puține resurse.\nAdună cât de mult plumb și cupru se poate.\nMergi mai departe.
|
sector.groundZero.description = Locația optimă pt a începe încă odată. Risc de inamici scăzut. Puține resurse.\nAdună cât de mult plumb și cupru se poate.\nMergi mai departe.
|
||||||
sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare.
|
sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare.
|
||||||
@@ -649,7 +660,8 @@ status.sapped.name = Slăbește
|
|||||||
status.electrified.name = Electrificat
|
status.electrified.name = Electrificat
|
||||||
status.spore-slowed.name = Încetinit de Spori
|
status.spore-slowed.name = Încetinit de Spori
|
||||||
status.tarred.name = Păcurit
|
status.tarred.name = Păcurit
|
||||||
status.overclock.name = Suprasolicitat
|
status.overdrive.name = Suprasolicitat
|
||||||
|
status.overclock.name = Overclock
|
||||||
status.shocked.name = Electrocutat
|
status.shocked.name = Electrocutat
|
||||||
status.blasted.name = Explozie
|
status.blasted.name = Explozie
|
||||||
status.unmoving.name = Nemișcat
|
status.unmoving.name = Nemișcat
|
||||||
@@ -766,9 +778,9 @@ stat.healing = Reparare
|
|||||||
|
|
||||||
ability.forcefield = Câmp de Forță
|
ability.forcefield = Câmp de Forță
|
||||||
ability.repairfield = Câmp de Reparare
|
ability.repairfield = Câmp de Reparare
|
||||||
ability.statusfield = {0} Câmp Suprasolicitare Unități
|
ability.statusfield = {0} Câmp de Stare
|
||||||
ability.unitspawn = Fabrică de {0}
|
ability.unitspawn = Fabrică de {0}
|
||||||
ability.shieldregenfield = Scut Regenerabil
|
ability.shieldregenfield = Câmp Regenerare Scut
|
||||||
ability.movelightning = Mișcare Fulger
|
ability.movelightning = Mișcare Fulger
|
||||||
ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte
|
ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte
|
||||||
|
|
||||||
@@ -873,7 +885,7 @@ setting.difficulty.name = Dificultate:
|
|||||||
setting.screenshake.name = Agitare Ecran
|
setting.screenshake.name = Agitare Ecran
|
||||||
setting.effects.name = Vezi Efectele
|
setting.effects.name = Vezi Efectele
|
||||||
setting.destroyedblocks.name = Vezi Blocurile Distruse
|
setting.destroyedblocks.name = Vezi Blocurile Distruse
|
||||||
setting.blockstatus.name = Vezi Statusul Blocului
|
setting.blockstatus.name = Vezi Starea Blocului
|
||||||
setting.conveyorpathfinding.name = Găsirea Drumului la Plasarea Benzii
|
setting.conveyorpathfinding.name = Găsirea Drumului la Plasarea Benzii
|
||||||
setting.sensitivity.name = Sensibilitatea Controlului
|
setting.sensitivity.name = Sensibilitatea Controlului
|
||||||
setting.saveinterval.name = Interval de Salvare
|
setting.saveinterval.name = Interval de Salvare
|
||||||
@@ -928,8 +940,8 @@ keybind.clear_building.name = Șterge Clădirea
|
|||||||
keybind.press = Apasă o tastă...
|
keybind.press = Apasă o tastă...
|
||||||
keybind.press.axis = Apasă o axă sau o tastă...
|
keybind.press.axis = Apasă o axă sau o tastă...
|
||||||
keybind.screenshot.name = Captură Hartă
|
keybind.screenshot.name = Captură Hartă
|
||||||
keybind.toggle_power_lines.name = Oprește/Pornește Statusul Electricelor
|
keybind.toggle_power_lines.name = Oprește/Pornește Starea Electricelor
|
||||||
keybind.toggle_block_status.name = Oprește/Pornește Statusul Blocurilor
|
keybind.toggle_block_status.name = Oprește/Pornește Starea Blocurilor
|
||||||
keybind.move_x.name = Mergi pe X
|
keybind.move_x.name = Mergi pe X
|
||||||
keybind.move_y.name = Mergi pe Y
|
keybind.move_y.name = Mergi pe Y
|
||||||
keybind.mouse_move.name = Urmărește Mouseul
|
keybind.mouse_move.name = Urmărește Mouseul
|
||||||
@@ -1048,7 +1060,7 @@ content.item.name = Materiale
|
|||||||
content.liquid.name = Lichide
|
content.liquid.name = Lichide
|
||||||
content.unit.name = Unități
|
content.unit.name = Unități
|
||||||
content.block.name = Blocuri
|
content.block.name = Blocuri
|
||||||
content.status.name = Efecte de Status
|
content.status.name = Efecte de Stare
|
||||||
content.sector.name = Sectoare
|
content.sector.name = Sectoare
|
||||||
|
|
||||||
item.copper.name = Cupru
|
item.copper.name = Cupru
|
||||||
@@ -1151,6 +1163,7 @@ block.core-nucleus.name = Nucleu: Core
|
|||||||
block.deep-water.name = Apă Adâncă
|
block.deep-water.name = Apă Adâncă
|
||||||
block.shallow-water.name = Apă
|
block.shallow-water.name = Apă
|
||||||
block.tainted-water.name = Apă Tulbure
|
block.tainted-water.name = Apă Tulbure
|
||||||
|
block.deep-tainted-water.name = Apă Adâncă și Tulbure
|
||||||
block.darksand-tainted-water.name = Apă Tulbure cu Nisip Negru
|
block.darksand-tainted-water.name = Apă Tulbure cu Nisip Negru
|
||||||
block.tar.name = Păcură
|
block.tar.name = Păcură
|
||||||
block.stone.name = Piatră
|
block.stone.name = Piatră
|
||||||
@@ -1384,6 +1397,7 @@ hint.generator = \uf879 [accent]Generatoarele pe Combustie[] ard cărbunele și
|
|||||||
hint.guardian = Unitățile [accent]Gardian[] au armuri puternice. Munițiile slabe precum [accent]Cuprul[] și [accent]Plumbul[] [scarlet]nu sunt eficiente[].\n\nFolosește arme mai bune sau muniție de \uf835 [accent]Grafit[] pt \uf861Duo/\uf859Salvo pt a nimici Gardianul.
|
hint.guardian = Unitățile [accent]Gardian[] au armuri puternice. Munițiile slabe precum [accent]Cuprul[] și [accent]Plumbul[] [scarlet]nu sunt eficiente[].\n\nFolosește arme mai bune sau muniție de \uf835 [accent]Grafit[] pt \uf861Duo/\uf859Salvo pt a nimici Gardianul.
|
||||||
hint.coreUpgrade = Un nucleu poate pot fi îmbunătățit [accent]plasând o alt nucleu mai bun peste el[].\n\nPlasează un nucleu [accent]Foundation[] peste nucleul [accent]Shard[]. Nucleul nu poate fi plasat decât pe alte nuclee. Asigură-te că nu sunt alte benzi sau obstacole care să împiedice plasarea.
|
hint.coreUpgrade = Un nucleu poate pot fi îmbunătățit [accent]plasând o alt nucleu mai bun peste el[].\n\nPlasează un nucleu [accent]Foundation[] peste nucleul [accent]Shard[]. Nucleul nu poate fi plasat decât pe alte nuclee. Asigură-te că nu sunt alte benzi sau obstacole care să împiedice plasarea.
|
||||||
hint.presetLaunch = Poți lansa de oriunde în sectoarele gri, precum [accent]Pădurea Glacială[]. Ele sunt [accent]zone[] speciale [accent]de aterizare[]. Nu ai nevoie să capturezi sectoarele învecinate pt a lansa.\n\n[accent]Sectoarele numerotate[], ca acesta, sunt [accent]opționale[].
|
hint.presetLaunch = Poți lansa de oriunde în sectoarele gri, precum [accent]Pădurea Glacială[]. Ele sunt [accent]zone[] speciale [accent]de aterizare[]. Nu ai nevoie să capturezi sectoarele învecinate pt a lansa.\n\n[accent]Sectoarele numerotate[], ca acesta, sunt [accent]opționale[].
|
||||||
|
hint.presetDifficulty = Acest sector are un [scarlet]nivel ridicat de amenințare inamică[].\n[accent]Nu e recomandat[] să lansezi în asemenea sectoare fără pregătiri sau tehnologie adecvată.
|
||||||
hint.coreIncinerate = După ce nucleul se umple până la refuz cu un tip de material, toate materialele în plus de acel tip care încearcă să între în nucleu sunt [accent]incinerate[].
|
hint.coreIncinerate = După ce nucleul se umple până la refuz cu un tip de material, toate materialele în plus de acel tip care încearcă să între în nucleu sunt [accent]incinerate[].
|
||||||
hint.coopCampaign = Când joci [accent]campania cooperând cu alți jucători[], materialele produse în sectorul curent vor fi transferate și către [accent]sectoarele tale locale[].\n\nDe asemenea, vei debloca tot ceea ce cercetează gazda.
|
hint.coopCampaign = Când joci [accent]campania cooperând cu alți jucători[], materialele produse în sectorul curent vor fi transferate și către [accent]sectoarele tale locale[].\n\nDe asemenea, vei debloca tot ceea ce cercetează gazda.
|
||||||
|
|
||||||
@@ -1551,7 +1565,7 @@ block.additive-reconstructor.description = Îmbunătățește unitățile primit
|
|||||||
block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel trei.
|
block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel trei.
|
||||||
block.exponential-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel patru.
|
block.exponential-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel patru.
|
||||||
block.tetrative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de ltimă generație: nivelul cinci.
|
block.tetrative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de ltimă generație: nivelul cinci.
|
||||||
block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Statusul său poate fi citit și controlat de procesoarele logice.
|
block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Starea sa poate fi citită și controlată de procesoarele logice.
|
||||||
block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri.
|
block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri.
|
||||||
block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul.
|
block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul.
|
||||||
block.hyper-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât procesorul logic.
|
block.hyper-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât procesorul logic.
|
||||||
|
|||||||
@@ -616,6 +616,8 @@ sector.biomassFacility.name = Центр исследования биомасс
|
|||||||
sector.windsweptIslands.name = Штормовой архипелаг
|
sector.windsweptIslands.name = Штормовой архипелаг
|
||||||
sector.extractionOutpost.name = Добывающая база
|
sector.extractionOutpost.name = Добывающая база
|
||||||
sector.planetaryTerminal.name = Планетарный пусковой терминал
|
sector.planetaryTerminal.name = Планетарный пусковой терминал
|
||||||
|
sector.coastline.name = Береговая линия
|
||||||
|
sector.navalFortress.name = Прибрежная крепость
|
||||||
|
|
||||||
sector.groundZero.description = Оптимальная локация для повторных игр. Низкая вражеская угроза. Немного ресурсов.\nСоберите как можно больше свинца и меди.\nДвигайтесь дальше.
|
sector.groundZero.description = Оптимальная локация для повторных игр. Низкая вражеская угроза. Немного ресурсов.\nСоберите как можно больше свинца и меди.\nДвигайтесь дальше.
|
||||||
sector.frozenForest.description = Даже здесь, ближе к горам, споры распространились. Холодные температуры не могут сдерживать их вечно.\n\nНачните вкладываться в энергию. Постройте генераторы внутреннего сгорания. Научитесь пользоваться регенератором.
|
sector.frozenForest.description = Даже здесь, ближе к горам, споры распространились. Холодные температуры не могут сдерживать их вечно.\n\nНачните вкладываться в энергию. Постройте генераторы внутреннего сгорания. Научитесь пользоваться регенератором.
|
||||||
@@ -794,7 +796,7 @@ bullet.damage = [stat]{0}[lightgray] урона
|
|||||||
bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков
|
bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков
|
||||||
bullet.incendiary = [stat]зажигательный
|
bullet.incendiary = [stat]зажигательный
|
||||||
bullet.homing = [stat]самонаводящийся
|
bullet.homing = [stat]самонаводящийся
|
||||||
bullet.frag = [stat]осколочный
|
bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов):
|
||||||
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
|
||||||
bullet.knockback = [stat]{0}[lightgray] отбрасывания
|
bullet.knockback = [stat]{0}[lightgray] отбрасывания
|
||||||
@@ -1544,6 +1546,8 @@ block.memory-bank.description = Хранит информацию для лог
|
|||||||
block.logic-display.description = Отображает произвольную графику из логического процессора.
|
block.logic-display.description = Отображает произвольную графику из логического процессора.
|
||||||
block.large-logic-display.description = Отображает произвольную графику из логического процессора.
|
block.large-logic-display.description = Отображает произвольную графику из логического процессора.
|
||||||
block.interplanetary-accelerator.description = Массивная электромагнитная башня-рельсотрон. Ускоряет ядро, позволяя преодолеть гравитацию для межпланетного развёртывания.
|
block.interplanetary-accelerator.description = Массивная электромагнитная башня-рельсотрон. Ускоряет ядро, позволяя преодолеть гравитацию для межпланетного развёртывания.
|
||||||
|
block.repair-turret.description = Непрерывно ремонтирует ближайшую поврежденную еденицу в своем радиусе. Опционально использует охлаждающую жидкость.
|
||||||
|
block.payload-propulsion-tower.description = Конструкция для транспортировки больших грузов на большое растояние. Стреляет грузом в другие грузовые катапульты.
|
||||||
|
|
||||||
unit.dagger.description = Стреляет стандартными пулями по всем врагам поблизости.
|
unit.dagger.description = Стреляет стандартными пулями по всем врагам поблизости.
|
||||||
unit.mace.description = Стреляет потоками огня по всем врагам поблизости.
|
unit.mace.description = Стреляет потоками огня по всем врагам поблизости.
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ launchcore = ส่งแกนกลาง
|
|||||||
filename = ชื่อไฟล์:
|
filename = ชื่อไฟล์:
|
||||||
unlocked = เนื้อหาใหม่ปลดล็อก!
|
unlocked = เนื้อหาใหม่ปลดล็อก!
|
||||||
available = มีการวิจัยใหม่พร้อมปลดล็อก!
|
available = มีการวิจัยใหม่พร้อมปลดล็อก!
|
||||||
|
unlock.incampaign = < ปลดล็อกในแคมเปญเพื่อดูรายละเอียด >
|
||||||
completed = [accent]วิจัยแล้ว
|
completed = [accent]วิจัยแล้ว
|
||||||
techtree = ต้นไม้แห่งเทคโนโลยี
|
techtree = ต้นไม้แห่งเทคโนโลยี
|
||||||
research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ)
|
research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ)
|
||||||
@@ -248,7 +249,7 @@ confirmban = คุณแน่ใจหรือว่าจะแบนผู
|
|||||||
confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก?
|
confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก?
|
||||||
confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก?
|
confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก?
|
||||||
confirmunban = คุณแน่ใจหรือว่าจะเลิกแบนผู้เล่นนี้?
|
confirmunban = คุณแน่ใจหรือว่าจะเลิกแบนผู้เล่นนี้?
|
||||||
confirmadmin = คุณแน่ใจหรือว่าจะเปลี่ยนผู้เล่นคนนี้เป็นแอดมิน?
|
confirmadmin = คุณแน่ใจหรือว่าจะแต่งตั้งผู้เล่นคนนี้เป็นแอดมิน?
|
||||||
confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้?
|
confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้?
|
||||||
joingame.title = เข้าร่วมเกม
|
joingame.title = เข้าร่วมเกม
|
||||||
joingame.ip = ที่อยู่:
|
joingame.ip = ที่อยู่:
|
||||||
@@ -362,6 +363,7 @@ publish.confirm = คุณแน่ใจหรือว่าจะเผย
|
|||||||
publish.error = เกิดข้อผิดพลาดการเผยแพร่ไอเท็มดังต่อไปนี้: {0}
|
publish.error = เกิดข้อผิดพลาดการเผยแพร่ไอเท็มดังต่อไปนี้: {0}
|
||||||
steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0}
|
steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0}
|
||||||
|
|
||||||
|
editor.cliffs = เปลี่ยนกำแพงเป็นหน้าผา
|
||||||
editor.brush = แปรง
|
editor.brush = แปรง
|
||||||
editor.openin = เปิดในตัวแก้ไข
|
editor.openin = เปิดในตัวแก้ไข
|
||||||
editor.oregen = การเกิดของแร่
|
editor.oregen = การเกิดของแร่
|
||||||
@@ -394,6 +396,13 @@ waves.load = โหลดจากคลิปบอร์ด
|
|||||||
waves.invalid = แบบคลื่นในคลิปบอร์ดไม่ถูกต้อง
|
waves.invalid = แบบคลื่นในคลิปบอร์ดไม่ถูกต้อง
|
||||||
waves.copied = คัดลอกแบบคลื่นแล้ว
|
waves.copied = คัดลอกแบบคลื่นแล้ว
|
||||||
waves.none = ไม่ได้กำหนดศัตรู\nแบบคลื่นเปล่าจะถูกแทนที่โดยแบบคลื่นค่าเริ่มต้นของเกม
|
waves.none = ไม่ได้กำหนดศัตรู\nแบบคลื่นเปล่าจะถูกแทนที่โดยแบบคลื่นค่าเริ่มต้นของเกม
|
||||||
|
waves.sort = จัดเรียงตาม
|
||||||
|
waves.sort.reverse = เรียงย้อนกลับ
|
||||||
|
waves.sort.begin = เริ่มต้น
|
||||||
|
waves.sort.health = พลังชีวิต
|
||||||
|
waves.sort.type = ชนิด
|
||||||
|
waves.units.hide = ซ่อนทั้งหมด
|
||||||
|
waves.units.show = แสดงทั้งหมด
|
||||||
|
|
||||||
#these are intentionally in lower case
|
#these are intentionally in lower case
|
||||||
wavemode.counts = จำนวน
|
wavemode.counts = จำนวน
|
||||||
@@ -439,7 +448,7 @@ editor.exportimage = ส่งออกไฟล์รูปพื้นที
|
|||||||
editor.exportimage.description = ส่งออกไฟล์รูปแมพ
|
editor.exportimage.description = ส่งออกไฟล์รูปแมพ
|
||||||
editor.loadimage = นำเข้าแบบพื้นที่
|
editor.loadimage = นำเข้าแบบพื้นที่
|
||||||
editor.saveimage = ส่งออกแบบพื้นที่
|
editor.saveimage = ส่งออกแบบพื้นที่
|
||||||
editor.unsaved = [scarlet]คุณมีการเปลี่ยนแปลงที่ยังไม่ได้เซฟ![]\nคุณแน่ใจหรือว่าจะออก?
|
editor.unsaved = คุณแน่ใจหรือว่าจะออก?\n[scarlet]การเปลี่ยนแปลงที่ยังไม่ได้เซฟจะถูกทิ้ง
|
||||||
editor.resizemap = เปลี่ยนขนาดของแมพ
|
editor.resizemap = เปลี่ยนขนาดของแมพ
|
||||||
editor.mapname = ชื่อแมพ:
|
editor.mapname = ชื่อแมพ:
|
||||||
editor.overwrite = [accent]ตำเตือน!\nแมพนี้จะเขียนทับกับแมพที่มีอยู่แล้ว
|
editor.overwrite = [accent]ตำเตือน!\nแมพนี้จะเขียนทับกับแมพที่มีอยู่แล้ว
|
||||||
@@ -615,29 +624,31 @@ sector.stainedMountains.name = ภูเขาหลากสี
|
|||||||
sector.desolateRift.name = เดโซเลต ริฟต์
|
sector.desolateRift.name = เดโซเลต ริฟต์
|
||||||
sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์
|
sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์
|
||||||
sector.overgrowth.name = โอเวอร์โกรว์ด
|
sector.overgrowth.name = โอเวอร์โกรว์ด
|
||||||
sector.tarFields.name = ทาร์ ฟิลด์
|
sector.tarFields.name = ผืนแผ่นแห่งน้ำมัน
|
||||||
sector.saltFlats.name = ที่ราบเกลือ
|
sector.saltFlats.name = ที่ราบเกลือ
|
||||||
sector.fungalPass.name = ทางผ่านฟังกัล
|
sector.fungalPass.name = ทางผ่านฟังกัล
|
||||||
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
|
sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล
|
||||||
sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์
|
sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์
|
||||||
sector.extractionOutpost.name = ด่านส่งทรัพยากร
|
sector.extractionOutpost.name = ด่านส่งทรัพยากร
|
||||||
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
|
sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน
|
||||||
|
sector.coastline.name = แนวชายฝั่ง
|
||||||
|
sector.navalFortress.name = ปราการแห่งวารี
|
||||||
|
|
||||||
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
|
sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ
|
||||||
sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม
|
sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม
|
||||||
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
|
sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ
|
||||||
sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
|
sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ
|
||||||
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
|
sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง
|
||||||
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
|
sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา
|
||||||
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
|
sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น
|
||||||
sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้
|
sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้
|
||||||
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
|
sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ
|
||||||
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
|
sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา
|
||||||
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก
|
sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก
|
||||||
sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้
|
sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้
|
||||||
sector.windsweptIslands.description = เลยแนวชายฝั่งไปเป็นหมู่เกาะที่ตั้งอยู่ห่างไกล เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้
|
sector.windsweptIslands.description = เลยแนวชายฝั่งไปจะพบกับหมู่เกาะที่ตั้งอยู่ห่างไกลแห่งนี้ เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้
|
||||||
sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ
|
sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ
|
||||||
sector.impact0078.description = นี่คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้
|
sector.impact0078.description = ณ ที่แห่งนี้คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้
|
||||||
sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น
|
sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น
|
||||||
|
|
||||||
status.burning.name = เผาไหม้
|
status.burning.name = เผาไหม้
|
||||||
@@ -649,6 +660,7 @@ status.sapped.name = อ่อนกำลัง
|
|||||||
status.electrified.name = ช็อตไฟฟ้า
|
status.electrified.name = ช็อตไฟฟ้า
|
||||||
status.spore-slowed.name = สปอร์สโลว์
|
status.spore-slowed.name = สปอร์สโลว์
|
||||||
status.tarred.name = เปื้อนน้ำมัน
|
status.tarred.name = เปื้อนน้ำมัน
|
||||||
|
status.overdrive.name = โอเวอร์ไดรฟ์
|
||||||
status.overclock.name = โอเวอร์คล็อก
|
status.overclock.name = โอเวอร์คล็อก
|
||||||
status.shocked.name = ช็อก
|
status.shocked.name = ช็อก
|
||||||
status.blasted.name = ระเบิด
|
status.blasted.name = ระเบิด
|
||||||
@@ -665,7 +677,7 @@ settings.game = เกม
|
|||||||
settings.sound = เสียง
|
settings.sound = เสียง
|
||||||
settings.graphics = กราฟิก
|
settings.graphics = กราฟิก
|
||||||
settings.cleardata = เคลียร์ข้อมูลเกม...
|
settings.cleardata = เคลียร์ข้อมูลเกม...
|
||||||
settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลเกม?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้!
|
settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลนี้?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้นะ!
|
||||||
settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ แมพ การวิจัยแล้วและก็ปุ่มควบคุม\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ
|
settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ แมพ การวิจัยแล้วและก็ปุ่มควบคุม\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ
|
||||||
settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด?
|
settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด?
|
||||||
settings.clearsaves = เคลียร์เซฟ
|
settings.clearsaves = เคลียร์เซฟ
|
||||||
@@ -683,7 +695,7 @@ info.title = ข้อมูล
|
|||||||
error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น
|
error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น
|
||||||
error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น
|
error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น
|
||||||
unit.nobuild = [scarlet]ยูนิตนี้ไม่สามารถสร้างได้
|
unit.nobuild = [scarlet]ยูนิตนี้ไม่สามารถสร้างได้
|
||||||
lastaccessed = [lightgray]:คนที่แตะเป็นคนสุดท้าย {0}
|
lastaccessed = [lightgray]คนสุดท้ายที่แตะ: {0}
|
||||||
block.unknown = [lightgray]???
|
block.unknown = [lightgray]???
|
||||||
|
|
||||||
stat.showinmap = <โหลดแมพเพื่อแสดง>
|
stat.showinmap = <โหลดแมพเพื่อแสดง>
|
||||||
@@ -1151,6 +1163,7 @@ block.core-nucleus.name = แกนกลาง: นิวเคลียส
|
|||||||
block.deep-water.name = น้ำลึก
|
block.deep-water.name = น้ำลึก
|
||||||
block.shallow-water.name = น้ำตื้น
|
block.shallow-water.name = น้ำตื้น
|
||||||
block.tainted-water.name = น้ำเสีย
|
block.tainted-water.name = น้ำเสีย
|
||||||
|
block.deep-tainted-water.name = น้ำเสียลึก
|
||||||
block.darksand-tainted-water.name = น้ำเสียบนทรายดำ
|
block.darksand-tainted-water.name = น้ำเสียบนทรายดำ
|
||||||
block.tar.name = น้ำมันดิน
|
block.tar.name = น้ำมันดิน
|
||||||
block.stone.name = หิน
|
block.stone.name = หิน
|
||||||
@@ -1384,6 +1397,7 @@ hint.generator = \uf879 [accent]เครื่องกำเนิดไฟฟ
|
|||||||
hint.guardian = หน่วย[accent]ผู้พิทักษ์[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[accent]ทองแดง[]และ[accent]ตะกั่ว[][scarlet]ไม่มีประสิทธิภาพ[]\n\nควรใช้ป้อมปืนที่ดีกว่านี้หรือใช้ \uf835 [accent]กราไฟท์[]ใส่ใน \uf861 ดูโอ/ \uf859 ซัลโวเป็นกระสุนเพื่อทำลายผู้พิทักษ์
|
hint.guardian = หน่วย[accent]ผู้พิทักษ์[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[accent]ทองแดง[]และ[accent]ตะกั่ว[][scarlet]ไม่มีประสิทธิภาพ[]\n\nควรใช้ป้อมปืนที่ดีกว่านี้หรือใช้ \uf835 [accent]กราไฟท์[]ใส่ใน \uf861 ดูโอ/ \uf859 ซัลโวเป็นกระสุนเพื่อทำลายผู้พิทักษ์
|
||||||
hint.coreUpgrade = สามารถอัปเกรดแกนกลางได้โดย[accent]วางแกนกลางที่ใหญ่กว่าทับมัน[]\n\nวาง [accent]แกนกลาง: ฟาวน์เดชั่น[]ทับ [accent]แกนกลาง: ชาร์ด[] ต้องแน่ใจว่ารอบข้างมีที่ว่างก่อนจะวาง
|
hint.coreUpgrade = สามารถอัปเกรดแกนกลางได้โดย[accent]วางแกนกลางที่ใหญ่กว่าทับมัน[]\n\nวาง [accent]แกนกลาง: ฟาวน์เดชั่น[]ทับ [accent]แกนกลาง: ชาร์ด[] ต้องแน่ใจว่ารอบข้างมีที่ว่างก่อนจะวาง
|
||||||
hint.presetLaunch = [accent]เซ็กเตอร์ลงจอด[]สีเทา อย่างเช่น[accent]ป่าหนาวเหน็บ[] สามารถลงจอดจากที่ไหนที่ได้ในแผนที่ พวกนั้นไม่จำเป็นต้องยืดครองเซ็กเตอร์รอบข้างเพื่อส่งแกนกลางไป\n\n[accent]เซ็กเตอร์ที่มีเลข[] อย่างเช่นอันนี้[accent]ไม่จำเป็น[]ต้องยืดครอง
|
hint.presetLaunch = [accent]เซ็กเตอร์ลงจอด[]สีเทา อย่างเช่น[accent]ป่าหนาวเหน็บ[] สามารถลงจอดจากที่ไหนที่ได้ในแผนที่ พวกนั้นไม่จำเป็นต้องยืดครองเซ็กเตอร์รอบข้างเพื่อส่งแกนกลางไป\n\n[accent]เซ็กเตอร์ที่มีเลข[] อย่างเช่นอันนี้[accent]ไม่จำเป็น[]ต้องยืดครอง
|
||||||
|
hint.presetDifficulty = เซ็กเตอร์นี้มี[scarlet]ระดับภัยคุกคามศัตรูสูง[]\n[accent]ไม่แนะนำ[]ให้ลงจอดไปยังเซ็กเซอร์พวกนั้นหากไม่มีการเตรียมพร้อมและเทคโนโลยี
|
||||||
hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
|
hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[]
|
||||||
hint.coopCampaign = ตอนที่เล่น[accent]แคมเปญร่วมกัน[]กับเพื่อน ไอเท็มที่ผลิตในแมพนี้จะถูกส่ง[accent]ไปยังเซ็กเตอร์ของคุณด้วย[]\n\nการวิจัยใหม่ที่โฮสต์ได้วิจัยก็เก็บเป็นของคุณด้วย
|
hint.coopCampaign = ตอนที่เล่น[accent]แคมเปญร่วมกัน[]กับเพื่อน ไอเท็มที่ผลิตในแมพนี้จะถูกส่ง[accent]ไปยังเซ็กเตอร์ของคุณด้วย[]\n\nการวิจัยใหม่ที่โฮสต์ได้วิจัยก็เก็บเป็นของคุณด้วย
|
||||||
|
|
||||||
@@ -1761,12 +1775,12 @@ lenum.target = ยิงไปที่ตำแหน่งเป้าหม
|
|||||||
lenum.targetp = ยิงเป้าหมายโดยมีการคำนวณความเร็ว
|
lenum.targetp = ยิงเป้าหมายโดยมีการคำนวณความเร็ว
|
||||||
lenum.itemdrop = ปล่อยไอเท็ม
|
lenum.itemdrop = ปล่อยไอเท็ม
|
||||||
lenum.itemtake = หยิบไอเท็มจากสิ่งก่อสร้าง
|
lenum.itemtake = หยิบไอเท็มจากสิ่งก่อสร้าง
|
||||||
lenum.paydrop = ปล่อยของที่บรรทุกอยู่
|
lenum.paydrop = ปล่อยสิ่งที่บรรทุกอยู่
|
||||||
lenum.paytake = หยิบของบรรทุกที่จุดที่อยู่
|
lenum.paytake = หยิบสิ่งบรรทุก ณ จุดที่อยู่
|
||||||
lenum.flag = ปักธงยูนิตเป็นหมายเลข
|
lenum.flag = ปักธงยูนิตเป็นหมายเลข
|
||||||
lenum.mine = ขุดที่ตำแหน่งเป้าหมาย
|
lenum.mine = ขุดที่ตำแหน่งเป้าหมาย
|
||||||
lenum.build = สร้างสิ่งก่อสร้าง
|
lenum.build = สร้างสิ่งก่อสร้าง
|
||||||
lenum.getblock = ดึงข้อมูลสิ่งก่อสร้างและประเภทสิ่งก่อสร้างที่ตำแหน่งเป้าหมาย\nหน่วยต้องอยู่ในช่วงของตำแหน่ง\nของแข็งที่ไม่ใช่สิ่งก่อสร้างจะส่งกลับเป็น [accent]@solid[]
|
lenum.getblock = ดึงข้อมูลสิ่งก่อสร้างและประเภทสิ่งก่อสร้างที่ตำแหน่งเป้าหมาย\nหน่วยต้องอยู่ในช่วงของตำแหน่ง\nของแข็งที่ไม่ใช่สิ่งก่อสร้างจะส่งกลับเป็น [accent]@solid[]
|
||||||
lenum.within = ตรวจสอบว่ายูนิตอยู่ในระยะหรือไม่
|
lenum.within = ตรวจสอบว่ายูนิตอยู่ในระยะหรือไม่
|
||||||
lenum.boost = เริ่ม/หยุดการบูสต์
|
lenum.boost = เริ่ม/หยุดการบูสต์
|
||||||
#extra line: 18 => extra descriptions: 4+2 => extra details: (7+4)+1
|
#extra line: 16 => extra descriptions: 4 => extra details: (7+4)+1
|
||||||
|
|||||||
@@ -393,6 +393,13 @@ waves.load = Panodan yükle
|
|||||||
waves.invalid = Panoda geçersiz dalga sayısı var.
|
waves.invalid = Panoda geçersiz dalga sayısı var.
|
||||||
waves.copied = Dalgalar kopyalandı.
|
waves.copied = Dalgalar kopyalandı.
|
||||||
waves.none = Düşman bulunamadı.\nBoş dalga düzenlerin otomatik olarak varsayılan düzenle değiştirileceğini unutmayın
|
waves.none = Düşman bulunamadı.\nBoş dalga düzenlerin otomatik olarak varsayılan düzenle değiştirileceğini unutmayın
|
||||||
|
waves.sort = Sıralama Ölçeği:
|
||||||
|
waves.sort.reverse = Ters Sırala
|
||||||
|
waves.sort.begin = Başla
|
||||||
|
waves.sort.health = Can
|
||||||
|
waves.sort.type = Tür
|
||||||
|
waves.units.hide = Hepsini Gizle
|
||||||
|
waves.units.show = Hepsini Göster
|
||||||
|
|
||||||
#bunlar özellikle küçük başlıyor.
|
#bunlar özellikle küçük başlıyor.
|
||||||
wavemode.counts = miktarlar
|
wavemode.counts = miktarlar
|
||||||
@@ -621,6 +628,8 @@ sector.biomassFacility.name = Sentetik BioMadde Santrali
|
|||||||
sector.windsweptIslands.name = Rüzgarlı Adalar
|
sector.windsweptIslands.name = Rüzgarlı Adalar
|
||||||
sector.extractionOutpost.name = Kazı Üssü
|
sector.extractionOutpost.name = Kazı Üssü
|
||||||
sector.planetaryTerminal.name = Gezegenler Arası Terminal
|
sector.planetaryTerminal.name = Gezegenler Arası Terminal
|
||||||
|
sector.coastline.name = Kıyı Şeridi
|
||||||
|
sector.navalFortress.name = Deniz Kalesi
|
||||||
|
|
||||||
sector.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut. Mümkün olduğunca çok bakır ve kurşun topla.\nİlerle.
|
sector.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut. Mümkün olduğunca çok bakır ve kurşun topla.\nİlerle.
|
||||||
sector.frozenForest.description = Burada, dağlara yakın bölgelerde bile sporlar etrafa yayıldı. Dondurucu soğuk onları sonsuza dek durduramaz.\n\nEnerji kullanmaya başla. Termik jeneratörler inşa et. Tamircileri kullanmayı öğren.
|
sector.frozenForest.description = Burada, dağlara yakın bölgelerde bile sporlar etrafa yayıldı. Dondurucu soğuk onları sonsuza dek durduramaz.\n\nEnerji kullanmaya başla. Termik jeneratörler inşa et. Tamircileri kullanmayı öğren.
|
||||||
@@ -1382,6 +1391,7 @@ hint.generator = \uf879 [accent]Termik Jeneratör[] kömür yakarak enerji üret
|
|||||||
hint.guardian = [accent]Gardiyan[] birimleri güçlü bir zırha sahiptir. [accent]bakır[] ve [accent]kurşun[] gibi mermilere karşı [scarlet]Dayanıklıdır[].\n\nGardiyanları öldürmek için [accent]salvo[] gibi daha güçlü taretleri ve \uf835 [accent]grafit[] gibi daha çok hasar veren mermileri kullanın.
|
hint.guardian = [accent]Gardiyan[] birimleri güçlü bir zırha sahiptir. [accent]bakır[] ve [accent]kurşun[] gibi mermilere karşı [scarlet]Dayanıklıdır[].\n\nGardiyanları öldürmek için [accent]salvo[] gibi daha güçlü taretleri ve \uf835 [accent]grafit[] gibi daha çok hasar veren mermileri kullanın.
|
||||||
hint.coreUpgrade = Merkezinizi, [accent]merkezinizin üstüne daha gelişmiş bir merkez[] koyarak geliştirebilirsiniz. \n\n[accent]Parçacık[] olarak adlandırılan fakirhanenizin üstüne [accent]Temel[] olarak adlandırılan merkezinizi koyun. Merkezinizin etrafında hiçbir yapı olmamalıdır.
|
hint.coreUpgrade = Merkezinizi, [accent]merkezinizin üstüne daha gelişmiş bir merkez[] koyarak geliştirebilirsiniz. \n\n[accent]Parçacık[] olarak adlandırılan fakirhanenizin üstüne [accent]Temel[] olarak adlandırılan merkezinizi koyun. Merkezinizin etrafında hiçbir yapı olmamalıdır.
|
||||||
hint.presetLaunch = [accent]Donmuş Ormanlar[] gibi [accent]ana sektörlere iniş[] herhangi bir yerden yapılabilir. Yakındaki bir sektörden fırlatma gerektirmez.\n\nBunun gibi [accent]sayı ile isimlendirilmiş[] sektörleri ele geçirmek [accent]isteğe bağlıdır.[].
|
hint.presetLaunch = [accent]Donmuş Ormanlar[] gibi [accent]ana sektörlere iniş[] herhangi bir yerden yapılabilir. Yakındaki bir sektörden fırlatma gerektirmez.\n\nBunun gibi [accent]sayı ile isimlendirilmiş[] sektörleri ele geçirmek [accent]isteğe bağlıdır.[].
|
||||||
|
hint.presetDifficulty = Bu sektör, [scarlet]yüksek tehlike[] barındırıyor.\nBöyle bir sektöre hazırlıksız fırlatış yapmak [accent]tavsiye edilmez[].
|
||||||
hint.coreIncinerate = Bir çekirdek ağzına kadar dolduktan sonra, ekstra itemler [accent]eritilir[].
|
hint.coreIncinerate = Bir çekirdek ağzına kadar dolduktan sonra, ekstra itemler [accent]eritilir[].
|
||||||
hint.coopCampaign = Arkadaşlarınla Multiplayer Campaign oynarken, her yaptığınız Araştırma ve item aktarımı, senin oyun içi Campaign ine de aktarılır.
|
hint.coopCampaign = Arkadaşlarınla Multiplayer Campaign oynarken, her yaptığınız Araştırma ve item aktarımı, senin oyun içi Campaign ine de aktarılır.
|
||||||
#Yukarıdaki bağzı cümleler Anti Dragon tarafından çevirildi.
|
#Yukarıdaki bağzı cümleler Anti Dragon tarafından çevirildi.
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -78,13 +78,12 @@ schematic.tagexists = 該標籤已存在。
|
|||||||
|
|
||||||
stats = 統計
|
stats = 統計
|
||||||
stat.wave = 打敗的波次:[accent]{0}
|
stat.wave = 打敗的波次:[accent]{0}
|
||||||
stat.enemiesDestroyed = 摧毀的敵人:[accent]{0}
|
stat.unitsCreated = 建造單位數:[accent] {0}
|
||||||
|
stat.enemiesDestroyed = 摧毀敵人數:[accent]{0}
|
||||||
stat.built = 建設的建築:[accent]{0}
|
stat.built = 建設的建築:[accent]{0}
|
||||||
stat.destroyed = 摧毀的建築:[accent]{0}
|
stat.destroyed = 摧毀的建築:[accent]{0}
|
||||||
stat.deconstructed = 拆除的建築:[accent]{0}
|
stat.deconstructed = 拆除的建築:[accent]{0}
|
||||||
stat.delivered = 發射的核心資源:
|
|
||||||
stat.playtime = 遊玩時間:[accent] {0}
|
stat.playtime = 遊玩時間:[accent] {0}
|
||||||
stat.rank = 最終排名:[accent]{0}
|
|
||||||
|
|
||||||
globalitems = [accent]全域物品
|
globalitems = [accent]全域物品
|
||||||
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
|
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
|
||||||
@@ -93,7 +92,8 @@ level.select = 選擇關卡
|
|||||||
level.mode = 遊戲模式:
|
level.mode = 遊戲模式:
|
||||||
coreattack = 〈核心正在受到攻擊!〉
|
coreattack = 〈核心正在受到攻擊!〉
|
||||||
nearpoint = 【[scarlet]立即離開空降區[]】\n湮滅即將來臨
|
nearpoint = 【[scarlet]立即離開空降區[]】\n湮滅即將來臨
|
||||||
database = 核心數據庫
|
database = 核心資料庫
|
||||||
|
database.button = 資料庫
|
||||||
savegame = 儲存遊戲
|
savegame = 儲存遊戲
|
||||||
loadgame = 載入遊戲
|
loadgame = 載入遊戲
|
||||||
joingame = 多人連線
|
joingame = 多人連線
|
||||||
@@ -169,6 +169,7 @@ launchcore = 發射核心
|
|||||||
filename = 檔案名稱︰
|
filename = 檔案名稱︰
|
||||||
unlocked = 已解鎖新內容!
|
unlocked = 已解鎖新內容!
|
||||||
available = 可研究新科技!
|
available = 可研究新科技!
|
||||||
|
unlock.incampaign = <在戰役中解鎖>
|
||||||
completed = [accent]完成
|
completed = [accent]完成
|
||||||
techtree = 科技樹
|
techtree = 科技樹
|
||||||
research.legacy = [accent]5.0[] 偵測到舊有科技資料。\n請問要[accent]載入[]資料,還是[accent]放棄[]並重置新戰役的科技樹(建議)?
|
research.legacy = [accent]5.0[] 偵測到舊有科技資料。\n請問要[accent]載入[]資料,還是[accent]放棄[]並重置新戰役的科技樹(建議)?
|
||||||
@@ -345,9 +346,9 @@ custom = 自訂
|
|||||||
builtin = 内建
|
builtin = 内建
|
||||||
map.delete.confirm = 確認要刪除地圖嗎?此動作無法復原!
|
map.delete.confirm = 確認要刪除地圖嗎?此動作無法復原!
|
||||||
map.random = [accent]隨機地圖
|
map.random = [accent]隨機地圖
|
||||||
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。
|
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[#{0}]{1}[]的核心。
|
||||||
map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[scarlet]不是橘色[]的核心。
|
map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[scarlet]不是橘色[]的核心。
|
||||||
map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[scarlet]紅色[]的核心。
|
map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[#{0}]{1}[]的核心。
|
||||||
map.invalid = 地圖載入錯誤:地圖可能已經損毀。
|
map.invalid = 地圖載入錯誤:地圖可能已經損毀。
|
||||||
workshop.update = 更新項目
|
workshop.update = 更新項目
|
||||||
workshop.error = 擷取工作坊詳細資訊時出錯:{0}
|
workshop.error = 擷取工作坊詳細資訊時出錯:{0}
|
||||||
@@ -385,7 +386,8 @@ waves.waves = 波次
|
|||||||
waves.perspawn = 每次生成
|
waves.perspawn = 每次生成
|
||||||
waves.shields = 護盾/波次
|
waves.shields = 護盾/波次
|
||||||
waves.to = 至
|
waves.to = 至
|
||||||
waves.guardian = 頭目
|
waves.max = 最大單位數
|
||||||
|
waves.guardian = 守衛者
|
||||||
waves.preview = 預覽
|
waves.preview = 預覽
|
||||||
waves.edit = 編輯……
|
waves.edit = 編輯……
|
||||||
waves.copy = 複製到剪貼簿
|
waves.copy = 複製到剪貼簿
|
||||||
@@ -393,6 +395,11 @@ waves.load = 從剪貼簿載入
|
|||||||
waves.invalid = 剪貼簿中的波次無效。
|
waves.invalid = 剪貼簿中的波次無效。
|
||||||
waves.copied = 波次已複製。
|
waves.copied = 波次已複製。
|
||||||
waves.none = 無自訂敵人。\n請注意,若沒有波次佈局將自動替換為預設佈局。
|
waves.none = 無自訂敵人。\n請注意,若沒有波次佈局將自動替換為預設佈局。
|
||||||
|
waves.sort = 分類排序:
|
||||||
|
waves.sort.reverse = 反向排序
|
||||||
|
waves.sort.begin = 開始
|
||||||
|
waves.sort.health = 血量
|
||||||
|
waves.sort.type = 兵種
|
||||||
|
|
||||||
#校正用空行
|
#校正用空行
|
||||||
wavemode.counts = 數量
|
wavemode.counts = 數量
|
||||||
@@ -564,6 +571,8 @@ weather.sandstorm.name = 沙塵暴
|
|||||||
weather.sporestorm.name = 孢子風暴
|
weather.sporestorm.name = 孢子風暴
|
||||||
weather.fog.name = 霧
|
weather.fog.name = 霧
|
||||||
|
|
||||||
|
sectorlist = 地區
|
||||||
|
sectorlist.attacked = {0} 遭受攻擊
|
||||||
sectors.unexplored = [lightgray]未探索
|
sectors.unexplored = [lightgray]未探索
|
||||||
sectors.resources = 資源:
|
sectors.resources = 資源:
|
||||||
sectors.production = 生產:
|
sectors.production = 生產:
|
||||||
@@ -646,10 +655,12 @@ status.sapped.name = 被吸血
|
|||||||
status.electrified.name = 觸電
|
status.electrified.name = 觸電
|
||||||
status.spore-slowed.name = 孢子緩速
|
status.spore-slowed.name = 孢子緩速
|
||||||
status.tarred.name = 焦油
|
status.tarred.name = 焦油
|
||||||
|
status.overdrive.name = 超載
|
||||||
status.overclock.name = 快轉
|
status.overclock.name = 快轉
|
||||||
status.shocked.name = 電擊
|
status.shocked.name = 電擊
|
||||||
status.blasted.name = 爆炸
|
status.blasted.name = 爆炸
|
||||||
status.unmoving.name = 立定
|
status.unmoving.name = 立定
|
||||||
|
status.boss.name = 守衛者
|
||||||
|
|
||||||
settings.language = 語言
|
settings.language = 語言
|
||||||
settings.data = 遊戲資料
|
settings.data = 遊戲資料
|
||||||
@@ -1001,6 +1012,7 @@ rules.wavetimer = 波次時間
|
|||||||
rules.waves = 波次
|
rules.waves = 波次
|
||||||
rules.attack = 攻擊模式
|
rules.attack = 攻擊模式
|
||||||
rules.buildai = 電腦自動建築
|
rules.buildai = 電腦自動建築
|
||||||
|
rules.aitier = AI 等級
|
||||||
rules.cleanupdeadteams = 移除戰敗玩家的建築(對戰)
|
rules.cleanupdeadteams = 移除戰敗玩家的建築(對戰)
|
||||||
rules.corecapture = 佔領摧毀的核心
|
rules.corecapture = 佔領摧毀的核心
|
||||||
rules.polygoncoreprotection = 核心禁築區呈多邊形
|
rules.polygoncoreprotection = 核心禁築區呈多邊形
|
||||||
@@ -1020,12 +1032,15 @@ rules.deconstructrefundmultiplier = 拆除資源返還比例
|
|||||||
rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次
|
rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次
|
||||||
rules.dropzoneradius = 空降區半徑:[lightgray](格)
|
rules.dropzoneradius = 空降區半徑:[lightgray](格)
|
||||||
rules.unitammo = 單位需要彈藥
|
rules.unitammo = 單位需要彈藥
|
||||||
|
rules.enemyteam = 敵方隊伍
|
||||||
|
rules.playerteam = 玩家隊伍
|
||||||
rules.title.waves = 波次
|
rules.title.waves = 波次
|
||||||
rules.title.resourcesbuilding = 資源與建築
|
rules.title.resourcesbuilding = 資源與建築
|
||||||
rules.title.enemy = 敵人
|
rules.title.enemy = 敵人
|
||||||
rules.title.unit = 單位
|
rules.title.unit = 單位
|
||||||
rules.title.experimental = 實驗中
|
rules.title.experimental = 實驗中
|
||||||
rules.title.environment = 環境
|
rules.title.environment = 環境
|
||||||
|
rules.title.teams = 分隊
|
||||||
rules.lighting = 光照
|
rules.lighting = 光照
|
||||||
rules.enemyLights = 敵方發光
|
rules.enemyLights = 敵方發光
|
||||||
rules.fire = 火
|
rules.fire = 火
|
||||||
@@ -1432,6 +1447,8 @@ block.item-source.description = 無限輸出物品。僅限沙盒。
|
|||||||
block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。
|
block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。
|
||||||
block.liquid-source.description = 無限輸出液體。僅限沙盒。
|
block.liquid-source.description = 無限輸出液體。僅限沙盒。
|
||||||
block.liquid-void.description = 銷毀所有輸入的液體。僅限沙盒。
|
block.liquid-void.description = 銷毀所有輸入的液體。僅限沙盒。
|
||||||
|
block.payload-source.description = 無限輸出原料。僅限沙盒。
|
||||||
|
block.payload-void.description = 銷毀所有進入的原料。僅限沙盒。
|
||||||
block.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。
|
block.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。
|
||||||
block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。
|
block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。
|
||||||
block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。
|
block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
63743=spawn|block-spawn-ui
|
63743=spawn|block-spawn-ui
|
||||||
63742=deepwater|block-deepwater-ui
|
63742=deepwater|block-deepwater-ui
|
||||||
63741=water|block-water-ui
|
63741=shallow-water|block-shallow-water-ui
|
||||||
63740=tainted-water|block-tainted-water-ui
|
63740=tainted-water|block-tainted-water-ui
|
||||||
63739=darksand-tainted-water|block-darksand-tainted-water-ui
|
63739=darksand-tainted-water|block-darksand-tainted-water-ui
|
||||||
63738=sand-water|block-sand-water-ui
|
63738=sand-water|block-sand-water-ui
|
||||||
@@ -357,7 +357,6 @@
|
|||||||
63357=crux|team-crux
|
63357=crux|team-crux
|
||||||
63358=derelict|team-derelict
|
63358=derelict|team-derelict
|
||||||
63350=deep-water|block-deep-water-ui
|
63350=deep-water|block-deep-water-ui
|
||||||
63349=shallow-water|block-shallow-water-ui
|
|
||||||
63348=molten-slag|block-molten-slag-ui
|
63348=molten-slag|block-molten-slag-ui
|
||||||
63347=crater-stone|block-crater-stone-ui
|
63347=crater-stone|block-crater-stone-ui
|
||||||
63346=deep-tainted-water|block-deep-tainted-water-ui
|
63346=deep-tainted-water|block-deep-tainted-water-ui
|
||||||
|
|||||||
BIN
core/assets/maps/coastline.msav
Normal file
BIN
core/assets/maps/coastline.msav
Normal file
Binary file not shown.
BIN
core/assets/maps/navalFortress.msav
Normal file
BIN
core/assets/maps/navalFortress.msav
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -56,6 +56,9 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Log.info("[GL] Using @ context.", gl30 != null ? "OpenGL 3" : "OpenGL 2");
|
Log.info("[GL] Using @ context.", gl30 != null ? "OpenGL 3" : "OpenGL 2");
|
||||||
if(maxTextureSize < 4096) Log.warn("[GL] Your maximum texture size is below the recommended minimum of 4096. This will cause severe performance issues.");
|
if(maxTextureSize < 4096) Log.warn("[GL] Your maximum texture size is below the recommended minimum of 4096. This will cause severe performance issues.");
|
||||||
Log.info("[JAVA] Version: @", OS.javaVersion);
|
Log.info("[JAVA] Version: @", OS.javaVersion);
|
||||||
|
long ram = Runtime.getRuntime().maxMemory();
|
||||||
|
boolean gb = ram >= 1024 * 1024 * 1024;
|
||||||
|
Log.info("[RAM] Available: @ @", Strings.fixed(gb ? ram / 1024f / 1024 / 1024f : ram / 1024f / 1024f, 1), gb ? "GB" : "MB");
|
||||||
|
|
||||||
Time.setDeltaProvider(() -> {
|
Time.setDeltaProvider(() -> {
|
||||||
float result = Core.graphics.getDeltaTime() * 60f;
|
float result = Core.graphics.getDeltaTime() * 60f;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import mindustry.game.*;
|
|||||||
import mindustry.game.Schematic.*;
|
import mindustry.game.Schematic.*;
|
||||||
import mindustry.game.Teams.*;
|
import mindustry.game.Teams.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
import mindustry.maps.generators.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.defense.*;
|
import mindustry.world.blocks.defense.*;
|
||||||
@@ -25,7 +26,6 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
public class BaseAI{
|
public class BaseAI{
|
||||||
private static final Vec2 axis = new Vec2(), rotator = new Vec2();
|
private static final Vec2 axis = new Vec2(), rotator = new Vec2();
|
||||||
private static final float correctPercent = 0.5f;
|
|
||||||
private static final int attempts = 4;
|
private static final int attempts = 4;
|
||||||
private static final float emptyChance = 0.01f;
|
private static final float emptyChance = 0.01f;
|
||||||
private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2;
|
private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2;
|
||||||
@@ -46,6 +46,7 @@ public class BaseAI{
|
|||||||
boolean calculating, startedCalculating;
|
boolean calculating, startedCalculating;
|
||||||
int calcCount = 0;
|
int calcCount = 0;
|
||||||
int totalCalcs = 0;
|
int totalCalcs = 0;
|
||||||
|
Block wallType;
|
||||||
|
|
||||||
public BaseAI(TeamData data){
|
public BaseAI(TeamData data){
|
||||||
this.data = data;
|
this.data = data;
|
||||||
@@ -53,6 +54,10 @@ public class BaseAI{
|
|||||||
|
|
||||||
public void update(){
|
public void update(){
|
||||||
|
|
||||||
|
if(wallType == null){
|
||||||
|
wallType = BaseGenerator.getDifficultyWall(1, data.team.rules().aiTier / 0.8f);
|
||||||
|
}
|
||||||
|
|
||||||
if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){
|
if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){
|
||||||
CoreBlock block = (CoreBlock)data.core().block;
|
CoreBlock block = (CoreBlock)data.core().block;
|
||||||
int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType);
|
int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType);
|
||||||
@@ -271,7 +276,7 @@ public class BaseAI{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void tryWalls(){
|
private void tryWalls(){
|
||||||
Block wall = Blocks.copperWall;
|
Block wall = wallType;
|
||||||
Building spawnt = state.rules.defaultTeam.core() != null ? state.rules.defaultTeam.core() : data.team.core();
|
Building spawnt = state.rules.defaultTeam.core() != null ? state.rules.defaultTeam.core() : data.team.core();
|
||||||
Tile spawn = spawnt == null ? null : spawnt.tile;
|
Tile spawn = spawnt == null ? null : spawnt.tile;
|
||||||
|
|
||||||
|
|||||||
@@ -50,10 +50,12 @@ public class BlockIndexer{
|
|||||||
clearFlags();
|
clearFlags();
|
||||||
|
|
||||||
Events.on(TilePreChangeEvent.class, event -> {
|
Events.on(TilePreChangeEvent.class, event -> {
|
||||||
|
if(state.isEditor()) return;
|
||||||
removeIndex(event.tile);
|
removeIndex(event.tile);
|
||||||
});
|
});
|
||||||
|
|
||||||
Events.on(TileChangeEvent.class, event -> {
|
Events.on(TileChangeEvent.class, event -> {
|
||||||
|
if(state.isEditor()) return;
|
||||||
addIndex(event.tile);
|
addIndex(event.tile);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -109,7 +111,7 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//update the unit cap when building is remove
|
//update the unit cap when building is removed
|
||||||
data.unitCap -= tile.block().unitCapModifier;
|
data.unitCap -= tile.block().unitCapModifier;
|
||||||
|
|
||||||
//unregister building from building quadtree
|
//unregister building from building quadtree
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ public class Pathfinder implements Runnable{
|
|||||||
/** Starts or restarts the pathfinding thread. */
|
/** Starts or restarts the pathfinding thread. */
|
||||||
private void start(){
|
private void start(){
|
||||||
stop();
|
stop();
|
||||||
thread = Threads.daemon(this);
|
thread = Threads.daemon("Pathfinder", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Stops the pathfinding thread. */
|
/** Stops the pathfinding thread. */
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class WaveSpawner{
|
|||||||
public void spawnEnemies(){
|
public void spawnEnemies(){
|
||||||
spawning = true;
|
spawning = true;
|
||||||
|
|
||||||
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
|
eachGroundSpawn(-1, (spawnX, spawnY, doShockwave) -> {
|
||||||
if(doShockwave){
|
if(doShockwave){
|
||||||
doShockwave(spawnX, spawnY);
|
doShockwave(spawnX, spawnY);
|
||||||
}
|
}
|
||||||
@@ -70,7 +70,7 @@ public class WaveSpawner{
|
|||||||
if(group.type.flying){
|
if(group.type.flying){
|
||||||
float spread = margin / 1.5f;
|
float spread = margin / 1.5f;
|
||||||
|
|
||||||
eachFlyerSpawn((spawnX, spawnY) -> {
|
eachFlyerSpawn(group.spawn, (spawnX, spawnY) -> {
|
||||||
for(int i = 0; i < spawned; i++){
|
for(int i = 0; i < spawned; i++){
|
||||||
Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
|
Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1);
|
||||||
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
|
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
|
||||||
@@ -80,7 +80,7 @@ public class WaveSpawner{
|
|||||||
}else{
|
}else{
|
||||||
float spread = tilesize * 2;
|
float spread = tilesize * 2;
|
||||||
|
|
||||||
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
|
eachGroundSpawn(group.spawn, (spawnX, spawnY, doShockwave) -> {
|
||||||
|
|
||||||
for(int i = 0; i < spawned; i++){
|
for(int i = 0; i < spawned; i++){
|
||||||
Tmp.v1.rnd(spread);
|
Tmp.v1.rnd(spread);
|
||||||
@@ -102,12 +102,14 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void eachGroundSpawn(Intc2 cons){
|
public void eachGroundSpawn(Intc2 cons){
|
||||||
eachGroundSpawn((x, y, shock) -> cons.get(World.toTile(x), World.toTile(y)));
|
eachGroundSpawn(-1, (x, y, shock) -> cons.get(World.toTile(x), World.toTile(y)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void eachGroundSpawn(SpawnConsumer cons){
|
private void eachGroundSpawn(int filterPos, SpawnConsumer cons){
|
||||||
if(state.hasSpawns()){
|
if(state.hasSpawns()){
|
||||||
for(Tile spawn : spawns){
|
for(Tile spawn : spawns){
|
||||||
|
if(filterPos != -1 && filterPos != spawn.pos()) continue;
|
||||||
|
|
||||||
cons.accept(spawn.worldx(), spawn.worldy(), true);
|
cons.accept(spawn.worldx(), spawn.worldy(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,6 +117,8 @@ public class WaveSpawner{
|
|||||||
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
||||||
Building firstCore = state.teams.playerCores().first();
|
Building firstCore = state.teams.playerCores().first();
|
||||||
for(Building core : state.rules.waveTeam.cores()){
|
for(Building core : state.rules.waveTeam.cores()){
|
||||||
|
if(filterPos != -1 && filterPos != core.pos()) continue;
|
||||||
|
|
||||||
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2);
|
Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2);
|
||||||
|
|
||||||
boolean valid = false;
|
boolean valid = false;
|
||||||
@@ -147,8 +151,10 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void eachFlyerSpawn(Floatc2 cons){
|
private void eachFlyerSpawn(int filterPos, Floatc2 cons){
|
||||||
for(Tile tile : spawns){
|
for(Tile tile : spawns){
|
||||||
|
if(filterPos != -1 && filterPos != tile.pos()) continue;
|
||||||
|
|
||||||
float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y);
|
float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y);
|
||||||
float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize;
|
float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize;
|
||||||
float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin);
|
float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin);
|
||||||
@@ -158,6 +164,8 @@ public class WaveSpawner{
|
|||||||
|
|
||||||
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
|
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
|
||||||
for(Building core : state.rules.waveTeam.data().cores){
|
for(Building core : state.rules.waveTeam.data().cores){
|
||||||
|
if(filterPos != -1 && filterPos != core.pos()) continue;
|
||||||
|
|
||||||
cons.get(core.x, core.y);
|
cons.get(core.x, core.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,7 +179,7 @@ public class WaveSpawner{
|
|||||||
|
|
||||||
public int countFlyerSpawns(){
|
public int countFlyerSpawns(){
|
||||||
tmpCount = 0;
|
tmpCount = 0;
|
||||||
eachFlyerSpawn((x, y) -> tmpCount ++);
|
eachFlyerSpawn(-1, (x, y) -> tmpCount ++);
|
||||||
return tmpCount;
|
return tmpCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ public class SoundControl{
|
|||||||
float avol = Core.settings.getInt("ambientvol", 100) / 100f;
|
float avol = Core.settings.getInt("ambientvol", 100) / 100f;
|
||||||
|
|
||||||
sounds.each((sound, data) -> {
|
sounds.each((sound, data) -> {
|
||||||
data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f);
|
data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.11f);
|
||||||
|
|
||||||
boolean play = data.curVolume > 0.01f;
|
boolean play = data.curVolume > 0.01f;
|
||||||
float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total);
|
float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total);
|
||||||
|
|||||||
@@ -1199,6 +1199,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
distributor = new Router("distributor"){{
|
distributor = new Router("distributor"){{
|
||||||
requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4));
|
requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4));
|
||||||
|
buildCostMultiplier = 3f;
|
||||||
size = 2;
|
size = 2;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ public class Fx{
|
|||||||
//lifetime is how many frames it takes to fade out the trail
|
//lifetime is how many frames it takes to fade out the trail
|
||||||
e.lifetime = trail.length * 1.4f;
|
e.lifetime = trail.length * 1.4f;
|
||||||
|
|
||||||
|
if(!state.isPaused()){
|
||||||
trail.shorten();
|
trail.shorten();
|
||||||
|
}
|
||||||
trail.drawCap(e.color, e.rotation);
|
trail.drawCap(e.color, e.rotation);
|
||||||
trail.draw(e.color, e.rotation);
|
trail.draw(e.color, e.rotation);
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ public class SectorPresets implements ContentList{
|
|||||||
groundZero,
|
groundZero,
|
||||||
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields,
|
||||||
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
fungalPass, extractionOutpost, saltFlats, overgrowth,
|
||||||
impact0078, desolateRift, nuclearComplex, planetaryTerminal;
|
impact0078, desolateRift, nuclearComplex, planetaryTerminal,
|
||||||
|
coastline, navalFortress;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
@@ -64,6 +65,15 @@ public class SectorPresets implements ContentList{
|
|||||||
useAI = false;
|
useAI = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
coastline = new SectorPreset("coastline", serpulo, 108){{
|
||||||
|
captureWave = 30;
|
||||||
|
difficulty = 5;
|
||||||
|
}};
|
||||||
|
|
||||||
|
navalFortress = new SectorPreset("navalFortress", serpulo, 216){{
|
||||||
|
difficulty = 9;
|
||||||
|
}};
|
||||||
|
|
||||||
fungalPass = new SectorPreset("fungalPass", serpulo, 21){{
|
fungalPass = new SectorPreset("fungalPass", serpulo, 21){{
|
||||||
difficulty = 4;
|
difficulty = 4;
|
||||||
useAI = false;
|
useAI = false;
|
||||||
|
|||||||
@@ -421,11 +421,11 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
node(retusa, () -> {
|
node(retusa, Seq.with(new SectorComplete(windsweptIslands)), () -> {
|
||||||
node(oxynoe, () -> {
|
node(oxynoe, Seq.with(new SectorComplete(coastline)), () -> {
|
||||||
node(cyerce, () -> {
|
node(cyerce, () -> {
|
||||||
node(aegires, () -> {
|
node(aegires, () -> {
|
||||||
node(navanax, () -> {
|
node(navanax, Seq.with(new SectorComplete(navalFortress)), () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -531,10 +531,25 @@ public class TechTree implements ContentList{
|
|||||||
new Research(airFactory),
|
new Research(airFactory),
|
||||||
new Research(door)
|
new Research(door)
|
||||||
), () -> {
|
), () -> {
|
||||||
|
node(coastline, Seq.with(
|
||||||
|
new SectorComplete(windsweptIslands),
|
||||||
|
new Research(navalFactory),
|
||||||
|
new Research(payloadConveyor)
|
||||||
|
), () -> {
|
||||||
|
node(navalFortress, Seq.with(
|
||||||
|
new SectorComplete(coastline),
|
||||||
|
new SectorComplete(extractionOutpost),
|
||||||
|
new Research(oxynoe),
|
||||||
|
new Research(minke),
|
||||||
|
new Research(cyclone),
|
||||||
|
new Research(ripple)
|
||||||
|
), () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
node(overgrowth, Seq.with(
|
node(overgrowth, Seq.with(
|
||||||
new SectorComplete(craters),
|
new SectorComplete(craters),
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import arc.struct.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.game.EventType.*;
|
|
||||||
import mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
|
import mindustry.game.EventType.*;
|
||||||
|
import mindustry.io.*;
|
||||||
import mindustry.mod.Mods.*;
|
import mindustry.mod.Mods.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -206,10 +207,16 @@ public class ContentLoader{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public <T extends MappableContent> T getByName(ContentType type, String name){
|
public <T extends MappableContent> T getByName(ContentType type, String name){
|
||||||
if(contentNameMap[type.ordinal()] == null){
|
var map = contentNameMap[type.ordinal()];
|
||||||
return null;
|
|
||||||
|
if(map == null) return null;
|
||||||
|
|
||||||
|
//load fallbacks
|
||||||
|
if(type == ContentType.block){
|
||||||
|
name = SaveVersion.modContentNameMap.get(name, name);
|
||||||
}
|
}
|
||||||
return (T)contentNameMap[type.ordinal()].get(name);
|
|
||||||
|
return (T)map.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends Content> T getByID(ContentType type, int id){
|
public <T extends Content> T getByID(ContentType type, int id){
|
||||||
|
|||||||
@@ -218,6 +218,8 @@ public class NetClient implements ApplicationListener{
|
|||||||
throw new ValidateException(player, "Player has sent a message above the text limit.");
|
throw new ValidateException(player, "Player has sent a message above the text limit.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message = message.replace("\n", "");
|
||||||
|
|
||||||
Events.fire(new PlayerChatEvent(player, message));
|
Events.fire(new PlayerChatEvent(player, message));
|
||||||
|
|
||||||
//log commands before they are handled
|
//log commands before they are handled
|
||||||
|
|||||||
@@ -397,7 +397,9 @@ public class NetServer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(found != null){
|
if(found != null){
|
||||||
if(found.admin){
|
if(found == player){
|
||||||
|
player.sendMessage("[scarlet]You can't vote to kick yourself.");
|
||||||
|
}else if(found.admin){
|
||||||
player.sendMessage("[scarlet]Did you really expect to be able to kick an admin?");
|
player.sendMessage("[scarlet]Did you really expect to be able to kick an admin?");
|
||||||
}else if(found.isLocal()){
|
}else if(found.isLocal()){
|
||||||
player.sendMessage("[scarlet]Local players cannot be kicked.");
|
player.sendMessage("[scarlet]Local players cannot be kicked.");
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public class Renderer implements ApplicationListener{
|
|||||||
public void update(){
|
public void update(){
|
||||||
Color.white.set(1f, 1f, 1f, 1f);
|
Color.white.set(1f, 1f, 1f, 1f);
|
||||||
|
|
||||||
float dest = Mathf.round(targetscale, 0.5f);
|
float dest = Mathf.clamp(Mathf.round(targetscale, 0.5f), minScale(), maxScale());
|
||||||
camerascale = Mathf.lerpDelta(camerascale, dest, 0.1f);
|
camerascale = Mathf.lerpDelta(camerascale, dest, 0.1f);
|
||||||
if(Mathf.equal(camerascale, dest, 0.001f)) camerascale = dest;
|
if(Mathf.equal(camerascale, dest, 0.001f)) camerascale = dest;
|
||||||
laserOpacity = settings.getInt("lasersopacity") / 100f;
|
laserOpacity = settings.getInt("lasersopacity") / 100f;
|
||||||
@@ -504,6 +504,8 @@ public class Renderer implements ApplicationListener{
|
|||||||
|
|
||||||
public void showLaunch(CoreBlock coreType){
|
public void showLaunch(CoreBlock coreType){
|
||||||
Vars.ui.hudfrag.showLaunch();
|
Vars.ui.hudfrag.showLaunch();
|
||||||
|
Vars.control.input.frag.config.hideConfig();
|
||||||
|
Vars.control.input.frag.inv.hide();
|
||||||
launchCoreType = coreType;
|
launchCoreType = coreType;
|
||||||
launching = true;
|
launching = true;
|
||||||
landCore = player.team().core();
|
landCore = player.team().core();
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import mindustry.world.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class MapEditor{
|
public class MapEditor{
|
||||||
public static final int[] brushSizes = {1, 2, 3, 4, 5, 9, 15, 20};
|
public static final float[] brushSizes = {1, 1.5f, 2, 3, 4, 5, 9, 15, 20};
|
||||||
|
|
||||||
public StringMap tags = new StringMap();
|
public StringMap tags = new StringMap();
|
||||||
public MapRenderer renderer = new MapRenderer();
|
public MapRenderer renderer = new MapRenderer();
|
||||||
@@ -28,7 +28,7 @@ public class MapEditor{
|
|||||||
private DrawOperation currentOp;
|
private DrawOperation currentOp;
|
||||||
private boolean loading;
|
private boolean loading;
|
||||||
|
|
||||||
public int brushSize = 1;
|
public float brushSize = 1;
|
||||||
public int rotation;
|
public int rotation;
|
||||||
public Block drawBlock = Blocks.stone;
|
public Block drawBlock = Blocks.stone;
|
||||||
public Team drawTeam = Team.sharded;
|
public Team drawTeam = Team.sharded;
|
||||||
@@ -227,8 +227,9 @@ public class MapEditor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawCircle(int x, int y, Cons<Tile> drawer){
|
public void drawCircle(int x, int y, Cons<Tile> drawer){
|
||||||
for(int rx = -brushSize; rx <= brushSize; rx++){
|
int clamped = (int)brushSize;
|
||||||
for(int ry = -brushSize; ry <= brushSize; ry++){
|
for(int rx = -clamped; rx <= clamped; rx++){
|
||||||
|
for(int ry = -clamped; ry <= clamped; ry++){
|
||||||
if(Mathf.within(rx, ry, brushSize - 0.5f + 0.0001f)){
|
if(Mathf.within(rx, ry, brushSize - 0.5f + 0.0001f)){
|
||||||
int wx = x + rx, wy = y + ry;
|
int wx = x + rx, wy = y + ry;
|
||||||
|
|
||||||
@@ -243,8 +244,9 @@ public class MapEditor{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawSquare(int x, int y, Cons<Tile> drawer){
|
public void drawSquare(int x, int y, Cons<Tile> drawer){
|
||||||
for(int rx = -brushSize; rx <= brushSize; rx++){
|
int clamped = (int)brushSize;
|
||||||
for(int ry = -brushSize; ry <= brushSize; ry++){
|
for(int rx = -clamped; rx <= clamped; rx++){
|
||||||
|
for(int ry = -clamped; ry <= clamped; ry++){
|
||||||
int wx = x + rx, wy = y + ry;
|
int wx = x + rx, wy = y + ry;
|
||||||
|
|
||||||
if(wx < 0 || wy < 0 || wx >= width() || wy >= height()){
|
if(wx < 0 || wy < 0 || wx >= width() || wy >= height()){
|
||||||
|
|||||||
@@ -576,13 +576,11 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
}).growX().top();
|
}).growX().top();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(experimental){
|
|
||||||
mid.row();
|
mid.row();
|
||||||
|
|
||||||
mid.table(t -> {
|
mid.table(t -> {
|
||||||
t.button("Cliffs", Icon.terrain, Styles.cleart, editor::addCliffs).growX().margin(9f);
|
t.button("@editor.cliffs", Icon.terrain, Styles.cleart, editor::addCliffs).growX().margin(9f);
|
||||||
}).growX().top();
|
}).growX().top();
|
||||||
}
|
|
||||||
}).margin(0).left().growY();
|
}).margin(0).left().growY();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import mindustry.content.*;
|
|||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.blocks.environment.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -132,6 +133,11 @@ public class MapRenderer implements Disposable{
|
|||||||
wall.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, wall.editorVariantRegions().length - 1)] :
|
wall.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, wall.editorVariantRegions().length - 1)] :
|
||||||
wall.editorIcon();
|
wall.editorIcon();
|
||||||
|
|
||||||
|
if(wall == Blocks.cliff){
|
||||||
|
mesh.setColor(Tmp.c1.set(floor.mapColor).mul(1.6f));
|
||||||
|
region = ((Cliff)Blocks.cliff).editorCliffs[tile.data & 0xff];
|
||||||
|
}
|
||||||
|
|
||||||
offsetX = tilesize / 2f - region.width / 2f * Draw.scl;
|
offsetX = tilesize / 2f - region.width / 2f * Draw.scl;
|
||||||
offsetY = tilesize / 2f - region.height / 2f * Draw.scl;
|
offsetY = tilesize / 2f - region.height / 2f * Draw.scl;
|
||||||
}else if(wall == Blocks.air && !tile.overlay().isAir()){
|
}else if(wall == Blocks.air && !tile.overlay().isAir()){
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ public class MapView extends Element implements GestureListener{
|
|||||||
|
|
||||||
for(int i = 0; i < MapEditor.brushSizes.length; i++){
|
for(int i = 0; i < MapEditor.brushSizes.length; i++){
|
||||||
float size = MapEditor.brushSizes[i];
|
float size = MapEditor.brushSizes[i];
|
||||||
brushPolygons[i] = Geometry.pixelCircle(size, (index, x, y) -> Mathf.dst(x, y, index, index) <= index - 0.5f);
|
float mod = size % 1f;
|
||||||
|
brushPolygons[i] = Geometry.pixelCircle(size, (index, x, y) -> Mathf.dst(x, y, index - mod, index - mod) <= size - 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
Core.input.getInputProcessors().insert(0, new GestureDetector(20, 0.5f, 2, 0.15f, this));
|
Core.input.getInputProcessors().insert(0, new GestureDetector(20, 0.5f, 2, 0.15f, this));
|
||||||
|
|||||||
@@ -38,8 +38,14 @@ public class WaveGraph extends Table{
|
|||||||
|
|
||||||
lay.setText(font, "1");
|
lay.setText(font, "1");
|
||||||
|
|
||||||
|
int maxY = switch(mode){
|
||||||
|
case counts -> nextStep(max);
|
||||||
|
case health -> nextStep((int)maxHealth);
|
||||||
|
case totals -> nextStep(maxTotal);
|
||||||
|
};
|
||||||
|
|
||||||
float fh = lay.height;
|
float fh = lay.height;
|
||||||
float offsetX = Scl.scl(30f), offsetY = Scl.scl(22f) + fh + Scl.scl(5f);
|
float offsetX = Scl.scl(lay.width * (maxY + "").length() * 2), offsetY = Scl.scl(22f) + fh + Scl.scl(5f);
|
||||||
|
|
||||||
float graphX = x + offsetX, graphY = y + offsetY, graphW = width - offsetX, graphH = height - offsetY;
|
float graphX = x + offsetX, graphY = y + offsetY, graphW = width - offsetX, graphH = height - offsetY;
|
||||||
float spacing = graphW / (values.length - 1);
|
float spacing = graphW / (values.length - 1);
|
||||||
@@ -53,7 +59,7 @@ public class WaveGraph extends Table{
|
|||||||
|
|
||||||
for(int i = 0; i < values.length; i++){
|
for(int i = 0; i < values.length; i++){
|
||||||
int val = values[i][type.id];
|
int val = values[i][type.id];
|
||||||
float cx = graphX + i*spacing, cy = graphY + val * graphH / max;
|
float cx = graphX + i * spacing, cy = graphY + val * graphH / maxY;
|
||||||
Lines.linePoint(cx, cy);
|
Lines.linePoint(cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +75,7 @@ public class WaveGraph extends Table{
|
|||||||
sum += values[i][type.id];
|
sum += values[i][type.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
float cx = graphX + i*spacing, cy = graphY + sum * graphH / maxTotal;
|
float cx = graphX + i * spacing, cy = graphY + sum * graphH / maxY;
|
||||||
Lines.linePoint(cx, cy);
|
Lines.linePoint(cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +90,7 @@ public class WaveGraph extends Table{
|
|||||||
sum += (type.health) * values[i][type.id];
|
sum += (type.health) * values[i][type.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
float cx = graphX + i*spacing, cy = graphY + sum * graphH / maxHealth;
|
float cx = graphX + i * spacing, cy = graphY + sum * graphH / maxY;
|
||||||
Lines.linePoint(cx, cy);
|
Lines.linePoint(cx, cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,19 +98,23 @@ public class WaveGraph extends Table{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//how many numbers can fit here
|
//how many numbers can fit here
|
||||||
float totalMarks = (graphH - getMarginBottom() *2f) / (lay.height * 2);
|
float totalMarks = Mathf.clamp(maxY, 1, 10);
|
||||||
|
|
||||||
int markSpace = Math.max(1, Mathf.ceil(max / totalMarks));
|
int markSpace = Math.max(1, Mathf.ceil(maxY / totalMarks));
|
||||||
|
|
||||||
Draw.color(Color.lightGray);
|
Draw.color(Color.lightGray);
|
||||||
for(int i = 0; i < max; i += markSpace){
|
Draw.alpha(0.1f);
|
||||||
float cy = graphY + i * graphH / max, cx = graphX;
|
|
||||||
//Lines.line(cx, cy, cx + len, cy);
|
for(int i = 0; i < maxY; i += markSpace){
|
||||||
|
float cy = graphY + i * graphH / maxY, cx = graphX;
|
||||||
|
|
||||||
|
Lines.line(cx, cy, cx + graphW, cy);
|
||||||
|
|
||||||
lay.setText(font, "" + i);
|
lay.setText(font, "" + i);
|
||||||
|
|
||||||
font.draw("" + i, cx, cy + lay.height/2f, Align.right);
|
font.draw("" + i, cx, cy + lay.height / 2f, Align.right);
|
||||||
}
|
}
|
||||||
|
Draw.alpha(1f);
|
||||||
|
|
||||||
float len = Scl.scl(4f);
|
float len = Scl.scl(4f);
|
||||||
font.setColor(Color.lightGray);
|
font.setColor(Color.lightGray);
|
||||||
@@ -113,7 +123,7 @@ public class WaveGraph extends Table{
|
|||||||
float cy = y + fh, cx = graphX + graphW / (values.length - 1) * i;
|
float cy = y + fh, cx = graphX + graphW / (values.length - 1) * i;
|
||||||
|
|
||||||
Lines.line(cx, cy, cx, cy + len);
|
Lines.line(cx, cy, cx, cy + len);
|
||||||
if(i == values.length/2){
|
if(i == values.length / 2){
|
||||||
font.draw("" + (i + from + 1), cx, cy - Scl.scl(2f), Align.center);
|
font.draw("" + (i + from + 1), cx, cy - Scl.scl(2f), Align.center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -164,13 +174,24 @@ public class WaveGraph extends Table{
|
|||||||
sum += spawned;
|
sum += spawned;
|
||||||
}
|
}
|
||||||
maxTotal = Math.max(maxTotal, sum);
|
maxTotal = Math.max(maxTotal, sum);
|
||||||
maxHealth = Math.max(maxHealth,healthsum);
|
maxHealth = Math.max(maxHealth, healthsum);
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectSet<UnitType> usedCopy = new ObjectSet<>(used);
|
ObjectSet<UnitType> usedCopy = new ObjectSet<>(used);
|
||||||
|
|
||||||
colors.clear();
|
colors.clear();
|
||||||
colors.left();
|
colors.left();
|
||||||
|
colors.button("@waves.units.hide", Styles.cleart, () -> {
|
||||||
|
if(hidden.size == usedCopy.size){
|
||||||
|
hidden.clear();
|
||||||
|
}else{
|
||||||
|
hidden.addAll(usedCopy);
|
||||||
|
}
|
||||||
|
|
||||||
|
used.clear();
|
||||||
|
used.addAll(usedCopy);
|
||||||
|
for(UnitType o : hidden) used.remove(o);
|
||||||
|
}).update(b -> b.setText(hidden.size == usedCopy.size ? "@waves.units.show" : "@waves.units.hide")).height(32f).width(130f);
|
||||||
colors.pane(t -> {
|
colors.pane(t -> {
|
||||||
t.left();
|
t.left();
|
||||||
for(UnitType type : used){
|
for(UnitType type : used){
|
||||||
@@ -200,6 +221,23 @@ public class WaveGraph extends Table{
|
|||||||
return Tmp.c1.fromHsv(type.id / (float)Vars.content.units().size * 360f, 0.7f, 1f);
|
return Tmp.c1.fromHsv(type.id / (float)Vars.content.units().size * 360f, 0.7f, 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nextStep(float value){
|
||||||
|
int order = 1;
|
||||||
|
while(order < value){
|
||||||
|
if(order * 2 > value){
|
||||||
|
return order * 2;
|
||||||
|
}
|
||||||
|
if(order * 5 > value){
|
||||||
|
return order * 5;
|
||||||
|
}
|
||||||
|
if(order * 10 > value){
|
||||||
|
return order * 10;
|
||||||
|
}
|
||||||
|
order *= 10;
|
||||||
|
}
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
enum Mode{
|
enum Mode{
|
||||||
counts, totals, health;
|
counts, totals, health;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package mindustry.editor;
|
package mindustry.editor;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.func.*;
|
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.math.geom.*;
|
||||||
import arc.scene.event.*;
|
import arc.scene.event.*;
|
||||||
import arc.scene.style.*;
|
import arc.scene.style.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
@@ -20,6 +20,8 @@ import mindustry.type.*;
|
|||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.ui.dialogs.*;
|
import mindustry.ui.dialogs.*;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
import static mindustry.game.SpawnGroup.*;
|
import static mindustry.game.SpawnGroup.*;
|
||||||
|
|
||||||
@@ -68,18 +70,21 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
|
|
||||||
buttons.button("@waves.edit", () -> {
|
buttons.button("@waves.edit", Icon.pencil, () -> {
|
||||||
BaseDialog dialog = new BaseDialog("@waves.edit");
|
BaseDialog dialog = new BaseDialog("@waves.edit");
|
||||||
dialog.addCloseButton();
|
dialog.addCloseButton();
|
||||||
dialog.setFillParent(false);
|
dialog.setFillParent(false);
|
||||||
dialog.cont.defaults().size(210f, 64f);
|
dialog.cont.table(Tex.button, t -> {
|
||||||
dialog.cont.button("@waves.copy", () -> {
|
var style = Styles.cleart;
|
||||||
|
t.defaults().size(210f, 58f);
|
||||||
|
|
||||||
|
t.button("@waves.copy", Icon.copy, style, () -> {
|
||||||
ui.showInfoFade("@waves.copied");
|
ui.showInfoFade("@waves.copied");
|
||||||
Core.app.setClipboardText(maps.writeWaves(groups));
|
Core.app.setClipboardText(maps.writeWaves(groups));
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}).disabled(b -> groups == null);
|
}).disabled(b -> groups == null).marginLeft(12f).row();
|
||||||
dialog.cont.row();
|
|
||||||
dialog.cont.button("@waves.load", () -> {
|
t.button("@waves.load", Icon.download, style, () -> {
|
||||||
try{
|
try{
|
||||||
groups = maps.readWaves(Core.app.getClipboardText());
|
groups = maps.readWaves(Core.app.getClipboardText());
|
||||||
buildGroups();
|
buildGroups();
|
||||||
@@ -88,21 +93,23 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
ui.showErrorMessage("@waves.invalid");
|
ui.showErrorMessage("@waves.invalid");
|
||||||
}
|
}
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty());
|
}).marginLeft(12f).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty()).row();
|
||||||
dialog.cont.row();
|
|
||||||
dialog.cont.button("@settings.reset", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
t.button("@settings.reset", Icon.upload, style, () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
||||||
groups = JsonIO.copy(waves.get());
|
groups = JsonIO.copy(waves.get());
|
||||||
buildGroups();
|
buildGroups();
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}));
|
})).marginLeft(12f).row();
|
||||||
dialog.cont.row();
|
|
||||||
dialog.cont.button("@clear", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
t.button("@clear", Icon.cancel, style, () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> {
|
||||||
groups.clear();
|
groups.clear();
|
||||||
buildGroups();
|
buildGroups();
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
}));
|
})).marginLeft(12f);
|
||||||
|
});
|
||||||
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}).size(270f, 64f);
|
}).size(250f, 64f);
|
||||||
|
|
||||||
buttons.defaults().width(60f);
|
buttons.defaults().width(60f);
|
||||||
|
|
||||||
@@ -205,6 +212,13 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
|
|
||||||
b.label(() -> (group.begin + 1) + "").color(Color.lightGray).minWidth(45f).labelAlign(Align.left).left();
|
b.label(() -> (group.begin + 1) + "").color(Color.lightGray).minWidth(45f).labelAlign(Align.left).left();
|
||||||
|
|
||||||
|
b.button(Icon.copySmall, Styles.emptyi, () -> {
|
||||||
|
SpawnGroup newGroup = group.copy();
|
||||||
|
expandedGroup = newGroup;
|
||||||
|
groups.add(newGroup);
|
||||||
|
buildGroups();
|
||||||
|
}).pad(-6).size(46f);
|
||||||
|
|
||||||
b.button(group.effect != null && group.effect != StatusEffects.none ?
|
b.button(group.effect != null && group.effect != StatusEffects.none ?
|
||||||
new TextureRegionDrawable(group.effect.uiIcon) :
|
new TextureRegionDrawable(group.effect.uiIcon) :
|
||||||
Icon.logicSmall,
|
Icon.logicSmall,
|
||||||
@@ -215,7 +229,7 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
groups.remove(group);
|
groups.remove(group);
|
||||||
table.getCell(t).pad(0f);
|
table.getCell(t).pad(0f);
|
||||||
t.remove();
|
t.remove();
|
||||||
updateWaves();
|
buildGroups();
|
||||||
}).pad(-6).size(46f).padRight(-12f);
|
}).pad(-6).size(46f).padRight(-12f);
|
||||||
}, () -> {
|
}, () -> {
|
||||||
expandedGroup = expandedGroup == group ? null : group;
|
expandedGroup = expandedGroup == group ? null : group;
|
||||||
@@ -303,7 +317,30 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
t.check("@waves.guardian", b -> {
|
t.check("@waves.guardian", b -> {
|
||||||
group.effect = (b ? StatusEffects.boss : null);
|
group.effect = (b ? StatusEffects.boss : null);
|
||||||
buildGroups();
|
buildGroups();
|
||||||
}).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f);
|
}).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f).row();
|
||||||
|
|
||||||
|
//spawn positions are clunky and thus experimental for now
|
||||||
|
if(experimental){
|
||||||
|
t.table(a -> {
|
||||||
|
a.add("spawn at ");
|
||||||
|
|
||||||
|
a.field(group.spawn == -1 ? "" : Point2.x(group.spawn) + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.spawn = Point2.pack(Strings.parseInt(text), Point2.y(group.spawn));
|
||||||
|
Log.info(group.spawn);
|
||||||
|
}
|
||||||
|
}).width(70f);
|
||||||
|
|
||||||
|
a.add(",");
|
||||||
|
|
||||||
|
a.field(group.spawn == -1 ? "" : Point2.y(group.spawn) + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
|
if(Strings.canParsePositiveInt(text)){
|
||||||
|
group.spawn = Point2.pack(Point2.x(group.spawn), Strings.parseInt(text));
|
||||||
|
Log.info(group.spawn);
|
||||||
|
}
|
||||||
|
}).width(70f);
|
||||||
|
}).padBottom(8f).padTop(-8f).row();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}).width(340f).pad(8);
|
}).width(340f).pad(8);
|
||||||
|
|
||||||
@@ -374,15 +411,15 @@ public class WaveInfoDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum Sort{
|
enum Sort{
|
||||||
begin(g -> g.begin),
|
begin(Structs.comps(Structs.comparingFloat(g -> g.begin), Structs.comparingFloat(g -> g.type.id))),
|
||||||
health(g -> g.type.health),
|
health(Structs.comps(Structs.comparingFloat(g -> g.type.health), Structs.comparingFloat(g -> g.begin))),
|
||||||
type(g -> g.type.id);
|
type(Structs.comps(Structs.comparingFloat(g -> g.type.id), Structs.comparingFloat(g -> g.begin)));
|
||||||
|
|
||||||
static final Sort[] all = values();
|
static final Sort[] all = values();
|
||||||
|
|
||||||
final Floatf<SpawnGroup> sort;
|
final Comparator<SpawnGroup> sort;
|
||||||
|
|
||||||
Sort(Floatf<SpawnGroup> sort){
|
Sort(Comparator<SpawnGroup> sort){
|
||||||
this.sort = sort;
|
this.sort = sort;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
public Sound shootSound = Sounds.spark;
|
public Sound shootSound = Sounds.spark;
|
||||||
public float statusDuration = 60f * 6f;
|
public float statusDuration = 60f * 6f;
|
||||||
public float x, y;
|
public float x, y;
|
||||||
public boolean hitBuildings = true;
|
public boolean targetGround = true, targetAir = true, hitBuildings = true, hitUnits = true;
|
||||||
public int maxTargets = 25;
|
public int maxTargets = 25;
|
||||||
public float healPercent = 2.5f;
|
public float healPercent = 2.5f;
|
||||||
|
|
||||||
@@ -99,13 +99,15 @@ public class EnergyFieldAbility extends Ability{
|
|||||||
|
|
||||||
all.clear();
|
all.clear();
|
||||||
|
|
||||||
|
if(hitUnits){
|
||||||
Units.nearby(null, rx, ry, range, other -> {
|
Units.nearby(null, rx, ry, range, other -> {
|
||||||
if(other != unit){
|
if(other != unit && (other.isFlying() ? targetAir : targetGround)){
|
||||||
all.add(other);
|
all.add(other);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if(hitBuildings){
|
if(hitBuildings && targetGround){
|
||||||
Units.nearbyBuildings(rx, ry, range, b -> {
|
Units.nearbyBuildings(rx, ry, range, b -> {
|
||||||
if(b.team != Team.derelict || state.rules.coreCapture){
|
if(b.team != Team.derelict || state.rules.coreCapture){
|
||||||
all.add(b);
|
all.add(b);
|
||||||
|
|||||||
@@ -346,13 +346,7 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void update(Bullet b){
|
public void update(Bullet b){
|
||||||
if(!headless && trailLength > 0){
|
updateTrail(b);
|
||||||
if(b.trail == null){
|
|
||||||
b.trail = new Trail(trailLength);
|
|
||||||
}
|
|
||||||
b.trail.length = trailLength;
|
|
||||||
b.trail.update(b.x, b.y, trailInterp.apply(b.fin()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(homingPower > 0.0001f && b.time >= homingDelay){
|
if(homingPower > 0.0001f && b.time >= homingDelay){
|
||||||
Teamc target;
|
Teamc target;
|
||||||
@@ -387,6 +381,16 @@ public class BulletType extends Content implements Cloneable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateTrail(Bullet b){
|
||||||
|
if(!headless && trailLength > 0){
|
||||||
|
if(b.trail == null){
|
||||||
|
b.trail = new Trail(trailLength);
|
||||||
|
}
|
||||||
|
b.trail.length = trailLength;
|
||||||
|
b.trail.update(b.x, b.y, trailInterp.apply(b.fin()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
if(pierceCap >= 1){
|
if(pierceCap >= 1){
|
||||||
|
|||||||
@@ -94,6 +94,10 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{
|
|||||||
|
|
||||||
if(!within(tile, finalPlaceDst)) return;
|
if(!within(tile, finalPlaceDst)) return;
|
||||||
|
|
||||||
|
if(!headless){
|
||||||
|
Vars.control.sound.loop(Sounds.build, tile, 0.51f);
|
||||||
|
}
|
||||||
|
|
||||||
if(!(tile.build instanceof ConstructBuild cb)){
|
if(!(tile.build instanceof ConstructBuild cb)){
|
||||||
if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){
|
if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){
|
||||||
boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1)));
|
boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1)));
|
||||||
|
|||||||
@@ -1509,6 +1509,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(cons != null){
|
||||||
|
cons.update();
|
||||||
|
}
|
||||||
|
|
||||||
if(enabled || !block.noUpdateDisabled){
|
if(enabled || !block.noUpdateDisabled){
|
||||||
updateTile();
|
updateTile();
|
||||||
}
|
}
|
||||||
@@ -1521,10 +1525,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
liquids.update(updateFlow);
|
liquids.update(updateFlow);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cons != null){
|
|
||||||
cons.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(power != null){
|
if(power != null){
|
||||||
power.graph.update();
|
power.graph.update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import arc.util.*;
|
|||||||
import mindustry.ai.*;
|
import mindustry.ai.*;
|
||||||
import mindustry.ai.types.*;
|
import mindustry.ai.types.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.content.*;
|
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
@@ -486,12 +485,13 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
|
|
||||||
if(!spawnedByCore){
|
if(!spawnedByCore){
|
||||||
Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect);
|
Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect);
|
||||||
|
}else{
|
||||||
|
type.deathExplosionEffect.at(x, y, bounds() / 2f / 8f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float shake = hitSize / 3f;
|
float shake = hitSize / 3f;
|
||||||
|
|
||||||
Effect.scorch(x, y, (int)(hitSize / 5));
|
Effect.scorch(x, y, (int)(hitSize / 5));
|
||||||
Fx.explosion.at(this);
|
|
||||||
Effect.shake(shake, shake, this);
|
Effect.shake(shake, shake, this);
|
||||||
type.deathSound.at(this);
|
type.deathSound.at(this);
|
||||||
|
|
||||||
@@ -503,7 +503,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
|
|
||||||
//if this unit crash landed (was flying), damage stuff in a radius
|
//if this unit crash landed (was flying), damage stuff in a radius
|
||||||
if(type.flying && !spawnedByCore){
|
if(type.flying && !spawnedByCore){
|
||||||
Damage.damage(team,x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true);
|
Damage.damage(team, x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!headless){
|
if(!headless){
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class MultiEffect extends Effect{
|
|||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
for(Effect f : effects){
|
for(Effect f : effects){
|
||||||
|
f.init();
|
||||||
clip = Math.max(clip, f.clip);
|
clip = Math.max(clip, f.clip);
|
||||||
lifetime = Math.max(lifetime, f.lifetime);
|
lifetime = Math.max(lifetime, f.lifetime);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public class ParticleEffect extends Effect{
|
|||||||
public float cone = 180f, length = 20f, baseLength = 0f;
|
public float cone = 180f, length = 20f, baseLength = 0f;
|
||||||
/** Particle size/length/radius interpolation. */
|
/** Particle size/length/radius interpolation. */
|
||||||
public Interp interp = Interp.linear;
|
public Interp interp = Interp.linear;
|
||||||
|
/** Particle size interpolation. Null to use interp. */
|
||||||
|
public @Nullable Interp sizeInterp = null;
|
||||||
public float offsetX, offsetY;
|
public float offsetX, offsetY;
|
||||||
public float lightScl = 2f, lightOpacity = 0.6f;
|
public float lightScl = 2f, lightOpacity = 0.6f;
|
||||||
public @Nullable Color lightColor;
|
public @Nullable Color lightColor;
|
||||||
@@ -44,6 +46,7 @@ public class ParticleEffect extends Effect{
|
|||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo));
|
clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo));
|
||||||
|
if(sizeInterp == null) sizeInterp = interp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -52,15 +55,15 @@ public class ParticleEffect extends Effect{
|
|||||||
|
|
||||||
float rawfin = e.fin();
|
float rawfin = e.fin();
|
||||||
float fin = e.fin(interp);
|
float fin = e.fin(interp);
|
||||||
float rad = interp.apply(sizeFrom, sizeTo, rawfin) * 2;
|
float rad = sizeInterp.apply(sizeFrom, sizeTo, rawfin) * 2;
|
||||||
float ox = e.x + Angles.trnsx(e.rotation, offsetX, offsetY), oy = e.y + Angles.trnsy(e.rotation, offsetX, offsetY);
|
float ox = e.x + Angles.trnsx(e.rotation, offsetX, offsetY), oy = e.y + Angles.trnsy(e.rotation, offsetX, offsetY);
|
||||||
|
|
||||||
Draw.color(colorFrom, colorTo, fin);
|
Draw.color(colorFrom, colorTo, fin);
|
||||||
Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor;
|
Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor;
|
||||||
|
|
||||||
if(line){
|
if(line){
|
||||||
Lines.stroke(interp.apply(strokeFrom, strokeTo, rawfin));
|
Lines.stroke(sizeInterp.apply(strokeFrom, strokeTo, rawfin));
|
||||||
float len = interp.apply(lenFrom, lenTo, rawfin);
|
float len = sizeInterp.apply(lenFrom, lenTo, rawfin);
|
||||||
|
|
||||||
rand.setSeed(e.id);
|
rand.setSeed(e.id);
|
||||||
for(int i = 0; i < particles; i++){
|
for(int i = 0; i < particles; i++){
|
||||||
|
|||||||
@@ -291,16 +291,22 @@ public class Schematics implements Loadable{
|
|||||||
/** Checks a schematic for deployment validity and adds it to the cache. */
|
/** Checks a schematic for deployment validity and adds it to the cache. */
|
||||||
private void checkLoadout(Schematic s, boolean validate){
|
private void checkLoadout(Schematic s, boolean validate){
|
||||||
Stile core = s.tiles.find(t -> t.block instanceof CoreBlock);
|
Stile core = s.tiles.find(t -> t.block instanceof CoreBlock);
|
||||||
|
if(core == null) return;
|
||||||
int cores = s.tiles.count(t -> t.block instanceof CoreBlock);
|
int cores = s.tiles.count(t -> t.block instanceof CoreBlock);
|
||||||
|
int maxSize = getMaxLaunchSize(core.block);
|
||||||
|
|
||||||
//make sure a core exists, and that the schematic is small enough.
|
//make sure a core exists, and that the schematic is small enough.
|
||||||
if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2
|
if((validate && (s.width > maxSize || s.height > maxSize
|
||||||
|| s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly || !t.block.unlocked()) || cores > 1))) return;
|
|| s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly || !t.block.unlocked()) || cores > 1))) return;
|
||||||
|
|
||||||
//place in the cache
|
//place in the cache
|
||||||
loadouts.get((CoreBlock)core.block, Seq::new).add(s);
|
loadouts.get((CoreBlock)core.block, Seq::new).add(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMaxLaunchSize(Block block){
|
||||||
|
return block.size + maxLoadoutSchematicPad*2;
|
||||||
|
}
|
||||||
|
|
||||||
/** Adds a schematic to the list, also copying it into the files.*/
|
/** Adds a schematic to the list, also copying it into the files.*/
|
||||||
public void add(Schematic schematic){
|
public void add(Schematic schematic){
|
||||||
all.add(schematic);
|
all.add(schematic);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import static mindustry.Vars.*;
|
|||||||
* weapon equipped, ammo used, and status effects.
|
* weapon equipped, ammo used, and status effects.
|
||||||
* Each spawn group can have multiple sub-groups spawned in different areas of the map.
|
* Each spawn group can have multiple sub-groups spawned in different areas of the map.
|
||||||
*/
|
*/
|
||||||
public class SpawnGroup implements JsonSerializable{
|
public class SpawnGroup implements JsonSerializable, Cloneable{
|
||||||
public static final int never = Integer.MAX_VALUE;
|
public static final int never = Integer.MAX_VALUE;
|
||||||
|
|
||||||
/** The unit type spawned */
|
/** The unit type spawned */
|
||||||
@@ -36,10 +36,12 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
public float unitScaling = never;
|
public float unitScaling = never;
|
||||||
/** Shield points that this unit has. */
|
/** Shield points that this unit has. */
|
||||||
public float shields = 0f;
|
public float shields = 0f;
|
||||||
/** How much shields get increased per wave. */
|
/** How much shields get increased by per wave. */
|
||||||
public float shieldScaling = 0f;
|
public float shieldScaling = 0f;
|
||||||
/** Amount of enemies spawned initially, with no scaling */
|
/** Amount of enemies spawned initially, with no scaling */
|
||||||
public int unitAmount = 1;
|
public int unitAmount = 1;
|
||||||
|
/** If not -1, the unit will only spawn in spawnpoints with these packed coordinates. */
|
||||||
|
public int spawn = -1;
|
||||||
/** Seq of payloads that this unit will spawn with. */
|
/** Seq of payloads that this unit will spawn with. */
|
||||||
public @Nullable Seq<UnitType> payloads;
|
public @Nullable Seq<UnitType> payloads;
|
||||||
/** Status effect applied to the spawned unit. Null to disable. */
|
/** Status effect applied to the spawned unit. Null to disable. */
|
||||||
@@ -55,6 +57,10 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
//serialization use only
|
//serialization use only
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canSpawn(int position){
|
||||||
|
return spawn == -1 || spawn == position;
|
||||||
|
}
|
||||||
|
|
||||||
/** @return amount of units spawned on a specific wave. */
|
/** @return amount of units spawned on a specific wave. */
|
||||||
public int getSpawned(int wave){
|
public int getSpawned(int wave){
|
||||||
if(spacing == 0) spacing = 1;
|
if(spacing == 0) spacing = 1;
|
||||||
@@ -111,6 +117,7 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
if(shieldScaling != 0) json.writeValue("shieldScaling", shieldScaling);
|
if(shieldScaling != 0) json.writeValue("shieldScaling", shieldScaling);
|
||||||
if(unitAmount != 1) json.writeValue("amount", unitAmount);
|
if(unitAmount != 1) json.writeValue("amount", unitAmount);
|
||||||
if(effect != null) json.writeValue("effect", effect.name);
|
if(effect != null) json.writeValue("effect", effect.name);
|
||||||
|
if(spawn != -1) json.writeValue("spawn", spawn);
|
||||||
if(payloads != null && payloads.size > 0){
|
if(payloads != null && payloads.size > 0){
|
||||||
json.writeValue("payloads", payloads.map(u -> u.name).toArray(String.class));
|
json.writeValue("payloads", payloads.map(u -> u.name).toArray(String.class));
|
||||||
}
|
}
|
||||||
@@ -130,6 +137,7 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
shields = data.getFloat("shields", 0);
|
shields = data.getFloat("shields", 0);
|
||||||
shieldScaling = data.getFloat("shieldScaling", 0);
|
shieldScaling = data.getFloat("shieldScaling", 0);
|
||||||
unitAmount = data.getInt("amount", 1);
|
unitAmount = data.getInt("amount", 1);
|
||||||
|
spawn = data.getInt("spawn", -1);
|
||||||
if(data.has("payloads")){
|
if(data.has("payloads")){
|
||||||
payloads = Seq.with(json.readValue(String[].class, data.get("payloads"))).map(s -> content.getByName(ContentType.unit, s));
|
payloads = Seq.with(json.readValue(String[].class, data.get("payloads"))).map(s -> content.getByName(ContentType.unit, s));
|
||||||
}
|
}
|
||||||
@@ -157,6 +165,14 @@ public class SpawnGroup implements JsonSerializable{
|
|||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SpawnGroup copy(){
|
||||||
|
try{
|
||||||
|
return (SpawnGroup)clone();
|
||||||
|
}catch(CloneNotSupportedException how){
|
||||||
|
throw new RuntimeException("If you see this, what did you even do?", how);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o){
|
public boolean equals(Object o){
|
||||||
if(this == o) return true;
|
if(this == o) return true;
|
||||||
|
|||||||
@@ -350,8 +350,8 @@ public class Waves{
|
|||||||
step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty));
|
step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty));
|
||||||
}
|
}
|
||||||
|
|
||||||
int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.7f, difficulty));
|
int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.5f, difficulty));
|
||||||
int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty));
|
int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.5f, difficulty));
|
||||||
|
|
||||||
int bossTier = difficulty < 0.6 ? 3 : 4;
|
int bossTier = difficulty < 0.6 ? 3 : 4;
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ public class BlockRenderer{
|
|||||||
public void checkChanges(){
|
public void checkChanges(){
|
||||||
darkEvents.each(pos -> {
|
darkEvents.each(pos -> {
|
||||||
var tile = world.tile(pos);
|
var tile = world.tile(pos);
|
||||||
if(tile != null){
|
if(tile != null && tile.block().fillsTile){
|
||||||
tile.data = world.getWallDarkness(tile);
|
tile.data = world.getWallDarkness(tile);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -967,7 +967,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
//consume tap event if necessary
|
//consume tap event if necessary
|
||||||
if(build.interactable(player.team()) && build.block.consumesTap){
|
if(build.interactable(player.team()) && build.block.consumesTap){
|
||||||
consumed = true;
|
consumed = true;
|
||||||
}else if(build.interactable(player.team()) && build.block.synthetic() && !consumed){
|
}else if(build.interactable(player.team()) && build.block.synthetic() && (!consumed || build.block.allowConfigInventory)){
|
||||||
if(build.block.hasItems && build.items.total() > 0){
|
if(build.block.hasItems && build.items.total() > 0){
|
||||||
frag.inv.showFor(build);
|
frag.inv.showFor(build);
|
||||||
consumed = true;
|
consumed = true;
|
||||||
|
|||||||
@@ -60,6 +60,13 @@ public abstract class SaveFileReader{
|
|||||||
"block-forge", "constructor"
|
"block-forge", "constructor"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
public static final ObjectMap<String, String> modContentNameMap = ObjectMap.of(
|
||||||
|
"craters", "crater-stone",
|
||||||
|
"deepwater", "deep-water",
|
||||||
|
"water", "shallow-water",
|
||||||
|
"slag", "molten-slag"
|
||||||
|
);
|
||||||
|
|
||||||
protected final ReusableByteOutStream byteOutput = new ReusableByteOutStream();
|
protected final ReusableByteOutStream byteOutput = new ReusableByteOutStream();
|
||||||
protected final DataOutputStream dataBytes = new DataOutputStream(byteOutput);
|
protected final DataOutputStream dataBytes = new DataOutputStream(byteOutput);
|
||||||
protected final ReusableByteOutStream byteOutputSmall = new ReusableByteOutStream();
|
protected final ReusableByteOutStream byteOutputSmall = new ReusableByteOutStream();
|
||||||
|
|||||||
@@ -272,16 +272,22 @@ public class SectorDamage{
|
|||||||
float e = build.efficiency();
|
float e = build.efficiency();
|
||||||
if(e > 0.08f){
|
if(e > 0.08f){
|
||||||
if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range() + 4*tilesize))){
|
if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range() + 4*tilesize))){
|
||||||
|
//TODO make sure power turret network supports the turrets?
|
||||||
if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){
|
if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){
|
||||||
sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e;
|
sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e * build.timeScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(build.block instanceof MendProjector m){
|
if(build.block instanceof MendProjector m){
|
||||||
sumRps += m.healPercent / m.reload * avgHealth * 60f / 100f * e;
|
sumRps += m.healPercent / m.reload * avgHealth * 60f / 100f * e * build.timeScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
//point defense turrets act as flat health right now
|
||||||
|
if(build.block instanceof PointDefenseTurret && build.consValid()){
|
||||||
|
sumHealth += 150f * build.timeScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(build.block instanceof ForceProjector f){
|
if(build.block instanceof ForceProjector f){
|
||||||
sumHealth += f.shieldHealth * e;
|
sumHealth += f.shieldHealth * e * build.timeScale;
|
||||||
sumRps += e;
|
sumRps += e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -315,14 +321,20 @@ public class SectorDamage{
|
|||||||
var reg = new LinearRegression();
|
var reg = new LinearRegression();
|
||||||
SpawnGroup bossGroup = null;
|
SpawnGroup bossGroup = null;
|
||||||
Seq<Vec2> waveDps = new Seq<>(), waveHealth = new Seq<>();
|
Seq<Vec2> waveDps = new Seq<>(), waveHealth = new Seq<>();
|
||||||
|
int groundSpawns = Math.max(spawner.countFlyerSpawns(), 1), airSpawns = Math.max(spawner.countGroundSpawns(), 1);
|
||||||
|
|
||||||
for(int wave = state.wave; wave < state.wave + 10; wave ++){
|
for(int wave = state.wave; wave < state.wave + 10; wave ++){
|
||||||
float sumWaveDps = 0f, sumWaveHealth = 0f;
|
float sumWaveDps = 0f, sumWaveHealth = 0f;
|
||||||
|
|
||||||
for(SpawnGroup group : state.rules.spawns){
|
for(SpawnGroup group : state.rules.spawns){
|
||||||
|
//calculate the amount of spawn points used
|
||||||
|
//if there's a spawn position override, there is only one potential place they spawn
|
||||||
|
//assume that all overridden positions are valid, should always be true in properly designed campaign maps
|
||||||
|
int spawnCount = group.spawn != -1 ? 1 : group.type.flying ? airSpawns : groundSpawns;
|
||||||
|
|
||||||
float healthMult = 1f + Mathf.clamp(group.type.armor / 20f);
|
float healthMult = 1f + Mathf.clamp(group.type.armor / 20f);
|
||||||
StatusEffect effect = (group.effect == null ? StatusEffects.none : group.effect);
|
StatusEffect effect = (group.effect == null ? StatusEffects.none : group.effect);
|
||||||
int spawned = group.getSpawned(wave);
|
int spawned = group.getSpawned(wave) * spawnCount;
|
||||||
//save the boss group
|
//save the boss group
|
||||||
if(group.effect == StatusEffects.boss){
|
if(group.effect == StatusEffects.boss){
|
||||||
bossGroup = group;
|
bossGroup = group;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import static mindustry.maps.filters.FilterOption.*;
|
|||||||
|
|
||||||
public class BlendFilter extends GenerateFilter{
|
public class BlendFilter extends GenerateFilter{
|
||||||
float radius = 2f;
|
float radius = 2f;
|
||||||
Block block = Blocks.stone, floor = Blocks.ice, ignore = Blocks.air;
|
Block block = Blocks.sand, floor = Blocks.sandWater, ignore = Blocks.air;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FilterOption[] options(){
|
public FilterOption[] options(){
|
||||||
@@ -16,7 +16,7 @@ public class BlendFilter extends GenerateFilter{
|
|||||||
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f),
|
new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f),
|
||||||
new BlockOption("block", () -> block, b -> block = b, anyOptional),
|
new BlockOption("block", () -> block, b -> block = b, anyOptional),
|
||||||
new BlockOption("floor", () -> floor, b -> floor = b, anyOptional),
|
new BlockOption("floor", () -> floor, b -> floor = b, anyOptional),
|
||||||
new BlockOption("ignore", () -> ignore, b -> ignore = b, floorsOptional)
|
new BlockOption("ignore", () -> ignore, b -> ignore = b, anyOptional)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class DistortFilter extends GenerateFilter{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply(GenerateInput in){
|
public void apply(GenerateInput in){
|
||||||
Tile tile = in.tile(in.x + noise(in, scl, mag) - mag / 2f, in.y + noise(in, scl, mag) - mag / 2f);
|
Tile tile = in.tile(in.x + noise(in, scl, mag) - mag / 2f, in.y + noise(1, in, scl, mag) - mag / 2f);
|
||||||
|
|
||||||
in.floor = tile.floor();
|
in.floor = tile.floor();
|
||||||
if(!tile.block().synthetic() && !in.block.synthetic()) in.block = tile.block();
|
if(!tile.block().synthetic() && !in.block.synthetic()) in.block = tile.block();
|
||||||
|
|||||||
@@ -99,6 +99,10 @@ public abstract class GenerateFilter{
|
|||||||
|
|
||||||
//utility generation functions
|
//utility generation functions
|
||||||
|
|
||||||
|
protected float noise(int seedOffset, GenerateInput in, float scl, float mag){
|
||||||
|
return Simplex.noise2d(seedOffset + seed, 1f, 0f, 1f / scl, in.x, in.y) * mag;
|
||||||
|
}
|
||||||
|
|
||||||
protected float noise(GenerateInput in, float scl, float mag){
|
protected float noise(GenerateInput in, float scl, float mag){
|
||||||
return Simplex.noise2d(seed, 1f, 0f, 1f / scl, in.x, in.y) * mag;
|
return Simplex.noise2d(seed, 1f, 0f, 1f / scl, in.x, in.y) * mag;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import static mindustry.maps.filters.FilterOption.*;
|
|||||||
|
|
||||||
public class RiverNoiseFilter extends GenerateFilter{
|
public class RiverNoiseFilter extends GenerateFilter{
|
||||||
float scl = 40, threshold = 0f, threshold2 = 0.1f, octaves = 1, falloff = 0.5f;
|
float scl = 40, threshold = 0f, threshold2 = 0.1f, octaves = 1, falloff = 0.5f;
|
||||||
Block floor = Blocks.water, floor2 = Blocks.deepwater, block = Blocks.sandWall;
|
Block floor = Blocks.water, floor2 = Blocks.deepwater, block = Blocks.sandWall, target = Blocks.air;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FilterOption[] options(){
|
public FilterOption[] options(){
|
||||||
@@ -18,6 +18,7 @@ public class RiverNoiseFilter extends GenerateFilter{
|
|||||||
new SliderOption("threshold2", () -> threshold2, f -> threshold2 = f, -1f, 1f),
|
new SliderOption("threshold2", () -> threshold2, f -> threshold2 = f, -1f, 1f),
|
||||||
new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f),
|
new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f),
|
||||||
new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f),
|
new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f),
|
||||||
|
new BlockOption("target", () -> target, b -> target = b, anyOptional),
|
||||||
new BlockOption("block", () -> block, b -> block = b, wallsOnly),
|
new BlockOption("block", () -> block, b -> block = b, wallsOnly),
|
||||||
new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly),
|
new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly),
|
||||||
new BlockOption("floor2", () -> floor2, b -> floor2 = b, floorsOnly)
|
new BlockOption("floor2", () -> floor2, b -> floor2 = b, floorsOnly)
|
||||||
@@ -26,14 +27,14 @@ public class RiverNoiseFilter extends GenerateFilter{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public char icon(){
|
public char icon(){
|
||||||
return Iconc.blockWater;
|
return Iconc.blockShallowWater;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply(GenerateInput in){
|
public void apply(GenerateInput in){
|
||||||
float noise = rnoise(in.x, in.y, (int)octaves, scl, falloff, 1f);
|
float noise = rnoise(in.x, in.y, (int)octaves, scl, falloff, 1f);
|
||||||
|
|
||||||
if(noise >= threshold){
|
if(noise >= threshold && (target == Blocks.air || in.floor == target || in.block == target)){
|
||||||
in.floor = floor;
|
in.floor = floor;
|
||||||
|
|
||||||
if(in.block.solid){
|
if(in.block.solid){
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ public class BaseGenerator{
|
|||||||
private Tiles tiles;
|
private Tiles tiles;
|
||||||
private Seq<Tile> cores;
|
private Seq<Tile> cores;
|
||||||
|
|
||||||
|
public static Block getDifficultyWall(int size, float difficulty){
|
||||||
|
Seq<Block> wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == size && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door));
|
||||||
|
wallsSmall.sort(b -> b.buildCost);
|
||||||
|
return wallsSmall.getFrac(difficulty * 0.91f);
|
||||||
|
}
|
||||||
|
|
||||||
public void generate(Tiles tiles, Seq<Tile> cores, Tile spawn, Team team, Sector sector, float difficulty){
|
public void generate(Tiles tiles, Seq<Tile> cores, Tile spawn, Team team, Sector sector, float difficulty){
|
||||||
this.tiles = tiles;
|
this.tiles = tiles;
|
||||||
this.cores = cores;
|
this.cores = cores;
|
||||||
@@ -39,22 +45,15 @@ public class BaseGenerator{
|
|||||||
|
|
||||||
Mathf.rand.setSeed(sector.id);
|
Mathf.rand.setSeed(sector.id);
|
||||||
|
|
||||||
Seq<Block> wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == 1 && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door));
|
float bracketRange = 0.17f;
|
||||||
Seq<Block> wallsLarge = content.blocks().select(b -> b instanceof Wall && b.size == 2 && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door));
|
float baseChance = Mathf.lerp(0.7f, 2.1f, difficulty);
|
||||||
|
|
||||||
//sort by cost for correct fraction
|
|
||||||
wallsSmall.sort(b -> b.buildCost);
|
|
||||||
wallsLarge.sort(b -> b.buildCost);
|
|
||||||
|
|
||||||
float bracketRange = 0.2f;
|
|
||||||
float baseChance = Mathf.lerp(0.7f, 1.9f, difficulty);
|
|
||||||
int wallAngle = 70; //180 for full coverage
|
int wallAngle = 70; //180 for full coverage
|
||||||
double resourceChance = 0.5 * baseChance;
|
double resourceChance = 0.5 * baseChance;
|
||||||
double nonResourceChance = 0.0005 * baseChance;
|
double nonResourceChance = 0.0005 * baseChance;
|
||||||
BasePart coreschem = bases.cores.getFrac(difficulty);
|
BasePart coreschem = bases.cores.getFrac(difficulty);
|
||||||
int passes = difficulty < 0.4 ? 1 : difficulty < 0.8 ? 2 : 3;
|
int passes = difficulty < 0.4 ? 1 : difficulty < 0.8 ? 2 : 3;
|
||||||
|
|
||||||
Block wall = wallsSmall.getFrac(difficulty * 0.91f), wallLarge = wallsLarge.getFrac(difficulty * 0.91f);
|
Block wall = getDifficultyWall(1, difficulty), wallLarge = getDifficultyWall(2, difficulty);
|
||||||
|
|
||||||
for(Tile tile : cores){
|
for(Tile tile : cores){
|
||||||
tile.clearOverlay();
|
tile.clearOverlay();
|
||||||
|
|||||||
@@ -517,7 +517,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
|
|||||||
|
|
||||||
float waveTimeDec = 0.4f;
|
float waveTimeDec = 0.4f;
|
||||||
|
|
||||||
state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f) / 0.8f);
|
state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f));
|
||||||
state.rules.waves = sector.info.waves = true;
|
state.rules.waves = sector.info.waves = true;
|
||||||
state.rules.enemyCoreBuildRadius = 600f;
|
state.rules.enemyCoreBuildRadius = 600f;
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ public class ContentParser{
|
|||||||
if(data.isString()){
|
if(data.isString()){
|
||||||
StatusEffect result = locate(ContentType.status, data.asString());
|
StatusEffect result = locate(ContentType.status, data.asString());
|
||||||
if(result != null) return result;
|
if(result != null) return result;
|
||||||
|
result = (StatusEffect)fieldOpt(StatusEffects.class, data);
|
||||||
|
if(result != null) return result;
|
||||||
throw new IllegalArgumentException("Unknown status effect: '" + data.asString() + "'");
|
throw new IllegalArgumentException("Unknown status effect: '" + data.asString() + "'");
|
||||||
}
|
}
|
||||||
StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name"));
|
StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name"));
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ public class Mods implements Loadable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void packSprites(Seq<Fi> sprites, LoadedMod mod, boolean prefix, Seq<AsyncResult<Runnable>> tasks){
|
private void packSprites(Seq<Fi> sprites, LoadedMod mod, boolean prefix, Seq<AsyncResult<Runnable>> tasks){
|
||||||
boolean linear = Core.settings.getBool("linear");
|
boolean linear = Core.settings.getBool("linear", true);
|
||||||
|
|
||||||
for(Fi file : sprites){
|
for(Fi file : sprites){
|
||||||
//read and bleed pixmaps in parallel
|
//read and bleed pixmaps in parallel
|
||||||
@@ -186,7 +186,7 @@ public class Mods implements Loadable{
|
|||||||
Pixmap pix = new Pixmap(file.readBytes());
|
Pixmap pix = new Pixmap(file.readBytes());
|
||||||
//only bleeds when linear filtering is on at startup
|
//only bleeds when linear filtering is on at startup
|
||||||
if(linear){
|
if(linear){
|
||||||
Pixmaps.bleed(pix);
|
Pixmaps.bleed(pix, 2);
|
||||||
}
|
}
|
||||||
//this returns a *runnable* which actually packs the resulting pixmap; this has to be done synchronously outside the method
|
//this returns a *runnable* which actually packs the resulting pixmap; this has to be done synchronously outside the method
|
||||||
return () -> {
|
return () -> {
|
||||||
@@ -269,7 +269,7 @@ public class Mods implements Loadable{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.linear : TextureFilter.nearest;
|
TextureFilter filter = Core.settings.getBool("linear", true) ? TextureFilter.linear : TextureFilter.nearest;
|
||||||
|
|
||||||
Time.mark();
|
Time.mark();
|
||||||
//generate new icons
|
//generate new icons
|
||||||
|
|||||||
@@ -334,6 +334,9 @@ public class UnitType extends UnlockableContent{
|
|||||||
canDrown = false;
|
canDrown = false;
|
||||||
omniMovement = false;
|
omniMovement = false;
|
||||||
immunities.add(StatusEffects.wet);
|
immunities.add(StatusEffects.wet);
|
||||||
|
if(visualElevation < 0f){
|
||||||
|
visualElevation = 0.11f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flying){
|
if(flying){
|
||||||
@@ -473,7 +476,7 @@ public class UnitType extends UnlockableContent{
|
|||||||
if(!packer.has(name + "-outline")){
|
if(!packer.has(name + "-outline")){
|
||||||
PixmapRegion base = Core.atlas.getPixmap(region);
|
PixmapRegion base = Core.atlas.getPixmap(region);
|
||||||
var result = Pixmaps.outline(base, outlineColor, outlineRadius);
|
var result = Pixmaps.outline(base, outlineColor, outlineRadius);
|
||||||
if(Core.settings.getBool("linear")){
|
if(Core.settings.getBool("linear", true)){
|
||||||
Pixmaps.bleed(result);
|
Pixmaps.bleed(result);
|
||||||
}
|
}
|
||||||
packer.add(PageType.main, name + "-outline", result);
|
packer.add(PageType.main, name + "-outline", result);
|
||||||
@@ -709,7 +712,7 @@ public class UnitType extends UnlockableContent{
|
|||||||
Draw.color(0, 0, 0, 0.4f * alpha);
|
Draw.color(0, 0, 0, 0.4f * alpha);
|
||||||
float rad = 1.6f;
|
float rad = 1.6f;
|
||||||
float size = Math.max(region.width, region.height) * Draw.scl;
|
float size = Math.max(region.width, region.height) * Draw.scl;
|
||||||
Draw.rect(softShadowRegion, unit, size * rad * Draw.xscl, size * rad * Draw.yscl);
|
Draw.rect(softShadowRegion, unit, size * rad * Draw.xscl, size * rad * Draw.yscl, unit.rotation - 90);
|
||||||
Draw.color();
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class DatabaseDialog extends BaseDialog{
|
|||||||
cont.table(s -> {
|
cont.table(s -> {
|
||||||
s.image(Icon.zoom).padRight(8);
|
s.image(Icon.zoom).padRight(8);
|
||||||
search = s.field(null, text -> rebuild()).growX().get();
|
search = s.field(null, text -> rebuild()).growX().get();
|
||||||
search.setMessageText(Core.bundle.get("players.search"));
|
search.setMessageText("@players.search");
|
||||||
}).fillX().padBottom(4).row();
|
}).fillX().padBottom(4).row();
|
||||||
|
|
||||||
cont.pane(all);
|
cont.pane(all);
|
||||||
|
|||||||
@@ -763,7 +763,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
c.defaults().padBottom(5);
|
c.defaults().padBottom(5);
|
||||||
|
|
||||||
if(sector.preset != null && sector.preset.description != null){
|
if(sector.preset != null && sector.preset.description != null){
|
||||||
c.add(sector.preset.displayDescription()).left().row();
|
c.add(sector.preset.displayDescription()).width(420f).wrap().left().row();
|
||||||
}
|
}
|
||||||
|
|
||||||
c.add(Core.bundle.get("sectors.time") + " [accent]" + sector.save.getPlayTime()).left().row();
|
c.add(Core.bundle.get("sectors.time") + " [accent]" + sector.save.getPlayTime()).left().row();
|
||||||
|
|||||||
@@ -230,8 +230,12 @@ public class SettingsMenuDialog extends Dialog{
|
|||||||
platform.shareFile(logs);
|
platform.shareFile(logs);
|
||||||
}else{
|
}else{
|
||||||
platform.showFileChooser(false, "txt", file -> {
|
platform.showFileChooser(false, "txt", file -> {
|
||||||
file.writeString(getLogs());
|
try{
|
||||||
|
file.writeBytes(getLogs().getBytes(Strings.utf8));
|
||||||
app.post(() -> ui.showInfo("@crash.exported"));
|
app.post(() -> ui.showInfo("@crash.exported"));
|
||||||
|
}catch(Throwable e){
|
||||||
|
ui.showException(e);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -181,6 +181,11 @@ public class HintsFragment extends Fragment{
|
|||||||
&& SectorPresets.frozenForest.unlocked()
|
&& SectorPresets.frozenForest.unlocked()
|
||||||
&& SectorPresets.frozenForest.sector.save == null,
|
&& SectorPresets.frozenForest.sector.save == null,
|
||||||
() -> state.isCampaign() && state.getSector().preset == SectorPresets.frozenForest),
|
() -> state.isCampaign() && state.getSector().preset == SectorPresets.frozenForest),
|
||||||
|
presetDifficulty(() -> state.isCampaign()
|
||||||
|
&& state.getSector().preset == null
|
||||||
|
&& state.getSector().threat >= 0.5f
|
||||||
|
&& !SectorPresets.tarFields.sector.isCaptured(), //appear only when the player hasn't progressed much in the game yet
|
||||||
|
() -> state.isCampaign() && state.getSector().preset != null),
|
||||||
coreIncinerate(() -> state.isCampaign() && state.rules.defaultTeam.core() != null && state.rules.defaultTeam.core().items.get(Items.copper) >= state.rules.defaultTeam.core().storageCapacity - 10, () -> false),
|
coreIncinerate(() -> state.isCampaign() && state.rules.defaultTeam.core() != null && state.rules.defaultTeam.core().items.get(Items.copper) >= state.rules.defaultTeam.core().storageCapacity - 10, () -> false),
|
||||||
coopCampaign(() -> net.client() && state.isCampaign() && SectorPresets.groundZero.sector.hasBase(), () -> false),
|
coopCampaign(() -> net.client() && state.isCampaign() && SectorPresets.groundZero.sector.hasBase(), () -> false),
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -162,6 +162,8 @@ public class Block extends UnlockableContent{
|
|||||||
public int unitCapModifier = 0;
|
public int unitCapModifier = 0;
|
||||||
/** Whether the block can be tapped and selected to configure. */
|
/** Whether the block can be tapped and selected to configure. */
|
||||||
public boolean configurable;
|
public boolean configurable;
|
||||||
|
/** If true, the building inventory can be shown with the config. */
|
||||||
|
public boolean allowConfigInventory = true;
|
||||||
/** If true, this block can be configured by logic. */
|
/** If true, this block can be configured by logic. */
|
||||||
public boolean logicConfigurable = false;
|
public boolean logicConfigurable = false;
|
||||||
/** Whether this block consumes touchDown events when tapped. */
|
/** Whether this block consumes touchDown events when tapped. */
|
||||||
@@ -848,7 +850,8 @@ public class Block extends UnlockableContent{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!outputsPower && consumes.hasPower() && consumes.getPower().buffered){
|
if(!outputsPower && consumes.hasPower() && consumes.getPower().buffered){
|
||||||
throw new IllegalArgumentException("Consumer using buffered power: " + name);
|
Log.warn("Consumer using buffered power: @. Disabling buffered power.", name);
|
||||||
|
consumes.getPower().buffered = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(buildVisibility == BuildVisibility.sandboxOnly){
|
if(buildVisibility == BuildVisibility.sandboxOnly){
|
||||||
@@ -912,12 +915,17 @@ public class Block extends UnlockableContent{
|
|||||||
for(int x = 0; x < base.width; x++){
|
for(int x = 0; x < base.width; x++){
|
||||||
for(int y = 0; y < base.height; y++){
|
for(int y = 0; y < base.height; y++){
|
||||||
int color = base.get(x, y);
|
int color = base.get(x, y);
|
||||||
int index = color == 0xffffffff ? 0 : color == 0xdcc6c6ff ? 1 : color == 0x9d7f7fff ? 2 : -1;
|
int index = switch(color){
|
||||||
|
case 0xffffffff -> 0;
|
||||||
|
case 0xdcc6c6ff, 0xdbc5c5ff -> 1;
|
||||||
|
case 0x9d7f7fff, 0x9e8080ff -> 2;
|
||||||
|
default -> -1;
|
||||||
|
};
|
||||||
out.setRaw(x, y, index == -1 ? base.get(x, y) : team.palettei[index]);
|
out.setRaw(x, y, index == -1 ? base.get(x, y) : team.palettei[index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.settings.getBool("linear")){
|
if(Core.settings.getBool("linear", true)){
|
||||||
Pixmaps.bleed(out);
|
Pixmaps.bleed(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -938,7 +946,7 @@ public class Block extends UnlockableContent{
|
|||||||
if(outlineIcon){
|
if(outlineIcon){
|
||||||
PixmapRegion region = Core.atlas.getPixmap(gen[outlinedIcon >= 0 ? outlinedIcon : gen.length -1]);
|
PixmapRegion region = Core.atlas.getPixmap(gen[outlinedIcon >= 0 ? outlinedIcon : gen.length -1]);
|
||||||
Pixmap out = last = Pixmaps.outline(region, outlineColor, outlineRadius);
|
Pixmap out = last = Pixmaps.outline(region, outlineColor, outlineRadius);
|
||||||
if(Core.settings.getBool("linear")){
|
if(Core.settings.getBool("linear", true)){
|
||||||
Pixmaps.bleed(out);
|
Pixmaps.bleed(out);
|
||||||
}
|
}
|
||||||
packer.add(PageType.main, name, out);
|
packer.add(PageType.main, name, out);
|
||||||
|
|||||||
@@ -470,15 +470,15 @@ public class Tile implements Position, QuadTreeObject, Displayable{
|
|||||||
getHitbox(rect);
|
getHitbox(rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tile nearby(Point2 relative){
|
public @Nullable Tile nearby(Point2 relative){
|
||||||
return world.tile(x + relative.x, y + relative.y);
|
return world.tile(x + relative.x, y + relative.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tile nearby(int dx, int dy){
|
public @Nullable Tile nearby(int dx, int dy){
|
||||||
return world.tile(x + dx, y + dy);
|
return world.tile(x + dx, y + dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tile nearby(int rotation){
|
public @Nullable Tile nearby(int rotation){
|
||||||
if(rotation == 0) return world.tile(x + 1, y);
|
if(rotation == 0) return world.tile(x + 1, y);
|
||||||
if(rotation == 1) return world.tile(x, y + 1);
|
if(rotation == 1) return world.tile(x, y + 1);
|
||||||
if(rotation == 2) return world.tile(x - 1, y);
|
if(rotation == 2) return world.tile(x - 1, y);
|
||||||
@@ -486,7 +486,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Building nearbyBuild(int rotation){
|
public @Nullable Building nearbyBuild(int rotation){
|
||||||
if(rotation == 0) return world.build(x + 1, y);
|
if(rotation == 0) return world.build(x + 1, y);
|
||||||
if(rotation == 1) return world.build(x, y + 1);
|
if(rotation == 1) return world.build(x, y + 1);
|
||||||
if(rotation == 2) return world.build(x - 1, y);
|
if(rotation == 2) return world.build(x - 1, y);
|
||||||
|
|||||||
@@ -75,9 +75,11 @@ public class Wall extends Block{
|
|||||||
Draw.blend();
|
Draw.blend();
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
|
if(!state.isPaused()){
|
||||||
hit = Mathf.clamp(hit - Time.delta / 10f);
|
hit = Mathf.clamp(hit - Time.delta / 10f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean collision(Bullet bullet){
|
public boolean collision(Bullet bullet){
|
||||||
@@ -96,7 +98,7 @@ public class Wall extends Block{
|
|||||||
//deflect bullets if necessary
|
//deflect bullets if necessary
|
||||||
if(chanceDeflect > 0f){
|
if(chanceDeflect > 0f){
|
||||||
//slow bullets are not deflected
|
//slow bullets are not deflected
|
||||||
if(bullet.vel().len() <= 0.1f || !bullet.type.reflectable) return true;
|
if(bullet.vel.len() <= 0.1f || !bullet.type.reflectable) return true;
|
||||||
|
|
||||||
//bullet reflection chance depends on bullet damage
|
//bullet reflection chance depends on bullet damage
|
||||||
if(!Mathf.chance(chanceDeflect / bullet.damage())) return true;
|
if(!Mathf.chance(chanceDeflect / bullet.damage())) return true;
|
||||||
@@ -115,9 +117,9 @@ public class Wall extends Block{
|
|||||||
bullet.vel.y *= -1;
|
bullet.vel.y *= -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bullet.owner(this);
|
bullet.owner = this;
|
||||||
bullet.team(team);
|
bullet.team = team;
|
||||||
bullet.time(bullet.time() + 1f);
|
bullet.time += 1f;
|
||||||
|
|
||||||
//disable bullet collision by returning false
|
//disable bullet collision by returning false
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -273,6 +273,7 @@ public class Turret extends ReloadTurret{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(hasAmmo()){
|
if(hasAmmo()){
|
||||||
|
if(Float.isNaN(reload)) rotation = 0;
|
||||||
|
|
||||||
if(timer(timerTarget, targetInterval)){
|
if(timer(timerTarget, targetInterval)){
|
||||||
findTarget();
|
findTarget();
|
||||||
@@ -289,9 +290,7 @@ public class Turret extends ReloadTurret{
|
|||||||
}else{ //default AI behavior
|
}else{ //default AI behavior
|
||||||
targetPosition(target);
|
targetPosition(target);
|
||||||
|
|
||||||
if(Float.isNaN(rotation)){
|
if(Float.isNaN(rotation)) rotation = 0;
|
||||||
rotation = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float targetRot = angleTo(targetPos);
|
float targetRot = angleTo(targetPos);
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ public class DuctBridge extends Block{
|
|||||||
public DuctBridgeBuild findLink(){
|
public DuctBridgeBuild findLink(){
|
||||||
for(int i = 1; i <= range; i++){
|
for(int i = 1; i <= range; i++){
|
||||||
Tile other = tile.nearby(Geometry.d4x(rotation) * i, Geometry.d4y(rotation) * i);
|
Tile other = tile.nearby(Geometry.d4x(rotation) * i, Geometry.d4y(rotation) * i);
|
||||||
if(other.build instanceof DuctBridgeBuild build && build.team == team){
|
if(other != null && other.build instanceof DuctBridgeBuild build && build.team == team){
|
||||||
return build;
|
return build;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ public class ItemBridge extends Block{
|
|||||||
group = BlockGroup.transportation;
|
group = BlockGroup.transportation;
|
||||||
noUpdateDisabled = true;
|
noUpdateDisabled = true;
|
||||||
copyConfig = false;
|
copyConfig = false;
|
||||||
|
//disabled as to not be annoying
|
||||||
|
allowConfigInventory = false;
|
||||||
|
|
||||||
//point2 config is relative
|
//point2 config is relative
|
||||||
config(Point2.class, (ItemBridgeBuild tile, Point2 i) -> tile.link = Point2.pack(i.x + tile.tileX(), i.y + tile.tileY()));
|
config(Point2.class, (ItemBridgeBuild tile, Point2 i) -> tile.link = Point2.pack(i.x + tile.tileX(), i.y + tile.tileY()));
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import mindustry.world.*;
|
|||||||
public class Cliff extends Block{
|
public class Cliff extends Block{
|
||||||
public float size = 11f;
|
public float size = 11f;
|
||||||
public @Load(value = "cliffmask#", length = 256) TextureRegion[] cliffs;
|
public @Load(value = "cliffmask#", length = 256) TextureRegion[] cliffs;
|
||||||
|
public @Load(value = "editor-cliffmask#", length = 256) TextureRegion[] editorCliffs;
|
||||||
|
|
||||||
public Cliff(String name){
|
public Cliff(String name){
|
||||||
super(name);
|
super(name);
|
||||||
|
|||||||
@@ -40,11 +40,11 @@ public class BurnerGenerator extends ItemLiquidGenerator{
|
|||||||
Draw.rect(turbineRegions[1], x, y, -totalTime * turbineSpeed);
|
Draw.rect(turbineRegions[1], x, y, -totalTime * turbineSpeed);
|
||||||
|
|
||||||
Draw.rect(capRegion, x, y);
|
Draw.rect(capRegion, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
if(hasLiquids){
|
if(hasLiquids && liquidRegion.found()){
|
||||||
Drawf.liquid(liquidRegion, x, y, liquids.total() / liquidCapacity, liquids.current().color);
|
Drawf.liquid(liquidRegion, x, y, liquids.total() / liquidCapacity, liquids.current().color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,11 @@ public class PowerGraph{
|
|||||||
private static final Seq<Building> outArray2 = new Seq<>();
|
private static final Seq<Building> outArray2 = new Seq<>();
|
||||||
private static final IntSet closedSet = new IntSet();
|
private static final IntSet closedSet = new IntSet();
|
||||||
|
|
||||||
private final Seq<Building> producers = new Seq<>(false);
|
//do not modify any of these unless you know what you're doing!
|
||||||
private final Seq<Building> consumers = new Seq<>(false);
|
public final Seq<Building> producers = new Seq<>(false);
|
||||||
private final Seq<Building> batteries = new Seq<>(false);
|
public final Seq<Building> consumers = new Seq<>(false);
|
||||||
private final Seq<Building> all = new Seq<>(false);
|
public final Seq<Building> batteries = new Seq<>(false);
|
||||||
|
public final Seq<Building> all = new Seq<>(false);
|
||||||
|
|
||||||
private final WindowedMean powerBalance = new WindowedMean(60);
|
private final WindowedMean powerBalance = new WindowedMean(60);
|
||||||
private float lastPowerProduced, lastPowerNeeded, lastPowerStored;
|
private float lastPowerProduced, lastPowerNeeded, lastPowerStored;
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ import mindustry.world.meta.*;
|
|||||||
/** Consumer class for blocks which consume power while being connected to a power graph. */
|
/** Consumer class for blocks which consume power while being connected to a power graph. */
|
||||||
public class ConsumePower extends Consume{
|
public class ConsumePower extends Consume{
|
||||||
/** The maximum amount of power which can be processed per tick. This might influence efficiency or load a buffer. */
|
/** The maximum amount of power which can be processed per tick. This might influence efficiency or load a buffer. */
|
||||||
public final float usage;
|
public float usage;
|
||||||
/** The maximum power capacity in power units. */
|
/** The maximum power capacity in power units. */
|
||||||
public final float capacity;
|
public float capacity;
|
||||||
/** True if the module can store power. */
|
/** True if the module can store power. */
|
||||||
public final boolean buffered;
|
public boolean buffered;
|
||||||
|
|
||||||
public ConsumePower(float usage, float capacity, boolean buffered){
|
public ConsumePower(float usage, float capacity, boolean buffered){
|
||||||
this.usage = usage;
|
this.usage = usage;
|
||||||
|
|||||||
@@ -39,12 +39,14 @@ public class DrawSmelter extends DrawBlock{
|
|||||||
|
|
||||||
Draw.z(Layer.block + 0.01f);
|
Draw.z(Layer.block + 0.01f);
|
||||||
|
|
||||||
|
Draw.alpha(build.warmup);
|
||||||
|
Draw.rect(top, build.x, build.y);
|
||||||
|
|
||||||
Draw.alpha(((1f - g) + Mathf.absin(Time.time, 8f, g) + Mathf.random(r) - r) * build.warmup);
|
Draw.alpha(((1f - g) + Mathf.absin(Time.time, 8f, g) + Mathf.random(r) - r) * build.warmup);
|
||||||
|
|
||||||
Draw.tint(flameColor);
|
Draw.tint(flameColor);
|
||||||
Fill.circle(build.x, build.y, flameRadius + Mathf.absin(Time.time, flameRadiusScl, flameRadiusMag) + cr);
|
Fill.circle(build.x, build.y, flameRadius + Mathf.absin(Time.time, flameRadiusScl, flameRadiusMag) + cr);
|
||||||
Draw.color(1f, 1f, 1f, build.warmup);
|
Draw.color(1f, 1f, 1f, build.warmup);
|
||||||
Draw.rect(top, build.x, build.y);
|
|
||||||
Fill.circle(build.x, build.y, flameRadiusIn + Mathf.absin(Time.time, flameRadiusScl, flameRadiusInMag) + cr);
|
Fill.circle(build.x, build.y, flameRadiusIn + Mathf.absin(Time.time, flameRadiusScl, flameRadiusInMag) + cr);
|
||||||
|
|
||||||
Draw.color();
|
Draw.color();
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<h2>Campanie</h2>
|
<h2>Campanie</h2>
|
||||||
|
|
||||||
- Capturează planeta Serpulo avansând prin peste 250 de sectoare genereate procedural și 16 harți create manual
|
- Capturează planeta Serpulo avansând prin peste 250 de sectoare generate procedural și 16 hărți create manual
|
||||||
- Capturează teritoriul și construiește fabrici pt producția de resurse în timp ce joci în alte sectoare
|
- Capturează teritoriul și construiește fabrici pt producția de resurse în timp ce joci în alte sectoare
|
||||||
- Apără-ți sectoarele de invaziile inamice periodice
|
- Apără-ți sectoarele de invaziile inamice periodice
|
||||||
- Coordonează distribuția de resurse între sectoare folosind platforme de lansare
|
- Coordonează distribuția de resurse între sectoare folosind platforme de lansare
|
||||||
|
|||||||
@@ -11,4 +11,4 @@ android.useAndroidX=true
|
|||||||
#used for slow jitpack builds; TODO see if this actually works
|
#used for slow jitpack builds; TODO see if this actually works
|
||||||
http.socketTimeout=80000
|
http.socketTimeout=80000
|
||||||
http.connectionTimeout=80000
|
http.connectionTimeout=80000
|
||||||
archash=98c420de77661889ab0330a956d50721f27f33d9
|
archash=72627de9b81e7143af4ebe1d1f9d54099ade8fd3
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Omega",
|
"name": "Omega",
|
||||||
"address": ["yeeth.mindustry.me:2004"]
|
"address": ["yeeth.mindustry.me:2004","185.86.230.61:25570"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "md.obvilionnetwork.ru",
|
"name": "md.obvilionnetwork.ru",
|
||||||
@@ -110,5 +110,9 @@
|
|||||||
{
|
{
|
||||||
"name": "CreateDustry",
|
"name": "CreateDustry",
|
||||||
"address": ["144.76.120.74:18645"]
|
"address": ["144.76.120.74:18645"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HexedPvP",
|
||||||
|
"address": ["001.finland.eu.hosts.dynamichost.xyz:23664"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"address": ["34.134.111.15", "fifr4.quackhost.uk:21013", "34.134.111.15:4000", "34.134.111.15:7000"]
|
"address": ["34.134.111.15", "fifr4.quackhost.uk:21013", "34.134.111.15:4000", "34.134.111.15:7000"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "[cyan]DarkDustry",
|
"name": "DarkDustry",
|
||||||
"address": ["darkdustry.ml", "darkdustry.ml:3000", "darkdustry.ml:7000", "darkdustry.ml:8000"]
|
"address": ["darkdustry.ml", "darkdustry.ml:3000", "darkdustry.ml:7000", "darkdustry.ml:8000"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "io",
|
"name": "io",
|
||||||
"address": ["mindustry.io.community", "mindustry.io.community:1000", "mindustry.io.community:2000", "mindustry.io.community:3000", "mindustry.io.community:4000", "mindustry.io.community:5000"]
|
"address": ["mindustry.io.community", "mindustry.io.community:1000", "mindustry.io.community:2000", "mindustry.io.community:3000", "mindustry.io.community:4000", "labs.io.community"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Korea",
|
"name": "Korea",
|
||||||
|
|||||||
@@ -158,7 +158,9 @@ public class Generators{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Fi.get("../blocks/environment/cliffmask" + (val & 0xff) + ".png").writePng(result);
|
Fi fi = Fi.get("../blocks/environment/cliffmask" + (val & 0xff) + ".png");
|
||||||
|
fi.writePng(result);
|
||||||
|
fi.copyTo(Fi.get("../editor").child("editor-" + fi.name()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user