From df0bb9583bdb5cdfa1aa6f887eac257187713853 Mon Sep 17 00:00:00 2001 From: Volas171 <60143910+Volas171@users.noreply.github.com> Date: Fri, 16 Oct 2020 13:08:40 -0500 Subject: [PATCH 01/31] Update bundle_es.properties Added 6.0 new block translation and fixed some misspells/english missed words --- core/assets/bundles/bundle_es.properties | 244 +++++++++++------------ 1 file changed, 122 insertions(+), 122 deletions(-) diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 8c538a6974..678d3369c9 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -8,7 +8,7 @@ link.github.description = Código fuente del juego link.changelog.description = Lista de actualizaciones link.dev-builds.description = Versiones de 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.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 @@ -20,8 +20,8 @@ gameover = Tu núcleo ha sido destruido. gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! highscore = [accent]¡Nueva mejor puntuación! copied = Copiado. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +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 +125,9 @@ 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 = Import File +mod.import.file = Importar Archivo mod.import.github = Importar Mod de Github -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]Los mods que vienen en .jar son muy inseguros.[]\nTienes que estar seguro de que importaste este mod 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 +148,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 +278,7 @@ 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}][] to respawn in core +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 @@ -346,9 +346,9 @@ 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 = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = cuentas +wavemode.totals = totales +wavemode.health = vidas editor.default = [lightgray] details = Detalles... @@ -508,43 +508,43 @@ error.io = Error I/O de conexión. error.any = Error de red desconocido. error.bloom = Error al cargar el bloom.\nPuede que tu dispositivo no soporte esta característica. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Lluvia +weather.snow.name = Nieve +weather.sandstorm.name = Tormenta de arena +weather.sporestorm.name = Tormenta de esporas -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.unexplored = [lightgray]Unexplorado +sectors.resources = Materiales: +sectors.production = Produccion: +sectors.stored = Almacenado: +sectors.resume = Resumir +sectors.launch = Lanzar +sectors.select = Seleccionar +sectors.nonelaunch = [lightgray]nada (sun) -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +sector.groundZero.name = Zona de Impacto +sector.craters.name = Los Crateres +sector.frozenForest.name = Bosque Frio +sector.ruinousShores.name = Costas Ruinosas +sector.stainedMountains.name = Montañas Manchadas +sector.desolateRift.name = Grieta Desolada +sector.nuclearComplex.name = Complejo de Producción Nuclear +sector.overgrowth.name = Crecimiento excesivo +sector.tarFields.name = Campos de Alquitrán +sector.saltFlats.name = Salinas +sector.fungalPass.name = Pasage 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 @@ -558,8 +558,8 @@ 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 = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = Estas seguro que quieres borrar todos tus guardados? +settings.clearsaves = Borrar Guardados paused = [accent] < Pausado > clear = Limpiar banned = [scarlet]Baneado @@ -569,7 +569,7 @@ no = No info.title = [accent]Información error.title = [crimson]Un error ha ocurrido. error.crashtitle = Un error ha ocurrido. -unit.nobuild = [scarlet]Unit can't build +unit.nobuild = [scarlet]Unidad no puede construir blocks.input = Entrada blocks.output = Salida blocks.booster = Potenciador @@ -585,10 +585,10 @@ blocks.itemsmoved = Velocidad de movimiento blocks.launchtime = Tiempo entre lanzamientos blocks.shootrange = Rango de Disparo blocks.size = Tamaño -blocks.displaysize = Display Size +blocks.displaysize = Tamaño de pantalla blocks.liquidcapacity = Capacidad de Líquidos blocks.powerrange = Rango de Energía -blocks.linkrange = Link Range +blocks.linkrange = Rango de link blocks.instructions = Instructions blocks.powerconnections = Conexiones maximas blocks.poweruse = Consumo de Energía @@ -611,12 +611,12 @@ blocks.inaccuracy = Imprecisión blocks.shots = Disparos blocks.reload = Recarga blocks.ammo = Munición -blocks.shieldhealth = Shield Health -blocks.cooldowntime = Cooldown Time +blocks.shieldhealth = Vida del escudo +blocks.cooldowntime = Tiempo de Enfriamiento bar.drilltierreq = Se requiere un mejor taladro. -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Recursos faltantes +bar.corereq = Base de núcleo requerida bar.drillspeed = Velocidad del Taladro: {0}/s bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% @@ -660,7 +660,7 @@ unit.persecond = /seg unit.perminute = /min unit.timesspeed = x velocidad unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = Vida del escudo unit.items = objetos unit.thousands = k unit.millions = M @@ -677,9 +677,9 @@ setting.shadows.name = Sombras setting.blockreplace.name = Sugerir bloques al construir setting.linear.name = Filtrado Lineal setting.hints.name = Pistas -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = Mostrar tasa de flujo de recursos[scarlet] (experimental) setting.buildautopause.name = Auto-pausar construcción -setting.mapcenter.name = Auto Center Map To Player +setting.mapcenter.name = Autocentrar mapa al jugador setting.animatedwater.name = Agua Animada setting.animatedshields.name = Escudos Animados setting.antialias.name = Antialias[lightgray] (necesita reiniciar)[] @@ -712,15 +712,15 @@ setting.milliseconds = {0} milisegundos 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 = Smooth Camera +setting.smoothcamera.name = Cámara suave setting.blockselectkeys.name = Mostrar teclas de selección de bloque 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 @@ -747,10 +747,10 @@ category.blocks.name = Block Select command.attack = Atacar command.rally = Patrullar command.retreat = Retirarse -command.idle = Idle +command.idle = Libre placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.respawn.name = Respawnear +keybind.control.name = Controlar unidad keybind.clear_building.name = Eliminar construcción keybind.press = Presiona una tecla... keybind.press.axis = Pulsa un eje o botón... @@ -760,8 +760,8 @@ keybind.toggle_block_status.name = Toggle Block Statuses keybind.move_x.name = Mover x keybind.move_y.name = Mover y keybind.mouse_move.name = Seguír al ratón -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = Vista panorámica +keybind.boost.name = Impulsar keybind.schematic_select.name = Seleccionar región keybind.schematic_menu.name = Menu de esquématicos keybind.schematic_flip_x.name = Girar esquemático desde X @@ -811,7 +811,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 @@ -825,10 +825,10 @@ rules.reactorexplosions = Reactor Explosions 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 @@ -845,14 +845,14 @@ rules.title.resourcesbuilding = Recursos y Construcción rules.title.enemy = Enemigos rules.title.unit = Unidades rules.title.experimental = Experimental -rules.title.environment = Environment +rules.title.environment = El entorno rules.lighting = Iluminación -rules.fire = Fire +rules.fire = Fuego rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Iluminación ambiental -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Clima +rules.weather.frequency = Frequencia: +rules.weather.duration = Duracion: content.item.name = Objetos content.liquid.name = Líquidos @@ -885,19 +885,19 @@ item.radioactivity = [lightgray]Radioactividad: {0} unit.health = [lightgray]Vida: {0} unit.speed = [lightgray]Velocidad: {0} -unit.weapon = [lightgray]Weapon: {0} +unit.weapon = [lightgray]Arma: {0} unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% +unit.minespeed = [lightgray]Velocidad de minería: {0}% +unit.minepower = [lightgray]Poder de minería: {0} +unit.ability = [lightgray]Abilidad: {0} +unit.buildspeed = [lightgray]Velocidad de construcción: {0}% liquid.heatcapacity = [lightgray]Capacidad Térmica: {0} liquid.viscosity = [lightgray]Viscosidad: {0} liquid.temperature = [lightgray]Temperatura: {0} unit.dagger.name = Daga -unit.mace.name = Mace +unit.mace.name = Mazo unit.fortress.name = Fortaleza unit.nova.name = Nova unit.pulsar.name = Pulsar @@ -906,10 +906,10 @@ unit.crawler.name = Oruga unit.atrax.name = Atrax unit.spiroct.name = Spiroct unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Flare -unit.horizon.name = Horizon -unit.zenith.name = Zenith +unit.toxopid.name = Toxopodo +unit.flare.name = Bengala +unit.horizon.name = Horizonte +unit.zenith.name = Cenit unit.antumbra.name = Antumbra unit.eclipse.name = Eclipse unit.mono.name = Mono @@ -930,28 +930,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 = Punto de reabastecimiento +block.parallax.name = Paralaje block.cliff.name = Cliff block.sand-boulder.name = Piedra de Arena block.grass.name = Hierba block.slag.name = Slag block.salt.name = Sal -block.salt-wall.name = Salt Wall +block.salt-wall.name = Muro de sal block.pebbles.name = Guijarros block.tendrils.name = Zarcillos -block.sand-wall.name = Sand Wall +block.sand-wall.name = Muro de arena block.spore-pine.name = Pino de esporas -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +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 = Shale Wall +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 @@ -980,16 +980,16 @@ block.sand-water.name = Agua con Arena block.darksand-water.name = Agua con Arena Oscura block.char.name = Carbonizado block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite-wall.name = Muro de dacita block.ice-snow.name = Hielo Nieve -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.stone-wall.name = Pared de piedra +block.ice-wall.name = Muro de hielo +block.snow-wall.name = Muro de nieve +block.dune-wall.name = Muro de dunas block.pine.name = Pino -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Tierra +block.dirt-wall.name = Muro de tierra +block.mud.name = Suciedad block.white-tree-dead.name = Árbol Blanco Muerto block.white-tree.name = Árbol Blanco block.spore-cluster.name = Concentración de Esporas @@ -1005,7 +1005,7 @@ block.dark-panel-4.name = Panel Oscuro 4 block.dark-panel-5.name = Panel Oscuro 5 block.dark-panel-6.name = Panel Oscuro 6 block.dark-metal.name = Metal Oscuro -block.basalt.name = Basalt +block.basalt.name = Basalto block.hotrock.name = Roca Caliente block.magmarock.name = Roca de Magma block.copper-wall.name = Muro de Cobre @@ -1117,34 +1117,34 @@ block.meltdown.name = Fusión de Reactor block.container.name = Contenedor block.launch-pad.name = Pad de Lanzamiento block.launch-pad-large.name = Pad de Lanzamiento Grande -block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.segment.name = Segmento +block.command-center.name = Centro de comando +block.ground-factory.name = Fábrica de tierra +block.air-factory.name = Fábrica de aire +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 = 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 = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.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 team.blue.name = Azul team.crux.name = rojo team.sharded.name = naranja team.orange.name = Naranja -team.derelict.name = derelict +team.derelict.name = derelicto team.green.name = Verde team.purple.name = Púrpura @@ -1302,4 +1302,4 @@ block.cyclone.description = Una torre grande anti-aérea y anti-terrestre. Dispa block.spectre.description = Un cañon masivo de dos barriles. Dispara balas perforantes a objetivos de aire y tierra. block.meltdown.description = Un cañon láser masivo. Carga y dispara un rayo láser constante a enemigos cercanos. Requiere enfriamiento para operar. block.repair-point.description = Repara la unidad dañada más cercana a su alrededor. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. +block.segment.description = Daña y destruye los proyectiles entrantes. Los proyectiles láser no están dirigidos. From 5e9c64391ea07bd538c61b541d11de5825c70a5b Mon Sep 17 00:00:00 2001 From: Summet Date: Sun, 25 Oct 2020 23:17:41 +0300 Subject: [PATCH 02/31] Add shebang --- server/server_template/run_server.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/server/server_template/run_server.sh b/server/server_template/run_server.sh index 8084a7149f..60947d9c2a 100755 --- a/server/server_template/run_server.sh +++ b/server/server_template/run_server.sh @@ -1 +1,2 @@ +#!/bin/bash java -jar server.jar From 899f4fe994611edd456cd33bd97f84c4c4ffe5ca Mon Sep 17 00:00:00 2001 From: Summet Date: Mon, 26 Oct 2020 21:54:51 +0300 Subject: [PATCH 03/31] use user's env --- server/server_template/run_server.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/server_template/run_server.sh b/server/server_template/run_server.sh index 60947d9c2a..f55799380f 100755 --- a/server/server_template/run_server.sh +++ b/server/server_template/run_server.sh @@ -1,2 +1,2 @@ -#!/bin/bash +#!/usr/bin/env bash java -jar server.jar From a31e182905097ae8e4d4aa65cc60b0e531afc350 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 27 Oct 2020 14:29:15 -0400 Subject: [PATCH 04/31] Fixed nodes not connecting to batteries when placed --- core/src/mindustry/world/blocks/power/PowerNode.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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(); From a7d1f98f7eb3c35583590adbef3ac05d5f581494 Mon Sep 17 00:00:00 2001 From: summetdev Date: Wed, 28 Oct 2020 13:50:32 +0300 Subject: [PATCH 05/31] PayloadConveyor with transportation group --- .../mindustry/world/blocks/distribution/PayloadConveyor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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; From 63e4bca0989f5900448a03ad8d89a019bc9f8d94 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 09:22:27 -0400 Subject: [PATCH 06/31] Partial fix of editor multiblock undo/redo --- core/src/mindustry/content/Blocks.java | 6 +++--- core/src/mindustry/content/UnitTypes.java | 2 +- core/src/mindustry/editor/EditorTile.java | 16 +++++++++++++--- core/src/mindustry/editor/MapEditor.java | 10 ++++------ core/src/mindustry/world/Tile.java | 1 + gradle.properties | 2 +- 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 7005389549..24cf0788ad 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"){{ @@ -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/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index fe4b143b37..bf96d2dcf8 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1290,7 +1290,7 @@ public class UnitTypes implements ContentList{ collides = false; healPercent = 15f; - splashDamage = 320f; + splashDamage = 240f; splashDamageRadius = 120f; }}; }}); 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..7a2cc11bfb 100644 --- a/core/src/mindustry/editor/MapEditor.java +++ b/core/src/mindustry/editor/MapEditor.java @@ -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/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/gradle.properties b/gradle.properties index 79032ee64c..9863235bae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=f316225521c91df6c132b13fa2044d969ec39231 +archash=aac5351b3ebb9f598e02af6dcc1aaaa31994fa9b From 53e655698bf347241706679f5c890394f5d7eff9 Mon Sep 17 00:00:00 2001 From: Volas171 <60143910+Volas171@users.noreply.github.com> Date: Wed, 28 Oct 2020 08:32:23 -0500 Subject: [PATCH 07/31] Update bundle_es.properties --- core/assets/bundles/bundle_es.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 80cb6264bf..dad6c44fa3 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -1202,6 +1202,7 @@ 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 @@ -1368,4 +1369,4 @@ block.cyclone.description = Una torre grande anti-aérea y anti-terrestre. Dispa block.spectre.description = Un cañon masivo de dos barriles. Dispara balas perforantes a objetivos de aire y tierra. block.meltdown.description = Un cañon láser masivo. Carga y dispara un rayo láser constante a enemigos cercanos. Requiere enfriamiento para operar. block.repair-point.description = Repara la unidad dañada más cercana a su alrededor. -block.segment.description = Daña y destruye proyectiles enemigos. No apunta a láseres. \ No newline at end of file +block.segment.description = Daña y destruye proyectiles enemigos. No apunta a láseres. From fc317939e238ac5868a2a58be93ca322e09707bf Mon Sep 17 00:00:00 2001 From: Yakuzet <52811148+Yakuzet@users.noreply.github.com> Date: Wed, 28 Oct 2020 16:36:22 +0300 Subject: [PATCH 08/31] Update bundle_tr.properties I fixed all googled things --- core/assets/bundles/bundle_tr.properties | 426 +++++++++++------------ 1 file changed, 211 insertions(+), 215 deletions(-) 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. From 4940c277f6b59161c1ce19c36680457e8f1fccf8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 09:42:41 -0400 Subject: [PATCH 09/31] Fixed #3166 --- core/src/mindustry/entities/comp/ShieldComp.java | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/gradle.properties b/gradle.properties index 9863235bae..66f790efcc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=aac5351b3ebb9f598e02af6dcc1aaaa31994fa9b +archash=3a1a8bbeca9a5a0552817bb7f6aa16c90bdf5605 From e1fefd1664c24395056a4911220fd2cbb8cf95d8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 10:29:32 -0400 Subject: [PATCH 10/31] Updated RoboVM version --- build.gradle | 2 +- core/src/mindustry/editor/WaveGraph.java | 4 +-- ios/Info.plist.xml | 3 ++ ios/data/Base.lproj/LaunchScreen.storyboard | 36 +++++++++++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 ios/data/Base.lproj/LaunchScreen.storyboard 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/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/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/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 From e92d26b9e854be89e277defb37dab0396f8ded5d Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 10:29:45 -0400 Subject: [PATCH 11/31] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 66f790efcc..97792c0940 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=3a1a8bbeca9a5a0552817bb7f6aa16c90bdf5605 +archash=c489db42c3beae10116bd3baae6d21b1a70955ea From 68ab48a1d387ee673ae425ff915f84be24ac4c52 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 14:05:09 -0400 Subject: [PATCH 12/31] Fixed #3170 --- core/src/mindustry/content/Blocks.java | 8 ++++---- core/src/mindustry/core/NetClient.java | 2 +- core/src/mindustry/editor/MapEditor.java | 2 +- core/src/mindustry/entities/comp/UnitComp.java | 2 ++ core/src/mindustry/game/Teams.java | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 24cf0788ad..7bc5c25761 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -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; 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/MapEditor.java b/core/src/mindustry/editor/MapEditor.java index 7a2cc11bfb..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)); } 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/Teams.java b/core/src/mindustry/game/Teams.java index 6a2972f074..a745d40029 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -265,7 +265,7 @@ public class Teams{ 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(){ From 44286cee59e361df95e82a16e8effd3bb3d90d8a Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 18:51:42 -0400 Subject: [PATCH 13/31] Wave versions --- core/assets/bundles/bundle.properties | 2 +- core/src/mindustry/Vars.java | 4 ++-- core/src/mindustry/editor/WaveInfoDialog.java | 6 +++--- core/src/mindustry/game/Schematics.java | 4 +++- core/src/mindustry/game/SectorInfo.java | 8 ++++++++ .../game/{DefaultWaves.java => Waves.java} | 6 ++++-- core/src/mindustry/io/SaveVersion.java | 2 +- core/src/mindustry/maps/Map.java | 2 +- .../maps/planet/SerpuloPlanetGenerator.java | 2 +- core/src/mindustry/mod/ContentParser.java | 2 +- ios/src/mindustry/ios/IOSLauncher.java | 2 +- server/src/mindustry/server/ServerControl.java | 15 +++++++-------- 12 files changed, 33 insertions(+), 22 deletions(-) rename core/src/mindustry/game/{DefaultWaves.java => Waves.java} (98%) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 4ce05d5e0f..a59e2fff42 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/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/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/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 44824e3674..0f517ab3fe 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.*; @@ -297,7 +298,8 @@ public class Schematics implements Loadable{ Stile core = s.tiles.find(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)))) 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..6b2cd491d6 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,6 +120,11 @@ 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(); @@ -143,6 +150,7 @@ public class SectorInfo{ spawnPosition = entity.pos(); } + waveVersion = Waves.waveVersion; waveSpacing = state.rules.waveSpacing; wave = state.wave; winWave = state.rules.winWave; 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/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/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/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; } } From 3dae157a5e7e3cd863688a631e49748449cd645b Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 28 Oct 2020 19:35:15 -0400 Subject: [PATCH 14/31] Extra validation --- core/src/mindustry/game/Schematics.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 0f517ab3fe..4f5e632def 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -296,10 +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 - || s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly)))) return; + || 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); From 1e3b498671c37cb920752c29983c928336667830 Mon Sep 17 00:00:00 2001 From: MEEP of Faith Date: Wed, 28 Oct 2020 20:46:50 -0700 Subject: [PATCH 15/31] Any Layer Effects --- core/src/mindustry/content/Fx.java | 18 +++++++++--------- core/src/mindustry/entities/Effect.java | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) 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/entities/Effect.java b/core/src/mindustry/entities/Effect.java index 920729e608..3295a1ae00 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(); From f2b5553f54d53ae00ced02dead8be78fc92bc9e3 Mon Sep 17 00:00:00 2001 From: Sunny Kim <58885089+sk7725@users.noreply.github.com> Date: Thu, 29 Oct 2020 19:04:38 +0900 Subject: [PATCH 16/31] bug squish --- .../mindustry/world/blocks/defense/turrets/LiquidTurret.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index 25725cd0a9..5d2f7d9622 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -144,7 +144,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)); } } From 77e6030c59c841a8f9824500763ee9bbb2223305 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 10:26:32 -0400 Subject: [PATCH 17/31] Fixed #3173 --- core/src/mindustry/game/SectorInfo.java | 3 +-- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 6b2cd491d6..12fb485650 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -208,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/gradle.properties b/gradle.properties index 97792c0940..07a76d45aa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=c489db42c3beae10116bd3baae6d21b1a70955ea +archash=ddc3e52e7c4f534a22f4f69be22a7c32a9589784 From 0c418d1a0925015d41be4c1dd444bbc4c863d298 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 11:51:17 -0400 Subject: [PATCH 18/31] Libs --- core/src/mindustry/game/Teams.java | 3 ++- gradle.properties | 2 +- ios/robovm.xml | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index a745d40029..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/gradle.properties b/gradle.properties index 07a76d45aa..5ce1e856d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=ddc3e52e7c4f534a22f4f69be22a7c32a9589784 +archash=d4381c1fed03df6e69a6d99c75c723409c19f904 diff --git a/ios/robovm.xml b/ios/robovm.xml index cc970c87a4..d78a3e3c97 100644 --- a/ios/robovm.xml +++ b/ios/robovm.xml @@ -37,6 +37,8 @@ z + arc + arc-freetype UIKit From 43937037dbccba35670a5575b61c480c9e303855 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 12:30:39 -0400 Subject: [PATCH 19/31] Libs --- gradle.properties | 2 +- ios/robovm.xml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5ce1e856d4..85f96efd8e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=d4381c1fed03df6e69a6d99c75c723409c19f904 +archash=8443c0ad82fa3a705947c8cee3345aabcd326ef1 diff --git a/ios/robovm.xml b/ios/robovm.xml index d78a3e3c97..40e7905471 100644 --- a/ios/robovm.xml +++ b/ios/robovm.xml @@ -37,8 +37,9 @@ z - arc - arc-freetype + libs/ObjectAL + libs/arc + libs/arc-freetype UIKit From 0c1c41efc08c9cfcce223581e2f6503281709204 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 13:03:48 -0400 Subject: [PATCH 20/31] Libs --- ios/robovm.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/robovm.xml b/ios/robovm.xml index 40e7905471..a88f20c7ab 100644 --- a/ios/robovm.xml +++ b/ios/robovm.xml @@ -37,9 +37,9 @@ z - libs/ObjectAL - libs/arc - libs/arc-freetype + libObjectAL.a + libarc.a + libarc-freetype.a UIKit From fc7887399fd36822a07e8567416857def6a43333 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 13:29:54 -0400 Subject: [PATCH 21/31] suffering --- ios/robovm.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ios/robovm.xml b/ios/robovm.xml index a88f20c7ab..dd5a0ec223 100644 --- a/ios/robovm.xml +++ b/ios/robovm.xml @@ -37,9 +37,9 @@ z - libObjectAL.a - libarc.a - libarc-freetype.a + libs/libObjectAL.a + libs/libarc.a + libs/libarc-freetype.a UIKit From d7cdfbb02d4e229afc484961ac328241a734fc8a Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 15:10:09 -0400 Subject: [PATCH 22/31] suffering --- gradle.properties | 2 +- ios/build.gradle | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 85f96efd8e..1b7ed0f763 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=8443c0ad82fa3a705947c8cee3345aabcd326ef1 +archash=e23875998038f6f759670e400907279328fecc17 diff --git a/ios/build.gradle b/ios/build.gradle index 6faa19c97a..406f505703 100644 --- a/ios/build.gradle +++ b/ios/build.gradle @@ -45,4 +45,7 @@ createIPA.dependsOn build robovm{ archs = "thumbv7:arm64" + iosSignIdentity = project.property("signIdentity") + iosProvisioningProfile = project.property("provisioningProfile") + iosSkipSigning = false } From c899cb6a93c15cc119eaca7f495b3538cf78249b Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 15:44:06 -0400 Subject: [PATCH 23/31] suffering --- gradle.properties | 2 +- ios/build.gradle | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1b7ed0f763..15caa5bd91 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=e23875998038f6f759670e400907279328fecc17 +archash=6defcbeb0427d9332818a6c79398f021d9c4125a diff --git a/ios/build.gradle b/ios/build.gradle index 406f505703..6590c738c0 100644 --- a/ios/build.gradle +++ b/ios/build.gradle @@ -45,6 +45,10 @@ 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.property("signIdentity") iosProvisioningProfile = project.property("provisioningProfile") iosSkipSigning = false From cd6516786bab6d8db655978f959ee087d2e44ec8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 16:07:01 -0400 Subject: [PATCH 24/31] suffering --- ios/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/build.gradle b/ios/build.gradle index 6590c738c0..57b3dcb185 100644 --- a/ios/build.gradle +++ b/ios/build.gradle @@ -49,7 +49,7 @@ robovm{ if(project.hasProperty("signIdentity")) println "iOS Sign Identity: " + project.property("signIdentity") if(project.hasProperty("provisioningProfile")) println "iOS Provisioning Profile: " + project.property("provisioningProfile") - iosSignIdentity = project.property("signIdentity") - iosProvisioningProfile = project.property("provisioningProfile") + iosSignIdentity = project.properties["signIdentity"] + iosProvisioningProfile = project.properties["provisioningProfile"] iosSkipSigning = false } From 1663497e6c754e5d2880e81af44bdd22a0fbe7f7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 19:03:58 -0400 Subject: [PATCH 25/31] Better save validation --- core/src/mindustry/content/UnitTypes.java | 1 + core/src/mindustry/editor/DrawOperation.java | 4 ++-- core/src/mindustry/entities/bullet/BulletType.java | 10 ++++++---- core/src/mindustry/io/SaveFileReader.java | 10 ++++++++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index bf96d2dcf8..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; diff --git a/core/src/mindustry/editor/DrawOperation.java b/core/src/mindustry/editor/DrawOperation.java index 7910de4892..53134663ea 100755 --- a/core/src/mindustry/editor/DrawOperation.java +++ b/core/src/mindustry/editor/DrawOperation.java @@ -13,7 +13,7 @@ public class DrawOperation{ private MapEditor editor; private LongSeq array = new LongSeq(); - public DrawOperation(MapEditor editor) { + public DrawOperation(MapEditor editor){ this.editor = editor; } @@ -37,7 +37,7 @@ public class DrawOperation{ } } - private void updateTile(int i) { + private void updateTile(int i){ long l = array.get(i); array.set(i, TileOp.get(TileOp.x(l), TileOp.y(l), TileOp.type(l), getTile(editor.tile(TileOp.x(l), TileOp.y(l)), TileOp.type(l)))); setTile(editor.tile(TileOp.x(l), TileOp.y(l)), TileOp.type(l), TileOp.value(l)); diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 8e06cf466e..9b2cb9af02 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); @@ -209,14 +211,14 @@ public abstract class BulletType extends Content{ Damage.status(b.team, x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround); } - if(healPercent > 0f) { + if(healPercent > 0f){ indexer.eachBlock(b.team, x, y, splashDamageRadius, other -> other.damaged(), other -> { Fx.healBlockFull.at(other.x, other.y, other.block.size, Pal.heal); other.heal(healPercent / 100f * other.maxHealth()); }); } - 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/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java index 0aef1a19df..85f2d86677 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)); } } @@ -114,8 +117,11 @@ public abstract class SaveFileReader{ /** Reads a chunk of some length. Use the runner for reading to catch more descriptive errors. */ public int readChunk(DataInput input, boolean isShort, IORunner runner) throws IOException{ int length = isShort ? input.readUnsignedShort() : input.readInt(); + int pos = currCounter.count; lastRegionLength = length; runner.accept(input); + + if(pos + length != currCounter.count) throw new IOException("Read length mismatch. Expected: " + length + ", Actual: " + (currCounter.count - pos)); return length; } From ae35b2ff7eb197fc3e0c45a14aafc80da2970a33 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 19:04:37 -0400 Subject: [PATCH 26/31] arc --- core/src/mindustry/content/Bullets.java | 4 ++++ gradle.properties | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) 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/gradle.properties b/gradle.properties index 15caa5bd91..002a708536 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=6defcbeb0427d9332818a6c79398f021d9c4125a +archash=111e6e5134d06c8b017a126d8884cf49978b219c From 150343b5f9bcfa49488d9140610581f858f3126a Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 19:33:07 -0400 Subject: [PATCH 27/31] suffering --- ios/robovm.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/ios/robovm.xml b/ios/robovm.xml index dd5a0ec223..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.** From a9f5aa9220f8aab5ae676933193921727727d5f5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 29 Oct 2020 19:58:10 -0400 Subject: [PATCH 28/31] suffering --- core/src/mindustry/io/SaveFileReader.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/src/mindustry/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java index 85f2d86677..2c32e38e7b 100644 --- a/core/src/mindustry/io/SaveFileReader.java +++ b/core/src/mindustry/io/SaveFileReader.java @@ -117,11 +117,8 @@ public abstract class SaveFileReader{ /** Reads a chunk of some length. Use the runner for reading to catch more descriptive errors. */ public int readChunk(DataInput input, boolean isShort, IORunner runner) throws IOException{ int length = isShort ? input.readUnsignedShort() : input.readInt(); - int pos = currCounter.count; lastRegionLength = length; runner.accept(input); - - if(pos + length != currCounter.count) throw new IOException("Read length mismatch. Expected: " + length + ", Actual: " + (currCounter.count - pos)); return length; } From ecaa0a4eaa9b8365fba2d2e6a36b85511dc5eea0 Mon Sep 17 00:00:00 2001 From: Sunny Kim <58885089+sk7725@users.noreply.github.com> Date: Fri, 30 Oct 2020 16:44:54 +0900 Subject: [PATCH 29/31] Some liquid turrets are not caring enough --- .../mindustry/world/blocks/defense/turrets/LiquidTurret.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index 5d2f7d9622..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++){ From 36fdf4afbcc91755ab0ca20cd814f943c4d808a2 Mon Sep 17 00:00:00 2001 From: Voz-Duh Date: Fri, 30 Oct 2020 14:21:13 +0300 Subject: [PATCH 30/31] Full Unit In Menu --- core/src/mindustry/graphics/MenuRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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); }); } From 782307374fd3d61af2b6de06824d22c789a4f180 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 30 Oct 2020 09:24:05 -0400 Subject: [PATCH 31/31] Fixed #3189 / Fixed #3187 --- core/src/mindustry/game/SectorInfo.java | 2 +- core/src/mindustry/type/ItemSeq.java | 6 ++++++ core/src/mindustry/type/Sector.java | 1 + core/src/mindustry/world/blocks/logic/MessageBlock.java | 8 ++++---- core/src/mindustry/world/modules/ItemModule.java | 2 +- gradle.properties | 2 +- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 12fb485650..8fd048a533 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -130,7 +130,7 @@ public class SectorInfo{ 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))); } } 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/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/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 002a708536..c0255c10a9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=111e6e5134d06c8b017a126d8884cf49978b219c +archash=64d0a3b6aee8ac3da5ae0db6e0ec2074349e996a