From c3222f59c50cc2c00a7871e14cb50cd84686a846 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 14 Sep 2020 17:10:32 -0400 Subject: [PATCH 001/124] router --- .../world/blocks/distribution/Router.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/Router.java b/core/src/mindustry/world/blocks/distribution/Router.java index cb0ae9807d..6dae71a26e 100644 --- a/core/src/mindustry/world/blocks/distribution/Router.java +++ b/core/src/mindustry/world/blocks/distribution/Router.java @@ -1,9 +1,12 @@ package mindustry.world.blocks.distribution; +import arc.math.*; +import arc.util.ArcAnnotate.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.blocks.*; import mindustry.world.meta.*; public class Router extends Block{ @@ -20,10 +23,22 @@ public class Router extends Block{ noUpdateDisabled = true; } - public class RouterBuild extends Building{ + public class RouterBuild extends Building implements ControlBlock{ public Item lastItem; public Tile lastInput; public float time; + public @NonNull BlockUnitc unit = Nulls.blockUnit; + + @Override + public void created(){ + unit = (BlockUnitc)UnitTypes.block.create(team); + unit.tile(this); + } + + @Override + public Unit unit(){ + return (Unit)unit; + } @Override public void updateTile(){ @@ -72,6 +87,22 @@ public class Router extends Block{ } public Building getTileTarget(Item item, Tile from, boolean set){ + if(isControlled()){ + unit.health(health); + unit.team(team); + + int angle = Mathf.mod((int)((angleTo(unit.aimX(), unit.aimY()) + 45) / 90), 4); + + if(unit.isShooting()){ + Building other = nearby(angle); + if(other.acceptItem(this, item)){ + return other; + } + } + + return null; + } + int counter = rotation; for(int i = 0; i < proximity.size; i++){ Building other = proximity.get((i + counter) % proximity.size); From 6f3672428064d11e9db56fee51bdd2262a471f73 Mon Sep 17 00:00:00 2001 From: ballgamer56 <30421594+ballgamer56@users.noreply.github.com> Date: Sun, 27 Sep 2020 21:02:22 +0700 Subject: [PATCH 002/124] [WIP] Update Thai translation --- core/assets/bundles/bundle_th.properties | 136 +++++++++++------------ 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 72028722d0..48ca4087bd 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -7,21 +7,21 @@ link.reddit.description = ซับเรดดิท (subreddit) ของ Mind link.github.description = source code ของเกม link.changelog.description = รายการที่อัปเดต link.dev-builds.description = เวอร์ชั่นระหว่างพัฒนา (ไม่เสถียร) -link.trello.description = Official Trello board for planned features -link.itch.io.description = itch.io page with PC downloads -link.google-play.description = Google Play store listing -link.f-droid.description = F-Droid catalogue listing -link.wiki.description = Official Mindustry wiki -link.suggestions.description = Suggest new features +link.trello.description = Trello board ทางการสำหรับฟีเจอร์ต่างๆที่วางแผนไว้ +link.itch.io.description = หน้าเว็บ itch.io สำหรับดาวน์โหลดบน PC +link.google-play.description = หน้า Google Play store ของเกม +link.f-droid.description = หน้าแคตาลอค F-Droid ของเกม +link.wiki.description = วิกิของ Mindustry อย่างเป็นทางการ +link.suggestions.description = เสนอฟีเจอร์ใหม่ linkfail = ไม่สามารถเปิดลิ้งค์ได้\nคัดลอก URL ลงในคลิปบอร์ดแล้ว screenshot = Screenshot บันทึกที่ {0} screenshot.invalid = แมพใหญ่เกินไป, หน่วยความจำอาจจะไม่พอสำหรับ screenshot. -gameover = Game Over +gameover = จบเกม gameover.pvp = ทีมที่ชนะคือทีม[accent] {0}[]! highscore = [accent]คะแนนสูงสุดใหม่! copied = คัดลอกแล้ว. -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[] ณ ขณะนี้อยู่ในช่วง [accent]alpha[].\n[lightgray]นั้นหมายถึง:[]\n[scarlet]- เคมเปญไม่ยังเสร็จสมบูรณ์ []\n- เนื้อหาบางอย่างขาดหาย\n - [scarlet]AI ของยูนิต[] ส่วนใหญ่ทำงานได้แบบไม่สมบูรณ์\n- ยูนิตส่วนมากยังไม่เสร็จ\n- ที่อย่างที่เห็นอาจเปลี่ยนแปลงได้หรือลบออกโดยสิ้นเชิงในอนาคต\n\nแจ้งบัคหรือปัญหาที่พบเจอได้ที่ [accent]Github[]. +indev.notready = ส่วนนี้ของเกมยังไม่พร้อมให้ใช้งาน load.sound = เสียง load.map = แมพ @@ -31,7 +31,7 @@ load.system = ระบบ load.mod = มอด load.scripts = สคริปต์ -be.update = A new Bleeding Edge build is available: +be.update = เวอร์ชั้นล่าสุดออกแล้ว: be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม? be.updating = กำลังอัปเดต... be.ignore = ยกเลิก @@ -42,7 +42,7 @@ schematic = แผนผัง schematic.add = กำลังบันทึกแผนผัง... schematics = แผนผัง schematic.replace = มีแผนผังที่ใช้ชื่อนี้แล้ว. แทนที่เลยไหม? -schematic.exists = A schematic by that name already exists. +schematic.exists = มีแผนผังในชื่อนั้นอยู่แล้ว schematic.import = นำเข้าแผนผัง... schematic.exportfile = ส่งออกไฟล์ schematic.importfile = นำเข้าไฟล์ @@ -62,17 +62,17 @@ stat.built = จำนวนสิ่งก่อสร้างที่สร stat.destroyed = จำนวนสิ่งก่อสร้างของศัตรูที่ทำลายไปได้:[accent] {0} stat.deconstructed = จำนวนสิ่งก่อสร้างที่ถูกทำลายไป:[accent] {0} stat.delivered = ทรัพยากรที่ส่งไปได้: -stat.playtime = Time Played:[accent] {0} +stat.playtime = ระยะเวลาที่เล่นไป:[accent] {0} stat.rank = ระดับ: [accent]{0} -globalitems = [accent]Global Items +globalitems = [accent]ไอเท็มโกลบอล map.delete = คุณแน่ใจหรือว่าจะลบแมพชื่อ "[accent]{0}[]"? level.highscore = คะแนนสูงสุด: [accent]{0} level.select = เลือกด่าน level.mode = เกมโหมด: coreattack = < แกนกลางกำลังถูกโจมตี! > nearpoint = [[ [scarlet]ออกจากดรอปพอยท์ด่วน IMMEDIATELY[] ]\nการทำลายล้างกำลังใกล้เข้ามา -database = ฐานข้อมูหลัง +database = ฐานข้อมูลหลัก savegame = เซฟเกม loadgame = โหลดเกม joingame = เข้าร่วมเกม @@ -90,12 +90,12 @@ maps.browse = ค้นหาแมพ continue = ต่อ maps.none = [lightgray]ไม่มีแมพ! invalid = ไม่ถูกต้อง -pickcolor = Pick Color +pickcolor = เลือกสี preparingconfig = กำลังเตรียม Config -preparingcontent = กำลังเตรียม Content -uploadingcontent = กำลังอัปโหลด Content +preparingcontent = กำลังเตรียมเนื้อหา +uploadingcontent = กำลังอัปโหลดเนื้อหา uploadingpreviewfile = กำลังอัปโหลดไฟล์พรีวิว -committingchanges = Comitting Changes +committingchanges = กำลังทำการเปลี่ยนแปลง done = เรียบร้อย feature.unsupported = อุปกรณ์ของคุณไม่รองรับฟีเจอร์นี้ @@ -106,53 +106,53 @@ mods.none = [lightgray]ไม่พบมอด! mods.guide = คู่มือการทำมอด mods.report = รายงานบัค mods.openfolder = เปิดมอดโฟลเดอร์ -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reload = โหลดใหม่ +mods.reloadexit = เกมจะออกเพื่อจะโหลดมอด mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]เปิดใช้งาน mod.disabled = [scarlet]ปิดใช้งาน mod.disable = ปิดใช้งาน -mod.content = Content: +mod.content = เนื้อหา: mod.delete.error = ไม่สามารถลบมอดได้. ไฟล์อาจอยู่ในระหว่างการใช้งาน. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.requiresversion = [scarlet]เวอร์ชั่นเกมขั้นต่ำที่ต้องการ: [accent]{0} +mod.outdated = [scarlet]ไม่สามารถใช้ได้ในเวอร์ชั่น V6 (ไม่มี minGameVersion: 105) mod.missingdependencies = [scarlet]dependencies หาย: {0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. +mod.erroredcontent = [scarlet]เนื้อหาผิดพลาด +mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่าโหลดเนื้อหา +mod.noerrorplay = [scarlet]คุณมีมอดที่มีข้อผิดพลาด.[] กรุณาปิดมอดนั้นๆหรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น mod.nowdisabled = [scarlet]มอด '{0}' ไม่มี dependencies:[accent] {1}\n[lightgray]จำเป็นต้องโหลดมอดพวกนี้ก่อน\nมอดนี้จะถูกปิดใช้งานโดยอัตโนมัติ mod.enable = เปิดใช้งาน mod.requiresrestart = เกมจะปิดลงเพื่อใส่มอด mod.reloadrequired = [scarlet]จำเป็นต้องรีโหลด mod.import = นำเข้ามอด -mod.import.file = Import File +mod.import.file = นำเข้าไฟล์ mod.import.github = นำเข้ามอดจาก Github -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.jarwarn = [scarlet]มอดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย.[]\nกรุณาเช็คให้แน่ใจว่าคุณนำเข้ามอดนี้จะแหล่งที่เชื่อถือได้! +mod.item.remove = ไอเทมนี้เป็นส่วนหนึ่งของมอด[accent] '{0}'[]. หากต้องการนำออก กรุณาถอดการติดตั้งมอดนั้น mod.remove.confirm = มอดนี้จะถูกลบ mod.author = [lightgray]ผู้สร้าง:[] {0} -mod.missing = เซฟนี้มีมอดที่คุณอัปเดตหรือไม่ได้ติดตั้งแล้ว. อาจทำให้เซฟเสีย. คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]Mods:\n{0} +mod.missing = เซฟนี้มีมอดที่คุณอัปเดตหรือไม่ได้ติดตั้งแล้ว. อาจทำให้เซฟเสีย. คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]มอดที่ใช้:\n{0} mod.preview.missing = ก่อนที่จะนำมอดไปลงใน workshop, คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของมอดแล้วลองอีกครั้ง mod.folder.missing = มอดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงใน workshop ได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดมอด -mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. +mod.scripts.disable = เครื่องของคุณไม่รองรับมอดที่มี scripts. คุณจำเป็นต้องปิดมอดเหล่านี้ก่อนจึงจะสามารถเล่นได้. about.button = เกี่ยวกับ name = ชื่อ: noname = ใส่ชื่อ[accent] ผู้เล่น[] ก่อน. -planetmap = Planet Map -launchcore = Launch Core +planetmap = แผนที่ดาวเคราะห์ +launchcore = ส่ง Core filename = ชื่อไฟล์: -unlocked = content ใหม่ปลดล็อค! +unlocked = เนื้อหาใหม่ปลดล็อค! completed = [accent]สำเร็จ techtree = ความคืบหน้าในการวิจัย research.list = [lightgray]วิจัย: research = วิจัย researched = [lightgray]{0} วิจัยแล้ว. -research.progress = {0}% complete +research.progress = เสร็จแล้ว {0}% players = {0} ผู้เล่น players.single = {0} ผู้เล่น -players.search = search -players.notfound = [gray]no players found +players.search = ค้นหา +players.notfound = [gray]ไม่พบผู้เล่น server.closing = [accent]กำลังปิดเซิฟเวอร์... server.kicked.kick = คุณถูกเตะออกจากเซิฟเวอร์! server.kicked.whitelist = คุณไม่ได้อยู่ใน whitelisted @@ -168,8 +168,8 @@ server.kicked.nameInUse = มีคนที่ใช้ชืชื่อนี server.kicked.nameEmpty = ชื่อของคุณไม่สามารถใช้ได้ server.kicked.idInUse = คุณเชื่อมต่อกับเซิฟเวอร์นี้อยู่แล้ว เราไม่อนุญาตให้เชื่อมต่อ 2 บัญชีในเซฟเวอร์เดียวกัน server.kicked.customClient = เซิฟเวอร์นี้ไม่รองรับ builds ปรับแต่ง. กรุณาโหลดของ official. -server.kicked.gameover = Game over! -server.kicked.serverRestarting = The server is restarting. +server.kicked.gameover = จบเกม! +server.kicked.serverRestarting = เซิฟเวอร์กำลังเริ่มใหม่. server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิฟเวอร์:[accent] {1}[] host.info = ปุ่ม [accent]โฮสต์[] นั้นโฮสต์เซฟเวอร์ที่พอร์ท [scarlet]6567[]. \nทุกคนที่อยู่ใน [lightgray]wifi หรือ local network[] เดียวกันจะสามารถเห็นเซิฟเวอร์ของคุณในลิสของเซิฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆสามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP, จำเป็นจะต้องใช้การ [accent]port forwarding[] \n\n[lightgray]Note: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็คให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึง local network ของคุณในการตั้งค่า firewall. จำให้ว่า network สาธารณะบางครั้งไม่อนุญาตการค้นหาเซิฟเวอร์ join.info = คุณสามารถใส่ [accent]IP ของเซิฟเวอร์[] เพื่อที่จะเชื่อมต่อหรือค้นหา เซิฟเวอร์ที่ใช้[accent]local network[] จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]โน้ต: เกมนี้ไม่มีระบบค้นหาเซิฟเวอร์ global ให้อัตโนมัติserver list; ถ้าคุณต้องการเชื่อมต่อกับเซิฟเวอร์โดยใช้ IP, คุณจำเป็นต้องถาม IP ผู้เล่นที่โฮสต์เซิฟเวอร์นั้นๆ. @@ -185,9 +185,9 @@ server.refreshing = กำลังรีเฟรชเซิฟเวอร์ hosts.none = [lightgray]ไม่พบเซิฟเวอร์ใน local! host.invalid = [scarlet]ไม่สามารถเชื่อมต่อกับโฮสต์ได้ -servers.local = Local Servers -servers.remote = Remote Servers -servers.global = Community Servers +servers.local = เซิฟเวอร์ Local +servers.remote = เซิฟเวอร์ Remote +servers.global = เซิฟเวอร์ Community trace = Trace ผู้เล่น/ แกะรอยผู้เล่น trace.playername = ชื่อผู้เล่น: [accent]{0} @@ -269,7 +269,7 @@ copylink = คัดลอกลิ้งค์ back = กลับ data.export = ส่งออกข้อมูล data.import = นำเข้าข้อมูล -data.openfolder = Open Data Folder +data.openfolder = เปิดโฟลเดอร์ข้อมูล data.exported = ข้อมูลส่งออกแล้ว data.invalid = นี่ไม่ใช่ข้อมูลเกมที่ถูกต้อง. data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำข้อมูลแล้วเกมจะปิดลงโดยทันที @@ -278,7 +278,7 @@ quit.confirm.tutorial = คุณแน่ใจหรือว่าคุณ loading = [accent]กำลังโหลด... reloading = [accent]กำลังรีโหลดมอด... saving = [accent]กำลังเซฟ... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}]][]เพื่อเกิดใหม่ที่ core cancelbuilding = [accent][[{0}][]เพื่อเคลียแผน selectschematic = [accent][[{0}][]เพื่อเลือกและคัดลอก pausebuilding = [accent][[{0}][]เพื่อหยุดการสร้างชั่วคราว @@ -315,7 +315,7 @@ publish.error = การเผยแพร่ไอเท็มดังต่ steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0} editor.brush = แปรง -editor.openin = เปิดมน Editor +editor.openin = เปิดใน Editor editor.oregen = การเกิดของแร่ editor.oregen.info = การเกิดของแร่: editor.mapinfo = ข้อมูลของแมพ @@ -331,13 +331,13 @@ editor.newmap = แมพใหม่ workshop = Workshop waves.title = Waves waves.remove = ลบ -waves.never = +waves.never = <ไม่เคย> waves.every = ทุกๆ waves.waves = wave(s) waves.perspawn = ต่อสปาวน์ -waves.shields = shields/wave -waves.to = to -waves.guardian = Guardian +waves.shields = เกราะ/wave +waves.to = ถึง +waves.guardian = การ์เดียน waves.preview = พรีวิว waves.edit = แก้ไข... waves.copy = คัดลอกไปยังคลิปบอร์ด @@ -346,8 +346,8 @@ waves.invalid = waves ในคลิปบอร์ดไม่ถูกต้ waves.copied = คัดลอก Waves แล้ว waves.none = ไม่ได้กำหนดศัตรู\nwave layouts เปล่าจะถูกแทนที่โดย layout ค่าเริ่มต้นของเกม -wavemode.counts = counts -wavemode.totals = totals +wavemode.counts = จำนวน +wavemode.totals = ทั้งหมด wavemode.health = health editor.default = [lightgray]<ค่าเริ่่มต้น> @@ -415,8 +415,8 @@ toolmode.drawteams.description = วาดทีมแทนที่จะเ filters.empty = [lightgray]ไม่มีฟิลเตอร์! เพิ่มด้วยปุ่มด้านล่างนี้ filter.distort = บิดเบือน filter.noise = นอยส์ -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = เบือกที่เกิดศัตรู +filter.corespawn = เลือก Core filter.median = เฉลี่ย filter.oremedian = เฉลี่ยแร่ filter.blend = ผสมผสาน @@ -436,7 +436,7 @@ filter.option.circle-scale = สเกลวงกลม filter.option.octaves = เลอะเลือน filter.option.falloff = หลุด filter.option.angle = มุม -filter.option.amount = Amount +filter.option.amount = จำนวน filter.option.block = บล็อค filter.option.floor = พื้น filter.option.flooronto = พื้น Target @@ -474,7 +474,7 @@ requirement.capture = Capture {0} resume = เล่นต่อในโซน:\n[lightgray]{0} bestwave = [lightgray]Wave สูงสุด: {0} launch = < ส่ง > -launch.text = Launch +launch.text = ส่ง launch.title = ส่งเรียบร้อย launch.next = [lightgray]โอกาสครั้งหน้าที่ wave {0} launch.unable2 = [scarlet]ไม่สามารถส่งได้[] @@ -483,8 +483,8 @@ launch.skip.confirm = ถ้าคุณข้ามตอนนี้, คุ uncover = เปิดเผย configure = ตั้งค่า Loadout loadout = Loadout -resources = Resources -bannedblocks = Banned Blocks +resources = ทรัพยากร +bannedblocks = บล็อคต้องห้าม addall = เพิ่มทั้งหมด launch.destination = Destination: {0} configure.invalid = จำนวนต้อยู่ระหว่าง 0 ถึง {0}. @@ -508,18 +508,18 @@ error.io = Network I/O error. error.any = Unknown network error. error.bloom = ไม่สามารถเริ่มต้น bloom ได้\nอุปกรณ์ของคุณอาจไม่รองรับ -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = ฝน +weather.snow.name = หิมะ +weather.sandstorm.name = พายุทราย +weather.sporestorm.name = พายุสปอร์ -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select +sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ +sectors.resources = ทรัพยากร: +sectors.production = การผลิต: +sectors.stored = เก็บ: +sectors.resume = ทำต่อ +sectors.launch = ส่ง +sectors.select = เลือก sectors.nonelaunch = [lightgray]none (sun) sector.groundZero.name = Ground Zero From ced29f3d7bb48600beb9b3cca06797271f347d62 Mon Sep 17 00:00:00 2001 From: ballgamer56 <30421594+ballgamer56@users.noreply.github.com> Date: Mon, 28 Sep 2020 07:28:22 +0700 Subject: [PATCH 003/124] Update bundle_th.properties --- core/assets/bundles/bundle_th.properties | 320 +++++++++++------------ 1 file changed, 160 insertions(+), 160 deletions(-) diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 48ca4087bd..e31912c223 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -558,22 +558,22 @@ settings.graphics = กราฟิก settings.cleardata = เคลียร์ข้อมูลเกม... settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลเกม?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้! settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ, แมพ, สิ่งที่ปลดล็อคแล้วและ keybinds.\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด? +settings.clearsaves = เคลียร์เซฟ paused = [accent]< หยุดชั่วคราว > clear = เคลียร์ banned = [scarlet]แบน -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]ต้องการ captured sector yes = ใช่ no = ไม่ info.title = ข้อมูล error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น -unit.nobuild = [scarlet]Unit can't build +unit.nobuild = [scarlet]ยูนิตไม่สามารถสร้างได้ blocks.input = นำเข้า blocks.output = ส่งออก blocks.booster = บูสเตอร์ -blocks.tiles = Required Tiles +blocks.tiles = ต้องการ Tiles blocks.affinities = Affinities block.unknown = [lightgray]??? blocks.powercapacity = ความจุพลังงาน @@ -585,11 +585,11 @@ blocks.itemsmoved = ความเร็วเคลื่อนที่ blocks.launchtime = เวลาระหว่างการส่ง blocks.shootrange = ระยะยิง blocks.size = ขนาด -blocks.displaysize = Display Size +blocks.displaysize = ขนาดที่โชว์ blocks.liquidcapacity = จุของเหลว blocks.powerrange = ระยะพลังงาน blocks.linkrange = Link Range -blocks.instructions = Instructions +blocks.instructions = คำแนะนำ blocks.powerconnections = จำนวนการเชื่อมต่อสูงสุด blocks.poweruse = ใช้พลังงาน blocks.powerdamage = หน่วยพลังงาน/ดาเมจ @@ -605,18 +605,18 @@ blocks.boosteffect = แอฟเฟ็คของบูสต์ blocks.maxunits = จำนวนยูนิตสูงสุด blocks.health = เลือด blocks.buildtime = เวลาในการสร้าง -blocks.maxconsecutive = Max Consecutive +blocks.maxconsecutive = ติดต่อกันสูงสุด blocks.buildcost = ใช้ blocks.inaccuracy = ความคลาดเคลื่อน blocks.shots = นัด blocks.reload = นัด/วินาที blocks.ammo = กระสุน -blocks.shieldhealth = Shield Health -blocks.cooldowntime = Cooldown Time +blocks.shieldhealth = เลือดของเกราะ +blocks.cooldowntime = เวลา Cooldown bar.drilltierreq = จำเป็นต้องใช้เครื่องขุดที่ดีกว่า -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = ทรัพยากรหาย +bar.corereq = ฐาน Core ที่ต้องการ bar.drillspeed = ความเร็วขุด: {0}/s bar.pumpspeed = ความเร็วปั้ม: {0}/s bar.efficiency = ประสิทธิภาพ: {0}% @@ -627,7 +627,7 @@ bar.poweroutput = พลังงานออก: {0} bar.items = ไอเท็ม: {0} bar.capacity = ความจุ: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[ยูนิตถูกปิด] bar.liquid = ของเหลว bar.heat = ความร้อน bar.power = พลังงาน @@ -660,11 +660,11 @@ unit.persecond = /วินาที unit.perminute = /min unit.timesspeed = เท่าเร็วขึ้น unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = เลือดเกราะ unit.items = ไอเท็ม -unit.thousands = k -unit.millions = mil -unit.billions = b +unit.thousands = พัน +unit.millions = ล้าน +unit.billions = พันล้าน category.general = ทั่วไป category.power = พลังงาน category.liquids = ของเหลว @@ -677,13 +677,13 @@ setting.shadows.name = เงา setting.blockreplace.name = แนะนำบล็อคโดยอัตโนมัติ setting.linear.name = การกรองเชิงเส้น setting.hints.name = คำแนะนำ -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = แสดงอัตราการไหลของทรัพยากร[scarlet] (รุ่นทดลอง) setting.buildautopause.name = หยุดสร้างชั่วคราวแบบอัตโนมัติ -setting.mapcenter.name = Auto Center Map To Player +setting.mapcenter.name = ปรับแมพให้อยู่ตรงกลางตามผู้เล่นโดยอัตโนมัติ setting.animatedwater.name = แอนิเมชั่นน้ำ setting.animatedshields.name = แอนิเมชั่นเกราะ setting.antialias.name = Antialias[lightgray] (จำเป็นต้องรีสตาร์ท)[] -setting.playerindicators.name = Player Indicators +setting.playerindicators.name = ตัวบอกผู้เล่น setting.indicators.name = ตัวบอกศัตรู/พักพวก setting.autotarget.name = เล็งเป้าอัตโนมัติ setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด @@ -702,25 +702,25 @@ setting.difficulty.name = ระดับความยาก: setting.screenshake.name = การสั่นของจอ setting.effects.name = แสดงเอฟเฟ็ค setting.destroyedblocks.name = แสดงบล็อคที่ถูกทำลาย -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = แสดงสเตตัสของบล็อค setting.conveyorpathfinding.name = Pathfinding setting.sensitivity.name = ความไวของตัวควบคุม setting.saveinterval.name = ระยะห่าวระหว่างเซฟ setting.seconds = {0} วินาที -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds +setting.blockselecttimeout.name = การหมดเวลาในการเลือกบล็อค +setting.milliseconds = {0} มิลลิวินาที setting.fullscreen.name = เต็มจอ setting.borderlesswindow.name = วินโดว์แบบไร้ขอบ[lightgray] (อาจจะต้องรีตาร์ท) setting.fps.name = แสดง FPS และ Ping -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys +setting.smoothcamera.name = กล้องแบบสมูท +setting.blockselectkeys.name = แสดงปุ่มเลือกบล็อค setting.vsync.name = VSync setting.pixelate.name = Pixelate[lightgray] (ปิดใช้งานแอนิเมชั่น) setting.minimap.name = แสดงมินิแมพ -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = แสดงไอเท็มใน Core (ยังไม่เสร็จสมบูรณ์) setting.position.name = แสดงตำแหน่งของผู้เล่น setting.musicvol.name = ระดับเสียงเพลง -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = แสดงชั้นบรรยากาศของดาวเคราะห์ setting.ambientvol.name = ระดับเสียงล้อมรอบ setting.mutemusic.name = ปิดเพลง setting.sfxvol.name = ระดับเสียง SFX @@ -728,10 +728,10 @@ setting.mutesound.name = ปิดเสียง setting.crashreport.name = ส่งรายงานการแครชแบบไม่ระบุตัวตน setting.savecreate.name = สร้างเซฟโดยอัตโนมัติ setting.publichost.name = การมองเห็นเซิฟเวอร์สาธารณะ -setting.playerlimit.name = Player Limit +setting.playerlimit.name = จัดกัดผู้เล่น setting.chatopacity.name = ความโปร่งแสงของแชท setting.lasersopacity.name = ความโปร่งแสงของเลเซอร์พลังงาน -setting.bridgeopacity.name = Bridge Opacity +setting.bridgeopacity.name = ความโปร่งแสงของสะพาน setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้.\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิฟเวอร์สาธารณะ. public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิฟเวอร์สาธารณะได้ @@ -743,54 +743,54 @@ keybinds.mobile = [scarlet]การตั้งค่าปุ่มส่ว category.general.name = ทั่วไป category.view.name = วิว category.multiplayer.name = ผู้เล่นหลายคน -category.blocks.name = Block Select +category.blocks.name = เลือกบล็อค command.attack = โจมตี command.rally = ชุมนุม command.retreat = ถอยกลับ -command.idle = Idle +command.idle = อยู่เฉยๆ placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.respawn.name = เกิดใหม่ +keybind.control.name = ควบคุมยูนิต keybind.clear_building.name = เคลียร์สิ่งก็สร้าง keybind.press = กดปุ่มใดก็ได้... keybind.press.axis = กดแกนหรือปุ่มใดก็ได้... keybind.screenshot.name = แมพ Screenshot -keybind.toggle_power_lines.name = Toggle Power Lasers -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_power_lines.name = เปิดปิดเลเซอร์พลังงาน +keybind.toggle_block_status.name = เปิดปิดสถานะของบล็อค keybind.move_x.name = เคลื่อนที่ในแกน x keybind.move_y.name = เคลี่อนที่ในแกน y keybind.mouse_move.name = ตามเม้าส์ -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = แพนวิว +keybind.boost.name = บูสต์ keybind.schematic_select.name = เลือกภูมิภาค keybind.schematic_menu.name = เมนู Schematic keybind.schematic_flip_x.name = กลับ Schematic ในแกน X keybind.schematic_flip_y.name = กลับ Schematic ในแกน Y -keybind.category_prev.name = Previous Category -keybind.category_next.name = Next Category -keybind.block_select_left.name = Block Select Left -keybind.block_select_right.name = Block Select Right -keybind.block_select_up.name = Block Select Up -keybind.block_select_down.name = Block Select Down -keybind.block_select_01.name = Category/Block Select 1 -keybind.block_select_02.name = Category/Block Select 2 -keybind.block_select_03.name = Category/Block Select 3 -keybind.block_select_04.name = Category/Block Select 4 -keybind.block_select_05.name = Category/Block Select 5 -keybind.block_select_06.name = Category/Block Select 6 -keybind.block_select_07.name = Category/Block Select 7 -keybind.block_select_08.name = Category/Block Select 8 -keybind.block_select_09.name = Category/Block Select 9 -keybind.block_select_10.name = Category/Block Select 10 +keybind.category_prev.name = หมวดหมู่ก่อนหน้า +keybind.category_next.name = หมวดหมู่ถ้ดไป +keybind.block_select_left.name = เลือกบล็อค ซ้าย +keybind.block_select_right.name = เลือกบล็อค ขวา +keybind.block_select_up.name = เลือกบล็อค ขึ้น +keybind.block_select_down.name = เลือกบล็อค ลง +keybind.block_select_01.name = หมวดหมู่/เลือกบล็อค 1 +keybind.block_select_02.name = หมวดหมู่/เลือกบล็อค 2 +keybind.block_select_03.name = หมวดหมู่/เลือกบล็อค 3 +keybind.block_select_04.name = หมวดหมู่/เลือกบล็อค 4 +keybind.block_select_05.name = หมวดหมู่/เลือกบล็อค 5 +keybind.block_select_06.name = หมวดหมู่/เลือกบล็อค 6 +keybind.block_select_07.name = หมวดหมู่/เลือกบล็อค 7 +keybind.block_select_08.name = หมวดหมู่/เลือกบล็อค 8 +keybind.block_select_09.name = หมวดหมู่/เลือกบล็อค 9 +keybind.block_select_10.name = หมวดหมู่/เลือกบล็อค 10 keybind.fullscreen.name = เปิด/ปิด Fullscreen keybind.select.name = เลือก/ยิง keybind.diagonal_placement.name = วางเป็นแนวทแยง keybind.pick.name = เลือกบล็อค keybind.break_block.name = ทุบบล็อค keybind.deselect.name = ยกเลิกการเบือก -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = ยกของขึ้น +keybind.dropCargo.name = วางของลง +keybind.command.name = คำสั่ง keybind.shoot.name = ยิง keybind.zoom.name = ซูม keybind.menu.name = เมนู @@ -811,7 +811,7 @@ keybind.zoom_minimap.name = ซูมมินิแมพ mode.help.title = คำอธิบายโหมด mode.survival.name = เอาชีวิตรอด mode.survival.description = โหมดปกติ. ทรัพยากรมีจำกัดและ wave มาโดยอัตโนมัติ.\n[gray]ต้องมีสปาวน์ของศัตรูเพื่อที่จะเล่น. -mode.sandbox.name = Sandbox +mode.sandbox.name = โหมดอิสระ mode.sandbox.description = ทรัพยาดรไม่จำกัดและ wave ไม่จับเวลา. mode.editor.name = Editor mode.pvp.name = PvP @@ -825,10 +825,10 @@ rules.reactorexplosions = การระเบิดของ rules.wavetimer = ตัวนับเวลาปล่อยคลื่น(รอบ) rules.waves = คลื่น(รอบ) rules.attack = โหมดการโจมตี -rules.buildai = AI Building +rules.buildai = สิ่ก่อสร้างของ AI rules.enemyCheat = AI (ทีมสีแดง) มีทรัพยากรไม่จำกัด rules.blockhealthmultiplier = พหุคูณเลือดของบล็อค -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = พหุคูณดาเมจของบล็อค rules.unitbuildspeedmultiplier = พหุคูณความเร็วในการสร้างยูนิต rules.unithealthmultiplier = พหุคูณเลือดของยูนิต rules.unitdamagemultiplier = พหุคูณพลังโจมตีของยูนิต @@ -836,23 +836,23 @@ rules.enemycorebuildradius = รัศมีห้ามสร้างบริ rules.wavespacing = ระยะเวลาระหว่างคลื่น(รอบ):[lightgray] (วินาที) rules.buildcostmultiplier = พหุคูณจำนวนทรัพยากรที่ใช้ในการสร้าง rules.buildspeedmultiplier = พหุคูณความเร็วในการสร้าง -rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier +rules.deconstructrefundmultiplier = พหุคูณการคืนทรัพยากรเมื่อทำการทำลายสิ่งก่อสร้าง rules.waitForWaveToEnd = คลื่น(รอบ)รอศัตรู rules.dropzoneradius = รัศมีจุดเกิดของศัตรู:[lightgray] (ช่อง) -rules.unitammo = Units Require Ammo +rules.unitammo = ยูนิตต้องใช้กระสุน rules.title.waves = คลื่น(รอบ) rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.enemy = ศัตรู rules.title.unit = ยูนิต rules.title.experimental = Experimental -rules.title.environment = Environment -rules.lighting = Lighting -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage -rules.ambientlight = Ambient Light -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.title.environment = สิ่งแวดล้อม +rules.lighting = แสง +rules.fire = ไฟ +rules.explosions = ดาเมจบล็อค/ยูนิตระเบิด +rules.ambientlight = แสงจากแวดล้อม +rules.weather = สภาพอากาศ +rules.weather.frequency = ความถี่: +rules.weather.duration = ระยะเวลา: content.item.name = ไอเท็ม content.liquid.name = ของเหลว @@ -885,73 +885,73 @@ item.radioactivity = [lightgray]ค่ากัมมันตภาพรัง unit.health = [lightgray]เลือด: {0} unit.speed = [lightgray]ความเร็ว: {0} -unit.weapon = [lightgray]Weapon: {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.weapon = [lightgray]อาวุธ: {0} +unit.itemcapacity = [lightgray]ความจุไอเท็ม: {0} +unit.minespeed = [lightgray]ความเร็วการขุด: {0}% +unit.minepower = [lightgray]ความแรงการขุด: {0} +unit.ability = [lightgray]ความสามารถ: {0} +unit.buildspeed = [lightgray]ความเร็วการสร้าง: {0}% liquid.heatcapacity = [lightgray]ความจุความร้อน: {0} liquid.viscosity = [lightgray]ความหนืด: {0} liquid.temperature = [lightgray]อุณหภูมิ: {0} unit.dagger.name = แด็กเกอร์ -unit.mace.name = Mace +unit.mace.name = เมส unit.fortress.name = ฟอร์เทรส -unit.nova.name = Nova -unit.pulsar.name = Pulsar -unit.quasar.name = Quasar +unit.nova.name = โนว่า +unit.pulsar.name = พอวซ่า +unit.quasar.name = ควอซ่า unit.crawler.name = ครอว์เลอร์ -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.antumbra.name = Antumbra -unit.eclipse.name = Eclipse -unit.mono.name = Mono -unit.poly.name = Poly -unit.mega.name = Mega -unit.quad.name = Quad -unit.oct.name = Oct -unit.risso.name = Risso -unit.minke.name = Minke -unit.bryde.name = Bryde -unit.sei.name = Sei -unit.omura.name = Omura -unit.alpha.name = Alpha -unit.beta.name = Beta -unit.gamma.name = Gamma -unit.scepter.name = Scepter -unit.reign.name = Reign -unit.vela.name = Vela -unit.corvus.name = Corvus +unit.atrax.name = เอแทรซ +unit.spiroct.name = สปิรอคท์ +unit.arkyid.name = อาร์คิดย์ +unit.toxopid.name = โทโสพิด +unit.flare.name = แฟลร์ +unit.horizon.name = ฮอไรซอน +unit.zenith.name = ซีนิท +unit.antumbra.name = แอนทัมบรา +unit.eclipse.name = อีคลิปส์ +unit.mono.name = โมโน +unit.poly.name = โพลี +unit.mega.name = เมก้า +unit.quad.name = ควอด +unit.oct.name = ออกค์ +unit.risso.name = ริสโส +unit.minke.name = มิงค์ +unit.bryde.name = ไบรดย์ +unit.sei.name = ไซย์ +unit.omura.name = โอมูร่า +unit.alpha.name = อัลฟ่า +unit.beta.name = บีตเา +unit.gamma.name = แกมม่า +unit.scepter.name = สเซปเตอร์ +unit.reign.name = เรน +unit.vela.name = เวล่า +unit.corvus.name = คอร์วัส -block.resupply-point.name = Resupply Point +block.resupply-point.name = จุดเติมของ block.parallax.name = Parallax -block.cliff.name = Cliff +block.cliff.name = หน้าผ่า block.sand-boulder.name = ก้อนหินทราย block.grass.name = หญ้า block.slag.name = Slag block.salt.name = เกลือ -block.salt-wall.name = Salt Wall +block.salt-wall.name = กำแพงเกลือ block.pebbles.name = ก้อนกรวด block.tendrils.name = ไม้เลื้อย -block.sand-wall.name = Sand Wall +block.sand-wall.name = กำแพงทราย block.spore-pine.name = ต้นสนสปอร์ -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = กำแพงสปอร์ +block.boulder.name = ก้อยหินใหญ่ +block.snow-boulder.name = หินหิมะใหญ่ block.snow-pine.name = ต้นสนที่คลุมหิมะ block.shale.name = หินดินดาน block.shale-boulder.name = ก้อนหินดินดาน block.moss.name = ตะไคร่น้ำ block.shrubs.name = พุ่มไม้ block.spore-moss.name = พุ่มไม้สปอร์ -block.shale-wall.name = Shale Wall +block.shale-wall.name = กำแพงหินดินดาน block.scrap-wall.name = กำแพงเศษเหล็ก block.scrap-wall-large.name = กำแพงเศษเหล็กขนาดใหญ่ block.scrap-wall-huge.name = กำแพงเศษเหล็กขนาดใหญ่มาก @@ -969,7 +969,7 @@ block.deepwater.name = น้ำลึก block.water.name = น้ำ block.tainted-water.name = น้ำเสีย block.darksand-tainted-water.name = น้ำเสียบนทรายดำ -block.tar.name = น้ำมันดิน +block.tar.name = น้ำมันดิบ block.stone.name = หิน block.sand.name = ทราย block.darksand.name = ทรายดำ @@ -979,17 +979,17 @@ block.craters.name = หลุมอุกกาบาต block.sand-water.name = น้ำบนทราย block.darksand-water.name = น้ำบนทรายดำ block.char.name = ถ่าน -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = ดาไซต์ +block.dacite-wall.name = กำแพงดาไซต์ block.ice-snow.name = น้ำแข็งหิมะ -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 = กำแพงหิน +block.ice-wall.name = กำแพงน้ำแข็ง +block.snow-wall.name = กำแพงหิมะ +block.dune-wall.name = กำแพงเนินทราย block.pine.name = ต้นสน -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = ดิน +block.dirt-wall.name = กำแพงดิน +block.mud.name = โคลน block.white-tree-dead.name = ต้นไม้ขาวที่ตายแล้ว block.white-tree.name = ต้มไม้ขาว block.spore-cluster.name = กลุ่มสปอร์ @@ -1005,7 +1005,7 @@ block.dark-panel-4.name = แผ่นดำ 4 block.dark-panel-5.name = แผ่นดำ 5 block.dark-panel-6.name = แผ่นดำ 6 block.dark-metal.name = เหล็กดำ -block.basalt.name = Basalt +block.basalt.name = บะซอลต์ block.hotrock.name = หินร้อน block.magmarock.name = หินแมกม่า block.copper-wall.name = กำแพงทองแดง @@ -1027,7 +1027,7 @@ block.hail.name = แฮล block.lancer.name = แลนเซอร์ block.conveyor.name = สายพาน block.titanium-conveyor.name = สายพานไทเทเนี่ยม -block.plastanium-conveyor.name = Plastanium Conveyor +block.plastanium-conveyor.name = สายพานพสาตตาเนี่ยม block.armored-conveyor.name = สายพานเสริมเกราะ block.armored-conveyor.description = เคลื่อนย้ายไอเท็มได้เร็วเทียบเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่สามารถรับไอเท็มจากด้านข้างและจากสายพานชนิดอื่นนอกจากสายพานชนิดเดียวกัน. block.junction.name = ทางแยก @@ -1036,10 +1036,10 @@ block.distributor.name = ตัวแจกจ่าย block.sorter.name = เครื่องแยก block.inverted-sorter.name = เครื่องแยกกลับด้าน block.message.name = ตัวเก็บข้อความ -block.illuminator.name = Illuminator -block.illuminator.description = A small, compact, configurable light source. Requires power to function. +block.illuminator.name = ตัวเปล่งแสง +block.illuminator.description = แหล่งกำเนิดแสงขนาดเล็ก สามารถดัดแปลงได้. จำเป็นต้องใช้พลังงานในการทำงาน. block.overflow-gate.name = ประตูระบายไอเทม -block.underflow-gate.name = Underflow Gate +block.underflow-gate.name = ประตูระบายไอเท็มย้อนกลับ block.silicon-smelter.name = เตาเผาซิลิกอน block.phase-weaver.name = เครื่องทอใยเฟส block.pulverizer.name = เครื่องบด @@ -1118,33 +1118,33 @@ block.container.name = ตู้เก็บของ block.launch-pad.name = ฐานส่งของ block.launch-pad-large.name = ฐานส่งของขนาดใหญ่ 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.command-center.name = ศูนย์ควบคุม +block.ground-factory.name = โรงงานภาคพื้นดิน +block.air-factory.name = โรงงานภาคอากาศ +block.naval-factory.name = โรงงานทางน้ำ +block.additive-reconstructor.name = Reconstructor แบบบวก +block.multiplicative-reconstructor.name = Reconstructor แบบคูณ +block.exponential-reconstructor.name = 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.payload-conveyor.name = สายพาน Mass +block.payload-router.name = ตัวเปลี่ยเส้นทาง Payload +block.disassembler.name = ตัวชำแหละ +block.silicon-crucible.name = เบ้าหลอมซิลิคอน +block.overdrive-dome.name = โดม Overdrive -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 = สวิชต์ +block.micro-processor.name = ตัวประมวลผล Micro +block.logic-processor.name = ตัวประมวลผล Logic +block.hyper-processor.name = ตัวประมวลผล Hyper +block.logic-display.name = ตัวแสดง Logic +block.large-logic-display.name = ตัวแสดง Logic ขนาดใหญ่ +block.memory-cell.name = เซลล์ความจำ team.blue.name = น้ำเงิน team.crux.name = แดง team.sharded.name = ส้ม team.orange.name = ส้ม -team.derelict.name = derelict +team.derelict.name = ไม่มี team.green.name = เขียว team.purple.name = ม่วง @@ -1208,12 +1208,12 @@ block.spore-press.description = อัดกระเปาะสปอร์ด block.pulverizer.description = บดเศษเหล็กให้เป็นทรายละเอียด. block.coal-centrifuge.description = ทำให้น้ำมันแข็งตัวเป็นก้อนถ่านหิน. block.incinerator.description = ทำลายไอเท็มหรือของเหลวทุกอย่างที่ได้รับมา. -block.power-void.description = ทิ้งพลังงานทั้งหมดที่ได้รับ. เฉพาะ Sandbox เท่านั้น. -block.power-source.description = ส่งออกพลังงานไม่จำกัด. เฉพาะ Sandbox เท่านั้น. -block.item-source.description = ส่งออกไอเท็มไม่จำกัด. เฉพาะ Sandbox เท่านั้น. -block.item-void.description = ทำลายทุกไอเท็ม . เฉพาะ Sandbox เท่านั้น. -block.liquid-source.description = ส่งออกของเหลวไม่จำกัด. เฉพาะ Sandbox เท่านั้น. -block.liquid-void.description = Removes any liquids. Sandbox only. +block.power-void.description = ทิ้งพลังงานทั้งหมดที่ได้รับ. เฉพาะ โหมดอิสระ เท่านั้น. +block.power-source.description = ส่งออกพลังงานไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. +block.item-source.description = ส่งออกไอเท็มไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. +block.item-void.description = ทำลายทุกไอเท็ม . เฉพาะ โหมดอิสระ เท่านั้น. +block.liquid-source.description = ส่งออกของเหลวไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. +block.liquid-void.description = ทิ้งของเหลวทุกชนิด. เฉพาะ โหมดอิสระ เท่านั้น. block.copper-wall.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ. block.copper-wall-large.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ.\nคลอบคลุมหลายข่อง. block.titanium-wall.description = บล็อคป้องกันแข็งแกร่งปานกลาง.\nป้องกันศัตรูได้ในระดับหนึ่ง. @@ -1222,8 +1222,8 @@ block.plastanium-wall.description = กำแพงพิเศษที่ส block.plastanium-wall-large.description = กำแพงพิเศษที่สามารถดูดซับไฟฟ้าและป้องกันการต่อไฟกับโหนดพลังงานโดยอัตโนมัติได้.\nคลอบคลุมหลายช่อง. block.thorium-wall.description = บล็อคป้องกันที่แข็งแรง.\nป้องกันศัตรูได้อย่างดี. block.thorium-wall-large.description = บล็อคป้องกันที่แข็งแรง.\nป้องกันศัตรูได้อย่างดี.\nคลอบคลุมหลายช่อง. -block.phase-wall.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact. -block.phase-wall-large.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact.\nคลอบคลุมหลายช่อง. +block.phase-wall.description = กำแพงที่เคลือบด้วยวัสดุสะท้อนพิเศษจำพวก phase. เบี่ยงเบนกระสุนส่วนใหญ่ที่รับมา. +block.phase-wall-large.description = กำแพงที่เคลือบด้วยวัสดุสะท้อนพิเศษจำพวก phase. เบี่ยงเบนกระสุนส่วนใหญ่ที่รับมา.\nคลอบคลุมหลายช่อง. block.surge-wall.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม. block.surge-wall-large.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.\nคลอบคลุมหลายช่อง. block.door.description = ประตูขนาดเล็ก. สามารถเปิดได้โดยการกด. @@ -1235,7 +1235,7 @@ block.force-projector.description = สร้างสนามพลังง block.shock-mine.description = ดาเมจศัตรูที่เหยียบ. แถบจะล่องหนต่อศัตรู. block.conveyor.description = บล็อคขนส่งไอเท็มพื้นฐาน. เคลื่อนไอเท็มไปข้างหน้าและใส่ลงบล็อคโดยอัตโนมัติ. สามารถหมุนได้. block.titanium-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. เคลื่อนไอเท็มเร็วกว่าสายพานทั่วไป. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. +block.plastanium-conveyor.description = เคลื่อนย้ายไอเท็มเป็นชุด.\nรับไอดท็มจากด้านหลัง, และนำออกไปสามทางข้างหน้า. block.junction.description = มีหน้าที่เป็นสะพานสำหรับสายพาน 2 สายข้ามกัน. มีประโยชน์สำหรับเวลาสายพาน 2 สายที่ขนไอเท็มมา 2 ชนิดไปยัง 2 สถานที่. block.bridge-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ทำให้สามารถส่งไอเท็มข้ามบล็อคใดก็ได้ 3 ช่อง. block.phase-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ใช้พลังงานเพื่อส่งไอเท็มไปยังสายพานเฟสอีกอัน ข้ามได้หลายช่อง. @@ -1244,14 +1244,14 @@ block.inverted-sorter.description = แยกไอเท็มคล้าย block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่าๆกัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[] block.distributor.description = เร้าเตอร์ขั้นสูง. แยกไอเท็มออก 7 ทางอย่างเท่าๆกัน. block.overflow-gate.description = ของจะออกจากข้างๆเมื่อทางข้างหน้ถูกบล็อคเท่านั้น. -block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. +block.underflow-gate.description = ตรงข้ามกับประตูระบายไอเท็ม. ส่งออกไอเท็มไปข้างหน้าหากทางซ้ายและขวาถูกบล็อค. block.mass-driver.description = บล็อคขนส่งไอเท็มขั้นสุดยอด. รวบรวมไอเท็มจำนวนหนึ่งแล้วยิงไปหาแมสไดรเวอร์อีกอันที่อยู่ไกลออกไป. ต้องใช้พลังงานในการใช้งาน. block.mechanical-pump.description = ปั๊มราคาถูก เอ้าพุธต์ช้า แต่ไม่ใช้พลังงาน. block.rotary-pump.description = ปั๊มขั้นสูง. ปั๊มของเหลวได้มากขึ้นแค่ใช้พลังงาน. block.thermal-pump.description = ปั๊มขั้นสุดยอด. block.conduit.description = บล็อคขนส่งของเหลวพื้นฐาน. เคลื่อนของเหลวไปข้างหน้า. ใช้ร่วมกับปั๊มและรางน้ำอื่นๆ. block.pulse-conduit.description = บล็อคขนส่งของเหลวขั้นสูง. เคลื่อนย้ายของเหลวเร็วขึ้นและเก็บเยอะกว่ารางน้ำธรรมดา. -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.plated-conduit.description = เคลื่อนย้ายของเหลวได้เร็วพอๆกับ ท่อน้ำพัลซ์, แต่มีเกราะที่หนากว่า. ไม่รับของเหลวจากด้านข้างจากอย่างอื่นนอกจากท่อน้ำด้วยกันเอง.\nรั่วน้อยกว่า. block.liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออก 3 ทางเท่าๆกัน. สามารถเก็บของ้หลวได้จำนวนหนึ่ง. มีประโยชน์สำหรับการแยกของเหลวจากแหล่งเดียวไปหลายที่. block.liquid-tank.description = เก็บของเหลวจำนวนมาก. ใช่สำหรับสร้างบัฟเฟอร์ในเวลาที่ความต้องการของทรัพยากรไม่คงที่หรือเป็นตัวเซฟสำหรับบล็อคที่จำเป็นต้องใช้การหล่อเย็น. block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับรางน้ำ 2 รางที่ข้ามกันที่มีของเหลว 2 ชนิด ซึ่งต้องการจะไปคนละที่. @@ -1302,4 +1302,4 @@ block.cyclone.description = ป้อมปืนต่อต้านอาก block.spectre.description = ปืนใหญ่ลำกล้องคูขนาดยักษ์. ยิงกระสุนเจาะเกราะใส่ศัตรูทั้งบนอากาศและภาดพื้นดิน. block.meltdown.description = ปืนใหญ่เลเซอร์ขนาดยักษ์. ชาร์จแล้วยิงลำแสงเลเซอร์ใส่ศัตรูที่อยู่ใกล้. จำเป็นต้องใช้สารหล่อเย็น. block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. +block.segment.description = ทำดาเมจและทำลายโปรเจกไตล์ที่กำลังเข้ามา. โปรเจกไตล์เลเซอร์จะไม่ถูกล็อคเป้าด้วยบล็อคนี้. From 6d163e45ac6389201ad00cb455f18f6e4bb99409 Mon Sep 17 00:00:00 2001 From: ballgamer56 <30421594+ballgamer56@users.noreply.github.com> Date: Mon, 28 Sep 2020 14:11:15 +0700 Subject: [PATCH 004/124] Update bundle_th.properties --- core/assets/bundles/bundle_th.properties | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index e31912c223..47b2ec62c0 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -534,11 +534,11 @@ sector.tarFields.name = Tar Fields sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass -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.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง. ศัตรูมีน้อย. ทรัพยากรน้อยฃ.\nเก็บตะกั่วและทองแดงให้ได้มากที่สุด.\nแล้วไปต่อ. +sector.frozenForest.description = แม้แต่ที่นี่, ที่ที่อยู่ใกล้ภูเขา, สปอร์ก็ยังแพร่มาถึงที่นี่. อากาศที่เย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป.\n\nเริ่มต้นการใช้ไฟฟ้า. สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ถ่าน. เรียนรู้ที่จะใช้เครื่องซ่อมแซม. +sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของ Salt Flats. สามารถพบทรัพยากรบางอย่างได้ที่นี่.\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่. ทำลาย core ของพวกมัน. อย่าให้มีอะไรเหลือ. +sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศนี้, ที่นี้เป็นอนุสรณ์ของสองคราม. ยึดพื้นที่นี่มา. เก็บทราย. เผากระจกเมต้า. ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและแท่นขุดเจาะ. +sector.ruinousShores.description = ต่อจากของเสียต่างๆ, เป็นที่ตั้งของชายฝั่ง. ครั้งก่อน, ที่นี่เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง. ณ ตอนนี้แทบจะไม่เหลือแล้ว. มีเหลือแค่ระบบการป้องกันพื้นฐาน, ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก.\nทำการขยายการสำรวจต่อไป. ค้นพบกับเทคโนโลยีอีกครั้ง. 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. @@ -1055,7 +1055,7 @@ block.surge-tower.name = เสาเสิร์จ block.diode.name = ไดโอดแบตเตอรี่ block.battery.name = แบตเตอรี่ block.battery-large.name = แบตเตอรี่ขนาดใหญ่ -block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าโดยการสันดาป +block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้ถ่าน block.steam-generator.name = เครื่องกำเนิดไฟฟ้าไอน้ำ block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเตอร์ block.impact-reactor.name = เตาปฏิกรณ์อัดกระแทก From 49df949967ad3dbb57bb210690e2b8262d11c451 Mon Sep 17 00:00:00 2001 From: ballgamer56 <30421594+ballgamer56@users.noreply.github.com> Date: Mon, 28 Sep 2020 16:33:34 +0700 Subject: [PATCH 005/124] Update bundle_th.properties --- core/assets/bundles/bundle_th.properties | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 47b2ec62c0..d2fe99fa53 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -539,17 +539,17 @@ sector.frozenForest.description = แม้แต่ที่นี่, ที sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของ Salt Flats. สามารถพบทรัพยากรบางอย่างได้ที่นี่.\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่. ทำลาย core ของพวกมัน. อย่าให้มีอะไรเหลือ. sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศนี้, ที่นี้เป็นอนุสรณ์ของสองคราม. ยึดพื้นที่นี่มา. เก็บทราย. เผากระจกเมต้า. ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและแท่นขุดเจาะ. sector.ruinousShores.description = ต่อจากของเสียต่างๆ, เป็นที่ตั้งของชายฝั่ง. ครั้งก่อน, ที่นี่เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง. ณ ตอนนี้แทบจะไม่เหลือแล้ว. มีเหลือแค่ระบบการป้องกันพื้นฐาน, ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก.\nทำการขยายการสำรวจต่อไป. ค้นพบกับเทคโนโลยีอีกครั้ง. -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.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา, ซึ่งยังไม่ถูกสปอร์แตะต้อง.\nขุดไทเทเนียมที่อุดมสมบูรณ์ในพื้นที่นี้. เรียนรู้ที่จะใช้มัน.\n\nมีศัตรูมากขึ้นในบริเวณนี้. อย่าปล่อยให้พวกมันปล่อยยูนิตที่แข็งแกร่งที่สุดของพวกมันออกมา. +sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช, ใกล้กับแหล่งกำเนิของสปอร์.\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่. สร้างยูนิตไททัน. ทำลายฐานซะ. แล้วนำสิ่งที่ถูกยึดไปกลับคืนมา. +sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน, อยู่ระหว่างภูเขาและทะเลทราย. หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดิบที่ใช้ได้.\nแม้ว่าจะถูกทิ้งร้าง, พื้นที่นี้ยังคงมีทัพของศัตรูอยู่ใกล้ๆ. อย่าประมาทกับพวกมัน.\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้. +sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก. ทรัพยากรมากมาย, แต่พื้นที่น้อย. ความเสี่ยงการโดนทำลายล้างสูง. ออกไปจากที่นี่ให้ไวที่สุด. อย่าถูกหลอกโดนระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ. +sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า, ถูกทำลายกลายเป็นซาก.\n[lightgray]วิจัยทอเรี่ยมและวิธีการใช้มัน.\n\nศัตรูในบริเวณนี้มีจำนวนมาก, ตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา. +sector.fungalPass.description = พื้นที่ระหว่างพื้นที่สูงและต่ำของภูเขา, พื้นที่นี้เต็มไปด้วยสปอร์. ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่.\nทำลายมันซะ.\nใช้ยูนิตเด็กเกอร์และครอว์เลอร์. ทำลาย core ทั้งสองซะ. settings.language = ภาษา settings.data = ข้อมูลเกม settings.reset = รีเซ็ตเป็นค่าเริ่มต้น -settings.rebind = Rebind +settings.rebind = แก้ไขปุ่ม settings.resetKey = Reset settings.controls = การควบคุม settings.game = เกม @@ -931,7 +931,7 @@ unit.vela.name = เวล่า unit.corvus.name = คอร์วัส block.resupply-point.name = จุดเติมของ -block.parallax.name = Parallax +block.parallax.name = พาราแล็ซ block.cliff.name = หน้าผ่า block.sand-boulder.name = ก้อนหินทราย block.grass.name = หญ้า From 50491755d1d4a3dcccdca5758c35c57c4acc893c Mon Sep 17 00:00:00 2001 From: ThePythonGuy <45978337+ThePythonGuy3@users.noreply.github.com> Date: Sat, 3 Oct 2020 16:59:39 +0200 Subject: [PATCH 006/124] typo and stuff --- core/assets/bundles/bundle_es.properties | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 8c538a6974..5c87f27455 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -2,14 +2,14 @@ credits.text = Creado por [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = Créditos contributors = Traductores y Contribuidores discord = ¡Únete al Discord de Mindustry! -link.discord.description = La sala oficial del Discord de Mindustry +link.discord.description = El servidor official de Discord de Mindustry link.reddit.description = El subreddit de Mindustry link.github.description = Código fuente del juego link.changelog.description = Lista de actualizaciones -link.dev-builds.description = Versiones de desarrollo inestables +link.dev-builds.description = Versiones en desarrollo inestables link.trello.description = Tablero de Trello oficial para las características planificadas link.itch.io.description = itch.io es la página donde podes descargar las versiones para PC y web -link.google-play.description = Ficha en la Google Play Store +link.google-play.description = Página de Mindustry en Google Play Store link.f-droid.description = Página de F-Droid del juego link.wiki.description = Wiki oficial de Mindustry link.suggestions.description = Sugerir nuevas funciones @@ -18,7 +18,7 @@ screenshot = Captura de pantalla guardada en {0} screenshot.invalid = Mapa demasiado grande, no hay suficiente memoria para la captura de pantalla. gameover = Tu núcleo ha sido destruido. gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! -highscore = [accent]¡Nueva mejor puntuación! +highscore = [accent]¡Nuevo récord de 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 @@ -38,12 +38,12 @@ be.ignore = Ignorar be.noupdates = No se encontraron actualizaciones. be.check = Revisando actualizaciones -schematic = Esquemático -schematic.add = Guardar esquemático... -schematics = Esquemáticos -schematic.replace = Un esquemático con ese nombre ya existe. ¿Deseas remplazarlo? -schematic.exists = Un esquemático con ese nombre ya existe. -schematic.import = Importar esquemático... +schematic = Esquema +schematic.add = Guardar esquema... +schematics = Esquemas +schematic.replace = Un esquema con ese nombre ya existe. ¿Deseas remplazarlo? +schematic.exists = Un esquema con ese nombre ya existe. +schematic.import = Importar esquema... schematic.exportfile = Exportar archivo schematic.importfile = Importar archivo schematic.browseworkshop = Buscar en el Steam Workshop From 6b36b65ac07b9a1b5e7aa5bc42afff121d1aeb6b Mon Sep 17 00:00:00 2001 From: cinnx <41754972+cinnx@users.noreply.github.com> Date: Sat, 3 Oct 2020 23:14:11 +0200 Subject: [PATCH 007/124] Update bundle_pl.properties fixed some translations; compared, fixed and added few lines from original bundle file --- core/assets/bundles/bundle_pl.properties | 107 ++++++++++++----------- 1 file changed, 58 insertions(+), 49 deletions(-) diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index f0c67c6a88..3760ea4ed2 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -14,14 +14,14 @@ link.f-droid.description = F-Droid catalogue listing link.wiki.description = Oficjana Wiki Mindustry link.suggestions.description = Zaproponuj nowe funkcje linkfail = Nie udało się otworzyć linku!\nURL został skopiowany. -screenshot = Zapisano zdjęcie w {0} +screenshot = Zapisano zrzut ekranu w {0} screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje miejsca w pamięci urządzenia. gameover = Koniec Gry gameover.pvp = Zwyciężyła drużyna [accent]{0}[]! -highscore = [accent] Nowy rekord! +highscore = [accent]Nowy rekord! copied = Skopiowano. -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]Wersja v6[] jest obecnie w [accent]alphie[].\n[lightgray]Oznacza to, że:[]\n[scarlet]- Kampania nie jest skończona[]\n- Brakuje zawartości\n - Większość [scarlet]SI jednostek[] nie działa poprawnie\n- Wiele jednostek jest niedokończonych\n- Wszystko to, co widzisz, może ulec zmianie lub usunięciu.\n\nZgłaszaj błędy i awarie na [accent]Githubie[]. +indev.notready = Ta część gry nie jest jeszcze ukończona load.sound = Dźwięki load.map = Mapy @@ -55,6 +55,7 @@ schematic.saved = Schemat zapisany. schematic.delete.confirm = Ten schemat zostanie usunięty. schematic.rename = Zmień nazwę schematu schematic.info = {0}x{1}, {2} bloków +schematic.disabled = [scarlet]Schematy są wyłączone[]\nNie możesz używać schematów na tej [accent]mapie[] lub [accent]serwerze. stat.wave = Fale powstrzymane:[accent] {0} stat.enemiesDestroyed = Przeciwnicy zniszczeni:[accent] {0} @@ -107,7 +108,7 @@ mods.guide = Poradnik do modów mods.report = Zgłoś Błąd mods.openfolder = Otwórz folder z modami mods.reload = Przeładuj -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = Gra zostanie teraz zamknięta, aby ponownie załadować mody. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Włączony mod.disabled = [scarlet]Wyłączony @@ -115,7 +116,7 @@ mod.disable = Wyłącz mod.content = Content: mod.delete.error = Nie udało się usunąć moda. Plik może być w użyciu. mod.requiresversion = [scarlet]Wymaga gry w wersji co najmniej: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]Niekompatybilne z wersją v6 (no minGameVersion: 105) mod.missingdependencies = [scarlet]Brakujące zależności: {0} mod.erroredcontent = [scarlet]Content Errors mod.errors = Wystąpił błąd podczas ładowania treści. @@ -127,7 +128,7 @@ mod.reloadrequired = [scarlet]Wymagany restart mod.import = Importuj Mod mod.import.file = Importuj Plik mod.import.github = Importuj mod z GitHuba -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]Mody JAR są niebezpieczne.[]\nUpewnij się, że importujesz ten mod z dobrze znanego źródła! mod.item.remove = Ten przedmiot jest częścią moda[accent] '{0}'[]. Aby usunąć go, odinstaluj modyfikację. mod.remove.confirm = Ten mod zostanie usunięty. mod.author = [lightgray]Autor:[] {0} @@ -148,12 +149,12 @@ techtree = Drzewo Technologiczne research.list = [lightgray]Badania: research = Badaj researched = [lightgray]{0} zbadane. -research.progress = {0}% complete +research.progress = {0}% ukończone players = {0} graczy players.single = {0} gracz -players.search = search +players.search = wyszukaj players.notfound = [gray]nie znaleziono graczy -server.closing = [accent] Zamykanie serwera... +server.closing = [accent]Zamykanie serwera... server.kicked.kick = Zostałeś wyrzucony z serwera! server.kicked.whitelist = Nie ma cię tu na białej liście. server.kicked.serverClose = Serwer został zamknięty. @@ -171,11 +172,11 @@ server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobi server.kicked.gameover = Koniec gry! server.kicked.serverRestarting = Restart serwera. server.versions = Twoja wersja gry:[accent] {0}[]\nWersja gry serwera:[accent] {1}[] -host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[]. \nKażdy w tej samej sieci [lightgray]wifi lub hotspocie[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, musisz wykonać [accent]przekierowywanie portów[].\n\n[lightgray]Notka: Jeśli ktokolwiek ma problem z dołączeniem do gry lokalnej, upewnij się, że udostępniłeś Mindustry dostęp do sieci w ustawieniach zapory (firewall). Zauważ, że niektóre sieci publiczne mogą nie zezwalać na wykrycie serwerów. -join.info = Tutaj możesz wpisać [accent]adres IP serwera[] aby do niego dołączyć lub wyszukać [accent]serwery w lokalnej sieci[], do których możesz dołączyć.\nGra wieloosobowa na LAN i WAN jest wspierana.\n\n[lightgray]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać hosta o jego IP, które można znaleźć po wpisaniu "my ip" w przeglądarce na urządzeniu hosta. +host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[]. \nKażdy w tej samej sieci [lightgray]wifi lub hotspocie[] powinien zobaczyć twój serwer na ich liście serwerów.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, musisz wykonać [accent]przekierowywanie portów[].\n\n[lightgray]Notka: Jeśli ktokolwiek ma problem z dołączeniem do gry lokalnej, upewnij się, że udostępniłeś Mindustry dostęp do sieci w ustawieniach zapory (firewall). Zauważ, że niektóre sieci publiczne mogą nie zezwalać na wykrycie serwerów. +join.info = Tutaj możesz wpisać [accent]adres IP serwera[] aby do niego dołączyć lub wyszukać [accent]serwery w lokalnej sieci[] lub wyszukać [accent]publiczne[] serwery, do których możesz dołączyć.\nGra wieloosobowa na LAN i WAN jest wspierana.\n\n[lightgray]Jeśli chcesz dołączyć przez IP, musisz zapytać hosta o jego IP, które można znaleźć po wpisaniu "my ip" w przeglądarce na urządzeniu hosta. hostserver = Stwórz Serwer invitefriends = Zaproś Znajomych -hostserver.mobile = Hostuj\nGrę +hostserver.mobile = Hostuj Grę host = Hostuj hosting = [accent]Otwieranie serwera... hosts.refresh = Odśwież @@ -208,11 +209,11 @@ server.outdated.client = [crimson]Przestarzały klient![] server.version = [gray]Wersja: {0} server.custombuild = [accent]Zmodowany klient confirmban = Jesteś pewny, że chcesz zbanować "{0}[white]"? -confirmkick = Jesteś pewny, że chcesz wyrzucić {0}[white]"? -confirmvotekick = Jesteś pewny, że chcesz głosować za wyrzuceniem {0}[white]"? +confirmkick = Jesteś pewny, że chcesz wyrzucić "{0}[white]"? +confirmvotekick = Jesteś pewny, że chcesz głosować za wyrzuceniem "{0}[white]"? confirmunban = Jesteś pewny, że chcesz odbanować tego gracza? -confirmadmin = Jesteś pewny, że chcesz dać rangę admina {0}[white]"? -confirmunadmin = Jesteś pewny, że chcesz zabrać rangę admina {0}[white]"? +confirmadmin = Jesteś pewny, że chcesz dać rangę admina "{0}[white]"? +confirmunadmin = Jesteś pewny, że chcesz zabrać rangę admina "{0}[white]"? joingame.title = Dołącz do gry joingame.ip = IP: disconnect = Rozłączono. @@ -237,7 +238,7 @@ save.delete = Usuń save.export = Eksportuj save.import.invalid = [accent]Zapis gry jest niepoprawny! save.import.fail = [crimson]Nie udało się zaimportować zapisu: [accent]{0} -save.export.fail = [crimson]Nie można wyeksportować zapisu: [accent]{0} +save.export.fail = [crimson]Nie udało się wyeksportować zapisu: [accent]{0} save.import = Importuj Zapis save.newslot = Zapisz nazwę: save.rename = Zmień nazwę @@ -255,14 +256,14 @@ save.wave = Fala {0} save.mode = Tryb Gry: {0} save.date = Ostatnio Zapisane: {0} save.playtime = Czas gry: {0} -warning = Uwaga +warning = Uwaga. confirm = Potwierdź delete = Usuń view.workshop = Pokaż w Warsztacie workshop.listing = Edytuj pozycję w Warsztacie ok = OK open = Otwórz -customize = Dostosuj +customize = Dostosuj zasady cancel = Anuluj openlink = Otwórz Link copylink = Kopiuj Link @@ -272,19 +273,19 @@ data.import = Importuj Dane data.openfolder = Otwórz folder danych data.exported = Dane wyeksportowane. data.invalid = Nieprawidłowe dane gry. -data.import.confirm = Zaimportowanie zewnętrznych danych usunie[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zimportowane, gra automatycznie się wyłączy. +data.import.confirm = Zaimportowanie zewnętrznych danych nadpisze[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zaimportowane, gra automatycznie się wyłączy. quit.confirm = Czy na pewno chcesz wyjść? quit.confirm.tutorial = Jesteś pewien?\nSamouczek może zostać powtórzony w[accent] Ustawienia->Gra->Ponów samouczek.[] loading = [accent]Ładowanie... reloading = [accent]Przeładowywanie Modów... saving = [accent]Zapisywanie... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}][] by odrodzić się w rdzeniu cancelbuilding = [accent][[{0}][] by wyczyścić plan selectschematic = [accent][[{0}][] by wybrać+skopiować pausebuilding = [accent][[{0}][] by wstrzymać budowę resumebuilding = [scarlet][[{0}][] by kontynuować budowę wave = [accent]Fala {0} -wave.waiting = Fala za {0} +wave.waiting = [lightgray]Fala za {0} wave.waveInProgress = [lightgray]Fala w trakcie waiting = [lightgray]Oczekiwanie... waiting.players = Oczekiwanie na graczy... @@ -295,7 +296,7 @@ saveimage = Zapisz Obraz unknown = Nieznane custom = Własne builtin = Wbudowane -map.delete.confirm = Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie można jej przywrócić. +map.delete.confirm = Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie można jej przywrócić! map.random = [accent]Losowa Mapa map.nospawn = Ta mapa nie zawiera żadnego rdzenia! Dodaj [accent]pomarańczowy[] rdzeń do tej mapy w edytorze. map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[scarlet] inny niż pomarańczowy[] rdzeń do mapy w edytorze. @@ -309,7 +310,7 @@ workshop.info = Informacja o pozycji changelog = Historia aktualizacji (opcjonalna): eula = Umowa Użytkownika Końcowego (EULA) Steam missing = Ta pozycja została przeniesiona bądź usunięta.\n[lightgray]Pozycja na Warsztacie została automatycznie odłączona. -publishing = [accent]Trwa publikowanie... +publishing = [accent]Publikowanie... publish.confirm = Czy jesteś pewien, że chcesz to opublikować?\n\n[lightgray]Najpierw upewnij się, że zgadzasz się z umową EULA Warsztatu, w przeciwnym razie twoje pozycje nie będą widoczne! publish.error = Błąd podczas publikowania pozycji: {0} steam.error = Nie udało się zainicjować serwisów Steam.\nBłąd: {0} @@ -346,6 +347,7 @@ waves.invalid = Nieprawidłowe fale w schowku. waves.copied = Fale zostały skopiowane. waves.none = Brak zdefiniowanych wrogów.\nPamiętaj, że puste układy fal zostaną automatycznie zastąpione układem domyślnym. +#these are intentionally in lower case wavemode.counts = counts wavemode.totals = totals wavemode.health = health @@ -386,10 +388,10 @@ editor.export = Eksportuj... editor.exportfile = Eksportuj Plik editor.exportfile.description = Eksportuj plik mapy editor.exportimage = Eksportuj Obraz Terenu -editor.exportimage.description = Eksportuj plik obrazu terenu +editor.exportimage.description = Eksportuj plik obrazu zawierający tylko podstawowy teren editor.loadimage = Załaduj Teren editor.saveimage = Zapisz Teren -editor.unsaved = [scarlet]Masz niezapisane zmiany![]\nCzy na pewno chcesz wyjść? +editor.unsaved = Czy na pewno chcesz wyjść?[]\n[scarlet]Wszelkie niezapisane zmiany zostaną utracone. editor.resizemap = Zmień Rozmiar Mapy editor.mapname = Nazwa Mapy: editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy. @@ -469,24 +471,19 @@ locked = Zablokowane complete = [lightgray]Ukończone: requirement.wave = Osiągnij falę {0} w {1} requirement.core = Zniszcz Rdzeń wroga w {0} -requirement.research = Research {0} -requirement.capture = Capture {0} -resume = Kontynuuj Strefę:\n[lightgray]{0} +requirement.research = Zbadaj {0} +requirement.capture = Zdobądź {0} bestwave = [lightgray]Najwyższa fala: {0} -launch = < WYSTRZEL > -launch.text = Launch -launch.title = Wystrzelenie udane -launch.next = [lightgray]Następna okazja przy fali {0} -launch.unable2 = [scarlet]WYSTRZELENIE niedostępne.[] -launch.confirm = Spowoduje to wystrzelenie wszystkich surowców w rdzeniu.\nNie będziesz mógł wrócić do tej bazy. -launch.skip.confirm = Jeśli teraz przejdziesz do kolejnej fali, nie będziesz miał możliwości wystrzelenia do czasu pokonania dalszych fal. +launch.text = Wystrzel +campaign.multiplayer = Podczas gry w trybie wieloosobowym w kampanii możesz badać używając tylko przedmiotów ze [accent]swoich[] sektorów, a [scarlet]nie[] sektoru hosta na którym aktualnie jesteś.\n\nAby zdobyć przedmioty dla [accent]swoich[] sektorów w trybie wieloosobowym, użyj [accent]wyrzutni[]. uncover = Odkryj configure = Skonfiguruj Ładunek +#TODO loadout = Loadout -resources = Resources +resources = Zasoby bannedblocks = Zabronione bloki addall = Dodaj wszystkie -launch.destination = Destination: {0} +launch.destination = Cell: {0} configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}. zone.unlocked = [lightgray]Strefa {0} odblokowana. zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione. @@ -500,7 +497,7 @@ boss.health = Zdrowie Bossa connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0} error.unreachable = Serwer niedostępny.\nCzy adres jest wpisany poprawnie? error.invalidaddress = Niepoprawny adres. -error.timedout = Przekroczono limit czasu!\nUpewnij się, że host ma ustawione przekierowanie portu oraz poprawność wpisanego adresu! +error.timedout = Przekroczono limit czasu!\nUpewnij się, że host ma ustawione przekierowanie portu oraz sprawdź poprawność wpisanego adresu! error.mismatch = Błąd pakietu:\nprawdopodobne niedopasowanie klienta/serwera.\nUpewnij się, że ty i host macie najnowszą wersję Mindustry! error.alreadyconnected = Jesteś już połączony. error.mapnotfound = Plik mapy nie został znaleziony! @@ -508,12 +505,12 @@ error.io = Błąd sieciowy I/O. error.any = Nieznany błąd sieci. error.bloom = Nie udało się załadować bloom.\nTwoje urządzenie może nie wspierać tej funkcji. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Deszcz +weather.snow.name = Śnieg +weather.sandstorm.name = Burza piaskowa +weather.sporestorm.name = Burza zarodników -sectors.unexplored = [lightgray]Unexplored +sectors.unexplored = [lightgray]Niezbadane sectors.resources = Resources: sectors.production = Production: sectors.stored = Stored: @@ -522,6 +519,7 @@ sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Punkt Zerowy sector.craters.name = Kratery sector.frozenForest.name = Zamrożony Las @@ -534,9 +532,13 @@ sector.tarFields.name = Pola Smołowe sector.saltFlats.name = Solne Równiny sector.fungalPass.name = Grzybowa Przełęcz +#unused +#sector.impact0078.name = Impact 0078 +#sector.crags.name = Crags + sector.groundZero.description = Optymalna lokalizacja, aby rozpocząć jeszcze raz. Niskie zagrożenie. Niewiele zasobów.\nZbierz jak najwięcej miedzi i ołowiu, tyle ile jest możliwe.\nPrzejdź do następnej strefy jak najszybciej. -sector.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzestrzeniły się. Niskie temperatury nie mogą ich zatrzymać na zawsze.\n\nRozpocznij przedsięwzięcie od władzy. Buduj generatory spalinowe. Naucz się korzystać z naprawiaczy. -sector.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdżeń. Zniszcz wszystko co stanie ci na drodze. +sector.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzestrzeniły się. Niskie temperatury nie mogą ich zatrzymać na zawsze.\n\nRozpocznij przedsięwzięcie od prądu. Buduj generatory spalinowe. Naucz się korzystać z naprawiaczy. +sector.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdzeń. Zniszcz wszystko co stanie ci na drodze. sector.craters.description = W tym kraterze zebrała się woda. Pozostałość dawnych wojen. Odzyskaj ten teren. Wykop piasek. Wytop metaszkło. Pompuj wodę do działek obronnych i wierteł by je schłodzić sector.ruinousShores.description = Za pustkowiami ciągnie się linia brzegowa. Kiedyś znajdowała się tu przybrzeżna linia obronna. Niewiele z niej zostało. Ostały się tylko podstawowe struktury obronne, z reszty został tylko złom.\nKontynuuj eksploracje. Odkryj pozostawioną tu technologię. sector.stainedMountains.description = W głębi lądu leżą góry, jeszcze nieskażone przez zarodniki.\nWydobądź obfity tytan w tym obszarze. Dowiedz się, jak z niego korzystać.\n\nObecność wroga jest tutaj większa. Nie daj im czasu na wysłanie swoich najsilniejszych jednostek. @@ -594,6 +596,7 @@ blocks.powerconnections = Maksymalna ilość połączeń blocks.poweruse = Zużycie prądu blocks.powerdamage = Moc/Zniszczenia blocks.itemcapacity = Pojemność przedmiotów +blocks.memorycapacity = Memory Capacity blocks.basepowergeneration = Podstawowa generacja mocy blocks.productiontime = Czas produkcji blocks.repairtime = Czas pełnej naprawy bloku @@ -822,6 +825,7 @@ mode.custom = Własny tryb rules.infiniteresources = Nieskończone zasoby rules.reactorexplosions = Eksplozje reaktorów +rules.schematic = Schematics Allowed rules.wavetimer = Zegar fal rules.waves = Fale rules.attack = Tryb ataku @@ -847,6 +851,7 @@ rules.title.unit = Jednostki rules.title.experimental = Eksperymentalne rules.title.environment = Environment rules.lighting = Oświetlenie +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Otaczające Światło @@ -990,7 +995,7 @@ block.pine.name = Sosna block.dirt.name = Dirt block.dirt-wall.name = Dirt Wall block.mud.name = Mud -block.white-tree-dead.name = Białe Drzewo Martwe +block.white-tree-dead.name = Białe Martwe Drzewo block.white-tree.name = Białe Drzewo block.spore-cluster.name = Skupisko Zarodników block.metal-floor.name = Metalowa Podłoga @@ -1075,6 +1080,7 @@ block.power-source.name = Źródło prądu block.unloader.name = Ekstraktor block.vault.name = Magazyn block.wave.name = Strumień +block.tsunami.name = Tsunami block.swarmer.name = Działo Rojowe block.salvo.name = Działo Salwowe block.ripple.name = Działo Falowe @@ -1114,6 +1120,7 @@ block.arc.name = Piorun block.rtg-generator.name = Generator RTG block.spectre.name = Huragan block.meltdown.name = Rozpad +block.foreshadow.name = Foreshadow block.container.name = Kontener block.launch-pad.name = Wyrzutnia block.launch-pad-large.name = Duża Wyrzutnia @@ -1139,6 +1146,7 @@ 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.memory-bank.name = Memory Bank team.blue.name = niebieski team.crux.name = czerwony @@ -1166,7 +1174,7 @@ tutorial.breaking = Bloki często wymagają rozbiórki.\n[accent]Przytrzymaj pra tutorial.breaking.mobile = Bloki często wymagają rozbiórki.\n[accent]Wybierz tryb dekonstrukcji[], a następnie dotknij blok by zacząć go niszczyć.\nZdekonstruuj obszarowo poprzez przytrzymanie palcem przez moment[] i przesunięcie go w jakimś kierunku.\nNaciśnij przycisk ptaszka by potwierdzić rozbiórkę.\n\n[accent]Zniszcz wszystkie bloki złomu na lewo od twojego rdzenia używając selekcji obszarowej. tutorial.withdraw = Czasami, konieczne jest wyjmowanie przedmiotów prosto z bloków.\nBy tego dokonać, [accent]kliknij blok[] z przedmiotami w nim, potem [accent]kliknij przedmiot[] w inwentarzu.\nMożesz zebrać wiele przedmiotów naraz poprzez [accent]kliknięcie i przytrzymanie[].\n\n[accent]Zabierz trochę miedzi z rdzenia.[] tutorial.deposit = Włóż przedmioty do bloków poprzez przeciągnięcie z twojego statku do danego bloku.\n\n[accent]Włóż miedź z powrotem do rdzenia .[] -tutorial.waves = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdżeń przez 2 fale.[accent] Kliknij[] by strzelać.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi. +tutorial.waves = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdzeń przez 2 fale.[accent] Kliknij[] by strzelać.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi. tutorial.waves.mobile = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdzeń przez 2 fale. Twój statek będzie automatycznie atakował wrogów.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi. tutorial.launch = Kiedy dotrzesz do określonej fali, masz możliwość[accent] wystrzelenia rdzenia[], pozostawiając struktury obronne za sobą i[accent] otrzymując wszystkie surowce znajdujące się w rdzeniu.[]\nSurowce te mogą potem zostać użyte do odkrywania nowych technologii.\n\n[accent]Naciśnij przycisk Wystrzału. @@ -1303,3 +1311,4 @@ block.spectre.description = Duże działo dwulufowe, które strzela potężnymi block.meltdown.description = Duże działo laserowe, które strzela potężnymi wiązkami dalekiego zasięgu. Wymaga chłodzenia. block.repair-point.description = Bez przerw naprawia najbliższą uszkodzoną jednostkę w jego zasięgu. block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. + From 903424654d985fa5f868334abdbeed3c350d2cd0 Mon Sep 17 00:00:00 2001 From: Wina <58987087+ActualWina@users.noreply.github.com> Date: Sat, 3 Oct 2020 22:39:33 -0300 Subject: [PATCH 008/124] Updates to bundle_es.properties --- core/assets/bundles/bundle_es.properties | 250 +++++++++++------------ 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 8c538a6974..818929441c 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -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 = La [accent]v6[] esta actualmente en la [accent]alpha[].\n[lightgray]Esto significa:[]\n[scarlet]- La campaña no esta completada[]\n- Falta contenido\n - La mayoría de la [scarlet]Inteligencia Artificial[] no funciona correctamente\n- Muchas unidades no están terminadas\n- Todo lo que ves puede ser modificado o eliminado en la versión final.\n\nReporta bugs o crasheos en [accent]Github[]. +indev.notready = Esta parte del juego no esta lista aún. load.sound = Sonidos load.map = Mapas @@ -103,19 +103,19 @@ mods.alphainfo = Ten en cuenta que los mods estan en versión Alpha, y[scarlet] mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]No se encontraron Mods! -mods.guide = Guia de Modding +mods.guide = Guía de Modding mods.report = Reportar Error mods.openfolder = Abrir carpeta de mods -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reload = Recargar +mods.reloadexit = El juego se va a cerrar para recargar los mods. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Activado mod.disabled = [scarlet]Desactivado mod.disable = Desactivar -mod.content = Content: +mod.content = Contenido: mod.delete.error = Fallo al elminar el mod. Quizás el archivo esta en uso. mod.requiresversion = [scarlet]Requiere mínima versión del juego: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]No es compatible con la V6 (no minGameVersion: 105) mod.missingdependencies = [scarlet]Dependencias faltantes: {0} mod.erroredcontent = [scarlet]Errores de contenido mod.errors = Ocurrieron fallos al cargar el contenido. @@ -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 JAR pueden ser inseguros.[]\nAsegúrate de que los descargaste de una fuente segura! mod.item.remove = Este objeto es parte del[accent] '{0}'[] mod. Para eliminarlo, desinstala ese mod. mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar? mod.author = [lightgray]Autor:[] {0} @@ -139,8 +139,8 @@ mod.scripts.disable = Tu dispositivo no soporta los mods con scripts. Debes desh about.button = Acerca de name = Nombre: noname = Elige un[accent] nombre de jugador[] primero. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Mapa del planeta +launchcore = Lanzar núcleo filename = Nombre del archivo: unlocked = ¡Nuevo Bloque Desbloqueado! completed = [accent]Completado @@ -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 reaparecer en el núcleo 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 = Salud editor.default = [lightgray] details = Detalles... @@ -415,8 +415,8 @@ toolmode.drawteams.description = Dibuja equipos en vez de bloques. filters.empty = [lightgray]¡No hay filtros! Añade uno con el botón de abajo. filter.distort = Distorsionar filter.noise = Ruido -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = Elegir punto de aparición enemigo +filter.corespawn = Elegir Núcleo filter.median = Median filter.oremedian = Veta Median filter.blend = Mezcla @@ -436,7 +436,7 @@ filter.option.circle-scale = Escala del círculo filter.option.octaves = Octaves filter.option.falloff = Caída filter.option.angle = Ángulo -filter.option.amount = Amount +filter.option.amount = Cantidad filter.option.block = Bloque filter.option.floor = Suelo filter.option.flooronto = Suelo objetivo @@ -508,31 +508,31 @@ 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]No explorado +sectors.resources = Recursos: +sectors.production = Producción: +sectors.stored = Almacenado: +sectors.resume = Reanudar +sectors.launch = Lanzar +sectors.select = Elegir +sectors.nonelaunch = [lightgray]ninguno (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 = Terreno Zero +sector.craters.name = Los Cráteres +sector.frozenForest.name = Bosque Congelado +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 = Llanuras de sal +sector.fungalPass.name = Paso de hongos sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. @@ -558,18 +558,18 @@ 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 de que quieres borrar tus partidas guardadas? +settings.clearsaves = Limpiar partidas guardadas paused = [accent] < Pausado > clear = Limpiar banned = [scarlet]Baneado -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]Necesita que el sector esté capturado. yes = Sí 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]La 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 mostrado blocks.liquidcapacity = Capacidad de Líquidos blocks.powerrange = Rango de Energía -blocks.linkrange = Link Range +blocks.linkrange = Rango de conexión blocks.instructions = Instructions blocks.powerconnections = Conexiones maximas blocks.poweruse = Consumo de Energía @@ -605,18 +605,18 @@ blocks.boosteffect = Efecto del Potenciador blocks.maxunits = Máximo de Unidades Activas blocks.health = Vida blocks.buildtime = Tiempo de construcción -blocks.maxconsecutive = Max Consecutive +blocks.maxconsecutive = Máximo consecutivo blocks.buildcost = Coste de construcción blocks.inaccuracy = Imprecisión blocks.shots = Disparos blocks.reload = Recarga blocks.ammo = Munición -blocks.shieldhealth = Shield Health -blocks.cooldowntime = Cooldown Time +blocks.shieldhealth = Salud 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 = Se requiere de un núcleo base bar.drillspeed = Velocidad del Taladro: {0}/s bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% @@ -660,7 +660,7 @@ unit.persecond = /seg unit.perminute = /min unit.timesspeed = x velocidad unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = salud del escudo unit.items = objetos unit.thousands = k unit.millions = M @@ -677,13 +677,13 @@ 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 flujo de recursos[scarlet] (experimental) setting.buildautopause.name = Auto-pausar construcción -setting.mapcenter.name = Auto Center Map To Player +setting.mapcenter.name = Auto-centrar el mapa en el jugador setting.animatedwater.name = Agua Animada setting.animatedshields.name = Escudos Animados -setting.antialias.name = Antialias[lightgray] (necesita reiniciar)[] -setting.playerindicators.name = Player Indicators +setting.antialias.name = Antialias[lightgray] (necesita un reinicio)[] +setting.playerindicators.name = Indicadores de jugadores setting.indicators.name = Indicadores de Aliados setting.autotarget.name = Auto apuntado setting.keyboard.name = Controles de Ratón+Teclado @@ -702,7 +702,7 @@ setting.difficulty.name = Dificultad: setting.screenshake.name = Movimiento de la Pantalla setting.effects.name = Mostrar Efectos setting.destroyedblocks.name = Mostrar bloques destruidos -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Mostrar estado de los bloques setting.conveyorpathfinding.name = Colocación del transportador en búsqueda de caminos setting.sensitivity.name = Sensibilidad del Control setting.saveinterval.name = Intervalo del Autoguardado @@ -712,7 +712,7 @@ 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) @@ -743,27 +743,27 @@ keybinds.mobile = [scarlet]Los accesos del teclado aquí mostrados no estan disp category.general.name = General category.view.name = Visión category.multiplayer.name = Multijugador -category.blocks.name = Block Select +category.blocks.name = Seleccionar bloques command.attack = Atacar command.rally = Patrullar command.retreat = Retirarse -command.idle = Idle -placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +command.idle = Esperar +placement.blockselectkeys = \n[lightgray]LLaves: [{0}, +keybind.respawn.name = Reaparecer +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... keybind.screenshot.name = Captura de pantalla de Mapa keybind.toggle_power_lines.name = Activar láser de potencia -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_block_status.name = Cambiar estado de los bloques keybind.move_x.name = Mover x keybind.move_y.name = Mover y keybind.mouse_move.name = Seguír al ratón -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = Vista Pan +keybind.boost.name = Potenciar keybind.schematic_select.name = Seleccionar región -keybind.schematic_menu.name = Menu de esquématicos +keybind.schematic_menu.name = Menu de esquemas keybind.schematic_flip_x.name = Girar esquemático desde X keybind.schematic_flip_y.name = Girar esquemático desde Y keybind.category_prev.name = Categoría anterior @@ -839,20 +839,20 @@ rules.buildspeedmultiplier = Multiplicador de velocidad de construcción rules.deconstructrefundmultiplier = Multiplicador de Devolución de Desconstrucción rules.waitForWaveToEnd = Las oleadas esperan a los enemigos rules.dropzoneradius = Radio de zona de caída:[lightgray] (casillas) -rules.unitammo = Units Require Ammo +rules.unitammo = Las unidades necesitan munición rules.title.waves = Oleadas 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 = Entorno rules.lighting = Iluminación rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.explosions = Daño de explosiones de Bloques/Unidades rules.ambientlight = Iluminación ambiental -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Clima +rules.weather.frequency = Frecuencia: +rules.weather.duration = Duración: content.item.name = Objetos content.liquid.name = Líquidos @@ -886,18 +886,18 @@ item.radioactivity = [lightgray]Radioactividad: {0} unit.health = [lightgray]Vida: {0} unit.speed = [lightgray]Velocidad: {0} unit.weapon = [lightgray]Weapon: {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.itemcapacity = [lightgray]Capacidad de ítems: {0} +unit.minespeed = [lightgray]Velocidad de minado: {0}% +unit.minepower = [lightgray]Poder de minado: {0} +unit.ability = [lightgray]Habilidad: {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 @@ -907,8 +907,8 @@ 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.flare.name = Llama +unit.horizon.name = Horizonte unit.zenith.name = Zenith unit.antumbra.name = Antumbra unit.eclipse.name = Eclipse @@ -925,33 +925,33 @@ unit.omura.name = Omura unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma -unit.scepter.name = Scepter +unit.scepter.name = Cetro unit.reign.name = Reign unit.vela.name = Vela -unit.corvus.name = Corvus +unit.corvus.name = Corvo -block.resupply-point.name = Resupply Point +block.resupply-point.name = Punto de reabastecimiento block.parallax.name = Parallax -block.cliff.name = Cliff +block.cliff.name = Acantilado block.sand-boulder.name = Piedra de Arena block.grass.name = Hierba -block.slag.name = Slag +block.slag.name = Escoria block.salt.name = Sal -block.salt-wall.name = Salt Wall +block.salt-wall.name = Pared de sal block.pebbles.name = Guijarros block.tendrils.name = Zarcillos -block.sand-wall.name = Sand Wall +block.sand-wall.name = Pared de arena block.spore-pine.name = Pino de esporas -block.spore-wall.name = Spore Wall +block.spore-wall.name = Pared de esporas block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.snow-boulder.name = Piedra nevosa 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 = Pared de shale 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 @@ -979,17 +979,17 @@ block.craters.name = Cráteres 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.name = Dacita +block.dacite-wall.name = Pared 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 = Pared de hielo +block.snow-wall.name = Pared de nieve +block.dune-wall.name = Pared de duna 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 = Pared de tierra +block.mud.name = Lodo 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 terrestre +block.air-factory.name = Fábrica aérea +block.naval-factory.name = Fábrica naval +block.additive-reconstructor.name = Reconstructor aditivo +block.multiplicative-reconstructor.name = Reconstructor multiplicativo +block.exponential-reconstructor.name = Reconstructor exponencial +block.tetrative-reconstructor.name = Reconstructor tetrativo +block.payload-conveyor.name = Cinta de transporte masivo +block.payload-router.name = Enrutador Payload +block.disassembler.name = Desmontador +block.silicon-crucible.name = Crisol de Silicio +block.overdrive-dome.name = Domo de sobremarcha -block.switch.name = 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 = Cambio +block.micro-processor.name = Micro Procesador +block.logic-processor.name = Procesador Lógico +block.hyper-processor.name = Hiper Procesador +block.logic-display.name = Pantalla Lógica +block.large-logic-display.name = Pantalla Lógica grande +block.memory-cell.name = Célula de memoria team.blue.name = Azul team.crux.name = rojo team.sharded.name = naranja team.orange.name = Naranja -team.derelict.name = derelict +team.derelict.name = Abandonado 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 proyectiles enemigos. No apunta a láseres. From a7bbea5d3ad344f33538fcdb1c8307fedbd1e04b Mon Sep 17 00:00:00 2001 From: BasedUser Date: Thu, 8 Oct 2020 01:25:32 +0300 Subject: [PATCH 009/124] Update servers_be.json additional flexibility --- servers_be.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers_be.json b/servers_be.json index 5ebfae37df..3e1d51f759 100644 --- a/servers_be.json +++ b/servers_be.json @@ -7,5 +7,8 @@ }, { "address": "md.surrealment.com" + }, + { + "address": "routerchain.ddns.net:6568" } ] From a85a20b3466b63cc3bd55d93d5ebced0635dda90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Ga=C5=A1par=C3=ADk?= Date: Wed, 14 Oct 2020 08:00:43 +0200 Subject: [PATCH 010/124] Czech translation up to commit 1554fd0 --- core/assets/bundles/bundle_cs.properties | 31 +++++++++++++++++------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 8bcd567380..b013eef9db 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -20,7 +20,7 @@ gameover = Konec hry gameover.pvp = Vyhrál tým [accent]{0}[]! highscore = [accent]Nový rekord! copied = Zkopírováno. -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.popup = Mindustry [accent]v6[] je aktuálně ve verzi [accent]beta[].\n[lightgray]To znamená:[]\n[scarlet]- Kampaň je nedokončená[]\n- SFX a hudba je nedokončená nebo chybí\n- Cokoli, co vidíte, se může změnit nebo být odstraněno.\n\nHlaste prosím chyby na [accent]Github[]. indev.notready = Tato část hry ještě není připravena load.sound = Zvuky @@ -291,6 +291,8 @@ waiting = [lightgray]Čekám...[] waiting.players = Čekání na hráče... wave.enemies = [lightgray]{0} zbývajících nepřátel wave.enemy = [lightgray]{0} zbývající nepřítel +wave.guardianwarn = Počet vln do příchodu strážce: [accent]{0}[]. +wave.guardianwarn.one = [accent]Strážce přijde již příští vlnu![] loadimage = Nahrát obrázek saveimage = Uložit obrázek unknown = Neznámý @@ -329,6 +331,7 @@ editor.generation = Generace: editor.ingame = Upravit ve hře editor.publish.workshop = Vystavit ve Workshopu na Steamu editor.newmap = Nová mapa +editor.center = Vycentrovat workshop = Workshop na Steamu waves.title = Vlny waves.remove = Odebrat @@ -338,7 +341,7 @@ waves.waves = vln(y) waves.perspawn = za zrození waves.shields = štítů/vlnu waves.to = do -waves.guardian = Guardian +waves.guardian = Strážce waves.preview = Náhled waves.edit = Upravit.... waves.copy = Uložit do schránky @@ -517,7 +520,11 @@ sectors.stored = Uskladněno: sectors.resume = Pokračovat sectors.launch = Vyslat sectors.select = Vybrat -sectors.nonelaunch = [lightgray]žádné (slunce)[] +sectors.nonelaunch = [lightgray]bez (slunce)[] + +planet.serpulo.name = Serpulo +#TODO better name +planet.sun.name = Sol #NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Základní tábor @@ -572,6 +579,7 @@ info.title = Informace error.title = [scarlet]Objevila se chyba[] error.crashtitle = Objevila se chyba unit.nobuild = [scarlet]Jednotka nemůže stavět +lastaccessed = [lightgray]Naposledy použil: {0} blocks.input = Vstup blocks.output = Výstup blocks.booster = Posilovač @@ -627,6 +635,7 @@ bar.powerbalance = Energie: {0} bar.powerstored = Uskladněno: {0}/{1} bar.poweramount = Energie celkem: {0} bar.poweroutput = Výstup energie: {0} +bar.powerlines = Spojení: {0}/{1} bar.items = Předměty: {0} bar.capacity = Kapacita: {0} bar.unitcap = {0} {1}/{2} @@ -646,11 +655,13 @@ bullet.incendiary = [stat]zápalné bullet.homing = [stat]samonaváděcí bullet.shock = [stat]šokové bullet.frag = [stat]trhavé -bullet.knockback = [stat]{0}[lightgray] odhození -bullet.freezing = [stat]mrazivé -bullet.tarred = [stat]dehtové -bullet.multiplier = [stat]{0}[lightgray]x více střel -bullet.reload = [stat]{0}[lightgray]x rychlost střelby +bullet.knockback = [stat]{0}[lightgray] odhození[] +bullet.pierce = [stat]{0}[lightgray]x průrazné[] +bullet.infinitepierce = [stat]průrazné[] +bullet.freezing = [stat]zmrazující[] +bullet.tarred = [stat]dehtující[] +bullet.multiplier = [stat]{0}[lightgray]x více střel[] +bullet.reload = [stat]{0}[lightgray]x rychlost střelby[] unit.blocks = bloky unit.powersecond = energie/sekunda @@ -943,6 +954,7 @@ block.cliff.name = Útes block.sand-boulder.name = Pískovec block.grass.name = Tráva block.slag.name = Slag +block.space.name = Vesmír block.salt.name = Sůl block.salt-wall.name = Solné skály block.pebbles.name = Oblázky @@ -988,6 +1000,7 @@ block.darksand-water.name = Voda s černým pískem block.char.name = Dřevěné uhlí block.dacite.name = Dacit block.dacite-wall.name = Stěna dacitu +block.dacite-boulder.name = Dacitový kámen block.ice-snow.name = Zasněžený led block.stone-wall.name = Stone Wall block.ice-wall.name = Ledové skály @@ -1261,7 +1274,7 @@ block.rotary-pump.description = Pokročilé čerpadlo, které za pomoci energie block.thermal-pump.description = Ultimátní čerpadlo. Nejrychlejší čerpání kapalin. block.conduit.description = Základní blok pro přepravu kapalin. Unáší kapaliny vpřed. Používá se s čerpadly, v některých vrtech a nebo ve spojení s jiným potrubím. block.pulse-conduit.description = Pokročilý blok přepravy kapalin. Přepravuje kapaliny rychleji a má větší kapacitu, než základní potrubí. -block.plated-conduit.description = Přenáší kapaliny stejně rychle jako pulzní potrubí, ale díky oplátování má větší výdržnost. Ze stran přijímá kapaliny pouze z dalších potrubí.\nV případě poškození má menší ztrátu kapaliny. +block.plated-conduit.description = Přenáší kapaliny stejně rychle jako pulzní potrubí, ale díky oplátování má větší výdržnost. Ze stran přijímá kapaliny pouze z dalších potrubí.\nNedochází zde k úniku kapalin. block.liquid-router.description = Přijímá kapaliny z jednoho směru a vypouští je rovnoměrně do zbylých tří směrů. Dokáže pojmout i určitý objem kapalin do vnitřího úložiště. Používá se při rozdělení kapaliny z jednoho zdroje směřující do různých cílů. block.liquid-tank.description = Ukládá velké množství kapalin. Používá se pro vyrovnávání zásob vody, když je přítok nestabilní nebo jako záložní chlazení pro životně důležité stavby. block.liquid-junction.description = Chová se jako most pro dvě křížící se potrubí. Používá se v situacích, kdy dvě rozdílná potrubí vedou rozdílný obsah přes jedno místo. From 80bf15775283f7c5fbcf0c2777854e50dd8a72bd Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Wed, 14 Oct 2020 11:45:09 +0300 Subject: [PATCH 011/124] [Bundle][RO] Translation Update This PR was tested in-game and is ready to merge at any time (unless marked as draft). Changelog: - New strings/changes up to commit 1554fd039490106c14bf4f0d302605c53e2d2c0d - Typo fixes & various other improvements --- core/assets/bundles/bundle_ro.properties | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 053fbdc7d7..5781e555fa 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -20,7 +20,7 @@ gameover = Jocul s-a încheiat gameover.pvp = Echipa [accent] {0}[] este câștigătoare! highscore = [accent]Scor maxim nou! copied = Copiat. -indev.popup = [accent]v6[] este momentan în [accent]alpha[].\n[lightgray]Asta înseamnă că:[]\n[scarlet]- Campania este complet neterminată[]\n- Majoritatea [scarlet]AI-ului unităților[] nu funcționează bine\n- Multe unități sunt neterminate\n- Modul campanie nu este terminat \n- Tot ce vedeți se poate schimba sau poate fi eliminat.\n\nPentru a raporta buguri și crashuri intrați pe [accent]Github[]. +indev.popup = [accent]v6[] este momentan în [accent]beta[].\n[lightgray]Asta înseamnă că:[]\n[scarlet]- Campania este complet neterminată[]\n- Efectele sonore și muzica sunt neterminate/lipsesc\n- Majoritatea [scarlet]AI-ului unităților[] nu funcționează bine\n- Multe unități sunt neterminate\n- Modul campanie nu este terminat \n- Tot ce vedeți se poate schimba sau poate fi eliminat.\n\nPentru a raporta buguri și crashuri intrați pe [accent]Github[]. indev.notready = Această secțiune a jocului nu este gata încă. load.sound = Sunete @@ -520,6 +520,9 @@ sectors.launch = Lansare sectors.select = Selectează sectors.nonelaunch = [lightgray]nimic (soarele) +planet.serpulo.name = Serpulo +planet.sun.name = Soare + sector.groundZero.name = Ground Zero sector.craters.name = The Craters sector.frozenForest.name = Frozen Forest @@ -645,6 +648,8 @@ bullet.homing = [stat]cu radar bullet.shock = [stat]șoc bullet.frag = [stat]fragil bullet.knockback = [stat]{0} [lightgray]împingere +bullet.pierce = [stat]{0}[lightgray]x penetrare +bullet.infinitepierce = penetrare [stat] bullet.freezing = [stat]înghețat bullet.tarred = [stat]lipicios bullet.multiplier = [stat]{0}[lightgray]x multiplicator muniție @@ -986,6 +991,7 @@ block.sand-water.name = Apă cu Nisip block.darksand-water.name = Apă cu Nisip Negru block.char.name = Turbă block.dacite.name = Dacit +block.dacite-boulder.name = Bolovan de Dacit block.dacite-wall.name = Perete de Dacit block.ice-snow.name = Gheață Înzăpezită block.stone-wall.name = Perete de Piatră From 99b3a224d0ee87c25d21ddde4a82598fa070544b Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Wed, 14 Oct 2020 11:49:13 +0300 Subject: [PATCH 012/124] Typo fix --- core/assets/bundles/bundle_ro.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 5781e555fa..d1f78482c1 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -1159,7 +1159,7 @@ team.blue.name = albastră team.crux.name = roșie team.sharded.name = portocalie team.orange.name = portocalie -team.derelict.name = abandonat +team.derelict.name = abandonată team.green.name = verde team.purple.name = mov From 6b4a7d025b20f6d2cb7b8722204fa7b9a316fdfa Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 08:49:05 -0400 Subject: [PATCH 013/124] Fixed #2938 / Fixed #2936 --- core/src/mindustry/ai/Pathfinder.java | 2 +- desktop/src/mindustry/desktop/DesktopLauncher.java | 4 +++- jitpack.yml | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 jitpack.yml diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index c24cecd49c..6d6e5fc8e9 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -86,7 +86,7 @@ public class Pathfinder implements Runnable{ } //special preset which may help speed things up; this is optional - preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); + //preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); start(); }); diff --git a/desktop/src/mindustry/desktop/DesktopLauncher.java b/desktop/src/mindustry/desktop/DesktopLauncher.java index bd9ec3e81b..76b72e3ca3 100644 --- a/desktop/src/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/mindustry/desktop/DesktopLauncher.java @@ -227,7 +227,9 @@ public class DesktopLauncher extends ClientLauncher{ @Override public void updateLobby(){ - SVars.net.updateLobby(); + if(SVars.net != null){ + SVars.net.updateLobby(); + } } @Override diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 0000000000..b2c514bc30 --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,2 @@ +jdk: + - openjdk14 From d6301103965542aa242fb3700d7a6e578424f26f Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 09:08:03 -0400 Subject: [PATCH 014/124] JITPack version check --- core/src/mindustry/ai/Pathfinder.java | 3 --- settings.gradle | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index 6d6e5fc8e9..4a951d3448 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -85,9 +85,6 @@ public class Pathfinder implements Runnable{ tiles[tile.x][tile.y] = packTile(tile); } - //special preset which may help speed things up; this is optional - //preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); - start(); }); diff --git a/settings.gradle b/settings.gradle index 52b0980311..265a6a5024 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal()){ +if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal() && System.getenv("JITPACK") != "true"){ throw new GradleException("!!! YOU MUST USE JAVA 14 OR ABOVE TO COMPILE AND RUN MINDUSTRY !!! Read the README. Your version: ${System.properties["java.version"]}") } From 2b435c2600b72adc61a20fd1ed3ec3e74bb8aa9f Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 09:13:29 -0400 Subject: [PATCH 015/124] UnitType serializer set --- core/src/mindustry/io/JsonIO.java | 12 ++++++++++++ settings.gradle | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index 39c3a1a821..eb3815ba76 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -165,6 +165,18 @@ public class JsonIO{ } }); + json.setSerializer(UnitType.class, new Serializer<>(){ + @Override + public void write(Json json, UnitType object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public UnitType read(Json json, JsonValue jsonData, Class type){ + return Vars.content.getByName(ContentType.unit, jsonData.asString()); + } + }); + json.setSerializer(ItemStack.class, new Serializer<>(){ @Override public void write(Json json, ItemStack object, Class knownType){ diff --git a/settings.gradle b/settings.gradle index 265a6a5024..52b0980311 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal() && System.getenv("JITPACK") != "true"){ +if(JavaVersion.current().ordinal() < JavaVersion.VERSION_14.ordinal()){ throw new GradleException("!!! YOU MUST USE JAVA 14 OR ABOVE TO COMPILE AND RUN MINDUSTRY !!! Read the README. Your version: ${System.properties["java.version"]}") } From fb0179da95308206f6c6e450039ed1d5a7da0109 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 14 Oct 2020 09:15:47 -0400 Subject: [PATCH 016/124] Attempting jitpack Java 14 workaround --- jitpack.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jitpack.yml b/jitpack.yml index b2c514bc30..e1dfa83815 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,2 +1,4 @@ -jdk: - - openjdk14 +before_install: + - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh + - source install-jdk.sh --feature 14 + - jshell --version \ No newline at end of file From fa2cdb752a670bf19505273a57860e3c406ad9d7 Mon Sep 17 00:00:00 2001 From: Sharlotte <60801210+sharlotte-mobile@users.noreply.github.com> Date: Thu, 15 Oct 2020 20:46:29 +0900 Subject: [PATCH 017/124] changed private -> public of checkRadius method when i try to change color of forceField by using draw method , the Mindustry is crashed because of that private method. --- core/src/mindustry/entities/abilities/ForceFieldAbility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/abilities/ForceFieldAbility.java b/core/src/mindustry/entities/abilities/ForceFieldAbility.java index fa9fa5e2c8..d341191a74 100644 --- a/core/src/mindustry/entities/abilities/ForceFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ForceFieldAbility.java @@ -94,7 +94,7 @@ public class ForceFieldAbility extends Ability{ } } - private void checkRadius(Unit unit){ + public void checkRadius(Unit unit){ //timer2 is used to store radius scale as an effect realRad = radiusScale * radius; } From 86c2fe880585bab8824356d7ed2e11a41df2b5e0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 13:44:20 -0400 Subject: [PATCH 018/124] too many things to list --- core/assets/bundles/bundle.properties | 3 +- core/assets/maps/craters.msav | Bin 11971 -> 11955 bytes core/src/mindustry/Vars.java | 2 - core/src/mindustry/ai/Pathfinder.java | 4 +- core/src/mindustry/ai/WaveSpawner.java | 16 +- core/src/mindustry/ai/types/FormationAI.java | 25 ++ core/src/mindustry/ai/types/MinerAI.java | 4 +- core/src/mindustry/ai/types/RepairAI.java | 6 +- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/content/Bullets.java | 2 +- core/src/mindustry/core/Logic.java | 65 +++- .../mindustry/ctype/UnlockableContent.java | 9 +- core/src/mindustry/editor/WaveGraph.java | 2 +- .../mindustry/entities/bullet/BulletType.java | 9 + .../bullet/ContinuousLaserBulletType.java | 6 + .../src/mindustry/entities/comp/UnitComp.java | 2 + .../mindustry/entities/comp/WeaponsComp.java | 2 +- core/src/mindustry/game/DefaultWaves.java | 4 +- core/src/mindustry/game/Rules.java | 2 + core/src/mindustry/game/SectorInfo.java | 8 + core/src/mindustry/game/SpawnGroup.java | 11 +- core/src/mindustry/game/Team.java | 6 +- core/src/mindustry/game/Universe.java | 30 +- core/src/mindustry/io/TypeIO.java | 10 + core/src/mindustry/logic/LAccess.java | 2 + core/src/mindustry/logic/LAssembler.java | 1 + core/src/mindustry/logic/LCanvas.java | 2 +- core/src/mindustry/logic/LExecutor.java | 8 +- core/src/mindustry/maps/SectorDamage.java | 331 +++++++++++++++++- core/src/mindustry/mod/Mods.java | 2 +- core/src/mindustry/net/NetworkIO.java | 16 + core/src/mindustry/type/Sector.java | 28 +- core/src/mindustry/type/UnitType.java | 15 +- core/src/mindustry/ui/dialogs/HostDialog.java | 12 +- core/src/mindustry/ui/dialogs/JoinDialog.java | 12 +- .../ui/dialogs/LaunchLoadoutDialog.java | 12 +- .../mindustry/ui/dialogs/PausedDialog.java | 19 +- .../mindustry/ui/dialogs/PlanetDialog.java | 14 +- .../mindustry/ui/dialogs/ResearchDialog.java | 11 +- .../ui/dialogs/SettingsMenuDialog.java | 1 - .../mindustry/ui/fragments/HudFragment.java | 2 +- .../ui/fragments/MinimapFragment.java | 10 +- .../world/blocks/defense/ForceProjector.java | 8 +- .../world/blocks/defense/MendProjector.java | 8 +- .../blocks/defense/OverdriveProjector.java | 8 +- .../blocks/defense/turrets/ItemTurret.java | 1 - .../blocks/defense/turrets/LiquidTurret.java | 5 +- .../blocks/defense/turrets/PowerTurret.java | 10 + .../world/blocks/defense/turrets/Turret.java | 3 + .../world/blocks/logic/SwitchBlock.java | 5 + gradle.properties | 2 +- tests/src/test/java/SectorTests.java | 4 +- 52 files changed, 665 insertions(+), 117 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 4a854f5c71..1253de6a13 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -478,7 +478,7 @@ requirement.research = Research {0} requirement.capture = Capture {0} bestwave = [lightgray]Best Wave: {0} launch.text = Launch -campaign.multiplayer = While playing multiplayer in campaign, you can only research using items from [accent]your[] sectors, [scarlet]not[] the host's sector that you are on right now.\n\nTo get items to [accent]your[] sectors in multiplayer, use a [accent]launch pad[]. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout #TODO @@ -695,7 +695,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Fluids setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] diff --git a/core/assets/maps/craters.msav b/core/assets/maps/craters.msav index b10b354bf009d65f7a94e7eda8c95064d58f0599..04c1aa73d36f10b689c7335883863b6ac7412757 100644 GIT binary patch delta 11429 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 E02sTY6951J delta 11487 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�#pC5AO4ko;X6>z{!ymhJy`1KPyNMr-c>N3ww?RZ zcVXPBHg;))G*R`HHEc30*MeW|&o;J_x&LcoPF3lM@s<0p zGB1AhOpEux{xgoLF1F1&cbvui5_rBxTKtU>dvJgM%kQD3-kU#~f2&>6{$Qq3C(|U2 zMN^x;`o4bdqA;~MO|JgDZCkOu6L(*La6)CWMLEmOm;;3o$BuVYOFcZ`bo$h?4c!)e z1rye(+wSmO>T^=~kZsT=ou&}uJRL5ZnJ?wt>g-*;XFAx)#4O2q)x{$leXaGwWDfgu zrN)-uJ~u^78?%^peC9e8C>^-$Lb3fMbTm3m(`=M;DfUK6qbAfX|Wm2moQePy9+NDpNEUi{7$n#sYIsfK|u#X?a z3v4&^S}vSCUro%c&%km^bgO~kx}Wm}#A#y6*9)`c0C%;xRt=C_;Cn;wB-4DQ91N zU}W{We1B12zvlM2O-U)Pf7PcjU-9?;^;7>;+798grQ7UVE2ae;Yya?<>zn$Ay|4Y* zYQO*Ex-|R1&kOkq_TDe{FZjLMf^Spok-`o0vn}Kv|Ij$p{@7F|-abLb=yO|<>Q-6y z`acsczP8vW)KlM96X$rpyu!}8;`!$67r_BC`x@UDcfEd<$+|rD+H%M3?;n3Q+SguD z^fNcy7W?r*-oxr}PRG_yY=_n^i0^-;v*v<*{>1pG z>iJ)D{&uzRPq}vRbAoj#<8`i0JERUQdA8E0v`nu4A;a_R6WN>(AMyO)e)4`>Rj9@K zl#Kg_b069!|2MyAmXx~szChfiKsWZ#FPk&@>tb)-TJ-9m=#({&9z;6s3p!HFdHw0O z!l@1SVz+cI?)vVt;U8yyhL zL)9u$wR{_FTQ}4{pTAoASgl*(TQNo5`nbTu&UHI_v*)`1u|Hrc!aVo5+?&-Lzd7x= z*$>>R$a;8i+W!6>b8VESENqT;`6GDhq2M9w$^-kqU-(yB(OOe8{X?^iMOzL3SA(RI zJx%|TYu9vr{$%mqc}u;-f4)Ig78FY#KVEPz z`o;YB3u5~fDN~-BA>bIWA(uuldo?ttTnu( zsW4ai)U&^asoC#X?(bHBlKKuI zQJBY3`QXPAjb(kB((e6=dxIrEKa5X}m)X<)db;7QbvLiQF57)>>of6V*F{eTX|7}Z z^CQYdMqlx*<(%2G?rmE6vsUKjo*Si4rvBAo`1*U#rpYt4G(&usJbuAwpJ09b+f}7$ zarYK)Z~Rx_c60Ad%PHrTuSB+3mApUyXpeiw^z=fRZ(0S*KFFqKf8Ts+9_ImzIkI<- zn>zBEG#hRgIB+MpY(AI4al^i+0?&9Ri)ky?htK)%%@NM`;Lg6?PIZaN5?9u@2jnjg z;F~UbJ%6J4dz-$4_ZGg|TP=Bi=bwE&U+$=Dq&`Xd?))MD%IRqJ!gs60U(e}%67c@> zi^&sbWuZ;H)I2>CWx==eZ<10{%hbL7>aG$W&U$x!?_qsX%k;HKqV|={ zr?|kF{w5pq*taY@D}NPxv2(i*_Q29niBhimZ=q09)A0G z?wVLXxuZMNFS32ID4+aRTfd&|C-c7a!g;3~6*haetgqNqP%XaUzvN)Nb;oEg)RwVDgsG}Kuytd=%o4OFQZ37vhw*Y?Xd7+u?cXma`m%eGhD2 z`=9!8yR?US;wICexWc-%6Z4}Zmq`>S-kW`IkF-ZR*YyCmScjSj_kWD%u1+w{s8)XQ z`gnla`UPk574N9>pBFvyIO}52hdSQp%TMs1@Oc#a{;$!w^V-pi8_$UC{l0$D-JL%s zS8Pa4eY`ySx6CQ`g?10_v-~<&`sA(ADJwVIxC3>Jr3)pYjSu spawns = new Seq<>(); private boolean spawning = false; private boolean any = false; + private Tile firstSpawn = null; public WaveSpawner(){ Events.on(WorldLoadEvent.class, e -> reset()); } + @Nullable + public Tile getFirstSpawn(){ + firstSpawn = null; + eachGroundSpawn((cx, cy) -> { + firstSpawn = world.tile(cx, cy); + }); + return firstSpawn; + } + public int countSpawns(){ return spawns.size; } @@ -47,7 +57,7 @@ public class WaveSpawner{ for(SpawnGroup group : state.rules.spawns){ if(group.type == null) continue; - int spawned = group.getUnitsSpawned(state.wave - 1); + int spawned = group.getSpawned(state.wave - 1); if(group.type.flying){ float spread = margin / 1.5f; @@ -89,6 +99,10 @@ public class WaveSpawner{ Time.run(40f, () -> Damage.damage(state.rules.waveTeam, x, y, state.rules.dropZoneRadius, 99999999f, true)); } + public void eachGroundSpawn(Intc2 cons){ + eachGroundSpawn((x, y, shock) -> cons.get(world.toTile(x), world.toTile(y))); + } + private void eachGroundSpawn(SpawnConsumer cons){ for(Tile spawn : spawns){ cons.accept(spawn.worldx(), spawn.worldy(), true); diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index cbe12a565e..d774719cab 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -7,6 +7,7 @@ import mindustry.ai.formations.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; +import mindustry.world.blocks.storage.CoreBlock.*; public class FormationAI extends AIController implements FormationMember{ public Unit leader; @@ -57,6 +58,30 @@ public class FormationAI extends AIController implements FormationMember{ }else{ unit.moveAt(realtarget.sub(unit).limit(type.speed)); } + + if(unit instanceof Minerc mine && leader instanceof Minerc com){ + if(mine.validMine(com.mineTile())){ + mine.mineTile(com.mineTile()); + + CoreBuild core = unit.team.core(); + + if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type().range) && !unit.acceptsItem(com.mineTile().drop())){ + if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ + Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); + + unit.clearItem(); + } + } + }else{ + mine.mineTile(null); + } + + } + + if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){ + build.clearBuilding(); + build.addBuild(com.buildPlan()); + } } @Override diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index a03481768f..d19b8e2c0a 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -24,7 +24,9 @@ public class MinerAI extends AIController{ } if(mining){ - targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && miner.canMine(i), i -> core.items.get(i)); + if(timer.get(timerTarget2, 60 * 4) || targetItem == null){ + targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && miner.canMine(i), i -> core.items.get(i)); + } //core full of the target item, do nothing if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){ diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index 5f021ae828..cb60a3bfc9 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -23,7 +23,7 @@ public class RepairAI extends AIController{ } if(target != null){ - if(!target.within(unit, unit.type().range * 0.65f)){ + if(!target.within(unit, unit.type().range * 0.65f) && target instanceof Building){ moveTo(target, unit.type().range * 0.65f); } @@ -33,12 +33,14 @@ public class RepairAI extends AIController{ @Override protected void updateTargeting(){ - target = Units.findDamagedTile(unit.team, unit.x, unit.y); + Building target = Units.findDamagedTile(unit.team, unit.x, unit.y); if(target instanceof ConstructBuild) target = null; if(target == null){ super.updateTargeting(); + }else{ + this.target = target; } } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 05ed572f7e..d18b011bea 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1713,7 +1713,7 @@ public class Blocks implements ContentList{ despawnEffect = Fx.instBomb; trailSpacing = 20f; damage = 1350; - tileDamageMultiplier = 0.5f; + tileDamageMultiplier = 0.3f; speed = brange; hitShake = 6f; ammoMultiplier = 1f; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 221dc44e8d..e2d42c0ef0 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -510,7 +510,7 @@ public class Bullets implements ContentList{ speed = 4f; knockback = 1.3f; puddleSize = 8f; - damage = 6f; + damage = 5f; drag = 0.001f; ammoMultiplier = 2f; statusDuration = 60f * 4f; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index df536552df..4d95b22820 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -5,10 +5,12 @@ import arc.math.*; import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.core.GameState.*; +import mindustry.ctype.*; import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.game.Teams.*; import mindustry.gen.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.type.Weather.*; import mindustry.world.*; @@ -84,20 +86,41 @@ public class Logic implements ApplicationListener{ Events.on(LaunchItemEvent.class, e -> state.secinfo.handleItemExport(e.stack)); //when loading a 'damaged' sector, propagate the damage - Events.on(WorldLoadEvent.class, e -> { + Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ - long seconds = state.rules.sector.getSecondsPassed(); CoreBuild core = state.rules.defaultTeam.core(); - //THE WAVES NEVER END - state.rules.waves = true; - //apply fractional damage based on how many turns have passed for this sector - //float turnsPassed = seconds / (turnDuration / 60f); + //how much wave time has passed + int wavesPassed = state.rules.sector.getWavesPassed(); - //TODO sector damage disabled for now - //if(state.rules.sector.hasWaves() && turnsPassed > 0 && state.rules.sector.hasBase()){ - // SectorDamage.apply(turnsPassed / sectorDestructionTurns); - //} + //reset passed waves + state.rules.sector.setWavesPassed(0); + + //wave has passed, remove all enemies, they are assumed to be dead + if(wavesPassed > 0){ + Groups.unit.each(u -> { + if(u.team == state.rules.waveTeam){ + u.remove(); + } + }); + } + + if(wavesPassed > 0){ + //simulate wave counter moving forward + state.wave += wavesPassed; + state.wavetime = state.rules.waveSpacing; + } + + //reset damage display + state.rules.sector.setDamage(0f); + + //simulate damage if applicable + if(wavesPassed > 0){ + SectorDamage.applyCalculatedDamage(wavesPassed); + } + + //waves depend on attack status. + state.rules.waves = state.rules.sector.isUnderAttack(); //add resources based on turns passed if(state.rules.sector.save != null && core != null){ @@ -121,7 +144,9 @@ public class Logic implements ApplicationListener{ state.rules.sector.setSecondsPassed(0); } + }); + Events.on(WorldLoadEvent.class, e -> { //enable infinite ammo for wave team by default state.rules.waveTeam.rules().infiniteAmmo = true; @@ -129,6 +154,13 @@ public class Logic implements ApplicationListener{ Core.settings.manualSave(); }); + //sync research + Events.on(ResearchEvent.class, e -> { + if(net.server()){ + Call.researched(e.content); + } + }); + } /** Adds starting items, resets wave time, and sets state to playing. */ @@ -199,8 +231,6 @@ public class Logic implements ApplicationListener{ state.rules.waves = false; } - //TODO capturing is disabled - /* //if there's a "win" wave and no enemies are present, win automatically if(state.rules.waves && state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()){ //the sector has been conquered - waves get disabled @@ -213,7 +243,7 @@ public class Logic implements ApplicationListener{ if(!headless){ control.saves.saveSector(state.rules.sector); } - }*/ + } }else{ if(!state.rules.attackMode && state.teams.playerCores().size == 0 && !state.gameOver){ state.gameOver = true; @@ -266,6 +296,15 @@ public class Logic implements ApplicationListener{ netClient.setQuiet(); } + //called when the remote server researches something + @Remote + public static void researched(Content content){ + if(!(content instanceof UnlockableContent u)) return; + + state.rules.researched.add(u.name); + ui.hudfrag.showUnlock(u); + } + @Override public void dispose(){ //save the settings before quitting diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index f6e6d0a2dc..21b72374ec 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -95,16 +95,17 @@ public abstract class UnlockableContent extends MappableContent{ } } - public final boolean unlocked(){ + public boolean unlocked(){ + if(net.client()) return state.rules.researched.contains(name); return unlocked || alwaysUnlocked; } /** @return whether this content is unlocked, or the player is in a custom (non-campaign) game. */ - public final boolean unlockedNow(){ - return unlocked || alwaysUnlocked || !state.isCampaign(); + public boolean unlockedNow(){ + return unlocked() || !state.isCampaign(); } - public final boolean locked(){ + public boolean locked(){ return !unlocked(); } } diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 14b2416085..2436c62c2a 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -154,7 +154,7 @@ public class WaveGraph extends Table{ int sum = 0; for(SpawnGroup spawn : groups){ - int spawned = spawn.getUnitsSpawned(i); + int spawned = spawn.getSpawned(i); values[index][spawn.type.id] += spawned; if(spawned > 0){ used.add(spawn.type); diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 0c3a605f1b..aafbb42504 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -137,6 +137,15 @@ public abstract class BulletType extends Content{ this(1f, 1f); } + /** @return estimated damage per shot. this can be very inaccurate. */ + public float estimateDPS(){ + float sum = damage + splashDamage*0.75f; + if(fragBullet != null && fragBullet != this){ + sum += fragBullet.estimateDPS() * fragBullets / 2f; + } + return sum; + } + /** Returns maximum distance the bullet this bullet type has can travel. */ public float range(){ return Math.max(speed * lifetime * (1f - drag), range); diff --git a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java index a862671040..4c52105b26 100644 --- a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java +++ b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java @@ -44,6 +44,12 @@ public class ContinuousLaserBulletType extends BulletType{ this(0); } + @Override + public float estimateDPS(){ + //assume firing duration is about 100 by default, may not be accurate there's no way of knowing in this method + return damage * 100f / 5f; + } + @Override public float range(){ return length; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 1cf0f7e216..605e2d1d1e 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -88,6 +88,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case rotation -> rotation; case health -> health; case maxHealth -> maxHealth; + case ammo -> state.rules.unitAmmo ? type.ammoCapacity : ammo; + case ammoCapacity -> type.ammoCapacity; case x -> x; case y -> y; case team -> team.id; diff --git a/core/src/mindustry/entities/comp/WeaponsComp.java b/core/src/mindustry/entities/comp/WeaponsComp.java index d891dbc1e4..dec0105c14 100644 --- a/core/src/mindustry/entities/comp/WeaponsComp.java +++ b/core/src/mindustry/entities/comp/WeaponsComp.java @@ -166,7 +166,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ Weapon weapon = mount.weapon; float baseX = this.x, baseY = this.y; - boolean delay = weapon.firstShotDelay > 0f; + boolean delay = weapon.firstShotDelay + weapon.shotDelay > 0f; (delay ? weapon.chargeSound : weapon.shootSound).at(x, y, Mathf.random(0.8f, 1.0f)); diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/DefaultWaves.java index 0ce0d3a6a2..12d1d28dfe 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/DefaultWaves.java @@ -290,7 +290,7 @@ public class DefaultWaves{ begin = f; end = f + next >= cap ? never : f + next; max = 14; - unitScaling = rand.random(1f, 2f); + unitScaling = rand.random(1f, 3f); shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; @@ -329,7 +329,7 @@ public class DefaultWaves{ while(step <= cap){ createProgression.get(step); - step += (int)(rand.random(12, 25) * Mathf.lerp(1f, 0.4f, difficulty)); + step += (int)(rand.random(13, 25) * Mathf.lerp(1f, 0.5f, difficulty)); } int bossWave = (int)(rand.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty)); diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index a101fe8592..329e69c92a 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -82,6 +82,8 @@ public class Rules{ public Seq weather = new Seq<>(1); /** Blocks that cannot be placed. */ public ObjectSet bannedBlocks = new ObjectSet<>(); + /** Unlocked content names. Only used in multiplayer when the campaign is enabled. */ + public ObjectSet researched = new ObjectSet<>(); /** Whether ambient lighting is enabled. */ public boolean lighting = false; /** Whether enemy lighting is visible. diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index b66dc5bf95..8e7f73a256 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -5,6 +5,7 @@ import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.ctype.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.storage.CoreBlock.*; @@ -38,6 +39,10 @@ public class SectorInfo{ public @Nullable Sector destination; /** Resources known to occur at this sector. */ public Seq resources = new Seq<>(); + + /** Special variables for simulation. */ + public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope; + /** Time spent at this sector. Do not use unless you know what you're doing. */ public transient float internalTimeSpent; @@ -99,6 +104,9 @@ public class SectorInfo{ //update sector's internal time spent counter state.rules.sector.setTimeSpent(internalTimeSpent); + state.rules.sector.setUnderAttack(state.rules.waves); + + SectorDamage.writeParameters(this); } /** Update averages of various stats, updates some special sector logic. diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index f9ae7c74d3..92ba6811ea 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -52,8 +52,8 @@ public class SpawnGroup implements Serializable{ //serialization use only } - /** Returns the amount of units spawned on a specific wave. */ - public int getUnitsSpawned(int wave){ + /** @return amount of units spawned on a specific wave. */ + public int getSpawned(int wave){ if(spacing == 0) spacing = 1; if(wave < begin || wave > end || (wave - begin) % spacing != 0){ return 0; @@ -61,6 +61,11 @@ public class SpawnGroup implements Serializable{ return Math.min(unitAmount + (int)(((wave - begin) / spacing) / unitScaling), max); } + /** @return amount of shields each unit has at a specific wave. */ + public float getShield(int wave){ + return Math.max(shields + shieldScaling*(wave - begin), 0); + } + /** * Creates a unit, and assigns correct values based on this group's data. * This method does not add() the unit. @@ -76,7 +81,7 @@ public class SpawnGroup implements Serializable{ unit.addItem(items.item, items.amount); } - unit.shield(Math.max(shields + shieldScaling*(wave - begin), 0)); + unit.shield = getShield(wave); return unit; } diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index 1234c7b2d7..cbed06f4e7 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -31,9 +31,9 @@ public class Team implements Comparable{ Color.valueOf("ffd37f"), Color.valueOf("eab678"), Color.valueOf("d4816b")), crux = new Team(2, "crux", Color.valueOf("f25555"), Color.valueOf("fc8e6c"), Color.valueOf("f25555"), Color.valueOf("a04553")), - green = new Team(3, "green", Color.valueOf("4dd98b")), - purple = new Team(4, "purple", Color.valueOf("9a4bdf")), - blue = new Team(5, "blue", Color.royal.cpy()); + green = new Team(3, "green", Color.valueOf("54d67d")), + purple = new Team(4, "purple", Color.valueOf("995bb0")), + blue = new Team(5, "blue", Color.valueOf("5a4deb")); static{ Mathf.rand.setSeed(8); diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 892b93b731..82b53ce604 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -6,6 +6,7 @@ import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.game.EventType.*; +import mindustry.maps.*; import mindustry.type.*; import mindustry.world.blocks.storage.*; @@ -55,7 +56,7 @@ public class Universe{ /** @return sectors attacked on the current planet, minus the ones that are being played on right now. */ public Seq getAttacked(Planet planet){ - return planet.sectors.select(s -> s.hasWaves() && s.hasBase() && !s.isBeingPlayed() && s.getSecondsPassed() > 1); + return planet.sectors.select(s -> s.isUnderAttack() && s.hasBase() && !s.isBeingPlayed() && s.getWavesPassed() > 0); } /** Update planet rotations, global time and relevant state. */ @@ -138,11 +139,23 @@ public class Universe{ //increment seconds passed for this sector by the time that just passed with this turn if(!sector.isBeingPlayed()){ - sector.setSecondsPassed(sector.getSecondsPassed() + actuallyPassed); + int secPassed = sector.getSecondsPassed() + actuallyPassed; + + sector.setSecondsPassed(secPassed); + + boolean attacked = sector.isUnderAttack(); + + int wavesPassed = (int)(secPassed*60f / sector.save.meta.rules.waveSpacing); + float damage = attacked ? SectorDamage.getDamage(sector.save.meta.secinfo, sector.save.meta.rules.waveSpacing, sector.save.meta.wave, wavesPassed) : 0f; + + if(attacked){ + sector.setWavesPassed(wavesPassed); + } + + sector.setDamage(damage); - //TODO sector damage disabled for now //check if the sector has been attacked too many times... - /*if(sector.hasBase() && sector.hasWaves() && sector.getSecondsPassed() * 60f > turnDuration * sectorDestructionTurns){ + if(attacked && damage >= 0.999f){ //fire event for losing the sector Events.fire(new SectorLoseEvent(sector)); @@ -152,7 +165,14 @@ public class Universe{ //clear recieved sector.setExtraItems(new ItemSeq()); sector.save = null; - }*/ + sector.setDamage(0f); + }else if(attacked && wavesPassed > 0 && sector.save.meta.wave + wavesPassed >= sector.save.meta.rules.winWave && !sector.hasEnemyBase()){ + //autocapture the sector + sector.setUnderAttack(false); + + //fire the event + Events.fire(new SectorCaptureEvent(state.rules.sector)); + } } //export to another sector diff --git a/core/src/mindustry/io/TypeIO.java b/core/src/mindustry/io/TypeIO.java index 669cd65d53..bba4ffeb0a 100644 --- a/core/src/mindustry/io/TypeIO.java +++ b/core/src/mindustry/io/TypeIO.java @@ -450,6 +450,16 @@ public class TypeIO{ return color.set(read.i()); } + public static void writeContent(Writes write, Content cont){ + write.b(cont.getContentType().ordinal()); + write.s(cont.id); + } + + public static Content readContent(Reads read){ + byte id = read.b(); + return content.getByID(ContentType.all[id], read.s()); + } + public static void writeLiquid(Writes write, Liquid liquid){ write.s(liquid == null ? -1 : liquid.id); } diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index 5dc881a778..0d678554d1 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -15,6 +15,8 @@ public enum LAccess{ powerNetCapacity, powerNetIn, powerNetOut, + ammo, + ammoCapacity, health, maxHealth, heat, diff --git a/core/src/mindustry/logic/LAssembler.java b/core/src/mindustry/logic/LAssembler.java index 4f72d121aa..f353a8c38c 100644 --- a/core/src/mindustry/logic/LAssembler.java +++ b/core/src/mindustry/logic/LAssembler.java @@ -191,6 +191,7 @@ public class LAssembler{ try{ double value = Double.parseDouble(symbol); + if(Double.isNaN(value) || Double.isInfinite(value)) value = 0; //this creates a hidden const variable with the specified value String key = "___" + value; return putConst(key, value).id; diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index ed98bee8ff..e16aab6621 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -305,7 +305,7 @@ public class LCanvas extends Table{ statements.finishLayout(); } }); - }).growX(); + }).growX().height(38); row(); diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index a8c5de8a9d..fee780e145 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -110,12 +110,12 @@ public class LExecutor{ public double num(int index){ Var v = vars[index]; - return v.isobj ? v.objval != null ? 1 : 0 : v.numval; + return v.isobj ? v.objval != null ? 1 : 0 : Double.isNaN(v.numval) || Double.isInfinite(v.numval) ? 0 : v.numval; } public float numf(int index){ Var v = vars[index]; - return v.isobj ? v.objval != null ? 1 : 0 : (float)v.numval; + return v.isobj ? v.objval != null ? 1 : 0 : Double.isNaN(v.numval) || Double.isInfinite(v.numval) ? 0 : (float)v.numval; } public int numi(int index){ @@ -129,7 +129,7 @@ public class LExecutor{ public void setnum(int index, double value){ Var v = vars[index]; if(v.constant) return; - v.numval = value; + v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : 0; v.objval = null; v.isobj = false; } @@ -737,7 +737,7 @@ public class LExecutor{ v.objval = f.objval; v.isobj = true; }else{ - v.numval = f.numval; + v.numval = Double.isNaN(f.numval) || Double.isInfinite(f.numval) ? 0 : f.numval; v.isobj = false; } } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 5f4e267d74..b8afb42688 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -3,11 +3,18 @@ package mindustry.maps; import arc.math.*; import arc.math.geom.*; import arc.struct.*; +import arc.util.*; import mindustry.ai.*; import mindustry.content.*; import mindustry.entities.*; +import mindustry.entities.abilities.*; +import mindustry.game.*; import mindustry.gen.*; +import mindustry.logic.*; import mindustry.world.*; +import mindustry.world.blocks.defense.*; +import mindustry.world.blocks.defense.turrets.*; +import mindustry.world.blocks.defense.turrets.Turret.*; import mindustry.world.blocks.storage.*; import static mindustry.Vars.*; @@ -15,6 +22,264 @@ import static mindustry.Vars.*; public class SectorDamage{ //direct damage is for testing only private static final boolean direct = false, rubble = true; + private static final int maxWavesSimulated = 50; + + /** @return calculated capture progress of the enemy */ + public static float getDamage(SectorInfo info, float waveSpace, int wave, int wavesPassed){ + float health = info.sumHealth; + + //this approach is O(n), it simulates every wave passing. + //other approaches can assume all the waves come as one, but that's not as fair. + if(wavesPassed > 0){ + int waveBegin = wave; + int waveEnd = wave + wavesPassed; + + //do not simulate every single wave if there's too many + if(wavesPassed > maxWavesSimulated){ + waveBegin = waveEnd - maxWavesSimulated; + } + + for(int i = waveBegin; i <= waveEnd; i++){ + + float efficiency = health / info.sumHealth; + float dps = info.sumDps * efficiency; + float rps = info.sumRps * efficiency; + + float enemyDps = info.waveDpsBase + info.waveDpsSlope * (i); + float enemyHealth = info.waveHealthBase + info.waveHealthSlope * (i); + + //happens due to certain regressions + if(enemyHealth < 0 || enemyDps < 0) continue; + + //calculate time to destroy both sides + float timeDestroyEnemy = dps <= 0.0001f ? Float.POSITIVE_INFINITY : enemyHealth / dps; //if dps == 0, this is infinity + float timeDestroyBase = health / (enemyDps - rps); //if regen > enemyDps this is negative + + //sector is lost, enemy took too long. + if(timeDestroyEnemy > timeDestroyBase){ + health = 0f; + break; + } + + //otherwise, the enemy shoots for timeDestroyEnemy seconds, so calculate damage taken + float damageTaken = timeDestroyEnemy * (enemyDps - rps); + + //damage the base. + health -= damageTaken; + + //regen health after wave. + health = Math.min(health + rps / 60f * waveSpace, info.sumHealth); + } + } + + return 1f - Mathf.clamp(health / info.sumHealth); + } + + /** Applies wave damage based on sector parameters. */ + public static void applyCalculatedDamage(int wavesPassed){ + //calculate base damage fraction + float damage = getDamage(state.secinfo, state.rules.waveSpacing, state.wave, wavesPassed); + + //scaled damage has a power component to make it seem a little more realistic (as systems fail, enemy capturing gets easier and easier) + float scaled = Mathf.pow(damage, 1.5f); + + //apply damage to units + float unitDamage = damage * state.secinfo.sumHealth; + Tile spawn = spawner.getFirstSpawn(); + + //damage only units near the spawn point + if(spawn != null){ + Seq allies = new Seq<>(); + for(Unit ally : Groups.unit){ + if(ally.team == state.rules.defaultTeam && ally.within(spawn, state.rules.dropZoneRadius * 2.5f)){ + allies.add(ally); + } + } + + allies.sort(u -> u.dst2(spawn)); + + //damage units one by one, not uniformly + for(var u : allies){ + if(u.health < unitDamage){ + u.remove(); + unitDamage -= u.health; + }else{ + u.health -= unitDamage; + break; + } + } + } + + //finally apply scaled damage + apply(scaled); + } + + /** Calculates damage simulation parameters before a game is saved. */ + public static void writeParameters(SectorInfo info){ + Building core = state.rules.defaultTeam.core(); + Seq spawns = new Seq<>(); + spawner.eachGroundSpawn((x, y) -> spawns.add(world.tile(x, y))); + + if(core == null || spawns.isEmpty()) return; + + Tile start = spawns.first(); + + Time.mark(); + var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore); + Seq path = new Seq<>(); + boolean found = false; + + if(field != null && field.weights != null){ + int[][] weights = field.weights; + int count = 0; + Tile current = start; + while(count < world.width() * world.height()){ + int minCost = Integer.MAX_VALUE; + int cx = current.x, cy = current.y; + for(Point2 p : Geometry.d4){ + int nx = cx + p.x, ny = cy + p.y; + + Tile other = world.tile(nx, ny); + if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){ + minCost = weights[nx][ny]; + current = other; + } + } + + path.add(current); + + if(current.build == core){ + found = true; + break; + } + + count ++; + } + } + + if(!found){ + path = Astar.pathfind(start, core.tile, SectorDamage::cost, t -> !(t.block().isStatic() && t.solid())); + } + + //create sparse tile array for fast range query + int sparseSkip = 6; + //TODO if this is slow, use a quadtree + Seq sparse = new Seq<>(path.size / sparseSkip + 1); + + for(int i = 0; i < path.size; i++){ + if(i % sparseSkip == 0){ + sparse.add(path.get(i)); + } + } + + //regen is in health per second + //dps is per second + float sumHealth = 0f, sumRps = 0f, sumDps = 0f; + float totalPathBuild = 0; + + //first, calculate the total health of blocks in the path + + for(Tile t : path){ + int radius = 2; + + //radius is square. + for(int dx = -radius; dx <= radius; dx++){ + for(int dy = -radius; dy <= radius; dy++){ + int wx = dx + t.x, wy = dy + t.y; + if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height()){ + Tile tile = world.rawTile(wx, wy); + + if(tile.build != null && tile.team() == state.rules.defaultTeam){ + //health is divided by block size, because multiblocks are counted multiple times. + sumHealth += tile.build.health / tile.block().size; + totalPathBuild += 1f / tile.block().size; + } + } + } + } + } + + float avgHealth = totalPathBuild <= 1 ? sumHealth : sumHealth / totalPathBuild; + + //block dps + regen + extra health/shields + for(Building build : Groups.build){ + float e = build.efficiency(); + if(e > 0.08f){ + if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range()))){ + if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){ + sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e; + } + + if(build.block instanceof MendProjector m){ + sumRps += m.healPercent / m.reload * avgHealth * 60f / 100f * e; + } + + if(build.block instanceof ForceProjector f){ + sumHealth += f.breakage * e; + sumRps += 1f * e; + } + } + } + } + + float curEnemyHealth = 0f, curEnemyDps = 0f; + + //unit regen + health + dps + for(Unit unit : Groups.unit){ + //skip player + if(unit.isPlayer()) continue; + + if(unit.team == state.rules.defaultTeam){ + sumHealth += unit.health + unit.shield; + sumDps += unit.type().dpsEstimate; + if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ + sumRps += h.amount / h.reload * 60f; + } + }else{ + curEnemyDps += unit.type().dpsEstimate; + curEnemyHealth += unit.health; + } + } + + //calculate DPS and health for the next few waves and store in list + var reg = new LinearRegression(); + Seq waveDps = new Seq<>(), waveHealth = new Seq<>(); + + for(int wave = state.wave, i = 0; i < 3; wave += (1 + i++)){ + float sumWaveDps = 0f, sumWaveHealth = 0f; + + //first wave has to take into account current dps + if(wave == state.wave){ + sumWaveDps += curEnemyDps; + sumWaveHealth += curEnemyHealth; + } + + for(SpawnGroup group : state.rules.spawns){ + int spawned = group.getSpawned(wave); + if(spawned <= 0) continue; + sumWaveHealth += spawned * (group.getShield(wave) + group.type.health); + sumWaveDps += spawned * group.type.dpsEstimate; + } + waveDps.add(new Vec2(wave, sumWaveDps)); + waveHealth.add(new Vec2(wave, sumWaveHealth)); + } + + //calculate linear regression of the wave data and store it + reg.calculate(waveHealth); + info.waveHealthBase = reg.intercept; + info.waveHealthSlope = reg.slope; + + reg.calculate(waveDps); + info.waveDpsBase = reg.intercept; + info.waveDpsSlope = reg.slope; + + info.sumHealth = sumHealth; + info.sumDps = sumDps; + info.sumRps = sumRps; + + //finally, find an equation to put it all together and produce a 0-1 number + //due to the way most defenses are structured, this number will likely need a ^4 power or so + } public static void apply(float fraction){ Tiles tiles = world.tiles; @@ -35,22 +300,62 @@ public class SectorDamage{ if(core != null && !frontier.isEmpty()){ for(Tile spawner : frontier){ //find path from spawn to core - //TODO this is broken Seq path = Astar.pathfind(spawner, core.tile, SectorDamage::cost, t -> !(t.block().isStatic() && t.solid())); - int amount = (int)(path.size * fraction); - for(int i = 0; i < amount; i++){ - Tile t = path.get(i); - Geometry.circle(t.x, t.y, tiles.width, tiles.height, 5, (cx, cy) -> { - Tile other = tiles.getn(cx, cy); - //just remove all the buildings in the way - as long as they're not cores! - if(other.build != null && other.team() == state.rules.defaultTeam && !(other.block() instanceof CoreBlock)){ - if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ - Effect.rubble(other.build.x, other.build.y, other.block().size); - } + Seq removal = new Seq<>(); - other.remove(); + int radius = 3; + + //only penetrate a certain % by health, not by distance + float totalHealth = path.sumf(t -> { + float s = 0; + for(int dx = -radius; dx <= radius; dx++){ + for(int dy = -radius; dy <= radius; dy++){ + int wx = dx + t.x, wy = dy + t.y; + if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height() && Mathf.within(dx, dy, radius)){ + Tile other = world.rawTile(wx, wy); + s += other.team() == state.rules.defaultTeam ? other.build.health / other.block().size : 0f; + } } - }); + } + return s; + }); + float targetHealth = totalHealth * fraction; + float healthCount = 0; + + out: + for(int i = 0; i < path.size && healthCount < targetHealth; i++){ + Tile t = path.get(i); + + for(int dx = -radius; dx <= radius; dx++){ + for(int dy = -radius; dy <= radius; dy++){ + int wx = dx + t.x, wy = dy + t.y; + if(wx >= 0 && wy >= 0 && wx < world.width() && wy < world.height() && Mathf.within(dx, dy, radius)){ + Tile other = world.rawTile(wx, wy); + + //just remove all the buildings in the way - as long as they're not cores + if(other.build != null && other.team() == state.rules.defaultTeam && !(other.block() instanceof CoreBlock)){ + if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ + Effect.rubble(other.build.x, other.build.y, other.block().size); + } + + //since the whole block is removed, count the whole health + healthCount += other.build.health; + + removal.add(other.build); + + if(healthCount >= targetHealth){ + break out; + } + } + } + } + } + } + + for(Building r : removal){ + if(r.tile.build == r){ + r.tile.remove(); + } } } } diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 12c33c7480..a596f3e7ae 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -629,7 +629,7 @@ public class Mods implements Loadable{ } //make sure the main class exists before loading it; if it doesn't just don't put it there - if(mainFile.exists()){ + if(mainFile.exists() && Core.settings.getBool("mod-" + meta.name.toLowerCase().replace(" ", "-") + "-enabled", true)){ //mobile versions don't support class mods if(ios){ throw new IllegalArgumentException("Java class mods are not supported on iOS."); diff --git a/core/src/mindustry/net/NetworkIO.java b/core/src/mindustry/net/NetworkIO.java index 3a32d5cb6b..acaf9f9640 100644 --- a/core/src/mindustry/net/NetworkIO.java +++ b/core/src/mindustry/net/NetworkIO.java @@ -3,7 +3,9 @@ package mindustry.net; import arc.*; import arc.util.*; import arc.util.io.*; +import mindustry.content.*; import mindustry.core.*; +import mindustry.ctype.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.io.*; @@ -21,6 +23,18 @@ public class NetworkIO{ public static void writeWorld(Player player, OutputStream os){ try(DataOutputStream stream = new DataOutputStream(os)){ + //write all researched content to rules if hosting + if(state.isCampaign()){ + state.rules.researched.clear(); + for(ContentType type : ContentType.all){ + for(Content c : content.getBy(type)){ + if(c instanceof UnlockableContent u && u.unlocked() && TechTree.get(u) != null){ + state.rules.researched.add(u.name); + } + } + } + } + stream.writeUTF(JsonIO.write(state.rules)); SaveIO.getSaveWriter().writeStringMap(stream, state.map.tags); @@ -44,6 +58,8 @@ public class NetworkIO{ state.rules = JsonIO.read(Rules.class, stream.readUTF()); state.map = new Map(SaveIO.getSaveWriter().readStringMap(stream)); + Log.info("READ RULES: @", state.rules.researched); + state.wave = stream.readInt(); state.wavetime = stream.readFloat(); diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 4c1df28945..f692293309 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -103,9 +103,22 @@ public class Sector{ return save != null && !save.meta.rules.waves; } - /** @return whether waves are present - if true, any bases here will be attacked. */ - public boolean hasWaves(){ - return save != null && save.meta.rules.waves; + /** @return whether waves are present - if true, any bases here will be attacked. + * only applicable to sectors with active player bases. */ + public boolean isUnderAttack(){ + return hasBase() && Core.settings.getBool(key("under-attack"), true); + } + + public void setUnderAttack(boolean underAttack){ + Core.settings.put(key("under-attack"), underAttack); + } + + public void setWavesPassed(int waves){ + put("waves-passed", waves); + } + + public int getWavesPassed(){ + return Core.settings.getInt(key("waves-passed"), 0); } public boolean hasSave(){ @@ -238,6 +251,15 @@ public class Sector{ return Core.settings.getInt(key("spawn-position"), Point2.pack(world.width() / 2, world.height() / 2)); } + /** @return sector damage from enemy, 0 to 1 */ + public float getDamage(){ + return Core.settings.getFloat(key("damage"), 0f); + } + + public void setDamage(float damage){ + put("damage", damage); + } + /** @return time spent in this sector this turn in ticks. */ public float getTimeSpent(){ //return currently counting time spent if being played on diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 661e735fa7..68fdd6837e 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -79,6 +79,8 @@ public class UnitType extends UnlockableContent{ public int mineTier = -1; public float buildSpeed = 1f, mineSpeed = 1f; + /** This is a VERY ROUGH estimate of unit DPS. */ + public float dpsEstimate = -1; public float clipSize = -1; public boolean canDrown = true; public float engineOffset = 5f, engineSize = 2.5f; @@ -266,6 +268,17 @@ public class UnitType extends UnlockableContent{ ammoCapacity = Math.max(1, (int)(shotsPerSecond * targetSeconds)); } + + //calculate estimated DPS for one target based on weapons + if(dpsEstimate < 0){ + dpsEstimate = weapons.sumf(w -> (w.bullet.estimateDPS() / w.reload) * w.shots * 60f); + + //suicide enemy + if(weapons.contains(w -> w.bullet.killShooter)){ + //scale down DPS to be insignificant + dpsEstimate /= 100f; + } + } } @CallSuper @@ -436,7 +449,7 @@ public class UnitType extends UnlockableContent{ applyColor(unit); //draw back items - if(unit.hasItem() && unit.itemTime > 0.01f){ + if(unit.item() != null && unit.itemTime > 0.01f){ float size = (itemSize + Mathf.absin(Time.time(), 5f, 1f)) * unit.itemTime; Draw.mixcol(Pal.accent, Mathf.absin(Time.time(), 5f, 0.5f)); diff --git a/core/src/mindustry/ui/dialogs/HostDialog.java b/core/src/mindustry/ui/dialogs/HostDialog.java index 25300fc0b1..1282d47b7d 100644 --- a/core/src/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/mindustry/ui/dialogs/HostDialog.java @@ -76,13 +76,15 @@ public class HostDialog extends BaseDialog{ platform.updateLobby(); }); })); + + if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){ + Core.settings.put("publichost", false); + platform.updateLobby(); + Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta")); + } } - if(Version.modifier.contains("beta")){ - Core.settings.put("publichost", false); - platform.updateLobby(); - Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta")); - } + }catch(IOException e){ ui.showException("@server.error", e); } diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 1c80418708..aa4d9c22c8 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -367,8 +367,10 @@ public class JoinDialog extends BaseDialog{ local.row(); - TextButton button = local.button("", Styles.cleart, () -> safeConnect(host.address, host.port, host.version)) - .width(w).pad(5f).get(); + TextButton button = local.button("", Styles.cleart, () -> { + Events.fire(new ClientPreConnectEvent(host)); + safeConnect(host.address, host.port, host.version); + }).width(w).pad(5f).get(); button.clearChildren(); buildServer(host, button); } @@ -379,8 +381,10 @@ public class JoinDialog extends BaseDialog{ global.row(); - TextButton button = global.button("", Styles.cleart, () -> safeConnect(host.address, host.port, host.version)) - .width(w).pad(5f).get(); + TextButton button = global.button("", Styles.cleart, () -> { + Events.fire(new ClientPreConnectEvent(host)); + safeConnect(host.address, host.port, host.version); + }).width(w).pad(5f).get(); button.clearChildren(); buildServer(host, button); } diff --git a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java index acb240d7c9..1ba7a0084b 100644 --- a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java @@ -2,6 +2,7 @@ package mindustry.ui.dialogs; import arc.*; import arc.func.*; +import arc.input.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; @@ -33,7 +34,14 @@ public class LaunchLoadoutDialog extends BaseDialog{ cont.clear(); buttons.clear(); - addCloseButton(); + buttons.defaults().size(160f, 64f); + buttons.button("@back", Icon.left, this::hide); + + keyDown(key -> { + if(key == KeyCode.escape || key == KeyCode.back){ + Core.app.post(this::hide); + } + }); //updates sum requirements Runnable update = () -> { @@ -79,7 +87,7 @@ public class LaunchLoadoutDialog extends BaseDialog{ update.run(); rebuildItems.run(); }); - }); + }).width(204); buttons.button("@launch.text", Icon.ok, () -> { universe.updateLoadout(core, selected); diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index f09e2fe185..f06c09ce30 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -34,12 +34,11 @@ public class PausedDialog extends BaseDialog{ }); if(!mobile){ - //TODO localize - //TODO capturing is disabled, remove? - //cont.label(() -> state.getSector() == null ? "" : - //("[lightgray]Next turn in [accent]" + state.getSector().displayTimeRemaining() + - // (state.rules.winWave > 0 && !state.getSector().isCaptured() ? "\n[lightgray]Reach wave[accent] " + state.rules.winWave + "[] to capture" : ""))) - // .visible(() -> state.getSector() != null).colspan(2); + //TODO localize + move to other wave menu + cont.label(() -> state.getSector() == null || state.rules.winWave <= 0 || state.getSector().isCaptured() ? "" : + (state.rules.winWave > 0 && !state.getSector().isCaptured() ? + (state.wave >= state.rules.winWave ? "\n[lightgray]Defeat remaining enemies to capture" : "\n[lightgray]Reach wave[accent] " + state.rules.winWave + "[] to capture") : "")) + .visible(() -> state.getSector() != null).colspan(2); cont.row(); float dw = 220f; @@ -89,7 +88,7 @@ public class PausedDialog extends BaseDialog{ cont.buttonRow("@launchcore", Icon.up, () -> { hide(); ui.planet.showLaunch(state.getSector(), player.team().core()); - }).disabled(b -> player.team().core() == null); + }).disabled(b -> player.team().core() == null || net.client()); cont.row(); @@ -101,7 +100,11 @@ public class PausedDialog extends BaseDialog{ cont.row(); } - cont.buttonRow("@hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); + if(state.isCampaign() && net.active()){ + cont.buttonRow("@research", Icon.tree, ui.research::show); + }else{ + cont.buttonRow("@hostserver.mobile", Icon.host, ui.host::show).disabled(b -> net.active()); + } cont.buttonRow("@quit", Icon.exit, this::showQuitConfirm).update(s -> { s.setText(control.saves.getCurrent() != null && control.saves.getCurrent().isAutosave() ? "@save.quit" : "@quit"); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 4d24bbe8b8..d730d455d9 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -217,9 +217,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public void renderProjections(){ if(hovered != null){ planets.drawPlane(hovered, () -> { - Draw.color(Color.white, Pal.accent, Mathf.absin(5f, 1f)); + Draw.color(hovered.isUnderAttack() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f)); - TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : null; + TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : hovered.isUnderAttack() ? Icon.warning.getRegion() : null; if(icon != null){ Draw.rect(icon, 0, 0); @@ -355,20 +355,18 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.add("[accent]" + (sector.preset == null ? sector.id : sector.preset.localizedName)).row(); stable.image().color(Pal.accent).fillX().height(3f).pad(3f).row(); stable.add(sector.save != null ? sector.save.getPlayTime() : "@sectors.unexplored").row(); - if(sector.hasWaves() || sector.hasEnemyBase()){ + if(sector.isUnderAttack() || sector.hasEnemyBase()){ stable.add("[accent]Difficulty: " + (int)(sector.baseCoverage * 10)).row(); } - //TODO sector damage is disabled, remove when finalized - /* - if(sector.hasBase() && sector.hasWaves()){ + if(sector.isUnderAttack()){ //TODO localize when finalized //these mechanics are likely to change and as such are not added to the bundle stable.add("[scarlet]Under attack!"); stable.row(); - stable.add("[accent]" + Mathf.ceil(sectorDestructionTurns - (sector.getSecondsPassed() * 60) / turnDuration) + " turn(s)\nuntil destruction"); + stable.add("[accent]" + (int)(sector.getDamage() * 100) + "% damaged"); stable.row(); - }*/ + } if(sector.save != null){ stable.add("@sectors.resources").row(); diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index 9c5e6fd3ed..bb6841dcbb 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -164,13 +164,10 @@ public class ResearchDialog extends BaseDialog{ @Override public Dialog show(){ - Core.app.post(() -> { - if(net.client()){ - //TODO make this not display every time - //TODO rework this in the future - ui.showInfo("@campaign.multiplayer"); - } - }); + if(net.client()){ + ui.showInfo("@research.multiplayer"); + return null; + } return super.show(); } diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 8dd9753fda..190c4109f2 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -250,7 +250,6 @@ public class SettingsMenuDialog extends SettingsDialog{ if(!mobile){ game.checkPref("buildautopause", false); } - game.checkPref("mapcenter", true); if(steam){ game.sliderPref("playerlimit", 16, 2, 32, i -> { diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index f56d507c4d..44c39795be 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -54,7 +54,7 @@ public class HudFragment extends Fragment{ outer: for(int i = state.wave - 1; i <= state.wave + max; i++){ for(SpawnGroup group : state.rules.spawns){ - if(group.effect == StatusEffects.boss && group.getUnitsSpawned(i) > 0){ + if(group.effect == StatusEffects.boss && group.getSpawned(i) > 0){ int diff = (i + 2) - state.wave; //increments at which to warn about incoming guardian diff --git a/core/src/mindustry/ui/fragments/MinimapFragment.java b/core/src/mindustry/ui/fragments/MinimapFragment.java index 43ad3163b0..5acf3bc6d3 100644 --- a/core/src/mindustry/ui/fragments/MinimapFragment.java +++ b/core/src/mindustry/ui/fragments/MinimapFragment.java @@ -111,12 +111,10 @@ public class MinimapFragment extends Fragment{ } public void toggle(){ - if(Core.settings.getBool("mapcenter")){ - float size = baseSize * zoom * world.width(); - float ratio = (float)renderer.minimap.getTexture().height / renderer.minimap.getTexture().width; - panx = (size/2f - player.x() / (world.width() * tilesize) * size) / zoom; - pany = (size*ratio/2f - player.y() / (world.height() * tilesize) * size*ratio) / zoom; - } + float size = baseSize * zoom * world.width(); + float ratio = (float)renderer.minimap.getTexture().height / renderer.minimap.getTexture().width; + panx = (size/2f - player.x() / (world.width() * tilesize) * size) / zoom; + pany = (size*ratio/2f - player.y() / (world.height() * tilesize) * size*ratio) / zoom; shown = !shown; } } diff --git a/core/src/mindustry/world/blocks/defense/ForceProjector.java b/core/src/mindustry/world/blocks/defense/ForceProjector.java index b508e90965..3b90533745 100644 --- a/core/src/mindustry/world/blocks/defense/ForceProjector.java +++ b/core/src/mindustry/world/blocks/defense/ForceProjector.java @@ -12,6 +12,7 @@ import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.world.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -80,11 +81,16 @@ public class ForceProjector extends Block{ Draw.color(); } - public class ForceBuild extends Building{ + public class ForceBuild extends Building implements Ranged{ public boolean broken = true; public float buildup, radscl, hit, warmup, phaseHeat; public ForceDraw drawer; + @Override + public float range(){ + return realRadius(); + } + @Override public void created(){ super.created(); diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index a2efa6e8b0..2bc50d6d7a 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -9,6 +9,7 @@ import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -55,11 +56,16 @@ public class MendProjector extends Block{ Drawf.dashCircle(x * tilesize + offset, y * tilesize + offset, range, Pal.accent); } - public class MendBuild extends Building{ + public class MendBuild extends Building implements Ranged{ float heat; float charge = Mathf.random(reload); float phaseHeat; + @Override + public float range(){ + return range; + } + @Override public void updateTile(){ heat = Mathf.lerpDelta(heat, consValid() || cheating() ? 1f : 0f, 0.08f); diff --git a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java index 56010c7c0f..ae3c10f3fd 100644 --- a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java @@ -8,6 +8,7 @@ import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -60,11 +61,16 @@ public class OverdriveProjector extends Block{ } } - public class OverdriveBuild extends Building{ + public class OverdriveBuild extends Building implements Ranged{ float heat; float charge = Mathf.random(reload); float phaseHeat; + @Override + public float range(){ + return range; + } + @Override public void drawLight(){ Drawf.light(team, x, y, 50f * efficiency(), baseColor, 0.7f * efficiency()); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index ea94a670b9..521e6dc19b 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -19,7 +19,6 @@ import mindustry.world.meta.values.*; import static mindustry.Vars.*; public class ItemTurret extends Turret{ - public int maxAmmo = 30; public ObjectMap ammoTypes = new ObjectMap<>(); public ItemTurret(String name){ diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index e34d221d53..11d6213aa5 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -8,6 +8,7 @@ import mindustry.entities.bullet.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; +import mindustry.world.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; import mindustry.world.meta.values.*; @@ -83,7 +84,9 @@ public class LiquidTurret extends Turret{ int tr = (int)(range / tilesize); for(int x = -tr; x <= tr; x++){ for(int y = -tr; y <= tr; y++){ - if(Fires.has(x + tile.x, y + tile.y)){ + Tile other = world.tileWorld(x + tile.x, y + tile.y); + //do not extinguish fires on other team blocks + if(other != null && Fires.has(x + tile.x, y + tile.y) && (other.build == null || other.team() == team)){ target = Fires.get(x + tile.x, y + tile.y); return; } diff --git a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java index f8b49195da..85e5243e2f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/PowerTurret.java @@ -1,6 +1,7 @@ package mindustry.world.blocks.defense.turrets; import mindustry.entities.bullet.*; +import mindustry.logic.*; import mindustry.world.meta.*; public class PowerTurret extends Turret{ @@ -33,6 +34,15 @@ public class PowerTurret extends Turret{ super.updateTile(); } + @Override + public double sense(LAccess sensor){ + return switch(sensor){ + case ammo -> power.status; + case ammoCapacity -> 1; + default -> super.sense(sensor); + }; + } + @Override public BulletType useAmmo(){ //nothing used directly diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 411ee782ec..4199c4b3fb 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -41,6 +41,7 @@ public abstract class Turret extends Block{ public Effect ammoUseEffect = Fx.none; public Sound shootSound = Sounds.shoot; + public int maxAmmo = 30; public int ammoPerShot = 1; public float ammoEjectBack = 1f; public float range = 50f; @@ -192,6 +193,8 @@ public abstract class Turret extends Block{ @Override public double sense(LAccess sensor){ return switch(sensor){ + case ammo -> totalAmmo; + case ammoCapacity -> maxAmmo; case rotation -> rotation; case shootX -> targetPos.x; case shootY -> targetPos.y; diff --git a/core/src/mindustry/world/blocks/logic/SwitchBlock.java b/core/src/mindustry/world/blocks/logic/SwitchBlock.java index bca47a306a..d27cebb1b3 100644 --- a/core/src/mindustry/world/blocks/logic/SwitchBlock.java +++ b/core/src/mindustry/world/blocks/logic/SwitchBlock.java @@ -37,6 +37,11 @@ public class SwitchBlock extends Block{ } } + @Override + public Boolean config(){ + return enabled; + } + @Override public byte version(){ return 1; diff --git a/gradle.properties b/gradle.properties index 5a37b2f0ab..0cde4e83bc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=dfcb9ab4b9f9bb977ed3cff4b8a16c22e076368a +archash=171cba8dda6deed931b998a0eb368d61f68ea38c diff --git a/tests/src/test/java/SectorTests.java b/tests/src/test/java/SectorTests.java index 4110670eed..6f07e77313 100644 --- a/tests/src/test/java/SectorTests.java +++ b/tests/src/test/java/SectorTests.java @@ -66,7 +66,7 @@ public class SectorTests{ outer: for(int i = 1; i <= 1000; i++){ for(SpawnGroup spawn : spawns){ - if(spawn.effect == StatusEffects.boss && spawn.getUnitsSpawned(i) > 0){ + if(spawn.effect == StatusEffects.boss && spawn.getSpawned(i) > 0){ bossWave = i; break outer; } @@ -84,7 +84,7 @@ public class SectorTests{ for(int i = 1; i <= bossWave; i++){ int total = 0; for(SpawnGroup spawn : spawns){ - total += spawn.getUnitsSpawned(i); + total += spawn.getSpawned(i); } assertNotEquals(0, total, "Sector " + zone + " has no spawned enemies at wave " + i); From 45b87ec615a9d1fd467abfb823bbf635fce0b197 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 15:41:09 -0400 Subject: [PATCH 019/124] fixed some sector things, broke more things --- core/src/mindustry/core/Control.java | 14 +++++--------- core/src/mindustry/core/Logic.java | 2 +- core/src/mindustry/game/Objectives.java | 5 ++--- core/src/mindustry/game/Universe.java | 10 ++++------ core/src/mindustry/maps/SectorDamage.java | 7 +++++++ core/src/mindustry/type/Sector.java | 7 +++++-- core/src/mindustry/ui/dialogs/PlanetDialog.java | 4 +++- .../ui/dialogs/SettingsMenuDialog.java | 2 +- .../src/mindustry/ui/fragments/HudFragment.java | 2 +- .../world/blocks/storage/CoreBlock.java | 17 ----------------- gradle.properties | 2 +- tests/src/test/java/power/FakeGraphics.java | 5 ----- 12 files changed, 30 insertions(+), 47 deletions(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index efe2327074..e4b4e3d44f 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -160,9 +160,7 @@ public class Control implements ApplicationListener, Loadable{ //delete the save, it is gone. if(saves.getCurrent() != null && !state.rules.tutorial){ - Sector sector = state.getSector(); - sector.save = null; - saves.getCurrent().delete(); + saves.getCurrent().save(); } } }); @@ -283,18 +281,16 @@ public class Control implements ApplicationListener, Loadable{ state.rules.sector = sector; //if there is no base, simulate a new game and place the right loadout at the spawn position - //TODO this is broken? if(state.rules.defaultTeam.cores().isEmpty()){ + //reset wave so things are more fair + state.wave = 1; - //kill all friendly units, since they should be dead anwyay + //kill all units, since they should be dead anwyay for(Unit unit : Groups.unit){ - if(unit.team() == state.rules.defaultTeam){ - unit.remove(); - } + unit.remove(); } Tile spawn = world.tile(sector.getSpawnPosition()); - //TODO PLACE CORRECT LOADOUT Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); //set up camera/player locations diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 4d95b22820..3829c98cb6 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -120,7 +120,7 @@ public class Logic implements ApplicationListener{ } //waves depend on attack status. - state.rules.waves = state.rules.sector.isUnderAttack(); + state.rules.waves = state.rules.sector.isUnderAttack() || !state.rules.sector.hasBase(); //add resources based on turns passed if(state.rules.sector.save != null && core != null){ diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index a4097c51fc..7fc844a180 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -28,7 +28,6 @@ public class Objectives{ } } - //TODO fix public static class SectorComplete extends SectorObjective{ public SectorComplete(SectorPreset zone){ @@ -39,12 +38,12 @@ public class Objectives{ @Override public boolean complete(){ - return preset.sector.save != null && preset.sector.save.meta.wave >= preset.sector.save.meta.rules.winWave; + return preset.sector.save != null && preset.sector.save.meta.wave >= preset.captureWave; } @Override public String display(){ - return Core.bundle.format("requirement.wave", preset.sector.save == null ? "" : preset.sector.save.meta.rules.winWave, preset.localizedName); + return Core.bundle.format("requirement.capture", preset.localizedName); } } diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 82b53ce604..8eb9a8d2af 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -161,17 +161,14 @@ public class Universe{ //if so, just delete the save for now. it's lost. //TODO don't delete it later maybe - sector.save.delete(); - //clear recieved sector.setExtraItems(new ItemSeq()); - sector.save = null; - sector.setDamage(0f); + sector.setDamage(1.01f); }else if(attacked && wavesPassed > 0 && sector.save.meta.wave + wavesPassed >= sector.save.meta.rules.winWave && !sector.hasEnemyBase()){ //autocapture the sector sector.setUnderAttack(false); //fire the event - Events.fire(new SectorCaptureEvent(state.rules.sector)); + Events.fire(new SectorCaptureEvent(sector)); } } @@ -179,9 +176,10 @@ public class Universe{ if(sector.save != null && sector.save.meta != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.destination != null){ Sector to = sector.save.meta.secinfo.destination; if(to.save != null){ + float scl = Math.max(1f - sector.getDamage(), 0); ItemSeq items = new ItemSeq(); //calculated exported items to this sector - sector.save.meta.secinfo.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed))); + sector.save.meta.secinfo.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed * scl))); to.addItems(items); } } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index b8afb42688..fb7ee28e8f 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -360,6 +360,13 @@ public class SectorDamage{ } } + //kill every core if damage is maximum + if(damage >= 1){ + for(Building c : state.rules.defaultTeam.cores().copy()){ + c.tile.remove(); + } + } + float falloff = (damage) / (Math.max(tiles.width, tiles.height) * Mathf.sqrt2); int peak = 0; diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index f692293309..59fc6de8da 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -86,7 +86,7 @@ public class Sector{ /** @return whether the player has a base here. */ public boolean hasBase(){ - return save != null && !save.meta.tags.getBool("nocores"); + return save != null && !save.meta.tags.getBool("nocores") && getDamage() < 1f; } /** @return whether the enemy has a generated base here. */ @@ -229,9 +229,10 @@ public class Sector{ if(save != null){ long seconds = getSecondsPassed(); + float scl = Math.max(1f - getDamage(), 0); //add produced items - save.meta.secinfo.production.each((item, stat) -> count.add(item, (int)(stat.mean * seconds))); + save.meta.secinfo.production.each((item, stat) -> count.add(item, (int)(stat.mean * seconds * scl))); //add received items count.add(getExtraItems()); @@ -253,6 +254,8 @@ public class Sector{ /** @return sector damage from enemy, 0 to 1 */ public float getDamage(){ + //dead sector + if(save != null & save.meta.tags.getBool("nocores")) return 1.01f; return Core.settings.getFloat(key("damage"), 0f); } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index d730d455d9..44ef8eb17a 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -394,8 +394,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.table(t -> { t.left(); + float scl = Math.max(1f - sector.getDamage(), 0); + sector.save.meta.secinfo.production.each((item, stat) -> { - int total = (int)(stat.mean * 60); + int total = (int)(stat.mean * 60 * scl); if(total > 1){ t.image(item.icon(Cicon.small)).padRight(3); t.add(UI.formatAmount(total) + " " + Core.bundle.get("unit.perminute")).color(Color.lightGray); diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 190c4109f2..efcc6e68bb 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -291,7 +291,7 @@ public class SettingsMenuDialog extends SettingsDialog{ } return s + "%"; }); - graphics.sliderPref("bridgeopacity", 75, 0, 100, 5, s -> s + "%"); + graphics.sliderPref("bridgeopacity", 100, 0, 100, 5, s -> s + "%"); if(!mobile){ graphics.checkPref("vsync", true, b -> Core.graphics.setVSync(b)); diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 44c39795be..d37095be54 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -71,7 +71,7 @@ public class HudFragment extends Fragment{ //TODO details and stuff Events.on(SectorCaptureEvent.class, e ->{ //TODO localize - showToast("Sector[accent] captured[]!"); + showToast("Sector [accent]" + (e.sector.isBeingPlayed() ? "" : e.sector.id + " ") + "[]captured!"); }); //TODO localize diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index bdb16eb674..e0aae707fa 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -310,23 +310,6 @@ public class CoreBlock extends StorageBlock{ } } - @Override - public void onDestroyed(){ - super.onDestroyed(); - - if(state.isCampaign() && team == state.rules.waveTeam){ - //do not recache - world.setGenerating(true); - tile.setOverlay(Blocks.spawn); - world.setGenerating(false); - - if(!spawner.getSpawns().contains(tile)){ - spawner.getSpawns().add(tile); - } - spawner.doShockwave(x, y); - } - } - @Override public void placed(){ super.placed(); diff --git a/gradle.properties b/gradle.properties index 0cde4e83bc..6015307e9d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=171cba8dda6deed931b998a0eb368d61f68ea38c +archash=7ce118ba1fcbe652dd3b225fd7d16a7a761c238e diff --git a/tests/src/test/java/power/FakeGraphics.java b/tests/src/test/java/power/FakeGraphics.java index 378f675224..5f64aa61f3 100644 --- a/tests/src/test/java/power/FakeGraphics.java +++ b/tests/src/test/java/power/FakeGraphics.java @@ -63,11 +63,6 @@ public class FakeGraphics extends Graphics{ return 0; } - @Override - public float getRawDeltaTime(){ - return 0; - } - @Override public int getFramesPerSecond(){ return 0; From d177c8b8756db388936730a1ef89e379146b1ac1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 15:45:19 -0400 Subject: [PATCH 020/124] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6015307e9d..0ebd9ffd28 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=7ce118ba1fcbe652dd3b225fd7d16a7a761c238e +archash=46ebdb4aeb1e03ca6b3b4c27a93533dc92278a33 From 5ee4101ba4fd07c6bf38247739d9d93974c3303b Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Oct 2020 16:33:51 -0400 Subject: [PATCH 021/124] Moved some static regions --- core/src/mindustry/entities/comp/BuildingComp.java | 4 ++-- core/src/mindustry/graphics/BlockRenderer.java | 12 ++++++++++++ core/src/mindustry/logic/LExecutor.java | 2 +- core/src/mindustry/type/Sector.java | 2 ++ core/src/mindustry/world/Block.java | 13 ------------- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 15d79a8942..a3514cf76a 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -766,9 +766,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } public void drawCracks(){ - if(!damaged() || block.size > Block.maxCrackSize) return; + if(!damaged() || block.size > BlockRenderer.maxCrackSize) return; int id = pos(); - TextureRegion region = Block.cracks[block.size - 1][Mathf.clamp((int)((1f - healthf()) * Block.crackRegions), 0, Block.crackRegions-1)]; + TextureRegion region = renderer.blocks.cracks[block.size - 1][Mathf.clamp((int)((1f - healthf()) * BlockRenderer.crackRegions), 0, BlockRenderer.crackRegions-1)]; Draw.colorl(0.2f, 0.1f + (1f - healthf())* 0.6f); Draw.rect(region, x, y, (id%4)*90); Draw.color(); diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index a36230f0aa..223540e601 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -20,11 +20,14 @@ import static arc.Core.*; import static mindustry.Vars.*; public class BlockRenderer implements Disposable{ + public static final int crackRegions = 8, maxCrackSize = 9; + private static final int initialRequests = 32 * 32; private static final int expandr = 9; private static final Color shadowColor = new Color(0, 0, 0, 0.71f); public final FloorRenderer floor = new FloorRenderer(); + public TextureRegion[][] cracks; private Seq tileview = new Seq<>(false, initialRequests, Tile.class); private Seq lightview = new Seq<>(false, initialRequests, Tile.class); @@ -40,6 +43,15 @@ public class BlockRenderer implements Disposable{ public BlockRenderer(){ + Events.on(ClientLoadEvent.class, e -> { + cracks = new TextureRegion[maxCrackSize][crackRegions]; + for(int size = 1; size <= maxCrackSize; size++){ + for(int i = 0; i < crackRegions; i++){ + cracks[size - 1][i] = Core.atlas.find("cracks-" + size + "-" + i); + } + } + }); + Events.on(WorldLoadEvent.class, event -> { shadowEvents.clear(); lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index fee780e145..d493a7f7fe 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -129,7 +129,7 @@ public class LExecutor{ public void setnum(int index, double value){ Var v = vars[index]; if(v.constant) return; - v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : 0; + v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : value; v.objval = null; v.isobj = false; } diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 59fc6de8da..db3587674b 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -304,10 +304,12 @@ public class Sector{ return Core.settings.getInt(key("secondsi-passed")); } + //TODO this is terrible private String key(String key){ return planet.name + "-s-" + id + "-" + key; } + //TODO this is terrible private void put(String key, Object value){ Core.settings.put(key(key), value); } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 95d9a426e0..53dde34460 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -35,8 +35,6 @@ import java.util.*; import static mindustry.Vars.*; public class Block extends UnlockableContent{ - public static final int crackRegions = 8, maxCrackSize = 9; - public boolean hasItems; public boolean hasLiquids; public boolean hasPower; @@ -212,8 +210,6 @@ public class Block extends UnlockableContent{ public @Load("@-team") TextureRegion teamRegion; public TextureRegion[] teamRegions; - //TODO make this not static - public static TextureRegion[][] cracks; protected static final Seq tempTiles = new Seq<>(); protected static final Seq tempTileEnts = new Seq<>(); @@ -687,15 +683,6 @@ public class Block extends UnlockableContent{ public void load(){ region = Core.atlas.find(name); - if(cracks == null || (cracks[0][0].texture != null && cracks[0][0].texture.isDisposed())){ - cracks = new TextureRegion[maxCrackSize][crackRegions]; - for(int size = 1; size <= maxCrackSize; size++){ - for(int i = 0; i < crackRegions; i++){ - cracks[size - 1][i] = Core.atlas.find("cracks-" + size + "-" + i); - } - } - } - ContentRegions.loadRegions(this); //load specific team regions From 2f54edf34f9514281aa4e4caaedf0db4bc3e8a8b Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 11:02:24 -0400 Subject: [PATCH 022/124] Sector refactoring, invasions and cleanup --- core/assets/bundles/bundle.properties | 2 + core/src/mindustry/Vars.java | 4 + core/src/mindustry/core/Control.java | 8 +- core/src/mindustry/core/Logic.java | 53 +--- core/src/mindustry/core/World.java | 14 +- core/src/mindustry/game/EventType.java | 9 + core/src/mindustry/game/SectorInfo.java | 67 +++-- core/src/mindustry/game/Stats.java | 2 +- core/src/mindustry/game/Universe.java | 100 +++++--- core/src/mindustry/io/SaveMeta.java | 7 +- core/src/mindustry/io/SaveVersion.java | 8 +- core/src/mindustry/maps/SectorDamage.java | 30 ++- core/src/mindustry/type/Planet.java | 6 +- core/src/mindustry/type/Sector.java | 237 ++++-------------- core/src/mindustry/ui/IntFormat.java | 12 +- core/src/mindustry/ui/Styles.java | 1 + .../mindustry/ui/dialogs/PausedDialog.java | 7 - .../mindustry/ui/dialogs/PlanetDialog.java | 65 +++-- .../mindustry/ui/dialogs/ResearchDialog.java | 2 +- .../mindustry/ui/fragments/HudFragment.java | 18 +- core/src/mindustry/world/Tile.java | 9 + .../world/blocks/campaign/LaunchPad.java | 8 +- .../world/blocks/distribution/Conveyor.java | 2 +- .../blocks/distribution/StackConveyor.java | 2 +- .../world/blocks/storage/StorageBlock.java | 2 +- .../mindustry/world/modules/ItemModule.java | 16 +- tools/src/mindustry/tools/Generators.java | 4 +- 27 files changed, 319 insertions(+), 376 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 1253de6a13..aa515bfc6f 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -285,6 +285,7 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Wave {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Wave in {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Waiting... @@ -521,6 +522,7 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector planet.serpulo.name = Serpulo #TODO better name diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 6fdc1418dd..d88b6584f7 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -86,6 +86,10 @@ public class Vars implements Loadable{ public static final float logicItemTransferRange = 45f; /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; + /** chance of an invasion per turn, 1 = 100% */ + public static final float baseInvasionChance = 1f / 15f; + /** how many turns have to pass before invasions start */ + public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ public static final float minArmorDamage = 0.1f; /** launch animation duration */ diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index e4b4e3d44f..f6ae999945 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -279,6 +279,7 @@ public class Control implements ApplicationListener, Loadable{ slot.load(); slot.setAutosave(true); state.rules.sector = sector; + state.secinfo = state.rules.sector.info; //if there is no base, simulate a new game and place the right loadout at the spawn position if(state.rules.defaultTeam.cores().isEmpty()){ @@ -286,11 +287,9 @@ public class Control implements ApplicationListener, Loadable{ state.wave = 1; //kill all units, since they should be dead anwyay - for(Unit unit : Groups.unit){ - unit.remove(); - } + Groups.unit.clear(); - Tile spawn = world.tile(sector.getSpawnPosition()); + Tile spawn = world.tile(sector.info.spawnPosition); Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); //set up camera/player locations @@ -313,7 +312,6 @@ public class Control implements ApplicationListener, Loadable{ }else{ net.reset(); logic.reset(); - sector.setSecondsPassed(0); world.loadSector(sector); state.rules.sector = sector; //assign origin when launching diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 3829c98cb6..00787d9e43 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -16,7 +16,6 @@ import mindustry.type.Weather.*; import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.blocks.ConstructBlock.*; -import mindustry.world.blocks.storage.CoreBlock.*; import java.util.*; @@ -88,13 +87,10 @@ public class Logic implements ApplicationListener{ //when loading a 'damaged' sector, propagate the damage Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ - CoreBuild core = state.rules.defaultTeam.core(); + state.secinfo.write(); //how much wave time has passed - int wavesPassed = state.rules.sector.getWavesPassed(); - - //reset passed waves - state.rules.sector.setWavesPassed(0); + int wavesPassed = state.secinfo.wavesPassed; //wave has passed, remove all enemies, they are assumed to be dead if(wavesPassed > 0){ @@ -105,44 +101,22 @@ public class Logic implements ApplicationListener{ }); } + //simulate passing of waves if(wavesPassed > 0){ //simulate wave counter moving forward state.wave += wavesPassed; state.wavetime = state.rules.waveSpacing; + + SectorDamage.applyCalculatedDamage(); } - //reset damage display - state.rules.sector.setDamage(0f); + //reset values + state.secinfo.damage = 0f; + state.secinfo.wavesPassed = 0; + state.secinfo.hasCore = true; + state.secinfo.secondsPassed = 0; - //simulate damage if applicable - if(wavesPassed > 0){ - SectorDamage.applyCalculatedDamage(wavesPassed); - } - - //waves depend on attack status. - state.rules.waves = state.rules.sector.isUnderAttack() || !state.rules.sector.hasBase(); - - //add resources based on turns passed - if(state.rules.sector.save != null && core != null){ - //update correct storage capacity - state.rules.sector.save.meta.secinfo.storageCapacity = core.storageCapacity; - - //add new items received - state.rules.sector.calculateReceivedItems().each((item, amount) -> core.items.add(item, amount)); - - //clear received items - state.rules.sector.setExtraItems(new ItemSeq()); - - //validation - for(Item item : content.items()){ - //ensure positive items - if(core.items.get(item) < 0) core.items.set(item, 0); - //cap the items - if(core.items.get(item) > core.storageCapacity) core.items.set(item, core.storageCapacity); - } - } - - state.rules.sector.setSecondsPassed(0); + state.rules.sector.saveInfo(); } }); @@ -200,11 +174,6 @@ public class Logic implements ApplicationListener{ } public void skipWave(){ - if(state.isCampaign()){ - //warp time spent forward because the wave was just skipped. - state.secinfo.internalTimeSpent += state.wavetime; - } - state.wavetime = 0; } diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 03a18c01ed..d6fcb40a97 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -253,7 +253,7 @@ public class World{ setSectorRules(sector); if(state.rules.defaultTeam.core() != null){ - sector.setSpawnPosition(state.rules.defaultTeam.core().pos()); + sector.info.spawnPosition = state.rules.defaultTeam.core().pos(); } } @@ -267,8 +267,6 @@ public class World{ ObjectIntMap floorc = new ObjectIntMap<>(); ObjectSet content = new ObjectSet<>(); - float waterFloors = 0, totalFloors = 0; - for(Tile tile : world.tiles){ if(world.getDarkness(tile.x, tile.y) >= 3){ continue; @@ -280,10 +278,6 @@ public class World{ if(liquid != null) content.add(liquid); if(!tile.block().isStatic()){ - totalFloors ++; - if(liquid == Liquids.water){ - waterFloors += tile.floor().isDeep() ? 1f : 0.7f; - } floorc.increment(tile.floor()); if(tile.overlay() != Blocks.air){ floorc.increment(tile.overlay()); @@ -326,9 +320,9 @@ public class World{ state.rules.weather.add(new WeatherEntry(Weathers.sporestorm)); } - state.secinfo.resources = content.asArray(); - state.secinfo.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))); - + sector.info.resources = content.asArray(); + sector.info.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))); + sector.saveInfo(); } public Context filterContext(Map map){ diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 272c26363f..0ffb2f7369 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -73,6 +73,15 @@ public class EventType{ } } + /** Called when a sector is destroyed by waves when you're not there. */ + public static class SectorInvasionEvent{ + public final Sector sector; + + public SectorInvasionEvent(Sector sector){ + this.sector = sector; + } + } + public static class LaunchItemEvent{ public final ItemStack stack; diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 8e7f73a256..c6c5d3ee51 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -26,7 +26,7 @@ public class SectorInfo{ /** Export statistics. */ public ObjectMap export = new ObjectMap<>(); /** Items stored in all cores. */ - public ItemSeq coreItems = new ItemSeq(); + public ItemSeq items = new ItemSeq(); /** The best available core type. */ public Block bestCoreType = Blocks.air; /** Max storage capacity. */ @@ -39,13 +39,26 @@ public class SectorInfo{ public @Nullable Sector destination; /** Resources known to occur at this sector. */ public Seq resources = new Seq<>(); + /** Whether waves are enabled here. */ + public boolean waves = true; + /** Wave # from state */ + public int wave = 1, winWave = -1; + /** Time between waves. */ + public float waveSpacing = 60 * 60 * 2; + /** Damage dealt to sector. */ + public float damage; + /** How many waves have passed while the player was away. */ + public int wavesPassed; + /** Packed core spawn position. */ + public int spawnPosition; + /** How long the player has been playing elsewhere. */ + public float secondsPassed; + /** Display name. */ + public @Nullable String name; /** Special variables for simulation. */ public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope; - /** Time spent at this sector. Do not use unless you know what you're doing. */ - public transient float internalTimeSpent; - /** Counter refresh state. */ private transient Interval time = new Interval(); /** Core item storage to prevent spoofing. */ @@ -84,27 +97,55 @@ public class SectorInfo{ return export.get(item, ExportStat::new).mean; } + /** Write contents of meta into main storage. */ + public void write(){ + state.wave = wave; + state.rules.waves = waves; + state.rules.waveSpacing = waveSpacing; + state.rules.winWave = winWave; + + CoreBuild entity = state.rules.defaultTeam.core(); + if(entity != null){ + entity.items.clear(); + entity.items.add(items); + //ensure capacity. + entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.block.itemCapacity))); + } + + //TODO write items. + } + /** Prepare data for writing to a save. */ public void prepare(){ //update core items - coreItems.clear(); + items.clear(); CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ ItemModule items = entity.items; for(int i = 0; i < items.length(); i++){ - coreItems.set(content.item(i), items.get(i)); + this.items.set(content.item(i), items.get(i)); } + + spawnPosition = entity.pos(); } + waveSpacing = state.rules.waveSpacing; + wave = state.wave; + winWave = state.rules.winWave; + waves = state.rules.waves; hasCore = entity != null; bestCoreType = !hasCore ? Blocks.air : state.rules.defaultTeam.cores().max(e -> e.block.size).block; storageCapacity = entity != null ? entity.storageCapacity : 0; + secondsPassed = 0; + wavesPassed = 0; + damage = 0; - //update sector's internal time spent counter - state.rules.sector.setTimeSpent(internalTimeSpent); - state.rules.sector.setUnderAttack(state.rules.waves); + if(state.rules.sector != null){ + state.rules.sector.info = this; + state.rules.sector.saveInfo(); + } SectorDamage.writeParameters(this); } @@ -115,14 +156,6 @@ public class SectorInfo{ //updating in multiplayer as a client doesn't make sense if(net.client()) return; - internalTimeSpent += Time.delta; - - //autorun turns - if(internalTimeSpent >= turnDuration){ - internalTimeSpent = 0; - universe.runTurn(); - } - CoreBuild ent = state.rules.defaultTeam.core(); //refresh throughput diff --git a/core/src/mindustry/game/Stats.java b/core/src/mindustry/game/Stats.java index 1d175607ba..b963223518 100644 --- a/core/src/mindustry/game/Stats.java +++ b/core/src/mindustry/game/Stats.java @@ -40,7 +40,7 @@ public class Stats{ //weigh used fractions float frac = 0f; - Seq obtainable = zone.save == null ? new Seq<>() : zone.save.meta.secinfo.resources.select(i -> i instanceof Item).as(); + Seq obtainable = zone.save == null ? new Seq<>() : zone.info.resources.select(i -> i instanceof Item).as(); for(Item item : obtainable){ frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size; } diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 8eb9a8d2af..37a22d4209 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -18,6 +18,7 @@ public class Universe{ private int netSeconds; private float secondCounter; private int turn; + private float turnCounter; private Schematic lastLoadout; private ItemSeq lastLaunchResources = new ItemSeq(); @@ -54,17 +55,19 @@ public class Universe{ } } - /** @return sectors attacked on the current planet, minus the ones that are being played on right now. */ - public Seq getAttacked(Planet planet){ - return planet.sectors.select(s -> s.isUnderAttack() && s.hasBase() && !s.isBeingPlayed() && s.getWavesPassed() > 0); - } - /** Update planet rotations, global time and relevant state. */ public void update(){ //only update time when not in multiplayer if(!net.client()){ secondCounter += Time.delta / 60f; + turnCounter += Time.delta; + + //auto-run turns + if(turnCounter >= turnDuration){ + turnCounter = 0; + runTurn(); + } if(secondCounter >= 1){ seconds += (int)secondCounter; @@ -133,59 +136,84 @@ public class Universe{ //update relevant sectors for(Planet planet : content.planets()){ for(Sector sector : planet.sectors){ - if(sector.hasSave()){ - int spent = (int)(sector.getTimeSpent() / 60); - int actuallyPassed = Math.max(newSecondsPassed - spent, 0); + if(sector.hasSave() && sector.hasBase()){ //increment seconds passed for this sector by the time that just passed with this turn if(!sector.isBeingPlayed()){ - int secPassed = sector.getSecondsPassed() + actuallyPassed; + //increment time + sector.info.secondsPassed += turnDuration/60f; - sector.setSecondsPassed(secPassed); - - boolean attacked = sector.isUnderAttack(); - - int wavesPassed = (int)(secPassed*60f / sector.save.meta.rules.waveSpacing); - float damage = attacked ? SectorDamage.getDamage(sector.save.meta.secinfo, sector.save.meta.rules.waveSpacing, sector.save.meta.wave, wavesPassed) : 0f; + int wavesPassed = (int)(sector.info.secondsPassed*60f / sector.info.waveSpacing); + boolean attacked = sector.info.waves; if(attacked){ - sector.setWavesPassed(wavesPassed); + sector.info.wavesPassed = wavesPassed; } - sector.setDamage(damage); + float damage = attacked ? SectorDamage.getDamage(sector.info) : 0f; + + //damage never goes down until the player visits the sector, so use max + sector.info.damage = Math.max(sector.info.damage, damage); //check if the sector has been attacked too many times... if(attacked && damage >= 0.999f){ //fire event for losing the sector Events.fire(new SectorLoseEvent(sector)); - //if so, just delete the save for now. it's lost. - //TODO don't delete it later maybe - sector.setExtraItems(new ItemSeq()); - sector.setDamage(1.01f); - }else if(attacked && wavesPassed > 0 && sector.save.meta.wave + wavesPassed >= sector.save.meta.rules.winWave && !sector.hasEnemyBase()){ + //sector is dead. + sector.info.items.clear(); + sector.info.damage = 1f; + sector.info.hasCore = false; + sector.info.production.clear(); + }else if(attacked && wavesPassed > 0 && sector.info.wave + wavesPassed >= sector.info.winWave && !sector.hasEnemyBase()){ //autocapture the sector - sector.setUnderAttack(false); + sector.info.waves = false; //fire the event Events.fire(new SectorCaptureEvent(sector)); } + + float scl = sector.getProductionScale(); + + //export to another sector + if(sector.info.destination != null){ + Sector to = sector.info.destination; + if(to.hasBase()){ + ItemSeq items = new ItemSeq(); + //calculated exported items to this sector + sector.info.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed * scl))); + to.addItems(items); + } + } + + //add production, making sure that it's capped + sector.info.production.each((item, stat) -> sector.info.items.add(item, Math.min((int)(stat.mean * seconds * scl), sector.info.storageCapacity - sector.info.items.get(item)))); + + sector.saveInfo(); } - //export to another sector - if(sector.save != null && sector.save.meta != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.destination != null){ - Sector to = sector.save.meta.secinfo.destination; - if(to.save != null){ - float scl = Math.max(1f - sector.getDamage(), 0); - ItemSeq items = new ItemSeq(); - //calculated exported items to this sector - sector.save.meta.secinfo.export.each((item, stat) -> items.add(item, (int)(stat.mean * newSecondsPassed * scl))); - to.addItems(items); + //queue random invasions + if(!sector.isAttacked() && turn > invasionGracePeriod){ + //TODO use factors like difficulty for better invasion chance + if(sector.near().contains(Sector::hasEnemyBase) && Mathf.chance(baseInvasionChance)){ + int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 4) * 5; + float waveSpace = Math.max(sector.info.waveSpacing - Mathf.random(1, 4) * 5 * 60, 40 * 60); + + //assign invasion-related things + if(sector.isBeingPlayed()){ + state.rules.winWave = waveMax; + state.rules.waves = true; + state.rules.waveSpacing = waveSpace; + }else{ + sector.info.winWave = waveMax; + sector.info.waves = true; + sector.info.waveSpacing = waveSpace; + sector.saveInfo(); + } + + Events.fire(new SectorInvasionEvent(sector)); } } - - //reset time spent to 0 - sector.setTimeSpent(0f); } } } @@ -202,7 +230,7 @@ public class Universe{ for(Planet planet : content.planets()){ for(Sector sector : planet.sectors){ if(sector.hasSave()){ - count.add(sector.calculateItems()); + count.add(sector.items()); } } } diff --git a/core/src/mindustry/io/SaveMeta.java b/core/src/mindustry/io/SaveMeta.java index f2e039f634..c6133889bc 100644 --- a/core/src/mindustry/io/SaveMeta.java +++ b/core/src/mindustry/io/SaveMeta.java @@ -14,12 +14,10 @@ public class SaveMeta{ public Map map; public int wave; public Rules rules; - public SectorInfo secinfo; public StringMap tags; public String[] mods; - public boolean hasProduction; - public SaveMeta(int version, long timestamp, long timePlayed, int build, String map, int wave, Rules rules, SectorInfo secinfo, StringMap tags){ + public SaveMeta(int version, long timestamp, long timePlayed, int build, String map, int wave, Rules rules, StringMap tags){ this.version = version; this.build = build; this.timestamp = timestamp; @@ -29,8 +27,5 @@ public class SaveMeta{ this.rules = rules; this.tags = tags; this.mods = JsonIO.read(String[].class, tags.get("mods", "[]")); - this.secinfo = secinfo; - - secinfo.production.each((e, amount) -> hasProduction |= amount.mean > 0.001f); } } diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index cacac7700a..e153b74587 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -40,7 +40,6 @@ public abstract class SaveVersion extends SaveFileReader{ map.get("mapname"), map.getInt("wave"), JsonIO.read(Rules.class, map.get("rules", "{}")), - JsonIO.read(SectorInfo.class, map.get("secinfo", "{}")), map ); } @@ -74,6 +73,7 @@ public abstract class SaveVersion extends SaveFileReader{ //prepare campaign data for writing if(state.isCampaign()){ state.secinfo.prepare(); + state.rules.sector.saveInfo(); } //flush tech node progress @@ -89,7 +89,6 @@ public abstract class SaveVersion extends SaveFileReader{ "wave", state.wave, "wavetime", state.wavetime, "stats", JsonIO.write(state.stats), - "secinfo", state.isCampaign() ? JsonIO.write(state.secinfo) : "{}", "rules", JsonIO.write(state.rules), "mods", JsonIO.write(mods.getModStrings().toArray(String.class)), "width", world.width(), @@ -107,14 +106,13 @@ public abstract class SaveVersion extends SaveFileReader{ state.wave = map.getInt("wave"); state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing); state.stats = JsonIO.read(Stats.class, map.get("stats", "{}")); - state.secinfo = JsonIO.read(SectorInfo.class, map.get("secinfo", "{}")); state.rules = JsonIO.read(Rules.class, map.get("rules", "{}")); if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get(); lastReadBuild = map.getInt("build", -1); - //load time spent on sector into state + //load in sector info if(state.rules.sector != null){ - state.secinfo.internalTimeSpent = state.rules.sector.getStoredTimeSpent(); + state.secinfo = state.rules.sector.info; } if(!headless){ diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index fb7ee28e8f..1c942d1228 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -25,8 +25,11 @@ public class SectorDamage{ private static final int maxWavesSimulated = 50; /** @return calculated capture progress of the enemy */ - public static float getDamage(SectorInfo info, float waveSpace, int wave, int wavesPassed){ + public static float getDamage(SectorInfo info){ float health = info.sumHealth; + int wavesPassed = info.wavesPassed; + int wave = info.wave; + float waveSpace = info.waveSpacing; //this approach is O(n), it simulates every wave passing. //other approaches can assume all the waves come as one, but that's not as fair. @@ -76,9 +79,9 @@ public class SectorDamage{ } /** Applies wave damage based on sector parameters. */ - public static void applyCalculatedDamage(int wavesPassed){ + public static void applyCalculatedDamage(){ //calculate base damage fraction - float damage = getDamage(state.secinfo, state.rules.waveSpacing, state.wave, wavesPassed); + float damage = getDamage(state.secinfo); //scaled damage has a power component to make it seem a little more realistic (as systems fail, enemy capturing gets easier and easier) float scaled = Mathf.pow(damage, 1.5f); @@ -110,6 +113,21 @@ public class SectorDamage{ } } + if(state.secinfo.wavesPassed > 0){ + //simply remove each block in the spawner range if a wave passed + for(Tile spawner : spawner.getSpawns()){ + spawner.circle((int)(state.rules.dropZoneRadius / tilesize), tile -> { + if(tile.team() == state.rules.defaultTeam){ + if(rubble && tile.floor().hasSurface() && Mathf.chance(0.4)){ + Effect.rubble(tile.build.x, tile.build.y, tile.block().size); + } + + tile.remove(); + } + }); + } + } + //finally apply scaled damage apply(scaled); } @@ -120,6 +138,10 @@ public class SectorDamage{ Seq spawns = new Seq<>(); spawner.eachGroundSpawn((x, y) -> spawns.add(world.tile(x, y))); + if(spawns.isEmpty() && state.rules.waveTeam.core() != null){ + spawns.add(state.rules.waveTeam.core().tile); + } + if(core == null || spawns.isEmpty()) return; Tile start = spawns.first(); @@ -361,7 +383,7 @@ public class SectorDamage{ } //kill every core if damage is maximum - if(damage >= 1){ + if(fraction >= 1){ for(Building c : state.rules.defaultTeam.cores().copy()){ c.tile.remove(); } diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 6153aa4721..911939b870 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -177,7 +177,7 @@ public class Planet extends UnlockableContent{ public void updateBaseCoverage(){ for(Sector sector : sectors){ float sum = 1f; - for(Sector other : sector.inRange(2)){ + for(Sector other : sector.near()){ if(other.generateEnemyBase){ sum += 1f; } @@ -204,6 +204,10 @@ public class Planet extends UnlockableContent{ @Override public void init(){ + for(Sector sector : sectors){ + sector.loadInfo(); + } + if(generator != null){ Noise.setSeed(id + 1); diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index db3587674b..37535bffca 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -7,6 +7,7 @@ import arc.struct.*; import arc.util.*; import mindustry.*; import mindustry.game.Saves.*; +import mindustry.game.*; import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.world.modules.*; @@ -25,6 +26,7 @@ public class Sector{ public @Nullable SaveSlot save; public @Nullable SectorPreset preset; + public SectorInfo info = new SectorInfo(); /** Number 0-1 indicating the difficulty based on nearby bases. */ public float baseCoverage; @@ -38,60 +40,50 @@ public class Sector{ this.id = tile.id; } - public Seq inRange(int range){ - //TODO cleanup/remove - if(true){ - tmpSeq1.clear(); - neighbors(tmpSeq1::add); - - return tmpSeq1; - } - + public Seq near(){ tmpSeq1.clear(); - tmpSeq2.clear(); - tmpSet.clear(); + near(tmpSeq1::add); - tmpSeq1.add(this); - tmpSet.add(this); - for(int i = 0; i < range; i++){ - while(!tmpSeq1.isEmpty()){ - Sector sec = tmpSeq1.pop(); - tmpSet.add(sec); - sec.neighbors(other -> { - if(tmpSet.add(other)){ - tmpSeq2.add(other); - } - }); - } - tmpSeq1.clear(); - tmpSeq1.addAll(tmpSeq2); - } - - tmpSeq3.clear().addAll(tmpSeq2); - return tmpSeq3; + return tmpSeq1; } - public void neighbors(Cons cons){ + public void near(Cons cons){ for(Ptile tile : tile.tiles){ cons.get(planet.getSector(tile)); } } /** @return whether this sector can be landed on at all. - * Only sectors adjacent to non-wave sectors can be landed on. - * TODO also preset sectors*/ + * Only sectors adjacent to non-wave sectors can be landed on. */ public boolean unlocked(){ return hasBase() || (preset != null && preset.alwaysUnlocked); } + public void saveInfo(){ + Core.settings.putJson(planet.name + "-s-" + id + "-info", info); + } + + public void loadInfo(){ + info = Core.settings.getJson(planet.name + "-s-" + id + "-info", SectorInfo.class, SectorInfo::new); + } + + public float getProductionScale(){ + return Math.max(1f - info.damage, 0); + } + + public boolean isAttacked(){ + if(isBeingPlayed()) return state.rules.waves; + return save != null && info.waves && info.hasCore; + } + /** @return whether the player has a base here. */ public boolean hasBase(){ - return save != null && !save.meta.tags.getBool("nocores") && getDamage() < 1f; + return save != null && info.hasCore; } /** @return whether the enemy has a generated base here. */ public boolean hasEnemyBase(){ - return generateEnemyBase && (save == null || save.meta.rules.waves); + return generateEnemyBase && (save == null || info.waves); } public boolean isBeingPlayed(){ @@ -99,26 +91,18 @@ public class Sector{ return Vars.state.isGame() && Vars.state.rules.sector == this && !Vars.state.gameOver; } + public String name(){ + if(preset != null) return preset.localizedName; + return info.name == null ? id + "" : info.name; + } + + public void setName(String name){ + info.name = name; + saveInfo(); + } + public boolean isCaptured(){ - return save != null && !save.meta.rules.waves; - } - - /** @return whether waves are present - if true, any bases here will be attacked. - * only applicable to sectors with active player bases. */ - public boolean isUnderAttack(){ - return hasBase() && Core.settings.getBool(key("under-attack"), true); - } - - public void setUnderAttack(boolean underAttack){ - Core.settings.put(key("under-attack"), underAttack); - } - - public void setWavesPassed(int waves){ - put("waves-passed", waves); - } - - public int getWavesPassed(){ - return Core.settings.getInt(key("waves-passed"), 0); + return save != null && !info.waves; } public boolean hasSave(){ @@ -143,15 +127,6 @@ public class Sector{ return res % 2 == 0 ? res : res + 1; } - //TODO this should be stored in a more efficient structure, and be updated each turn - public ItemSeq getExtraItems(){ - return Core.settings.getJson(key("extra-items"), ItemSeq.class, ItemSeq::new); - } - - public void setExtraItems(ItemSeq stacks){ - Core.settings.putJson(key("extra-items"), stacks); - } - public void addItem(Item item, int amount){ removeItem(item, -amount); } @@ -169,151 +144,27 @@ public class Sector{ int cap = state.rules.defaultTeam.core().storageCapacity; items.each((item, amount) -> storage.add(item, Math.min(cap - storage.get(item), amount))); } - }else{ - ItemSeq recv = getExtraItems(); - - if(save != null){ - //"shave off" extra items - - ItemSeq count = new ItemSeq(); - - //add items already present - count.add(save.meta.secinfo.coreItems); - - count.add(calculateReceivedItems()); - - int capacity = save.meta.secinfo.storageCapacity; - - //when over capacity, add that to the extra items - count.each((i, a) -> { - if(a > capacity){ - recv.remove(i, (a - capacity)); - } - }); - } - - recv.add(items); - - setExtraItems(recv); + }else if(hasBase()){ + items.each((item, amount) -> info.items.add(item, Math.min(info.storageCapacity - info.items.get(item), amount))); + saveInfo(); } } - public ItemSeq calculateItems(){ + /** @return items currently in this sector, taking into account playing state. */ + public ItemSeq items(){ ItemSeq count = new ItemSeq(); //for sectors being played on, add items directly if(isBeingPlayed()){ count.add(state.rules.defaultTeam.items()); - }else if(save != null){ + }else{ //add items already present - count.add(save.meta.secinfo.coreItems); - - count.add(calculateReceivedItems()); - - int capacity = save.meta.secinfo.storageCapacity; - - //validation - count.each((item, amount) -> { - //ensure positive items - if(amount < 0) count.set(item, 0); - //cap the items - if(amount > capacity) count.set(item, capacity); - }); + count.add(info.items); } return count; } - public ItemSeq calculateReceivedItems(){ - ItemSeq count = new ItemSeq(); - - if(save != null){ - long seconds = getSecondsPassed(); - float scl = Math.max(1f - getDamage(), 0); - - //add produced items - save.meta.secinfo.production.each((item, stat) -> count.add(item, (int)(stat.mean * seconds * scl))); - - //add received items - count.add(getExtraItems()); - } - - return count; - } - - //TODO these methods should maybe move somewhere else and/or be contained in a data object - public void setSpawnPosition(int position){ - put("spawn-position", position); - } - - /** Only valid after this sector has been landed on once. */ - //TODO move to sector data? - public int getSpawnPosition(){ - return Core.settings.getInt(key("spawn-position"), Point2.pack(world.width() / 2, world.height() / 2)); - } - - /** @return sector damage from enemy, 0 to 1 */ - public float getDamage(){ - //dead sector - if(save != null & save.meta.tags.getBool("nocores")) return 1.01f; - return Core.settings.getFloat(key("damage"), 0f); - } - - public void setDamage(float damage){ - put("damage", damage); - } - - /** @return time spent in this sector this turn in ticks. */ - public float getTimeSpent(){ - //return currently counting time spent if being played on - if(isBeingPlayed()) return state.secinfo.internalTimeSpent; - - //else return the stored value - return getStoredTimeSpent(); - } - - public void setTimeSpent(float time){ - put("time-spent", time); - - //update counting time - if(isBeingPlayed()){ - state.secinfo.internalTimeSpent = time; - } - } - - public String displayTimeRemaining(){ - float amount = Vars.turnDuration - getTimeSpent(); - int seconds = (int)(amount / 60); - int sf = seconds % 60; - return (seconds / 60) + ":" + (sf < 10 ? "0" : "") + sf; - } - - /** @return the stored amount of time spent in this sector this turn in ticks. - * Do not use unless you know what you're doing. */ - public float getStoredTimeSpent(){ - return Core.settings.getFloat(key("time-spent")); - } - - public void setSecondsPassed(int number){ - put("secondsi-passed", number); - } - - /** @return how much time has passed in this sector without the player resuming here. - * Used for resource production calculations. */ - public int getSecondsPassed(){ - return Core.settings.getInt(key("secondsi-passed")); - } - - //TODO this is terrible - private String key(String key){ - return planet.name + "-s-" + id + "-" + key; - } - - //TODO this is terrible - private void put(String key, Object value){ - Core.settings.put(key(key), value); - } - public String toString(){ return planet.name + "#" + id; } diff --git a/core/src/mindustry/ui/IntFormat.java b/core/src/mindustry/ui/IntFormat.java index 2ca0e9de1f..fab10cd67f 100644 --- a/core/src/mindustry/ui/IntFormat.java +++ b/core/src/mindustry/ui/IntFormat.java @@ -10,7 +10,7 @@ import arc.func.*; public class IntFormat{ private final StringBuilder builder = new StringBuilder(); private final String text; - private int lastValue = Integer.MIN_VALUE; + private int lastValue = Integer.MIN_VALUE, lastValue2 = Integer.MIN_VALUE; private Func converter = String::valueOf; public IntFormat(String text){ @@ -30,4 +30,14 @@ public class IntFormat{ lastValue = value; return builder; } + + public CharSequence get(int value1, int value2){ + if(lastValue != value1 || lastValue2 != value2){ + builder.setLength(0); + builder.append(Core.bundle.format(text, value1, value2)); + } + lastValue = value1; + lastValue2 = value2; + return builder; + } } diff --git a/core/src/mindustry/ui/Styles.java b/core/src/mindustry/ui/Styles.java index 13e97202e5..802a18004b 100644 --- a/core/src/mindustry/ui/Styles.java +++ b/core/src/mindustry/ui/Styles.java @@ -23,6 +23,7 @@ import static mindustry.gen.Tex.*; @StyleDefaults public class Styles{ + //TODO all these names are inconsistent and not descriptive public static Drawable black, black9, black8, black6, black3, black5, none, flatDown, flatOver; public static ButtonStyle defaultb, waveb; public static TextButtonStyle defaultt, squaret, nodet, cleart, discordt, infot, clearPartialt, clearTogglet, clearToggleMenut, togglet, transt, fullTogglet, logict; diff --git a/core/src/mindustry/ui/dialogs/PausedDialog.java b/core/src/mindustry/ui/dialogs/PausedDialog.java index f06c09ce30..5bd1e5abd3 100644 --- a/core/src/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/mindustry/ui/dialogs/PausedDialog.java @@ -34,13 +34,6 @@ public class PausedDialog extends BaseDialog{ }); if(!mobile){ - //TODO localize + move to other wave menu - cont.label(() -> state.getSector() == null || state.rules.winWave <= 0 || state.getSector().isCaptured() ? "" : - (state.rules.winWave > 0 && !state.getSector().isCaptured() ? - (state.wave >= state.rules.winWave ? "\n[lightgray]Defeat remaining enemies to capture" : "\n[lightgray]Reach wave[accent] " + state.rules.winWave + "[] to capture") : "")) - .visible(() -> state.getSector() != null).colspan(2); - cont.row(); - float dw = 220f; cont.defaults().width(dw).height(55).pad(5f); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 44ef8eb17a..9ad8c87831 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -217,9 +217,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public void renderProjections(){ if(hovered != null){ planets.drawPlane(hovered, () -> { - Draw.color(hovered.isUnderAttack() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f)); + Draw.color(hovered.isAttacked() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f)); - TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : hovered.isUnderAttack() ? Icon.warning.getRegion() : null; + TextureRegion icon = hovered.locked() && !canSelect(hovered) ? Icon.lock.getRegion() : hovered.isAttacked() ? Icon.warning.getRegion() : null; if(icon != null){ Draw.rect(icon, 0, 0); @@ -352,69 +352,80 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.clear(); stable.background(Styles.black6); - stable.add("[accent]" + (sector.preset == null ? sector.id : sector.preset.localizedName)).row(); + stable.table(title -> { + title.add("[accent]" + sector.name()); + if(sector.preset == null){ + title.button(Icon.pencilSmall, Styles.clearPartiali, () -> { + ui.showTextInput("@sectors.rename", "@name", 20, sector.name(), v -> { + sector.setName(v); + updateSelected(); + }); + }).size(40f).padLeft(4); + } + }).row(); + stable.image().color(Pal.accent).fillX().height(3f).pad(3f).row(); stable.add(sector.save != null ? sector.save.getPlayTime() : "@sectors.unexplored").row(); - if(sector.isUnderAttack() || sector.hasEnemyBase()){ + + if(sector.isAttacked() || sector.hasEnemyBase()){ stable.add("[accent]Difficulty: " + (int)(sector.baseCoverage * 10)).row(); } - if(sector.isUnderAttack()){ + if(sector.isAttacked()){ //TODO localize when finalized //these mechanics are likely to change and as such are not added to the bundle stable.add("[scarlet]Under attack!"); stable.row(); - stable.add("[accent]" + (int)(sector.getDamage() * 100) + "% damaged"); + stable.add("[accent]" + (int)(sector.info.damage * 100) + "% damaged"); stable.row(); } if(sector.save != null){ stable.add("@sectors.resources").row(); stable.table(t -> { - - if(sector.save != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.resources.any()){ + if(sector.info.resources.any()){ t.left(); int idx = 0; int max = 5; - for(UnlockableContent c : sector.save.meta.secinfo.resources){ + for(UnlockableContent c : sector.info.resources){ t.image(c.icon(Cicon.small)).padRight(3); if(++idx % max == 0) t.row(); } }else{ t.add("@unknown").color(Color.lightGray); } - - }).fillX().row(); } //production - if(sector.hasBase() && sector.save.meta.hasProduction){ - stable.add("@sectors.production").row(); - stable.table(t -> { - t.left(); + if(sector.hasBase()){ + Table t = new Table().left(); - float scl = Math.max(1f - sector.getDamage(), 0); + float scl = sector.getProductionScale(); - sector.save.meta.secinfo.production.each((item, stat) -> { - int total = (int)(stat.mean * 60 * scl); - if(total > 1){ - t.image(item.icon(Cicon.small)).padRight(3); - t.add(UI.formatAmount(total) + " " + Core.bundle.get("unit.perminute")).color(Color.lightGray); - t.row(); - } - }); - }).row(); + sector.info.production.each((item, stat) -> { + int total = (int)(stat.mean * 60 * scl); + if(total > 1){ + t.image(item.icon(Cicon.small)).padRight(3); + t.add(UI.formatAmount(total) + " " + Core.bundle.get("unit.perminute")).color(Color.lightGray); + t.row(); + } + }); + + if(t.getChildren().any()){ + stable.add("@sectors.production").row(); + stable.add(t); + } } //stored resources - if(sector.hasBase() && sector.save.meta.secinfo.coreItems.total > 0){ + if(sector.hasBase() && sector.info.items.total > 0){ stable.add("@sectors.stored").row(); stable.table(t -> { t.left(); t.table(res -> { - ItemSeq items = sector.calculateItems(); + ItemSeq items = sector.items(); int i = 0; for(ItemStack stack : items){ diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index bb6841dcbb..b79aacbce5 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -60,7 +60,7 @@ public class ResearchDialog extends BaseDialog{ for(Planet planet : content.planets()){ for(Sector sector : planet.sectors){ if(sector.hasSave()){ - ItemSeq cached = sector.calculateItems(); + ItemSeq cached = sector.items(); add(cached); cache.put(sector, cached); } diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index d37095be54..327e65cd13 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -71,12 +71,17 @@ public class HudFragment extends Fragment{ //TODO details and stuff Events.on(SectorCaptureEvent.class, e ->{ //TODO localize - showToast("Sector [accent]" + (e.sector.isBeingPlayed() ? "" : e.sector.id + " ") + "[]captured!"); + showToast("Sector [accent]" + (e.sector.isBeingPlayed() ? "" : e.sector.name() + " ") + "[white]captured!"); }); //TODO localize Events.on(SectorLoseEvent.class, e -> { - showToast(Icon.warning, "Sector " + e.sector.id + " [scarlet]lost!"); + showToast(Icon.warning, "Sector [accent]" + e.sector.name() + "[white] lost!"); + }); + + //TODO localize + Events.on(SectorInvasionEvent.class, e -> { + showToast(Icon.warning, "Sector [accent]" + e.sector.name() + "[white] under attack!"); }); Events.on(ResetEvent.class, e -> { @@ -589,6 +594,7 @@ public class HudFragment extends Fragment{ StringBuilder ibuild = new StringBuilder(); IntFormat wavef = new IntFormat("wave"); + IntFormat wavefc = new IntFormat("wave.cap"); IntFormat enemyf = new IntFormat("wave.enemy"); IntFormat enemiesf = new IntFormat("wave.enemies"); IntFormat waitingf = new IntFormat("wave.waiting", i -> { @@ -714,7 +720,11 @@ public class HudFragment extends Fragment{ table.labelWrap(() -> { builder.setLength(0); - builder.append(wavef.get(state.wave)); + if(state.rules.winWave > 1 && state.rules.winWave >= state.wave && state.isCampaign()){ + builder.append(wavefc.get(state.wave, state.rules.winWave)); + }else{ + builder.append(wavef.get(state.wave)); + } builder.append("\n"); if(state.enemies > 0){ @@ -727,7 +737,7 @@ public class HudFragment extends Fragment{ } if(state.rules.waveTimer){ - builder.append((logic.isWaitingWave() ? Core.bundle.get("wave.waveInProgress") : ( waitingf.get((int)(state.wavetime/60))))); + builder.append((logic.isWaitingWave() ? Core.bundle.get("wave.waveInProgress") : (waitingf.get((int)(state.wavetime/60))))); }else if(state.enemies == 0){ builder.append(Core.bundle.get("waiting")); } diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 7478f81db4..8fdfd6c009 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -267,6 +267,10 @@ public class Tile implements Position, QuadTreeObject, Displayable{ Geometry.circle(x, y, world.width(), world.height(), radius, cons); } + public void circle(int radius, Cons cons){ + circle(radius, (x, y) -> cons.get(world.rawTile(x, y))); + } + public void recache(){ if(!headless && !world.isGenerating()){ renderer.blocks.floor.recacheTile(this); @@ -332,6 +336,11 @@ public class Tile implements Position, QuadTreeObject, Displayable{ recache(); } + /** Sets the overlay without a recache. */ + public void setOverlayQuiet(Block block){ + this.overlay = (Floor)block; + } + public void clearOverlay(){ setOverlayID((short)0); } diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 093fff4f70..dd1cc69007 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -121,9 +121,7 @@ public class LaunchPad extends Block{ return Core.bundle.format("launch.destination", dest == null ? Core.bundle.get("sectors.nonelaunch") : - dest.preset == null ? - "[accent]Sector " + dest.id : - "[accent]" + dest.preset.localizedName); + "[accent]" + dest.name()); }).pad(4); } @@ -213,7 +211,7 @@ public class LaunchPad extends Block{ //actually launch the items upon removal if(team() == state.rules.defaultTeam){ if(destsec != null && (destsec != state.rules.sector || net.client())){ - ItemSeq dest = destsec.getExtraItems(); + ItemSeq dest = new ItemSeq(); for(ItemStack stack : stacks){ dest.add(stack); @@ -223,7 +221,7 @@ public class LaunchPad extends Block{ Events.fire(new LaunchItemEvent(stack)); } - destsec.setExtraItems(dest); + destsec.addItems(dest); } } } diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index 457e7e65e7..60ab45f159 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -156,7 +156,7 @@ public class Conveyor extends Block implements Autotiler{ lastInserted = build.lastInserted; mid = build.mid; minitem = build.minitem; - items.addAll(build.items); + items.add(build.items); } } diff --git a/core/src/mindustry/world/blocks/distribution/StackConveyor.java b/core/src/mindustry/world/blocks/distribution/StackConveyor.java index e7095a686c..3327c62c15 100644 --- a/core/src/mindustry/world/blocks/distribution/StackConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/StackConveyor.java @@ -203,7 +203,7 @@ public class StackConveyor extends Block implements Autotiler{ if(front() instanceof StackConveyorBuild e && e.team == team){ // sleep if its occupied if(e.link == -1){ - e.items.addAll(items); + e.items.add(items); e.lastItem = lastItem; e.link = tile.pos(); // ▲ to | from ▼ diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index 50eb65a270..a8a5578d95 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -70,7 +70,7 @@ public class StorageBlock extends Block{ public void overwrote(Seq previous){ for(Building other : previous){ if(other.items != null){ - items.addAll(other.items); + items.add(other.items); } } diff --git a/core/src/mindustry/world/modules/ItemModule.java b/core/src/mindustry/world/modules/ItemModule.java index 16d49484f0..6cd96985cb 100644 --- a/core/src/mindustry/world/modules/ItemModule.java +++ b/core/src/mindustry/world/modules/ItemModule.java @@ -243,6 +243,16 @@ public class ItemModule extends BlockModule{ } } + public void add(ItemSeq stacks){ + stacks.each(this::add); + } + + public void add(ItemModule items){ + for(int i = 0; i < items.items.length; i++){ + add(i, items.items[i]); + } + } + public void add(Item item, int amount){ add(item.id, amount); } @@ -261,12 +271,6 @@ public class ItemModule extends BlockModule{ } } - public void addAll(ItemModule items){ - for(int i = 0; i < items.items.length; i++){ - add(i, items.items[i]); - } - } - public void remove(Item item, int amount){ amount = Math.min(amount, items[item.id]); diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index d8f67eee8c..645b2ea7f0 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -153,9 +153,9 @@ public class Generators{ ImagePacker.generate("cracks", () -> { RidgedPerlin r = new RidgedPerlin(1, 3); - for(int size = 1; size <= Block.maxCrackSize; size++){ + for(int size = 1; size <= BlockRenderer.maxCrackSize; size++){ int dim = size * 32; - int steps = Block.crackRegions; + int steps = BlockRenderer.crackRegions; for(int i = 0; i < steps; i++){ float fract = i / (float)steps; From f5decdaa1c3da58c095b50c3dce5c8a516226043 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 11:27:17 -0400 Subject: [PATCH 023/124] Disabled spawner radius/warning when waves off --- core/src/mindustry/ai/WaveSpawner.java | 2 +- core/src/mindustry/entities/comp/UnitComp.java | 2 +- core/src/mindustry/graphics/OverlayRenderer.java | 10 ++++++---- .../mindustry/world/blocks/storage/CoreBlock.java | 15 +++++++++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 9a1ffb9d1d..99b52d40e5 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -48,7 +48,7 @@ public class WaveSpawner{ /** @return true if the player is near a ground spawn point. */ public boolean playerNear(){ - return !player.dead() && spawns.contains(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < state.rules.dropZoneRadius && player.team() != state.rules.waveTeam); + return state.rules.waves && !player.dead() && spawns.contains(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < state.rules.dropZoneRadius && player.team() != state.rules.waveTeam); } public void spawnEnemies(){ diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 605e2d1d1e..72a8d115f0 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -286,7 +286,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I drag = type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f); //apply knockback based on spawns - if(team != state.rules.waveTeam){ + if(team != state.rules.waveTeam && state.rules.waves){ float relativeSize = state.rules.dropZoneRadius + hitSize/2f + 1f; for(Tile spawn : spawner.getSpawns()){ if(within(spawn.worldx(), spawn.worldy(), relativeSize)){ diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index 19569ed1a3..c7c0c697c3 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -121,10 +121,12 @@ public class OverlayRenderer{ Lines.stroke(2f); Draw.color(Color.gray, Color.lightGray, Mathf.absin(Time.time(), 8f, 1f)); - for(Tile tile : spawner.getSpawns()){ - if(tile.within(player.x, player.y, state.rules.dropZoneRadius + spawnerMargin)){ - Draw.alpha(Mathf.clamp(1f - (player.dst(tile) - state.rules.dropZoneRadius) / spawnerMargin)); - Lines.dashCircle(tile.worldx(), tile.worldy(), state.rules.dropZoneRadius); + if(state.rules.waves){ + for(Tile tile : spawner.getSpawns()){ + if(tile.within(player.x, player.y, state.rules.dropZoneRadius + spawnerMargin)){ + Draw.alpha(Mathf.clamp(1f - (player.dst(tile) - state.rules.dropZoneRadius) / spawnerMargin)); + Lines.dashCircle(tile.worldx(), tile.worldy(), state.rules.dropZoneRadius); + } } } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index e0aae707fa..99ae254e8b 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -196,6 +196,21 @@ public class CoreBlock extends StorageBlock{ return false; } + @Override + public void onDestroyed(){ + super.onDestroyed(); + + //add a spawn to the map for future reference - waves should be disabled, so it shouldn't matter + if(state.isCampaign() && team == state.rules.waveTeam){ + //do not recache + tile.setOverlayQuiet(Blocks.spawn); + + if(!spawner.getSpawns().contains(tile)){ + spawner.getSpawns().add(tile); + } + } + } + @Override public void drawLight(){ Drawf.light(team, x, y, 30f * size, Pal.accent, 0.5f + Mathf.absin(20f, 0.1f)); From 83756a6ea009b8d4ed35352ee926437e5d0330af Mon Sep 17 00:00:00 2001 From: abomb4 Date: Sat, 17 Oct 2020 00:05:19 +0800 Subject: [PATCH 024/124] New feature: bullet homing delay --- core/src/mindustry/entities/bullet/BulletType.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index aafbb42504..8e06cf466e 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -104,6 +104,8 @@ public abstract class BulletType extends Content{ public float incendChance = 1f; public float homingPower = 0f; public float homingRange = 50f; + /** Use a negative value to disable homing delay. */ + public float homingDelay = -1f; public Color lightningColor = Pal.surge; public int lightning; @@ -260,7 +262,7 @@ public abstract class BulletType extends Content{ } public void update(Bullet b){ - if(homingPower > 0.0001f){ + if(homingPower > 0.0001f && b.time >= homingDelay){ Teamc target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround); if(target != null){ b.vel.setAngle(Mathf.slerpDelta(b.rotation(), b.angleTo(target), homingPower)); From f391e7a5ac04ee9731b134e02f31eb26b553e04f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 12:16:00 -0400 Subject: [PATCH 025/124] Sector production bugfixes --- core/src/mindustry/content/SectorPresets.java | 14 ++++++------- core/src/mindustry/game/Universe.java | 5 +---- .../mindustry/ui/dialogs/PlanetDialog.java | 20 ++++++++----------- .../world/blocks/storage/CoreBlock.java | 1 + 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index ff1f36bc22..e516bab740 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -18,7 +18,7 @@ public class SectorPresets implements ContentList{ groundZero = new SectorPreset("groundZero", serpulo, 15){{ alwaysUnlocked = true; captureWave = 10; - difficulty = 0; + difficulty = 1; }}; saltFlats = new SectorPreset("saltFlats", serpulo, 101){{ @@ -26,23 +26,23 @@ public class SectorPresets implements ContentList{ }}; frozenForest = new SectorPreset("frozenForest", serpulo, 86){{ - captureWave = 40; - difficulty = 1; + captureWave = 20; + difficulty = 2; }}; craters = new SectorPreset("craters", serpulo, 18){{ - captureWave = 40; + captureWave = 20; difficulty = 2; }}; ruinousShores = new SectorPreset("ruinousShores", serpulo, 19){{ - captureWave = 40; + captureWave = 30; difficulty = 3; }}; stainedMountains = new SectorPreset("stainedMountains", serpulo, 20){{ captureWave = 30; - difficulty = 2; + difficulty = 3; }}; fungalPass = new SectorPreset("fungalPass", serpulo, 21){{ @@ -54,7 +54,7 @@ public class SectorPresets implements ContentList{ }}; tarFields = new SectorPreset("tarFields", serpulo, 23){{ - captureWave = 40; + captureWave = 50; difficulty = 5; }}; diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 37a22d4209..5577d3da2f 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -196,18 +196,15 @@ public class Universe{ if(!sector.isAttacked() && turn > invasionGracePeriod){ //TODO use factors like difficulty for better invasion chance if(sector.near().contains(Sector::hasEnemyBase) && Mathf.chance(baseInvasionChance)){ - int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 4) * 5; - float waveSpace = Math.max(sector.info.waveSpacing - Mathf.random(1, 4) * 5 * 60, 40 * 60); + int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 5) * 5; //assign invasion-related things if(sector.isBeingPlayed()){ state.rules.winWave = waveMax; state.rules.waves = true; - state.rules.waveSpacing = waveSpace; }else{ sector.info.winWave = waveMax; sector.info.waves = true; - sector.info.waveSpacing = waveSpace; sector.saveInfo(); } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 9ad8c87831..2d32588faa 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -380,19 +380,15 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ stable.row(); } - if(sector.save != null){ + if(sector.save != null && sector.info.resources.any()){ stable.add("@sectors.resources").row(); stable.table(t -> { - if(sector.info.resources.any()){ - t.left(); - int idx = 0; - int max = 5; - for(UnlockableContent c : sector.info.resources){ - t.image(c.icon(Cicon.small)).padRight(3); - if(++idx % max == 0) t.row(); - } - }else{ - t.add("@unknown").color(Color.lightGray); + t.left(); + int idx = 0; + int max = 5; + for(UnlockableContent c : sector.info.resources){ + t.image(c.icon(Cicon.small)).padRight(3); + if(++idx % max == 0) t.row(); } }).fillX().row(); } @@ -414,7 +410,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ if(t.getChildren().any()){ stable.add("@sectors.production").row(); - stable.add(t); + stable.add(t).row(); } } diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index 99ae254e8b..b8c240e95d 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -342,6 +342,7 @@ public class CoreBlock extends StorageBlock{ @Override public void handleItem(Building source, Item item){ if(net.server() || !net.active()){ + state.secinfo.handleCoreItem(item, 1); if(items.get(item) >= getMaximumAccepted(item)){ //create item incineration effect at random intervals From b0ea725142240a51ca87c8e1e2fd521fd1db2004 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 12:56:48 -0400 Subject: [PATCH 026/124] Sector tweaks --- core/src/mindustry/core/Control.java | 11 +++++++++++ core/src/mindustry/game/Universe.java | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index f6ae999945..1d5e2de6fc 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -283,6 +283,17 @@ public class Control implements ApplicationListener, Loadable{ //if there is no base, simulate a new game and place the right loadout at the spawn position if(state.rules.defaultTeam.cores().isEmpty()){ + + //no spawn set -> delete the sector save + if(sector.info.spawnPosition == 0){ + //delete old save + sector.save = null; + slot.delete(); + //play again + playSector(origin, sector); + return; + } + //reset wave so things are more fair state.wave = 1; diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 5577d3da2f..5827f61168 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -165,7 +165,7 @@ public class Universe{ sector.info.damage = 1f; sector.info.hasCore = false; sector.info.production.clear(); - }else if(attacked && wavesPassed > 0 && sector.info.wave + wavesPassed >= sector.info.winWave && !sector.hasEnemyBase()){ + }else if(attacked && wavesPassed > 0 && sector.info.winWave > 1 && sector.info.wave + wavesPassed >= sector.info.winWave && !sector.hasEnemyBase()){ //autocapture the sector sector.info.waves = false; From 1fbced0433effb5edabc3555b2fe862ace3a0d9c Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 14:09:29 -0400 Subject: [PATCH 027/124] Corrected loadout placement function --- core/src/mindustry/core/Control.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 1d5e2de6fc..0b789d14fd 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -301,7 +301,7 @@ public class Control implements ApplicationListener, Loadable{ Groups.unit.clear(); Tile spawn = world.tile(sector.info.spawnPosition); - Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); + Schematics.placeLaunchLoadout(spawn.x, spawn.y); //set up camera/player locations player.set(spawn.x * tilesize, spawn.y * tilesize); From bddcdc0aa2f919237ed9b86b431283f070cad413 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 19:57:13 +0100 Subject: [PATCH 028/124] make planet stuff public, constructor protected --- .../mindustry/graphics/g3d/PlanetGrid.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index e4972e3eb7..3f5ee0630a 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -22,15 +22,16 @@ public class PlanetGrid{ {5, 3, 10, 1, 4}, {2, 5, 4, 0, 11}, {3, 7, 6, 1, 8}, {7, 2, 9, 0, 6} }; - public final int size; - public final Ptile[] tiles; - public final Corner[] corners; - public final Edge[] edges; + public int size; + public Ptile[] tiles; + public Corner[] corners; + public Edge[] edges; - PlanetGrid(int size){ + //this is protected so if you want to make strange grids you should know what you're doing. + protected PlanetGrid(int size){ this.size = size; - tiles = new Ptile[Buildingount(size)]; + tiles = new Ptile[tileCount(size)]; for(int i = 0; i < tiles.length; i++){ tiles[i] = new Ptile(i, i < 12 ? 5 : 6); } @@ -67,7 +68,7 @@ public class PlanetGrid{ return result; } - static PlanetGrid initialGrid(){ + public static PlanetGrid initialGrid(){ PlanetGrid grid = new PlanetGrid(0); for(Ptile t : grid.tiles){ @@ -111,7 +112,7 @@ public class PlanetGrid{ return grid; } - static PlanetGrid subdividedGrid(PlanetGrid prev){ + public static PlanetGrid subdividedGrid(PlanetGrid prev){ PlanetGrid grid = new PlanetGrid(prev.size + 1); int prevTiles = prev.tiles.length; @@ -162,7 +163,7 @@ public class PlanetGrid{ return grid; } - static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ + public static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ Corner c = grid.corners[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2], grid.tiles[t3]}; c.v.set(t[0].v).add(t[1].v).add(t[2].v).nor(); @@ -172,7 +173,7 @@ public class PlanetGrid{ } } - static void addEdge(int id, PlanetGrid grid, int t1, int t2){ + public static void addEdge(int id, PlanetGrid grid, int t1, int t2){ Edge e = grid.edges[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2]}; Corner[] c = { @@ -186,36 +187,36 @@ public class PlanetGrid{ } } - static int pos(Ptile t, Ptile n){ + public static int pos(Ptile t, Ptile n){ for(int i = 0; i < t.edgeCount; i++) if(t.tiles[i] == n) return i; return -1; } - static int pos(Ptile t, Corner c){ + public static int pos(Ptile t, Corner c){ for(int i = 0; i < t.edgeCount; i++) if(t.corners[i] == c) return i; return -1; } - static int pos(Corner c, Corner n){ + public static int pos(Corner c, Corner n){ for(int i = 0; i < 3; i++) if(c.corners[i] == n) return i; return -1; } - static int Buildingount(int size){ + public static int tileCount(int size){ return 10 * Mathf.pow(3, size) + 2; } - static int cornerCount(int size){ + public static int cornerCount(int size){ return 20 * Mathf.pow(3, size); } - static int edgeCount(int size){ + public static int edgeCount(int size){ return 30 * Mathf.pow(3, size); } From e00daffe6db59dc71c9bdd54f6d1387074432836 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 15:27:30 -0400 Subject: [PATCH 029/124] Bugfixes --- core/assets/bundles/bundle.properties | 1 - core/src/mindustry/Vars.java | 2 +- core/src/mindustry/core/Logic.java | 29 +---------------- .../src/mindustry/editor/MapEditorDialog.java | 11 ++++--- .../entities/bullet/LaserBulletType.java | 5 +++ .../entities/bullet/LiquidBulletType.java | 2 ++ .../mindustry/entities/comp/BuildingComp.java | 32 +++++++++++++++++++ core/src/mindustry/game/SectorInfo.java | 2 +- core/src/mindustry/game/Universe.java | 4 +-- core/src/mindustry/maps/SectorDamage.java | 8 +++-- .../ui/dialogs/SettingsMenuDialog.java | 3 -- .../ui/fragments/PlacementFragment.java | 2 +- .../world/blocks/storage/CoreBlock.java | 6 ++-- .../world/blocks/storage/StorageBlock.java | 4 ++- 14 files changed, 63 insertions(+), 48 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index aa515bfc6f..78c3259e9b 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -730,7 +730,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required) setting.fps.name = Show FPS & Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index d88b6584f7..3c8b57e7c5 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -87,7 +87,7 @@ public class Vars implements Loadable{ /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ - public static final float baseInvasionChance = 1f / 15f; + public static final float baseInvasionChance = 1f / 25f; /** how many turns have to pass before invasions start */ public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 00787d9e43..88aeeabed9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -14,8 +14,6 @@ import mindustry.maps.*; import mindustry.type.*; import mindustry.type.Weather.*; import mindustry.world.*; -import mindustry.world.blocks.*; -import mindustry.world.blocks.ConstructBlock.*; import java.util.*; @@ -40,32 +38,7 @@ public class Logic implements ApplicationListener{ //skip null entities or un-rebuildables, for obvious reasons; also skip client since they can't modify these requests if(tile.build == null || !tile.block().rebuildable || net.client()) return; - if(block instanceof ConstructBlock){ - - ConstructBuild entity = tile.bc(); - - //update block to reflect the fact that something was being constructed - if(entity.cblock != null && entity.cblock.synthetic()){ - block = entity.cblock; - }else{ - //otherwise this was a deconstruction that was interrupted, don't want to rebuild that - return; - } - } - - TeamData data = state.teams.get(tile.team()); - - //remove existing blocks that have been placed here. - //painful O(n) iteration + copy - for(int i = 0; i < data.blocks.size; i++){ - BlockPlan b = data.blocks.get(i); - if(b.x == tile.x && b.y == tile.y){ - data.blocks.removeIndex(i); - break; - } - } - - data.blocks.addFirst(new BlockPlan(tile.x, tile.y, (short)tile.build.rotation, block.id, tile.build.config())); + tile.build.addPlan(true); }); Events.on(BlockBuildEndEvent.class, event -> { diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 4f7eb008fd..dda95c6ed2 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -385,7 +385,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ } public void build(){ - float size = 60f; + float size = 58f; clearChildren(); table(cont -> { @@ -559,10 +559,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ mid.row(); - mid.table(t -> { - t.button("@editor.center", Icon.move, Styles.cleart, () -> view.center()).growX().margin(9f); - }).growX().top(); - + if(!mobile){ + mid.table(t -> { + t.button("@editor.center", Icon.move, Styles.cleart, () -> view.center()).growX().margin(9f); + }).growX().top(); + } }).margin(0).left().growY(); diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index ad5965f3b8..6d43baf95c 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -39,6 +39,11 @@ public class LaserBulletType extends BulletType{ this(1f); } + @Override + public float estimateDPS(){ + return super.estimateDPS() * 2f; + } + @Override public void init(){ super.init(); diff --git a/core/src/mindustry/entities/bullet/LiquidBulletType.java b/core/src/mindustry/entities/bullet/LiquidBulletType.java index 2d3de79977..5da33f95e0 100644 --- a/core/src/mindustry/entities/bullet/LiquidBulletType.java +++ b/core/src/mindustry/entities/bullet/LiquidBulletType.java @@ -22,6 +22,8 @@ public class LiquidBulletType extends BulletType{ if(liquid != null){ this.liquid = liquid; this.status = liquid.effect; + lightColor = liquid.lightColor; + lightOpacity = liquid.lightColor.a; } ammoMultiplier = 1f; diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index a3514cf76a..7e8bb19a1e 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -21,12 +21,14 @@ import mindustry.ctype.*; import mindustry.entities.*; import mindustry.game.EventType.*; import mindustry.game.*; +import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.blocks.ConstructBlock.*; import mindustry.world.blocks.environment.*; import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.power.*; @@ -191,6 +193,36 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, //endregion //region utility methods + public void addPlan(boolean checkPrevious){ + if(!block.rebuildable) return; + + if(self() instanceof ConstructBuild entity){ + //update block to reflect the fact that something was being constructed + if(entity.cblock != null && entity.cblock.synthetic()){ + block = entity.cblock; + }else{ + //otherwise this was a deconstruction that was interrupted, don't want to rebuild that + return; + } + } + + TeamData data = state.teams.get(team); + + if(checkPrevious){ + //remove existing blocks that have been placed here. + //painful O(n) iteration + copy + for(int i = 0; i < data.blocks.size; i++){ + BlockPlan b = data.blocks.get(i); + if(b.x == tile.x && b.y == tile.y){ + data.blocks.removeIndex(i); + break; + } + } + } + + data.blocks.addFirst(new BlockPlan(tile.x, tile.y, (short)rotation, block.id, config())); + } + /** Configure with the current, local player. */ public void configure(Object value){ //save last used config diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index c6c5d3ee51..1d928b00cd 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -109,7 +109,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.block.itemCapacity))); + entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.storageCapacity))); } //TODO write items. diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 5827f61168..30f0100b2d 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -194,8 +194,8 @@ public class Universe{ //queue random invasions if(!sector.isAttacked() && turn > invasionGracePeriod){ - //TODO use factors like difficulty for better invasion chance - if(sector.near().contains(Sector::hasEnemyBase) && Mathf.chance(baseInvasionChance)){ + //invasion chance depends on # of nearby bases + if(Mathf.chance(baseInvasionChance * sector.near().count(Sector::hasEnemyBase))){ int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 5) * 5; //assign invasion-related things diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 1c942d1228..52a129c0b7 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -328,7 +328,7 @@ public class SectorDamage{ int radius = 3; //only penetrate a certain % by health, not by distance - float totalHealth = path.sumf(t -> { + float totalHealth = damage >= 1f ? 1f : path.sumf(t -> { float s = 0; for(int dx = -radius; dx <= radius; dx++){ for(int dy = -radius; dy <= radius; dy++){ @@ -345,7 +345,7 @@ public class SectorDamage{ float healthCount = 0; out: - for(int i = 0; i < path.size && healthCount < targetHealth; i++){ + for(int i = 0; i < path.size && (healthCount < targetHealth || damage >= 1f); i++){ Tile t = path.get(i); for(int dx = -radius; dx <= radius; dx++){ @@ -365,7 +365,7 @@ public class SectorDamage{ removal.add(other.build); - if(healthCount >= targetHealth){ + if(healthCount >= targetHealth && damage < 0.999f){ break out; } } @@ -376,6 +376,7 @@ public class SectorDamage{ for(Building r : removal){ if(r.tile.build == r){ + r.addPlan(false); r.tile.remove(); } } @@ -424,6 +425,7 @@ public class SectorDamage{ Effect.rubble(other.build.x, other.build.y, other.block().size); } + other.build.addPlan(false); other.remove(); } } diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index efcc6e68bb..c00076d92b 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -339,9 +339,6 @@ public class SettingsMenuDialog extends SettingsDialog{ graphics.checkPref("smoothcamera", true); graphics.checkPref("position", false); graphics.checkPref("fps", false); - if(!mobile){ - graphics.checkPref("blockselectkeys", true); - } graphics.checkPref("playerindicators", true); graphics.checkPref("indicators", true); graphics.checkPref("animatedwater", true); diff --git a/core/src/mindustry/ui/fragments/PlacementFragment.java b/core/src/mindustry/ui/fragments/PlacementFragment.java index 7b53a24012..25c009ff63 100644 --- a/core/src/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/mindustry/ui/fragments/PlacementFragment.java @@ -289,7 +289,7 @@ public class PlacementFragment extends Fragment{ topTable.table(header -> { String keyCombo = ""; - if(!mobile && Core.settings.getBool("blockselectkeys")){ + if(!mobile){ Seq blocks = getByCategory(currentCategory); for(int i = 0; i < blocks.size; i++){ if(blocks.get(i) == displayBlock && (i + 1) / 10 - 1 < blockSelect.length){ diff --git a/core/src/mindustry/world/blocks/storage/CoreBlock.java b/core/src/mindustry/world/blocks/storage/CoreBlock.java index b8c240e95d..1acf5d61c3 100644 --- a/core/src/mindustry/world/blocks/storage/CoreBlock.java +++ b/core/src/mindustry/world/blocks/storage/CoreBlock.java @@ -333,7 +333,7 @@ public class CoreBlock extends StorageBlock{ @Override public void itemTaken(Item item){ - if(state.isCampaign()){ + if(state.isCampaign() && team == state.rules.defaultTeam){ //update item taken amount state.secinfo.handleCoreItem(item, -1); } @@ -342,7 +342,9 @@ public class CoreBlock extends StorageBlock{ @Override public void handleItem(Building source, Item item){ if(net.server() || !net.active()){ - state.secinfo.handleCoreItem(item, 1); + if(team == state.rules.defaultTeam){ + state.secinfo.handleCoreItem(item, 1); + } if(items.get(item) >= getMaximumAccepted(item)){ //create item incineration effect at random intervals diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index a8a5578d95..b4bef2c05c 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -46,7 +46,9 @@ public class StorageBlock extends Block{ @Override public void handleItem(Building source, Item item){ if(linkedCore != null){ - incinerateEffect(this, source); + if(linkedCore.items.get(item) >= ((CoreBuild)linkedCore).storageCapacity){ + incinerateEffect(this, source); + } ((CoreBuild)linkedCore).noEffect = true; linkedCore.handleItem(source, item); }else{ From fd54c66726c7152bb44bc0e7baec0391edbcdf3c Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 22:26:50 +0100 Subject: [PATCH 030/124] make ptile/edge/corner mutable --- .../mindustry/graphics/g3d/PlanetGrid.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index 3f5ee0630a..c0c7ebbe9e 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -221,12 +221,12 @@ public class PlanetGrid{ } public static class Ptile{ - public final int id; - public final int edgeCount; + public int id; + public int edgeCount; - public final Ptile[] tiles; - public final Corner[] corners; - public final Edge[] edges; + public Ptile[] tiles; + public Corner[] corners; + public Edge[] edges; public Vec3 v = new Vec3(); @@ -241,11 +241,11 @@ public class PlanetGrid{ } public static class Corner{ - public final int id; - public final Ptile[] tiles = new Ptile[3]; - public final Corner[] corners = new Corner[3]; - public final Edge[] edges = new Edge[3]; - public final Vec3 v = new Vec3(); + public int id; + public Ptile[] tiles = new Ptile[3]; + public Corner[] corners = new Corner[3]; + public Edge[] edges = new Edge[3]; + public Vec3 v = new Vec3(); public Corner(int id){ this.id = id; @@ -253,9 +253,9 @@ public class PlanetGrid{ } public static class Edge{ - public final int id; - public final Ptile[] tiles = new Ptile[2]; - public final Corner[] corners = new Corner[2]; + public int id; + public Ptile[] tiles = new Ptile[2]; + public Corner[] corners = new Corner[2]; public Edge(int id){ this.id = id; From 97b0461d7ff8b05afb459cc508f7149b65d8062a Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 23:00:06 +0100 Subject: [PATCH 031/124] allow modded planets to customize drawing --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 4 +++- core/src/mindustry/type/Planet.java | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index e3eb74a7b5..75e9989232 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -110,8 +110,10 @@ public class PlanetRenderer implements Disposable{ } private void renderPlanet(Planet planet){ + if(!planet.visible()) return; + //render planet at offsetted position in the world - planet.mesh.render(cam.combined, planet.getTransform(mat)); + planet.render(cam.combined, planet.getTransform(mat)); renderOrbit(planet); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 6153aa4721..47c8bc1750 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -264,4 +264,12 @@ public class Planet extends UnlockableContent{ public ContentType getContentType(){ return ContentType.planet; } + + public boolean visible(){ + return true; + } + + public void draw(Mat3D projection, Mat3d Transform){ + mesh.render(projection, transform); + } } From 060152fc2959b4df337bfeb933e3ad0ad48820f3 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 23:06:46 +0100 Subject: [PATCH 032/124] make calc stuff pkg private again --- core/src/mindustry/graphics/g3d/PlanetGrid.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index c0c7ebbe9e..8fb19dff56 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -187,36 +187,36 @@ public class PlanetGrid{ } } - public static int pos(Ptile t, Ptile n){ + static int pos(Ptile t, Ptile n){ for(int i = 0; i < t.edgeCount; i++) if(t.tiles[i] == n) return i; return -1; } - public static int pos(Ptile t, Corner c){ + static int pos(Ptile t, Corner c){ for(int i = 0; i < t.edgeCount; i++) if(t.corners[i] == c) return i; return -1; } - public static int pos(Corner c, Corner n){ + static int pos(Corner c, Corner n){ for(int i = 0; i < 3; i++) if(c.corners[i] == n) return i; return -1; } - public static int tileCount(int size){ + static int tileCount(int size){ return 10 * Mathf.pow(3, size) + 2; } - public static int cornerCount(int size){ + static int cornerCount(int size){ return 20 * Mathf.pow(3, size); } - public static int edgeCount(int size){ + static int edgeCount(int size){ return 30 * Mathf.pow(3, size); } From 0fa947bfaa4bc7dd4a0242859267ccb2b20ed7a3 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Fri, 16 Oct 2020 23:22:39 +0100 Subject: [PATCH 033/124] make calc stuff pkg private again --- core/src/mindustry/graphics/g3d/PlanetGrid.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index 8fb19dff56..380f937658 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -163,7 +163,7 @@ public class PlanetGrid{ return grid; } - public static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ + static void addCorner(int id, PlanetGrid grid, int t1, int t2, int t3){ Corner c = grid.corners[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2], grid.tiles[t3]}; c.v.set(t[0].v).add(t[1].v).add(t[2].v).nor(); @@ -173,7 +173,7 @@ public class PlanetGrid{ } } - public static void addEdge(int id, PlanetGrid grid, int t1, int t2){ + static void addEdge(int id, PlanetGrid grid, int t1, int t2){ Edge e = grid.edges[id]; Ptile[] t = {grid.tiles[t1], grid.tiles[t2]}; Corner[] c = { From fc1b03f3226c483aad5a0157f60022b6eea35bb6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 16 Oct 2020 20:09:48 -0400 Subject: [PATCH 034/124] Various tweaks --- core/src/mindustry/content/UnitTypes.java | 5 ++--- core/src/mindustry/core/Logic.java | 10 ++++++++- core/src/mindustry/game/DefaultWaves.java | 8 +++---- core/src/mindustry/game/SectorInfo.java | 4 ++++ .../src/mindustry/graphics/BlockRenderer.java | 21 ++++++++++--------- .../src/mindustry/graphics/LightRenderer.java | 1 - core/src/mindustry/maps/SectorDamage.java | 15 +++++++++---- .../world/blocks/storage/StorageBlock.java | 2 +- 8 files changed, 42 insertions(+), 24 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 9a1b851118..b9189ec64e 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -872,7 +872,6 @@ public class UnitTypes implements ContentList{ drag = 0.01f; flying = true; health = 75; - faceTarget = false; engineOffset = 5.5f; range = 140f; @@ -1449,13 +1448,13 @@ public class UnitTypes implements ContentList{ trailMult = 0.8f; hitEffect = Fx.massiveExplosion; knockback = 1.5f; - lifetime = 140f; + lifetime = 100f; height = 15.5f; width = 15f; collidesTiles = false; ammoMultiplier = 4f; splashDamageRadius = 60f; - splashDamage = 85f; + splashDamage = 80f; backColor = Pal.missileYellowBack; frontColor = Pal.missileYellow; trailEffect = Fx.artilleryTrail; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 88aeeabed9..c2274922de 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -96,6 +96,11 @@ public class Logic implements ApplicationListener{ Events.on(WorldLoadEvent.class, e -> { //enable infinite ammo for wave team by default state.rules.waveTeam.rules().infiniteAmmo = true; + if(state.isCampaign()){ + //enable building AI + state.rules.waveTeam.rules().ai = true; + state.rules.waveTeam.rules().infiniteResources = true; + } //save settings Core.settings.manualSave(); @@ -174,9 +179,12 @@ public class Logic implements ApplicationListener{ } //if there's a "win" wave and no enemies are present, win automatically - if(state.rules.waves && state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()){ + if(state.rules.waves && (state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()) || + (state.rules.attackMode && state.rules.waveTeam.cores().isEmpty())){ //the sector has been conquered - waves get disabled state.rules.waves = false; + //disable attack mode + state.rules.attackMode = false; //fire capture event Events.fire(new SectorCaptureEvent(state.rules.sector)); diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/DefaultWaves.java index 12d1d28dfe..f3c98f9fb4 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/DefaultWaves.java @@ -81,7 +81,7 @@ public class DefaultWaves{ effect = StatusEffects.overdrive; }}, - new SpawnGroup(mace){{ + new SpawnGroup(pulsar){{ begin = 120; spacing = 2; unitScaling = 3; @@ -122,7 +122,7 @@ public class DefaultWaves{ shieldScaling = 30; }}, - new SpawnGroup(dagger){{ + new SpawnGroup(nova){{ begin = 35; spacing = 3; unitAmount = 4; @@ -233,7 +233,7 @@ public class DefaultWaves{ shieldScaling = 20f; }}, - new SpawnGroup(atrax){{ + new SpawnGroup(toxopid){{ begin = 210; unitAmount = 1; unitScaling = 1; @@ -258,7 +258,7 @@ public class DefaultWaves{ {nova, pulsar, quasar, vela, corvus}, {crawler, atrax, spiroct, arkyid, toxopid}, //{risso, minke, bryde, sei, omura}, //questionable choices - //{mono, poly, mega, quad, oct}, //do not attack + {poly, poly, mega, quad, quad}, {flare, horizon, zenith, antumbra, eclipse} }; diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 1d928b00cd..04e0be38ef 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -41,6 +41,8 @@ public class SectorInfo{ public Seq resources = new Seq<>(); /** Whether waves are enabled here. */ public boolean waves = true; + /** Whether attack mode is enabled here. */ + public boolean attack = false; /** Wave # from state */ public int wave = 1, winWave = -1; /** Time between waves. */ @@ -103,6 +105,7 @@ public class SectorInfo{ state.rules.waves = waves; state.rules.waveSpacing = waveSpacing; state.rules.winWave = winWave; + state.rules.attackMode = attack; CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ @@ -135,6 +138,7 @@ public class SectorInfo{ wave = state.wave; winWave = state.rules.winWave; waves = state.rules.waves; + attack = state.rules.attackMode; hasCore = entity != null; bestCoreType = !hasCore ? Blocks.air : state.rules.defaultTeam.cores().max(e -> e.block.size).block; storageCapacity = entity != null ? entity.storageCapacity : 0; diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 223540e601..afe2e3182b 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -38,7 +38,7 @@ public class BlockRenderer implements Disposable{ private FrameBuffer dark = new FrameBuffer(); private Seq outArray2 = new Seq<>(); private Seq shadowEvents = new Seq<>(); - private IntSet processedEntities = new IntSet(), processedLinks = new IntSet(); + private IntSet procEntities = new IntSet(), procLinks = new IntSet(), procLights = new IntSet(); private boolean displayStatus = false; public BlockRenderer(){ @@ -191,8 +191,9 @@ public class BlockRenderer implements Disposable{ tileview.clear(); lightview.clear(); - processedEntities.clear(); - processedLinks.clear(); + procEntities.clear(); + procLinks.clear(); + procLights.clear(); int minx = Math.max(avgx - rangex - expandr, 0); int miny = Math.max(avgy - rangey - expandr, 0); @@ -209,25 +210,25 @@ public class BlockRenderer implements Disposable{ tile = tile.build.tile; } - if(block != Blocks.air && block.cacheLayer == CacheLayer.normal && (tile.build == null || !processedEntities.contains(tile.build.id))){ + if(block != Blocks.air && block.cacheLayer == CacheLayer.normal && (tile.build == null || !procEntities.contains(tile.build.id))){ if(block.expanded || !expanded){ - if(tile.build == null || processedLinks.add(tile.build.id)){ + if(tile.build == null || procLinks.add(tile.build.id)){ tileview.add(tile); if(tile.build != null){ - processedEntities.add(tile.build.id); - processedLinks.add(tile.build.id); + procEntities.add(tile.build.id); + procLinks.add(tile.build.id); } } } //lights are drawn even in the expanded range - if(tile.build != null || tile.block().emitLight){ + if(((tile.build != null && procLights.add(tile.build.pos())) || tile.block().emitLight)){ lightview.add(tile); } if(tile.build != null && tile.build.power != null && tile.build.power.links.size > 0){ for(Building other : tile.build.getPowerConnections(outArray2)){ - if(other.block instanceof PowerNode && processedLinks.add(other.id)){ //TODO need a generic way to render connections! + if(other.block instanceof PowerNode && procLinks.add(other.id)){ //TODO need a generic way to render connections! tileview.add(other.tile); } } @@ -235,7 +236,7 @@ public class BlockRenderer implements Disposable{ } //special case for floors - if(block == Blocks.air && tile.floor().emitLight){ + if((block == Blocks.air && tile.floor().emitLight) && procLights.add(tile.pos())){ lightview.add(tile); } } diff --git a/core/src/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java index 10ffa727b6..0a05c7409b 100644 --- a/core/src/mindustry/graphics/LightRenderer.java +++ b/core/src/mindustry/graphics/LightRenderer.java @@ -100,7 +100,6 @@ public class LightRenderer{ Draw.vert(ledge.texture, vertices, 0, vertices.length); - Vec2 v3 = Tmp.v2.trnsExact(rot, stroke); u = ledge.u; diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 52a129c0b7..325881760b 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -11,6 +11,7 @@ import mindustry.entities.abilities.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.logic.*; +import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.defense.*; import mindustry.world.blocks.defense.turrets.*; @@ -252,7 +253,10 @@ public class SectorDamage{ if(unit.isPlayer()) continue; if(unit.team == state.rules.defaultTeam){ - sumHealth += unit.health + unit.shield; + //scale health based on armor - yes, this is inaccurate, but better than nothing + float healthMult = 1f + Mathf.clamp(unit.armor / 20f); + + sumHealth += unit.health*healthMult + unit.shield; sumDps += unit.type().dpsEstimate; if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ sumRps += h.amount / h.reload * 60f; @@ -277,10 +281,12 @@ public class SectorDamage{ } for(SpawnGroup group : state.rules.spawns){ + float healthMult = 1f + Mathf.clamp(group.type.armor / 20f); + StatusEffect effect = (group.effect == null ? StatusEffects.none : group.effect); int spawned = group.getSpawned(wave); if(spawned <= 0) continue; - sumWaveHealth += spawned * (group.getShield(wave) + group.type.health); - sumWaveDps += spawned * group.type.dpsEstimate; + sumWaveHealth += spawned * (group.getShield(wave) + group.type.health * effect.healthMultiplier * healthMult); + sumWaveDps += spawned * group.type.dpsEstimate * effect.damageMultiplier; } waveDps.add(new Vec2(wave, sumWaveDps)); waveHealth.add(new Vec2(wave, sumWaveHealth)); @@ -295,7 +301,8 @@ public class SectorDamage{ info.waveDpsBase = reg.intercept; info.waveDpsSlope = reg.slope; - info.sumHealth = sumHealth; + //enemy units like to aim for a lot of non-essential things, so increase resulting health slightly + info.sumHealth = sumHealth * 1.2f; info.sumDps = sumDps; info.sumRps = sumRps; diff --git a/core/src/mindustry/world/blocks/storage/StorageBlock.java b/core/src/mindustry/world/blocks/storage/StorageBlock.java index b4bef2c05c..71045e166b 100644 --- a/core/src/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/mindustry/world/blocks/storage/StorageBlock.java @@ -26,7 +26,7 @@ public class StorageBlock extends Block{ } public static void incinerateEffect(Building self, Building source){ - if(Mathf.chance(0.1)){ + if(Mathf.chance(0.3)){ Tile edge = Edges.getFacingEdge(source, self); Tile edge2 = Edges.getFacingEdge(self, source); if(edge != null && edge2 != null){ From 05b77d787e109c38cd2f9a714b71abb80bd151aa Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 12:10:52 +0100 Subject: [PATCH 035/124] hide orbits of hidden planets --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 75e9989232..734a3efbdf 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -140,7 +140,7 @@ public class PlanetRenderer implements Disposable{ } private void renderOrbit(Planet planet){ - if(planet.parent == null) return; + if(planet.parent == null || !planet.visible()) return; Vec3 center = planet.parent.position; float radius = planet.orbitRadius; From 54b0d308bed46dab324f9be9eb3d6ea84e2235c3 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 12:16:47 +0100 Subject: [PATCH 036/124] h --- core/src/mindustry/type/Planet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 47c8bc1750..07147b5cd9 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -269,7 +269,7 @@ public class Planet extends UnlockableContent{ return true; } - public void draw(Mat3D projection, Mat3d Transform){ + public void draw(Mat3D projection, Mat3D Transform){ mesh.render(projection, transform); } } From 8e0c5023c934cc1d8823c01b2c77783b30c9b67b Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 12:28:46 +0100 Subject: [PATCH 037/124] hh --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 2 +- core/src/mindustry/type/Planet.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 734a3efbdf..33176408c8 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -113,7 +113,7 @@ public class PlanetRenderer implements Disposable{ if(!planet.visible()) return; //render planet at offsetted position in the world - planet.render(cam.combined, planet.getTransform(mat)); + planet.draw(cam.combined, planet.getTransform(mat)); renderOrbit(planet); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 07147b5cd9..e67a4a493f 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -269,7 +269,7 @@ public class Planet extends UnlockableContent{ return true; } - public void draw(Mat3D projection, Mat3D Transform){ + public void draw(Mat3D projection, Mat3D transform){ mesh.render(projection, transform); } } From c3d0819cc114165acdfa66bdf12ddb28aba8a032 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 09:17:16 -0400 Subject: [PATCH 038/124] Fixed #2988 --- core/src/mindustry/world/blocks/campaign/LaunchPad.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index dd1cc69007..860eb522d2 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -115,6 +115,8 @@ public class LaunchPad extends Block{ public void display(Table table){ super.display(table); + if(!state.isCampaign()) return; + table.row(); table.label(() -> { Sector dest = state.secinfo.getRealDestination(); From e05ba886e8d4fca3e3b0a1905b835dabd493eb75 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 09:37:09 -0400 Subject: [PATCH 039/124] Update README.md --- README.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5c9c797297..209775b7f6 100644 --- a/README.md +++ b/README.md @@ -9,34 +9,34 @@ _[Trello Board](https://trello.com/b/aE2tcUwF/mindustry-40-plans)_ _[Wiki](https://mindustrygame.github.io/wiki)_ _[Javadoc](https://mindustrygame.github.io/docs/)_ -### Contributing +## Contributing See [CONTRIBUTING](CONTRIBUTING.md). -### Building +## Building Bleeding-edge builds are generated automatically for every commit. You can see them [here](https://github.com/Anuken/MindustryBuilds/releases). If you'd rather compile on your own, follow these instructions. First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands: -#### Windows +### Windows _Running:_ `gradlew desktop:run` _Building:_ `gradlew desktop:dist` _Sprite Packing:_ `gradlew tools:pack` -#### Linux/Mac OS +### Linux/Mac OS _Running:_ `./gradlew desktop:run` _Building:_ `./gradlew desktop:dist` _Sprite Packing:_ `./gradlew tools:pack` -#### Server +### Server Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`. -#### Android +### Android 1. Install the Android SDK [here.](https://developer.android.com/studio#downloads) Make sure you're downloading the "Command line tools only", as Android Studio is not required. 2. Set the `ANDROID_HOME` environment variable to point to your unzipped Android SDK directory. @@ -44,20 +44,29 @@ Server builds are bundled with each released build (in Releases). If you'd rathe To debug the application on a connected phone, run `gradlew android:installDebug android:run`. -##### Troubleshooting +### Troubleshooting + +#### Permission Denied If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.* +#### Can not attach to current VM / Error during attachment using [...] + +This is a problem related to [Jabel](https://github.com/bsideup/jabel), which I use to compile Java 8-compatible bytecode while using Java 9+ language features. +I don't know of a complete fix to this issue. However, if you're getting the error when running through IntelliJ, a workaround is to launch through Gradle *once*, which starts a daemon and avoids the problem in future runs through IntelliJ. + + + --- Gradle may take up to several minutes to download files. Be patient.
After building, the output .JAR file should be in `/desktop/build/libs/Mindustry.jar` for desktop builds, and in `/server/build/libs/server-release.jar` for server builds. -### Feature Requests +## Feature Requests Post feature requests and feedback [here](https://github.com/Anuken/Mindustry-Suggestions/issues/new/choose). -### Downloads +## Downloads [Get it on Itch.io Date: Sat, 17 Oct 2020 09:59:20 -0400 Subject: [PATCH 040/124] Checks to prevent uncaptureable sectors --- core/src/mindustry/ai/BaseAI.java | 2 +- core/src/mindustry/game/Rules.java | 2 ++ core/src/mindustry/game/SectorInfo.java | 13 +++++++++++-- .../maps/planet/SerpuloPlanetGenerator.java | 6 +++--- core/src/mindustry/type/SectorPreset.java | 1 + .../mindustry/world/blocks/units/UnitFactory.java | 7 +++++++ 6 files changed, 25 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 3b45d8a17b..3a4965aa88 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -40,7 +40,7 @@ public class BaseAI{ } public void update(){ - if(timer.get(timerSpawn, 60) && data.hasCore()){ + if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){ CoreBlock block = (CoreBlock)data.core().block; //create AI core unit diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 329e69c92a..2a927cc59b 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -106,6 +106,8 @@ public class Rules{ public boolean ai; /** TODO Tier of blocks/designs that the AI uses for building. [0, 1]*/ public float aiTier = 0f; + /** Whether, when AI is enabled, ships should be spawned from the core. */ + public boolean aiCoreSpawn = true; /** If true, blocks don't require power or resources. */ public boolean cheat; /** If true, resources are not consumed when building. */ diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 04e0be38ef..f9e30f7d02 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -101,6 +101,17 @@ public class SectorInfo{ /** Write contents of meta into main storage. */ public void write(){ + //enable attack mode when there's a core. + if(state.rules.waveTeam.core() != null){ + attack = true; + winWave = 0; + } + + //if there are infinite waves and no win wave, add a win wave. + if(waves && winWave <= 0 && !attack){ + winWave = 30; + } + state.wave = wave; state.rules.waves = waves; state.rules.waveSpacing = waveSpacing; @@ -114,8 +125,6 @@ public class SectorInfo{ //ensure capacity. entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.storageCapacity))); } - - //TODO write items. } /** Prepare data for writing to a save. */ diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index ee2f6b437c..9065467dff 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -412,12 +412,12 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ if(sector.hasEnemyBase()){ basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector, difficulty); - state.rules.attackMode = true; + state.rules.attackMode = sector.info.attack = true; }else{ - state.rules.winWave = 15 * (int)Math.max(difficulty * 10, 1); + state.rules.winWave = sector.info.winWave = 15 * (int)Math.max(difficulty * 10, 1); } - state.rules.waves = true; + state.rules.waves = sector.info.waves = true; //TODO better waves state.rules.spawns = DefaultWaves.generate(difficulty); diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index 923d023b25..f08374fa70 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -23,6 +23,7 @@ public class SectorPreset extends UnlockableContent{ super(name); this.generator = new FileMapGenerator(name); this.planet = planet; + sector %= planet.sectors.size; this.sector = planet.sectors.get(sector); planet.preset(sector, this); diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index 74248f9932..52a3af85c7 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -14,6 +14,7 @@ import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.blocks.*; @@ -122,6 +123,12 @@ public class UnitFactory extends UnitBlock{ return currentPlan == -1 ? 0 : progress / plans.get(currentPlan).time; } + @Override + public Object senseObject(LAccess sensor){ + if(sensor == LAccess.config) return currentPlan == -1 ? null : plans.get(currentPlan).unit; + return super.senseObject(sensor); + } + @Override public void buildConfiguration(Table table){ Seq units = Seq.with(plans).map(u -> u.unit).filter(u -> u.unlockedNow()); From 35a86a1aacf77fccb718dd23d61565a985130947 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 15:34:00 +0100 Subject: [PATCH 041/124] add universe draw events --- core/src/mindustry/game/EventType.java | 5 ++- .../graphics/g3d/PlanetRenderer.java | 31 +++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 0ffb2f7369..b786bb47f7 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -35,7 +35,10 @@ public class EventType{ preDraw, postDraw, uiDrawBegin, - uiDrawEnd + uiDrawEnd, + //before/after bloom used, skybox or planets drawn - use Vars.renderer.planets + universeDrawBegin, + universeDrawEnd } public static class WinEvent{} diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index e3eb74a7b5..14a4cc8820 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -10,6 +10,7 @@ import arc.math.geom.*; import arc.struct.*; import arc.util.*; import mindustry.content.*; +import mindustry.game.EventType.*; import mindustry.graphics.*; import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.type.*; @@ -38,19 +39,19 @@ public class PlanetRenderer implements Disposable{ public float zoom = 1f; private final Mesh[] outlines = new Mesh[10]; - private final PlaneBatch3D projector = new PlaneBatch3D(); - private final Mat3D mat = new Mat3D(); - private final FrameBuffer buffer = new FrameBuffer(2, 2, true); - private PlanetInterfaceRenderer irenderer; + public final PlaneBatch3D projector = new PlaneBatch3D(); + public final Mat3D mat = new Mat3D(); + public final FrameBuffer buffer = new FrameBuffer(2, 2, true); + public PlanetInterfaceRenderer irenderer; - private final Bloom bloom = new Bloom(Core.graphics.getWidth()/4, Core.graphics.getHeight()/4, true, false){{ + public final Bloom bloom = new Bloom(Core.graphics.getWidth()/4, Core.graphics.getHeight()/4, true, false){{ setThreshold(0.8f); blurPasses = 6; }}; - private final Mesh atmosphere = MeshBuilder.buildHex(Color.white, 2, false, 1.5f); + public final Mesh atmosphere = MeshBuilder.buildHex(Color.white, 2, false, 1.5f); //seed: 8kmfuix03fw - private final CubemapMesh skybox = new CubemapMesh(new Cubemap("cubemaps/stars/")); + public final CubemapMesh skybox = new CubemapMesh(new Cubemap("cubemaps/stars/")); public PlanetRenderer(){ camPos.set(0, 0f, camLength); @@ -82,6 +83,8 @@ public class PlanetRenderer implements Disposable{ projector.proj(cam.combined); batch.proj(cam.combined); + Events.fire(Trigger.universeDrawBegin); + beginBloom(); skybox.render(cam.combined); @@ -90,6 +93,8 @@ public class PlanetRenderer implements Disposable{ endBloom(); + Events.fire(Trigger.universeDrawEnd); + Gl.enable(Gl.blend); irenderer.renderProjections(); @@ -100,16 +105,16 @@ public class PlanetRenderer implements Disposable{ cam.update(); } - private void beginBloom(){ + public void beginBloom(){ bloom.resize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4); bloom.capture(); } - private void endBloom(){ + public void endBloom(){ bloom.render(); } - private void renderPlanet(Planet planet){ + public void renderPlanet(Planet planet){ //render planet at offsetted position in the world planet.mesh.render(cam.combined, planet.getTransform(mat)); @@ -137,7 +142,7 @@ public class PlanetRenderer implements Disposable{ } } - private void renderOrbit(Planet planet){ + public void renderOrbit(Planet planet){ if(planet.parent == null) return; Vec3 center = planet.parent.position; @@ -147,7 +152,7 @@ public class PlanetRenderer implements Disposable{ batch.flush(Gl.lineLoop); } - private void renderSectors(Planet planet){ + public void renderSectors(Planet planet){ //apply transformed position batch.proj().mul(planet.getTransform(mat)); @@ -268,7 +273,7 @@ public class PlanetRenderer implements Disposable{ } } - private Mesh outline(int size){ + public Mesh outline(int size){ if(outlines[size] == null){ outlines[size] = MeshBuilder.buildHex(new HexMesher(){ @Override From 46ec45781937b9ae085e6963b4a9c4b4a17cd670 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 10:37:28 -0400 Subject: [PATCH 042/124] Cleanup --- core/assets/bundles/bundle.properties | 3 +-- core/src/mindustry/ai/BaseAI.java | 2 +- core/src/mindustry/ai/WaveSpawner.java | 2 +- core/src/mindustry/ai/types/BuilderAI.java | 4 ++-- core/src/mindustry/ai/types/FlyingAI.java | 4 ++-- core/src/mindustry/ai/types/FormationAI.java | 8 +++---- core/src/mindustry/ai/types/GroundAI.java | 8 +++---- core/src/mindustry/ai/types/LogicAI.java | 4 ++-- core/src/mindustry/ai/types/MinerAI.java | 12 +++++----- core/src/mindustry/ai/types/RepairAI.java | 6 ++--- core/src/mindustry/ai/types/SuicideAI.java | 10 ++++---- core/src/mindustry/async/PhysicsProcess.java | 2 +- core/src/mindustry/content/Fx.java | 6 ++--- core/src/mindustry/core/Logic.java | 2 +- core/src/mindustry/core/NetServer.java | 4 ++-- core/src/mindustry/entities/Units.java | 2 +- .../mindustry/entities/comp/BuildingComp.java | 2 +- .../entities/comp/CommanderComp.java | 6 ++--- .../mindustry/entities/comp/PlayerComp.java | 8 +++---- .../mindustry/entities/comp/PuddleComp.java | 2 +- .../src/mindustry/entities/comp/UnitComp.java | 24 ++++++------------- .../entities/units/AIController.java | 8 +++---- core/src/mindustry/game/SpawnGroup.java | 18 ++++++++++++++ core/src/mindustry/game/Teams.java | 10 ++++---- .../mindustry/graphics/MinimapRenderer.java | 2 +- .../mindustry/graphics/OverlayRenderer.java | 2 +- core/src/mindustry/input/DesktopInput.java | 14 +++++------ core/src/mindustry/input/InputHandler.java | 14 +++++------ core/src/mindustry/input/MobileInput.java | 8 +++---- core/src/mindustry/logic/LExecutor.java | 2 +- core/src/mindustry/maps/SectorDamage.java | 4 ++-- core/src/mindustry/mod/ContentParser.java | 14 +++++++++-- core/src/mindustry/type/AmmoTypes.java | 4 ++-- core/src/mindustry/type/ItemStack.java | 7 ++++++ core/src/mindustry/type/StatusEffect.java | 2 +- core/src/mindustry/type/UnitType.java | 2 +- .../mindustry/ui/fragments/HudFragment.java | 2 +- .../blocks/defense/TractorBeamTurret.java | 2 +- .../world/blocks/payloads/UnitPayload.java | 4 ++-- .../world/blocks/units/Reconstructor.java | 14 +++++------ .../world/blocks/units/ResupplyPoint.java | 4 ++-- .../src/mindustry/desktop/steam/SStats.java | 2 +- 42 files changed, 142 insertions(+), 118 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 78c3259e9b..196b6e87af 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -100,8 +100,7 @@ committingchanges = Comitting Changes done = Done feature.unsupported = Your device does not support this feature. -mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord. -mods.alpha = [accent](Alpha) +mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub. mods = Mods mods.none = [lightgray]No mods found! mods.guide = Modding Guide diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 3a4965aa88..b1f83d95d2 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -44,7 +44,7 @@ public class BaseAI{ CoreBlock block = (CoreBlock)data.core().block; //create AI core unit - if(!state.isEditor() && !Groups.unit.contains(u -> u.team() == data.team && u.type() == block.unitType)){ + if(!state.isEditor() && !Groups.unit.contains(u -> u.team() == data.team && u.type == block.unitType)){ Unit unit = block.unitType.create(data.team); unit.set(data.core()); unit.add(); diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 99b52d40e5..91c7f61467 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -175,7 +175,7 @@ public class WaveSpawner{ } private void spawnEffect(Unit unit){ - Call.spawnEffect(unit.x, unit.y, unit.type()); + Call.spawnEffect(unit.x, unit.y, unit.type); Time.run(30f, unit::add); } diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 8e8c74f986..c3558ca58a 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -79,7 +79,7 @@ public class BuilderAI extends AIController{ float dist = Math.min(cons.dst(unit) - buildingRange, 0); //make sure you can reach the request in time - if(dist / unit.type().speed < cons.buildCost * 0.9f){ + if(dist / unit.type.speed < cons.buildCost * 0.9f){ following = b; found = true; } @@ -112,7 +112,7 @@ public class BuilderAI extends AIController{ @Override public AIController fallback(){ - return unit.type().flying ? new FlyingAI() : new GroundAI(); + return unit.type.flying ? new FlyingAI() : new GroundAI(); } @Override diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index 0758f9016a..9d4c2d38f9 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -12,7 +12,7 @@ public class FlyingAI extends AIController{ @Override public void updateMovement(){ if(target != null && unit.hasWeapons() && command() == UnitCommand.attack){ - if(unit.type().weapons.first().rotate){ + if(unit.type.weapons.first().rotate){ moveTo(target, unit.range() * 0.8f); unit.lookAt(target); }else{ @@ -57,7 +57,7 @@ public class FlyingAI extends AIController{ vec.setAngle(Mathf.slerpDelta(unit.vel().angle(), vec.angle(), 0.6f)); } - vec.setLength(unit.type().speed); + vec.setLength(unit.type.speed); unit.moveAt(vec); } diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index d774719cab..ed175524d8 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -27,14 +27,14 @@ public class FormationAI extends AIController implements FormationMember{ @Override public void updateUnit(){ - UnitType type = unit.type(); + UnitType type = unit.type; if(leader.dead){ unit.resetController(); return; } - if(unit.type().canBoost && unit.canPassOn()){ + if(unit.type.canBoost && unit.canPassOn()){ unit.elevation = Mathf.approachDelta(unit.elevation, 0f, 0.08f); } @@ -43,7 +43,7 @@ public class FormationAI extends AIController implements FormationMember{ unit.aim(leader.aimX(), leader.aimY()); - if(unit.type().rotateShooting){ + if(unit.type.rotateShooting){ unit.lookAt(leader.aimX(), leader.aimY()); }else if(unit.moving()){ unit.lookAt(unit.vel.angle()); @@ -65,7 +65,7 @@ public class FormationAI extends AIController implements FormationMember{ CoreBuild core = unit.team.core(); - if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type().range) && !unit.acceptsItem(com.mineTile().drop())){ + if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type.range) && !unit.acceptsItem(com.mineTile().drop())){ if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); diff --git a/core/src/mindustry/ai/types/GroundAI.java b/core/src/mindustry/ai/types/GroundAI.java index 157ed2eb9d..0134a424fc 100644 --- a/core/src/mindustry/ai/types/GroundAI.java +++ b/core/src/mindustry/ai/types/GroundAI.java @@ -45,13 +45,13 @@ public class GroundAI extends AIController{ } } - if(unit.type().canBoost && !unit.onSolid()){ + if(unit.type.canBoost && !unit.onSolid()){ unit.elevation = Mathf.approachDelta(unit.elevation, 0f, 0.08f); } - if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type().rotateShooting){ - if(unit.type().hasWeapons()){ - unit.lookAt(Predict.intercept(unit, target, unit.type().weapons.first().bullet.speed)); + if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting){ + if(unit.type.hasWeapons()){ + unit.lookAt(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed)); } }else if(unit.moving()){ unit.lookAt(unit.vel().angle()); diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index 76b81794a2..1166c2ff96 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -98,7 +98,7 @@ public class LogicAI extends AIController{ } } - if(unit.type().canBoost && !unit.type().flying){ + if(unit.type.canBoost && !unit.type.flying){ unit.elevation = Mathf.approachDelta(unit.elevation, Mathf.num(boost || unit.onSolid()), 0.08f); } @@ -129,7 +129,7 @@ public class LogicAI extends AIController{ @Override protected boolean shouldShoot(){ - return shoot && !(unit.type().canBoost && boost); + return shoot && !(unit.type.canBoost && boost); } //always aim for the main target diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index d19b8e2c0a..aa7d1403c5 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -19,7 +19,7 @@ public class MinerAI extends AIController{ if(!(unit instanceof Minerc miner) || core == null) return; - if(miner.mineTile() != null && !miner.mineTile().within(unit, unit.type().range)){ + if(miner.mineTile() != null && !miner.mineTile().within(unit, unit.type.range)){ miner.mineTile(null); } @@ -36,7 +36,7 @@ public class MinerAI extends AIController{ } //if inventory is full, drop it off. - if(unit.stack.amount >= unit.type().itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){ + if(unit.stack.amount >= unit.type.itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){ mining = false; }else{ if(retarget() && targetItem != null){ @@ -44,9 +44,9 @@ public class MinerAI extends AIController{ } if(ore != null){ - moveTo(ore, unit.type().range / 2f); + moveTo(ore, unit.type.range / 2f); - if(unit.within(ore, unit.type().range)){ + if(unit.within(ore, unit.type.range)){ miner.mineTile(ore); } @@ -63,7 +63,7 @@ public class MinerAI extends AIController{ return; } - if(unit.within(core, unit.type().range)){ + if(unit.within(core, unit.type.range)){ if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); } @@ -72,7 +72,7 @@ public class MinerAI extends AIController{ mining = true; } - circle(core, unit.type().range / 1.8f); + circle(core, unit.type.range / 1.8f); } } diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index cb60a3bfc9..36504f908d 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -12,7 +12,7 @@ public class RepairAI extends AIController{ if(target instanceof Building){ boolean shoot = false; - if(target.within(unit, unit.type().range)){ + if(target.within(unit, unit.type.range)){ unit.aim(target); shoot = true; } @@ -23,8 +23,8 @@ public class RepairAI extends AIController{ } if(target != null){ - if(!target.within(unit, unit.type().range * 0.65f) && target instanceof Building){ - moveTo(target, unit.type().range * 0.65f); + if(!target.within(unit, unit.type.range * 0.65f) && target instanceof Building){ + moveTo(target, unit.type.range * 0.65f); } unit.lookAt(target); diff --git a/core/src/mindustry/ai/types/SuicideAI.java b/core/src/mindustry/ai/types/SuicideAI.java index 2eae6e409f..0ef3ece228 100644 --- a/core/src/mindustry/ai/types/SuicideAI.java +++ b/core/src/mindustry/ai/types/SuicideAI.java @@ -21,7 +21,7 @@ public class SuicideAI extends GroundAI{ } if(retarget()){ - target = target(unit.x, unit.y, unit.range(), unit.type().targetAir, unit.type().targetGround); + target = target(unit.x, unit.y, unit.range(), unit.type.targetAir, unit.type.targetGround); } Building core = unit.closestEnemyCore(); @@ -30,11 +30,11 @@ public class SuicideAI extends GroundAI{ if(!Units.invalidateTarget(target, unit, unit.range()) && unit.hasWeapons()){ rotate = true; - shoot = unit.within(target, unit.type().weapons.first().bullet.range() + + shoot = unit.within(target, unit.type.weapons.first().bullet.range() + (target instanceof Building ? ((Building)target).block.size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f)); - if(unit.type().hasWeapons()){ - unit.aimLook(Predict.intercept(unit, target, unit.type().weapons.first().bullet.speed)); + if(unit.type.hasWeapons()){ + unit.aimLook(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed)); } //do not move toward walls or transport blocks @@ -65,7 +65,7 @@ public class SuicideAI extends GroundAI{ if(!blocked){ moveToTarget = true; //move towards target directly - unit.moveAt(vec.set(target).sub(unit).limit(unit.type().speed)); + unit.moveAt(vec.set(target).sub(unit).limit(unit.type.speed)); } } diff --git a/core/src/mindustry/async/PhysicsProcess.java b/core/src/mindustry/async/PhysicsProcess.java index 07d44d4717..a60dab7f68 100644 --- a/core/src/mindustry/async/PhysicsProcess.java +++ b/core/src/mindustry/async/PhysicsProcess.java @@ -57,7 +57,7 @@ public class PhysicsProcess implements AsyncProcess{ PhysicRef ref = entity.physref(); ref.body.layer = - entity.type().allowLegStep ? layerLegs : + entity.type.allowLegStep ? layerLegs : entity.isGrounded() ? layerGround : layerFlying; ref.x = entity.x(); ref.y = entity.y(); diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 6ca6ccb24d..ca5bf9a0d0 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -56,7 +56,7 @@ public class Fx{ mixcol(Pal.accent, 1f); alpha(e.fout()); - rect(block ? ((BlockUnitc)select).tile().block.icon(Cicon.full) : select.type().icon(Cicon.full), select.x, select.y, block ? 0f : select.rotation - 90f); + rect(block ? ((BlockUnitc)select).tile().block.icon(Cicon.full) : select.type.icon(Cicon.full), select.x, select.y, block ? 0f : select.rotation - 90f); alpha(1f); Lines.stroke(e.fslope() * 1f); Lines.square(select.x, select.y, e.fout() * select.hitSize * 2f, 45); @@ -66,7 +66,7 @@ public class Fx{ }), unitDespawn = new Effect(100f, e -> { - if(!(e.data instanceof Unit) || e.data().type() == null) return; + if(!(e.data instanceof Unit) || e.data().type == null) return; Unit select = e.data(); float scl = e.fout(Interp.pow2Out); @@ -74,7 +74,7 @@ public class Fx{ Draw.scl *= scl; mixcol(Pal.accent, 1f); - rect(select.type().icon(Cicon.full), select.x, select.y, select.rotation - 90f); + rect(select.type.icon(Cicon.full), select.x, select.y, select.rotation - 90f); reset(); Draw.scl = p; diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index c2274922de..a96ea101a9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -272,7 +272,7 @@ public class Logic implements ApplicationListener{ if(state.isGame()){ if(!net.client()){ - state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.type().isCounted); + state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.type.isCounted); } if(!state.isPaused()){ diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 77ab732cf6..d9f944c1aa 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -575,7 +575,7 @@ public class NetServer implements ApplicationListener{ shooting = false; } - if(!player.dead() && (player.unit().type().flying || !player.unit().type().canBoost)){ + if(!player.dead() && (player.unit().type.flying || !player.unit().type.canBoost)){ boosting = false; } @@ -629,7 +629,7 @@ public class NetServer implements ApplicationListener{ Unit unit = player.unit(); long elapsed = Time.timeSinceMillis(con.lastReceivedClientTime); - float maxSpeed = ((player.unit().type().canBoost && player.unit().isFlying()) ? player.unit().type().boostMultiplier : 1f) * player.unit().type().speed; + float maxSpeed = ((player.unit().type.canBoost && player.unit().isFlying()) ? player.unit().type.boostMultiplier : 1f) * player.unit().type.speed; if(unit.isGrounded()){ maxSpeed *= unit.floorSpeedMultiplier(); } diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index 1babb75e33..e4591a0ed0 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -126,7 +126,7 @@ public class Units{ nearby(x, y, width, height, unit -> { if(boolResult) return; - if((unit.isGrounded() && !unit.type().hovering) == ground){ + if((unit.isGrounded() && !unit.type.hovering) == ground){ unit.hitbox(hitrect); if(hitrect.overlaps(x, y, width, height)){ diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 7e8bb19a1e..6891744fce 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1295,7 +1295,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, case type -> block; case firstItem -> items == null ? null : items.first(); case config -> block.configurations.containsKey(Item.class) || block.configurations.containsKey(Liquid.class) ? config() : null; - case payloadType -> getPayload() instanceof UnitPayload p1 ? p1.unit.type() : getPayload() instanceof BuildPayload p2 ? p2.block() : null; + case payloadType -> getPayload() instanceof UnitPayload p1 ? p1.unit.type : getPayload() instanceof BuildPayload p2 ? p2.block() : null; default -> noSensed; }; diff --git a/core/src/mindustry/entities/comp/CommanderComp.java b/core/src/mindustry/entities/comp/CommanderComp.java index b0fbddcf85..e03147d63c 100644 --- a/core/src/mindustry/entities/comp/CommanderComp.java +++ b/core/src/mindustry/entities/comp/CommanderComp.java @@ -59,7 +59,7 @@ abstract class CommanderComp implements Entityc, Posc{ units.clear(); Units.nearby(team, x, y, 150f, u -> { - if(u.isAI() && include.get(u) && u != self() && u.type().flying == type.flying && u.hitSize <= hitSize * 1.1f){ + if(u.isAI() && include.get(u) && u != self() && u.type.flying == type.flying && u.hitSize <= hitSize * 1.1f){ units.add(u); } }); @@ -82,7 +82,7 @@ abstract class CommanderComp implements Entityc, Posc{ FormationAI ai; unit.controller(ai = new FormationAI(self(), formation)); spacing = Math.max(spacing, ai.formationSize()); - minFormationSpeed = Math.min(minFormationSpeed, unit.type().speed); + minFormationSpeed = Math.min(minFormationSpeed, unit.type.speed); } this.formation = formation; @@ -106,7 +106,7 @@ abstract class CommanderComp implements Entityc, Posc{ //reset controlled units for(Unit unit : controlling){ if(unit.controller().isBeingControlled(self())){ - unit.controller(unit.type().createController()); + unit.controller(unit.type.createController()); } } diff --git a/core/src/mindustry/entities/comp/PlayerComp.java b/core/src/mindustry/entities/comp/PlayerComp.java index 4ee481b032..736a1b68e5 100644 --- a/core/src/mindustry/entities/comp/PlayerComp.java +++ b/core/src/mindustry/entities/comp/PlayerComp.java @@ -79,7 +79,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra admin = typing = false; textFadeTime = 0f; if(!dead()){ - unit.controller(unit.type().createController()); + unit.controller(unit.type.createController()); unit = Nulls.unit; } } @@ -91,7 +91,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra @Replace public float clipSize(){ - return unit.isNull() ? 20 : unit.type().hitSize * 2f; + return unit.isNull() ? 20 : unit.type.hitSize * 2f; } @Override @@ -123,7 +123,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra deathTimer = 0; //update some basic state to sync things - if(unit.type().canBoost){ + if(unit.type.canBoost){ Tile tile = unit.tileOn(); unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f); } @@ -177,7 +177,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra if(this.unit != Nulls.unit){ //un-control the old unit - this.unit.controller(this.unit.type().createController()); + this.unit.controller(this.unit.type.createController()); } this.unit = unit; if(unit != Nulls.unit){ diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 669ee7e1f2..d83408c734 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -74,7 +74,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ unit.apply(liquid.effect, 60 * 2); if(unit.vel.len() > 0.1){ - Fx.ripple.at(unit.x, unit.y, unit.type().rippleScale, liquid.color); + Fx.ripple.at(unit.x, unit.y, unit.type.rippleScale, liquid.color); } } } diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 72a8d115f0..897305e87a 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -36,7 +36,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Import int id; private UnitController controller; - private UnitType type; + UnitType type; boolean spawnedByCore; double flag; @@ -110,7 +110,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case firstItem -> stack().amount == 0 ? null : item(); case payloadType -> self() instanceof Payloadc pay ? (pay.payloads().isEmpty() ? null : - pay.payloads().peek() instanceof UnitPayload p1 ? p1.unit.type() : + pay.payloads().peek() instanceof UnitPayload p1 ? p1.unit.type : pay.payloads().peek() instanceof BuildPayload p2 ? p2.block() : null) : null; default -> noSensed; }; @@ -163,22 +163,12 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void set(UnitType def, UnitController controller){ - type(type); + if(this.type != def){ + setType(def); + } controller(controller); } - @Override - public void type(UnitType type){ - if(this.type == type) return; - - setStats(type); - } - - @Override - public UnitType type(){ - return type; - } - /** @return pathfinder path type for calculating costs */ public int pathType(){ return Pathfinder.costGround; @@ -208,7 +198,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I return Units.getCap(team); } - public void setStats(UnitType type){ + public void setType(UnitType type){ this.type = type; this.maxHealth = type.health; this.drag = type.drag; @@ -226,7 +216,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void afterSync(){ //set up type info after reading - setStats(this.type); + setType(this.type); controller.unit(self()); } diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index b02fa5dc00..ca005fe25d 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -95,7 +95,7 @@ public class AIController implements UnitController{ if(tile == targetTile || (costType == Pathfinder.costWater && !targetTile.floor().isLiquid)) return; - unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.type().speed)); + unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.type.speed)); } protected void updateWeapons(){ @@ -105,7 +105,7 @@ public class AIController implements UnitController{ boolean ret = retarget(); if(ret){ - target = findTarget(unit.x, unit.y, unit.range(), unit.type().targetAir, unit.type().targetGround); + target = findTarget(unit.x, unit.y, unit.range(), unit.type.targetAir, unit.type.targetGround); } if(invalid(target)){ @@ -119,7 +119,7 @@ public class AIController implements UnitController{ float mountX = unit.x + Angles.trnsx(rotation, weapon.x, weapon.y), mountY = unit.y + Angles.trnsy(rotation, weapon.x, weapon.y); - if(unit.type().singleTarget){ + if(unit.type.singleTarget){ targets[i] = target; }else{ if(ret){ @@ -176,7 +176,7 @@ public class AIController implements UnitController{ } protected void circle(Position target, float circleLength){ - circle(target, circleLength, unit.type().speed); + circle(target, circleLength, unit.type.speed); } protected void circle(Position target, float circleLength, float speed){ diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index 92ba6811ea..86ba7b6324 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -9,6 +9,8 @@ import mindustry.gen.*; import mindustry.io.legacy.*; import mindustry.type.*; +import java.util.*; + import static mindustry.Vars.*; /** @@ -138,4 +140,20 @@ public class SpawnGroup implements Serializable{ ", items=" + items + '}'; } + + @Override + public boolean equals(Object o){ + if(this == o) return true; + if(o == null || getClass() != o.getClass()) return false; + SpawnGroup group = (SpawnGroup)o; + return end == group.end && begin == group.begin && spacing == group.spacing && max == group.max + && Float.compare(group.unitScaling, unitScaling) == 0 && Float.compare(group.shields, shields) == 0 + && Float.compare(group.shieldScaling, shieldScaling) == 0 && unitAmount == group.unitAmount && + type == group.type && effect == group.effect && Structs.eq(items, group.items); + } + + @Override + public int hashCode(){ + return Arrays.hashCode(new Object[]{type, end, begin, spacing, max, unitScaling, shields, shieldScaling, unitAmount, effect, items}); + } } diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index aa390c5d26..6a2972f074 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -131,7 +131,7 @@ public class Teams{ } private void count(Unit unit){ - unit.team.data().updateCount(unit.type(), 1); + unit.team.data().updateCount(unit.type, 1); if(unit instanceof Payloadc){ ((Payloadc)unit).payloads().each(p -> { @@ -178,15 +178,15 @@ public class Teams{ data.units.add(unit); data.presentFlag = true; - if(data.unitsByType == null || data.unitsByType.length <= unit.type().id){ + if(data.unitsByType == null || data.unitsByType.length <= unit.type.id){ data.unitsByType = new Seq[content.units().size]; } - if(data.unitsByType[unit.type().id] == null){ - data.unitsByType[unit.type().id] = new Seq<>(); + if(data.unitsByType[unit.type.id] == null){ + data.unitsByType[unit.type.id] = new Seq<>(); } - data.unitsByType[unit.type().id].add(unit); + data.unitsByType[unit.type.id].add(unit); count(unit); } diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index cdb84e9044..1c34b4424e 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -96,7 +96,7 @@ public class MinimapRenderer implements Disposable{ Draw.mixcol(unit.team().color, 1f); float scale = Scl.scl(1f) / 2f * scaling * 32f; - Draw.rect(unit.type().icon(Cicon.full), x + rx, y + ry, scale, scale, unit.rotation() - 90); + Draw.rect(unit.type.icon(Cicon.full), x + rx, y + ry, scale, scale, unit.rotation() - 90); Draw.reset(); //only disable player names in multiplayer diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index c7c0c697c3..524ee79ea6 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -85,7 +85,7 @@ public class OverlayRenderer{ //special selection for block "units" Fill.square(select.x, select.y, ((BlockUnitc)select).tile().block.size * tilesize/2f); }else{ - Draw.rect(select.type().icon(Cicon.full), select.x(), select.y(), select.rotation() - 90); + Draw.rect(select.type.icon(Cicon.full), select.x(), select.y(), select.rotation() - 90); } Lines.stroke(unitFade); diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 7099f254dd..e66f119f8f 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -599,11 +599,11 @@ public class DesktopInput extends InputHandler{ } protected void updateMovement(Unit unit){ - boolean omni = unit.type().omniMovement; + boolean omni = unit.type.omniMovement; boolean ground = unit.isGrounded(); - float strafePenalty = ground ? 1f : Mathf.lerp(1f, unit.type().strafePenalty, Angles.angleDist(unit.vel().angle(), unit.rotation()) / 180f); - float baseSpeed = unit.type().speed; + float strafePenalty = ground ? 1f : Mathf.lerp(1f, unit.type.strafePenalty, Angles.angleDist(unit.vel().angle(), unit.rotation()) / 180f); + float baseSpeed = unit.type.speed; //limit speed to minimum formation speed to preserve formation if(unit.isCommanding()){ @@ -611,7 +611,7 @@ public class DesktopInput extends InputHandler{ baseSpeed = unit.minFormationSpeed * 0.95f; } - float speed = baseSpeed * Mathf.lerp(1f, unit.isCommanding() ? 1f : unit.type().canBoost ? unit.type().boostMultiplier : 1f, unit.elevation) * strafePenalty; + float speed = baseSpeed * Mathf.lerp(1f, unit.isCommanding() ? 1f : unit.type.canBoost ? unit.type.boostMultiplier : 1f, unit.elevation) * strafePenalty; float xa = Core.input.axis(Binding.move_x); float ya = Core.input.axis(Binding.move_y); boolean boosted = (unit instanceof Mechc && unit.isFlying()); @@ -622,7 +622,7 @@ public class DesktopInput extends InputHandler{ } float mouseAngle = Angles.mouseAngle(unit.x, unit.y); - boolean aimCursor = omni && player.shooting && unit.type().hasWeapons() && unit.type().faceTarget && !boosted && unit.type().rotateShooting; + boolean aimCursor = omni && player.shooting && unit.type.hasWeapons() && unit.type.faceTarget && !boosted && unit.type.rotateShooting; if(aimCursor){ unit.lookAt(mouseAngle); @@ -637,11 +637,11 @@ public class DesktopInput extends InputHandler{ }else{ unit.moveAt(Tmp.v2.trns(unit.rotation, movement.len())); if(!movement.isZero() && ground){ - unit.vel.rotateTo(movement.angle(), unit.type().rotateSpeed); + unit.vel.rotateTo(movement.angle(), unit.type.rotateSpeed); } } - unit.aim(unit.type().faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation, Core.input.mouseWorld().dst(unit)).add(unit.x, unit.y)); + unit.aim(unit.type.faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation, Core.input.mouseWorld().dst(unit)).add(unit.x, unit.y)); unit.controlWeapons(true, player.shooting && !boosted); player.boosting = Core.input.keyDown(Binding.boost) && !movement.isZero(); diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index eebe40e15b..4a5c26eb9d 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -158,7 +158,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Payloadc pay = (Payloadc)unit; if(target.isAI() && target.isGrounded() && pay.canPickup(target) - && target.within(unit, unit.type().hitSize * 2f + target.type().hitSize * 2f)){ + && target.within(unit, unit.type.hitSize * 2f + target.type.hitSize * 2f)){ Call.pickedUnitPayload(unit, target); } } @@ -365,7 +365,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(commander.isCommanding()){ commander.clearCommand(); - }else if(player.unit().type().commandLimit > 0){ + }else if(player.unit().type.commandLimit > 0){ //TODO try out some other formations commander.commandNearby(new CircleFormation()); @@ -398,17 +398,17 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && player.unit().ammo <= 0){ - player.unit().type().weapons.first().noAmmoSound.at(player.unit()); + player.unit().type.weapons.first().noAmmoSound.at(player.unit()); } wasShooting = player.shooting; if(!player.dead()){ - controlledType = player.unit().type(); + controlledType = player.unit().type; } if(controlledType != null && player.dead()){ - Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType && !u.dead); + Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead); if(unit != null){ Call.unitControl(player, unit); @@ -418,7 +418,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public void checkUnit(){ if(controlledType != null){ - Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType && !u.dead); + Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead); if(unit == null && controlledType == UnitTypes.block){ unit = world.buildWorld(player.x, player.y) instanceof ControlBlock ? ((ControlBlock)world.buildWorld(player.x, player.y)).unit() : null; } @@ -437,7 +437,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Unit unit = player.unit(); if(!(unit instanceof Payloadc pay)) return; - Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitSize * 2.5f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); + Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type.hitSize * 2.5f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); if(target != null){ Call.requestUnitPayload(player, target); }else{ diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 19f458ea88..d5d45192b0 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -85,7 +85,7 @@ public class MobileInput extends InputHandler implements GestureListener{ if(tile != null && player.team().isEnemy(tile.team)){ player.miner().mineTile(null); target = tile; - }else if(tile != null && player.unit().type().canHeal && tile.team == player.team() && tile.damaged()){ + }else if(tile != null && player.unit().type.canHeal && tile.team == player.team() && tile.damaged()){ player.miner().mineTile(null); target = tile; } @@ -834,10 +834,10 @@ public class MobileInput extends InputHandler implements GestureListener{ protected void updateMovement(Unit unit){ Rect rect = Tmp.r3; - UnitType type = unit.type(); + UnitType type = unit.type; if(type == null) return; - boolean omni = unit.type().omniMovement; + boolean omni = unit.type.omniMovement; boolean legs = unit.isGrounded(); boolean allowHealing = type.canHeal; boolean validHealTarget = allowHealing && target instanceof Building && ((Building)target).isValid() && target.team() == unit.team && @@ -855,7 +855,7 @@ public class MobileInput extends InputHandler implements GestureListener{ float attractDst = 15f; float strafePenalty = legs ? 1f : Mathf.lerp(1f, type.strafePenalty, Angles.angleDist(unit.vel.angle(), unit.rotation) / 180f); - float baseSpeed = unit.type().speed; + float baseSpeed = unit.type.speed; //limit speed to minimum formation speed to preserve formation if(unit.isCommanding()){ diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index d493a7f7fe..124f3e0d50 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -395,7 +395,7 @@ public class LExecutor{ if(unit instanceof Payloadc pay){ //units if(exec.bool(p1)){ - Unit result = Units.closest(unit.team, unit.x, unit.y, unit.type().hitSize * 2f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); + Unit result = Units.closest(unit.team, unit.x, unit.y, unit.type.hitSize * 2f, u -> u.isAI() && u.isGrounded() && pay.canPickup(u) && u.within(unit, u.hitSize + unit.hitSize * 1.2f)); if(result != null){ Call.pickedUnitPayload(unit, result); diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 325881760b..02e2c20016 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -257,12 +257,12 @@ public class SectorDamage{ float healthMult = 1f + Mathf.clamp(unit.armor / 20f); sumHealth += unit.health*healthMult + unit.shield; - sumDps += unit.type().dpsEstimate; + sumDps += unit.type.dpsEstimate; if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ sumRps += h.amount / h.reload * 60f; } }else{ - curEnemyDps += unit.type().dpsEstimate; + curEnemyDps += unit.type.dpsEstimate; curEnemyHealth += unit.health; } } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index b9c119ee32..2d5310d325 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -260,8 +260,8 @@ public class ContentParser{ //TODO test this! read(() -> { //add reconstructor type - if(value.hasChild("requirements")){ - JsonValue rec = value.remove("requirements"); + if(value.has("requirements")){ + JsonValue rec = value.remove("requirements"); //intermediate class for parsing class UnitReq{ @@ -286,6 +286,16 @@ public class ContentParser{ } + //read extra default waves + if(value.has("waves")){ + SpawnGroup[] groups = parser.readValue(SpawnGroup[].class, value.get("waves")); + for(SpawnGroup group : groups){ + group.type = unit; + } + + Vars.defaultWaves.get().addAll(groups); + } + readFields(unit, value, true); }); diff --git a/core/src/mindustry/type/AmmoTypes.java b/core/src/mindustry/type/AmmoTypes.java index 5b7c885519..534bdbe703 100644 --- a/core/src/mindustry/type/AmmoTypes.java +++ b/core/src/mindustry/type/AmmoTypes.java @@ -48,8 +48,8 @@ public class AmmoTypes implements ContentList{ if(build.block.consumes.hasPower() && build.block.consumes.getPower().buffered){ float amount = closest.build.power.status * build.block.consumes.getPower().capacity; - float powerPerAmmo = totalPower / unit.type().ammoCapacity; - float ammoRequired = unit.type().ammoCapacity - unit.ammo; + float powerPerAmmo = totalPower / unit.type.ammoCapacity; + float ammoRequired = unit.type.ammoCapacity - unit.ammo; float powerRequired = ammoRequired * powerPerAmmo; float powerTaken = Math.min(amount, powerRequired); diff --git a/core/src/mindustry/type/ItemStack.java b/core/src/mindustry/type/ItemStack.java index d5f4097b58..e2e0d2d5f4 100644 --- a/core/src/mindustry/type/ItemStack.java +++ b/core/src/mindustry/type/ItemStack.java @@ -64,6 +64,13 @@ public class ItemStack implements Comparable{ return item.compareTo(itemStack.item); } + @Override + public boolean equals(Object o){ + if(this == o) return true; + if(!(o instanceof ItemStack stack)) return false; + return amount == stack.amount && item == stack.item; + } + @Override public String toString(){ return "ItemStack{" + diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index eb0bedb60c..90488c62ea 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -56,7 +56,7 @@ public class StatusEffect extends MappableContent{ } if(effect != Fx.none && Mathf.chanceDelta(effectChance)){ - Tmp.v1.rnd(unit.type().hitSize /2f); + Tmp.v1.rnd(unit.type.hitSize /2f); effect.at(unit.x + Tmp.v1.x, unit.y + Tmp.v1.y); } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 68fdd6837e..7d0c3fd98b 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -117,7 +117,7 @@ public class UnitType extends UnlockableContent{ public Unit create(Team team){ Unit unit = constructor.get(); unit.team = team; - unit.type(this); + unit.setType(this); unit.ammo = ammoCapacity; //fill up on ammo upon creation unit.elevation = flying ? 1f : 0; unit.heal(); diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 327e65cd13..d51c83881d 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -712,7 +712,7 @@ public class HudFragment extends Fragment{ t.add(new SideBar(() -> player.unit().healthf(), () -> true, true)).width(bw).growY().padRight(pad); t.image(() -> player.icon()).scaling(Scaling.bounded).grow().maxWidth(54f); t.add(new SideBar(() -> player.dead() ? 0f : player.displayAmmo() ? player.unit().ammof() : player.unit().healthf(), () -> !player.displayAmmo(), false)).width(bw).growY().padLeft(pad).update(b -> { - b.color.set(player.displayAmmo() ? player.dead() || player.unit() instanceof BlockUnitc ? Pal.ammo : player.unit().type().ammoType.color : Pal.health); + b.color.set(player.displayAmmo() ? player.dead() || player.unit() instanceof BlockUnitc ? Pal.ammo : player.unit().type.ammoType.color : Pal.health); }); t.getChildren().get(1).toFront(); diff --git a/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java b/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java index 1f74360ed5..3808f7c360 100644 --- a/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java +++ b/core/src/mindustry/world/blocks/defense/TractorBeamTurret.java @@ -75,7 +75,7 @@ public class TractorBeamTurret extends Block{ } //look at target - if(target != null && target.within(this, range) && target.team() != team && target.type().flying && efficiency() > 0.01f){ + if(target != null && target.within(this, range) && target.team() != team && target.type.flying && efficiency() > 0.01f){ any = true; float dest = angleTo(target); rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta()); diff --git a/core/src/mindustry/world/blocks/payloads/UnitPayload.java b/core/src/mindustry/world/blocks/payloads/UnitPayload.java index 724df792fa..2292244864 100644 --- a/core/src/mindustry/world/blocks/payloads/UnitPayload.java +++ b/core/src/mindustry/world/blocks/payloads/UnitPayload.java @@ -43,7 +43,7 @@ public class UnitPayload implements Payload{ @Override public boolean dump(){ - if(!Units.canCreate(unit.team, unit.type())){ + if(!Units.canCreate(unit.team, unit.type)){ deactiveTime = 1f; return false; } @@ -74,7 +74,7 @@ public class UnitPayload implements Payload{ @Override public void draw(){ Drawf.shadow(unit.x, unit.y, 20); - Draw.rect(unit.type().icon(Cicon.full), unit.x, unit.y, unit.rotation - 90); + Draw.rect(unit.type.icon(Cicon.full), unit.x, unit.y, unit.rotation - 90); //draw warning if(deactiveTime > 0){ diff --git a/core/src/mindustry/world/blocks/units/Reconstructor.java b/core/src/mindustry/world/blocks/units/Reconstructor.java index 5b5696bf4c..326a9f06eb 100644 --- a/core/src/mindustry/world/blocks/units/Reconstructor.java +++ b/core/src/mindustry/world/blocks/units/Reconstructor.java @@ -90,7 +90,7 @@ public class Reconstructor extends UnitBlock{ return this.payload == null && relativeTo(source) != rotation && payload instanceof UnitPayload - && hasUpgrade(((UnitPayload)payload).unit.type()); + && hasUpgrade(((UnitPayload)payload).unit.type); } @Override @@ -114,9 +114,9 @@ public class Reconstructor extends UnitBlock{ if(constructing() && hasArrived()){ Draw.draw(Layer.blockOver, () -> { Draw.alpha(1f - progress/ constructTime); - Draw.rect(payload.unit.type().icon(Cicon.full), x, y, rotdeg() - 90); + Draw.rect(payload.unit.type.icon(Cicon.full), x, y, rotdeg() - 90); Draw.reset(); - Drawf.construct(this, upgrade(payload.unit.type()), rotdeg() - 90f, progress / constructTime, speedScl, time); + Drawf.construct(this, upgrade(payload.unit.type), rotdeg() - 90f, progress / constructTime, speedScl, time); }); }else{ Draw.z(Layer.blockOver); @@ -135,7 +135,7 @@ public class Reconstructor extends UnitBlock{ if(payload != null){ //check if offloading - if(!hasUpgrade(payload.unit.type())){ + if(!hasUpgrade(payload.unit.type)){ moveOutPayload(); }else{ //update progress if(moveInPayload()){ @@ -146,7 +146,7 @@ public class Reconstructor extends UnitBlock{ //upgrade the unit if(progress >= constructTime){ - payload.unit = upgrade(payload.unit.type()).create(payload.unit.team()); + payload.unit = upgrade(payload.unit.type).create(payload.unit.team()); progress = 0; Effect.shake(2f, 3f, this); Fx.producesmoke.at(this); @@ -168,12 +168,12 @@ public class Reconstructor extends UnitBlock{ public UnitType unit(){ if(payload == null) return null; - UnitType t = upgrade(payload.unit.type()); + UnitType t = upgrade(payload.unit.type); return t != null && t.unlockedNow() ? t : null; } public boolean constructing(){ - return payload != null && hasUpgrade(payload.unit.type()); + return payload != null && hasUpgrade(payload.unit.type); } public boolean hasUpgrade(UnitType type){ diff --git a/core/src/mindustry/world/blocks/units/ResupplyPoint.java b/core/src/mindustry/world/blocks/units/ResupplyPoint.java index 2714be2358..6402b20147 100644 --- a/core/src/mindustry/world/blocks/units/ResupplyPoint.java +++ b/core/src/mindustry/world/blocks/units/ResupplyPoint.java @@ -65,10 +65,10 @@ public class ResupplyPoint extends Block{ public static boolean resupply(Team team, float x, float y, float range, float ammoAmount, Color ammoColor, Boolf valid){ if(!state.rules.unitAmmo) return false; - Unit unit = Units.closest(team, x, y, range, u -> u.type().ammoType instanceof ItemAmmoType && u.ammo <= u.type().ammoCapacity - ammoAmount && valid.get(u)); + Unit unit = Units.closest(team, x, y, range, u -> u.type.ammoType instanceof ItemAmmoType && u.ammo <= u.type.ammoCapacity - ammoAmount && valid.get(u)); if(unit != null){ Fx.itemTransfer.at(x, y, ammoAmount / 2f, ammoColor, unit); - unit.ammo = Math.min(unit.ammo + ammoAmount, unit.type().ammoCapacity); + unit.ammo = Math.min(unit.ammo + ammoAmount, unit.type.ammoCapacity); return true; } diff --git a/desktop/src/mindustry/desktop/steam/SStats.java b/desktop/src/mindustry/desktop/steam/SStats.java index 7e7c9ecef3..925c670223 100644 --- a/desktop/src/mindustry/desktop/steam/SStats.java +++ b/desktop/src/mindustry/desktop/steam/SStats.java @@ -60,7 +60,7 @@ public class SStats implements SteamUserStatsCallback{ // active10Phantoms.complete(); //} - if(Groups.unit.count(u -> u.type() == UnitTypes.crawler && u.team() == player.team()) >= 50){ + if(Groups.unit.count(u -> u.type == UnitTypes.crawler && u.team() == player.team()) >= 50){ active50Crawlers.complete(); } From ef2bf2e12906b7e61005dc2d9e59f27d9c819c54 Mon Sep 17 00:00:00 2001 From: DeltaNedas Date: Sat, 17 Oct 2020 15:38:12 +0100 Subject: [PATCH 043/124] add universeDraw event --- core/src/mindustry/game/EventType.java | 5 ++++- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index b786bb47f7..cc71e17224 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -36,8 +36,11 @@ public class EventType{ postDraw, uiDrawBegin, uiDrawEnd, - //before/after bloom used, skybox or planets drawn - use Vars.renderer.planets + //before/after bloom used, skybox or planets drawn universeDrawBegin, + //skybox drawn and bloom is enabled - use Vars.renderer.planets + universeDraw, + //planets drawn and bloom disabled universeDrawEnd } diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 14a4cc8820..6398839677 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -89,6 +89,8 @@ public class PlanetRenderer implements Disposable{ skybox.render(cam.combined); + Events.fire(Trigger.universeDraw); + renderPlanet(solarSystem); endBloom(); From c99873c8236d787de25338e53b68b541704346f3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Oct 2020 11:02:48 -0400 Subject: [PATCH 044/124] Added bool to enable editor cliff button --- .../sprites/blocks/environment/cliff.png | Bin 258 -> 274 bytes core/assets/sprites/block_colors.png | Bin 825 -> 827 bytes core/assets/sprites/fallback/sprites5.png | Bin 186601 -> 190052 bytes core/assets/sprites/fallback/sprites6.png | Bin 381400 -> 381360 bytes core/assets/sprites/fallback/sprites7.png | Bin 438916 -> 439082 bytes core/assets/sprites/fallback/sprites8.png | Bin 1446263 -> 1447636 bytes core/assets/sprites/sprites2.png | Bin 187893 -> 191167 bytes core/assets/sprites/sprites3.png | Bin 362945 -> 362837 bytes core/assets/sprites/sprites4.png | Bin 436017 -> 436118 bytes core/assets/sprites/sprites5.png | Bin 1495323 -> 1497416 bytes core/src/mindustry/Vars.java | 2 + core/src/mindustry/editor/MapEditor.java | 47 ++++++++++++++++++ .../src/mindustry/editor/MapEditorDialog.java | 10 +++- core/src/mindustry/mod/ContentParser.java | 3 +- 14 files changed, 60 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/blocks/environment/cliff.png b/core/assets-raw/sprites/blocks/environment/cliff.png index 9d76c62084dde6fe50471e08ff9657408b4b7708..0ea51ef09b8fabdac4d0e506141471e6dc65dd67 100644 GIT binary patch delta 233 zcmZo-n#450u>Opvi(^Pc>)Gj%d<_abE=Pagm$bi=+<4B1arTTIhVNHSOpV-f>bP6D z(8D4z?SQH*i+;f!4=msB*4&%4z$fGZ^Zq6ePL~B7;VOHWd@Zye3Kkre?40HxTGy0y zJ!;OZ25!DP$(y{G1Y#y`m?ZF{^1v2D))xxf-hN)gwA}bf_zJJ2B?%Tf8?BgkU)8r` zylTLd$Ljl+cj|%-eH{~bNVAq6o#OH(fyMKSR9~!6TE>GGmT4~xRg1m9%$Z`Q>gIF0 qTS!@4O`g*<|JS1s-O9>+j9n#*q(%OHoW{Vwz~JfX=d#Wzp$PzM;$sy6 delta 217 zcmbQl)WkHwuzruHi(^Pc>(yxo`3@`aI6uz(|Nr!xmMLy8xo#*Q-X5k~r>Lguv*KD* zbrlVEKI7i^0R|)qGM;As7w~s~*hwi+Y!t*02>+gq~mzvJFa0cFM zDr)$D{s4!_;_oXuA6=gP(u{edQ|Qq+h7B@KSNj5%H#EL@Ul*HT!o2zI$L!qys@<(M a3|doi1VbM_*vP=Zz~JfX=d#Wzp$Py9bz%+x diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index 3e19c96e6186b90b07a2038235d4b03b0126f6c7..e8845aa0722d468a56a91b9ad216f89726cd3985 100644 GIT binary patch delta 804 zcmdnVwwrB&N;P^t{zC|J>=fw2XBX z%WT_*gY{yy`SNcM>OH-5U1WOs%xz}`c1(F-@cuJ%%f{`qoi-l)-v6*)+`!0&$Nui) z2l^fSNB@76P-!-J*YoL(<)f36>zNm>?l}0*(8oOGOq%NlAK|V=ofEgOH@H;U`;g!6 z>7<9sdi&~Uo(^A^^yh=j@?Go|>v#8;@Ba1T?d}5yW`3SyU(C1L_{@b16AVhE{%zi0 zvCBha+EIC*2mGoL=bqeH6JD`IZ_zUG3De3ic&Tpb6*^nebhf8ume=Iz(m$9aSDh7F zSl?OrZL^--(>WH0_HX|oz5mb5NA2;8TjrQLt&{q*hu435#m~iar~AJ>A=-PVNY?dY z>!NKDe z*|n}7|A?KImS?YQ;h(MCaq&sQsT}8NTru-EBy6h)tXJ_oq8j@`cPbax#5a10^{pw} zT(SbwAHS;&(=L5hT>WB}N{O%F{mjg+qIv7LrG8u0eMkR%vHpIK$K9fG_f9_ED$aSN z>rBO@9d9F7t>h^>;jXoM!s#m!@e?|hz89DupPHH5`FGc$?OU1pUkjamW!1a3RLfi2 z<&IujZJ^RZm6f;a9mSF?FMVPbn#t?++WJTSJqNE-Ia5MoiX&w7D4idDC6%~T0FslKR8*zorAD`7z< zr`O(Jb!&h0%C)C5QYHJXTdxW^cD;7W`dYq1Zg)$$RsTto(>G>JogsU_|MJX(Hcy}B ZTgNN?3Y~O5j)8%J!PC{xWt~$(69AC+oVox2 delta 802 zcmdnZwv%mwNRESI|K-!^OQwGn_m!$!$@T5})lMF@Y5}$6SBrNa zSdimiC-!~AcH6fH9?oh1TyicmJKOPXO)$fwssHUQ3U7JuS3Ky@Uf=oso?ObSuI9(G z&nul}o;?(Q{~_x3>n~rv6n{#wkBzn6B5&=M?`|E=-oIIL-jcsB0?%#Te{|yE_6;|g zCH^eG`2E|(ckhDqY!~d!Z784}QuQqK8XTV=CqP`8!z z_IDeiRvOR0?R;HjVRqM#IPc&opKEsOZVr!q;#WEE_D@%-`1J+v)8y9g^-u^)IX3x7 z?)f0!)CtaZL6NO7%Z~kOa?z=s{Ns<7ceeMN>!SNsi&lh8&j`DonX@)HGD`7Lnc?eh zAx>4#yBwPY>Q7Ic_I}cdoPenN2kZYz1qG!oUh`$iP>guc>iyxbHhNbq|2)HIb5Cz%=g+?u(sL!x1n2!@JEWyj V_3BB65Ca1PgQu&X%Q~loCIIHEakt5%=b9_r)a} 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%0A>1DA1?W`9! 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

;ub8cAxA&ioc6FTM_k)k`3Ht9? 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­}$mEy0T_F*VpF)=>^hDS1jC=p87og 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%0D|_Uf@-Iz@&c}Z{`y5MM^T~ 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ℜ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 |z1EkjSzP(v+ul&**@egr)*&l4fvd?_^ z<`&*55s)Uht9?n?d{eID-;Z3VegEKG#S_MPH~6omhpm2}FzfI2*$1B=V$UmpB%8+p zap{R=x^F-3xh;OL@utXC*$KRH_H%C~7q(4%a>RetHQ`jKQ4pkS#_%*MS-un9W-kT0_o;4O%=2Yk>GrtdC`D?=u-5cxB z)^8)+pE=vag-2umHJg(Whv#!XyBw@8*RT98#sidukIqjvIBM}h^~25wGoxj+m_bc1 ziz(M5XT*BnF2DBCyC?A}+orl(Z|869`T6V8P2u*OqmfIB)GG5!T{LADOmY|E|FHOh z%9MFo+-=>*5-s$WGhQ!PbmrkirCv#gU0bVkUUiu4TKU1XYdXV`_YGhDtZt>xbu1Uu ze|PW|i%8@ZnbeHnnTNNk>|?yH-4QR56L?1X$kzhdH{ca=YwoqZo&DmMV9QF~Ups3e z&ZznS*~1x{ez`t0$9L97xkLGDV-49oM9!y`*7em}PSX!NVM+g(9B zybsiG(D$>8IOFIWsBus9Z&B0dxrWDjgl;`<`W;~w_U?vwLhP4$?T4eJLakjmrz~7) zx;^9CXB~t2soDPJa~AK2?aV*;b@tP@J6S(l7&0(4FnGE+hU{wZjc1;>_WFFO_EVrW zoThwFOU2Tz2mRvNR4u2o>g|2K#Q!Ip?o9WbRy0rJ|1JsbVxjyUqO(;Z!|G?ZH?rxmm}PEj*OHH27H_ z>!e1%3CzuQa$)%Yv1Yy1`A()nrR3v*W^Wmv*xsHglKPDCJMWhHzc)-tOX>0cZdtb| zt6gK`r=lls!()TCO*{YS{M=pDtIF1^fArlk&;5((gPS{auUmxhiOmPCzhA%EVE43d z5&QaTljOtdOe+u6=I3ZU_>p9^vd3|uS7v~ZhODbvyP#R+)dL2R*Cv`huKaST;Wx+g z{yCR8BWGFul{(tS{BnhU4Qp=PABl+j-TNn0apg&ioo{}v!Oj2roWnmwr-u3ma~5t3 zjGSsAuUCBG-p;MB-Z`z=jHPUOq^dEcdBG&QcTIEj%8m% zx;_b>Kk!QRy5OU}?WPK6H12MZ?Ah$8*;W%MbLdZc=J(?-@2&gFchqwBEj!Kc?CC*Y zOidMd{=aNBev^AksbecTpD-!L5E`~Rz_Y|$L0o7HH1AZp| z=~xtC^FDmT$LlvNeq|p_|MZ3Bz`R>GHZ(r&KDor`+^oU}(H629-yCl}o1JNDaORVF zqU^ke0IOqaywCqhsdcNLIb7zl!DMq(YFtjs#Izqr#2*wrR1%kGdiC?70`M@Cm>aC~f-`y)&TV-?ol|^ce>y9<33%_GFka^it^y-%KtB9XlOUx#OcYEgu zJ~|s=9r>vC?ZUFukD6ztcK;IT+3s#@@#oWa`%fop`RnFQd⁣dGO;=m!O|bi)4Lz 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%0AG|6%(=|t| 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