diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index b096e11a41..05e0d30698 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -3,6 +3,7 @@ package="io.anuke.mindustry"> + diff --git a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java index bf49845330..0c07378e87 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java @@ -21,7 +21,7 @@ public class SerializeProcess extends BaseProcessor{ /** Target class name. */ private static final String className = "Serialization"; /** Name of the base package to put all the generated classes. */ - private static final String data = "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"; + private static final String data = "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"; @Override public void process(RoundEnvironment env) throws Exception{ diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 50bc3e2e66..2a2be22d01 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -801,7 +801,7 @@ item.coal.name = Carbón item.graphite.name = Grafito item.titanium.name = Titanio item.thorium.name = Torio -item.silicon.name = Silicona +item.silicon.name = Silicio item.plastanium.name = Plastanio item.phase-fabric.name = Tejido de fase item.surge-alloy.name = Aleación Eléctrica @@ -955,7 +955,7 @@ block.illuminator.name = Iluminador block.illuminator.description = Una fuente de luz pequeña, compacta y configurable. Requiere poder para funcionar. block.overflow-gate.name = Compuerta de Desborde block.underflow-gate.name = Compuerta de Subdesbordamiento -block.silicon-smelter.name = Horno para Silicona +block.silicon-smelter.name = Horno para Silicio block.phase-weaver.name = Tejedor de Fase block.pulverizer.name = Pulverizador block.cryofluidmixer.name = Mezclador de Criogénicos @@ -1136,11 +1136,11 @@ unit.revenant.description = Una unidad aérea pesada con misiles. block.message.description = Almacena un mensaje. Se utiliza para comunicarse entre aliados. block.graphite-press.description = Comprime carbón en piezas de grafito puro. block.multi-press.description = Una versión mejorada de la prensa de grafito. Utiliza agua y energía para procesar carbón rápida y eficientemente. -block.silicon-smelter.description = Reduce la arena con carbón puro. Produce silicona. +block.silicon-smelter.description = Reduce la arena con carbón puro. Produce silicio. block.kiln.description = Funde arena y plomo en metacristal. Requiere cantidades pequeñas de energía. block.plastanium-compressor.description = Produce plastanio con aceite y titanio. block.phase-weaver.description = Produce tejido de fase del torio radioactivo y altas cantidades de arena. -block.alloy-smelter.description = Produce aleación eléctrica con titanio, plomo, silicona y cobre. +block.alloy-smelter.description = Produce aleación eléctrica con titanio, plomo, silicio y cobre. block.cryofluidmixer.description = Combina agua y titanio en líquido criogénico, que es mucho más eficiente para enfriar. block.blast-mixer.description = Usa aceite para transformar pirotita en un objeto menos inflamable pero más explosivo: compuesto explosivo. block.pyratite-mixer.description = Mezcla carbón, plomo y arena en pirotita altamente inflamable. @@ -1170,7 +1170,7 @@ block.surge-wall.description = El bloque defensivo más fuerte.\nTiene una peque block.surge-wall-large.description = El bloque defensivo más fuerte.\nTiene una pequeña probabilidad de disparar rayos al atacante.\nOcupa múltiplies casillas. block.door.description = Una puerta pequeña que puede ser abierta y cerrada tocándola.\nSi está abirta, los enemigos pueden moverse y disparar a través de ella. block.door-large.description = Una puerta grande que puede ser abierta y cerrada tocándola.\nSi está abirta, los enemigos pueden moverse y disparar a través de ella.\nOcupa múltiples casillas. -block.mender.description = Repara bloques cercanos periódicamente. Mantiene a las defensas reparadas entre oleadas. Puede usar silicona opcionalmente para mejorar el alcance y la eficiencia. +block.mender.description = Repara bloques cercanos periódicamente. Mantiene a las defensas reparadas entre oleadas. Puede usar silicio opcionalmente para mejorar el alcance y la eficiencia. block.mend-projector.description = Regenera edificios cercanos periódcamente. block.overdrive-projector.description = Aumenta la velocidad de edificios cercanos como taladros y transportadores. block.force-projector.description = Crea un área de fuerza hexagonal alrededor de él, protegiendo edificios y unidades dentro de él del daño de las balas. diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 539be7b004..c670a3c947 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -39,7 +39,6 @@ be.check = 檢查是否有新的更新 schematic = 藍圖 schematic.add = 儲存藍圖... schematics = 藍圖 -schematic.replace = 具有該名稱的藍圖已經存在。是否要取代它? schematic.import = 匯入藍圖... schematic.exportfile = 匯出檔案 schematic.importfile = 匯入檔案 @@ -508,7 +507,7 @@ zone.saltFlats.description = 鹽沼毗連著沙漠。在這裡幾乎找不到多 zone.craters.description = 這個殞坑中心積蓄著水。這是一場舊戰爭的遺跡。奪回該地區。收集沙子。燒製玻璃。抽水來冷卻砲塔和鑽頭。 zone.ruinousShores.description = 穿過荒地,就是海岸線。這個地點曾經駐紮了海防陣線。現在它們已經所剩無幾。只有最基本的防禦結構沒有被破壞,其他的一切都成了殘骸。\n繼續向外擴張。重新發現那些科技。 zone.stainedMountains.description = 內陸的更深處是群山,還未被孢子所污染。\n提取在該區域蘊藏豐富的鈦,並學習如何使用它們。\n\n這裡的存在著更為強大的敵人。不要給他們時間派出最強的部隊。 -zone.overgrowth.description = 這個地區更靠近孢子的來源,因此已經生長過度了。\n敵人在這裡建立了哨所。建立泰坦機甲。破壞它,並取回失去的東西。 +zone.overgrowth.description = 這個地區更靠近孢子的來源,因此已經生長過度了。\n敵人在這裡建立了哨所。建立泰坦機甲。破壞它,並取回失落的事物。 zone.tarFields.description = 位於山脈和沙漠之間的產油區外緣是少數幾個有可用焦油儲量的地區之一。\n雖然被遺棄了,該地區附近還是有著一些危險的敵人。不要低估它們。\n\n[lightgray]如果可能的話,研究原油加工技術。 zone.desolateRift.description = 一個非常危險的區域。資源豐富,但空間很小。毀滅的風險很高。請盡快離開。不要被敵人攻擊之間的長時間間隔所欺騙。 zone.nuclearComplex.description = 以前生產和加工釷的設施已變成廢墟。\n[lightgray]研究釷及其多種用途。\n\n敵人在這裡的數量眾多,不斷的偵查入侵者。 @@ -530,7 +529,7 @@ settings.clear.confirm = 您確定要清除數據嗎?\n此操作無法撤回! settings.clearall.confirm = [scarlet]警告![]\n這將清除所有數據,包括存檔、地圖、解鎖和熱鍵綁定。\n按「是」後,遊戲將刪除所有數據並自動退出。 paused = [accent]〈已暫停〉 clear = 清除 -banned = [scarlet]Banned +banned = [scarlet]已被封禁 yes = 是 no = 否 info.title = 資訊 @@ -664,7 +663,7 @@ setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟 setting.fps.name = 顯示FPS與Ping setting.blockselectkeys.name = 顯示方塊選擇快捷鍵 setting.vsync.name = 垂直同步 -setting.pixelate.name = 像素化[lightgray](會關閉動畫) +setting.pixelate.name = 像素化 setting.minimap.name = 顯示小地圖 setting.position.name = 顯示玩家位置 setting.musicvol.name = 音樂音量 @@ -789,6 +788,7 @@ rules.title.unit = 單位 rules.title.experimental = 實驗中 rules.lighting = 光照 rules.ambientlight = 環境光照 +rules.solarpowermultiplier = 太陽能倍數 content.item.name = 物品 content.liquid.name = 液體 diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index fee9596705..4f11bd4fed 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -20,8 +20,11 @@ const extend = function(classType, params){ const run = method => new java.lang.Runnable(){run: method} const boolf = method => new Boolf(){get: method} const boolp = method => new Boolp(){get: method} +const floatf = method => new Floatf(){get: method} +const floatp = method => new Floatp(){get: method} const cons = method => new Cons(){get: method} const prov = method => new Prov(){get: method} +const func = method => new Func(){get: method} const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer})) Call = Packages.mindustry.gen.Call const Calls = Call //backwards compat diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index ecfbf23745..b1f9051230 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -45,6 +45,8 @@ public class NetServer implements ApplicationListener{ if(state.rules.pvp){ //find team with minimum amount of players and auto-assign player to that. TeamData re = state.teams.getActive().min(data -> { + if(state.rules.waveTeam == data.team || !data.team.active()) return Integer.MAX_VALUE; + int count = 0; for(Playerc other : players){ if(other.team() == data.team && other != player){ diff --git a/core/src/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java index 510a375274..9777e4f9ed 100644 --- a/core/src/mindustry/graphics/LightRenderer.java +++ b/core/src/mindustry/graphics/LightRenderer.java @@ -184,13 +184,14 @@ public class LightRenderer{ Draw.color(); buffer.beginDraw(Color.clear); - Draw.blend(Blending.normal); + Gl.blendEquationSeparate(Gl.funcAdd, Gl.max); + for(Runnable run : lights){ run.run(); } Draw.reset(); - Draw.blend(); buffer.endDraw(); + Gl.blendEquationSeparate(Gl.funcAdd, Gl.funcAdd); Draw.color(); Shaders.light.ambient.set(state.rules.ambientLight); diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index df7622e897..1aa4ddaefa 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -568,6 +568,7 @@ public class Administration{ player = null; type = null; tile = null; + block = null; } } diff --git a/core/src/mindustry/ui/fragments/ChatFragment.java b/core/src/mindustry/ui/fragments/ChatFragment.java index a6cd4354cf..f1cd0d1327 100644 --- a/core/src/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/mindustry/ui/fragments/ChatFragment.java @@ -231,6 +231,8 @@ public class ChatFragment extends Table{ fadetime += 1f; fadetime = Math.min(fadetime, messagesShown) + 1f; + + if(scrollPos > 0) scrollPos++; } private static class ChatMessage{ diff --git a/core/src/mindustry/world/blocks/distribution/OverflowGate.java b/core/src/mindustry/world/blocks/distribution/OverflowGate.java index df7cc39c92..cbcaa5f631 100644 --- a/core/src/mindustry/world/blocks/distribution/OverflowGate.java +++ b/core/src/mindustry/world/blocks/distribution/OverflowGate.java @@ -53,6 +53,11 @@ public class OverflowGate extends Block{ } if(entity.lastItem != null){ + if(entity.lastInput == null){ + entity.lastItem = null; + return; + } + entity.time += 1f / speed * Time.delta(); Tile target = getTileTarget(tile, entity.lastItem, entity.lastInput, false);