diff --git a/build.gradle b/build.gradle index c94a79598a..357c3f3513 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript{ } dependencies{ - classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.8' + classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11' classpath "com.github.anuken:packr:-SNAPSHOT" classpath "com.github.Anuken.Arc:packer:$arcHash" classpath "com.github.Anuken.Arc:arc-core:$arcHash" diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0acb0e2401..cd4e6b3463 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -463,7 +463,7 @@ load = Load save = Save fps = FPS: {0} ping = Ping: {0}ms -language.restart = Please restart your game for the language settings to take effect. +language.restart = Restart your game for the language settings to take effect. settings = Settings tutorial = Tutorial tutorial.retake = Re-Take Tutorial diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 4a3bf373b5..dad6c44fa3 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -8,8 +8,8 @@ link.github.description = Código fuente del juego link.changelog.description = Lista de actualizaciones link.dev-builds.description = Versiones en desarrollo inestables link.trello.description = Tablero de Trello oficial para las características planificadas -link.itch.io.description = itch.io es la página donde podes descargar las versiones para PC y web -link.google-play.description = Página de Mindustry en Google Play Store +link.itch.io.description = itch.io es la página donde podes descargar las versiones para PC y Servidor +link.google-play.description = Ficha en la Google Play Store link.f-droid.description = Página de F-Droid del juego link.wiki.description = Wiki oficial de Mindustry link.suggestions.description = Sugerir nuevas funciones @@ -20,8 +20,10 @@ gameover = Tu núcleo ha sido destruido. gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! highscore = [accent]¡Nuevo récord de puntuación! copied = Copiado. -indev.popup = La [accent]v6[] esta actualmente en la [accent]alpha[].\n[lightgray]Esto significa:[]\n[scarlet]- La campaña no esta completada[]\n- Falta contenido\n - La mayoría de la [scarlet]Inteligencia Artificial[] no funciona correctamente\n- Muchas unidades no están terminadas\n- Todo lo que ves puede ser modificado o eliminado en la versión final.\n\nReporta bugs o crasheos en [accent]Github[]. -indev.notready = Esta parte del juego no esta lista aún. + +indev.popup = [accent]v6[] esta actualmente en [accent]alpha[].\n[lightgray]Esto significa que:[]\n[scarlet]- El modo de campaña no esta totalmente acabado[]\n-Falta contenido dentro del juego\n - Mucha de la [scarlet]AI de enemigos[] no funciona totalmente\n- Algunas unidades todavia no estan acabadas\n- Todo lo que ves es probable que sea cambiado o removido.\n\nReporta bugs o crasheos en [accent]Github[]. +indev.notready = Esta parte del juego no esta lista todavia. + load.sound = Sonidos load.map = Mapas @@ -125,9 +127,11 @@ mod.enable = Activar mod.requiresrestart = El juego se cerrará para aplicar los mods. mod.reloadrequired = [scarlet]Se requiere actualizar mod.import = Importar mod + mod.import.file = Importar archivo mod.import.github = Importar Mod de Github mod.jarwarn = [scarlet]Los mods JAR pueden ser inseguros.[]\nAsegúrate de que los descargaste de una fuente segura! + mod.item.remove = Este objeto es parte del[accent] '{0}'[] mod. Para eliminarlo, desinstala ese mod. mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar? mod.author = [lightgray]Autor:[] {0} @@ -148,7 +152,7 @@ techtree = Árbol de Tecnologías research.list = [lightgray]investigación: research = Investigación researched = [lightgray]{0} investigado. -research.progress = {0}% complete +research.progress = {0}% completado players = {0} jugadores online players.single = {0} jugador online players.search = buscar @@ -278,7 +282,9 @@ quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe pu loading = [accent]Cargando... reloading = [accent]Recargando mods... saving = [accent]Guardando... -respawn = [accent][[{0}][] para reaparecer en el núcleo + +respawn = [accent][[{0}][] para respawnear en el nucleo + cancelbuilding = [accent][[{0}][] para limpiar el plan selectschematic = [accent][[{0}][] para seleccionar+copiar pausebuilding = [accent][[{0}][] para pausar la construcción @@ -350,10 +356,12 @@ waves.invalid = Oleadas inválidaas en el portapapeles. 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. + wavemode.counts = Cuentas wavemode.totals = Totales wavemode.health = Salud + editor.default = [lightgray] details = Detalles... edit = Editar... @@ -512,7 +520,8 @@ weather.rain.name = Lluvia weather.snow.name = Nieve weather.sandstorm.name = Tormenta de arena weather.sporestorm.name = Tormenta de esporas -weather.fog.name = Fog + +weather.fog.name = Niebla sectors.unexplored = [lightgray]No explorado sectors.resources = Recursos: @@ -523,12 +532,12 @@ sectors.launch = Lanzar sectors.select = Elegir sectors.nonelaunch = [lightgray]ninguno (sun) sectors.rename = Rename Sector -sector.missingresources = [scarlet]Insufficient Core Resources +sector.missingresources = [scarlet]Insuficientes recursos planet.serpulo.name = Serpulo -planet.sun.name = Sun +planet.sun.name = Sol -sector.groundZero.name = Terreno Zero +sector.groundZero.name = Zona de impacto sector.craters.name = Los Cráteres sector.frozenForest.name = Bosque Congelado sector.ruinousShores.name = Costas Ruinosas @@ -540,17 +549,18 @@ sector.tarFields.name = Campos de alquitrán sector.saltFlats.name = Llanuras de sal sector.fungalPass.name = Paso de hongos -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. + +sector.groundZero.description = La ubicación óptima para empezar una vez más. Baja amenaza enemiga. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible.\nSiga adelante. +sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no pueden contenerlos para siempre.\n\nComienza la aventura hacia el poder. Construye generadores de combustión. Aprenda a usar reparadores. +sector.saltFlats.description = En las afueras del desierto se encuentran las Salinas. Se pueden encontrar pocos recursos en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacenamiento de recursos aquí. Erradicar su núcleo. No dejes nada en pie. +sector.craters.description = El agua se ha acumulado en este cráter, reliquia de las viejas guerras. Recupere el área. Recoge arena. Fundir metavidrio. Bombee agua para enfriar torretas y taladros. +sector.ruinousShores.description = Más allá de los páramos, está la costa. Una vez, esta ubicación albergó una serie de defensa costera. No queda mucho. Solo las estructuras de defensa más básicas han quedado ilesas, todo lo demás reducido a chatarra.\nContinúe la expansión hacia afuera. Redescubra la tecnología. +sector.stainedMountains.description = Más tierra adentro se encuentran las montañas, pero no contaminadas por esporas.\nExtraiga el abundante titanio de esta zona. Aprenda como usarlo.\n\nLa presencia enemiga es mayor aquí. No les des tiempo para enviar sus unidades más fuertes. +sector.overgrowth.description = Esta área está cubierta de maleza, más cerca de la fuente de las esporas.\nEl enemigo ha establecido un puesto de avanzada aquí. Construye unidades Titán. Destruyelo. Recupera lo que se perdió. +sector.tarFields.description = Las afueras de una zona de producción de petróleo, entre la montaña y el desierto. Una de las pocas áreas con reservas de alquitrán utilizables.\nAunque está abandonada, esta zona tiene algunas fuerzas enemigas peligrosas cerca. No los subestimes.\n\n[lightgray]Investigue la tecnología de procesamiento de aceite si es posible. +sector.desolateRift.description = Una zona extremadamente peligrosa. Recursos abundantes, pero poco espacio. Alto riesgo de destrucción. Vete lo antes posible. No se deje engañar por el gran intervalo entre los ataques enemigos. +sector.nuclearComplex.description = Antigua instalación de producción y procesamiento de torio, reducida a ruinas.\n[lightgray] Investiga el torio y sus múltiples usos.\n\nEl enemigo está presente aquí en gran número, constantemente en busca de atacantes. +sector.fungalPass.description = Un área de transición entre montañas altas y tierras bajas plagadas de esporas. Aquí se encuentra una pequeña base de reconocimiento enemiga.\nDestroy it.\nUsa unidades Dagger y Crawler. Saca los dos núcleos de funcionamiento! settings.language = Idioma settings.data = Datos del Juego @@ -564,12 +574,14 @@ settings.graphics = Gráficos settings.cleardata = Limpiar Datos del Juego... settings.clear.confirm = ¿Estas seguro de querer limpiar estos datos?\n¡Esta acción no puede deshacerse! settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y atajos de teclado.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente. + settings.clearsaves.confirm = Estas seguro de que quieres borrar tus partidas guardadas? settings.clearsaves = Limpiar partidas guardadas -settings.clearresearch = Clear Research -settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? -settings.clearcampaignsaves = Clear Campaign Saves -settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? +settings.clearresearch = Borrar descubrimientos +settings.clearresearch.confirm = Estas seguro? +settings.clearcampaignsaves = Borrar Guardados de campaña +settings.clearcampaignsaves.confirm = Estas seguro de que quieres borrar tus partidas guardadas en el modo campaña? + paused = [accent] < Pausado > clear = Limpiar banned = [scarlet]Baneado @@ -579,8 +591,9 @@ no = No info.title = [accent]Información error.title = [crimson]Un error ha ocurrido. error.crashtitle = Un error ha ocurrido. + unit.nobuild = [scarlet]La unidad no puede construir -lastaccessed = [lightgray]Last Accessed: {0} +lastaccessed = [lightgray]Anteriormente usado: {0} block.unknown = [lightgray]??? stat.input = Entrada @@ -627,31 +640,32 @@ stat.ammo = Munición stat.shieldhealth = Salud del escudo stat.cooldowntime = Tiempo de enfriamiento stat.explosiveness = Explosiveness -stat.basedeflectchance = Base Deflect Chance -stat.lightningchance = Lightning Chance -stat.lightningdamage = Lightning Damage -stat.flammability = Flammability -stat.radioactivity = Radioactivity +stat.basedeflectchance = Probabilidad de desvío base +stat.lightningchance = Probabilidad de rayo +stat.lightningdamage = Daño por rayo +stat.flammability = Inflamabilidad +stat.radioactivity = Radiactividad stat.heatcapacity = HeatCapacity -stat.viscosity = Viscosity -stat.temperature = Temperature -stat.speed = Speed -stat.buildspeed = Build Speed -stat.minespeed = Mine Speed -stat.minetier = Mine Tier -stat.payloadcapacity = Payload Capacity -stat.commandlimit = Command Limit -stat.abilities = Abilities +stat.viscosity = Viscosidad +stat.temperature = Temperatura +stat.speed = Velocidad +stat.buildspeed = Velocidad de construcción +stat.minespeed = Velocidad de la mina +stat.minetier = Nivel de mina +stat.payloadcapacity = Capacidad de carga útil +stat.commandlimit = Límite de comando +stat.abilities = Habilidades -ability.forcefield = Force Field -ability.repairfield = Repair Field -ability.statusfield = Status Field -ability.unitspawn = {0} Factory -ability.shieldregenfield = Shield Regen Field +skill.forcefield = Campo de fuerza +skill.repairfield = Campo de reparación +skill.statusfield = Campo de estado +skill.unitspawn = {0} Fábrica +skill.shieldregenfield = Campo de regeneración del escudo bar.drilltierreq = Se requiere un mejor taladro. bar.noresources = Recursos faltantes bar.corereq = Se requiere de un núcleo base + bar.drillspeed = Velocidad del Taladro: {0}/s bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% @@ -701,7 +715,9 @@ unit.persecond = /seg unit.perminute = /min unit.timesspeed = x velocidad unit.percent = % -unit.shieldhealth = salud del escudo + +unit.shieldhealth = Vida del escudo + unit.items = objetos unit.thousands = k unit.millions = M @@ -718,8 +734,10 @@ setting.shadows.name = Sombras setting.blockreplace.name = Sugerir bloques al construir setting.linear.name = Filtrado Lineal setting.hints.name = Pistas -setting.flow.name = Mostrar flujo de recursos[scarlet] (experimental) + +setting.flow.name = Mostrar tasa de flujo de recursos[scarlet] (experimental) setting.buildautopause.name = Auto-pausar construcción + setting.animatedwater.name = Agua Animada setting.animatedshields.name = Escudos Animados setting.antialias.name = Antialias[lightgray] (necesita un reinicio)[] @@ -753,13 +771,15 @@ setting.fullscreen.name = Pantalla Completa setting.borderlesswindow.name = Ventana sin Bordes[lightgray] (podría requerir un reinicio) setting.fps.name = Mostrar FPS setting.smoothcamera.name = Cámara suave + + setting.vsync.name = Vsync (Limita los fps a los Hz de tu pantalla) setting.pixelate.name = Pixelar [lightgray](podría reducir el rendimiento) setting.minimap.name = Mostrar Minimapa -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Mostrar elementos en el nucleo (WIP) setting.position.name = Mostrar posición del jugador. setting.musicvol.name = Volumen de la Música -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Mostrar atmosfera del planeta setting.ambientvol.name = Volumen del Ambiente setting.mutemusic.name = Silenciar Musica setting.sfxvol.name = Volumen de los efectos de sonido @@ -799,8 +819,10 @@ keybind.toggle_block_status.name = Cambiar estado de los bloques keybind.move_x.name = Mover x keybind.move_y.name = Mover y keybind.mouse_move.name = Seguír al ratón -keybind.pan.name = Vista Pan -keybind.boost.name = Potenciar + +keybind.pan.name = Vista panorámica +keybind.boost.name = Impulsar + keybind.schematic_select.name = Seleccionar región keybind.schematic_menu.name = Menu de esquemas keybind.schematic_flip_x.name = Girar esquemático desde X @@ -850,7 +872,7 @@ keybind.zoom_minimap.name = Zoom del minimapa mode.help.title = Descripción de modos mode.survival.name = Supervivencia mode.survival.description = El modo normal. Recursos limitados y oleadas automáticas. -mode.sandbox.name = Caja de arena +mode.sandbox.name = Arenero mode.sandbox.description = Recursos ilimitados y sin temporizador para las oleadas. mode.editor.name = Editor mode.pvp.name = JcJ @@ -865,10 +887,10 @@ rules.schematic = Schematics Allowed rules.wavetimer = Temportzador de Oleadas rules.waves = Oleadas rules.attack = Modo de Ataque -rules.buildai = AI Building +rules.buildai = Construccion de la IA rules.enemyCheat = Recursos infinitos de la IA rules.blockhealthmultiplier = Multiplicador de salud de bloque -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = Multiplicador de daño de bloque rules.unitbuildspeedmultiplier = Multiplicador de velocidad de creación de unidades rules.unithealthmultiplier = Multiplicador de la vida de las unidades rules.unitdamagemultiplier = Multiplicador del daño de unidades @@ -885,15 +907,17 @@ rules.title.resourcesbuilding = Recursos y Construcción rules.title.enemy = Enemigos rules.title.unit = Unidades rules.title.experimental = Experimental + rules.title.environment = Entorno rules.lighting = Iluminación -rules.enemyLights = Enemy Lights -rules.fire = Fire -rules.explosions = Daño de explosiones de Bloques/Unidades +rules.enemyLights = Luces enemigas +rules.fire = Fuego +rules.explosions = Daño de explosiones de Bloques/Unidades rules.ambientlight = Iluminación ambiental rules.weather = Clima -rules.weather.frequency = Frecuencia: -rules.weather.duration = Duración: +rules.weather.frequency = Frequencia: +rules.weather.duration = Duracion: + content.item.name = Objetos content.liquid.name = Líquidos @@ -921,6 +945,7 @@ liquid.slag.name = Fundido liquid.oil.name = Petróleo liquid.cryofluid.name = Criogénico + unit.dagger.name = Daga unit.mace.name = Mazo unit.fortress.name = Fortaleza @@ -931,10 +956,10 @@ unit.crawler.name = Oruga unit.atrax.name = Atrax unit.spiroct.name = Spiroct unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Llama +unit.toxopid.name = Toxopodo +unit.flare.name = Bengala unit.horizon.name = Horizonte -unit.zenith.name = Zenith +unit.zenith.name = Cenit unit.antumbra.name = Antumbra unit.eclipse.name = Eclipse unit.mono.name = Mono @@ -956,28 +981,34 @@ unit.vela.name = Vela unit.corvus.name = Corvo block.resupply-point.name = Punto de reabastecimiento -block.parallax.name = Parallax + +block.parallax.name = Paralaje block.cliff.name = Acantilado + block.sand-boulder.name = Piedra de Arena block.grass.name = Hierba block.slag.name = Escoria block.space.name = Space block.salt.name = Sal -block.salt-wall.name = Pared de sal + +block.salt-wall.name = Muro de sal block.pebbles.name = Guijarros block.tendrils.name = Zarcillos -block.sand-wall.name = Pared de arena +block.sand-wall.name = Muro de arena block.spore-pine.name = Pino de esporas -block.spore-wall.name = Pared de esporas -block.boulder.name = Boulder -block.snow-boulder.name = Piedra nevosa +block.spore-wall.name = Muro de esporas +block.boulder.name = Roca +block.snow-boulder.name = Roca de nieve + block.snow-pine.name = Pino de nieve block.shale.name = Pizarra block.shale-boulder.name = Piedra de Pizarra block.moss.name = Musgo block.shrubs.name = Arbustos block.spore-moss.name = Musgo de esporas -block.shale-wall.name = Pared de shale + +block.shale-wall.name = Muro de pizarra + block.scrap-wall.name = Muro de Chatarra block.scrap-wall-large.name = Muro de Chatarra grande block.scrap-wall-huge.name = Muro de Chatarra muy grande @@ -1148,33 +1179,39 @@ block.launch-pad.name = Pad de Lanzamiento block.launch-pad-large.name = Pad de Lanzamiento Grande block.segment.name = Segmento block.command-center.name = Centro de comando + block.ground-factory.name = Fábrica terrestre block.air-factory.name = Fábrica aérea + block.naval-factory.name = Fábrica naval block.additive-reconstructor.name = Reconstructor aditivo block.multiplicative-reconstructor.name = Reconstructor multiplicativo block.exponential-reconstructor.name = Reconstructor exponencial block.tetrative-reconstructor.name = Reconstructor tetrativo -block.payload-conveyor.name = Cinta de transporte masivo -block.payload-router.name = Enrutador Payload -block.disassembler.name = Desmontador -block.silicon-crucible.name = Crisol de Silicio -block.overdrive-dome.name = Domo de sobremarcha -block.switch.name = Cambio -block.micro-processor.name = Micro Procesador -block.logic-processor.name = Procesador Lógico -block.hyper-processor.name = Hiper Procesador -block.logic-display.name = Pantalla Lógica -block.large-logic-display.name = Pantalla Lógica grande -block.memory-cell.name = Célula de memoria -block.memory-bank.name = Memory Bank +block.payload-conveyor.name = Transportador masivo +block.payload-router.name = Enrutador de carga útil +block.disassembler.name = Desensamblador +block.silicon-crucible.name = Crisol de silicio +block.overdrive-dome.name = Cupula de sobremarcha + +block.switch.name = Interruptor +block.micro-processor.name = Micro Processador +block.logic-processor.name = Procesador lógico +block.hyper-processor.name = Hiperprocesador +block.logic-display.name = Pantalla lógica +block.large-logic-display.name = Gran pantalla lógica +block.memory-cell.name = Celda de memoria +block.memory-bank.name = Banco de memoria + team.blue.name = Azul team.crux.name = rojo team.sharded.name = naranja team.orange.name = Naranja -team.derelict.name = Abandonado + +team.derelict.name = derelicto + team.green.name = Verde team.purple.name = Púrpura diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 9cbde0fad8..280ca03c7b 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -12,7 +12,7 @@ link.itch.io.description = itch.io sayfası link.google-play.description = Google Play mağaza sayfası link.f-droid.description = F-Droid kataloğu link.wiki.description = Resmi Mindustry wikisi -link.suggestions.description = Yeni özellikler öner +link.suggestions.description = Yeni özellikler için öneride bulun linkfail = Link açılamadı!\nURL kopyalandı. screenshot = Ekran görüntüsü {0} konumuna kaydedildi screenshot.invalid = Harita çok büyük, muhtemelen ekran görüntüsü için yeterli bellek yok. @@ -20,8 +20,8 @@ gameover = Kaybettin gameover.pvp = [accent] {0}[] Takımı kazandı! highscore = [accent]Yeni rekor! copied = Panoya Kopyalandı. -indev.popup = [accent]v6[] şu anda [accent]beta aşamasındadır[].\n[lightgray]Bu demektir ki:[]\n[scarlet]- Mücadele modu tamamlanmamıştır[]\n- Müzik ve ses efektleri tamamlanmamıştır veya eksiktir\n- Gördüğün her şey değişime ya da kaldırılmaya açıktır.\n\nHataları ve çökmeleri [accent]Github[]'da bildir. -indev.notready = Oyunun bu kısmı henüz hazır değil. +indev.popup = [accent]v6[] şu anda [accent]beta sürümündedir[].\n[lightgray]Bu şu anlama geliyor:[]\n[scarlet]- Mücadele modu tamamlanmadı[]\n- İçerikler eksik\n- Çoğu [scarlet]birim yapay zekası[] düzgün çalışmayabilir\n- Bazı birimler tamamlanmadı\n- Gördüğünüz her şey değişebilir ve ya kaldırılabilir.\n\n[accent]Bir sorun fark edersen Github sayfamızdan bize bildir. [] +indev.notready = Oyunun bu bölümü daha hazır değil. load.sound = Sesler load.map = Haritalar @@ -29,11 +29,11 @@ load.image = Resimler load.content = İçerik load.system = Sistem load.mod = Modlar -load.scripts = Betikler +load.scripts = Kodlar be.update = Yeni bir erken erişim sürümü var: -be.update.confirm = Yüklenip yeniden başlatılsın mı? -be.updating = Yeni sürüm yükleniyor... +be.update.confirm = İndirip yeniden başlatılsın mı? +be.updating = Yeni sürüm indiriliyor... be.ignore = Hayır be.noupdates = Yeni güncelleme bulunamadı. be.check = Güncellemeleri kontrol et @@ -41,38 +41,38 @@ be.check = Güncellemeleri kontrol et schematic = Şema schematic.add = Şemayı Kaydet... schematics = Şemalar -schematic.replace = Aynı isimde bir şema zaten var. Üzerine yazılsın mı? -schematic.exists = Aynı isimde bir şema zaten var. -schematic.import = Şema İçeri Aktar... +schematic.replace = Zaten aynı isimde bir tane şema var. Üzerine yazılsın mı? +schematic.exists = Zaten bu isimde şema var. +schematic.import = Şemayı İçeri Aktar... schematic.exportfile = Dışa Aktar schematic.importfile = İçe Aktar schematic.browseworkshop = Atölyeyi incele schematic.copy = Panoya Kopyala schematic.copy.import = Panodan İçeri Aktar -schematic.shareworkshop = Atölyede Kaydet +schematic.shareworkshop = Atölyede paylaş schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Şemayı döndür schematic.saved = Şema Kaydedildi. -schematic.delete.confirm = Bu şema tamamen yok edilecek. +schematic.delete.confirm = Bu şema tamamen silinecek. schematic.rename = Şemayı yeniden adlandır schematic.info = {0}x{1}, {2} blok schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. -stat.wave = Yenilen Dalgalar:[accent] {0} +stat.wave = Bozguna Uğratılan Dalgalar:[accent] {0} stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0} stat.built = İnşa Edilen Yapılar:[accent] {0} stat.destroyed = Yok Edilen Yapılar:[accent] {0} stat.deconstructed = Yıkılan Yapılar:[accent] {0} stat.delivered = Gönderilen Kaynaklar: -stat.playtime = Oynama Süresi:[accent] {0} +stat.playtime = [accent] {0} stat.rank = Rütbe: [accent]{0} -globalitems = [accent]Toplanan Kaynaklar +globalitems = [accent]Evrensel eşyalar map.delete = "[accent]{0}[]" haritasını silmek istediğine emin misin? level.highscore = Rekor: [accent]{0} level.select = Seviye Seçimi level.mode = Oyun Modu: coreattack = < Merkez saldırı altında! > -nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha tehlikesi +nearpoint = [[ [scarlet]İNİŞ ALANINDAN AYRIL![] ]\nİmha tehlikesi. database = Çekirdek Veritabanı savegame = Oyunu Kaydet loadgame = Oyunu Yükle @@ -83,7 +83,7 @@ none = minimap = Harita position = Pozisyon close = Kapat -website = Web sitesi +website = İnterbet sitesi quit = Çık save.quit = Kaydet & Çık maps = Haritalar @@ -100,47 +100,48 @@ committingchanges = Değişiklikler Uygulanıyor done = Bitti feature.unsupported = Cihazınızda bu özellik desteklenmemektedir. -mods.alphainfo = Modların alfa aşamasında olduğunu ve [scarlet]oldukça hatalı olabileceklerini[] unutmayın.\nBulduğunuz sorunları Mindustry GitHub'ı veya Discord'una bildirin. +mods.alphainfo = Modların Alpha aşamasında olduğunu ve [scarlet]hatalar barındırabileceğini[] unutmayın.\nBulduğunuz sorunları Mindustry GitHub'ı veya Discord'una bildirin. + mods = Modlar mods.none = [lightgray]Hiç mod bulunamadı! mods.guide = Mod Rehberi mods.report = Hata bildir mods.openfolder = Mod klasörünü aç -mods.reload = Yeniden Yükle -mods.reloadexit = Modları yeniden yüklemek için oyun kapanacak. +mods.reload = Tekrar yükle +mods.reloadexit = Oyun modları yüklemek için şimdi yeniden başlatılacak. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Etkin mod.disabled = [scarlet]Devre Dışı mod.disable = Devre Dışı Bırak mod.content = İçerik: mod.delete.error = Mod silinemiyor. Dosya kullanımda olabilir. -mod.requiresversion = [scarlet]Gereken en düşük oyun versiyonu: [accent]{0} -mod.outdated = [scarlet]V6 ile uyumlu değil (minGameVersion: 105 yok) +mod.requiresversion = [scarlet]Gereken en düşük oyun sürümü: [accent]{0} +mod.outdated = [scarlet]V6 ile uyumlu değil (no minGameVersion: 105) mod.missingdependencies = [scarlet]Bu modun çalışması için gereken modlar: {0} mod.erroredcontent = [scarlet]İçerik hatası. mod.errors = İçerik yüklenirken bir hata oluştu. -mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin. -mod.nowdisabled = [scarlet]'{0}' modunun çalışması için gerekli olan modlardan bazıları bulunamadı:[accent] {1}\n[lightgray]Önce bu modların indirilmesi gerekmektedir.\nBu mod otomatik olarak devre dışı bırakılacaktır. +mod.noerrorplay = [scarlet]Hatalı modlar var.[] Oynamadan önce bu modları devre dışı bırakın veya moddaki hataları düzeltin. +mod.nowdisabled = [scarlet]'{0}' modunun çalışması için gerekli modlardan bazıları bulunamadı:[accent] {1}\n[lightgray]Önce bu modların olması gerekmektedir.\nBu mod otomatik olarak devre dışı bırakılacaktır. mod.enable = Etkinleştir -mod.requiresrestart = Oyun mod değişikliklerini uygulamak için kapatılacak. +mod.requiresrestart = Oyun modların değişikliklerini uygulamak için kapatılacak. mod.reloadrequired = [scarlet]Yeniden Yükleme Gerekli -mod.import = Mod İçeri Aktar -mod.import.file = Dosya İçeri Aktar -mod.import.github = GitHub Modu İçeri Aktar -mod.jarwarn = [scarlet]Jar modları doğası gereği güvenli değildir.[]\nBu modu güvenilir bir kaynaktan içeri aktardığına emin ol! -mod.item.remove = Bu eşya[accent] '{0}'[] modunun bir parçası. Kaldırmak için modu silebilirsiniz. +mod.import = Modu İçeri Aktar +mod.import.file = Dosyaları İçeri Aktar +mod.import.github = GitHub Modunu İçeri Aktar +mod.jarwarn = [scarlet]JAR modları doğası gereğiyle güvenli değiller.[]\nModları güvenli bbir kaynaktan indirdiğine emin ol! +mod.item.remove = [accent] '{0}'[] modunun bir parçası. Kaldırmak için modu silmelisiniz. mod.remove.confirm = Bu mod silinecek. mod.author = [lightgray]Yayıncı:[] {0} mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0} mod.preview.missing = Bu modu atölyede yayınlamadan önce bir resim önizlemesi eklemelisiniz.\nMod dosyasına [accent]preview.png[] adlı bir resim yerleştirin ve tekrar deneyin. mod.folder.missing = Atölyede sadece klasör halindeki modlar yayınlanabilir.Bir modu klasöre çevirmek için, sadece mod dosyalarını bir klasöre çıkarın ve eski sıkıştırılmış dosyayı silin, sonra da oyunu tekrar başlatın ya da modlarınızı tekrar yükleyin. -mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. +mod.scripts.disable = Bu modlar patates ile açılamaz. Modları devre dışı bırakmalısın. about.button = Hakkında name = İsim: noname = Bir[accent] kullanıcı adı[] seçmelisin. -planetmap = Gezegen Haritası -launchcore = Kalkış +planetmap = Gezegen haritası +launchcore = Kalkış Yap filename = Dosya Adı: unlocked = Yeni içerik açıldı! completed = [accent]Tamamlandı @@ -148,23 +149,23 @@ techtree = Teknoloji Ağacı research.list = [lightgray]Araştırmalar: research = Araştır researched = [lightgray]{0} Araştırıldı. -research.progress = %{0} tamamlandı -players = {0} çevrimiçi oyuncu -players.single = {0} çevrimiçi oyuncu +research.progress = {0}% tamamlandı +players = Çevrimiçi {0} oyuncu var +players.single = Çevrimiçi {0} oyuncu var players.search = ara -players.notfound = [gray]hiç oyuncu bulunamadı +players.notfound = [gray]oyuncu bulunamadı server.closing = [accent]Sunucu kapatılıyor... server.kicked.kick = Sunucudan atıldın! server.kicked.whitelist = Beyaz listede değilsin. -server.kicked.serverClose = Sunucu kapandı. +server.kicked.serverClose = Sunucu kapatıldı. server.kicked.vote = Oylama ile sunucudan atıldın. server.kicked.clientOutdated = Eski sürüm! Oyununu güncelle! server.kicked.serverOutdated = Geçersiz sunucu!\nKurucudan oyununu güncellemesini iste! server.kicked.banned = Bu sunucudan yasaklandın. -server.kicked.typeMismatch = Bu sunucu senin inşa türünle uyumlu değil. +server.kicked.typeMismatch = Bu sunucu senin oyun sürümünün yapısıyla uygun değil. server.kicked.playerLimit = Sunucu dolu. Yer açılmasını bekle. server.kicked.recentKick = Yakın bir zamanda bir sunucudan atıldın.\nBağlanmadan önce bir süre bekle. -server.kicked.nameInUse = Sunucuda zaten o isimde biri var. +server.kicked.nameInUse = Sunucuda zaten senin isminde biri var. server.kicked.nameEmpty = Seçtiğin isim geçersiz. server.kicked.idInUse = Zaten bu sunucudasın! İki hesapla bir sunucuya bağlanamazsın. server.kicked.customClient = Bu sunucu özel sürümleri kabul etmiyor. Resmi bir sürüm indir. @@ -185,9 +186,9 @@ server.refreshing = Sunucu yenileniyor hosts.none = [lightgray]Yerel oyun bulunamadı! host.invalid = [scarlet]Kurucuya bağlanılamıyor. -servers.local = Yerel Sunucular -servers.remote = Uzak Sunucular -servers.global = Topuluk Sunucuları +servers.local = Yerel sunucular +servers.remote = Remote Servers +servers.global = Topluluk sunucuları trace = Oyuncuyu Takip Et trace.playername = Oyuncu İsmi: [accent]{0} @@ -196,7 +197,7 @@ trace.id = Özel ID: [accent]{0} trace.mobile = Mobil Sürüm: [accent]{0} trace.modclient = Özel Sürüm: [accent]{0} invalidid = Geçersiz Sürüm ID'si! Bir hata raporu gönder. -server.bans = Yasaklılar +server.bans = Yasaklananlar server.bans.none = Yasaklanmış oyuncu bulunamadı! server.admins = Yönetici server.admins.none = Yönetici bulunamadı! @@ -205,7 +206,7 @@ server.delete = Bu sunucuyu silmek istediğine emin misin? server.edit = Sunucuyu Düzenle server.outdated = [crimson]Güncel Olmayan Sunucu![] server.outdated.client = [crimson]Güncel Olmayan Sürüm![] -server.version = [gray]v{0} {1} +server.version = [gray]V{0} {1} server.custombuild = [accent]Özel Sürüm confirmban = Bu kullanıcıyı yasaklamak istediğine emin misin? confirmkick = Bu kullanıcıyı atmak istediğine emin misin? @@ -255,7 +256,7 @@ save.wave = Dalga {0} save.mode = Oyun modu: {0} save.date = Son Kayıt: {0} save.playtime = Oynama süresi: {0} -warning = Uyarı. +warning = Uyarı! confirm = Doğrula delete = Sil view.workshop = Atölyede görüntüle @@ -269,44 +270,44 @@ copylink = Bağlantıyı Kopyala back = Geri data.export = Veriyi Dışa Aktar data.import = Veriyi İçe Aktar -data.openfolder = Veri Klasörü Aç -data.exported = Veri dışa aktarıldı. +data.openfolder = Dosyasını Aç +data.exported = Dışa aktarıldı. data.invalid = Bu oyun verisi geçerli değil. data.import.confirm = Dışarıdan içeri veri aktarmak şu anki verilerinizin [scarlet]tamamını[] silecektir.[accent]Bu işlem geri alınamaz![]\n\nVeri içeri aktarıldığında oyundan çıkacaksınız. quit.confirm = Çıkmak istediğinize emin misiniz? -quit.confirm.tutorial = Ne yaptığınıza emin misiniz?\nÖğreticiyi [accent] Ayarlar -> Oyun -> Öğreticiyi Yeniden Al[]'dan tekrar yapabilirsiniz. +quit.confirm.tutorial = Ne yaptığınıza emin misiniz?\nÖğreticiyi [accent] Ayarlar->Oyun->Öğretici Modunu Yeniden Oyna'dan[] tekrar yapabilirsiniz. loading = [accent]Yükleniyor... reloading = [accent]Modlar Yeniden Yükleniyor... -saving = [accent]Kayıt ediliyor... -respawn = [accent][[{0}][] Çekirdekte yeniden doğ -cancelbuilding = [accent][[{0}][] Planı temizle -selectschematic = [accent][[{0}][] Seç ve kopyala -pausebuilding = [accent][[{0}][] İnşaatı durdur -resumebuilding = [scarlet][[{0}][] İnşaata devam et +saving = [accent]Kaydediliyor... +respawn = [accent] Çekirdekte yeniden doğmak için [[{0}][] +cancelbuilding = Planı temizlemek için [accent][[{0}][] +selectschematic = Seçmek ve kopyalamak için [accent][[{0}][] +pausebuilding = İnşaatı durdurmak için [accent][[{0}][] +resumebuilding = İnşaata devam etmek için [scarlet][[{0}][] wave = [accent]Dalga {0} wave.cap = [accent]Dalga {0}/{1} wave.waiting = [lightgray]{0} saniye içinde dalga başlayacak -wave.waveInProgress = [lightgray]Dalga gerçekleşiyor +wave.waveInProgress = [lightgray]Dalga geliyor waiting = [lightgray]Bekleniliyor... -waiting.players = Oyuncular bekleniliyor... +waiting.players = Oyuncular bekleniyor... wave.enemies = [lightgray]{0} Tane Düşman Kaldı wave.enemy = [lightgray]{0} Tane Düşman Kaldı wave.guardianwarn = [accent]{0}[] dalga sonra gardiyan yaklaşıyor. wave.guardianwarn.one = [accent]{0}[] dalga sonra gardiyan yaklaşıyor. -loadimage = Resim Aç -saveimage = Resim Kaydet +loadimage = Resmi Aç +saveimage = Resmi Kaydet unknown = Bilinmeyen custom = Özel builtin = Yerleşik map.delete.confirm = Bu haritayı silmek istediğinizden emin misiniz? Bunu geri alamazsınız! map.random = [accent]Rastgele Harita -map.nospawn = Bu haritada oyuncunun doğacağı hiç çekirdek yok! Editörden bu haritaya[accent] turuncu[] bir çekirdek ekleyin. +map.nospawn = Bu haritada oyuncunun doğabileceği bir çekirdek yok! Editörden bu haritaya[accent] turuncu[] bir çekirdek ekleyin. map.nospawn.pvp = Bu Haritada düşmanın doğacağı hiç çekirdek yok! Editörden bu haritaya [scarlet]turuncu olmayan[] çekirdekler ekleyin. map.nospawn.attack = Bu haritada oyuncunun saldıracağı hiç düşman çekirdeği yok! Editörden haritaya[scarlet] kırmızı[] çekirdekler ekleyin. -map.invalid = Haritayı açarken hata oldu: bozulmuş ya da geçersiz harita dosyası.- +map.invalid = Haritayı açarken hata oldu: bozulmuş ya da geçersiz harita dosyası olabilir. workshop.update = Nesneyi Güncelle workshop.error = Atölye ayrıntılarını alırken hata oluştu: {0} -map.publish.confirm = Bu haritayı yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye EULA'sına uyduğunuza emin olun, yoksa haritalarınız gözükmeyecektir! +map.publish.confirm = Bu haritayı yayınlamak istediğinize emin misiniz?\n[lightgray]Önce Atölye EULA'sına uyduğunuza emin olun, yoksa haritalarınız gözükmeyecektir! workshop.menu = Bu eşya ile ne yapmak istediğinizi seçin. workshop.info = Eşya açıklaması changelog = Değişim Listesi (isteğe bağlı): @@ -331,7 +332,6 @@ editor.generation = Oluşum: editor.ingame = Oyun içinde düzenle editor.publish.workshop = Atölyede Yayınla editor.newmap = Yeni Harita -editor.center = Ortala workshop = Atölye waves.title = Dalgalar waves.remove = Kaldır @@ -339,7 +339,7 @@ waves.never = waves.every = her waves.waves = dalga(lar) waves.perspawn = doğma noktası başına -waves.shields = kalkan/dalga +waves.shields = kalkanlar/dalga waves.to = doğru waves.guardian = Gardiyan waves.preview = Önizleme @@ -350,9 +350,9 @@ waves.invalid = Panoda geçersiz dalga sayısı var. 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 -wavemode.counts = miktarlar -wavemode.totals = toplamlar -wavemode.health = can +wavemode.counts = counts +wavemode.totals = totals +wavemode.health = health editor.default = [lightgray] details = Detaylar... @@ -405,7 +405,7 @@ toolmode.replace = Değiştir toolmode.replace.description = Sadece katı blokların üzerinde çizer. toolmode.replaceall = Hepsini Değiştir toolmode.replaceall.description = Haritadaki bütün blokları değiştirir. -toolmode.orthogonal = Çizgi +toolmode.orthogonal = Dik toolmode.orthogonal.description = Sadece dik çizgiler çizer. toolmode.square = Kare toolmode.square.description = Kare fırça. @@ -441,11 +441,11 @@ filter.option.circle-scale = Daire Ölçek filter.option.octaves = Oktavlar filter.option.falloff = Düşüş filter.option.angle = Açı -filter.option.amount = Miktar +filter.option.amount = Amount filter.option.block = Blok filter.option.floor = Zemin filter.option.flooronto = Hedef Zemin -filter.option.target = Target +filter.option.target = Hedef filter.option.wall = Duvar filter.option.ore = Maden filter.option.floor2 = İkincil Duvar @@ -457,7 +457,7 @@ width = Eni: height = Boyu: menu = Menü play = Oyna -campaign = Mücadele +campaign = Başla load = Yükle save = Kaydet fps = FPS: {0} @@ -465,7 +465,7 @@ ping = Ping: {0}ms language.restart = Dil ayarlarının çalışması için lütfen oyunu yeniden başlatın. settings = Ayarlar tutorial = Öğretici -tutorial.retake = Öğreticiyi Yeniden Al +tutorial.retake = Öğreticiyi Modunu Yeniden Oyna editor = Düzenleyici mapeditor = Harita Düzenleyicisi @@ -475,18 +475,21 @@ locked = Kilitli complete = [lightgray]Ulaş: requirement.wave = Bölge {1}'de Dalga {0} requirement.core = {0}`da Düşman Çekirdeği Yok Et -requirement.research = {0} araştır +requirement.research = Araştırma {0} +requirement.capture = Araştır {0} requirement.capture = {0} sektörünü ele geçir +resume = Bölgeye Devam Et:\n[lightgray]{0} bestwave = [lightgray]En İyi Dalga: {0} +launch = < KALKIŞ > launch.text = Kalkış research.multiplayer = Sadece kurucu araştırma yapabilir. uncover = Aç configure = Ekipmanı Yapılandır -loadout = Yükleme +loadout = Teçhizat resources = Kaynaklar bannedblocks = Yasaklı Bloklar addall = Hepsini Ekle -launch.destination = Varış Yeri: {0} +launch.destination = Destination: {0} configure.invalid = Miktar 0 ve {0} arasında bir sayı olmalı. zone.unlocked = [lightgray]{0} kilidi açıldı. zone.requirement.complete = {0}. dalgaya ulaşıldı:\n{1} bölge şartları karşılandı. @@ -498,7 +501,7 @@ add = Ekle... boss.health = Boss Canı connectfail = [crimson]Bağlantı hatası:\n\n[accent]{0} -error.unreachable = Sunucuya ulaşılamıyor.\nAdresin doğru yazıldığına emin misiniz? +error.unreachable = Sunucuya ulaşılamıyor.\nAdrwsin doğru yazıldığına emin misiniz? error.invalidaddress = Geçersiz adres. error.timedout = Zaman aşımı!\nSunucunun port yönlendirmeyi ayarladığına ve adresin doğru olduğuna emin olun! error.mismatch = Paket hatası:\nSunucu ve alıcı arasında versiyon uyuşmazlığı ihtimali var.\nHem sizde hem de sunucuda Mindustry'nin en son sürümü yüklü olduğuna emin olun! @@ -511,15 +514,15 @@ error.bloom = Kamaşma başlatılamadı.\nCihazınız bu özelliği desteklemiyo weather.rain.name = Yağmur weather.snow.name = Kar weather.sandstorm.name = Kum Fırtınası -weather.sporestorm.name = Spor Yağmuru +weather.sporestorm.name = Spor Kasırgası weather.fog.name = Sis sectors.unexplored = [lightgray]Keşfedilmemiş sectors.resources = Kaynaklar: sectors.production = Üretim: -sectors.stored = Depolanan: -sectors.resume = Devam Et -sectors.launch = Kalkış +sectors.stored = Depolanmış: +sectors.resume = Devam et +sectors.launch = Kalkış yap! sectors.select = Seç sectors.nonelaunch = [lightgray]yok (güneş) sectors.rename = Sektörü Yeniden Adlandır @@ -531,26 +534,26 @@ planet.sun.name = Güneş sector.groundZero.name = Sıfır Noktası sector.craters.name = Kraterler sector.frozenForest.name = Donmuş Orman -sector.ruinousShores.name = Harap Kıyılar +sector.ruinousShores.name = Yıkıcı Kıyılar sector.stainedMountains.name = Lekeli Dağlar -sector.desolateRift.name = Issız Aralık -sector.nuclearComplex.name = Kompleks Nükleer Üretimi -sector.overgrowth.name = Fazla Büyüme -sector.tarFields.name = Katran Alanları -sector.saltFlats.name = Tuz Düzlükleri +sector.desolateRift.name = Issız Rift +sector.nuclearComplex.name = Nükleer Üretim Kompleksi +sector.overgrowth.name = Büyüme (Google Translate) +sector.tarFields.name = Katran alanları +sector.saltFlats.name = Tuz Daireleri sector.fungalPass.name = Mantar Geçidi -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.saltFlats.description = Çölün kenar kısımlarında tuz düzlükleri uzanır. Bu konumda az miktarda kaynak bulunur.\n\nDüşman burada kompleks bir kaynak depolama sistemi inşa etti. Çekirdeklerini yok et. Ayakta hiçbir şey bırakma. -sector.craters.description = Eski savaşların bir anıtı olan bu kratere su dolmuş. Alanı yeniden ele geçir. Kum topla ve metacam üret. Taret ve matkapları soğutmak için su pompala. -sector.ruinousShores.description = Yıkıntıların ardında bir kıyı var. Bir zamanlar bu konum bir dizi kıyı defansına ev sahipliği yapmış. Geriye pek bir şey kalmamış. Sadece en temel savunma yapıları zarar görmeden kaldı, onun dışındaki her şey hurdaya geri dönüştü.\nDışa doğru genişletmeye devam et. Teknolojiyi yeniden keşfet. -sector.stainedMountains.description = Daha uzaklarda dağlar uzanıyor, daha sporlar tarafından istilaya uğramamışlar.\nAlandaki serbest titanyumu çıkart ve kullanmasını öğren.\n\nDüşman varlığı burada daha fazla. Onların daha güçlü birimlerini göndermelerine izin verme. -sector.overgrowth.description = Bu alan aşırı büyümüştür, sporların kaynağına daha yakındır.\nDüşman burada bir merkez kurdu. Titan birlikleri inşa et. Onu yok et. Kaybedileni geri al. -sector.tarFields.description = Bir petrol üretim bölgesinin eteklerinde, dağların ve çölün arasındadır. Birkaç kullanılabilir katran rezervlerinden biri. \nTerk edilmiş olmasına rağmen, bu alan yakınlarda bazı tehlikeli düşman güçlerine sahip. Onları küçümseme.\n\n[lightgray]Mümkünse petrol üretme teknolojisini araştır. -sector.desolateRift.description = Aşırı tehlikeli bir bölge. Bol kaynaklar, ama az yer mevcut. Yüksek yıkım riski. Mümkün olduğunca çabuk ayrılmaya çalış. Düşman saldırıları arasındaki uzun mesafeye aldanma. -sector.nuclearComplex.description = Toryum üretimi ve işlenmesi için eski bir tesistir, harabeye dönüşmüştür.\n[lightgray]Toryumu ve onun birçok kullanımını araştır. \n\nDüşman burada çok sayıda mevcut ve sürekli saldırganları arıyorlar. -sector.fungalPass.description = Yüksek dağlar ve daha alçak, sporla dolu topraklar arasında bir geçiş alanıdır. Burada küçük bir düşman keşif üssü bulunuyor.\nOnu yok et.\nDagger ve Crawler birlikleri kullan. İki çekirdeği çıkar. +sector.groundZero.description = Bir kez daha başlamak için en uygun yer. Düşük düşman tehdidi. Az kaynak.\nMümkün olduğunca çok kurşun ve bakır toplayın.\nDevam et. +sector.frozenForest.description = Burada bile, dağlara daha yakın yerlerde sporlar yayıldı. Soğuk hava onları sonsuza kadar tutamaz.\n\nime güce başlayın. Yanma jeneratörleri oluşturun. Onarıcıları kullanmayı öğrenin. +sector.saltFlats.description = Çölün eteklerinde Tuz Daireleri yatıyor. Bu konumda çok az kaynak bulunabilir.\n\nDüşman burada bir kaynak depolama kompleksi inşa etti. Çekirdeklerini yok edin. Hiçbir şeyi ayakta bırakmayın. +sector.craters.description = Eski savaşların kalıntısı olan bu kraterde su birikmiştir. Alanı geri kazanın. Kum toplayın. Metaglass kokusu. Taretleri ve matkapları soğutmak için su pompalayın. +sector.ruinousShores.description = Atıkları geçmiş sahil şeridi. Bir zamanlar, bu konum bir kıyı savunma dizisini barındırıyordu. Kalan pek bir şey yok. Sadece en temel savunma yapıları zarar görmeden kaldı, geri kalan her şey hurdaya indirildi.\nGenişlemeye dışarı doğru devam edin. Teknolojiyi yeniden keşfedin. +sector.stainedMountains.description = Daha iç kesimlerde dağlar uzanır, ancak sporlar tarafından lekelenmemiştir.\nBu alandaki bol titanyumu çıkarın. Nasıl kullanılacağını öğrenin.\n\nDüşman varlığı burada daha büyük. En güçlü birliklerini göndermeleri için onlara zaman vermeyin. +sector.overgrowth.description = Bu alan, sporların kaynağına daha yakın büyümüştür.\nDüşman burada bir karakol kurdu. Titan birimleri oluşturun. Onu yok et. Kaybolanı geri al. +sector.tarFields.description = Dağlarla çöl arasında bir petrol üretim bölgesinin dış mahalleleri. Kullanılabilir katran rezervlerine sahip birkaç alandan biri.\nTerk edilmiş olmasına rağmen, bu bölgenin yakınında bazı tehlikeli düşman kuvvetleri var. Onları küçümsemeyin.\n\n[lightgray]Mümkünse yağ işleme teknolojisini araştırın. (Google Translate) +sector.desolateRift.description = Son derece tehlikeli bir bölge. Bol kaynaklar, ancak az yer. Yüksek yıkım riski. Mümkün olduğunca çabuk ayrılın. Düşman saldırıları arasındaki uzun mesafeye aldanmayın. (Google Translate) +sector.nuclearComplex.description = Toryum üretimi ve işlenmesi için eski bir tesis, harabe haline getirildi.\n[lightgray]Toryumu ve birçok kullanım alanını araştırın.\n\nDüşman burada çok sayıda var ve sürekli saldırganları arıyor. (Google Translate) +sector.fungalPass.description = Yüksek dağlar ve alçak, sporla dolu topraklar arasında bir geçiş alanı. Burada küçük bir düşman keşif üssü bulunuyor.\nOnu yok et.\nHançer ve Paletli birimlerini kullanın. İki çekirdeği çıkarın. (Google Translate) settings.language = Dil settings.data = Oyun Verisi @@ -563,7 +566,7 @@ settings.sound = Ses settings.graphics = Grafikler settings.cleardata = Oyun Verisini Sil... settings.clear.confirm = Verileri silmek istediğinizden emin misiniz?\nBu işlemi geri alamazsınız! -settings.clearall.confirm = [scarlet]Uyarı![]\nBu işlem kayıtlar, haritalar açılan bloklar ve tuş atamaları dahil bütün verileri silecektir.\n"Tamam" tuşuna bastığınızda bütün verileriniz silinecek ve oyun kapanacaktır. +settings.clearall.confirm = [scarlet]Uyarı![]\nBu işlem kayıtlar, haritalar açılan bloklar ve tuş atamaları dahil bütün verileri silecektir.\n"ok" tuşuna bastığınızda bütün verileriniz silinecek ve oyun kapanacaktır. settings.clearsaves.confirm = Tüm kayıtlarınızı silmek istediğinizden emin misiniz? settings.clearsaves = Kayıtları Sil settings.clearresearch = Araştırma Verisini Sil @@ -573,7 +576,7 @@ settings.clearcampaignsaves.confirm = Mücadele modundaki oynadığınız tüm s paused = [accent] clear = Temizle banned = [scarlet]Yasaklı -unplaceable.sectorcaptured = [scarlet]Ele geçirilmiş sektör gerekir +unplaceable.sectorcaptured = [scarlet]Tamamlanan sektör gerektirir yes = Evet no = Hayır info.title = Bilgi @@ -650,8 +653,8 @@ ability.unitspawn = {0} Birliği Fabrikası ability.shieldregenfield = Kalkan Yenileme Alanı bar.drilltierreq = Daha İyi Matkap Gerekli -bar.noresources = Eksik Kaynaklar -bar.corereq = Çekirdek Tabanı Gerekli +bar.noresources = Eksik kaynak +bar.corereq = Çekirdek Gerekli bar.drillspeed = Matkap Hızı: {0}/s bar.pumpspeed = Pompa Hızı: {0}/s bar.efficiency = Verim: {0}% @@ -659,15 +662,14 @@ bar.powerbalance = Enerji: {0}/sn bar.powerstored = Depolanan: {0}/{1} bar.poweramount = Enerji: {0} bar.poweroutput = Enerji Üretimi: {0} -bar.powerlines = Bağlantılar: {0}/{1} bar.items = Eşyalar: {0} bar.capacity = Kapasite: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[birlik engellendi] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = Sıvı bar.heat = Isı bar.power = Enerji -bar.progress = İnşa İlerlemesi +bar.progress = Üretim Kapasitesi bar.input = Girdi bar.output = Çıktı @@ -696,9 +698,9 @@ unit.liquidunits = sıvı birimi unit.powerunits = enerji birimi unit.degrees = derece unit.seconds = saniye -unit.minutes = dakika +unit.minutes = mins unit.persecond = /sn -unit.perminute = /dk +unit.perminute = /min unit.timesspeed = x hız unit.percent = % unit.shieldhealth = kalkan canı @@ -711,27 +713,28 @@ category.power = Enerji category.liquids = Sıvılar category.items = Eşyalar category.crafting = Üretim -category.function = Fonksiyon +category.shooting = Silahlar category.optional = İsteğe Bağlı Geliştirmeler -setting.landscape.name = Yatayda sabitle +setting.landscape.name = Yatay sabitleme setting.shadows.name = Gölgeler setting.blockreplace.name = Otomatik Blok önerileri -setting.linear.name = Lineer Filtreleme +setting.linear.name = Çizgisel Filtreleme setting.hints.name = İpuçları -setting.flow.name = Kaynak Geçiş Hızını Göster[scarlet] (deneysel) +setting.flow.name = Kaynak Akış Hızını Göster[scarlet] (deneysel) setting.buildautopause.name = İnşa etmeyi otomatik olarak durdur +setting.mapcenter.name = Haritanın Merkezini Otomatik Oyuncuya Sabitle setting.animatedwater.name = Animasyonlu Su setting.animatedshields.name = Animasyonlu Kalkanlar -setting.antialias.name = Düzgünleştirme [lightgray](yeniden başlatma gerekebilir)[] -setting.playerindicators.name = Oyuncu Belirteçleri +setting.antialias.name = Düzgğnleştirme[lightgray] (yeniden başlatmak gerekebilir)[] +setting.playerindicators.name = Oyuncu Göstergeleri setting.indicators.name = Düşman/Müttefik Belirteçleri setting.autotarget.name = Otomatik Hedef Alma setting.keyboard.name = Fare+Klavye Kontrolleri setting.touchscreen.name = Dokunmatik Ekran Kontrolleri -setting.fpscap.name = Maksimum FPS +setting.fpscap.name = FPS Limiti setting.fpscap.none = Limitsiz setting.fpscap.text = {0} FPS -setting.uiscale.name = Arayüz Ölçeği [lightgray](yeniden başlatma gerekebilir)[] +setting.uiscale.name = Arayüz Ölçeği[lightgray] (yeniden başlatmak gerekebilir)[] setting.swapdiagonal.name = Her Zaman Çapraz Yerleştirme setting.difficulty.training = Eğitim setting.difficulty.easy = Kolay @@ -750,13 +753,13 @@ setting.seconds = {0} Saniye setting.blockselecttimeout.name = Blok Seçme Zaman Aşımı setting.milliseconds = {0} milisaniye setting.fullscreen.name = Tam Ekran -setting.borderlesswindow.name = Kenarsız Pencere [lightgray](yeniden açmak gerekebilir) +setting.borderlesswindow.name = Kenarsız Pencere[lightgray] (yeniden başlatmak gerekebilir) setting.fps.name = FPS Göster setting.smoothcamera.name = Yumuşak Geçişli Kamera setting.vsync.name = VSync -setting.pixelate.name = Pixelleştir [lightgray](animasyonları kapatır) +setting.pixelate.name = Pixelleştir[lightgray] (animasyonları kapatır) setting.minimap.name = Haritayı Göster -setting.coreitems.name = Çekirdekteki Eşyaları Göster [lightgray](üzerinde çalışılıyor) +setting.coreitems.name = Çekirdekteki Eşyaları Göster (WIP) setting.position.name = Oyuncu Noktasını Göster setting.musicvol.name = Müzik setting.atmosphere.name = Gezegen Atmosferini Göster @@ -767,14 +770,14 @@ setting.mutesound.name = Sesi Kapat setting.crashreport.name = Anonim Çökme Raporları Gönder setting.savecreate.name = Otomatik Kayıt Oluştur setting.publichost.name = Halka Açık Oyunlar -setting.playerlimit.name = Oyuncu Limiti +setting.playerlimit.name = Oyuncu limiti setting.chatopacity.name = Mesajlaşma Opaklığı setting.lasersopacity.name = Enerji Lazeri Opaklığı setting.bridgeopacity.name = Köprü Opaklığı setting.playerchat.name = Oyun-içi Konuşmayı Göster public.confirm = Oyununuzu halka açık yapmak ister misiniz?\n[accent]Oyunlarınıza herkes katılabilecektir.\n[lightgray]Bu seçenek daha sonra Ayarlar->Oyun->Halka Açık Oyunlar'dan değiştirilebilir. public.beta = Oyunun beta sürümlerinin halka açık lobiler yapamayacağını unutmayın. -uiscale.reset = Arayüz ölçeği değiştirildi.\nBu ölçeği onaylamak için "Tamam" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[] +uiscale.reset = UI ölçeği değiştirildi.\nBu ölçeği onaylamak için "OK" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[] uiscale.cancel = İptal Et ve Çık setting.bloom.name = Kamaşma keybind.title = Tuşları Yeniden Ata @@ -782,25 +785,25 @@ keybinds.mobile = [scarlet]Buradaki çoğu tuş ataması mobilde geçerli değil category.general.name = Genel category.view.name = Görünüm category.multiplayer.name = Çok Oyunculu -category.blocks.name = Blok Seçimi +category.blocks.name = Block Select command.attack = Saldır command.rally = Toplan command.retreat = Geri Çekil -command.idle = Boşta +command.idle = Idle placement.blockselectkeys = \n[lightgray]Tuş: [{0}, keybind.respawn.name = Yeniden Doğ -keybind.control.name = Birliği Kontrol Et +keybind.control.name = Birimi Kontrol Et keybind.clear_building.name = Binayı Temizle keybind.press = Bir tuşa basın... keybind.press.axis = Bir tuşa ya da yöne basın... keybind.screenshot.name = Harita Ekran Görüntüsü -keybind.toggle_power_lines.name = Enerji Lazerlerini Aç/Kapa -keybind.toggle_block_status.name = Blok İstatistiklerini Aç/Kapa -keybind.move_x.name = x Ekseninde Hareket -keybind.move_y.name = y Ekseninde Hareket +keybind.toggle_power_lines.name = Enerji lazerlerini aç/kapa +keybind.toggle_block_status.name = Toggle Block Statuses +keybind.move_x.name = X Ekseninde Hareket +keybind.move_y.name = Y Ekseninde Hareket keybind.mouse_move.name = Fareyi Takip Et -keybind.pan.name = Yatay Kaydırma Görünümü -keybind.boost.name = Yükselt +keybind.pan.name = Görüntüyü eski haline sabitle +keybind.boost.name = Takviye keybind.schematic_select.name = Bölge Seç keybind.schematic_menu.name = Şema Menüsü keybind.schematic_flip_x.name = Şemayı X ekseninde Döndür @@ -835,7 +838,7 @@ keybind.zoom.name = Yakınlaştırma/Uzaklaştırma keybind.menu.name = Menü keybind.pause.name = Durdur keybind.pause_building.name = İnşaatı Duraklat/İnşaata Devam Et -keybind.minimap.name = Harita +keybind.minimap.name = Mini Harita keybind.chat.name = Konuş keybind.player_list.name = Oyuncu Listesi keybind.console.name = Konsol @@ -846,7 +849,7 @@ keybind.chat_history_prev.name = Sohbet geçmişi önceki keybind.chat_history_next.name = Sohbet geçmişi sonraki keybind.chat_scroll.name = Sohbet Kaydırma keybind.drop_unit.name = Birlik Düşürme -keybind.zoom_minimap.name = Haritada Yakınlaştırma/Uzaklaştırma +keybind.zoom_minimap.name = Mini Haritada Yakınlaştırma/Uzaklaştırma mode.help.title = Modların açıklamaları mode.survival.name = Hayatta Kalma mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir. @@ -861,25 +864,24 @@ mode.custom = Özel Kurallar rules.infiniteresources = Sınırsız Kaynaklar rules.reactorexplosions = Reaktör Patlamaları -rules.schematic = Schematics Allowed rules.wavetimer = Dalga Zamanlayıcısı rules.waves = Dalgalar rules.attack = Saldırı Modu -rules.buildai = Yapay Zeka İnşası +rules.buildai = Yapay Zeka Binası rules.enemyCheat = Sonsuz AI (Kırmızı Takım) Kaynakları rules.blockhealthmultiplier = Blok Canı Çarpanı -rules.blockdamagemultiplier = Blok Hasarı Çarpanı +rules.blockdamagemultiplier = Block Damage Multiplier rules.unitbuildspeedmultiplier = Birim Üretim Hızı Çarpanı rules.unithealthmultiplier = Birim Canı Çarpanı rules.unitdamagemultiplier = Birim Hasarı Çapanı -rules.enemycorebuildradius = Düşman Çekirdeği İnşa Yasağı Yarıçapı: [lightgray](kare) -rules.wavespacing = Dalga Aralığı: [lightgray](sn) -rules.buildcostmultiplier = İnşa Ücreti Çarpanı +rules.enemycorebuildradius = Düşman Çekirdeği İnşa Yasağı Yarıçapı:[lightgray] (kare) +rules.wavespacing = Dalga Aralığı:[lightgray] (sec) +rules.buildcostmultiplier = İnşa ücreti Çarpanı rules.buildspeedmultiplier = İnşa Hızı Çarpanı -rules.deconstructrefundmultiplier = Yıkım İade Çarpanı +rules.deconstructrefundmultiplier = İade Çarpanını Yeniden Yapılandır rules.waitForWaveToEnd = Dalgalar Düşmanı Bekler -rules.dropzoneradius = İniş Noktası Yarıçapı: [lightgray](kare) -rules.unitammo = Birlikler Mermi Gerektiriyor +rules.dropzoneradius = İniş Noktası Yarıçapı:[lightgray] (kare) +rules.unitammo = Cephane Gerektiren Birimler rules.title.waves = Dalgalar rules.title.resourcesbuilding = Kaynaklar & İnşa rules.title.enemy = Düşmanlar @@ -887,19 +889,17 @@ rules.title.unit = Birlikler rules.title.experimental = Deneysel rules.title.environment = Çevre rules.lighting = Işıklandırma -rules.enemyLights = Enemy Lights -rules.fire = Ateş -rules.explosions = Blok/Birlik Patlama Hasarı +rules.fire = Fire +rules.explosions = Blok/Birim Patlama Hasarı rules.ambientlight = Ortam Işığı -rules.weather = Hava -rules.weather.frequency = Sıklık: -rules.weather.duration = Süreklilik: +rules.weather = Hava Durumu +rules.weather.frequency = Freakans: +rules.weather.duration = Süre: content.item.name = Eşyalar content.liquid.name = Sıvılar content.unit.name = Birimler content.block.name = Bloklar - item.copper.name = Bakır item.lead.name = Kurşun item.coal.name = Kömür @@ -913,7 +913,7 @@ item.surge-alloy.name = Akı Alaşımı item.spore-pod.name = Spor Kapsülü item.sand.name = Kum item.blast-compound.name = Patlayıcı Bileşik -item.pyratite.name = Pirratit +item.pyratite.name = Piratit item.metaglass.name = Metacam item.scrap.name = Hurda liquid.water.name = Su @@ -955,29 +955,28 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point -block.parallax.name = Parallax +block.resupply-point.name = İkmal Noktası +block.parallax.name = Paralaks block.cliff.name = Uçurum -block.sand-boulder.name = Kumlu Kaya Parçaları +block.sand-boulder.name = Kum Kaya Parçaları block.grass.name = Çimen block.slag.name = Cüruf -block.space.name = Uzay block.salt.name = Tuz -block.salt-wall.name = Tuz Duvar +block.salt-wall.name = Tuz Duvarı block.pebbles.name = Çakıl Taşları -block.tendrils.name = Tendriller -block.sand-wall.name = Kum Duvar +block.tendrils.name = Gerilim +block.sand-wall.name = Kum Duvarı block.spore-pine.name = Spor Çamı -block.spore-wall.name = Spor Duvar -block.boulder.name = Kaya Parçaları -block.snow-boulder.name = Karlı Kaya PArçaları +block.spore-wall.name = Spor Duvarı +block.boulder.name = Aınmış Kaya Parçası +block.snow-boulder.name = Snow Boulder block.snow-pine.name = Karlı Çam block.shale.name = Şist block.shale-boulder.name = Şist Kayası block.moss.name = Yosun block.shrubs.name = Çalılık -block.spore-moss.name = Spor Yosunu -block.shale-wall.name = Şist Duvar +block.spore-moss.name = Liken +block.shale-wall.name = Şeyl Duvar block.scrap-wall.name = Hurda Duvar block.scrap-wall-large.name = Büyük Hurda Duvar block.scrap-wall-huge.name = Dev Hurda Duvar @@ -1005,18 +1004,17 @@ block.craters.name = Krater block.sand-water.name = Kumlu Su block.darksand-water.name = Kara Kumlu Su block.char.name = Kömür -block.dacite.name = Dakit -block.dacite-wall.name = Dakit Duvar -block.dacite-boulder.name = Dakit Kaya Parçaları +block.dacite.name = Dacite +block.dacite-wall.name = Dacite Wall block.ice-snow.name = Buzlu Kar -block.stone-wall.name = Taş Duvar -block.ice-wall.name = Buz Duvar -block.snow-wall.name = Kar Duvar -block.dune-wall.name = Kara Kum Duvar +block.stone-wall.name = Stone Wall +block.ice-wall.name = Ice Wall +block.snow-wall.name = Snow Wall +block.dune-wall.name = Dune Wall block.pine.name = Çam -block.dirt.name = Toprak -block.dirt-wall.name = Toprak Duvar -block.mud.name = Çamur +block.dirt.name = Dirt +block.dirt-wall.name = Dirt Wall +block.mud.name = Mud block.white-tree-dead.name = Ölü Beyaz Ağaç block.white-tree.name = Beyaz Ağaç block.spore-cluster.name = Spor Kümesi @@ -1032,7 +1030,7 @@ block.dark-panel-4.name = Kara Panel 4 block.dark-panel-5.name = Kara Panel 5 block.dark-panel-6.name = Kara Panel 6 block.dark-metal.name = Kara Metal -block.basalt.name = Bazalt +block.basalt.name = Basalt block.hotrock.name = Sıcak Kaya block.magmarock.name = Magma Kayası block.copper-wall.name = Bakır Duvar @@ -1063,10 +1061,10 @@ block.distributor.name = Dağıtıcı block.sorter.name = Ayıklayıcı block.inverted-sorter.name = Ters Ayıklayıcı block.message.name = Mesaj -block.illuminator.name = Aydınlatıcı -block.illuminator.description = Küçük, kompakt, yapılandırılabilir bir ışık kaynağı. Çalışması için enerji gerekir. -block.overflow-gate.name = Taşma Geçidi -block.underflow-gate.name = Yana Taşma Geçidi +block.illuminator.name = Projektör +block.illuminator.description = Küçük, kompakt, yapılandırılabilir ışık kaynağı. Çalışması için enerji gerektirir. +block.overflow-gate.name = Taşma Geçiti +block.underflow-gate.name = Ters Taşma Geçiti block.silicon-smelter.name = Silikon Fırını block.phase-weaver.name = Faz Örücü block.pulverizer.name = Pulverizatör @@ -1079,9 +1077,9 @@ block.coal-centrifuge.name = Kömür Santrifüjü block.power-node.name = Enerji Noktası block.power-node-large.name = Büyük Enerji Noktası block.surge-tower.name = Akı Kulesi -block.diode.name = Batarya Diyotu -block.battery.name = Batarya -block.battery-large.name = Büyük Batarya +block.diode.name = Pil Diyot +block.battery.name = Pil +block.battery-large.name = Büyük Pil block.combustion-generator.name = Termik Jeneratör block.steam-generator.name = Buhar Jeneratörü block.differential-generator.name = Diferansiyel Jeneratörü @@ -1094,10 +1092,10 @@ block.cultivator.name = Ekici block.conduit.name = Boru block.mechanical-pump.name = Mekanik Pompa block.item-source.name = Sonsuz Eşya Kaynağı -block.item-void.name = Eşya Yokedici +block.item-void.name = Eşya Yok edici block.liquid-source.name = Sonsuz Sıvı Kaynağı -block.liquid-void.name = Sıvı Yokedici -block.power-void.name = Enerji Yokedici +block.liquid-void.name = Sıvı yok edici +block.power-void.name = Enerji Yok edici block.power-source.name = Sonsuz Enerji Kaynağı block.unloader.name = Boşaltıcı block.vault.name = Depo @@ -1109,14 +1107,14 @@ block.ripple.name = Ripple block.phase-conveyor.name = Faz Konveyörü block.bridge-conveyor.name = Konveyör Köprüsü block.plastanium-compressor.name = Plastanyum Kompresörü -block.pyratite-mixer.name = Pirratit Mikseri +block.pyratite-mixer.name = Piratit Mikseri block.blast-mixer.name = Patlayıcı Bileşik Mikseri block.solar-panel.name = Güneş Paneli block.solar-panel-large.name = Büyük Güneş Paneli block.oil-extractor.name = Petrol Çıkarıcı block.repair-point.name = Tamir Noktası block.pulse-conduit.name = Dalga Borusu -block.plated-conduit.name = Kaplı Boru +block.plated-conduit.name = Zırhlı boru block.phase-conduit.name = Faz Borusu block.liquid-router.name = Sıvı Yönlendiricisi block.liquid-tank.name = Sıvı Tankı @@ -1136,43 +1134,41 @@ block.surge-wall-large.name = Büyük Akı Duvarı block.cyclone.name = Cyclone block.fuse.name = Fuse block.shock-mine.name = Şok Mayını -block.overdrive-projector.name = Hızlandırma Projektörü +block.overdrive-projector.name = Aşırı Yükleme Projektörü block.force-projector.name = Kalkan Projektörü block.arc.name = Arc block.rtg-generator.name = RTG Jeneratörü block.spectre.name = Spectre block.meltdown.name = Meltdown -block.foreshadow.name = Foreshadow block.container.name = Konteyner block.launch-pad.name = Kalkış Pisti block.launch-pad-large.name = Büyük Kalkış Pisti block.segment.name = Segment block.command-center.name = Komuta Merkezi -block.ground-factory.name = Yer Birimi Fabrikası -block.air-factory.name = Hava Birimi Fabrikası -block.naval-factory.name = Deniz Birimi Fabrikası -block.additive-reconstructor.name = Eklemeli Yeniden Yapılandırıcı -block.multiplicative-reconstructor.name = Çarpmalı Yeniden Yapılandırıcı -block.exponential-reconstructor.name = Üstel Yeniden Yapılandırıcı -block.tetrative-reconstructor.name = Dörtlü Yeniden Yapılandırıcı -block.payload-conveyor.name = Yük Konveyörü -block.payload-router.name = Yük Yönlendirici +block.ground-factory.name = Kara Fabrikası +block.air-factory.name = Hava Fabrikası +block.naval-factory.name = Deniz Fabrikası +block.additive-reconstructor.name = Katıklı Yeniden Yapılandırma +block.multiplicative-reconstructor.name = Çarpımsal Yeniden Yapılandırıcı +block.exponential-reconstructor.name = Yükseltme Yapılandırıcısı +block.tetrative-reconstructor.name = Dev Yapılandırıcı +block.payload-conveyor.name = Birim Taşıma Konveyörü +block.payload-router.name = Birim Yönlendiricisi block.disassembler.name = Sökücü -block.silicon-crucible.name = Büyük Silikon Fırını -block.overdrive-dome.name = Hızlandırma Kubbesi +block.silicon-crucible.name = Silikon Pota +block.overdrive-dome.name = Aşırı Yükleme Kubbesi -block.switch.name = Düğme +block.switch.name = Şalter block.micro-processor.name = Mikro İşlemci -block.logic-processor.name = İşlemci +block.logic-processor.name = Mantık İşemcisi block.hyper-processor.name = Hiper İşlemci -block.logic-display.name = Ekran -block.large-logic-display.name = Büyük Ekran -block.memory-cell.name = Bellek Hücresi -block.memory-bank.name = Bellek Bankası +block.logic-display.name = Çıktı Ekranı +block.large-logic-display.name = Büyük Çıktı Ekranı +block.memory-cell.name = Hafıza Hücresi team.blue.name = mavi -team.crux.name = öz -team.sharded.name = parçalanmış +team.crux.name = kırmızı +team.sharded.name = turuncu team.orange.name = turuncu team.derelict.name = sahipsiz team.green.name = yeşil @@ -1180,7 +1176,7 @@ team.purple.name = mor tutorial.next = [lightgray] tutorial.intro = [scarlet]Mindustry öğreticisine hoş geldiniz.[]\n[accent]Bakır kazarak[] başlayın. Bunu yapmak için merkezinize yakın bir bakır madenine dokunun.\n\n[accent]{0}/{1} bakır -tutorial.intro.mobile = [scarlet]Mindustry öğreticisine hoş geldiniz.[]\nHareket etmek için ekranı kaydırın.\nYakınlaştırmak ve uzaklaştırmak için [accent]iki parmakla kıstırın[].\n[accent]Bakır kazarak[] başlayın. Bunu yapmak için merkezinize yakın bir bakır madenine dokunun.\n\n[accent]{0}/{1} bakır +tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.drill = Manuel olarak kazmak verimsizdir.\n[accent]Matkaplar []otomatikman kazabilir.\nSağ alttaki matkap sekmesine tıklayınız.\n[accent]Mekanik matkabı[] seçiniz. Tıklayarak bir bakır madenine yerleştirin.\n Yapımı durdurmak için [accent]sağ tıklayın[] ve yakınlaştırmak ve uzaklaştırmak için [accent]CTRL basılı tutarak tekerleği kaydırın[]. tutorial.drill.mobile = Manuel olarak kazmak verimsizdir.\n[accent]Matkaplar []otomatik olarak kazabilir.\nSağ alttaki matkap sekmesine dokunun.\n[accent]Mekanik matkabı[] seçin. \nDokunarak bir bakır madenine yerleştirin, sonra seçiminizi onaylamak için alttaki [accent] tik düğmesine[] basın.\nYerleştirmenizi iptal etmek için [accent] X butonuna[] basın. tutorial.blockinfo = Her bloğun farklı istatistikleri vardır. Her matkap sadece belirli madenleri kazabilir.\nBir bloğun bilgi ve istatistiklerine bakmak için,[accent] yapım menüsünde seçerken "?" tuşuna dokunun.[]\n\n[accent]Şimdi mekanik matkabın istatistiklerine erişin.[] @@ -1230,8 +1226,8 @@ block.plastanium-compressor.description = Petrol ve titanyumdan plastanyum üret block.phase-weaver.description = Kum ve radyoaktif toryumdan faz örgüsü üretir. Çalışması için çok miktarda enerji gerekir. block.alloy-smelter.description = Akı alaşımı üretmek için titanyum, kurşun, silikon ve bakırı birleştirir. block.cryofluid-mixer.description = Su ve titanyum tozunu karıştırıp kriyosıvı üretir. Toryum reaktörü kullanımı için gereklidir. -block.blast-mixer.description = Patlayıcı bileşen üretmek için spor kapsüllerini pirratit ile ezer ve karıştırır. -block.pyratite-mixer.description = Kömür, kurşun ve kumu karıştırıp oldukça yanıcı olan pirratit üretir. +block.blast-mixer.description = Patlayıcı bileşen üretmek için spor kapsüllerini piratit ile ezer ve karıştırır. +block.pyratite-mixer.description = Kömür, kurşun ve kumu karıştırıp oldukça yanıcı olan piratit üretir. block.melter.description = Wave taretlerinde kullanılması veya daha çok işlemesi için hurdayı eritip cürufa çevirir. block.separator.description = Cürufu mineral bileşenlerine ayırır. Soğutulmuş bileşenleri çıkarır. block.spore-press.description = Yağ çıkartmak için aşırı basınç altında spor kapsüllerini sıkıştırır. @@ -1243,13 +1239,13 @@ block.power-source.description = Sonsuz enerji verir. Sadece Yaratıcı Modda. block.item-source.description = Seçilen eşyadan sonsuz verir. Sadece Yaratıcı Modda. block.item-void.description = Verilen eşyaları yok eder. Sadece Yaratıcı Modda. block.liquid-source.description = Seçilen sıvıyı sonsuz verir. Sadece Yaratıcı Modda. -block.liquid-void.description = Verilen sıvıları yok eder. Sadece Yaratıcı Modda. +block.liquid-void.description = Removes any liquids. Sandbox only. block.copper-wall.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve silahları korumak için kullanışlıdır. block.copper-wall-large.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve taretleri korumak için kullanışlıdır.\nBirçok blok alan kaplar. block.titanium-wall.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar. block.titanium-wall-large.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar.\nBirçok blok alan kaplar. -block.plastanium-wall.description = Elektrik arklarını emen ve otomatik enerji noktası bağlantılarını engelleyen özel bir duvar türü. -block.plastanium-wall-large.description = Elektrik arklarını emen ve otomatik enerji noktası bağlantılarını engelleyen özel bir duvar türü.\nBirçok blok alan kaplar. +block.plastanium-wall.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections. +block.plastanium-wall-large.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.\nSpans multiple tiles. block.thorium-wall.description = Güçlü bir savunma bloğu.\nDüşmanlardan iyi korunma sağlar. block.thorium-wall-large.description = Güçlü bir savunma bloğu.\nDüşmanlardan iyi korunma sağlar.\nBirçok blok alan kaplar. block.phase-wall.description = Özel faz örgüsü bazlı yansıtıcı materyal ile kaplanmış bir duvar. Çoğu mermi çarpma anında saptırır. @@ -1265,23 +1261,23 @@ block.force-projector.description = Kendi etrafında altıgen güç alanı oluş block.shock-mine.description = Mayına basan düşmanlara hasar verir. Düşmana neredeyse görünmezdir. block.conveyor.description = Temel materyal taşıma bloğu. Materyalleri ileri taşır ve onları diğer bloklara otomatik olarak yerleştirir. Çevrilebilir. block.titanium-conveyor.description = Gelişmiş materyal taşıma bloğu. Materyalleri standart konveyörlerden daha hızlı taşır. -block.plastanium-conveyor.description = Materyalleri gruplar halinde taşır.\nArkadan eşyaları kabul eder ve öndeki üç yöne boşaltır. +block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. block.junction.description = Çakışan iki konveyör hattı arasında bir köprü görevi görür. İki farklı konveyörğn farklı hedeflere farklı materyalleri taşıdığı durumlarda kullanışlıdır. block.bridge-conveyor.description = Gelişmiş materyal taşıma bloğu. Materyalleri her türlü arazi veya binanın üzerinden üç bloğa kadar uzağa taşıyabilir. block.phase-conveyor.description = Gelişmiş materyal taşıma bloğu. Materyalleri kendisine bağlı bir başka faz konveyörüne ışınlamak için enerji kullanır. block.sorter.description = Materyalleri ayıklar. Eğer materyal seçilen ile eşleşiyorsa geçmesine izin verilir. Yoksa materyal sağa ya da sola atılır. -block.inverted-sorter.description = Materyalleri sıradan bir ayıklayıcı gibi işler, ancak seçili öğeleri önden değil yanlardan geçirir. +block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead. block.router.description = Materyalleri bir yönden alıp diğer üç yöne eşit olarak dağıtır. Materyalleri bir kaynaktan birden fazla hedefe iletmek için kullanılır.\n\n[scarlet]Asla üretim yapan binaların dibine yerleştirmeyin, yoksa istenmeyen materyaller tarafından tıkanabilir.[] block.distributor.description = Gelişmiş bir yönlendirici. Materyalleri yedi farklı yöne dağıtabilir. block.overflow-gate.description = Ayırıcı ve yönlendiricinin bir karışımı. Materyalleri sadece ön kısım kapalı olduğunda sağa ve sola atar. -block.underflow-gate.description = Taşma geçidinin zıttıdır. Sol ve sağ taraf kapalıysa materyalleri ön tarafa atar. +block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. block.mass-driver.description = En gelişmiş materyal taşıma bloğu. bir miktar materyalı alır ve onları uzak mesafedeki bir başka kütle sürücüsüne ateşler. Çalışması için enerji gerekir. block.mechanical-pump.description = Hiç enerji harcamayan, düşük çıktılı, ucuz bir pompa. block.rotary-pump.description = Daha gelişmiş bir pompa. Daha fazla sıvı depolar ama çalışması için enerji gerekir. block.thermal-pump.description = En iyi pompa. block.conduit.description = Temel sıvı taşıma bloğu. Sıvıları ileri taşır. Pompalar ve diğer borularla birlikte kullanılır. block.pulse-conduit.description = Gelişmiş bir sıvı taşıma bloğu. Sıvıları normal borulardan daha hızlı taşır ve onlardan daha fazla sıvı alır. -block.plated-conduit.description = Sıvıları dalga borusuyla aynı güçte taşır ancak daha fazla zırha sahiptir. Borular dışında başka bir şekilde yandan sıvı kabul etmez.\nDaha az sızıntı yapar. +block.plated-conduit.description = Moves liquids at the same rate as pulse conduits, but possesses more armor. Does not accept fluids from the sides by anything other than conduits.\nLeaks less. block.liquid-router.description = Sıvıları bir yönden alıp diğer üç yöne eşit olarak dağıtır. Ayrıca kendisi de bir miktar sıvı depolayabilir. Sıvıları bir kaynaktan birden fazla hedefe iletmek için kullanılır. block.liquid-tank.description = Çok miktarda sıvıyı depolar. İhtiyaçları devamlı olmayan sıvıları yedek olarak saklamakta ya da önemli blokların devamlı olarak soğutulmasında kullanılabilir. block.liquid-junction.description = Çakışan iki boru hattı arasında bir köprü görevi görür. İki farklı borunun farklı hedeflere farklı sıvıları taşıdığı durumlarda kullanışlıdır. @@ -1290,13 +1286,13 @@ block.phase-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları block.power-node.description = Bağlı düğümlere enerji sağlar. Ayrıca dibindeki bloklardan da enerji alıp onlara enerji verebilir. block.power-node-large.description = Daha fazla menzil ve bağlantıya sahip daha gelişmiş bir güç düğümü block.surge-tower.description = Daha az bağlantı sayısına sahip oldukça uzun menzilli bir güç düğümü. -block.diode.description = Pil gücü, bu bloktan yalnızca diğer tarafta daha az güç depolandığında sadece tek bir yöne akabilir. +block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. block.battery.description = Enerji fazlasını yedek olarak saklar. Enerji açığında sakladığı enerjiyi salar. block.battery-large.description = Sıradan bataryadan çok daha fazla enerji depolar. block.combustion-generator.description = Kömür gibi yanıcı materyalleri yakarak enerji üretir. block.thermal-generator.description = Sıcak bölgelere konulduğunda enerji üretir. block.steam-generator.description = Daha gelişmiş bir termik jeneratör. Daha verimlidir, ama buhar üretebilmek için suya ihtiyaç duyar. -block.differential-generator.description = Çok miktarda enerji üretir. Kriyosıvı ve yanan pirratit arasındaki sıcaklık farkından yararlanır. +block.differential-generator.description = Çok miktarda enerji üretir. Kriyosıvı ve yanan piratit arasındaki sıcaklık farkından yararlanır. block.rtg-generator.description = Basit, güvenilir bir reaktör. Bozunan radyoaktif materyallerin ısısını kullanır. block.solar-panel.description = Güneşten küçük miktarda enerji üretir. block.solar-panel-large.description = Standart güneş panelinin daha verimli bir versiyonu. @@ -1332,4 +1328,4 @@ block.cyclone.description = Büyük bir anti hava ve anti kara tareti. Yakının block.spectre.description = Dev bir çift namlulu top. Hava ve kara birimlerine iri, zırh delici mermiler atar. block.meltdown.description = Dev bir lazer topu. Yüklenip yakındaki düşmanlara uzun süreli lazer ışınları yollar. Çalışması için soğutucu gerekir. block.repair-point.description = Kendisine en yakın hasarlı birimi tamir eder. -block.segment.description = Gelen mermilere zarar verir ve onları yok eder. Lazer mermilere etki etmez. +block.segment.description = Gelen mermilere zarar verir ve onları yok eder. Lazer mermiler hedeflenmez. diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index dfd2984e75..e0902201a8 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -187,7 +187,7 @@ public class Vars implements Loadable{ public static ContentLoader content; public static GameState state; public static EntityCollisions collisions; - public static DefaultWaves defaultWaves; + public static Waves waves; public static LoopControl loops; public static Platform platform = new Platform(){}; public static Mods mods; @@ -256,7 +256,7 @@ public class Vars implements Loadable{ content = new ContentLoader(); loops = new LoopControl(); - defaultWaves = new DefaultWaves(); + waves = new Waves(); collisions = new EntityCollisions(); world = new World(); universe = new Universe(); diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 7005389549..7bc5c25761 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1191,7 +1191,7 @@ public class Blocks implements ContentList{ requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 25, Items.plastanium, 75, Items.thorium, 50)); size = 2; powerProduction = 4.5f; - itemDuration = 60 * 18f; + itemDuration = 60 * 15f; }}; solarPanel = new SolarGenerator("solar-panel"){{ @@ -1543,10 +1543,10 @@ public class Blocks implements ContentList{ hasPower = true; size = 2; - force = 5f; - scaledForce = 5.5f; - range = 160f; - damage = 0.4f; + force = 7f; + scaledForce = 7f; + range = 220f; + damage = 0.3f; health = 160 * size * size; rotateSpeed = 10; @@ -1991,8 +1991,8 @@ public class Blocks implements ContentList{ illuminator = new LightBlock("illuminator"){{ requirements(Category.effect, BuildVisibility.lightingOnly, with(Items.graphite, 12, Items.silicon, 8)); - brightness = 0.67f; - radius = 140f; + brightness = 0.75f; + radius = 160f; consumes.power(0.06f); }}; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 16aa3916ea..e76eb681a4 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -102,6 +102,7 @@ public class Bullets implements ContentList{ status = StatusEffects.burning; frontColor = Pal.lightishOrange; backColor = Pal.lightOrange; + makeFire = true; trailEffect = Fx.incendTrail; }}; @@ -265,6 +266,7 @@ public class Bullets implements ContentList{ homingPower = 0.08f; splashDamageRadius = 20f; splashDamage = 20f; + makeFire = true; hitEffect = Fx.blastExplosion; status = StatusEffects.burning; }}; @@ -323,6 +325,7 @@ public class Bullets implements ContentList{ frontColor = Pal.lightishOrange; backColor = Pal.lightOrange; status = StatusEffects.burning; + makeFire = true; inaccuracy = 3f; lifetime = 60f; }}; @@ -348,6 +351,7 @@ public class Bullets implements ContentList{ backColor = Pal.lightOrange; status = StatusEffects.burning; shootEffect = Fx.shootBig; + makeFire = true; pierceCap = 2; pierceBuilding = true; }}; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index a046bff46c..47b9995c77 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -257,33 +257,33 @@ public class Fx{ randLenVectors(e.id, 9, 3 + 20f * e.finpow(), (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.4f); }); - }).ground(), + }).layer(Layer.debris), unitLand = new Effect(30, e -> { color(Tmp.c1.set(e.color).mul(1.1f)); randLenVectors(e.id, 6, 17f * e.finpow(), (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.3f); }); - }).ground(), + }).layer(Layer.debris), unitLandSmall = new Effect(30, e -> { color(Tmp.c1.set(e.color).mul(1.1f)); randLenVectors(e.id, (int)(6 * e.rotation), 12f * e.finpow() * e.rotation, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.1f); }); - }).ground(), + }).layer(Layer.debris), unitPickup = new Effect(18, e -> { color(Pal.lightishGray); stroke(e.fin() * 2f); Lines.poly(e.x, e.y, 4, 13f * e.fout()); - }).ground(), + }).layer(Layer.debris), landShock = new Effect(12, e -> { color(Pal.lancerLaser); stroke(e.fout() * 3f); Lines.poly(e.x, e.y, 12, 20f * e.fout()); - }).ground(), + }).layer(Layer.debris), pickup = new Effect(18, e -> { color(Pal.lightishGray); @@ -1076,7 +1076,7 @@ public class Fx{ e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), 1f, 2f, rot + e.fin() * 50f * i); - }).ground(400f), + }).layer(Layer.debris, 400f), shellEjectMedium = new Effect(34f, e -> { color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin()); @@ -1099,7 +1099,7 @@ public class Fx{ }); } - }).ground(400f), + }).layer(Layer.debris, 400f), shellEjectBig = new Effect(22f, e -> { color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin()); @@ -1123,7 +1123,7 @@ public class Fx{ }); } - }).ground(400f), + }).layer(Layer.debris, 400f), railShoot = new Effect(24f, e -> { e.scaled(10f, b -> { @@ -1500,7 +1500,7 @@ public class Fx{ color(Tmp.c1.set(e.color).mul(1.5f)); stroke(e.fout() * 1.4f); Lines.circle(e.x, e.y, (2f + e.fin() * 4f) * e.rotation); - }).ground(), + }).layer(Layer.debris), bubble = new Effect(20, e -> { color(Tmp.c1.set(e.color).shiftValue(0.1f)); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index fe4b143b37..d61e8cf29f 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -875,6 +875,7 @@ public class UnitTypes implements ContentList{ health = 75; engineOffset = 5.5f; range = 140f; + targetAir = false; weapons.add(new Weapon(){{ y = 0f; @@ -1290,7 +1291,7 @@ public class UnitTypes implements ContentList{ collides = false; healPercent = 15f; - splashDamage = 320f; + splashDamage = 240f; splashDamageRadius = 120f; }}; }}); diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 13dc4c1221..5715edc5e6 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -363,7 +363,7 @@ public class NetClient implements ApplicationListener{ }); } - @Remote(variants = Variant.one) + @Remote(variants = Variant.one, called = Loc.server) public static void setPosition(float x, float y){ player.unit().set(x, y); player.set(x, y); diff --git a/core/src/mindustry/editor/EditorTile.java b/core/src/mindustry/editor/EditorTile.java index f735bd790c..8283b39159 100644 --- a/core/src/mindustry/editor/EditorTile.java +++ b/core/src/mindustry/editor/EditorTile.java @@ -50,9 +50,19 @@ public class EditorTile extends Tile{ return; } - op(OpType.block, block.id); - if(rotation != 0) op(OpType.rotation, (byte)rotation); - if(team != Team.derelict) op(OpType.team, (byte)team.id); + if(!isCenter()){ + EditorTile cen = (EditorTile)build.tile; + cen.op(OpType.rotation, (byte)build.rotation); + cen.op(OpType.team, (byte)build.team.id); + cen.op(OpType.block, block.id); + update(); + }else{ + if(build != null) op(OpType.rotation, (byte)build.rotation); + if(build != null) op(OpType.team, (byte)build.team.id); + op(OpType.block, block.id); + + } + super.setBlock(type, team, rotation); } diff --git a/core/src/mindustry/editor/MapEditor.java b/core/src/mindustry/editor/MapEditor.java index 1c33964e08..c460d7c042 100644 --- a/core/src/mindustry/editor/MapEditor.java +++ b/core/src/mindustry/editor/MapEditor.java @@ -137,7 +137,7 @@ public class MapEditor{ if(isFloor){ tile.setFloor(drawBlock.asFloor()); - }else{ + }else if(!(tile.block().isMultiblock() && !drawBlock.isMultiblock())){ if(drawBlock.rotate && tile.build != null && tile.build.rotation != rotation){ addTileOp(TileOp.get(tile.x, tile.y, (byte)OpType.rotation.ordinal(), (byte)rotation)); } @@ -157,7 +157,7 @@ public class MapEditor{ boolean hasOverlap(int x, int y){ Tile tile = world.tile(x, y); //allow direct replacement of blocks of the same size - if(tile != null && tile.isCenter() && tile.block() != drawBlock && tile.block().size == drawBlock.size){ + if(tile != null && tile.isCenter() && tile.block() != drawBlock && tile.block().size == drawBlock.size && tile.x == x && tile.y == y){ return false; } @@ -168,12 +168,10 @@ public class MapEditor{ for(int dy = 0; dy < drawBlock.size; dy++){ int worldx = dx + offsetx + x; int worldy = dy + offsety + y; - if(!(worldx == x && worldy == y)){ - Tile other = world.tile(worldx, worldy); + Tile other = world.tile(worldx, worldy); - if(other != null && other.block().isMultiblock()){ - return true; - } + if(other != null && other.block().isMultiblock()){ + return true; } } } diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 2436c62c2a..e908e7d934 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -81,7 +81,7 @@ public class WaveGraph extends Table{ for(int i = 0; i < values.length; i++){ float sum = 0; for(UnitType type : used.orderedItems()){ - sum += type.health * values[i][type.id]; + sum += (type.health) * values[i][type.id]; } float cx = graphX + i*spacing, cy = 2f + graphY + sum * (graphH - 4f) / maxHealth; @@ -160,7 +160,7 @@ public class WaveGraph extends Table{ used.add(spawn.type); } max = Math.max(max, values[index][spawn.type.id]); - healthsum += spawned * spawn.type.health; + healthsum += spawned * (spawn.type.health); sum += spawned; } maxTotal = Math.max(maxTotal, sum); diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index a374613b24..a98d03a923 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -64,7 +64,7 @@ public class WaveInfoDialog extends BaseDialog{ }).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty()); dialog.cont.row(); dialog.cont.button("@settings.reset", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> { - groups = JsonIO.copy(defaultWaves.get()); + groups = JsonIO.copy(waves.get()); buildGroups(); dialog.hide(); })); @@ -98,7 +98,7 @@ public class WaveInfoDialog extends BaseDialog{ if(experimental){ buttons.button("Random", Icon.refresh, () -> { groups.clear(); - groups = DefaultWaves.generate(1f / 10f); + groups = Waves.generate(1f / 10f); updateWaves(); }).width(200f); } @@ -125,7 +125,7 @@ public class WaveInfoDialog extends BaseDialog{ } void setup(){ - groups = JsonIO.copy(state.rules.spawns.isEmpty() ? defaultWaves.get() : state.rules.spawns); + groups = JsonIO.copy(state.rules.spawns.isEmpty() ? waves.get() : state.rules.spawns); cont.clear(); cont.stack(new Table(Tex.clear, main -> { diff --git a/core/src/mindustry/entities/Effect.java b/core/src/mindustry/entities/Effect.java index df13f762ab..4b7d642368 100644 --- a/core/src/mindustry/entities/Effect.java +++ b/core/src/mindustry/entities/Effect.java @@ -27,8 +27,8 @@ public class Effect{ /** Clip size. */ public float size; - public boolean ground; - public float groundDuration; + public float layer = Layer.effect; + public float layerDuration; public Effect(float life, float clipsize, Cons renderer){ this.id = all.size; @@ -42,14 +42,14 @@ public class Effect{ this(life,50f, renderer); } - public Effect ground(){ - ground = true; + public Effect layer(float l){ + layer = l; return this; } - public Effect ground(float duration){ - ground = true; - this.groundDuration = duration; + public Effect layer(float l, float duration){ + layer = l; + this.layerDuration = duration; return this; } @@ -87,7 +87,7 @@ public class Effect{ public float render(int id, Color color, float life, float lifetime, float rotation, float x, float y, Object data){ container.set(id, color, life, lifetime, rotation, x, y, data); - Draw.z(ground ? Layer.debris : Layer.effect); + Draw.z(layer); Draw.reset(); renderer.get(container); Draw.reset(); diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index d783c11ed7..0611b28f9a 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -79,8 +79,10 @@ public abstract class BulletType extends Content{ public boolean backMove = true; /** Bullet range override. */ public float range = -1f; - /** Heal Bullet Percent **/ + /** % of block health healed **/ public float healPercent = 0f; + /** whether to make fire on impact */ + public boolean makeFire = false; //additional effects @@ -158,7 +160,7 @@ public abstract class BulletType extends Content{ } public void hitTile(Bullet b, Building tile, float initialHealth){ - if(status == StatusEffects.burning){ + if(makeFire){ Fires.create(tile.tile); } hit(b); @@ -216,7 +218,7 @@ public abstract class BulletType extends Content{ }); } - if(status == StatusEffects.burning){ + if(makeFire){ indexer.eachBlock(null, x, y, splashDamageRadius, other -> other.team != b.team, other -> { Fires.create(other.tile); }); diff --git a/core/src/mindustry/entities/comp/ShieldComp.java b/core/src/mindustry/entities/comp/ShieldComp.java index 274286b801..d4a1ec7e4b 100644 --- a/core/src/mindustry/entities/comp/ShieldComp.java +++ b/core/src/mindustry/entities/comp/ShieldComp.java @@ -22,9 +22,9 @@ abstract class ShieldComp implements Healthc, Posc{ @Replace @Override public void damage(float amount){ - amount /= healthMultiplier; //apply armor amount = Math.max(amount - armor, minArmorDamage * amount); + amount /= healthMultiplier; hitTime = 1f; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 11efcf9948..3cba913fbb 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -237,12 +237,14 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void add(){ + team.data().updateCount(type, 1); //check if over unit cap if(count() > cap() && !spawnedByCore && !dead){ Call.unitCapDeath(self()); team.data().updateCount(type, -1); } + } @Override diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 44824e3674..4f5e632def 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -33,6 +33,7 @@ import mindustry.world.blocks.power.*; import mindustry.world.blocks.production.*; import mindustry.world.blocks.sandbox.*; import mindustry.world.blocks.storage.*; +import mindustry.world.meta.*; import java.io.*; import java.util.zip.*; @@ -295,9 +296,11 @@ public class Schematics implements Loadable{ /** Checks a schematic for deployment validity and adds it to the cache. */ private void checkLoadout(Schematic s, boolean validate){ Stile core = s.tiles.find(t -> t.block instanceof CoreBlock); + int cores = s.tiles.count(t -> t.block instanceof CoreBlock); //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))) return; + if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2 + || s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly || !t.block.unlocked()) || cores > 1))) return; //place in the cache loadouts.get((CoreBlock)core.block, Seq::new).add(s); diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 3ef6946424..8fd048a533 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -57,6 +57,8 @@ public class SectorInfo{ public float secondsPassed; /** Display name. */ public @Nullable String name; + /** Version of generated waves. When it doesn't match, new waves are generated. */ + public int waveVersion = -1; /** Special variables for simulation. */ public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope; @@ -118,12 +120,17 @@ public class SectorInfo{ state.rules.winWave = winWave; state.rules.attackMode = attack; + //assign new wave patterns when the version changes + if(waveVersion != Waves.waveVersion && state.rules.sector.preset == null){ + state.rules.spawns = Waves.generate(state.rules.sector.baseCoverage); + } + CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ entity.items.clear(); entity.items.add(items); //ensure capacity. - entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.storageCapacity))); + entity.items.each((i, a) -> entity.items.set(i, Mathf.clamp(a, 0, entity.storageCapacity))); } } @@ -143,6 +150,7 @@ public class SectorInfo{ spawnPosition = entity.pos(); } + waveVersion = Waves.waveVersion; waveSpacing = state.rules.waveSpacing; wave = state.wave; winWave = state.rules.winWave; @@ -200,8 +208,7 @@ public class SectorInfo{ } //get item delta - //TODO is preventing negative production a good idea? - int delta = Math.max(ent == null ? 0 : coreItemCounts[item.id], 0); + int delta = coreItemCounts[item.id]; //store means stat.means.add(delta); diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 6a2972f074..f8968b95e7 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -261,11 +261,12 @@ public class Teams{ } public void updateCount(UnitType type, int amount){ + if(type == null) return; unitCount = Math.max(amount + unitCount, 0); if(typeCounts == null || typeCounts.length <= type.id){ typeCounts = new int[Vars.content.units().size]; } - typeCounts [type.id] = Math.max(amount + typeCounts [type.id], 0); + typeCounts[type.id] = Math.max(amount + typeCounts[type.id], 0); } public QuadTree tree(){ diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/Waves.java similarity index 98% rename from core/src/mindustry/game/DefaultWaves.java rename to core/src/mindustry/game/Waves.java index 48582e0eb2..16d542b393 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/Waves.java @@ -9,7 +9,9 @@ import mindustry.type.*; import static mindustry.content.UnitTypes.*; -public class DefaultWaves{ +public class Waves{ + public static final int waveVersion = 1; + private Seq spawns; public Seq get(){ @@ -337,7 +339,7 @@ public class DefaultWaves{ step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty)); } - int bossWave = (int)(rand.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty)); + int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.6f, difficulty)); int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); //main boss progression diff --git a/core/src/mindustry/graphics/MenuRenderer.java b/core/src/mindustry/graphics/MenuRenderer.java index 2899efcdba..87ab169670 100644 --- a/core/src/mindustry/graphics/MenuRenderer.java +++ b/core/src/mindustry/graphics/MenuRenderer.java @@ -244,7 +244,7 @@ public class MenuRenderer implements Disposable{ float size = Math.max(icon.width, icon.height) * Draw.scl * 1.6f; flyers((x, y) -> { - Draw.rect(flyerType.region, x - 12f, y - 13f, flyerRot - 90); + Draw.rect(icon, x - 12f, y - 13f, flyerRot - 90); }); flyers((x, y) -> { @@ -264,7 +264,7 @@ public class MenuRenderer implements Disposable{ (engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) / 2f); Draw.color(); - Draw.rect(flyerType.region, x, y, flyerRot - 90); + Draw.rect(icon, x, y, flyerRot - 90); }); } diff --git a/core/src/mindustry/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java index 0aef1a19df..2c32e38e7b 100644 --- a/core/src/mindustry/io/SaveFileReader.java +++ b/core/src/mindustry/io/SaveFileReader.java @@ -2,6 +2,7 @@ package mindustry.io; import arc.struct.*; import arc.struct.ObjectMap.*; +import arc.util.*; import arc.util.io.*; import mindustry.world.*; @@ -60,9 +61,11 @@ public abstract class SaveFileReader{ protected final DataOutputStream dataBytesSmall = new DataOutputStream(byteOutputSmall); protected int lastRegionLength; + protected @Nullable CounterInputStream currCounter; protected void region(String name, DataInput stream, CounterInputStream counter, IORunner cons) throws IOException{ counter.resetCount(); + this.currCounter = counter; int length; try{ length = readChunk(stream, cons); @@ -70,8 +73,8 @@ public abstract class SaveFileReader{ throw new IOException("Error reading region \"" + name + "\".", e); } - if(length != counter.count() - 4){ - throw new IOException("Error reading region \"" + name + "\": read length mismatch. Expected: " + length + "; Actual: " + (counter.count() - 4)); + if(length != counter.count - 4){ + throw new IOException("Error reading region \"" + name + "\": read length mismatch. Expected: " + length + "; Actual: " + (counter.count - 4)); } } diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index a1e26c9b57..ab243b0823 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -107,7 +107,7 @@ public abstract class SaveVersion extends SaveFileReader{ state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing); state.stats = JsonIO.read(GameStats.class, map.get("stats", "{}")); state.rules = JsonIO.read(Rules.class, map.get("rules", "{}")); - if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get(); + if(state.rules.spawns.isEmpty()) state.rules.spawns = waves.get(); lastReadBuild = map.getInt("build", -1); if(!headless){ diff --git a/core/src/mindustry/maps/Map.java b/core/src/mindustry/maps/Map.java index 0fdc818139..62d47d9412 100644 --- a/core/src/mindustry/maps/Map.java +++ b/core/src/mindustry/maps/Map.java @@ -101,7 +101,7 @@ public class Map implements Comparable, Publishable{ //this replacement is a MASSIVE hack but it fixes some incorrect overwriting of team-specific rules. //may need to be tweaked later Rules result = JsonIO.read(Rules.class, base, tags.get("rules", "{}").replace("teams:{2:{infiniteAmmo:true}},", "")); - if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get(); + if(result.spawns.isEmpty()) result.spawns = Vars.waves.get(); return result; }catch(Exception e){ //error reading rules. ignore? diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index 4c7bd49a4e..4b878d3dd2 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -420,7 +420,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ state.rules.waves = sector.info.waves = true; //TODO better waves - state.rules.spawns = DefaultWaves.generate(difficulty); + state.rules.spawns = Waves.generate(difficulty); } @Override diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 4fdf9a34b0..eb05dc6c6b 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -295,7 +295,7 @@ public class ContentParser{ group.type = unit; } - Vars.defaultWaves.get().addAll(groups); + Vars.waves.get().addAll(groups); } readFields(unit, value, true); diff --git a/core/src/mindustry/type/ItemSeq.java b/core/src/mindustry/type/ItemSeq.java index 49055fb5b9..512033af23 100644 --- a/core/src/mindustry/type/ItemSeq.java +++ b/core/src/mindustry/type/ItemSeq.java @@ -21,6 +21,12 @@ public class ItemSeq implements Iterable, Serializable{ stacks.each(this::add); } + public void checkNegative(){ + for(int i = 0; i < values.length; i++){ + if(values[i] < 0) values[i] = 0; + } + } + public ItemSeq copy(){ ItemSeq out = new ItemSeq(); out.total = total; diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index d9d54ba91c..bee7809de5 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -170,6 +170,7 @@ public class Sector{ } }else if(hasBase()){ items.each((item, amount) -> info.items.add(item, Math.min(info.storageCapacity - info.items.get(item), amount))); + info.items.checkNegative(); saveInfo(); } } diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 18696d8930..02c482187b 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -217,6 +217,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{ //assign entity and type to blocks, so they act as proxies for this one other.build = entity; other.block = block; + } } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index 25725cd0a9..8ab8b5cb41 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -19,6 +19,7 @@ public class LiquidTurret extends Turret{ public ObjectMap ammoTypes = new ObjectMap<>(); public @Load("@-liquid") TextureRegion liquidRegion; public @Load("@-top") TextureRegion topRegion; + public boolean extinguish = true; public LiquidTurret(String name){ super(name); @@ -86,7 +87,7 @@ public class LiquidTurret extends Turret{ @Override protected void findTarget(){ - if(liquids.current().canExtinguish()){ + if(extinguish && liquids.current().canExtinguish()){ int tr = (int)(range / tilesize); for(int x = -tr; x <= tr; x++){ for(int y = -tr; y <= tr; y++){ @@ -144,7 +145,7 @@ public class LiquidTurret extends Turret{ @Override public boolean acceptLiquid(Building source, Liquid liquid){ return ammoTypes.get(liquid) != null - && (liquids.current() == liquid || (ammoTypes.containsKey(liquids.current()) + && (liquids.current() == liquid || (ammoTypes.containsKey(liquid) && liquids.get(liquids.current()) <= 1f / ammoTypes.get(liquids.current()).ammoMultiplier + 0.001f)); } } diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index 08035d9c84..bd3203cc95 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -12,6 +12,7 @@ import mindustry.graphics.*; import mindustry.world.*; import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.production.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -24,7 +25,7 @@ public class PayloadConveyor extends Block{ public PayloadConveyor(String name){ super(name); - + group = BlockGroup.transportation; size = 3; rotate = true; update = true; diff --git a/core/src/mindustry/world/blocks/logic/MessageBlock.java b/core/src/mindustry/world/blocks/logic/MessageBlock.java index 26722774c6..e67bf93680 100644 --- a/core/src/mindustry/world/blocks/logic/MessageBlock.java +++ b/core/src/mindustry/world/blocks/logic/MessageBlock.java @@ -40,7 +40,7 @@ public class MessageBlock extends Block{ int count = 0; for(int i = 0; i < text.length(); i++){ char c = text.charAt(i); - if(c == '\n' || c == '\r'){ + if(c == '\n'){ count ++; if(count <= maxNewlines){ tile.message.append('\n'); @@ -95,12 +95,12 @@ public class MessageBlock extends Block{ }else{ BaseDialog dialog = new BaseDialog("@editmessage"); dialog.setFillParent(false); - TextArea a = dialog.cont.add(new TextArea(message.toString().replace("\n", "\r"))).size(380f, 160f).get(); + TextArea a = dialog.cont.add(new TextArea(message.toString().replace("\r", "\n"))).size(380f, 160f).get(); a.setFilter((textField, c) -> { - if(c == '\n' || c == '\r'){ + if(c == '\n'){ int count = 0; for(int i = 0; i < textField.getText().length(); i++){ - if(textField.getText().charAt(i) == '\n' || textField.getText().charAt(i) == '\r'){ + if(textField.getText().charAt(i) == '\n'){ count++; } } diff --git a/core/src/mindustry/world/blocks/power/PowerNode.java b/core/src/mindustry/world/blocks/power/PowerNode.java index d8f8b05f8f..3cba419444 100644 --- a/core/src/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/mindustry/world/blocks/power/PowerNode.java @@ -280,8 +280,8 @@ public class PowerNode extends PowerBlock{ public void placed(){ if(net.client()) return; - Boolf valid = other -> other != null && other != this && ((!other.block.outputsPower && other.block.consumesPower) || - (other.block.outputsPower && !other.block.consumesPower) || other.block instanceof PowerNode) && linkValid(this, other) + Boolf valid = other -> other != null && other != this && + (other.block.outputsPower || other.block.consumesPower || other.block instanceof PowerNode) && linkValid(this, other) && !other.proximity().contains(this) && other.power.graph != power.graph; tempTileEnts.clear(); diff --git a/core/src/mindustry/world/modules/ItemModule.java b/core/src/mindustry/world/modules/ItemModule.java index 6cd96985cb..03ff5d5bb3 100644 --- a/core/src/mindustry/world/modules/ItemModule.java +++ b/core/src/mindustry/world/modules/ItemModule.java @@ -103,7 +103,7 @@ public class ItemModule extends BlockModule{ public void each(ItemConsumer cons){ for(int i = 0; i < items.length; i++){ - if(items[i] > 0){ + if(items[i] != 0){ cons.accept(content.item(i), items[i]); } } diff --git a/gradle.properties b/gradle.properties index 79032ee64c..c0255c10a9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=f316225521c91df6c132b13fa2044d969ec39231 +archash=64d0a3b6aee8ac3da5ae0db6e0ec2074349e996a diff --git a/ios/Info.plist.xml b/ios/Info.plist.xml index b93d1da2a7..7fbb619038 100644 --- a/ios/Info.plist.xml +++ b/ios/Info.plist.xml @@ -20,6 +20,8 @@ APPL CFBundleShortVersionString ${app.version} + UILaunchStoryboardName + LaunchScreen CFBundleIconName AppIcon CFBundleSignature @@ -53,6 +55,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown CFBundleDocumentTypes diff --git a/ios/build.gradle b/ios/build.gradle index 477e41db7c..13578d00b1 100644 --- a/ios/build.gradle +++ b/ios/build.gradle @@ -45,4 +45,11 @@ createIPA.dependsOn build robovm{ archs = "thumbv7:arm64" + + if(project.hasProperty("signIdentity")) println "iOS Sign Identity: " + project.property("signIdentity") + if(project.hasProperty("provisioningProfile")) println "iOS Provisioning Profile: " + project.property("provisioningProfile") + + iosSignIdentity = project.properties["signIdentity"] + iosProvisioningProfile = project.properties["provisioningProfile"] + iosSkipSigning = false } diff --git a/ios/data/Base.lproj/LaunchScreen.storyboard b/ios/data/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000000..be411aedcb --- /dev/null +++ b/ios/data/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ios/robovm.xml b/ios/robovm.xml index cc970c87a4..0e4b1003ae 100644 --- a/ios/robovm.xml +++ b/ios/robovm.xml @@ -22,6 +22,7 @@ arc.scene.** mindustry.gen.Call mindustry.net.** + mindustry.world.blocks.** com.android.okhttp.HttpHandler com.android.okhttp.HttpsHandler com.android.org.conscrypt.** @@ -37,6 +38,9 @@ z + libs/libObjectAL.a + libs/libarc.a + libs/libarc-freetype.a UIKit diff --git a/ios/src/mindustry/ios/IOSLauncher.java b/ios/src/mindustry/ios/IOSLauncher.java index d46c5b016c..d725c1053b 100644 --- a/ios/src/mindustry/ios/IOSLauncher.java +++ b/ios/src/mindustry/ios/IOSLauncher.java @@ -205,7 +205,7 @@ public class IOSLauncher extends IOSApplication.Delegate{ UIInterfaceOrientation o = UIApplication.getSharedApplication().getStatusBarOrientation(); return forced && (o == UIInterfaceOrientation.Portrait || o == UIInterfaceOrientation.PortraitUpsideDown); }); - t.add("Please rotate the device to landscape orientation to use the editor.").wrap().grow(); + t.add("Rotate the device to landscape orientation to use the editor.").wrap().grow(); }); })); }); diff --git a/server/server_template/run_server.sh b/server/server_template/run_server.sh index 8084a7149f..f55799380f 100755 --- a/server/server_template/run_server.sh +++ b/server/server_template/run_server.sh @@ -1 +1,2 @@ +#!/usr/bin/env bash java -jar server.jar diff --git a/server/src/mindustry/server/ServerControl.java b/server/src/mindustry/server/ServerControl.java index 7e1be67c52..06a117d1b0 100644 --- a/server/src/mindustry/server/ServerControl.java +++ b/server/src/mindustry/server/ServerControl.java @@ -42,8 +42,8 @@ public class ServerControl implements ApplicationListener{ protected static DateTimeFormatter dateTime = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss"), autosaveDate = DateTimeFormatter.ofPattern("MM-dd-yyyy_HH-mm-ss"); - private final CommandHandler handler = new CommandHandler(""); - private final Fi logFolder = Core.settings.getDataDirectory().child("logs/"); + public final CommandHandler handler = new CommandHandler(""); + public final Fi logFolder = Core.settings.getDataDirectory().child("logs/"); private Fi currentLogFile; private boolean inExtraRound; @@ -55,8 +55,7 @@ public class ServerControl implements ApplicationListener{ private Thread socketThread; private ServerSocket serverSocket; private PrintWriter socketOutput; - - private String yes; + private String suggested; public ServerControl(String[] args){ Core.settings.defaults( @@ -916,10 +915,10 @@ public class ServerControl implements ApplicationListener{ }); handler.register("yes", "Run the last suggested incorrect command.", arg -> { - if(yes == null){ + if(suggested == null){ err("There is nothing to say yes to."); }else{ - handleCommandString(yes); + handleCommandString(suggested); } }); @@ -953,7 +952,7 @@ public class ServerControl implements ApplicationListener{ if(closest != null){ err("Command not found. Did you mean \"" + closest.text + "\"?"); - yes = line.replace(response.runCommand, closest.text); + suggested = line.replace(response.runCommand, closest.text); }else{ err("Invalid command. Type 'help' for help."); } @@ -962,7 +961,7 @@ public class ServerControl implements ApplicationListener{ }else if(response.type == ResponseType.manyArguments){ err("Too many command arguments. Usage: " + response.command.text + " " + response.command.paramText); }else if(response.type == ResponseType.valid){ - yes = null; + suggested = null; } }