diff --git a/.github/workflows/upload-dispatch.yml b/.github/workflows/upload-dispatch.yml new file mode 100644 index 0000000..3a9c761 --- /dev/null +++ b/.github/workflows/upload-dispatch.yml @@ -0,0 +1,12 @@ +name: Mod Portal Upload + +on: workflow_dispatch + +permissions: + contents: write + +jobs: + portal-upload: + name: "Upload to mod portal" + uses: pyanodon/pyanodontests/.github/workflows/portal-upload.yml@v1 + secrets: inherit \ No newline at end of file diff --git a/cached-configs/pycoalprocessing+pyfusionenergy+pyindustry.lua b/cached-configs/pycoalprocessing+pyfusionenergy+pyindustry.lua index de42fb9..aaabf58 100644 --- a/cached-configs/pycoalprocessing+pyfusionenergy+pyindustry.lua +++ b/cached-configs/pycoalprocessing+pyfusionenergy+pyindustry.lua @@ -2,261 +2,258 @@ AHsAYQBjAGUAdAB5AGwAZQBuAGUAPQB7AGMAbwB1AG4AdAA9ADMAMAAwACwAZQBzAHMBBwB0AGkAYQBsAD0AdAByAHUAZQAsAGkA bgBnAHIAZQBkAGkBGQBzAQoAewAiAGMAaABlAG0AaQBjARwALQBzAGMBKgBuAQIALQBwAQEAawAiACwAMQB9ACwBLgBsAG8AZwBp AHMBGgBjATcBOQEHATwBPgBjAUABQgFEAS4AYQB1AHQAbwBtAGEBGgBvAG4BTgE6AVEBPwFBAUMBRABvAHIAZABlAHIAPQAiAVgB -WgB0AGUBMAAtAFsBEwAwADEAMwA4AF0BdAEBAQMBBQEHAGUAXQFBAHABJwEnAHEAdQFKAGkBcQEsAS4BMAEyATQBNgE4AWIAZQE9 +WgB0AGUBMAAtAFsBEwAwADEAMwA3AF0BdAEBAQMBBQEHAGUAXQFBAHABJwEnAHEAdQFKAGkBcQEsAS4BMAEyATQBNgE4AWIAZQE9 AWQBRAEaAG0BCQESAUQAWwFuAGQAdgBhATsBKAAtATkAcgBjAYgAdAAiAF0BCgEMAQ4BEAF4ARQBFgEYAQ8BGwEdAR8BIQEjASUB JwEpASsBLQAiAUcBSQFLATQBYQFQAZQBUgFUAUMBRQFuAVkBWwFdAGkBXwHEAaIBlQFTAWUAfQFnAWkBawFtAW8AbwFxAXMBdQF2 ADgAMwF7AFsAYQGfAaEBAgBkAaQAaQGmAagBggAsAYQBawBlAYcBiQGLAQoAIgBwAGwAYQHCAGMAcwAiAZcAaQGZAREAMAGcAZ4B oAGiAekBDABtAGIBJAFdAWgB/QGrAQsBDQEPAD0AMQAxAbEBFwEZAbUAPQBmARwBGAG5ASYBKAE6AHQBjAFGAUgBSgFMAdEBYwHU AVUBygHbAVwBXgFgAZIBxQHTAcgB1gAsAWgBagFsAcsBcAFyAGgBdAF2ADAANgA2AeMB5QIGAegBpAFbAgsAbgINAHIAcwHuAfAB hgGIAHMBigEWAfYBpQGnAYoALQEIAHQAdwFoAUAB/wIBAZsALAGdAkUB5wGjAi8BawG1AT0AcgBvAQIBFwEkAGcBqgGsAhIBEAA3 -ADUBFQIYAbQBHAEeASABIgJwAbsCIgIkAb8CJgH7AikBxgFkAiwBVwHMAi8BzwIxAU8B0gHHAdUB1wI5AdoBzAHdAj4B3wETADYB -egF8AeYCBwAtAmgAcgJqAYQCbQGyAnACTwGFAfICUgJUAYwAIgBmAGkAbAEfAc4BXwFBAS8BIABzATEAcgK1AQwBOwEnAXEB/gAs +ADUBFQIYAbQBHAEeASABIgJwAbsCIgIkAb8CJgH7AikBxgFkAiwBVwHMAi8BzwIxAU8B0gHHAdUB1wI5AdoBzAHdAj4B3wETADYA +OAJEAeYCBwAtAmgAcgJqAYQCbQGyAnACTwGFAfICUgJUAYwAIgBmAGkAbAEfAc4BXwFBAS8BIABzATEAcgK1AQwBOwEnAXEB/gAs AZgBmgIDAmMCBQJmAekCoQKjAmwCbgJTASUALQAyAnICEQGuAgICFwGzARoCewG3An4BugIhAb0AewGNATEBMwE1AGwChgI0AdUB -ygHAAicBwwIyApACiAHJAooBWgKMAdAC6wIqAjUCkwHZAjsB3AI9Aj8BEwAxADICQwKdAkYCZwFdAmkBNgKkAswCcALPAqgB8QHz +ygHAAicBwwIyApACiAHJAooBWgKMAdAC6wIqAjUCkwHZAjsB3AI9Aj8BEwAxADIANQKdAkYCZwFdAmkBNgKkAswCcALPAqgB8QHz AlMB9QLfAY8C4gLkApEALALGAp8CyQMFAssCpgElAsACwgICAgQCZQMWASQDCAIcATkAbAGKASoCDwJzAtMBEgLVAhkC2AJ9Ah8C -gALdAw8C4QGRAo8C9ALmAiUBwQIoAvMChwIrAu4C+ALxAo4BkwLlAVUC9gI6AdsClwL7AXcANAAxAkQCngJHATMAbgMjAQECsAMn -ARYDCgJRAfQCVQEuAGUAeAE1AaACMAAtADECtQLoAfsAcwLPArsC4AGQAuMDPQNFACICXQBvAekDBgMaAnECYALDAx8DUAGjAG8C -sAJrAqUCbwMbAhABrQITAnYDLQJ6AbYDMAJ/AtwBDwKCAqQAZAB1AGMDYgNuAxMDQAGOAzUDbQM3Az4CNQLnAoQDPAOZA0UDQAIu -ArMDQwIzA5QCNgI4AvcDSQL6ApkAMgL9A08DAQHpA3wC4wN0A4AAZwNZAqoDWwKtA44DkAOSA58DEwKuASEDswJsA48DkQKNAxwC -AAEJADYCxABhAHIBGgBsAQYAcgB5AyoCEwA5ARMCeALWAhoCHABsAh4DigG8A4wBvgOWA2wDEgLtAVYCgwM7AuoDvgPkAi0CiwOj -A+MDPwPlATMDJgB0A8wAeQPuAvUCNwHYA0gClgOrAXYAMQA4Av8B5APNArAD0AB5A7cDDAKsAfYD8wBuAVQAIgByAeUDzANoAG0A -awF3A8cCYQLEAmQEAgPPAWsD9QLQA4ICdAIUAywD1wMuAR0D2gPcAtsD3gIjA+ADawMRA5MD6gM6AukBTQQtA+8D6wLwA+0EMgOb -AS4D8QGKA/QD9gKSA/gClAL4A0oDrAF3AkQEGQQEAwkBgwKpBAcDDgFuBEYEGwQVA3gCxQPMA84ERwK4AGUDzwAtBA4BJQGUA2QE -HgLTAbADhgLXBCQCHQLaAiAEKAKCA+EELAPpBDMELwKFBDcDOQNBBDYEawQ4ACIEOgPzA9EEPQNGBD8DqQP7Ad4D/QA5ADkERQRU -BBsBNwExBFgEWgBnBFwEBgKrBEwEUwQDBE8DdwMeBFIETgR4BFYEhwGhBIkDaQReA4QANQRhA9kEZAMxA4sEKQLeAS8EKwM2A0QD -pgOcA+cEMQRzBHADogO9BKgELgR1A1YEdwP1BG8EegOoA/oCPAR+ARMAMgAwAeIBfASUBLYEhgLjBIgBlAAyBIsDuQH2BI4EGgSV -BMQEWQSYBFwEUASSBBgEgwTOBFcExQTRAC0AMwLRA4MBrwQhAbIEIwIbBKAD3QKBBCoDEASnA6UEsgNmA54EsQRsBHEEsATqBO8E -dgQ8BLcBZgR7BLoC+QS8ADAAMgT9BIIEjwTXBJcEWwTbBMkDDQNcBE0E1gTDBNgE0AUDAtAEkQJiBNUFAAUKBQIEmQA0BN0EHwS+ -A9YE4QOHBOMD2wRlAzID3wSkBGkE6QLsBO8E7APoBO4EdASvAo0EeQNABPQElQStBLgD+QKVBLsCmAF2BP0EgQTBBQkEhQULBMYA -LQA0BQUECAFXBMIFPAUUAZQE3AUPBBcFCAUSBUUE2QUDADUFFwRfBRkEIgUcBCUFHwSiBGgEpgOYBSkEcAUnBKwFXAKJBPAFLAT2 -A/AEtAT1BTEE9wS5BTQE+gU2BL0AMwQABMwEVQTPBT4ANQVBBI0FRASWBU4FFQTTBRAFSwTNBRMFegGUADYFUQITADEDygSeAnsF -VgShBGcBvgO7A8UC8gVoA+UFIwVbBPIEdAVeBS0D5QUrBZAFYAUuBWYFMAWcA6cFMwRBA/wEvQA1BXUFOgVMBXkFDASZAkMESQML -BIwFBwVxBIQFqgV0ArUFjgTxBSUCXwLBA8gAPQPKAx8FeAVzBNoANwWEARAFGQWIBGMFHgWLBOYEpAW3BWMFkQHKBZMFmASqBDAF -0gLvAc0FuAM4BWEFLwS2BZEDRwVrBEIFNwA2BMAEAQU7BbQFwgV2BbEFwAU9BNoFgwSRBb4EkwXlBcEFAwA4BcQAPQAyA4UFVARi -BR0EJgRmBcsBLgXNBZsFlQRwBdEFZAXTBG4FzwXWA0IF1QSzA/IFZwWgBd4FowT7Av4FOQXkBakF8gSZAXoFrgNaBQYCrQWyBQEF -gQAtBcMF7gVKBh4FgAWrAZQAOQX1ADME4AJ5BfoFigTlAzMAIgFZBLQF3AWgAcoGAAOkBbkGAwVaBgsFlwYFBgkEcgY2BDkFngY1 -BgIFMgRAA6oGEgA3A04FqAV/BU0GJwAtBIEGGgO4BhwEywXqBUYALQX0AxQGMwPyBkUGOgYjBb8F8QXrBQMCFgX1ADQBdgX5BJ8F -yQYwBSEBLgZcAYoGXgXZA0AGOAYLBgQGCAPmBdQGPwViBgEGOgXaBkQFmAYQBkkFbQT8ADcF4wYlBk8FPgIWBegGHQZXBiAGKQZg -BfAGFgZjBJkCFQX1BJ0FGgYtBmoF/AUgBKMGbgPOBnAGCwZ0BnoGdgZCBngGBwalBZoGOQZyBWUGDQWfBkYFaQWiBoIDSwX3BXAG -jQZQAhUGiwZWBmIGWAZlBpAFEQZOBeYGZAQdA9MFxQX4BRsGLgTkBCcF/gYyBp8BBAahA8MDvAXOBqUGpAavA+UGPgZ3BqkGCwXb -BoAE+AXfBaQE/AA4BkwGFQbABhcEXATIBlMESwXpBrsGIAaVBr4FfgVyBpMEXATcBJsAdABfAGYBaABtAHUB+QFtACgFhwAwACkA -IAArACAAMgBeAEwAKgIWARMBQQbHBpoFVwWMBKQAcwFSAZQGegZvBs4GegaiBncG1AZ9A0AG1waoA+wF2AOaBHAG2wVkBoEEfQaD -ADID1QT/BuQG8QNjAeIG6AWwBowG6wa3AtADFALLAGsBAwE3ArAAbwTTBe8GvwbwBFgHEABlAaMEXQbEBvYG+Ab6AGEG/ARgBwAH -AgcIADAAKwAzAF4AKABMA2MAKQcHAXYHCgaZBYkGyQX9BjEHGQarBgYE7QbVBDQF1wbSB2IGQwatBnEHIAZHBHwFNQazARMHKQc+ -A20AcAdBAekDTgcuBMoFQwUJBXwGJALwAcMAYgJJBfUC/QaYA9gHWgZrBsoGMQcUB2kDoAPlBxcG0wY8BnoHHAdmBnsGqgdqBZ0H -aAbcBWoGEQcmADQFpwHkB30BTQd/AgoGuQaeBjQEeQQNAm0HNgEfAHkHOwYkBx4BowQOA30CsgBuBxABaAPzAjAGKgA2BmkHhQab -BVgBvgbZByMG3QeaA0sEvwA3AkQHrgHpB7AC4weyB7QDzQOjB6MEDQBhArAAdwBhB6sEkQS+AUQGqQbEBfYFxwJ8AbgGbAadB5MH -mAaxByUHwwAxB50GqQfPBFcBcgEfAV8BNAH9B9YHrQQ1A2IGwwLSAhMFbwe6A4gH3geHBm0GpgdhBxoFmQceB2UH/wckB20CmQAw -ADQHxQF8CAEB0AbnAe8ESgcvAfYHkQZfBbsEFgMfCAsBYAbzB9oGxgdZB/kHDQbLB40HkgdeB5UG1gOdBSgHkge/Bd0HwQayBEMF -cAgXBQQHdwZVBf8G0AWPB5QDbwBiBvoAawAtASQBGAPNAWsCtQdAAmcDcgb6AGUHrAgWB/IIAgM4AhAHCwMvAbgHmQgrAkAE/AfG -CEcGfAL0B88BSwBlAGEAbQE9AG8Adwg+AjYCLgBvAgsDJgBzAG0H2gT9B/gF+wgeBjEIKAYPCCoH5AgGADIH5wKLCGEDVghkB+kB -JQEkCEQH8AFEAGIBXQFxA9EH2gecB9wC2QXKB10HjwZ3CBIHXwZABx8HiwgEBWwDSwfmBeMIfQB0CH8EBQgwBUIAIgBzBvoAZgB1 -AHIDfgMHAxsFSQIECJMIlQAtA7gAcAGZAQ8F9QA2BJ0IaAYvB/sH4AgiB4sHYAgmB/8HYwYKB8AITghvA/0ANwVAAXQIpASECKcI -qQB0B88IwAPRCD8AbwH5CJ4BPgEIAuMIwgEZB3sIowh+BIQEEgAyCKYB8wioCNAG9AA9A9UH3AivB1wH/AiyBKkEbQf+CIoH4Qi5 -B+MIBQR/CJII0wR4CNUI1wGICNkBDwjFCO0D9QjPCKoDFABwCFwBawAtA8wAbQFoA2UIXAAtAWoHswagAUsBIAORCJ0IeggUBFEB -nQBiBFcAdAg6AG0G+QNTBs4I9wGpCNsIggiuB1sGnAKCCIkIIwi3BkEG1QiOBeAC/AAwBhQJDwKxCRIJFAagCRcIVgjJA8wBlQjN -CPAAaQjyAakIogAsAgsAbwKvAGwIZQf1ARAGLAeEBcgHvAcOAzQD4geQCCUFXwgnCC4I6AZICLsC/AAzB50JOgk8AG0HzwjiAogD -cABvA3IInwN1CNEJOQFoAV8IZgA3CGgIhAffAoIIbAkjCG4I6gF2ADMG4gd/AmwAbghWAHkBJQH6ArsAbwMYA38CzQBnA2ME0wfX -AsUJbwHQBBIE/AeBCUEE4gllCLADjQgzCIwI4wSlBOgFlAi2COQItQjmCWgIAwlqCI8DrAAyApwAWwmAAWAJgggNAlAGVAiYBIYA -aQB1CFoDtAl6ArUDIAJHA7IJXAO1CEUJfwQOAGsDIwFoATwHQwk/AtQJGweGCOAIsQiHBqUJHwizCIsISAgjCSQG3wL9BMgIvwmx -CbMBpgSKCJcETAlXAisH0AfSB9QJXgkOCckCzgb3CcsEmgiBCK0ISwlDCGoI4Qm9B5IJvwmMCZQGqwnEBPsAMQA0BAAAYgnWCXsJ -2AE8CZ8IDwd4ACIJ7ABhCbIJ1wm0BNIJOAnVCfYJygE8CBkJtwgbCUIIaQiFB/wIIAmQCY0DlwY9CUkGCwnlCcMJlgklBPwAMAgJ -CZsJ7QAtCe8FRwfPCgcF2Qn0ChYKGANpBu4J9Qn3Ce4J+QU/CYQHgwTiCN8JHQWNCYoJwgnACgkJRwiICgwGegoOCI0KEAbfBP0J -UgoeCiUFQAnNBQcKIgn+BUcJrwn8CiMKFwolBVAI2wXGCbkJRAgfCi0IVAkgCUYEagm+CjMG2AlMCCkIuglrBPwAMwnHChUJ/Qn4 -CdkFdQo+Aq0KQApfATwFFgohCjsJ2QWDCNsHggjeCRwHvQSkB4kGzwhCCDQGdQnhCggJ4wSyCjUJjAciClcI6QmXBTcANQiSCmkB -PAWtCA4FrwnzCmQKJApgArUKcgRvCmgKXgqLATwFwwpsBYcKSwnfB+AKjgZ3ChsKUAowClIJ4gpUBx0IUwg1CnwGfwlNB2wKgAS9 -ADYJbgqEAZQHxQpiAfYKigpGCmoKQwn0CDgIOgezAWsIfwYqCigFHAmHCbsJHgqhCUsKowp2CY4H4glOClkHggHjCDcAbAg5CDsK -ugFrCVYKdwocAhwBSwq4CDwKuwn7AS8DzABnAG8ALQH5AG4BKQLOAT4CCABhAVIGcAXEB0UAcgb5BvsAIgAoBpcG/wcBBwMHUQdT -ADEHVQXGB1gKAwoqCnAHpAZdCnMDxAmLBLIJzwWWCsIKCAp7BLIKfQhtClgKqQbgADAB4wE1AHIK3QrfAaEK4gl7CuQBpArmA1UB -BAfPBzUHNwJTAUcKtQsDBmYJ3AgcB90KmArBBKsKDQpWCwoKfwoRAhYEAAsDB88CrwEICKYBBgORCXAH7gmpA3oCCAHrAlgBqQMU -AQgAeARXAYoJXgEwAmwBMwmlB9oH9wndCyYKBQfgCnkE7wsHA+8J5waDADAANQoUC0YBWwmkCVUKsAmRCUoGfQiZAGUBPgQOB7cK -2gJXAagCWgEDAl0AcgFACNsLSwslCvsJRQf9CZIKnQtSA/cLCwoRC1YF4wtnAlkCWwtrAGsHzwtQBboDHQV9AGMDJgBmAGYIpgB4 -AfgAbwJTAHYBFgirCyQK+gpvC3ILIgVhC4IErgsrCWkLeAnFCqsLDwuHC4kDXguMC44DWAtdACILogFHC6QB/QMUBtsFDgkMBNQB -Lwl3AuMDJgGHAGUDJAe3CmwJhQVVC5QKTQp0CwEE7wuWBxsLBQmTC5oJlQucBhIC/gsPC7IK3wBpC7ULtwKNB88JqgN7A30JpwJw -CyELywvVAs4JtgTeB9sJZAOJCYgHvgvFCeYKNwT7AXcKXAEMCXgIoAl7B3YKhwYbCJgLdgl9BUoL6APCCXkDCAf0C9wCdgveB/oK -wAG+C5gFYQvwB2sE+Qt5ADYGFAvzCa0JegRIC+0JoQRMCTwCsge3AxQLWQtIAG0J1AuxC+kDdQTbCrwKbgm6CisFIgrTCp0L/gOh -C+IKDwvHBoMBeAt7C9gDGQO1CC8MCgbpAq0LlgR1AHUAawj/AHUAeAK1A3EDcwwpCagLZgl3AXECCAFfA/MIeQK6CNsI3Qv6CycE -5woKCUgLKQo0DCIKNgwkCJAAOQtYDDwBowK8DEABCAByB88BKQhZAV8CyAMiCKELrwJiArwAYwK+AQkJtwtvCgMKvwwcC14LKgrE -CqcMAgbfC1YLDgF0DGEMYwuBC8MHagthC2MDowwUArwJBwbRAdACbAd/AUwDKQm3CGcLTAtxBssMAAawCsgLDAT8CL4AWwx8AbcK -dQyAAdwH7gvRCBcIPwFxBFcMBwvWCHsCxQEMCMkDCAFaCF0IngvbBB8LkgopC7wIawxMA6YLVAfDADQMJwygAs4Mogj8C+wJoAwt -AfYBgAsRA/UDZAydAZ0MnwMmDLII+wieC/cEHwu6BsgMGwr8C3MLXwvEDGwKfgyLCy4IUQxyCVoMwAl7DLMMwwh3AWsAZwQcCXYM -sQzVDMIJfAk4DGIAZQuNAvkIZgAyDEULTglnDKsD5AytCHAJmgziDOQBcQfPBHcMmwxeAx0JfgxiAHUEVgFsDGUHuQtMDGgMyQwg -CAAMzQssDM8MbwWmCw8CtwK5DHUMSgStCTgBagBmAQcClAoBAncM/wvfC/wEpA0CCSELvwR0CwkLmwstDG8GhQHjDRANEgrRC6YN -HggTC4QCxAFqCQcAbwB5AdkJtwRgDOgJZgosC74KLgmMC8EIJA0NCqIHZApPCi8NKAvjDE4JmAyODSwH7A0vDFcNJwZ/BRYDFAEp -CQcBAQFaAroDFAhAAsgIQgEGCa8NLAibCJ0AaQB6A6MLSgq9BfoNAAuVDB4KLw0aCcENPgysC+QMJQVvDSMBFg1ZAqINXAIwCtIK -xgqPDF8FSgxZCP8K4QKgDF0CcQjbCKwIgw0XDGkKngUkCOYNZQjnDM4KqAsuADcGFA13DFsNegNTASULMgBsAYgB6QEYDHkMDwKu -ArAMDgUsCZ4LOgOwDY4DVAMlA1cLqwKuDZIAaQw4AbINWg1wA8YDFAfqCzcBwwEHAUkBCAwUAbwJEQkPAQECtAkZDKcLuwzIDWIN -cwoyDTsKww09CqQM7A1pCJAANAmaDbQALQ22ArwH6Qs2AR8Nrwh4DbINrAuIATQBYgP1CP8Djw1WDVIHcwhBDdkJCw0qAgQNTQEw -CtwBlA0kCrkJNAk2BfUMRAyGDKkJ4A2+ClMNwAsGDOsE8wqmDYcMbgnoBygBdA3iAGgN5AkDC7YBBwEYDegIwwuBAfoI/AB0CJ0C -vgW2DN8I/gkAC6wGfwTcDVIJMAjLAaEMmgkXCV4NTQKyA5EBaA1eDX8L+w2BDTkItAzLC3UN8w0dDfUNBQ2ICcUBEg0jAicEDg4a -DUgMLAgQClENgwx3DeYCOQwUC7YNEQORAC0HywEzAm8NuAhmBmgN7A28C70LAA03CwINYwmMDYUMiQWhDQYGEgYrAeMOOAfrDjsE -WghkAUoCUwFfCFYAdQdzCJ4BHAFHB6sI+Qw5AwgBDgtEBu4OOA3VAVAN1w1VCEQLbg1fBwwM6Qv9DHYKLw5LDO0D/QREAXQOZgM3 -DmkN3goaCi0AdgagDdgIQw43DdQOeQKgDmoJ2gm3DX4Klw5vDB0N7wqgDfEMzA3CCscOKAnoDAQOUA6DDdYOhQ3eDAkMtg4xAfcO -YQLODmMLPwunDpcOaA6ZDoEK2g54DpgOgAEGDBgI2woCDKgOQwYxCpwKLw4gDGoMSw0EDR8OTQcmB+YOlgKvDoQOqwoZC6YOswO/ -DqkOpQ7ACiALrwc8C6cNzgKiAU0MuQzaCP0AYwGnCuwCTAyDC9wOiQ0WDh4MyQ61DMoMaw6RDG0G3gnoDSIOdw7MDdAM2QP1AQEO -0wdHDVACTgumCMYOXw7LB+sOzQimDFYO0A4YAqIINwNiDLwNdQIEDa0Nzw7ODvUD9Q73AGkO+QUsDKUDKw5tCEwMRg0ZDnEJ5A4k -BD4NQgJAADkEAA7+DvMOzw8CDiwPBAYzAdAMtQnyCDEAIgNTCHQJpQ43DuUPAA7nCQMPGQ8FCAwMGQ6KDTQOjAxIDb8GeQpVDrgL -xg0gCegIcQ5QDyUO9A8nDwMPKgFgCfEKiA8fDC8PFQ7mDLoPKAkHDxoO+g8kDvIN0A2xDmsOHA0zC+APLwoxDfAPMg08CLgN9g7h -DCUF9w85D0wPAA9ODXIPMAVgAb8AdQnsAZAIqg6oDzoDUgMIAGQCogPPBfUEvg8tD1INZg3DC1MNxQgGCAcPXQ2uAU0PawLOD20E -AwyWDzQDOAydDxUH7QH8DkAPUQ0YD3QOkg33C1UEvw96B+wDUwH8D4EO3w0OC68JfgGdB+oDYQevB9EAbAeBAhYPcg+KDt0Otw+V -DicPjQfDBeIPXQ+bB8gPnQlWAV8M4gK/AxQErw+cB7EOVAj6B80LZQ78AsUPFwl8C24M/gslDWEMiA8PDAEPWgfDCVEOUA8BA2MI -xQlgAG4L8Q79D8kMxALTBVMO2Q8LDrYPMw+lDrkOkwtVADkF4w+8D0AL7gSNCzsB6gHsC0QMEAwoC/UCzgczBHUBAw38AG4IyQz1 -C+sONw/JCgAL3A3rD8ANgA7bDkgE6w8NCnoPwwyKD9oMTw8UD/MLMgPBA34ORQK0DmAP6Al7DqEJqQECAQQBBg3SACINWABsCJwN -bwx6D7IP4gMXC/QL6gNpDawP0A/yDycCuAEqAGwB6Q4WDbkMGgpMBjEOSg/+BqwEOwauDzUOugiQChMPyBAhAGgQIxAlCNgOAwum -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 -HHkCUwMRHHwcfg6sGDAJzBWwGdkUywLFHHgcehyMAmwcfQPFHI8YCxmkGYQbXhosHGIZIhuwHIcHnRyWHIsJeByaA84cgBgSF+sI -mBvPHKccexyZHI4crBf4FdIb/hyKHLIAbxyqHH8YexpaBJwajBtCHKIaRhplGEYcZhq1ADccaBy5HJgcuxy0HL4abRbGAq0XggH3 -HMscqRzOHJAYExy4HJcc1hybHLUFexvsHMEb7hnhGCEaZBffGgAb3AxvADgcyhzbC/QcvBycGFQKGhzVHO0c1xgLGqkFfRyxHMwc -7hzeAZQYOA8IGTcbkRw9GEIcPxgiHMUc5xzHGXQBeAHjHPgc3ByrHL4XRRqiGGMcchzyA34c+hy+GFUc2hyoHPMc3Ry+GFsYORxa -Dm4aXRxxGl8cXxphGLEWtxizGhcdBRqZFxoXYhJfHQodExyNHRsc2BdpHRAakQW2HTAcsx0yGDcKtR0LHRodDRzYF3UE3hp9GH8a -fxiBCvIYgwdTGIUHVgcJHOETYxiMBxMaXhPpGmAI5hpiELobYR0qHGUdLBYtGCcciRzsHRQc9BicCFYdTxhQHT0dXx06GBIXkxp2 -Ae8Y2QfuCBoSJBsgGsgc4xk+G2EbexxCAFsB+AH6DIIb4RmADJwSORu1GrkcIBraG6oVHR0BGVMdchlVGuAblgisHQocHwFoEesQ -HBO2DvEPew70D04WQQ3ZGq0UUBwxHY0IngjVB4EdHxVgENUdNgVhGpMdhRmpHScZqx1XHOYdKxhqGEgJ6h2MEfAarhxtHHAcXRhQ -DsUBOw56CEMQHRiLFugOxxv9Gg4CBBmzEAwbHxmFGkEX/RskHYcZcR10G5YANQbiHcEJFQ5ZEU4IyxStHX4dUwcgG+wb7R2EHcYa -3h0DHYkRlQS+ClwTaQfPG7MbixAFG50UNRsNDD0CSAEPB9EMVhG5GxkCWRscAGkMNRruGtEQGhmjDBQanx24DVYUuR3YGW8dyBn9 -G5URrgA5Hc0aaw6mAQYbMAxTCz0BqB34HgUdvRupGVAW1RxhG8QcoxvGCwwFhgmaHfkeBgTHHY8MFx2RHhkOwB4MGnMOfw6GEwoZ -8xjkGyEYrx3VDrQdJhcVHageARM+FL4cQx4NHiQYwBvFDp4eIgbOHg4cdw7oDtIJpQ7rEdAJghmCGBwcoBw8HdoZPB3/GkUatBl0 -ADkd4B48DuoB+Q1QE7kZjxL8HZIO/w87D0YO6R4+HlACDh34Hk4eWgJME7kW0Rn0HaARIB2kHkYZ+x5IGsodBxoCBL4dCh5eDtQe -URSZEQYdJAocGxEeWR5wHkAToQW2EmodkQyQHE0MfxxPGxYaqh3ADugHEA38ArEPnxz/HMIeExpGG3sANgyOHnYehgEcHBkdEAxz -AQMZnhv+FOgInR3tHOAYyhyhHoweShtFBAAbEQg3AHIMVh4IGWMIfwLKFkccMRmXF/gSvRGmGQ0bwhjmGdERrhnoHEMerhsUEr4S -SwdBHXwb5QIBD5gB9wP1B8scRwkpEsYVWgy7F9gdTR3+HacXOB3dFqIDrh64DlMBoQfMDbUJEBWLBqAeUw6dDZIZKhDIEbkbcxG7 -FHwdeRFkFPEerR7TB7MexR7XFQcaPhncGPsZpx2lGpUdVh4vFQMXPh7SHsQcbB7GHtgGzhyuFjgeww+2Hvge6h7ICXwMEBM3HuYe -9wPNDcofARUWHiUEnB6KHikedAqdHVUWcxxjG2IWLR63HXce/h7UHukJKh7rBs4c0BmQAfYWORsRHwce1h8cHwIdvh6DHJUfGR7o -HwAfJhUWGnsBrx2fFrQQuB2iBnMeKg04HiwXvB4uHxQdWBYDHA4VqBvIHm4e5x7VHwkfLhUoGqEc0RpvHVEedR8rH0Qe+R8dGmwd -PAP1B9MBJxbMDPoBlBkaAScBGAPMATAe7Rw7Hu8eZxpDHmkbAx5rHhYAMxwRH1MWGR9WDgEfWQEWG4oBMBpPGyMXSRkDAXEZLh7C -AC0fVABlH2sRMB9uH1wAaB5dH3gfagENDgEfWh9vH38UuR7LBKQbJhq1BP4e0h95H3sR5x9bAaYAaB68GMMerByUErgcHBA2AGMH -2grwH4kaox1jBqUfNQeMHzcR2B9hHD4fYxvaF4IaLxhIDYoebh+aATQRMwFTCx4HOQmvBA4XtAz8Eukfnx9kHVoatQJBAeMftxXE -EYIPDxRLH8ECTR5SGc0eEBj8HMMeoQyMGGwBdB/GBBETsxvOGZIQfA2yCtof0R5hHsoenh5FGewd2x+pG/AXowA0BhQf2R5yFbAR -Cx2UFJ4H0B+4H9IT3g+6ErUH1AliH7sfixfCBL8KXB/wCJYZYAEnDPEcJwlZCVsSTR/FD50Sth/aGU8fXxIHH8wbRBsFCZof+B5h -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 -G3gjXSLMIm4EACVOF3IXZxcHJIkkwAw2JTwlTyE9HLcbFyVZF4kWsCFkAD0L+SSAJVQkpSRjI2ki6R/1E/UlRSVgJVolPgHpI4UU -XyRkJTsX7iVHJVAc2SVkJXQlZiF8Hp0hfiSBJVUcxCNfJRAL5RYGAXQlZRdzFw8HzyWOJVsXAQwUJZIldgAtI7EZpRaaG6si5SNI -F4EkZB+sHQgKFCWWJUgjxyFzI4clpCV+IakFfSWpIT0gzxxZI9MH/CP8I5ckoxhkJQ4kcxWlJW8kZQYSJUQljSWBJY8W6CPlHlQg -pCWtIZAKtQw3IyAkcSQYH/QazCLPAFslyCQiG7cL8BRLJdASahyeIVIlnhzoC+Uk1CVFCVoRwhIZJV0HpiXVH5cRyiXjEBwlaB5D -It8eESWdJIIlMB4WIFwl3R//EmoleARMJRglGhbMH/0l5gwXI1MCxQt/EykB3ANoIV8dwyO0I1wlbSHPG2MHnSX+E0omACViJeEh -3AraJgocNAIjIVokuyYEI3gk5h+oJbcfvCOeHhYJmSXdC2wl/yYTFuIkyRN+JhESxSYBFu4lYwuwJiYTACYoJZQjkiSiJOMguSRh -ImwizCB4IP0dtCXuI8ENxyYfBzYmCyYiIWMhvwcVGFAmLAyBJi4Box8oDsomRSYMF0sHgSOzJeoVPCW0JQwWnSYGJOoloAPlH6Mh -uhF9JY0CXiYhJkcB6SGJHlQmSyZAJZQG7iZjJl8lmCPSJjElsyQtH6YmGCB1JhofqiZXJloloyZdJj8maCWmCfMmZyGoJccmdiYS -Jmglrwb1GH4g8yD1CvIAMQAuADUg9wA2IPkdTCVrGo0j+gqdJmwiASO5Jm8g2CToJBwmNiWJJIMLDAmZJnUmICZ3Ja4hDRN9JkQm -fiYnIaEmfSafJn8bEhmYF7clCiaOGyIXNiZVJVYblh4DJj0mXiarHLYRMwyBCzkmECalJi0muBfqGKwmMSP9JrEmcSVCI8EZJSXP -Jr4mRibAHhsecyaTBkYJWSapJqYBSxsTF/Ig6yZ7JtUmrCN1GDolhSOUIbEgtCZtIJUl7CWHBtomcyTsIm8mXCbTJr8m2hf4JfQF -ByXEJssmTA1QF/gmSQLEJfYJNSX4JF4k4iY0I7wmsyFtIpEBdCb4JRsjGRieEZka7BPFHfQDIRpWGzMNohtNGcUa+Q1bEYcO/AB9 +gALdAw8C4QGRAo8C9ALmAiUBwQIoAvMChwIrAu4C+ALxAo4BkwLlAVUC9gI6AdsClwL7AXcANAAwAwACxwKgAyICzgMkArADJwEW +AwoCUQH0AlUBLgBlAHgBNQGgAjAALQAxArUC6AH7AHMCzwK7AuABkALjAz0DRQAiAl0AbwHpAwYDGgJxAmACwwMfAp4CRwBvArAC +awKlAm8DGwIQAa0CEwJ2Ay0CegG2AzACfwLcAQ8CggKkAGQAdQBjA2EDbQMTA0ABjgM1A2wDNwM+AjUC5wKEAzwDmANFA0ACLgKz +A0MCMwOTAjYCOAL3A0kC+gKZADICFgNPAp8DewLjA3MDfwBnA1gCqgNaAq0DjQOPA5EDngMTAq4BIQOxAmwDjgOQAo0DHAIAAQkA +NgLEAGEAcgEaAGwBBgByAHkDKgITADkBEwJ4AtYCGgIcAGwCHgOJAbwDiwG+A5UDawMSAu0BVgKDAzsC6gO8A+ICLQKLA6ID4QM/ +A+MBMwMmAHQDygB5A+wC9QI3AdgDSAKWA6oBdgAxADgANAJEA8sCsAPOAHkDtQMMAqwB9gPxAG4BVAAiAHIB5QPKA2cAbQBrAXcD +xQJhAsQCZAQAA80BawPzAtADgQJ0AhQDLAPVAy4BHQPYA9oC2wPcAiMD3gNqAxEDkgPoAzoC6QFNBCsD7QPpAvAD6wQwA5oBLgPv +AYoD8gP0ApID9gKUAvgDSgKZADEAOQA5A/8DzAQCAwkBgwKpBAUDDgFuBBcEAgQTA3cCxQPKBEYEGQE3ATEDzQAtBAwBJQGUA2ME +HALTAbADhQLXBCICHQLaAiAEJgKCA98EKgPnBDEELQKFBDUDOQNBBDQEawQ2ACIEOAPxA88EOwNGBD0DqAP5Ad4D+wA5AXoBfARO +BFUCuABlBFgEWgBnBFwEBAKrBEwEUwQBBBkEUAMeBFIEgwR4BIUEhwGhBIkDaAReA4MANQRhA9cEZAMxA4oEJwLeAS8EKQM2A0QD +pQObA+UELwRzBHADoQO7BKgELAR1A1UEdwPzBG8EegOnA/gCPAR+ARMAMgF3BEUEjwSVBFcC4wSIAZQAMgSLA7cB9gSOBBgEwgSG +BMQEmARcBJECYgQWBFQEzQSXBFsALQAzAtEDggGvBB8BsgQhAhsEoAPbAoEEKAMQBKcDpASyA2UDnQSxBGwEcQSwBOgE7QR2BDoE +twFmBHsEugL5BLwAMAOsBEQEggTVBLYEwwRZBNAE2QTIAw0DWwRNBP4EVgTOBQEE2ALQA3YEkgTUBMEE/wUKBMUALQA0BNsEHQS+ +A9QE3wOGBOED2QRlAzID3QSkBGkE5wLsBO0E6gPmBOwEdASvAo0EeQNABPIElQStBLgD9wKVBLsCmAF2ADIAMgJDBP0FEQUJBNcE +mQP+BEkDCwSMBQYEywRHBJYEzwTYBNoFDgTTBQcFPAVHBQsEmQA1BRcEXwUZBCAFHAQjBR8EogRoBKYDlwUpBHAFJwSsBV4CiQTu +BSwE9APuBLQE8wUxBPUEuQU0BPgFNgS9ADMB4gU7BMwFEgU+AZQC/wVBA1kFBQKtBUUEhAUABRQFFgVLBBUFTQV0BT0FSASZADYF +UwITADEDyASeAnsFWAShBGcBvgO5A8MC8gVqA+MFIwVdBPAEdAVgBS0D4wUrBZYFYgUuBWgFMAWiA6YFMwQ/A/oEvQA1ADEEwAWF +BU8FFAJDBXkDtgV7BMoElAV1BYcFdwK1BZQE7wUlAl8CwQPGAD0DyAMfBbcFhgVQAZQANwWKARAFGQWOBGMFHgWRBOQEpAW8BWUF +lwHKBZkFngSqBC4F2ALvAc0FvQM4BWMFLwS2BZcDRwVtBEAFNwA1BPwB5AXFBbAFAgF6BbMESwVEBesFfwUCBYkFDgXDBJMFCAXs +BNgAOAXKAD0AMgOEBVYEYgUdBCQEZgXRAS4F0wWhBZsEcAXXBWYF2QRuBdUF3ANCBdsEswPwBWkFpgXkBakE+QU5Av8FcwVGBfMF ++wUEBAYBVwXyBRMF7QSRBfcFEAWvBh8EmQA5Bf0FcQUaAnkGAgWQBOMDMwAiAVkEtAXiBaYBygYIA6MFvgYLBVwGEwWdBg0GEQRy +BjoENwWkBjkGCgUyBD4DqQYaADYEgQXqBfkGKwGUBEQF7wVDBXwGJAV2AC0F/AMUBjcD8AZJBj4F9gWDBX0E1gW5A2IAMAX9A00G +MAPWBY8E4gQlBgYGNgPMAYoGYAXfA0AGPAYTBgwGEAPkBdoGQwVkBgkGPgXgBkgFngYYBk0FbwT6ADYF6QZkBbgFxwZnBiEEjQZZ +BmYGLQZiBcQGUgYlBNgCFQX9BJ0GawTgBjMGbwY1Bl4GcwYTBncGfQZ5BkYGewYPBqYFoAY9BnUFZwYVBaUGSgVrBagGhQNLBf8E +xwYdBX4GlgSZAhUGjgXxBpUGWgIWBicGYwaQBowC/QX9Bf8EnQYBBJ8FzwY0BSEBLgagAQQGogPBA7oF1AamBqUGsAPjBkIGegaq +BhMF4QaDBPYF5QWqBPoANwZQBooFxgUUAv0GvAZYBr4GZgaYBpMF+AVOBlMDYgTaBJsAdABfAGYBaABtAHUB+QFtACgFjQAwACkA +IAArACAAMgBeAEwAKgIWARMBQQUbBjIGbgYFBjUAcwFSAZQGfQbPBnQDmQRwBqMGegbWBoADQAbZBqkD6gXeBxYGgQauBxUDnwWn +BkwEfQaGADIAOAU6BlEG8Aa5BFwB4gZWBMkGIwbrBsQC0AMUAssAawEDATcCsABvBsEGlAcuBFgHEABlAaMEXQPRBvUG9wByBvkG ++wAiACgEYAcABwIHCAAwACsAMwBeACgATANiACkHBwF2BwoGMQbKBgQFIASjAzQD4AZ9Bx0G1wQyBd0G1AdnBkcHIwbeBWwGGQaG +BEICnAa3BmUBNwBwB0QB6QWtBzIFtQc0BREE0gZjAvABwwBiAkkF/QL9BpsFVwcNB2ECggcUBtEDcQbTBn8GrAXWBkAHZQOcBSgH +awZ+BqsHIQWjB20FZgaEBygGtAA0BrYB5AeBAU0HgwIKBukB9geMBLcECwJtBzoBHwB5Bz8EUgcfAaMEDAN8ArIAbgcQAWgD8QIw +Bi4ANgbJBm0GywaeBs0HmAduBrIHnwKZADABeQJEB7MB6Qe1AuMHtwe5A8sDogeoAS4HzgB3AGEHsAUOBL4BRAaqB0cF/gXNAnwB +uAbMB2IHxAedBt8HcANLAXcGHAHkBx8CjQfUACIEhgFyAR8BXwE0Af0H2gZjB+0B0AQbB94AMwe+BwsCGgLZBdAGNQdmBxsFnwf5 +B5kHJQeeBTUH6QA0BuQIBwRIAe8ESgZXAfYIBAM4BYIDHwgPBvMH3gYAB/8DLwfiB8IH5AcYBtUHkwZ6CBUHmggGBDMHIAgJB+cG +swOrADAD/gF8CBkH7wgiBkoAIgBiBvoAawAtASQBGAPLAWsCtQdDAmcHjgEGB7ECZAgPBG8CEAgdA4cBuAdvCC0CQAT6B8sIKQdq +Bb4H7wFLAGUAYQBtAT0AbwB3CD4CNgIuAG8CCwMmAHMAbQfeBTgHvwXOB2AFWgG+BtsH5ghMB8cCQAL+CFABWwhfA1UIYgfvAQcB +SQEIBJEH2wAsAGIBXQFxA88H3gA0BsgISQfhBVkFkgUiCCQGpggmByUHaAYSCGwHxggLBEEFrAHjCH0AdAh/BAMHewYiACIAcwb6 +AGYAdQByA30DBwMbCBcCxQiVCJcALQO2AHABmQEPBf0ANgiDB14HwAhoCIcHYwRqCIoHlQVhB5cIawXjCCwIbgL8ADcHogimBFUI +qQirAHQH7wjBA88IPwBvAfkIoAE+AQgC4wjDARkHfwIECMcD8wQQADIIqAHzCKoI0Qb0AD0D0wfgBp0HDgfDBxoHkQRtBOsIuQhG +CLsIbQiRBH8FrQF0CNQCoABrCNcI0AEPCMYIfgjCCNkIxAW7CFoBawAtA8oAbQFoA2QIWgAtAWoHuAahAUsBIAOQCJ8AZQjSCKUE +hgB0CDoAbQb5AG4GoQjzAakI3AiCCN8HiQhpBKQIiwSpBkQIKgOlCAoFbgNLAhYF6QBiCQ4JEAkSCRQI+AEZCFQIygPKAZUIzgjY +AYgI2gisCKQCCwBvAq8AbAhjAtICEwTeCLAIZwiGBnAI4wgnBg4I5ggFCI0GRQbXCSIF5gL8ADMIMABbCTgJOgBtB+8JRANuA3AD +cgMZA7MJDAeDAmwAbghkADcIZgiFCAIHwwi6BhcIvAjrAXYAMwjtCVEBaAFfCFQAeQElAfoCuwBvAxgDfgLNAGcDYgh6BYMJXQHQ +BBAE+geFCT8GbAhKCUIGNQg0CUgItAUkCOQGpwlHCYsJZglLCWgJIwOrCHAI7gluAWAJfwTHCJkETARXAGkAdQhYA7IJeAK1AyAD +egN8CaACcAhECDYEDABrAyMBaAE8B0YJPQEQCYIGnAkaCLMEpQTmBZoJiAmMB5YJuQmPCAUJTAbhAv0JbABiCaoJrAGmBIoJmgUG +CVYDvQfWB9gJDAGdCcMAYQmrA1MJrQTGBmkIrwmDBgMJhQjiCIkHlwkdBLIJvQasCb8E+QAxADQJUAnQCdIJeQdJATwJmQgRBUIH +MwmpCdEJxQmuCc4J8AnoAC0J6gGUCBoJsAA9CBwJQAnZCWQIIQbSBZUICAkeCbYDlgZBCLcGEwngCCcJ4gcpADAH6wnnCfIJ+Qgz +CgIJIAKICfUKEgNoBu4JzwnECdMJxgUVCYEHhwcMB8EI4QoBB44KAwZ4CdwJuQneBO0KCwgrCOoJkgU3BTgIlAodCekJ1AUVCMYK +NQn3CjcFSgXAAgEGKAoYCh4BPAVSCNwFzAliCOAHigWTChUIUgmLCcoE6QoJBn0KLgkhCZEJTQT6ADIJJgo6CfgALQV4Ce0Fegia +ChEKQgGUBYEKPgPHCXwKWQo3BYkI3AeGCRkKJApJBKQHqgZ6CYcKTQoqCYsKLAUqCOgGpgbdCI8HJwlpBPoANApYCfEKYQAtBbIK +XQW0Cl8KZwofBVIGXQZyBtAEbwobCkEKNgofBckKagWNCkcJtAZwCnAGpgpyCUUJiQm4CnUKUAbaCngHlwp6COkIkAoxBasGUApg +CpEBPAXuCoUF8AKtCqoKOwofBfUKZAXCCXwIOAg6B7gBawh/Bi4KIggAA4gIIAKCCnYErgqiCbkKTgPtCg0JJARCCJQKuAg7CrsB +awlVCnQHIQKuAfoJDwrOCD0CugikAZ0BNQByAGcAbwAtAfkAbgEpAs4BPgIIAGEBUgZzBcoG9gb4BvoAYQb8BpoG/wcBBwMHVgdY +ADEHWgXMB10J2ApICRsGzgqMByQKBQqbCIwKnQoIBKsKCgrFCYsKpAlnCjAKVQX/BywK3AreCuABoQrjCXkK5QGkCucBAQZzB+8H +OQc7AlMBRwmoCscBQAkXCdcE4AgBB+MKwgqgBx4IUQeQCgwKVAnAAkEB4wsgB+8CrwEICKgBBgOQCV4H9QmiA3kBowJXAagCtQEI +AHgEhgGKCQwBMAJsATMJngf8B/4J/gslCsEBvgrDBWMKUgPiCskHyAA1BlALRQFbCZ0JVAnIAq0LTwibAGUBPgQMB7wK2gEvAesC +WAkPAlsCXQByCyELSQqWCm0K/Am6CLgJvAsHCywLCwbhCg8FcgBbCz0CWQtoAl4H7wrDC2MAYwMmAGYAZgioAHgB+ABvAlMAdgEW +CK0LIweIC24JtQsgBV8LKAjnCyoKBAtSCy0J4wXoCzALgguEA10LhwuJA1cLWwH2C54BRwugAf0DFAbdBQ0KtQVMAQwBNgMmAYcA +ZQMkB7wKagmyC44IsgZwCwEKBQuRBWMLTwOgC3MKLwqmCwwAMgt4C60C4wuvASELsgfuC6IBVws7AekDsAihA3QLHwl1A8AJdwMI +Ca8E3AffCWILTAolAoILUQrIC5gGhgF3B6ILxQvQA7MDYgfvC94FvwMdCHsK2wvTC+UJeASaCBsCdwiEC9sKbgjlCbsJjgu/ClML +dQT5AkEF6QvkCaYCzgnsAlAKhgRMCToCsge8AxQLVwtHAG0J9AwACVoL8An6C9gLtQojC7cGNQu7BxwLkwtyC5UHxQp8CqcBdwAz +C+ML7gwBCXkHMQquCBMLAwerBvkAawj/AHUAeAK1CVgL7wmnC4AJdQFxAggBXwPxASQIPgjcCN4L2grAC9wE5QoHB5QLBQpRC/oL +lwv8B3EAOQfrC60MNgJIAQ8AYQw6AHIH7wEpCFcBXwLIA1IDdQurAsQCvABjAr4BCQn7B/0MPggfDEAJHAwaC/kMHAp7BHwKfQoP +A04BdAxcDF4LfgxmCtMBGAtgA6IMDgFfCQcHjwFgAmwHgwFMAykJ+whlCIQK+wm1C+kEPAxIB+kAMglQArwMeQooDHwB3Af1C+gI +Bwg/AXEEhgwyCKMKtQvsAS8AbwjKAwgBWghbCKAL1wQdC40MFQnaB+QMhQZLDGoMHwgvC8QMmwMmAs4Mngj8B3oMJwnvAYAK3QPz +A2MH9wIEAQwMnAyvCPsIoAf7DGAKvgixDKULJwxECqEMaAqlDB4KVQIWDCIMvAl5DLAMvwh2AQgMtgNoDAoMrQydDL4JegikDF0A +ZQuIAvkIZAAyDGIMxAhqDEYL3wyHB8gHKgswAScM3gFxB+8EdwyWDFkL6wxbArcCuQtsC/QMPwv2C3ALBgzICwoLwQt2ADUMSwz0 +CtALywz6Co4MWgFEAWoAZgEHApQJ+wJ2DOIKAAzFBnwMxwdpCysLAgYUBDkGrwm+C+AH6QA3C3gNCQ0LDQMMswd8DRcEtQQ7CKQB +agkHAG8AeQHZCfsEYA0PCyYKSgonChYE7QwYBtgMcg0WDKcHmw0YCv8MRwz+BhoDrAHjDSgH8w0rDFINBAbdBRYDFAEpCQcBAQFa +AroDFAhAAsgIQgkLBu4NKAidCJ8AaQB6A6IH/AzCCYQNEAxBB2QIJQ03CgUNOQcmDKkMywAzB+sNVQBsCJ4Cog1ZAjAK0Qm3DSYN +BwLFDFQI/wriA1EJEwOAB94IrgfgC/ULbw01CUYL+AqcB+UMyQ1mCcAG4w1BARsNdgxXDXkDtA0EAGYAbAGIAekMdAPKDHYDFAwH +C2EFLAmYCzoDAQ2MAyMLGAPwAygCtQ2QDZICawGyDVcNbgPEAxQH8Qs3AcMIdww6CfQBvAkPCScBAQK0CyIKbAwWCdsNcQxDDRIL +KQ0UC5YM5g0+B3EANAcsDbIALQ20ArwIdgs2AR8NrgElDbANqwuDATQBYgjVDVIIPwd3CEEDjghDC2MNSgEwA8oEmQ0fCroJMwBp +CTUJFgfeDD0MggqXDBcK0g0WC70IKA2/BtwGggxpBPcMywA4B3MAWw3cAGgN3gGUDeABGA3iDeQLfgH6CPwAdAifAr4I+gyfCP0H +SgkAC6gGggTaDU8JLwjMAaEMlQkVCQwNSgKyA5ABaA1bDX0M+A1/DesKBQ3tCUkNMwR0CwkJkAznA/sKVw2JDUsOFw1FDSIImgu7 +ACIN4AI5CfQLsQ0KA5AALQfQATMCbw22CGQBdgttDbkKJgPCDiEGPw27DWEMxg2+CI4NhQ3zBuELwwxtAFsOMwfyDjYEWghiAUoC +UwlvDQQInAd3CKABHAFHB7ADFAwkAC0BDgtDCo8OMw3SAVAN1A3ZCQsI3AwUB18M4wxlDkULlA3vDfIG4AnjBL8BdA5jAzcOZgb6 +AYENBAXTAHYGoQj/DmcOMg3RDncCoA1SC/EJ+w18Dj0ObAwpDkQNvQ5vDkcM/QzKCcAGTwHjDnYN0w6EDmcIEAwECq8B9g5eDmAB +qQ3QAq8Ogw5/DnkOgQ6hDpYOowEGBNkF/Qn9CvoN6QfDC7kEsg2AC/cLcQxnDnAOSA5yBykBeA6UDoIOpw6FDCYOmgwoAfcKSw0V +A70OlQ5lDpcOeQoaCrUKQA2sDcwBTQy1AGcD8wEBAacHSwJMDH8L2A6IDPcMYwz5DrINBQ0TDo8OJA3CCSQANwlsDs0Cog7PDNMO +0Qj9AGMO1ArtDU0CTg0ECNQCtQ7mDc0Baw7qDhUCogg3A2EMuA1zAZ0O9A7oDvYD8w74AGkO+gUsDKEDKw1cCWMNMA5tDo0MGw62 +DpANhgv9ADkHLA7/CKgO6Q8CAicO+QY3AdAMsg7ACe8JEwhzCZ4OMg3LDucPFg8BCQMPGQ8EDxsBYAzADBMPCQyDCUMOHQpPDm4P +Dg7gDRoOJQL8DIkOlA8kDvUM1A8DDwUH+g1wDEIFMQfwDzwPAA8+DykPQAFgDvwDHQVMDxUNrwh5DmkPCQ1+C5APMgUmDWIJ3wzl +A/UPOAviDxQPRg8WCHgOeg4sBEwOLg2RCcMBkAk2Dv0PRQfyDyUBMw2NCQMCogPNBsYNuA6KDYQPEA5JC/0ILw87D2wBww9uAwgA +ZA9xAGwMkQz8BgoMuQEVDyQH9AH8DjsNLwtNBKQNZAtTCE4LeA7mD4kO8A9jBUQPWgl7AgQH8QNgB7QMUABsB4UCFg6JDV4PDAao +Do4JSg83DuIHyAA2D5IBBg+cB80PnglVAV8M3AK/AxQErw+dB7YOUQBwB7oMdgtjDtAMtwe9D4wMZAkfCkwLdA+pAkANaA6UDxcL +5w7xCZYPmQLFD74OhgvYBVUO2g91Dh8Pww7EDT0OkQ8SD5IPygwDCBIJ7wmjCzwLZQs+DNYJdgiiCXkHNwR1AQMN+QBuCMoM8Aza +D2oP0AwSBB0N5wtLDhsPVQ5DCLYPNA61DzYJ4Q0bBEEAOQlQD/ILMgO/A30OQA2qDsIL1QLODp4JogECAQQBBgh5DUkBFg1WDW0N +lgMVAkcDFwvUD+cM1QfwD90OMg/KArgBKgBsAekOEw23D6IPCw6zDPsPDwqjDfEOtwfoBEEAMAZQD9AQIQSGECQJLAj0DlYODwkx +DhIQNw6fDSQGFg+FD/EQIABoECICyAjxDf4I+Qw8Dy8OrgfkDt0P1g92ECwHnBAuCE0C/AcrD8kPJxA0ECMI8AjyED0IMwzZCP4O +CgKDAHcJAwEHAw0EtgG3CQkBJwK1Bt0ODRAdEFgQRBA1EEgI0QikD1AMXw/SDhoO2wtvD48P/wJAA/wPyQ9hCFQMlBAaC9EPhg/r +AaEJLw9uEHYFGA48D9QPowYHDsMNwAR0EE4PWAotD5gMqA94BykMIQ6UAHQP7BCIDDoIVAB1DlgI/QPNDSoCtQwsAW8LpxBuDNQL +qgMdDswDXgBhA2APBgnWEHgP1RCUCncPhA+oD9oHcQa7DnUQrxCxDxwLfgB1D2cBNQisAxQPIAILDyIPvRC+A+sPLQQdDmoIHg91 +EJMP+w2DEHsPXAF4BekDXQNfEMwIdhDLDvsDaQ/5EEEPTQWDA10LiAc6AQYBWgFgECUNewyjDmsQjgoGDWAP+g8ND/wPpw/+ENYA +NhACAHgQ5QfxEOgQchA4D5YDuAwQAwgQDA2rD18QdQjJCMsQOwjPED0OMguGC6UAaQuKBFkHrQEDCMgQSg90EO4Q0hDyENQQlg06 +DSUOcRAvA/sAOAfrC6QLiBEPAZQLGwevCxoREgevEGsODAkMESMLpgiBEOwQ0BEXD1YFnBC2CsQQuBD1D8YC/AA0DfYRLxElD5UP +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 +GA3tGccIrhu8G8kYvg0EG70QnAJpEZkZLAGdFbUbbxW4AGwVuhHLFy4BEhudGjkVGxr2GEIVrgA3Bekb3BW3AHMbcRD+FZ8MDxG8 +Exgb2gH3AWsb7gJLC8YWwg38EZ0RCxEVGn4WqBlLFxMbtxXtE2UaiRpbF78S5QHjDlgb+AuuG/sLsRBlG/0bXgktDQQXkRejDgYI +/BqeFKIZQhBlGVUJCBHwCQsXqA0lEG0b7htbDhERChwTD2kWwBwMAV8BNgyOD7oDyxHKF/gY+xOBGlUT5RpXGqMaIBfhDR0cCxv3 +HC0ExBLWHDAJDxtZF6UIlgSQDNYY3BwfGN4Y0xjgD2ocLBv5E20AbxxCEFscMhMgGk8RaxpjBO0ahBw2Fc4cOBqHHAYYkRnZGlwI +DRw9Ak0cPxxRHFMI1hHiDQQcWQQKHE8cLhxBB7ocMgqPAHAAaBj3A+ACpABqB/ICsA37GAgaGQEQGTEXdBj+GM8DTRwLHHYCUwMR +HHkcew6pGCcJxxlwBkgUWwH3HIcceAJsHHoDwxyMGA4ZwRWLELUbTxw5GccIghyGHHcciRyVHIscfRgtGaYOwQtdHHUcogl2HJYD +zBymF/AJ9ByrHIgcrRylGFMX9xirHAAIAxr1GR0Z1xa+G+gWfwA3DkwcsxyUAG8crhx8HLcaYRpDF8wHqxzEHKMcxhy2HI0b9Ber +HM4ctRyXHLAFPwohHLoauRydHF8czBuHClUVrxzDHJMczxzHHJgYLRqRGd8GBxzkHNYcrxzJGpkFTBzVC9Qc5hzYBboZ0Bw0F/ob +nxtmGEAXXxnzFrEG6AF0HPIDfRz0HMkXRBqSGkQZWh0CHIoc1xzJE3ob9R0KHKQdDBzSF1EXLhobFhEcWBqCGFoYrxWRHAIXexwE +FhgZ4haTFz0ZtB0BHOwc8xzRGAgYahzLHG0Fux0mHQMdKBgyCagdEBzQHRIYmArqB0kYehpyGHwK8gcEGH8YgQdcHNsH5BqAGIgT ++BQFGlMU+hz6HLwZfBqIHGEbuRpcG6QdJRysHScdNRgtGJkdBwibGpQPRB0zHQQdEwexAfgK1Qf1C/Ib5BugEwMb5xkeFkICdhwL +GNkY1BWfEi4bfQtjG5oaqRRWHDMbtRbMHFwZ1RuiGCIPqxwLEF8aqg57FH8RAw9rDa0O6A9hFjAN2RqdFEgcsh19FFYQWweFHRYQ +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 +EnkRmgB9 ]] diff --git a/cached-configs/pycoalprocessing+pyindustry.lua b/cached-configs/pycoalprocessing+pyindustry.lua index a85083d..18275db 100644 --- a/cached-configs/pycoalprocessing+pyindustry.lua +++ b/cached-configs/pycoalprocessing+pyindustry.lua @@ -10,233 +10,229 @@ mwGdACwBnwEEAaEBCQAtAc8BaQGzAUgAcgBvAQgBIgEvAGcBEwEVARcBGQEbADEBHgGwASMBJQEnASkB ATwBPgFAAcQBXQHHAWEBygFQAVIBbQHPAGkBWgFcAcYB1AIyAWMB2AFoAWoBzQFuAXABcgF0AXYANgA3AeUB5wGiAg0BWAIPAScC EQITASEBiwEwAe8B8QGIAYoB9gGOAGYAaQBsASoBWAI4AG4BTQH4ASsAcwBoAWkCYwEXAQcBMgFvAZYALAGYAZoBnAGeAQICCgHo Ag4AcgIQAYYCUgIVATAALQAyAhgBqwIbAD0ANgGvAlMBsgIiAbUAbAG3AiYBMwE1Ab4BOQFxAGUAbQFBAlAB0gFeAWAByQFjAcwB -wQItAUECOgHTApgB1gI0AkICNwI5ApYCMQKZAdcALAFmAkAB2wFtAd4CRQF2ADEBHQJKAnUCTAJ3AnkCEgIUAlQAZwJ+AlYBhwHz -AlkBbwH3ApECkwBjApUCMAI8ApkCdAF9ArcCTgJ4AlACegK7AhYCbgJwAgYCcwJLAgwAbwJdAlEC0wEwAoACGgGtADEBnAEfAoYC -IQG0AbYCJQG5Ao0BvQIqAnoAZAB1AGMB0AKfApcB1QIzAcwCxQKUAGwC9AKoAqICmwIsAcMC/ALKAv4CNQHOAmACpgLJAqECMwI/ -AdoCQgKwAeABdQAxADkAOQK1As0C2gLcAtICUwIWAr8B8gH0AYsCwwGOAu8C8QLzAqcDAwJjAgAAbwEKAxkCfAIXAgMCBQKEAVAA -YQByAUAAbABsAWkAeQIZAawBGwAyAR0C5QGxAucAPQKJAosC6wG7Ao4CKgL5AscC+wMlAwoCmgHAAwACLgMCA0wBywMFAVYDBwHR -AwkC9gNNACICkwBsAREDMgB5A1EDWQKqAqwDDQHcAkMB3wJGADAAMQA3ADgCSgMzAl0DNgByAHkDHAJYAfUDIAE5AHQBBgFiACIA -cgEDAzIAcwINAGsDagLVAgQCcQIHAZ8DbwM1AzcCfgLgAzoAPQLjAoUDPwFAAogC6QG4ATEC7AIpAb8B+AJnAsYCyAI7A1ICowKc -AwEDSwNiAqMDZgKlA1cDnwOlAcwDXANeA3IDYQI9A2MB2QJBA2YDDwNpADEAOAMUAXsDiQNxA2ABeQGFAsADHgJaAVIDvAM3A4QC -BQJyAggBAgPFA68CZgBlAzUALQN9ATABXwAxA40CggOQAz4CIAOTAugCigLqA5cDRQLtA5oDSAOeAqADqwNOAcIDUAOkA7EDpgI2 -A1YDsAKpAqMDrQN5A80DWAPrAwwDtAKvAkQDEANqADgCSQO7AzQDvQFDAmcD0APSAGcD1AN0AsEDdgGNA8QEAAPGAy4DhgLYA8wD -YAPOBAQBBgQGA4wBqgLhAzsDPQIfAocD3ANDA98CKAKPA5sCkgL6A+8DBAIrA+gCngPqA/ABzAOnA+4ELAQoA/IDXwQnAwsCqwOz -Aq4B3QP6A2kAMgAwA/4B5gQSBAIDzwL7BAUBXwO/AfADwQLCBAsDywQNA80EAwREBBYD1APHBBADygMyBE0EEwRPA9EEUQAtADMD -1gGtADMChAPZBB4DQQOVAowD4AOZApADnAQmBDEC9wPnAp0CLwOqA+sELgPtAyQD9QQtATkEMwP0BHED8AP3BDkDZwKxAXUAMgKz -A24EVwRCBBUD0wRcBAgDwgN3BEwDcAOLBBQEUASIAn8EDwLXBFUEQQSQBFoEiAA0BF4EGwIeAuYD2wRkA90DlgInA0YD4gRqA0kE -NQNaA6ID6QR2BCgELwR1BHsEMgJdA64EEwStBDYDZAP4BDoDaAF2BIIANgSEBI4ETgRDBJkEFwA0BIoESgH3BFYEwARYBMIERQRc -BFMElQOIBIUEmATNADUEnAA9AR4DkQPaAbMEoQQgBKQD4QRpBCUEqARsBKoDTwQrBLYDWgSvAmEEqQNTA1sEswPzBLUEsQS3BDgD -DgQ7BLwAMwHkA/8EygSGBJEEFwHkA8ADHQTHAY4EyQOKBMEEhwTEBM8DyQTRBPoE0wRbADYE1gAyADcEngOSBNsDQgPeBN4EaAGP -AhIC8ALyBOoE4wTsA+MDSgTnBOwEqwTmBPEE6AR0BR0FIgPxBO4ENAUeAWQENwKtBPQEuwSBADQEvgT5BQQEywUGAV8EvgT/A3UD -HwRLBQMEAQUMBIgE1QAsBRkDKQMjBSkE8QSUAzAElgTSBFkEzQA3BNYB4wTZBGMFFQSjA5gEIwMiBRwDCAUmBR8EpwPkAvUEcgRu -A6MFKgRzAwYEsAPlBWME7QNdBO8E6wUvBLgEfgO2BLwANQU2BEAFTwTMBFsCSQU9BAkFPwTIBJcFUAUNBM8FTQUKBTgE+wTDAV8A -OATWBREFVQNABVcEZgQiAu4FGgVJBV0FagR3BCQDnQUhBV4DoQTlBHAFlgSuBSgFlQViBZcEeQTwBZ8E8gUxA7UE9QSBAoQEvwWG -BUMEFwNtBXwEiwVABYAFeQSIBVIFTAOHBI0FrwWBBIgAOQTWADgBdgQdBY4EZQNEBZEDmgFUBO4FpgWjBCgFWwVpBc0EbQWYBGsF -ZgVkBKwFmwVnA1UF0AL9BdIFpQVvBH0FMgSAADAAMgA2ADEFrgVCBb4EFwMUBbMFAQQMBQsF6QWJAmMFygVtBcwF3AW6BBEFeAU6 -AC0AMQAwBNYAOQXDBJ8FFAXGBCEEpQE5BfMBEQX1AyYDWgXPBUoFpwNaBSAFbwL/BCoFngXRBScFaAYNBhUE7AXeBS4F4AWqBTMF -4wA2AXkFNwXoBbcEFwX8BMYECgV/BfkE/AFfBcAF9wVOBe8GJQPUA9UEGQOOADEF/AWNBKAFjwXHBgUAIgYHAHQGCQOgAcwGDAWi -BdwGDwVgBZoGDgUjBZ0GEQNUA6gGTQVsBLQF3wUwA2UD+QYfBeQAMwXnBI8F8AX7BeYF7AYpBQIFtgX6BfwFgwW7BUEGWwYyBfsC -fwY1A9cEPQY5BgIEogWQBj0GPwZBA+YFRwUbBdsGCgVfBOEFYQZGBksGEwZQBOkGRQZ6BSsFbQUtBSoGHQZWBeIF5ATFBiMGaAZj -BEcCVwV9A8MFvAYkBmMD1QYvBYUGlgYsBfsEXQZsARoAXwBmAWYAbQB1AZEBawAoA9gAMAApACAAKwAgADIAXgBMACoGOAX9BcQG -OgYDBRcEIwBzAcgBXwUuAcwGdAZQBkQDqQZKAqMGEAa9BdYFJQbDBdkGTwbGBlEFbgYcBlQEuQR/A/sF5AT4BXcGMQZjBlkGXwV+ -BmEGKwWIBmoCYwK6AGsB/gFDAl0AbwZlBfgG1wNKAHAAZQIMBjQDOQIbBqEGowalAGEGpwPYBqsGrQazACsAMwBeACgATAX7ACkG -sgF2AU0GAQOUBnEGPATfBdME4gXVBCkEbwaBBaEGwgYZBoUGUgbPBXEF4QP7A7gDbQaOBQUG6gbsAQoGXgRIBQAGYAXuBTgFCAZm -Ac4CngBiAaQFDwQcBwQEHwUWBVkCKga/BswGwQZQBsUHCwUkBhQGfgPsBhcGgwZCBHgFLAR6BsMGiQS6BosCtAF7BycBQgcpAG0A -YgYoBtsGBgM0BggEqQN8AhMG4gEqAHkG5wRVBHQCDAN9AtwCXwBuBroBZgN5AdAE1gA1ADUGtQZwBN0HMAOaBoIHEAc6B0MG0gNp -ADAAMwQ/BK8HWwBhB10D0gdgAzMDVgdNBpQHXABsAHcAYQdXBJQEPQMxBw8G7wGtBD0HZwIiASoBLAVYBGcEIwdsBlMHFQYeBeID -agbVB2wHfQSMA88BcAEqAVoBlATPB4UHWQc8AVsGaweIARsANwRiA0AHjQcvB5ACKgc4Bw4HpAeTBPMHlQP7ADAFNQJKBw8Cvgba -BpQHsARsBJQFCQKkA+4GngenA48C5AeLASgHrAePBcgBOQc0BswHNgXYBscHOQaEBsoEMAaIBtAFcgWrA2oAOQYiAeYHugbZByAF -PgaUB84E5wAiAGIGpQBrAC0BLwEjAzMCaAaZB8IGeQMKAaoHLQIjB44HlAaKB7YF4we5B7IEMQeaBEsBPwBlAGEAbQFIAG8Adwfu -B4YBzgBvAaUDXQBzAG0HxQEdB8gE3AetB8wH8AYYB24H2AcWB3EHRgfeCAkICwE+AG0H/gH3ASQBPQH9B6ECBwBiAVgBbwNyB8UG -swgRB8oGcgcIB9AGyQfSB7EF2ggWBoQHbwVzAxEANAO6AFsIKAB0CCoDcwe8BIwAcwalAGYAdQByAt0DGgLfB8AFuwg/CEEALQQJ -AHABmQEaBNYCHQZvBwUHaQeuBKYGfAZJBxEGEgcNBswHkgcUB7QH+AO3B6kB5QhPA4sIUghUAYMIQwRLCGoDcgJjAHMAbwGRCEkB -SQH9AvsIbAE1ByUCcwhxA2AAbQBrADIIUQH0CFMIfAafBJ0Hqga2BwYGBAgxBkgGUAe+BwsIYwfXB/cHRAcXADgG1Qh/A4EIgwh7 -ARoIIQGOCJoInQESBUYAcAgFAWkALQMyAG0BZgJjATsAdwAtAWgHXwdRAT8BKwLyCEgAZQh9A8oAYgPPAHQH6gBtBqQAbgdRCKIF -/ghYBy4HywY9CJEH0QgVBz0DpQg5B9oF/AcZCD4Iuwi9CL8IwQiFCG0InwE5CHQIdgFgCHkIhAEQCIYIVQhNAVABpQBvAlwAbAgO -AoEBrQRhCBEGOwiNBRgIMghfCDQIYge6CGQFqQhmArIAMwaNCD4COAjmCCAIbwLECI8E4wAiAygDKgK6CEsDLQJvA4UE0AfmA30A -awIWAC0GogEOBFIIiAKDCMQIEgjGCI4IXQiQBkwI8wf8CJQIZQiWA7cEgghpCQ0JDwkRAUcHHwaSBbQJAAkaCQIHfweBB4MJCQPI -CE4JJQJ9CScERghWBgAFEwhZCBMGPQjwBzoIYAVlCMkIkwWbCM0GHwAxADQH3QBiCTUCvQk3B7sH4QaTBIwJSwBhCQ4JNgFmCSgI -uAEBCVMJVQlNCVcBXwfECOkCHAfHB/QI7Qa4BZIFSAVcB20H1ATgBZkJGwaACR0INgjLA/YIGAe1A7cAOQZZAXMJWwkmCV4EiQj/ -AyEFkwlpB1IJeglWCRIDjAfvCYMJXQmFBJsJFAM8BRIE2gk8CRgFGAfkCMkJPwlrBwwJQggzCMoJagOgCUYGiwYnCXkJTAkQCXwE -xQl+ATkJiAmiCYUEXQmHCaEJTgTVCRQEYAkWCWUHagfNCYAH8QZ2CZUHPgmXBdcJmQlEB0IJdAj3BIECHQkkCVQJewmFBP4JUAkr -CKAJrAmjB1gJWgnLCYUFDgmMBywJOwjFCDAFGAcyBwsJkwmZCbgGdgjICbwI9AcLBhsJHwj2CSEE9gj6CacJTgU8CcgF7QkMCcQJ -hAFHBUUGPgdQBkAENQmrCe4JiQFHBVIJFATYCIoHaAk9BwgJ2AjJCdoI8QcJBn0JlgneCgQJvQoECeIJRQm/CeUFNAiZCc8J+QjY -Ce0JXAmoAUcFDgmHB+gH6gdfAWkIKgVTCRYILwcHBRgKCAlABk4H1gmUCQEJ4wZVCg8DagMSCGkKGwfrCh4BaQoUCdwCPQAiAbUB -PwocB+wKHwjiA8oCxwByAGcAbwAtAZEAbgG7An0BSQF/AGEByAYIBJwG8QByBqQGpgAiACgJ/Ab3Bq4G/Ab+ADEHAAZuBrQJZAa3 -CbMJ8gXLBsAJtQg3CbkKNgWXCiUJlgoKCiYGzQaHCg0IlQdwBLwANAl4AFsKQApCCkQBBgpHAr0KSQELCksBSgYIChQG4QbjAYsB -OwnNCgUIXgXcCRQF/wn9B4wCJAmRBCMKaQm5CmsIOAoOCnEDEQAwBtUKZwBrChQCXAH9CFEDNgLyAhIIwABjAZUFRgLZAX8BDQH6 -CKMAIgH9AHgDzwERCLgBcQISApMAdQjoBBoAPQepCC4KjgnWCpAJHAiSCeAKbwkgCpYBdQV1AeUKsgFWAGkKtQoUCpEDWQAiASMB -SQN9B2MKPgEBAfkBggH8Af4CAAByAUwJFAq5Cl4IjAlmA5oKzAVrCpMJnAqVCDoKxAfdCtUB+wH9Af8CAQrLCr4FSwkyBFQK1ANd -AGYAZghRAHgBkABvAYsAdgEhCFYE2AjsCl8IWwlsBdQIyQriBZcK5AjMCuYIzgrFAXMAYwr1CvcAZQr5ATsK/AEhChQLEgr6CxUK -pQptA68EkwryCQsBFwJQA10BiQBlAbUJaQcrCY4FVgsCCBQKAwpsCpoF0gsHBaAJHgrBCeQKwwSCBeYLDgBvCyIAaQskCyYB0AoU -CqcALQLbAvsDKwK8CoYLIQtECQYDLAX7BQ8KjAfJCrsKIweRCsAJvgpwCucDagrpCzoLSQJ7ArwF+wtAC1MF0QeEBbsLSAhKC0sH -pglhA48LKQerC1AI7gq9CW8KvwszC1QKwgtWADYI0AtjC0UJDwaRBEkHIgo4Al0CXwdjBUYKxwq0AG0JWQH4C1kLZAtcCWAKtwjr -Ct4IWggUCy8E5AtuCUMLXwgXC1UIzgAzC1gC0QtKC4gKNQoqBSYDWwB1AGsIqgB1AHgDJwBvAykLhwLUCj4CagBjAmwBmgtnCt0J -1Af1Cf8KJArwCd8LcAcRCZ0Htgg8CsYBWgusAf4AZQrvC5EGDgrOAGUK0ANWC4QCagizBZQBWwISBykCLgGpCA8HZguMC7MLUgu3 -C5QLcgfaBeMI+gvJB40JgQvNAW4BlAteB6QIcwFvA88LqAhMCx8HogrUC6YDXQJ9AVUIBghJBu4LZwdlCwEK3wpgCwkJcwuVBh8H -cgqZC+wJDwvvCKcJKQt6B04AIgEkAWkAZwNgBpgL6QtiC/4L7gimCEkLZguKC2kIiwuNCMcLtQoJC5MKlAv6BeIF/As4CnUMDQK9 -DAAMEAsXAf0KQQO+AmkMIAAtDCILTAuqATIK+wJDC9EKugeOCrwCKgv4BHwLCwv7ADILdQwuCHQBbwoUA/ML5wkIAtYHogusAHUD -zgFqC68LTguyCo8HrwwXCmwMNgKiC7kHcQA1C9sCZQJnAHILwQhhBLYKPgFoAGYBJAKtC2cIVwwyC9QMTQvCDBgL1gmWCgwLcQs1 -C1YANwfdDF0MXwo0CaULHAZ1AjIMXAEhB54AeQHaC2cJjQxKCiILbAlnBngKZQm3C50JmQsxBdIMUAXdB0AMdQw3DBsG0wAwCD0B -aAizAG8MegxYDHMF3gSbBUYBuwizAUoB7AdYDJIIRghIAGkAegNWB8ULiwuxDH8K4AsEBwoLBgxOCmoMGQrlDI4DtwT3AeUMoABs -CEcCeAykCz8McwsvCtMAIgNFCLwIugFKAVoJOQmxCysJPgyFCgQMhwYWCXEJmwsKDLICsgA0CPoMwAAtDMICagsXCqABKgKeCCMB -Lwi3BUYLJQJcAjAIgAVIAzYIcwbrAgwIqgLwDOUMvgybAXEDMgQXDHAKHQjeAGkI4AESCdIMEwn+DEwIXAltBswMywTsDIkDWgxq -C7gMOAwcAXgMtQE+DO4KQQFfDPEBIwzzDPUKywGSCKcAdAhIAmwCYwilC/AIqApQCKsFRgXeBF0FRgjaAzII3AvmCMIMXAItA30C -8gFmDKYKIQtrDKoKhwluDFoLkgxoCbkNAgvXDGwIzgAyDJENJgydAWYLnAktB+UM8QJAC4QM4AedDCoHeQKTAhUMxAkUA9gL9QwV -BwgLLQmWC48Gfw0wC7YMzQezDTYJRwA5BXYNQwLyDUUBBggNAT4BiwFaChQNTwMKB+8M4AFBAcYM4wzqCLcJFAVUDGMM+gjyC28N -VQj1CiwKwwY4AeUNZwziAg0M5AvADHMGDAB2B1EM6QalCLcMvg15DWkNew1rBBgILAsAB/QMqQpgDVEFnAxmDE8MsAzPC9gJRwA2 -CPoNhgFGDWoNgwlPCSoJ7At3An0BGQqwDN8K9g1oDZsNiA2DDUINpg16DYIDNgTODUoJYwuxCbILAwZ3C8sHNQzJCmwM/gc7DXMK -KwbRCucEPQfdDZoBBw2cDa8H4A2fC3sNZAL2DWYM2QJ4AUIMBgwmCKgAYwEPClEBpwHtCv8NKwwzC1EDRw25CgcMrgqSDZQL+Q2W -DBwANgg9B5wKoQzbDCUMCA3SDdQG8wHsAe4Mcwh/AmMN5wzaDc8N6gNgDJsM2gfnAvMMCgLWB8EN9A3OCFEN9wivDSYAaQ37BOoL -8gwSDH4NLApgDbsH1Qm2DeINVweWADkG1Q4ADekMBw34DgUOBwI5DAIHIQwECMAICgrJC4MNhQ3NDhcN0Q35AngOGwelCiAMSg20 -C44N3Qm5Dg4KJw4QDI0N4wcXADINmQ4lDfYOGA4ECLMOBgXKAjkLeQ4eBpQLjwwFDjoOAg48DigOPw38DUIORwzcCCUNbQ3ZDGQM -+wsFDIYN3wZ2DQADsg4SDjcNWg5OATAM3Q09DPwH5QBsAHUJSwKUCOELHw3/DkcCkwjAAn0AZAJ4AzULTQ1MDlMOMwyDDhENdQtW -B7cNeA5rAS8JDw5vA3AL4g29CvEMQwIHDgAHnwqkCA8OCw3aDIAHaw3hDjUOWwdxB3IOewedCqIL4QxzDIkLYQJzB5wBBQFvAQoH -fwtNDi0MxwcIDjIJmg1WDngL2QYhDpMOnAd2Al0KNQu9C60CYwd1Dp4HdwL7B14HegdiAmENQg4DDgkDjgRgDW8MNA6NDTINlQ6Q -AeEAMwweDdAN6w4dB+IIRAB5ATABkgwoC5kLWwkPDf0JCgvqDAUOAwwRA44ANA5SDXAJugbIDGcOggxrDqcL+wfcDXgO2AtAArYC -DArqCqsLdguaC3gCYwGZAHQAaAEGCHUMQQwsDmkFuw7IA2ALiQY2DYwMqA4MDbUNkAlBCbsO4AbLDb4H2Q2XDhUOAw3HDAMH4w7u -DaIIwAqrDLYMuAyjC8cNHAugC6ILpAzfDtgOug48AmYBNABsAQoIwgqKDMYL9g21DqQOWQcSBs4PBwgZArIB4g7mDx4AaA8gDyII -1gE1ChQNIAh3AQYNIw81CFUNHAyLCfUO+A6aDgMPHwPPAQoIgQicDzwM9ggPCdMJjwnVDdsOVAysDlYNkgyvDsIFaw00DBoONgO3 -BcIPMA3RD0QPIQibDQ4I1w1+DA8NGQiqAHIIrAgFCK8BJAMfBBML3Q0TATIO8A8/DR4O1w8xDzMPYQh8Cj4OTwuuCrcHig2NDwAI -FA8pDFIB4QO4DuYIJA19CesLewgAC+YNoQxCDtUO+QB4AscOnA4ICMMOoQ8mCBQPKA6ODFENBAcXCZ8AWwsSD5ED7g7KCVEESw5k -DmYCxw89CqwCOAGlCrUNQg+QAGEPkg5BDiwOcw7dDwINcQ0xDuENAwzQAxEHcw14D64PsAelCxcPvg+hAmkOMA3LD0EDygsSCvsG -4gM2AVUBWw8jDYsPJQ1NCO8PxQVrD5gPVQ6PDuMN5A7HAHgPygecD80PdwieDX4PDwK9DaMKqw4WDfYPhghzCHUNIQh4DzsI3wht -D60LGQBpCv0D0QdUAf4Icgz3D5UP0gQjD7UO3gfTDeAP1wSyBoYHQQ+5D1kCsgA3DeYLEwr7D/MBXwqCB1YKgQ/2B1YPcRADDvsI -uAsYCxQQDAG+CrcILQ9+DosNLQ/9D9YPuA01D9kHFwe4AXMQFxALCv0N8A+IDAQIRQy3CEgMQQ7wDxgBGAukDL4KOQi8CjIH7Q9n -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 -EoEDuR/DG3sNfBuXDuoYsRgRH94gEQ2JHWMfpAqNFCMe+xrnG+AfLx6tFbEOqR/YIBgNnR3xBIwbSg8RDOYfjw18C4QgBxvGG/of -vh94HkYcnR97G1Af3B6RHv8SSgZuIBAgLQ2JHu0NyR8fB1gGuhCqCh4Koh0lHvoWKh8qCbkfLBVsH30bZx4nH20fwAfaDjgMHiBF -AkAHngBuIAEdOwqFDaUM4Q2HH5AM3w/cAHMPywH+GPsY7RQWH6EdpRzbAnMIAAgCGTwCaB/5F48H9hKvA2ofwwFvIHAZswjYIAUX -8xxSCKgKrgKAEX0SgQAxBXYQSyCAD4cd0yCHGWsgfSCLGSEeqiB0ED4c7haiAXUEPyCOGTQdShM1HrYBPwFaEogX9h0QIJEdEiAN -Eq8cYh/YF/QSiQBsHsceowGuIG4gWgQGELoQCgsaFaYWCiBKH9IekBw0H3kX6xsgH/4grginF90QKh3SGK0XoSAvIL0gsB+zHd8e -zh8oHDIgOSC4IDUfqh+BGnwf/QyTA9MgxhAYIMAgKARLGmYX8wqiIK8K+CDHEyQf3iDFIN4g1h43HOgehx+mIDcboyBQG6UfqSBT -HxcX1hOfIKYg3CC+ILEQGR4PGK0ORSDTIN0gvyDIH/Yg4iD8E2AbMiDKBckgTBVHIEMWUyAfHy4g6xzGGnkeBx+sDcAPhCDyAVog -+yD1IMAWHBitGsgg+iD0IN8EzgfvIRog1RApF50fDQGtHkAeqxJhH3cgThHlH6ggziDuHioLNhzwILwg8yEgILIfHQ+JIP8hFRed -GqggbQPKIR8g4yEhA4AeXQeJHl8hJhZOIQUVaSEHE7YhCR9gICEYdB9jH/sbViESINQhPiCyHnAbyCDbIRMhGyDkE6oKhiE9IQAW -iwpOGFgWbQpTHn4a2xZyGt4ehR7PH/8a4yFGFiwhSB96IUofFCELH78SEh6TFtUWhSCWITchHB6bIVYhXSE4IUAeoRhqGTchOyAG -EXEZaxckIDMfRBVMH0Ye6AjQEC4faw+MHPsHvw/HAHMOzRJ7FuEHiReOF6QgHRxJH+gW6B+DH9ghlQGSDD8P7BCHEFMXbB9CIQMV -ayEqIAwbOyEtGr0X1h7CAXMXbB+yIVoX3x8yD8YZUQxAIYYgkCGaIJIgIhkLF8AhsiGkIJgVlSCXEE0SugFVCHUcZgfFF6MXDRHA -ISsg0BlyGu8AWyHJAGwcZh/bILcIuAalDc4XjSAzIJMXXwAzCD0h2wFBEYgdqABhFEMZTQjAGU8d3QbmH3Qc6R4CIXAeBCGsIFIh -ThJoGNcB5SHpDiIIqAi+H4cMcxdsBfID0iH6IIwR/SH5GU8YRSDmC2ohmxFgIOkcnx7mIDsXfx/9IgUIAxhFIZEH5QurDrAMviIS -EDEgcyG9HIASTCH4IgEZTyGQGUwiISITF/kIcyGFIaUCcxZ8Ca8eACIJE08hbiA2IfEe/SHzHpIaWx6UGz8JSCH4IWwX7xWVDJIM -eQJoBUYUCwMyFA0BJBP0E/YLRRxvENAZ4RC4G+kIwh/IDVUeOB6kAVANgBC5AzgVZB/lFDkauh6+DVAVzBYtHMgGviI8BdIhaiDv -Gz8MVAHlIlUB7B2DIIoa4hWbIYMJAxYZFT4VXAceCMMezyHfGXIANAweFdcichVhIMEe2RexEqMiexVVFOkCDBozHs8eSSBUC/sd -bAHlIoIVYCKEFMgZYxHBInAV/yJ8Io8Y5AkLIo0VfRURGxcihx5nHkoiNyF2IJQZ0iKMInEigx7hGmUeByKTFbYilR7XHvMFuyKZ -FQkfIxp1Ip0h0CENIXUXExRqD1sBcyKwFT8VOQoUIrwicyEdEf0iwCJ9ISMBGyIuHxAg6CIzH3wgzB1UIjYbPSGvFhUghSKkIpQi -phUVIhULniLEIpYhOh9vItoe1yFBHh0hRBOyImIYOR5FG/4iyyA4IdkffiEsIfUgPBxMAFsi3hUKIVUW/xrIIvEfHAqGHYkhuwx8 -HJoidxmIIPEi8AumGOAJByCqIZIUMgPKIvkRTCKGIake0CGKH9UUahMUIrsjAReEIdgHUiMIHR4ZUQrZBuISJgFuA4AeuhxcIuIg -CyFMIKMS7hksIwAK2hIhIxwe3CMUHBUiwwIBIygBNiKtIggiyRx7Iugg6iLNIush0Q12IZ8jJiMaGf4jMB7yItgLwyMZIy8jHRTO -Ht0BASNDIxsjPxTOGlMWCyMLISkSYyK1HmgioAQoGuQbwg04IowjLiNKI0UU6hzSHosGRgkDI1ojPiNcIoUi+CNiEZkjZAEKHvgh -JSHvHxEiMSGqI1EiNRycIM8eihtGGYcNwBo7IxEjJyNbHtchFx7ZI0kjYx7hI2YjeyOBFRUFDyFDI20hJyLkGrQjbxd5GBwjciDt -Iu0VUSMQIzwjRB89Ir8jZxHxI2kTiwfvI4AjaCLfIWAefAb0IWME2BIwAC4ANRrcADYhZwpdIyAYaCJtCmwhKCONIYkdaSORIQ4c -yRruCD0jniOaIt8jmCOEI58jhht6HqIjBSJvI7oLziMdAewaSyECI60iCyM1Ig0YPSGLEu4dyiNZI74juyCcF2oaJxWVIywjGCOZ -I8YQ4hGNFcYgMiNPI7Ie5SPPIw4V0x2VI9MjPSO/I8gVxhwLFlIjYSPUI90j1iPJI50j3CMpI/MEFyNNHL0SBiFFI18fKyPjH6cj -kCLsI7YbwhFJI3oj6iPVI+wJXx+IIxUj9iM/JAoWAiBtAH0= +wQItAUECOgHTApgB1gI0AkICNwI5ApYCMQKZAdcALAFmAkAB2wFtAd4CRQF2ADEAMgA0AkoCdQJMAncCeQISAhQCVABnAn4CVgGH +AfMCWQFvAfcCkQKTAGMClQIwAjwCmQJ0AX0CuAJOAngCUAJ6ArwCFgJuAnACBgJzAksCDABvAl0CUQLUATACgAIaAa0AMQGcAR8C +hgIhAbQBtgIlAbkCjQG9AioCegBkAHUAYwHQAp8ClwHVAjMBzALGApQAbAL1AqgCogKbAiwBwwL9AssC/wI1Ac4CYAKmAsoCoQIz +Aj8B2gJCArAB4AF1ADEAOQJJAXsCtwLbAt0C0wJTAhYCwAHyAfQBiwLEAY4C8ALyAvQCpwMEAmMCAABvAQoDGgJ8AhcCAwIFAoQB +UABhAHIBQABsAGwBaQB5AhkBrAEbADIBHQLmAbEC6AA9AokCiwLsAbsCjgIqAvoCyAL8AyYDCwKaAcADAQIuAwMDTQHLAwYBVgMI +AdEDCgL3A04AIgKTAGwBEQMzAHkDUgNaAqoCrAMOAdwCQwHfAkYAMAAxADcANgJKAzQCXQM3AHIAeQMdAlgB9QMhATkAdAEGAWIA +IgByAQMDMwBzAg0AawNrAtYCBAJxAgcBnwNwAzYDOAJ+AuEDOwA9AuQChQNAAUACiALqAbgBMQLtAikBvwH4AmcCxwLJAjsDUwKj +ApwDAgNMA2MCowNnAqUDWAOgA6YBzANdA18DcwNiAj0DZAHZAkEDZwMQA2oAMQA4AxUB5gOKA3IDYQF5AYUCwQMfAloBUgO9AzgD +hQIFAnICCAECA8YDsAJmAGUDNgAtA34BMAFfADEDjgKCA5EDPwIgA5QC6QKKAusDmANGAu4DmwNJA58CoAOsA08BwgNRA6UDsgOn +AjYDVwOxAqkCowOuA3oDzgNZA+wDDQO1Aq8CRAMRA2sAOAHkAXsDzQNhA88D0QPTAGcD1QN1AsIDdwGNA8UDNQO+A8gDhwLZBAEB +QwJnBAQBBgQGA40BqgLiAzwDPgIfAocD3QNEA+ACKAKPA5wCkgL7A/ADBQIrA+kCngPrA/EBzAOoA+8ELAQoA/MDYAQnAwwCqwO0 +Aq4B3QP7A2oAMgAwArUEAAQNA4wEAwL8BAUBXwPAAfADwgLDBAsDzARBA84EFAREBBYD1QQPAtgDywMzBE0EAgRPA9IEUQAtADMD +1wGtADMChAPaBB4DQgOWAowD4QOaApADnQQmBDEC+APoAp0CLwOrA+wELgPuAyUD9gQtATkEMwP1BHED8QP4BDkDaAKxAXUEPQA5 +A28EVwQTA9AEUAPUBFwECAPDA3gETANxBEIEWQRFA40DLwQQBFUEEgRDBFoEiQA0BF4EGwIeAucD3ARkA94DlwInA0cD4wRqA0oE +NQNbA6MD6gR2BCgELwR1BHsEMgJdA68EAgStBDYDZQP5BDoDaQF2ADIC5ASEBI8ETgSHBJkEFwK1A8EDHgRKAfcEVgTABFgEwgSS +BF0ElARUA4kEhQSYBJIANQScAD0BHgOSA9sBswShBCAEpAPiBGkEJQSoBGwEqgNQBCsEtgNbBK8CYQSpA1QDXASzA/QEtQSxBLcE +OAMPBDsEvAAzADEEvwOLBMEEFQSJAeQExgN2AyAESwTKBPsEzAT9BMQEUwPKBNIEywSGBQcBXwA2BNcAMgA3BJ4DkwTcA0MD3wTf +BGgBjwISAvEC8wTrBOQE7QPkA0sE6ATtBKsE5wTyBOkEdAUfBSQD8gTvBDQFIAFkBDcCrQT1BLsEgQA0AXkEQAUMBNQEWwNuBQAE +CQUCBMkElwSRBFsE1gAsBRsDKgMkBSsE8gTQAzEElgTTBUMEiQA3BNcB4wTaBGMFFwSjA5kEIwMjBR4DCQUoBSEEpwPlAvYEcgRu +A6QFLARzAwcEsAPmBWME7gNeBPAE7AUxBLgEfgO3BLwANQU4A7wFTwTNBFsCSQU+BIwFAwVCBXkEiQUQBUwDiASOBQUFDQSIBBcA +OATXBRMFVQNBBVcEZgQiAu8FHAVJBV0FagR3BCQDngUjBV4DogTmBHAFlgSuBSoFlQViBZcEeQTxBZ8E8wUzA7YE9gSBADUDbgU5 +BYYFOwSJADgEiwTIAY4FBAO+BYcEwwFfBVIFgwQRBXgFDgAtADkE1wA4AXYEHQWOBGUDRQWRA5sBVATvBaYFowQoBVsFaQXPBG0F +mARrBWYFZASsBZsFZwNWBdIC/gXUBaUFbwR9BTQEgAAwAR0DuwW3BJAFgAQXBIMFfAW1BAwFOgVQBYkCYwXMBW0FzgXeBb0FTgXw +BeoD1QAwBNcAOQXFBJ8FFgXIBCEEpQE5BfQBEQX2AycDWwXRBUoFpwNbBSIFbwMABCoFngXTBSkFaAYNBhUE7QXgBTAF4gWqBTUF +5QA1BbMFrwW4BbEEFwAxADAFtAQKBUEFvwWIAV8FwgX4BQsFsAXxA9UD1gQZA48AMQYnBY0EoAWPBckGBQAiBgcAdAYJA6EBzAYM +BaIF3gYPBWAFmgYOBSUFnQYRA1UDqQZOBWwEtAXhBTIDZgP6Bh8BHQSDBiMF6QXABjgGKQVABbYFfwZdBf0GMAWFBiQGMwAtArME +1wKzBgAFFQOVBKIFkAY+BkAGQgPnBUcFHQXdBgoFXwTiBWEGRwZMBhMGUQTqBkYGeQUtBW0FLwUsBh0GVwXkADIChAT6BmcF+wZp +BEcCVwU/A8QGZgZcBi0GaQPWBmUF6AT8BpcC5AScAF8AZgFmAG0AdQGRAWsAKAPZADAAKQAgACsAIAAyAF4ATAAqBjkF/QXGBjsG +AwUZBCMAcwHIAV8FMAHMBnMGUQZFA6oGSwKjBhAGvAXYBScGwgXbBlAGxQZSBW4GHAZVBLkEfwP8BosE+QZbBpwFugZpADMGXwaU +BpsFBgadAn8FRgK7AGsB/gFDAl0AbwRTBU0GMQaOA9EGuQBlAgwGNQM6AhsGoAaiBqQAYQamA9kGqgasBrIAKwAzAF4AKABMBmkA +KQaxAXYBTQYBBm8E3gVZA0gGSQZRBSYGFAZ9A+0GFwaCBkMEeAUuBHoGwgaIBLoF5AO5Ba4FdwX6BusAcAbtAQoE+QXtBioGYQRX +BQkFhAGnAscALQBiAaQFEQQcBwUEHwUYBwgFywM1BggGvwWTBVwGwQYZBsMHCgbLBwwGgAWhBzoHDgOtBxQGdAP3Bs8FcgWrBeUD +PQJKAc4CngcsAG0AYgbaBI0GvgTkA30CEwbiASoAeQbnBygEdAIMA34C3QJfAG4GuQFmA3oB0ATXADUANQa0BgIGcAY9BOACpAQw +BocHSAXjA/wAMAAzBecHXgEKB2AC/AdiB2QDNANXB1MESwd7AHcAYQdbBNAEPQMyB0EG8AGtBD0HawIiASoBLAVYBGcEIwaBB0IG +gwcXBtEDagNrA/8B5gdBB4EB9wPQAXABKgFaAZQEUweIBFUHQQQYB4sBGwA3BGIDQQeQBzIHkwIqBz8GyweVBlQFcQd0B5oANAcb +B7YGkQRJByQGxgcNAycE0AUKB3AC9ARdBjYD2ALlB44BKAewB5IFygE5BsAGUQbEBdcEKQRvB0AHEAeWA6EHmAVzAxIF/wJKB6kG +2QcjBmAH0Qc4BngDTQAiAGIGpABrAC0BLwEjAzQCaAaaB6kEbAGqBzACIweRB7gGHgXkBIEH4AfZBCcHnwGOAT8AZQBhAG0BSABv +AHcH8QeJAc4AbwGlA14AcwBtB6sBHAdqB/YGPAYEB28HtgbOB/kGiQd1AR0H/QFWCAwEswgPCAABOQEkAT0B/QemAgcAYgFYAW8D +cwgRBrIHzAf3B7EH0AXVBOMH1Qe0B9UIGAdyCBoHGAP8ADEANAO7CCoAdAgsA3QH4waUAHMGpABmAHUAcgLeAxsC4AfEBYQIQQhD +AC0ECQBwAZkBGgZrBNkIMAgVBrcHCQZ7BkoHOwYSB9cHtQfzCDoE9Af6CD0ANgYiAFsIUQOMCFQIVgGDCEUEjQhsA3MCYwBzAG8B +kQhLAUkB/QL8CG4BNQcnAnMIcwNhAG0AawAyCFMB9AhVCH4HyQeMBy8GbgcxB88GPgfUBdoHwQfYBdwGGAcOB9wHSgO5BtkBcwiB +A4IIhQh9ARoIIwfpCCsIbQiHCG8CYwBwCAcBaQAtAzMAbQFmAmMBOwB3AC0BaAdjBzYBPwErAvMISgBlCH8DywBiA9AAdAftAG0G +owBuBzYIoAESCIoBGwX/B64GtQdtCBYFGgg3CJIHxgiWB5cHcwhnA7gBdwHlCL4CXgjBCMMIxQimATUIogh2CHgBYAh7CIYBEAiI +CFcITwFQAaUAbwJcAGwIEAKBAa0EYQhaBrYHMwThBZkHCwZNCGMH/ggZCGYIGwO4ADMImwhrAjgI7gBtCKIIkQYOACIDKQMrArsI +TQMuAm8DhgTRB+kDfgBrAhYALQahAQ4EUgjIAoMGOgdsBwcHsgSmCF4I+QZ/CPsIlQcRA6YImAYfBmwI2QkUCRYJGAFHByIESATH +B8AINAZ8BgoDfQBhAl0HhAeGCRADyQhQCS0CfQkvBEYGawZtBNsHBggyCJAHPQg2CPoIOAhkBZsJKQcZADQGKAicCUACvglCAr8I +cQRLAGIJVQkXAWYJMAi8AQEJWwBhCRUJQQleAV8HyAguB8sIFAj1CSAH5QVIBzkH0wlKCNEI0AbIBk8HcQlPCNUI/wKyADkG1Ahr +CVwJVwfiCTIFAQaUB9IHVgliCWQJVglmBJMJPQGaBugJEwljCS4JigSbCRsDPQUUCUYIjgZxB28JhQfVCQgIYAiTCSUGyghlBakJ +egSBADAIQAl/CZIIogmHCZEJGQRcB1wIgAmoCa0E1gkbBGAJHQlHCI8JmgfmCNMHEgk1CF8HQwmfCU0I/AmiBlYIPAQ8ArMJLAmQ +CWUJsgmqCbEBRwSbBmUJqwnKAUcFEAmUCIwJlwTdCUgHbwdVB9UJmwjRCZ0JvwfWBWUI0Qg5CNEGGwnDBtAH3QXlAZwJyAmICV0J +rQU9CYIGkwhyCc0BXwVFBj8HNQZBBDUJ0An0AC0FUgkbBNkIywkeCdkFGgnbCNEJ3Ql1Cb0JIwhiCcEJJgfaBnUJ5gl4CDsHmQS8 +ADQJfQnRCYkJrQV7CfEFfQH3ChcJ7gnTCa8IvQfrB+0HYwFpCCwFUwm2B80CJAm4CM8JTAnjCU4KCAnfCNQKEgnpBjgIagfqAGwH +7AfuCiYBaQkHCXIJCQG1AT8KJAfvCicI6gPLAsgAcgBnAG8ALQGRAG4BuwJ9AUkBfwBhAcgGCAafCRgGowalACIAKAoABvgGrQb9 +Bv8AMQcBBD0BdQcECI0J2AosBCMKBQoICgcJngoJBz4KLgoICeQKCAoQBxYJeQnFBPcGWgBbCkgKSgpMAQYKTwK+ClEBCwpTAUoG +CAiiBuEG4wGLATsKIQEBCjIDCwkbCMoIMAfOCZkKLQkkCgwJoQoRCP4KdwMSADAHnAqNAdUIogJcAf0IUwM3AvMCEgjEAGMBlQVG +AtoBfwENAfoBEgVGAf0AeAPQAREIvAFxAhICkwB1CPAEGgA9B60KkQorCpMEIwl0Cm0Kcgc7CVAHdQWtAeUKtgFWAGkKuQiiCsIG +RwAiASMBSQN+B2cKRgqMCq0BggH8Af4CAAByAUwJGwq9CWsIzQhcA5sKzwaDBskJdwp1CjQHSgqcBXYB+QrZAf0B/wIBCs4KcAXT +CtYB+ANeAGYAZghTAHgBkABvAYsAdgEhCFgKKQpnCsAIXQj4Cm8KlQovCcIKmAmjCpoHmwQ/CnoK+Ar6AGUK/AE7Cv8BIQiiCxQK +/QsXCqkGzAQ0An8K9gEXAlADXgGJAGUBtQc5By4JlgVWCWwIMwpsCeAKngVrCuUJvArECJcKdgoTCaUIagsiAvwLJAEsCycB0Aii +CqsALQLcAvwDLAK9CosB+ABvAtIJDQMtBmkFEQoBB48KvwduBRoLNAozCpkLNwMSCu0LSQtEC0sCvQZpC0AKMAr1CYwBrgJzCzoI +TAtMAn8JGwIdC08KKgeRCwUK5Ar0CeALVAfbCzYJ6QHiCzkLWgtmC10HvgkzB+QAIgjuAl8HZwVGCsoKuABtCWALSAtKAnsLXQlo +CPEBGwjzCuEJHwgzCzAFlwsyBnULcgkoC3QImQT4CskLeAtFCRYJgQaSChwBjguSA3wGowBrCK4AdQB4AygAbwMqC3kC1QpGAmoA +YwJsAZoLjAq8C2sIMQpoB7MLcArmCXYH5wuXCuoGHwQ+CnkLsAuyCvMLCQkJCtIDMwNXC4YCagi3BZQBWwISBywCLgGpCBEBHQj0 +CuII9gjSCScHRwu/B/sCtAubB2MHkAlwC9ABbgGUC18H2Qh1AW8D0AutCE4LYgenCowLqwNeAn0BVQgICEsG7wu0B2kL1guQBj4L +lgvbC1YLdQAzCp0L8AkWC/MIqwkxC6AF7gAiASQBaQBnA2EGmQvtBYQBFwh3DAMIqghLC2gIEQVUC/kKAwrBC7oLMwtgCzUL3Ag9 +A2sLmwwSC/IMFAlYChsMCAwKCkkDvwJpDAIMJQv0C00LrwEyCv4CQwvUCBMKZgqSC1IHlAweC1ULDQtXBeULOQwzCHYBbwiiA/QL +6wkPAtcHpwuxAHUDzwFqC7QK4Aw4C1EIzgwbC8YKwww8C3MMIAeaADULEAxLDE0LxQoLBUsLYgPKAWgAZgEkAq0LtAtqCr4LbQw6 +C7kMVQtxDFcKDwdFB7cL/grrADcFdgxkDGYKPQlZAfcKdAthAtcMYwEhB6MAeQHaC7QJlQu2DDkMUwWSCW8LvQVrC6MF1AuUBWsL +/AWkDHII/Qw+CekEPQcbAWgItwBvDIMAcgiiBeAEmwVGAbsItwFKAewKIQyaCEgISgBpAHoDVwwXCwMMiArjCPcF1glzDBwLlQxw +C/0MlguZCxAMqABsCEkCeAysCz8MewuiCj8MfgkRB8UDRgjACL4BSgFaCUQLAwhbC9gMjgTlDG4LuwvZCg4MuAnEC1cIPgx3ATQM +yQgDAmoLGQqkASoCngglAS8IuwVGCyYCXAIwCIIFSAM3CHUHHwIMCK4C8QztCvYMowFxAzMEFwx4CiUI5gBpCOgIxwvUCdYLKwvX +CW0KbglLDNMMHQsLCnMMlAnnB0kJKgXEAeUM9QBoDPcBXwz5ASMM+wz9Cs4BkgirAHQISgJsCKgMJgitCK8FRgXgBF0FRgjiAzMI +5AvqCMYIvAyjAl8C8wFmDK4MhwxSDLENBAy0DQYMtg0ICm0MfQwfDHQJKgAyCGoNLAN+DS4MngzCDLIINQUoACIM+QJAC4YM6Aei +AC0HfQKTAhUMzAtpCWoKZgzPDQMLLgzUDNEGfgxgCnEMtwR8C5gJKgA5CxANTALzDU4D0wgPAT4BiwFaCKINWAMLBmUM6AFBAcYM +6wzyCLsJGwwYB/YMsAvYDJAFlwySAqIKxgjXCVMAWw1wDOoCDQzsAGUNbAm6AHYHNgzxBqQIuwr2DYMNcg2FDXQHqgxoCFkNeA0y +DNAMxAngDXsFoA04DTsMuQkqADYFdg2QAUYNcw2NDCcMBwk0C50CfQEZCrQM5wr5DXENpQ2SDY0NSw2wDYQNjAM3Ca4NUwzOCywG +Pg1tBnUNWgWcDTYMkQ1eDX4NYAaKAXUB5Q2kAQcNpg25C58Hvwt9Db8CMg1vDOECeAFCDCoMDAisAGMBDwpYAacB7QsCDTEMawyJ +CSELBw0FDVwMVg2eDD0M2Ao1AkgNyg3VDOMB/QwrDdoN3Ab0AewB7g1ECKMIQgPHDOcN7w3XDfEN2Q1AAGkH6gL0DA4MfwWEB6EK +pQ3wDAsDYQ4BDgME6wv2CrsNdwxRDeINMw2cBdQNfQWoDesK6wA5B5wOCAziDf4OCwizAi0CeA4OAjkMBg3QBpQIxAggCrkNSw39 +CFMN/w4MDiMOAgXMAjkMFgu0C44NVQ29B28NwQhhCeINXQ3pDFgNPAcZADIJAg4eDdYOLw4hDg0ONAFbC3sJgwSNDNEMCQ4uDdgO +MQi3DjMOBA4tB6IORwzkCCcNdgyvDZgNAw48CcALCgoNDHMNoA5DDh0OUgEwDOUKPgkiB1YAbAB1CVsClAjpDGIOBw4uApMIxAJ9 +AGQCeAM2C04MGQu4A5sOGAI+DccHdQQ+De4OWQKeDncJFg56A3EL5g5kBGwHhwIHDkYHpAqoC9QN4QwaAioOgQOzDmYOhA5FDdUO +kw33DCgJNA4YDpACcwehAQUBbwd6CTkAbAtOC7YNVggzDhYGFg6ODQsHuQHhDaIOhg6nB18OqgkHAVoLsQH+DOYHxg65B2ENZwip +B38K1Q50DqUOMAtNCbQANgxqDpcOgA3FDhkJ6ArrC5oBcw5TC14N+ABzAHkBMAGSDC0LiALfAr4OBQkRC+4MCQ7JDjYKuwlSDpYO +fw5iDj8OsgsMDhoLwAA5DaMO5QtAAxcKrAGBDa4LhwtbC4kJFgbfA1wB/g0RAG4IdwxHDDEOxwPLDtYLiwq7C2oO6QtuDUUJNgm8 +DrAE7Q6ZBXAOQghoDkUOyQ3PC3wJhAtcCRYNrQqvDUgBIQypDL8Lyg0iAHULpgEYC6kM5w7lDUsOyQJmATQAbAEKDSoKjw28DQIO +rwy1DcQOQAxxBoUHFQrFDoMI1wcbDtYPLQPQDzAI3wihDtgIdw0nCHoNKQ9EDx4NOgfDDwUBAQ9AAGgPLgEKCIMInw9LCykOrQ46 +BRoOYQnhBdkO7AqXDQkPOgdGDV8MWQKyADcIag9RD1MIng0WCG8NbA0fAHIIrgByCLAIBwizASQDIAQCC+ENGwEyAmMNIwJjD2kP +Qg9sCH4KRg5bC7MKuweNDZcOFAvYDxINfwHhA7kNyg5qAf0I4QvpDvoO3wgoDqUAeALIDqcODwX+DzML+gdvDxAHDw7tCukPFAO4 +BicNyg+YAGEPmg4mCs4OcA3WAQYPHg4qAaUOLA2PD6gPqg5MCigPWQ80CUkObQ3mDj4N6A+iDzwPZQMSBGAPpw+ZA+8OTQnyBEsL +FA/GDlcLgg2aD04OBg+XCv4G4gM3AVUBWw8xCC4Nlg45D7oOOw/PDw8PNg18DtAOgg/CB5sKeQsUD9MHoQ/WD4EPRQ6hDdEPGw2s +CMQPHg5GDfAIJg6/DSYIeQEGD0oI5winD7QLGwBpCwAD0gdYAf4IdAnVCyoFxw/cD1sP3gZ1D6AK5wyMDJMPYg5lDu8HGQA3A7sL +GgsWD/8BXwqHB1oKhhACB1oPfAxyBM8PBRAWCv4QGAG+DwkJRQRjDXkOYBAKCzEP4A2dD8ANnxASCD0ANA1jCxUQJAsADqANqQt9 +CEcMvQhKDEcPfA8lC6cLqQr2CkEIwAo7B/APcgmUDwsMbA7PDzgM1w7SC8ADbAHlEEUKQwo8DUMP7QhGD5MQPw38DlkOnw+WACwL +fwrUAmEOlRBLDeMO6w+/D2APwQ+kAeEANQp5EGEHgA34B70IdQBlCtMLyhBEAl0LgATrCIMF5QzNEGUNMw9cEAwLvAm7C74QawMS +ADQIahBvAvQQew/IC6EBORA8DL4QPxB3CqIOkgqnC9MONxAGBKAQKg81DcMP4RBOD2QQhQF1ADkQiAzlCqMQXRCVCKIG4gB2CHgC +Yw+xCswLhQVGAZABkgvSAmMAZg5vAGkJDA77An0BVwFxDOUDgQ7hCT4CcwJcDVELzwzeAewP6wz+DGgNVAnXEJoNvgm6C9oFlxCA +EC4OFw/iBhoNCg7uEFAHGQA5BxsQwg1qEMQMpQFmEMcNiAyLEIMCPQGPD28PcQ9zCLIItA93AUMPeQi6EB8QEA6PC2IFTRC1CAQO +/wISC/QMNg+5D54KlA3nDG8QngSyEPEOswjWAeEDbRBTAZEBmQB0AGgQ+Ax6EFgOTwucD+8Cvg79D00Nbg8FEPUIwgBhAGIDNxAm +BjcQmAoCDuoPXQbHEGgK6BBqDpsHmgA3CQIRFwFXERoLGA34C0MQkQ9PC34QtgEKDwAAZAvxAhcQSg7NESAPiw89D40QbhEzAC0R +NRE3D5IG7Q+UCQ4QXwEBELUBEBC4Dt8CTRC8Af0QvgTXBGAROg8MDNUQERDYB3UJ6wFzEUoQtw8DELsPUhFQDtcRDgRLC8gQYgzM +DqQDyxFcAQoRZQvKC2kQKBAHEPwEIxDREJwQLxBpEDERWAO4ADQRPxFLAUMQdAvJDMERYwH3EI8QPg2rAhcPJA8mC6gLhhFqAC0H +hApKAmIJ/ww3CdcOrgv7ENQPExEmAeEAMxCIEUARjQ1rDfgHgweFCKgPeAFmAGEEFwN6AG4AawGVEWgRSQh3CLEIqwvjCMAEGg7K +EPoOfhFVEIERVgbLERQQhBGXAXYAOAl9BqEDNgwmEa8B6QIbEWIQOgaUDUkH8RExEb8RrQhLEcIRsQ7mA48O6BG0EEwQZxD/EDAM +1BG5EE8NDAf7ADgQ2xGsEcEIDAFuEcMBGg2oDigEjRHLEeAL0RHjCMAQvwSVEasRwAwwEc4DOw26DTAR0xBmDTQKCBG2DxIHRBEC +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 +Hu4J5SDdBCggbxh7HhsgVgdKAz4B5SHEAewIRBWWINMW9B4dCQoV/hV1FO0UxRzGAD0aFiHJFr4hTww/HnwBcxYjIeQVCBSjGiUS +zBxOIfAVFSHlAgwaMCBtC28e1h5LHIUbVgHlIfcVLyH5FLAhRCGCA3wiAxU8Hj8LhiIKFVQeWxsVIDUhPCDcGHEhKiA6CX0iDhV8 +AgwgXgSNGmYiGSIFFyEZjCHiFd4h8RU4AQogawgSIfwfRyCXIRghqxQ/DQ4h7yHjIfgh8hIVCKIiHyI0HoMCcyI3IiYALSCLC40g +HxvWIWMgdB+nHXoiLhe7B5wiOx4yHpMV+w5QIkkUzB6ZCRIiThVVGzIhYR2pH7ggkSHQGGwhziHMGfIgmCHSHZ8guQ+OIjEiJCIz +Ijwd6hX7GgEiUhUYC0cJCxA/IAshOiHrIQkXkAS+Ie8LqxFMCQ4gFR+vFvUJCiJ2F4MfRSISIf4gIxdeIkgifRPzH5ciKxDlIm0h +dhTwCtwG4hJiAW4DgSIMFtMigCB1IYQYGw6FInUK3RIrIpAeMh5ADAgW4R7BIg0CASKbATYeRiF8GDIg8yBzHtUilSH/G6MfNSKZ +Io4aBSKlHlEhixZAIo0ipCKRHlYioiKaIo8isxTTHXMgbB6IH7oTgSKqH70hRR08Hxwgtx4EHrIawCC5Iq8AWyK3Ir0iuRToIH8g +rg1HItEisiLTIfoibCKjItIecQdoHJoVHB+jIsMb+CLFILMiCB55Il4iFQZ1GuYfwhobIrAiuB5/Dfgi2BGvItoBCiHCIjoi3SLZ +IkogqyIqGsoiVx6jIJIgsSLmIPUixyLpIi0iXx72Hg8iGCL6IvUiSiI2Iw0SBSL2E5QGZSL0IxIeMh6eARoYVSDLBNkSRgAuADUa +3QA2IM8GsyJVIdUg6yDUIswcoCCwIc0hgCKIIYMjCCLrIWkguQdpIgIjEQvRIxMiZwwIIxYjNyL8IOoa5CHgH9kjOyKcHDoaSiJU +IeoZyiJCIqsiRB56G74RvSM1Irwi+yNEFbkRniKhCvYjQiKzAewV6BzaFxEU+xEgIaYKCiNLIpYUmw4cI08isSMOI1IbqQ34HpUj +VyKRI1kGJiLcI1AjZyNuGlMe6SNHDQMh1CNfCwgirCLJIRkg+B6sA7sjbBjEHDsaZBsjImkjNiNDI3MiIR6aAWQ= ]] diff --git a/changelog.txt b/changelog.txt index 2f02fd0..cb7b281 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,18 @@ --------------------------------------------------------------------------------------------------- +Version: 3.1.0 +Date: ??? + Breaking Changes: + - Removed charging ports from construction zone extenders. Resolves https://github.com/pyanodon/pybugreports/issues/791 + Changes: + - Updated to Factorio 2.1 + - Removed sinkhole flipping adjustment script since mirroring has been improved on the engine side + - Removed unnecessary prototype values to clear up the log + - Fixed that many buildings did not have certain pipe covers rendered + - Reduced most fluidbox sizes from 1000 to 100 + - Added a mod setting to show item/fluid voiding in production statistics, default on + - Added the following entities to be hidden when visibility of tall entities is toggled: 10k, 40k, 50k, and 80k tanks, accumulator mk02, barreling machine + - Allowed the advanced locomotive, cargo wagon, and fluid wagon to be used with the upgrade planner to upgrade trains +--------------------------------------------------------------------------------------------------- Version: 3.0.21 Date: ???? Changes: diff --git a/control.lua b/control.lua index 4c23dec..f90f794 100644 --- a/control.lua +++ b/control.lua @@ -1,6 +1,5 @@ require "__pypostprocessing__.lib" require "scripts.tank-rotation" -require "scripts.sinkhole" py.finalize_events() diff --git a/data-final-fixes.lua b/data-final-fixes.lua index 5fea254..d40cd2d 100644 --- a/data-final-fixes.lua +++ b/data-final-fixes.lua @@ -17,33 +17,20 @@ if settings.startup["py-braided-pipes"].value then for _, entity in pairs(data.raw[entity_prototype] or {}) do local fluid_boxes = {} - for _, fluid_box in pairs(entity.fluid_boxes or {}) do fluid_boxes[#fluid_boxes + 1] = fluid_box end - if entity.fluid_box then - fluid_boxes[#fluid_boxes + 1] = entity.fluid_box - end - - if entity.input_fluid_box then - fluid_boxes[#fluid_boxes + 1] = entity.input_fluid_box - end - - if entity.output_fluid_box then - fluid_boxes[#fluid_boxes + 1] = entity.output_fluid_box - end - - if entity.fuel_fluid_box then - fluid_boxes[#fluid_boxes + 1] = entity.fuel_fluid_box - end - - if entity.oxidizer_fluid_box then - fluid_boxes[#fluid_boxes + 1] = entity.oxidizer_fluid_box - end + -- add generically, if they're nil this does nothing + fluid_boxes[#fluid_boxes + 1] = entity.fluid_box + fluid_boxes[#fluid_boxes + 1] = entity.input_fluid_box + fluid_boxes[#fluid_boxes + 1] = entity.output_fluid_box + fluid_boxes[#fluid_boxes + 1] = entity.fuel_fluid_box + fluid_boxes[#fluid_boxes + 1] = entity.oxidizer_fluid_box if entity.energy_source and entity.energy_source.type == "fluid" then fluid_boxes[#fluid_boxes + 1] = entity.energy_source.fluid_box + fluid_boxes[#fluid_boxes + 1] = entity.energy_source.output_fluid_box end for _, fluid_box in pairs(fluid_boxes) do diff --git a/data-updates.lua b/data-updates.lua index dd5f330..8c3cc04 100644 --- a/data-updates.lua +++ b/data-updates.lua @@ -1,78 +1,78 @@ -if settings.startup["py-tank-adjust"].value then - if mods["pypetroleumhandling"] then - data.raw["storage-tank"]["py-tank-9000"].fluid_box.volume = 180000 - data.raw["storage-tank"]["py-tank-9000"].localised_name = {"entity-name.py-tank-9000-adjust"} - data.raw["storage-tank"]["py-tank-10000"].fluid_box.volume = 250000 - data.raw["storage-tank"]["py-tank-10000"].localised_name = {"entity-name.py-tank-10000-adjust"} - end -end - ---Tiles -require "prototypes/tiles/py-asphalt" -require "prototypes/tiles/py-limestone" -require "prototypes/tiles/py-coal-tile" -require "prototypes/tiles/py-iron" -require "prototypes/tiles/py-steel" -require "prototypes/tiles/py-aluminium" - -if mods.pyalternativeenergy then - require "prototypes/tiles/py-quartz" - require "prototypes/tiles/multicolored-concrete" -end - -require "prototypes/updates/base-updates" - -if mods["pycoalprocessing"] then - require "prototypes/updates/pycoalprocessing-updates" - require "prototypes/tiles/py-iron-oxide" - require "prototypes/tiles/py-nexelit" -end - -if mods["pyfusionenergy"] then - require "prototypes/updates/pyfusionenergy-updates" -end - -if mods["pyrawores"] then - require "prototypes/updates/pyrawores-updates" -end - -if mods["pyalternativeenergy"] then - require "prototypes/updates/pyalternativeenergy-updates" -end - -if mods.pyrawores then - RECIPE("accumulator-mk02"):replace_ingredient("copper-cable", "tinned-cable"):replace_ingredient("iron-plate", "stainless-steel") -end - -for f, _ in pairs(data.raw.fluid) do - for i, recipe_name in pairs { - "empty-" .. f .. "-canister", - "empty-" .. f .. "-barrel", - "fill-" .. f .. "-canister", - f .. "-barrel" - } do - local recipe = data.raw.recipe[recipe_name] and RECIPE(recipe_name) - if recipe ~= nil then - recipe:set_fields {hide_from_player_crafting = true, hide_from_stats = true} - -- This is backwards, I blame king - if recipe_name:match("^empty") then - recipe.category = "py-barreling" - else - recipe.category = "py-unbarreling" - end - end - end -end - -if mods["valves"] then - data.raw.valve["valves-top_up"].next_upgrade = "py-underflow-valve" - data.raw.valve["valves-top_up"].collision_box = data.raw.valve["py-underflow-valve"].collision_box - data.raw.valve["valves-overflow"].next_upgrade = "py-overflow-valve" - data.raw.valve["valves-overflow"].collision_box = data.raw.valve["py-overflow-valve"].collision_box -end - -if register_cache_file ~= nil then - register_cache_file({"pyindustry"}, "__pyindustry__/cached-configs/pyindustry.lua") - register_cache_file({"pycoalprocessing", "pyindustry"}, "__pyindustry__/cached-configs/pycoalprocessing+pyindustry.lua") - register_cache_file({"pycoalprocessing", "pyfusionenergy", "pyindustry"}, "__pyindustry__/cached-configs/pycoalprocessing+pyfusionenergy+pyindustry.lua") -end +if settings.startup["py-tank-adjust"].value then + if mods["pypetroleumhandling"] then + data.raw["storage-tank"]["py-tank-9000"].fluid_box.volume = 180000 + data.raw["storage-tank"]["py-tank-9000"].localised_name = {"entity-name.py-tank-9000-adjust"} + data.raw["storage-tank"]["py-tank-10000"].fluid_box.volume = 250000 + data.raw["storage-tank"]["py-tank-10000"].localised_name = {"entity-name.py-tank-10000-adjust"} + end +end + +--Tiles +require "prototypes/tiles/py-asphalt" +require "prototypes/tiles/py-limestone" +require "prototypes/tiles/py-coal-tile" +require "prototypes/tiles/py-iron" +require "prototypes/tiles/py-steel" +require "prototypes/tiles/py-aluminium" + +if mods.pyalternativeenergy then + require "prototypes/tiles/py-quartz" + require "prototypes/tiles/multicolored-concrete" +end + +require "prototypes/updates/base-updates" + +if mods["pycoalprocessing"] then + require "prototypes/updates/pycoalprocessing-updates" + require "prototypes/tiles/py-iron-oxide" + require "prototypes/tiles/py-nexelit" +end + +if mods["pyfusionenergy"] then + require "prototypes/updates/pyfusionenergy-updates" +end + +if mods["pyrawores"] then + require "prototypes/updates/pyrawores-updates" +end + +if mods["pyalternativeenergy"] then + require "prototypes/updates/pyalternativeenergy-updates" +end + +if mods.pyrawores then + RECIPE("accumulator-mk02"):replace_ingredient("copper-cable", "tinned-cable"):replace_ingredient("iron-plate", "stainless-steel") +end + +for f, _ in pairs(data.raw.fluid) do + for i, recipe_name in pairs { + "empty-" .. f .. "-canister", + "empty-" .. f .. "-barrel", + "fill-" .. f .. "-canister", + f .. "-barrel" + } do + local recipe = data.raw.recipe[recipe_name] and RECIPE(recipe_name) + if recipe ~= nil then + recipe:set_fields {hide_from_player_crafting = true, hide_from_stats = true} + -- This is backwards, I blame king + if recipe_name:match("^empty") then + recipe.categories = {"py-barreling"} + else + recipe.categories = {"py-unbarreling"} + end + end + end +end + +if mods["valves"] then + data.raw.valve["valves-top_up"].next_upgrade = "py-underflow-valve" + data.raw.valve["valves-top_up"].collision_box = data.raw.valve["py-underflow-valve"].collision_box + data.raw.valve["valves-overflow"].next_upgrade = "py-overflow-valve" + data.raw.valve["valves-overflow"].collision_box = data.raw.valve["py-overflow-valve"].collision_box +end + +if register_cache_file ~= nil then + register_cache_file({"pyindustry"}, "__pyindustry__/cached-configs/pyindustry.lua") + register_cache_file({"pycoalprocessing", "pyindustry"}, "__pyindustry__/cached-configs/pycoalprocessing+pyindustry.lua") + register_cache_file({"pycoalprocessing", "pyfusionenergy", "pyindustry"}, "__pyindustry__/cached-configs/pycoalprocessing+pyfusionenergy+pyindustry.lua") +end diff --git a/info.json b/info.json index 542aa1a..e4a39fe 100644 --- a/info.json +++ b/info.json @@ -1,30 +1,30 @@ -{ - "name": "pyindustry", - "version": "3.0.21", - "factorio_version": "2.0", - "title": "Pyanodons Industry", - "author": "Pyanodon, Nexela, Kingarthur, notnotmelon, Mootykins, ShadowGlass, Archezekiel, Quintuple, przemo1232", - "contact": "https://discord.gg/SBHM3h5Utj", - "homepage": "https://github.com/pyanodon/pyindustry", - "description": "Control the means of production with new logistic and storage structures. Works either as a standalone mod or alongside the rest of the pY modpack.", - "dependencies": [ - "base >= 2.0.48", - "~ pypostprocessing >= 3.0.35", - "~ pyindustrygraphics >= 3.0.0", - "? pycoalprocessing >= 1.0.6", - "? pyfusionenergy >= 1.0.3", - "! wret-beacon-rebalance-mod", - "! BigBags", - "! ResearchFog", - "! omnimatter_energy" - ], - "package": { - "ignore": [], - "scripts": {} - }, - "quality_required": false, - "space_travel_required": false, - "spoiling_required": false, - "freezing_required": false, - "segmented_units_required": false -} +{ + "name": "pyindustry", + "version": "3.1.0", + "factorio_version": "2.1", + "title": "Pyanodons Industry", + "author": "Pyanodon, Nexela, Kingarthur, notnotmelon, Mootykins, ShadowGlass, Archezekiel, Quintuple, przemo1232, protocol_1903", + "contact": "https://discord.gg/SBHM3h5Utj", + "homepage": "https://github.com/pyanodon/pyindustry", + "description": "Control the means of production with new logistic and storage structures. Works either as a standalone mod or alongside the rest of the pY modpack.", + "dependencies": [ + "base >= 2.1.0", + "~ pypostprocessing >= 3.1.0", + "~ pyindustrygraphics >= 3.1.0", + "? pycoalprocessing >= 3.1.0", + "? pyfusionenergy >= 3.1.0", + "! wret-beacon-rebalance-mod", + "! BigBags", + "! ResearchFog", + "! omnimatter_energy" + ], + "package": { + "ignore": [], + "scripts": {} + }, + "quality_required": false, + "space_travel_required": false, + "spoiling_required": false, + "freezing_required": false, + "segmented_units_required": false +} diff --git a/locale/en/locale.cfg b/locale/en/locale.cfg index c628dbb..d0a1177 100644 --- a/locale/en/locale.cfg +++ b/locale/en/locale.cfg @@ -214,10 +214,12 @@ poorman-wood-fence=Poor man's wooden fence [mod-setting-name] py-tank-adjust=Adjust Pymods' storage tanks capacity py-braided-pipes=Enable braided pipes +py-show-voiding-in-stats=Show voiding in production statistics [mod-setting-description] py-tank-adjust=Makes tank capacity consistent with their physical size py-braided-pipes=This setting makes vanilla pipes, niobium pipes, and multipurpose pipes not connect with each other. It also makes their underground versions not connect with each other, allowing for underground pipe braiding. +py-show-voiding-in-stats=Shows item/fluid voiding in production statistics. Note this is not retroactive, turning it on after the fact will not reflect voided materials and turning it off will not hide materials voided. [recipe-name] py-void=Void __1__ diff --git a/prototypes/buildings/accumulator-mk02.lua b/prototypes/buildings/accumulator-mk02.lua index 1148bc2..e004370 100644 --- a/prototypes/buildings/accumulator-mk02.lua +++ b/prototypes/buildings/accumulator-mk02.lua @@ -1,114 +1,115 @@ -RECIPE { - type = "recipe", - name = "accumulator-mk02", - energy_required = 0.5, - category = "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "item", name = "battery", amount = 50}, - {type = "item", name = "processing-unit", amount = 15}, - {type = "item", name = "iron-plate", amount = 100}, - {type = "item", name = "copper-cable", amount = 150}, - {type = "item", name = "steel-plate", amount = 60}, - }, - results = { - {type = "item", name = "accumulator-mk02", amount = 1} - } -}:replace_ingredient("steel-plate", "nexelit-plate"):add_ingredient {type = "item", name = "optical-fiber", amount = 30}:add_unlock("py-accumulator-mk02") - -ITEM { - type = "item", - name = "accumulator-mk02", - icon = "__pyindustrygraphics__/graphics/icons/accumulator-mk02.png", - icon_size = 64, - flags = {}, - subgroup = "py-electric", - order = "a", - place_result = "accumulator-mk02", - stack_size = 50 -} - -ENTITY { - type = "accumulator", - name = "accumulator-mk02", - icon = "__pyindustrygraphics__/graphics/icons/accumulator-mk02.png", - icon_size = 64, - flags = {"placeable-neutral", "player-creation"}, - minable = {mining_time = 0.1, result = "accumulator-mk02"}, - max_health = 150, - corpse = "medium-remnants", - collision_box = {{-2.4, -2.4}, {2.4, 2.4}}, - selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, - energy_source = mods.pyalternativeenergy and { - type = "electric", - buffer_capacity = "15GJ", - usage_priority = "tertiary", - input_flow_limit = "2GW", - output_flow_limit = "2GW" - } or { - type = "electric", - buffer_capacity = "450MJ", - usage_priority = "tertiary", - input_flow_limit = "50000kW", - output_flow_limit = "50000kW" - }, - chargable_graphics = { - picture = { - filename = "__pyindustrygraphics__/graphics/entity/accumulator-mk02/charged.png", - priority = "extra-high", - width = 192, - height = 288, - shift = util.by_pixel(16, -64), - }, - charge_animation = { - filename = "__pyindustrygraphics__/graphics/entity/accumulator-mk02/charging.png", - width = 192, - height = 288, - line_length = 10, - frame_count = 70, - shift = util.by_pixel(16, -64), - animation_speed = 0.3 - }, - charge_cooldown = 30, - charge_light = {intensity = 0.7, size = 7, color = {r = 0.219, g = 0.835, b = 0.188}}, - discharge_animation = { - filename = "__pyindustrygraphics__/graphics/entity/accumulator-mk02/discharge.png", - width = 192, - height = 288, - line_length = 9, - frame_count = 36, - shift = util.by_pixel(16, -64), - animation_speed = 0.3 - }, - discharge_cooldown = 60, - discharge_light = {intensity = 0.7, size = 7, color = {r = 0.862, g = 0.117, b = 0.117}}, - }, - impact_category = "metal-large", - working_sound = { - sound = { - filename = "__pyindustrygraphics__/sounds/accumulator-mk02.ogg", - volume = 0.5 - }, - idle_sound = { - filename = "__base__/sound/accumulator-idle.ogg", - volume = 0.2 - }, - max_sounds_per_prototype = 5 - }, - circuit_connector = { - points = { - shadow = { - red = {0.984375, 1.10938}, - green = {0.890625, 1.10938} - }, - wire = { - red = {0.6875, 0.59375}, - green = {0.6875, 0.71875} - } - }, - sprites = table.deepcopy(data.raw.accumulator.accumulator.circuit_connector.sprites) - }, - circuit_wire_max_distance = 9, - default_output_signal = {type = "virtual", name = "signal-A"}, - fast_replaceable_group = "py-accumulator" -} +RECIPE { + type = "recipe", + name = "accumulator-mk02", + energy_required = 0.5, + categories = {"crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "item", name = "battery", amount = 50}, + {type = "item", name = "processing-unit", amount = 15}, + {type = "item", name = "iron-plate", amount = 100}, + {type = "item", name = "copper-cable", amount = 150}, + {type = "item", name = "steel-plate", amount = 60}, + }, + results = { + {type = "item", name = "accumulator-mk02", amount = 1} + } +}:replace_ingredient("steel-plate", "nexelit-plate"):add_ingredient {type = "item", name = "optical-fiber", amount = 30}:add_unlock("py-accumulator-mk02") + +ITEM { + type = "item", + name = "accumulator-mk02", + icon = "__pyindustrygraphics__/graphics/icons/accumulator-mk02.png", + icon_size = 64, + flags = {}, + subgroup = "py-electric", + order = "a", + place_result = "accumulator-mk02", + stack_size = 50 +} + +ENTITY { + type = "accumulator", + name = "accumulator-mk02", + icon = "__pyindustrygraphics__/graphics/icons/accumulator-mk02.png", + icon_size = 64, + flags = {"placeable-neutral", "player-creation"}, + minable = {mining_time = 0.1, result = "accumulator-mk02"}, + max_health = 150, + corpse = "medium-remnants", + collision_box = {{-2.4, -2.4}, {2.4, 2.4}}, + selection_box = {{-2.5, -2.5}, {2.5, 2.5}}, + energy_source = mods.pyalternativeenergy and { + type = "electric", + buffer_capacity = "15GJ", + usage_priority = "tertiary", + input_flow_limit = "2GW", + output_flow_limit = "2GW" + } or { + type = "electric", + buffer_capacity = "450MJ", + usage_priority = "tertiary", + input_flow_limit = "50000kW", + output_flow_limit = "50000kW" + }, + tall = true, + chargable_graphics = { + picture = { + filename = "__pyindustrygraphics__/graphics/entity/accumulator-mk02/charged.png", + priority = "extra-high", + width = 192, + height = 288, + shift = util.by_pixel(16, -64), + }, + charge_animation = { + filename = "__pyindustrygraphics__/graphics/entity/accumulator-mk02/charging.png", + width = 192, + height = 288, + line_length = 10, + frame_count = 70, + shift = util.by_pixel(16, -64), + animation_speed = 0.3 + }, + charge_cooldown = 30, + charge_light = {intensity = 0.7, size = 7, color = {r = 0.219, g = 0.835, b = 0.188}}, + discharge_animation = { + filename = "__pyindustrygraphics__/graphics/entity/accumulator-mk02/discharge.png", + width = 192, + height = 288, + line_length = 9, + frame_count = 36, + shift = util.by_pixel(16, -64), + animation_speed = 0.3 + }, + discharge_cooldown = 60, + discharge_light = {intensity = 0.7, size = 7, color = {r = 0.862, g = 0.117, b = 0.117}}, + }, + impact_category = "metal-large", + working_sound = { + sound = { + filename = "__pyindustrygraphics__/sounds/accumulator-mk02.ogg", + volume = 0.5 + }, + idle_sound = { + filename = "__base__/sound/accumulator-idle.ogg", + volume = 0.2 + }, + max_sounds_per_prototype = 5 + }, + circuit_connector = { + points = { + shadow = { + red = {0.984375, 1.10938}, + green = {0.890625, 1.10938} + }, + wire = { + red = {0.6875, 0.59375}, + green = {0.6875, 0.71875} + } + }, + sprites = table.deepcopy(data.raw.accumulator.accumulator.circuit_connector.sprites) + }, + circuit_wire_max_distance = 9, + default_output_signal = {type = "virtual", name = "signal-A"}, + fast_replaceable_group = "py-accumulator" +} diff --git a/prototypes/buildings/barrel-machine.lua b/prototypes/buildings/barrel-machine.lua index 7a1a2af..f7ef51e 100644 --- a/prototypes/buildings/barrel-machine.lua +++ b/prototypes/buildings/barrel-machine.lua @@ -41,7 +41,6 @@ ENTITY { dying_explosion = "big-explosion", collision_box = {{-1.3, -1.3}, {1.3, 1.3}}, selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, - forced_symmetry = "diagonal-neg", module_slots = 4, allowed_effects = {"speed", "consumption"}, crafting_categories = {"py-barreling", "py-unbarreling"}, @@ -56,6 +55,7 @@ ENTITY { }, }, energy_usage = "200kW", + tall = true, graphics_set = { animation = { layers = { @@ -91,7 +91,6 @@ ENTITY { } }, }, - fluid_boxes_off_when_no_fluid_recipe = true, fluid_boxes = { --1 { @@ -117,7 +116,6 @@ ENTITY { { filename = "__base__/sound/assembling-machine-t2-1.ogg", volume = 0.55, - audible_distance_modifier = 0.5, } }, fade_in_ticks = 4, diff --git a/prototypes/buildings/containers/connectors.lua b/prototypes/buildings/containers/connectors.lua index 41a02b1..1003fce 100644 --- a/prototypes/buildings/containers/connectors.lua +++ b/prototypes/buildings/containers/connectors.lua @@ -12,36 +12,44 @@ function connectors.sprites(con_shift, shadow_shift) scale = 0.5 }, led_red = { - filename = "__base__/graphics/entity/circuit-connector/circuit-connector-led-red-glow.png", + filename = "__base__/graphics/entity/circuit-connector/ccm-universal-04i-red-LED-sequence.png", priority = "low", - width = 13, - height = 12, - shift = red_green_shift + width = 48, + height = 46, + shift = red_green_shift, + draw_as_glow = true, + scale = 0.5, + line_length = 8 }, led_green = { - filename = "__base__/graphics/entity/circuit-connector/circuit-connector-led-green-glow.png", + filename = "__base__/graphics/entity/circuit-connector/ccm-universal-04h-green-LED-sequence.png", priority = "low", - width = 13, - height = 12, - shift = red_green_shift + width = 48, + height = 46, + shift = red_green_shift, + draw_as_glow = true, + scale = 0.5, + line_length = 8 }, led_blue = { - filename = "__base__/graphics/entity/circuit-connector/circuit-connector-led-blue-glow.png", + filename = "__base__/graphics/entity/circuit-connector/ccm-universal-04e-blue-LED-on-sequence.png", priority = "low", - width = 13, - height = 12, - shift = blue_shift + width = 60, + height = 60, + shift = blue_shift, + draw_as_glow = true, + scale = 0.5, + line_length = 8 }, - logistic_animation = { - filename = "__base__/graphics/entity/circuit-connector/circuit-connector-logistic-animation.png", + led_blue_off = { + filename = "__base__/graphics/entity/circuit-connector/ccm-universal-04f-blue-LED-off-sequence.png", priority = "low", - blend_mode = "additive", - line_length = 4, - width = 43, - height = 43, - frame_count = 15, - animation_speed = 0.5, - shift = {0, 0} + width = 46, + height = 44, + shift = blue_shift, + draw_as_glow = true, + scale = 0.5, + line_length = 8 }, led_light = { intensity = 0.8, diff --git a/prototypes/buildings/containers/deposit.lua b/prototypes/buildings/containers/deposit.lua index 22abdb1..08e091b 100644 --- a/prototypes/buildings/containers/deposit.lua +++ b/prototypes/buildings/containers/deposit.lua @@ -119,8 +119,10 @@ local function define_deposit(name, logistics_name) shift = util.by_pixel(16, -32), }, circuit_wire_max_distance = 9, - -- circuit_connector_sprites = connectors.sprites({0, -2.4}), - circuit_connector = {points = connectors.points {-0.11, -2.82}}, + circuit_connector = {{ + points = connectors.points {-0.11, -2.82}, + sprites = connectors.sprites({0, -2.4}) + }}, } if logistics_name then diff --git a/prototypes/buildings/containers/shed.lua b/prototypes/buildings/containers/shed.lua index fe1551c..7989134 100644 --- a/prototypes/buildings/containers/shed.lua +++ b/prototypes/buildings/containers/shed.lua @@ -119,8 +119,10 @@ local function define_shed(name, logistics_name) shift = util.by_pixel(16, -16), }, circuit_wire_max_distance = 9, - --circuit_connector_sprites = connectors.sprites({0.75, 0.55}), - circuit_connector = {points = connectors.points {0.64, 0.13}}, + circuit_connector = {{ + points = connectors.points {0.64, 0.13}, + sprites = connectors.sprites({0.75, 0.55}) + }}, } if logistics_name then diff --git a/prototypes/buildings/containers/storehouse.lua b/prototypes/buildings/containers/storehouse.lua index 4ec499a..efc30c1 100644 --- a/prototypes/buildings/containers/storehouse.lua +++ b/prototypes/buildings/containers/storehouse.lua @@ -119,8 +119,10 @@ local function define_storehouse(name, logistics_name) shift = util.by_pixel(2, -12), }, circuit_wire_max_distance = 9, - --circuit_connector_sprites = connectors.sprites({0.0, -1.50}), - circuit_connector = {points = connectors.points {-0.11, -1.92}}, + circuit_connector = {{ + points = connectors.points {-0.11, -1.92}, + sprites = connectors.sprites({0.0, -1.50}) + }}, } if logistics_name then diff --git a/prototypes/buildings/containers/warehouse.lua b/prototypes/buildings/containers/warehouse.lua index 9370106..be1a6d3 100644 --- a/prototypes/buildings/containers/warehouse.lua +++ b/prototypes/buildings/containers/warehouse.lua @@ -119,7 +119,7 @@ local function define_warehouse(name, logistics_name) shift = util.by_pixel(10, -16), }, circuit_wire_max_distance = 9, - circuit_connector = circuit_connector_definitions["py-warehouse"], + circuit_connector = {circuit_connector_definitions["py-warehouse"]}, } if logistics_name then diff --git a/prototypes/buildings/fluid-tanks/tanks-1000.lua b/prototypes/buildings/fluid-tanks/tanks-1000.lua index e27d94a..3baae18 100644 --- a/prototypes/buildings/fluid-tanks/tanks-1000.lua +++ b/prototypes/buildings/fluid-tanks/tanks-1000.lua @@ -52,6 +52,7 @@ ENTITY { } }, window_bounding_box = {{-0.0, 0.0}, {0.0, 0.0}}, + tall = true, pictures = { picture = { sheets = { @@ -86,7 +87,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-1500.lua b/prototypes/buildings/fluid-tanks/tanks-1500.lua index d4a5a2c..63deabd 100644 --- a/prototypes/buildings/fluid-tanks/tanks-1500.lua +++ b/prototypes/buildings/fluid-tanks/tanks-1500.lua @@ -83,7 +83,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-3000.lua b/prototypes/buildings/fluid-tanks/tanks-3000.lua index b1ee356..c83b58d 100644 --- a/prototypes/buildings/fluid-tanks/tanks-3000.lua +++ b/prototypes/buildings/fluid-tanks/tanks-3000.lua @@ -84,7 +84,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-4000.lua b/prototypes/buildings/fluid-tanks/tanks-4000.lua index 7918a37..d26d4c9 100644 --- a/prototypes/buildings/fluid-tanks/tanks-4000.lua +++ b/prototypes/buildings/fluid-tanks/tanks-4000.lua @@ -60,6 +60,7 @@ ENTITY { } }, window_bounding_box = {{-0.0, 0.0}, {0.0, 0.0}}, + tall = true, pictures = { picture = { sheet = { @@ -83,7 +84,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-5000.lua b/prototypes/buildings/fluid-tanks/tanks-5000.lua index bebd5f1..bf2332b 100644 --- a/prototypes/buildings/fluid-tanks/tanks-5000.lua +++ b/prototypes/buildings/fluid-tanks/tanks-5000.lua @@ -43,7 +43,7 @@ ENTITY { pipe_covers = _G.pipecoverspictures(), pipe_connections = { { - position = {0, -2.1}, + position = {0, -1.96}, direction = defines.direction.north }, { @@ -51,7 +51,7 @@ ENTITY { direction = defines.direction.east }, { - position = {0, 2.1}, + position = {0, 1.96}, direction = defines.direction.south }, { @@ -61,6 +61,7 @@ ENTITY { } }, window_bounding_box = {{-0.0, 0.0}, {0.0, 0.0}}, + tall = true, pictures = { picture = { sheet = { @@ -84,7 +85,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-6500.lua b/prototypes/buildings/fluid-tanks/tanks-6500.lua index dacaf50..f17679b 100644 --- a/prototypes/buildings/fluid-tanks/tanks-6500.lua +++ b/prototypes/buildings/fluid-tanks/tanks-6500.lua @@ -43,7 +43,7 @@ ENTITY { pipe_covers = _G.pipecoverspictures(), pipe_connections = { { - position = {0, -2.07}, + position = {0, -1.96}, direction = defines.direction.north }, { @@ -51,7 +51,7 @@ ENTITY { direction = defines.direction.east }, { - position = {0, 2.07}, + position = {0, 1.96}, direction = defines.direction.south }, { @@ -84,7 +84,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-7000.lua b/prototypes/buildings/fluid-tanks/tanks-7000.lua index b6c69f2..97622a7 100644 --- a/prototypes/buildings/fluid-tanks/tanks-7000.lua +++ b/prototypes/buildings/fluid-tanks/tanks-7000.lua @@ -95,7 +95,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/fluid-tanks/tanks-8000.lua b/prototypes/buildings/fluid-tanks/tanks-8000.lua index 44bacdf..9ef395b 100644 --- a/prototypes/buildings/fluid-tanks/tanks-8000.lua +++ b/prototypes/buildings/fluid-tanks/tanks-8000.lua @@ -77,6 +77,7 @@ ENTITY { } }, window_bounding_box = {{-0.0, 0.0}, {0.0, 0.0}}, + tall = true, pictures = { picture = { sheet = { @@ -100,7 +101,6 @@ ENTITY { filename = "__base__/sound/storage-tank.ogg", volume = 0.8 }, - apparent_volume = 1.5, max_sounds_per_prototype = 3 }, circuit_wire_max_distance = 9, diff --git a/prototypes/buildings/gas-vent.lua b/prototypes/buildings/gas-vent.lua index 666fca6..fe98b28 100644 --- a/prototypes/buildings/gas-vent.lua +++ b/prototypes/buildings/gas-vent.lua @@ -46,7 +46,6 @@ ENTITY { working_sound = { sound = {filename = "__base__/sound/idle1.ogg", volume = 0.7}, idle_sound = {filename = "__base__/sound/idle1.ogg", volume = 0.3}, - apparent_volume = 1.0 }, resistances = { { @@ -93,7 +92,6 @@ ENTITY { } }, }, - fluid_boxes_off_when_no_fluid_recipe = false, fluid_boxes = { { production_type = "input", diff --git a/prototypes/buildings/megadar.lua b/prototypes/buildings/megadar.lua index 65fa00e..d30905b 100644 --- a/prototypes/buildings/megadar.lua +++ b/prototypes/buildings/megadar.lua @@ -88,9 +88,6 @@ ENTITY { priority = "low", width = 238, height = 216, - apply_projection = false, - direction_count = 1, - repeat_count = 32, line_length = 1, shift = util.by_pixel(1.5, 4), scale = 0.5 @@ -164,7 +161,6 @@ ENTITY { volume = 1.9 } }, - apparent_volume = 2 }, radius_minimap_visualisation_color = {r = 0.059, g = 0.092, b = 0.235, a = 0.275}, rotation_speed = 0.0008 diff --git a/prototypes/buildings/mk02-cargo-wagon.lua b/prototypes/buildings/mk02-cargo-wagon.lua index 353675d..9b16dd0 100644 --- a/prototypes/buildings/mk02-cargo-wagon.lua +++ b/prototypes/buildings/mk02-cargo-wagon.lua @@ -1,230 +1,221 @@ local sounds = require "__base__/prototypes/entity/sounds" RECIPE { - type = "recipe", - name = "mk02-wagon", - energy_required = 0.5, - enabled = false, - ingredients = { - {type = "item", name = "steel-plate", amount = 50}, - {type = "item", name = "plastic-bar", amount = 100}, - {type = "item", name = "niobium-plate", amount = 10}, - {type = "item", name = "nexelit-plate", amount = 20}, - {type = "item", name = "iron-gear-wheel", amount = 100}, - }, - results = { - {type = "item", name = "mk02-wagon", amount = 1} - } + type = "recipe", + name = "mk02-wagon", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 50 }, + { type = "item", name = "plastic-bar", amount = 100 }, + { type = "item", name = "niobium-plate", amount = 10 }, + { type = "item", name = "nexelit-plate", amount = 20 }, + { type = "item", name = "iron-gear-wheel", amount = 100 } + }, + results = { + { type = "item", name = "mk02-wagon", amount = 1 } + } }:add_unlock("railway-mk02") ITEM { - type = "item", - name = "mk02-wagon", - icon = "__pyindustrygraphics__/graphics/icons/mk02-cargo-wagon.png", - icon_size = 64, - flags = {}, - subgroup = "py-trains", - order = "bb", - place_result = "mk02-wagon", - stack_size = 5 + type = "item", + name = "mk02-wagon", + icon = "__pyindustrygraphics__/graphics/icons/mk02-cargo-wagon.png", + icon_size = 64, + flags = {}, + subgroup = "py-trains", + order = "bb", + place_result = "mk02-wagon", + stack_size = 5 } ENTITY { - type = "cargo-wagon", - name = "mk02-wagon", - icon = "__pyindustrygraphics__/graphics/icons/mk02-cargo-wagon.png", - icon_size = 64, - flags = {"placeable-neutral", "player-creation", "placeable-off-grid"}, - minable = {mining_time = 0.5, result = "mk02-wagon"}, - mined_sound = {filename = "__core__/sound/deconstruct-large.ogg", volume = 0.8}, - max_health = 500, - corpse = "cargo-wagon-remnants", - dying_explosion = "cargo-wagon-explosion", - collision_box = {{-0.5, -1.5}, {0.5, 1.5}}, --must have a relation between this box and the joint distance to calibrate the wagon distance. (min 0.2) - selection_box = {{-1, -1.7}, {1, 1.7}}, - --damaged_trigger_effect = hit_effects.entity(), - vertical_selection_shift = -0.7, - weight = 600, - max_speed = 1.5, - braking_force = 15, - friction_force = 0.50, - air_resistance = 0.0085, - connection_distance = 2, - joint_distance = 1.5, --igual to collision box works if the sprite is tight in the png - energy_per_hit_point = 5, - inventory_size = 20, - resistances = + type = "cargo-wagon", + name = "mk02-wagon", + icon = "__pyindustrygraphics__/graphics/icons/mk02-cargo-wagon.png", + icon_size = 64, + flags = { "placeable-neutral", "player-creation", "placeable-off-grid" }, + minable = { mining_time = 0.5, result = "mk02-wagon" }, + mined_sound = { filename = "__core__/sound/deconstruct-large.ogg", volume = 0.8 }, + max_health = 500, + corpse = "cargo-wagon-remnants", + dying_explosion = "cargo-wagon-explosion", + collision_box = {{-0.6, -1.5}, {0.6, 1.5}}, --must have a relation between this box and the joint distance to calibrate the wagon distance. (min 0.2) + selection_box = {{-1.2, -1.7}, {1.2, 1.7}}, + --damaged_trigger_effect = hit_effects.entity(), + vertical_selection_shift = -0.7, + fast_replaceable_group = "cargo-wagon", + weight = 600, + max_speed = 1.5, + braking_force = 15, + friction_force = 0.50, + air_resistance = 0.0085, + connection_distance = 2, + joint_distance = 1.5, -- igual to collision box works if the sprite is tight in the png + energy_per_hit_point = 5, + inventory_size = 20, + resistances = { { - { - type = "fire", - decrease = 15, - percent = 90 - }, - { - type = "physical", - decrease = 15, - percent = 20 - }, - { - type = "impact", - decrease = 50, - percent = 40 - }, - { - type = "explosion", - decrease = 15, - percent = 30 - }, - { - type = "acid", - decrease = 3, - percent = 90 - } + type = "fire", + decrease = 15, + percent = 90 }, - --back_light = rolling_stock_back_light(), - stand_by_light = { - { - minimum_darkness = 0.3, - color = {0.05, 0.2, 1, 0}, - shift = {-0.6, -3.5}, - size = 2, - intensity = 0.5, - add_perspective = true - }, - { - minimum_darkness = 0.3, - color = {0.05, 0.2, 1, 0}, - shift = {0.6, -3.5}, - size = 2, - intensity = 0.5, - add_perspective = true - } - }, - color = {r = 1, g = 0.0, b = 0.0}, - pictures = { - rotated = - { - layers = - { - { - priority = "very-low", - --dice = 4, - width = 288, - height = 352, - --back_equals_front = true, - direction_count = 256, - allow_low_quality_rotation = true, - filenames = - { - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-01.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-02.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-03.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-04.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-05.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-06.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-07.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-08.png", - }, - line_length = 7, - lines_per_file = 5, - shift = util.by_pixel(0, -24), - scale = 0.5 - }, - { - priority = "very-low", - flags = {"mask"}, - --dice = 4, - width = 288, - height = 352, - --back_equals_front = true, - direction_count = 256, - draw_as_glow = true, - blend_mode = "additive", - allow_low_quality_rotation = true, - apply_runtime_tint = true, - filenames = - { - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-01-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-02-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-03-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-04-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-05-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-06-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-07-mask.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-08-mask.png", - }, - line_length = 7, - lines_per_file = 5, - shift = util.by_pixel(0, -24), - scale = 0.5 - }, - { - priority = "very-low", - --dice = 4, - flags = {"shadow"}, - width = 144, - height = 112, - --back_equals_front = true, - direction_count = 256, - draw_as_shadow = true, - allow_low_quality_rotation = true, - filenames = - { - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-01.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-02.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-03.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-04.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-05.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-06.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-07.png", - "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-08.png", - }, - line_length = 7, - lines_per_file = 5, - shift = util.by_pixel(32, 0), - } - } - } + type = "physical", + decrease = 15, + percent = 20 }, - minimap_representation = { - filename = "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/icon-map.png", - flags = {"icon"}, - size = {20, 44}, - scale = 0.4 + type = "impact", + decrease = 50, + percent = 40 }, - selected_minimap_representation = { - filename = "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/icon-map-selected.png", - flags = {"icon"}, - size = {20, 44}, - scale = 0.4 + type = "explosion", + decrease = 15, + percent = 30 }, - --wheels = standard_train_wheels, - drive_over_tie_trigger = { - type = "play-sound", - sound = sound_variations("__base__/sound/train-tie", 6, 0.4, {volume_multiplier("main-menu", 2.4), volume_multiplier("driving", 1.3)}) + { + type = "acid", + decrease = 3, + percent = 90 + } + }, + --back_light = rolling_stock_back_light(), + stand_by_light = { + { + minimum_darkness = 0.3, + color = { 0.05, 0.2, 1, 0 }, + shift = { -0.6, -3.5 }, + size = 2, + intensity = 0.5, + add_perspective = true }, - tie_distance = 30, - crash_trigger = crash_trigger(), - open_sound = sounds.cargo_wagon_open, - close_sound = sounds.cargo_wagon_close, - sound_minimum_speed = 1, - impact_category = "default", - --equipment_grid = "mk02-train-equipment-grid", - water_reflection = { - pictures = + { + minimum_darkness = 0.3, + color = { 0.05, 0.2, 1, 0 }, + shift = { 0.6, -3.5 }, + size = 2, + intensity = 0.5, + add_perspective = true + } + }, + color = { r = 1, g = 0.0, b = 0.0 }, + pictures = { + rotated = { + layers = { + { + priority = "very-low", + --dice = 4, + width = 288, + height = 352, + --back_equals_front = true, + direction_count = 256, + allow_low_quality_rotation = true, + filenames = { + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-01.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-02.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-03.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-04.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-05.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-06.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-07.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-08.png" + }, + line_length = 7, + lines_per_file = 5, + shift = util.by_pixel(0, -24), + scale = 0.5 + }, { - filename = "__base__/graphics/entity/locomotive/reflection/locomotive-reflection.png", - priority = "extra-high", - width = 20, - height = 52, - shift = util.by_pixel(0, 40), - variation_count = 1, - scale = 5 + priority = "very-low", + flags = { "mask" }, + --dice = 4, + width = 288, + height = 352, + --back_equals_front = true, + direction_count = 256, + draw_as_glow = true, + blend_mode = "additive", + allow_low_quality_rotation = true, + apply_runtime_tint = true, + filenames = { + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-01-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-02-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-03-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-04-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-05-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-06-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-07-mask.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/wagon-08-mask.png" + }, + line_length = 7, + lines_per_file = 5, + shift = util.by_pixel(0, -24), + scale = 0.5 }, - rotate = true, - orientation_to_variation = false + { + priority = "very-low", + --dice = 4, + flags = { "shadow" }, + width = 144, + height = 112, + --back_equals_front = true, + direction_count = 256, + draw_as_shadow = true, + allow_low_quality_rotation = true, + filenames = { + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-01.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-02.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-03.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-04.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-05.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-06.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-07.png", + "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/sh-wagon-08.png" + }, + line_length = 7, + lines_per_file = 5, + shift = util.by_pixel(32, 0) + } + } + } + }, + minimap_representation = { + filename = "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/icon-map.png", + flags = { "icon" }, + size = { 20, 44 }, + scale = 0.4 + }, + selected_minimap_representation = { + filename = "__pyindustrygraphics__/graphics/entity/mk02-train/cargo-wagon/icon-map-selected.png", + flags = { "icon" }, + size = { 20, 44 }, + scale = 0.4 + }, + --wheels = standard_train_wheels, + drive_over_tie_trigger = { + type = "play-sound", + sound = sound_variations( + "__base__/sound/train-tie", 6, 0.4, { volume_multiplier("main-menu", 2.4), volume_multiplier("driving", 1.3) } + ) + }, + tie_distance = 30, + open_sound = sounds.cargo_wagon_open, + close_sound = sounds.cargo_wagon_close, + impact_category = "default", + --equipment_grid = "mk02-train-equipment-grid", + water_reflection = { + pictures = { + filename = "__base__/graphics/entity/locomotive/reflection/locomotive-reflection.png", + priority = "extra-high", + width = 20, + height = 52, + shift = util.by_pixel(0, 40), + variation_count = 1, + scale = 5 }, + rotate = true, + orientation_to_variation = false + } } diff --git a/prototypes/buildings/mk02-fluid-wagon.lua b/prototypes/buildings/mk02-fluid-wagon.lua index ac81bc8..0bda0ce 100644 --- a/prototypes/buildings/mk02-fluid-wagon.lua +++ b/prototypes/buildings/mk02-fluid-wagon.lua @@ -40,10 +40,11 @@ ENTITY { max_health = 500, corpse = "fluid-wagon-remnants", dying_explosion = "fluid-wagon-explosion", - collision_box = {{-0.5, -1.5}, {0.5, 1.5}}, --must have a relation between this box and the joint distance to calibrate the wagon distance. (min 0.2) - selection_box = {{-1, -1.7}, {1, 1.7}}, + collision_box = {{-0.6, -1.5}, {0.6, 1.5}}, --must have a relation between this box and the joint distance to calibrate the wagon distance. (min 0.2) + selection_box = {{-1.2, -1.7}, {1.2, 1.7}}, --damaged_trigger_effect = hit_effects.entity(), vertical_selection_shift = -0.7, + fast_replaceable_group = "fluid-wagon", weight = 500, max_speed = 1.5, braking_force = 4, @@ -208,10 +209,8 @@ ENTITY { sound = sound_variations("__base__/sound/train-tie", 6, 0.4, {volume_multiplier("main-menu", 2.4), volume_multiplier("driving", 1.3)}) }, tie_distance = 30, - crash_trigger = crash_trigger(), open_sound = sounds.cargo_wagon_open, close_sound = sounds.cargo_wagon_close, - sound_minimum_speed = 1, impact_category = "default", --equipment_grid = "spidertron-equipment-grid", water_reflection = { diff --git a/prototypes/buildings/mk02-locomotive.lua b/prototypes/buildings/mk02-locomotive.lua index 91fb2db..c2245f3 100644 --- a/prototypes/buildings/mk02-locomotive.lua +++ b/prototypes/buildings/mk02-locomotive.lua @@ -42,12 +42,13 @@ ENTITY { max_health = 1000, corpse = "locomotive-remnants", dying_explosion = "locomotive-explosion", - collision_box = {{-0.6, -2.5}, {0.6, 2.5}}, + collision_box = {{-0.6, -2.6}, {0.6, 2.6}}, selection_box = {{-1, -3.5}, {1, 3.5}}, --damaged_trigger_effect = hit_effects.entity(), drawing_box_vertical_extension = data.raw["locomotive"]["locomotive"].drawing_box_vertical_extension, icons_positioning = {{inventory_index = defines.inventory.fuel, shift = {0, 0.3}, max_icons_per_row = 5}}, alert_icon_shift = util.by_pixel(0, -24), + fast_replaceable_group = "locomotive", weight = 1600, max_speed = 1.30, max_power = "900kW", @@ -292,12 +293,12 @@ ENTITY { }, match_speed_to_activity = true, max_sounds_per_prototype = 2, - -- use_doppler_shift = false + -- use_doppler_shift = false, + activity_to_speed_modifiers = {minimum = 0.5}, + activity_to_volume_modifiers ={multiplier = 0.35} }, --open_sound = { filename = "__pyindustrygraphics__/sounds/mk02-locomotive-open.ogg", volume=0.5 }, close_sound = {filename = "__pyindustrygraphics__/sounds/mk02-locomotive-close.ogg", volume = 0.4}, - sound_minimum_speed = 0.5, - sound_scaling_ratio = 0.35, water_reflection = { pictures = { diff --git a/prototypes/buildings/py-recharge-station-mk01.lua b/prototypes/buildings/py-recharge-station-mk01.lua index 018f944..44aba0e 100644 --- a/prototypes/buildings/py-recharge-station-mk01.lua +++ b/prototypes/buildings/py-recharge-station-mk01.lua @@ -75,14 +75,12 @@ ENTITY { filename = "__pyindustrygraphics__/graphics/entity/py-recharge-station-mk01/blank.png", width = 1, height = 1, - frame_count = 1, }, base_patch = { filename = "__pyindustrygraphics__/graphics/entity/py-recharge-station-mk01/blank.png", width = 1, height = 1, - frame_count = 1, }, door_animation_up = { @@ -111,16 +109,4 @@ ENTITY { recharging_light = {intensity = 0.4, size = 5}, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = - { - filename = "__pyindustrygraphics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12 - }, - construction_radius_visualisation_picture = - { - filename = "__pyindustrygraphics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12 - }, } diff --git a/prototypes/buildings/py-roboport-construction-mk01.lua b/prototypes/buildings/py-roboport-construction-mk01.lua index 97b4e44..197126b 100644 --- a/prototypes/buildings/py-roboport-construction-mk01.lua +++ b/prototypes/buildings/py-roboport-construction-mk01.lua @@ -61,14 +61,12 @@ ENTITY { logistics_radius = 0, construction_radius = 60, logistics_connection_distance = 60, - charge_approach_distance = 5, + charge_approach_distance = 0, robot_slots_count = 0, material_slots_count = 0, robots_shrink_when_entering_and_exiting = true, - stationing_offset = util.by_pixel(0, -3), - charging_offsets = { - {-0, -0.5} - }, + stationing_offset = {0, 0}, + charging_offsets = {}, base = { layers = { { diff --git a/prototypes/buildings/py-roboport-construction-mk02.lua b/prototypes/buildings/py-roboport-construction-mk02.lua index 1b9ccb2..ac25ce8 100644 --- a/prototypes/buildings/py-roboport-construction-mk02.lua +++ b/prototypes/buildings/py-roboport-construction-mk02.lua @@ -62,14 +62,12 @@ ENTITY { logistics_radius = 0, construction_radius = 80, logistics_connection_distance = 80, - charge_approach_distance = 5, + charge_approach_distance = 0, robot_slots_count = 0, material_slots_count = 0, robots_shrink_when_entering_and_exiting = true, - stationing_offset = util.by_pixel(0, -3), - charging_offsets = { - {-0, -0.5} - }, + stationing_offset = {0, 0}, + charging_offsets = {}, base = { layers = { { diff --git a/prototypes/buildings/py-roboport-construction-mk03.lua b/prototypes/buildings/py-roboport-construction-mk03.lua index 81bb2b4..78e832e 100644 --- a/prototypes/buildings/py-roboport-construction-mk03.lua +++ b/prototypes/buildings/py-roboport-construction-mk03.lua @@ -61,14 +61,12 @@ ENTITY { logistics_radius = 0, construction_radius = 100, logistics_connection_distance = 100, - charge_approach_distance = 5, + charge_approach_distance = 0, robot_slots_count = 0, material_slots_count = 0, robots_shrink_when_entering_and_exiting = true, - stationing_offset = util.by_pixel(0, -3), - charging_offsets = { - {-0, -0.5} - }, + stationing_offset = {0, 0}, + charging_offsets = {}, base = { layers = { { diff --git a/prototypes/buildings/py-roboport-construction-mk04.lua b/prototypes/buildings/py-roboport-construction-mk04.lua index 0f2033e..dec37f0 100644 --- a/prototypes/buildings/py-roboport-construction-mk04.lua +++ b/prototypes/buildings/py-roboport-construction-mk04.lua @@ -59,14 +59,12 @@ ENTITY { logistics_radius = 0, construction_radius = 120, logistics_connection_distance = 120, - charge_approach_distance = 5, + charge_approach_distance = 0, robot_slots_count = 0, material_slots_count = 0, robots_shrink_when_entering_and_exiting = true, - stationing_offset = util.by_pixel(0, -3), - charging_offsets = { - {-0, -0.5} - }, + stationing_offset = {0, 0}, + charging_offsets = {}, base = { layers = { { diff --git a/prototypes/buildings/py-roboport-mk01.lua b/prototypes/buildings/py-roboport-mk01.lua index 74629ad..5acdd05 100644 --- a/prototypes/buildings/py-roboport-mk01.lua +++ b/prototypes/buildings/py-roboport-mk01.lua @@ -95,7 +95,6 @@ ENTITY { priority = "medium", width = 128, height = 128, - frame_count = 1, shift = util.by_pixel(0, -8), scale = 0.5 }, diff --git a/prototypes/buildings/py-roboport-mk02.lua b/prototypes/buildings/py-roboport-mk02.lua index 839e233..0ffcae6 100644 --- a/prototypes/buildings/py-roboport-mk02.lua +++ b/prototypes/buildings/py-roboport-mk02.lua @@ -89,7 +89,6 @@ ENTITY { priority = "high", width = 320, height = 512, - frame_count = 1, shift = util.by_pixel(0, -48), scale = 0.5 }, diff --git a/prototypes/buildings/radar.lua b/prototypes/buildings/radar.lua index 53fd0db..5061f2b 100644 --- a/prototypes/buildings/radar.lua +++ b/prototypes/buildings/radar.lua @@ -86,9 +86,6 @@ ENTITY { priority = "low", width = 238, height = 216, - apply_projection = false, - direction_count = 1, - repeat_count = 64, line_length = 1, shift = util.by_pixel(1.5, 4), scale = 0.5 @@ -103,7 +100,6 @@ ENTITY { apply_projection = false, direction_count = 50, line_length = 10, - animation_speed = 0.7, shift = util.by_pixel(1, -16), scale = 0.5 }, @@ -115,7 +111,6 @@ ENTITY { apply_projection = false, direction_count = 50, line_length = 8, - animation_speed = 0.7, shift = util.by_pixel(39.25, 3), draw_as_shadow = true, scale = 0.5 diff --git a/prototypes/buildings/sinkhole.lua b/prototypes/buildings/sinkhole.lua index 8d4dabb..6cb0db7 100644 --- a/prototypes/buildings/sinkhole.lua +++ b/prototypes/buildings/sinkhole.lua @@ -48,7 +48,6 @@ ENTITY { working_sound = { sound = {filename = "__pyindustrygraphics__/sounds/py-sinkhole.ogg", volume = 0.8}, idle_sound = {filename = "__pyindustrygraphics__/sounds/py-sinkhole.ogg", volume = 0.3}, - apparent_volume = 2.0 }, resistances = { { @@ -122,7 +121,6 @@ ENTITY { } }) }, - fluid_boxes_off_when_no_fluid_recipe = false, fluid_boxes = { { production_type = "input", diff --git a/prototypes/buildings/valves/check-valve.lua b/prototypes/buildings/valves/check-valve.lua index cacefbf..66dc6f0 100644 --- a/prototypes/buildings/valves/check-valve.lua +++ b/prototypes/buildings/valves/check-valve.lua @@ -40,7 +40,6 @@ ENTITY { selection_box = data.raw["pipe"]["pipe"].selection_box, window_bounding_box = {{0, 0}, {0, 0}}, flow_length_in_ticks = data.raw["storage-tank"]["storage-tank"].flow_length_in_ticks, - two_direction_only = false, working_sound = nil, fluid_box = { volume = 100, diff --git a/prototypes/buildings/valves/overflow-valve.lua b/prototypes/buildings/valves/overflow-valve.lua index 1a17bfd..94f942b 100644 --- a/prototypes/buildings/valves/overflow-valve.lua +++ b/prototypes/buildings/valves/overflow-valve.lua @@ -42,9 +42,6 @@ ENTITY { fast_replaceable_group = data.raw["pipe"]["pipe"].fast_replaceable_group, collision_box = data.raw["pipe"]["pipe"].collision_box, selection_box = data.raw["pipe"]["pipe"].selection_box, - window_bounding_box = {{0, 0}, {0, 0}}, - flow_length_in_ticks = data.raw["storage-tank"]["storage-tank"].flow_length_in_ticks, - two_direction_only = false, working_sound = nil, fluid_box = { volume = 100, diff --git a/prototypes/buildings/valves/underflow-valve.lua b/prototypes/buildings/valves/underflow-valve.lua index dbe0a2f..311b2d0 100644 --- a/prototypes/buildings/valves/underflow-valve.lua +++ b/prototypes/buildings/valves/underflow-valve.lua @@ -42,9 +42,6 @@ ENTITY { fast_replaceable_group = data.raw["pipe"]["pipe"].fast_replaceable_group, collision_box = data.raw["pipe"]["pipe"].collision_box, selection_box = data.raw["pipe"]["pipe"].selection_box, - window_bounding_box = {{0, 0}, {0, 0}}, - flow_length_in_ticks = data.raw["storage-tank"]["storage-tank"].flow_length_in_ticks, - two_direction_only = false, working_sound = nil, fluid_box = { volume = 100, diff --git a/prototypes/equipment/armor-updates.lua b/prototypes/equipment/armor-updates.lua index 6170cb0..7f1138e 100644 --- a/prototypes/equipment/armor-updates.lua +++ b/prototypes/equipment/armor-updates.lua @@ -1,141 +1,141 @@ -data:extend {{ - name = "light-armor-equipment-grid", - type = "equipment-grid", - height = 6, - width = 4, - equipment_categories = {"armor"} -}} - -data:extend {{ - name = "heavy-armor-equipment-grid", - type = "equipment-grid", - height = 8, - width = 6, - equipment_categories = {"armor"} -}} - -data.raw.armor["light-armor"].equipment_grid = "light-armor-equipment-grid" -data.raw.armor["heavy-armor"].equipment_grid = "heavy-armor-equipment-grid" - -data.raw["equipment-grid"]["small-equipment-grid"].width = 10 -data.raw["equipment-grid"]["small-equipment-grid"].height = 8 -data.raw["equipment-grid"]["medium-equipment-grid"].width = 12 -data.raw["equipment-grid"]["medium-equipment-grid"].height = 10 -data.raw["equipment-grid"]["large-equipment-grid"].width = 14 -data.raw["equipment-grid"]["large-equipment-grid"].height = 12 - -data.raw.armor["light-armor"].inventory_size_bonus = 20 -data.raw.armor["heavy-armor"].inventory_size_bonus = 40 -data.raw.armor["modular-armor"].inventory_size_bonus = 60 -data.raw.armor["power-armor"].inventory_size_bonus = 80 -data.raw.armor["power-armor-mk2"].inventory_size_bonus = 100 - --- This should fix this issue https://github.com/pyanodon/pybugreports/issues/1050 --- IF IF IF IF pyindustry and or pycoalprocessing are enabled only -if mods.pyhightech then - data.raw.technology["battery-equipment"].hidden = true - data.raw.technology["battery-equipment"].enabled = false - data.raw.recipe["battery-equipment"].hidden = true - data.raw.item["battery-equipment"].hidden = true - data.raw.item["battery-equipment"].place_as_equipment_result = nil - data.raw.item["battery-equipment"].localised_name = {"equipment-name.battery-equipment"} - data.raw.technology["battery-mk2-equipment"].hidden = true - data.raw.technology["battery-mk2-equipment"].enabled = false - data.raw.recipe["battery-mk2-equipment"].hidden = true - data.raw.item["battery-mk2-equipment"].hidden = true - data.raw.item["battery-mk2-equipment"].place_as_equipment_result = nil - data.raw.item["battery-mk2-equipment"].localised_name = {"equipment-name.battery-mk2-equipment"} -end - -data:extend {{ - name = "personal-fusion-cell", - type = "fuel-category" -}} - -ITEM { - type = "item", - name = "personal-fusion-cell", - icon = "__pyindustrygraphics__/graphics/icons/fusion-cell.png", - icon_size = 64, - subgroup = "py-generator-equipment", - order = "a[energy-source]-cb[personal-fusion-cell]", - stack_size = 10, - burnt_result = "personal-fusion-cell-used", - fuel_value = "2GJ", - fuel_category = "personal-fusion-cell" -} - -RECIPE { - type = "recipe", - name = "personal-fusion-cell", - energy_required = 10, - category = "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "item", name = "barrel", amount = 1}, - {type = "fluid", name = "water", amount = 100} - }, - results = { - {type = "item", name = "personal-fusion-cell", amount = 1} - } -}:add_unlock("fission-reactor-equipment") - -ITEM { - type = "item", - name = "personal-fusion-cell-used", - icon = "__pyindustrygraphics__/graphics/icons/empty-fusion-cell.png", - icon_size = 64, - subgroup = "py-generator-equipment", - order = "a[energy-source]-cb[personal-fusion-cell-used]", - stack_size = 10, -} - -RECIPE { - type = "recipe", - name = "personal-fusion-cell-refuel", - energy_required = 10, - category = "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "item", name = "personal-fusion-cell-used", amount = 1}, - {type = "fluid", name = "water", amount = 100} - }, - results = { - {type = "item", name = "personal-fusion-cell", amount = 1} - } -}:add_unlock("fission-reactor-equipment") - -data.raw.item["solar-panel-equipment"].subgroup = "py-generator-equipment" -data.raw.item["solar-panel-equipment"].order = "a[energy-source]-b[solar-panel-equipment]" - -data.raw.technology["fission-reactor-equipment"].icons = util.technology_icon_constant_equipment("__pyindustrygraphics__/graphics/technology/fusion-reactor-equipment.png") -data.raw.technology["fission-reactor-equipment"].icon_size = 256 -data.raw.technology["fission-reactor-equipment"].icon = nil -data.raw.item["fission-reactor-equipment"].icon = "__pyindustrygraphics__/graphics/icons/fusion-reactor-equipment.png" -data.raw.item["fission-reactor-equipment"].icon_size = 256 -data.raw.item["fission-reactor-equipment"].subgroup = "py-generator-equipment" -data.raw.item["fission-reactor-equipment"].order = "a[energy-source]-c[fission-reactor-equipment]" -data.raw["generator-equipment"]["fission-reactor-equipment"].power = "2.7MW" -data.raw["generator-equipment"]["fission-reactor-equipment"].burner = { - type = "burner", - fuel_inventory_size = 4, - burnt_inventory_size = 4, - fuel_categories = {"personal-fusion-cell"} -} -data.raw["generator-equipment"]["fission-reactor-equipment"].sprite = { - filename = "__pyindustrygraphics__/graphics/icons/fusion-reactor-equipment.png", - size = 256 -} -data.raw["generator-equipment"]["fission-reactor-equipment"].shape = { - type = "manual", - width = 4, - height = 4, - points = { - {1, 0}, {2, 0}, - {0, 1}, {1, 1}, {2, 1}, {3, 1}, - {0, 2}, {1, 2}, {2, 2}, {3, 2}, - {0, 3}, {1, 3}, {2, 3}, {3, 3} - } -} - -data.raw["solar-panel-equipment"]["solar-panel-equipment"].power = "90kW" +data:extend {{ + name = "light-armor-equipment-grid", + type = "equipment-grid", + height = 6, + width = 4, + equipment_categories = {"armor"} +}} + +data:extend {{ + name = "heavy-armor-equipment-grid", + type = "equipment-grid", + height = 8, + width = 6, + equipment_categories = {"armor"} +}} + +data.raw.armor["light-armor"].equipment_grid = "light-armor-equipment-grid" +data.raw.armor["heavy-armor"].equipment_grid = "heavy-armor-equipment-grid" + +data.raw["equipment-grid"]["small-equipment-grid"].width = 10 +data.raw["equipment-grid"]["small-equipment-grid"].height = 8 +data.raw["equipment-grid"]["medium-equipment-grid"].width = 12 +data.raw["equipment-grid"]["medium-equipment-grid"].height = 10 +data.raw["equipment-grid"]["large-equipment-grid"].width = 14 +data.raw["equipment-grid"]["large-equipment-grid"].height = 12 + +data.raw.armor["light-armor"].inventory_size_bonus = 20 +data.raw.armor["heavy-armor"].inventory_size_bonus = 40 +data.raw.armor["modular-armor"].inventory_size_bonus = 60 +data.raw.armor["power-armor"].inventory_size_bonus = 80 +data.raw.armor["power-armor-mk2"].inventory_size_bonus = 100 + +-- This should fix this issue https://github.com/pyanodon/pybugreports/issues/1050 +-- IF IF IF IF pyindustry and or pycoalprocessing are enabled only +if mods.pyhightech then + data.raw.technology["battery-equipment"].hidden = true + data.raw.technology["battery-equipment"].enabled = false + data.raw.recipe["battery-equipment"].hidden = true + data.raw.item["battery-equipment"].hidden = true + data.raw.item["battery-equipment"].place_as_equipment_result = nil + data.raw.item["battery-equipment"].localised_name = {"equipment-name.battery-equipment"} + data.raw.technology["battery-mk2-equipment"].hidden = true + data.raw.technology["battery-mk2-equipment"].enabled = false + data.raw.recipe["battery-mk2-equipment"].hidden = true + data.raw.item["battery-mk2-equipment"].hidden = true + data.raw.item["battery-mk2-equipment"].place_as_equipment_result = nil + data.raw.item["battery-mk2-equipment"].localised_name = {"equipment-name.battery-mk2-equipment"} +end + +data:extend {{ + name = "personal-fusion-cell", + type = "fuel-category" +}} + +ITEM { + type = "item", + name = "personal-fusion-cell", + icon = "__pyindustrygraphics__/graphics/icons/fusion-cell.png", + icon_size = 64, + subgroup = "py-generator-equipment", + order = "a[energy-source]-cb[personal-fusion-cell]", + stack_size = 10, + burnt_result = "personal-fusion-cell-used", + fuel_value = "2GJ", + fuel_category = "personal-fusion-cell" +} + +RECIPE { + type = "recipe", + name = "personal-fusion-cell", + energy_required = 10, + categories = {"crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "item", name = "barrel", amount = 1}, + {type = "fluid", name = "water", amount = 100} + }, + results = { + {type = "item", name = "personal-fusion-cell", amount = 1} + } +}:add_unlock("fission-reactor-equipment") + +ITEM { + type = "item", + name = "personal-fusion-cell-used", + icon = "__pyindustrygraphics__/graphics/icons/empty-fusion-cell.png", + icon_size = 64, + subgroup = "py-generator-equipment", + order = "a[energy-source]-cb[personal-fusion-cell-used]", + stack_size = 10, +} + +RECIPE { + type = "recipe", + name = "personal-fusion-cell-refuel", + energy_required = 10, + categories = {"crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "item", name = "personal-fusion-cell-used", amount = 1}, + {type = "fluid", name = "water", amount = 100} + }, + results = { + {type = "item", name = "personal-fusion-cell", amount = 1} + } +}:add_unlock("fission-reactor-equipment") + +data.raw.item["solar-panel-equipment"].subgroup = "py-generator-equipment" +data.raw.item["solar-panel-equipment"].order = "a[energy-source]-b[solar-panel-equipment]" + +data.raw.technology["fission-reactor-equipment"].icons = util.technology_icon_constant_equipment("__pyindustrygraphics__/graphics/technology/fusion-reactor-equipment.png") +data.raw.technology["fission-reactor-equipment"].icon_size = 256 +data.raw.technology["fission-reactor-equipment"].icon = nil +data.raw.item["fission-reactor-equipment"].icon = "__pyindustrygraphics__/graphics/icons/fusion-reactor-equipment.png" +data.raw.item["fission-reactor-equipment"].icon_size = 256 +data.raw.item["fission-reactor-equipment"].subgroup = "py-generator-equipment" +data.raw.item["fission-reactor-equipment"].order = "a[energy-source]-c[fission-reactor-equipment]" +data.raw["generator-equipment"]["fission-reactor-equipment"].power = "2.7MW" +data.raw["generator-equipment"]["fission-reactor-equipment"].burner = { + type = "burner", + fuel_inventory_size = 4, + burnt_inventory_size = 4, + fuel_categories = {"personal-fusion-cell"} +} +data.raw["generator-equipment"]["fission-reactor-equipment"].sprite = { + filename = "__pyindustrygraphics__/graphics/icons/fusion-reactor-equipment.png", + size = 256 +} +data.raw["generator-equipment"]["fission-reactor-equipment"].shape = { + type = "manual", + width = 4, + height = 4, + points = { + {1, 0}, {2, 0}, + {0, 1}, {1, 1}, {2, 1}, {3, 1}, + {0, 2}, {1, 2}, {2, 2}, {3, 2}, + {0, 3}, {1, 3}, {2, 3}, {3, 3} + } +} + +data.raw["solar-panel-equipment"]["solar-panel-equipment"].power = "90kW" diff --git a/prototypes/equipment/portable-gasoline-generator.lua b/prototypes/equipment/portable-gasoline-generator.lua index d89ff5c..f4b3ff7 100644 --- a/prototypes/equipment/portable-gasoline-generator.lua +++ b/prototypes/equipment/portable-gasoline-generator.lua @@ -1,66 +1,66 @@ -data:extend {{ - type = "generator-equipment", - name = "portable-gasoline-generator", - power = "180kW", - burner = { - type = "burner", - emissions_per_minute = { - pollution = 6 - }, - fuel_inventory_size = 4, - burnt_inventory_size = 4, - fuel_categories = {"jerry"} - }, - energy_source = { - type = "electric", - usage_priority = "secondary-output" - }, - categories = {"armor"}, - shape = {type = "full", width = 2, height = 2}, - sprite = { - width = 64, - height = 64, - filename = "__pyindustrygraphics__/graphics/icons/gasoline-burner.png" - } -}} - -ITEM { - type = "item", - name = "portable-gasoline-generator", - icon = "__pyindustrygraphics__/graphics/icons/gasoline-burner.png", - icon_size = 64, - subgroup = "py-generator-equipment", - order = "a[energy-source]-a[portable-gasoline-generator]", - stack_size = 10, - place_as_equipment_result = "portable-gasoline-generator", - localised_description = {"equipment-description.portable-gasoline-generator"} -} - -RECIPE { - type = "recipe", - name = "portable-gasoline-generator", - energy_required = 10, - category = "crafting", - enabled = false, - ingredients = { - {type = "item", name = "engine-unit", amount = 4}, - {type = "item", name = "boiler", amount = 1}, - {type = "item", name = "steel-plate", amount = 20}, - {type = "item", name = "iron-gear-wheel", amount = 14}, - {type = "item", name = "small-electric-pole", amount = 1} - }, - results = { - {type = "item", name = "portable-gasoline-generator", amount = 1} - } -}:add_unlock("personal-roboport-equipment") - -data.raw.recipe["personal-roboport-equipment"].ingredients = { - {type = "item", name = "iron-gear-wheel", amount = 45}, - {type = "item", name = "steel-plate", amount = 20}, - {type = "item", name = "electronic-circuit", amount = 10}, - {type = "item", name = "battery", amount = 10}, -} - -data.raw.technology["personal-roboport-equipment"].prerequisites = {"construction-robotics"} -data.raw.technology["personal-roboport-equipment"].unit.count = 300 -data.raw.technology["personal-roboport-mk2-equipment"]:remove_prereq("solar-panel-equipment") +data:extend {{ + type = "generator-equipment", + name = "portable-gasoline-generator", + power = "180kW", + burner = { + type = "burner", + emissions_per_minute = { + pollution = 6 + }, + fuel_inventory_size = 4, + burnt_inventory_size = 4, + fuel_categories = {"jerry"} + }, + energy_source = { + type = "electric", + usage_priority = "secondary-output" + }, + categories = {"armor"}, + shape = {type = "full", width = 2, height = 2}, + sprite = { + width = 64, + height = 64, + filename = "__pyindustrygraphics__/graphics/icons/gasoline-burner.png" + } +}} + +ITEM { + type = "item", + name = "portable-gasoline-generator", + icon = "__pyindustrygraphics__/graphics/icons/gasoline-burner.png", + icon_size = 64, + subgroup = "py-generator-equipment", + order = "a[energy-source]-a[portable-gasoline-generator]", + stack_size = 10, + place_as_equipment_result = "portable-gasoline-generator", + localised_description = {"equipment-description.portable-gasoline-generator"} +} + +RECIPE { + type = "recipe", + name = "portable-gasoline-generator", + energy_required = 10, + categories = {"crafting"}, + enabled = false, + ingredients = { + {type = "item", name = "engine-unit", amount = 4}, + {type = "item", name = "boiler", amount = 1}, + {type = "item", name = "steel-plate", amount = 20}, + {type = "item", name = "iron-gear-wheel", amount = 14}, + {type = "item", name = "small-electric-pole", amount = 1} + }, + results = { + {type = "item", name = "portable-gasoline-generator", amount = 1} + } +}:add_unlock("personal-roboport-equipment") + +data.raw.recipe["personal-roboport-equipment"].ingredients = { + {type = "item", name = "iron-gear-wheel", amount = 45}, + {type = "item", name = "steel-plate", amount = 20}, + {type = "item", name = "electronic-circuit", amount = 10}, + {type = "item", name = "battery", amount = 10}, +} + +data.raw.technology["personal-roboport-equipment"].prerequisites = {"construction-robotics"} +data.raw.technology["personal-roboport-equipment"].unit.count = 300 +data.raw.technology["personal-roboport-mk2-equipment"]:remove_prereq("solar-panel-equipment") diff --git a/prototypes/item-groups.lua b/prototypes/item-groups.lua index 9059f2a..0b7d4d5 100644 --- a/prototypes/item-groups.lua +++ b/prototypes/item-groups.lua @@ -3,7 +3,6 @@ data:extend { type = "item-group", name = "py-industry", order = "t2", - inventory_order = "t2", icon = "__pyindustrygraphics__/graphics/technology/item-group.png", icon_size = 128 }, diff --git a/prototypes/pipes/niobium-pipes.lua b/prototypes/pipes/niobium-pipes.lua index 37844b0..f71c0e4 100644 --- a/prototypes/pipes/niobium-pipes.lua +++ b/prototypes/pipes/niobium-pipes.lua @@ -184,9 +184,6 @@ local function py_pipepictures() line_length = 10, width = 48, height = 30, - frame_count = 60, - axially_symmetrical = false, - direction_count = 1 }, straight_vertical_single_visualization = make_visualization(0), straight_vertical_visualization = make_visualization(5), @@ -471,13 +468,6 @@ ENTITY { hide_connection_info = true, max_pipeline_extent = 640 }, - underground_sprite = { - filename = "__core__/graphics/arrows/underground-lines.png", - priority = "extra-high-no-scale", - width = 64, - height = 64, - scale = 0.5 - }, pictures = { north = make_shadow { filename = "__pyindustrygraphics__/graphics/entity/niobium-pipe/pipe-to-ground-up.png", diff --git a/prototypes/robots/py-construction-robot-mk01.lua b/prototypes/robots/py-construction-robot-mk01.lua index eeabbd9..ab0364e 100644 --- a/prototypes/robots/py-construction-robot-mk01.lua +++ b/prototypes/robots/py-construction-robot-mk01.lua @@ -1,206 +1,205 @@ -local sounds = require "__base__/prototypes/entity/sounds" - -RECIPE { - type = "recipe", - name = "py-construction-robot-mk01", - energy_required = 10, - category = "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "item", name = "steel-plate", amount = 20}, - {type = "item", name = "iron-plate", amount = 15}, - {type = "item", name = "iron-gear-wheel", amount = 20}, - {type = "item", name = "steam-engine", amount = 1}, - {type = "item", name = "electronic-circuit", amount = 5}, - }, - results = { - {type = "item", name = "py-construction-robot-mk01", amount = 1} - } -}:add_unlock("construction-robotics") - -local bot_item = ITEM { - type = "item", - name = "py-construction-robot-mk01", - icon = "__pyindustrygraphics__/graphics/icons/py-construction-robot-01.png", - icon_size = 32, - flags = {}, - subgroup = "py-robots", - order = "b", - place_result = "py-construction-robot-mk01", - stack_size = 50 -} - -if data.raw["item-subgroup"]["py-hightech-items"] then - bot_item:subgroup_order("py-hightech-items", "b") -end - -ENTITY { - type = "construction-robot", - name = "py-construction-robot-mk01", - icon = "__pyindustrygraphics__/graphics/icons/py-construction-robot-01.png", - icon_size = 32, - flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-on-map"}, - minable = {mining_time = 0.1, result = "py-construction-robot-mk01"}, - resistances = {{type = "fire", percent = 85}}, - max_health = 20, - collision_box = {{0, 0}, {0, 0}}, - selection_box = {{-0.5, -1.5}, {0.5, -0.5}}, - max_payload_size = 1, - speed = 0.08, - transfer_distance = 0.5, - max_energy = "1.5MJ", - energy_per_tick = "0.05kJ", - speed_multiplier_when_out_of_energy = 0.4, - energy_per_move = "4kJ", - min_to_charge = 0.2, - max_to_charge = 0.95, - working_light = {intensity = 0.8, size = 3, color = {r = 0.8, g = 0.8, b = 0.8}}, - idle = { - filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/cr-01.png", - priority = "high", - line_length = 16, - width = 64, - height = 73, - frame_count = 1, - shift = util.by_pixel(0, -4.5), - direction_count = 16, - scale = 0.5 - }, - in_motion = { - filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/cr-01.png", - priority = "high", - line_length = 16, - width = 64, - height = 73, - frame_count = 1, - shift = util.by_pixel(0, -4.5), - direction_count = 16, - y = 73, - scale = 0.5 - }, - shadow_idle = { - filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/shadow.png", - priority = "high", - line_length = 16, - width = 64, - height = 73, - frame_count = 1, - shift = util.by_pixel(33.5, 18.75), - direction_count = 16, - scale = 0.5 - }, - shadow_in_motion = { - filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/shadow.png", - priority = "high", - line_length = 16, - width = 64, - height = 73, - frame_count = 1, - shift = util.by_pixel(33.5, 18.75), - direction_count = 16, - scale = 0.5 - }, - working = { - filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/cr-01-working.png", - priority = "high", - line_length = 2, - width = 64, - height = 73, - frame_count = 2, - shift = util.by_pixel(0, -4.5), - direction_count = 16, - animation_speed = 0.3, - scale = 0.5 - }, - shadow_working = { - stripes = util.multiplystripes( - 2, - { - { - filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/shadow.png", - width_in_frames = 16, - height_in_frames = 1 - } - } - ), - priority = "high", - width = 32, - height = 37, - frame_count = 2, - shift = {1.09375, 0.59375}, - direction_count = 16 - }, - smoke = { - filename = "__base__/graphics/entity/smoke-construction/smoke-01.png", - width = 39, - height = 32, - frame_count = 19, - line_length = 19, - shift = {0.078125, -0.15625}, - animation_speed = 0.3 - }, - sparks = { - { - filename = "__base__/graphics/entity/sparks/sparks-01.png", - width = 39, - height = 34, - frame_count = 19, - line_length = 19, - shift = {-0.109375, 0.3125}, - tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, - animation_speed = 0.3 - }, - { - filename = "__base__/graphics/entity/sparks/sparks-02.png", - width = 36, - height = 32, - frame_count = 19, - line_length = 19, - shift = {0.03125, 0.125}, - tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, - animation_speed = 0.3 - }, - { - filename = "__base__/graphics/entity/sparks/sparks-03.png", - width = 42, - height = 29, - frame_count = 19, - line_length = 19, - shift = {-0.0625, 0.203125}, - tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, - animation_speed = 0.3 - }, - { - filename = "__base__/graphics/entity/sparks/sparks-04.png", - width = 40, - height = 35, - frame_count = 19, - line_length = 19, - shift = {-0.0625, 0.234375}, - tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, - animation_speed = 0.3 - }, - { - filename = "__base__/graphics/entity/sparks/sparks-05.png", - width = 39, - height = 29, - frame_count = 19, - line_length = 19, - shift = {-0.109375, 0.171875}, - tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, - animation_speed = 0.3 - }, - { - filename = "__base__/graphics/entity/sparks/sparks-06.png", - width = 44, - height = 36, - frame_count = 19, - line_length = 19, - shift = {0.03125, 0.3125}, - tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, - animation_speed = 0.3 - } - }, - working_sound = sounds.construction_robot(0.5), - construction_vector = {0.30, 0.22} -} +local sounds = require "__base__/prototypes/entity/sounds" + +RECIPE { + type = "recipe", + name = "py-construction-robot-mk01", + energy_required = 10, + categories = {"crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "item", name = "steel-plate", amount = 20}, + {type = "item", name = "iron-plate", amount = 15}, + {type = "item", name = "iron-gear-wheel", amount = 20}, + {type = "item", name = "steam-engine", amount = 1}, + {type = "item", name = "electronic-circuit", amount = 5}, + }, + results = { + {type = "item", name = "py-construction-robot-mk01", amount = 1} + } +}:add_unlock("construction-robotics") + +local bot_item = ITEM { + type = "item", + name = "py-construction-robot-mk01", + icon = "__pyindustrygraphics__/graphics/icons/py-construction-robot-01.png", + icon_size = 32, + flags = {}, + subgroup = "py-robots", + order = "b", + place_result = "py-construction-robot-mk01", + stack_size = 50 +} + +if data.raw["item-subgroup"]["py-hightech-items"] then + bot_item:subgroup_order("py-hightech-items", "b") +end + +ENTITY { + type = "construction-robot", + name = "py-construction-robot-mk01", + icon = "__pyindustrygraphics__/graphics/icons/py-construction-robot-01.png", + icon_size = 32, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-on-map"}, + minable = {mining_time = 0.1, result = "py-construction-robot-mk01"}, + resistances = {{type = "fire", percent = 85}}, + max_health = 20, + collision_box = {{0, 0}, {0, 0}}, + selection_box = {{-0.5, -1.5}, {0.5, -0.5}}, + max_payload_size = 1, + speed = 0.08, + max_energy = "1.5MJ", + energy_per_tick = "0.05kJ", + speed_multiplier_when_out_of_energy = 0.4, + energy_per_move = "4kJ", + min_to_charge = 0.2, + max_to_charge = 0.95, + working_light = {intensity = 0.8, size = 3, color = {r = 0.8, g = 0.8, b = 0.8}}, + idle = { + filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/cr-01.png", + priority = "high", + line_length = 16, + width = 64, + height = 73, + frame_count = 1, + shift = util.by_pixel(0, -4.5), + direction_count = 16, + scale = 0.5 + }, + in_motion = { + filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/cr-01.png", + priority = "high", + line_length = 16, + width = 64, + height = 73, + frame_count = 1, + shift = util.by_pixel(0, -4.5), + direction_count = 16, + y = 73, + scale = 0.5 + }, + shadow_idle = { + filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/shadow.png", + priority = "high", + line_length = 16, + width = 64, + height = 73, + frame_count = 1, + shift = util.by_pixel(33.5, 18.75), + direction_count = 16, + scale = 0.5 + }, + shadow_in_motion = { + filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/shadow.png", + priority = "high", + line_length = 16, + width = 64, + height = 73, + frame_count = 1, + shift = util.by_pixel(33.5, 18.75), + direction_count = 16, + scale = 0.5 + }, + working = { + filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/cr-01-working.png", + priority = "high", + line_length = 2, + width = 64, + height = 73, + frame_count = 2, + shift = util.by_pixel(0, -4.5), + direction_count = 16, + animation_speed = 0.3, + scale = 0.5 + }, + shadow_working = { + stripes = util.multiplystripes( + 2, + { + { + filename = "__pyindustrygraphics__/graphics/entity/py-construction-robot-01/shadow.png", + width_in_frames = 16, + height_in_frames = 1 + } + } + ), + priority = "high", + width = 32, + height = 37, + frame_count = 2, + shift = {1.09375, 0.59375}, + direction_count = 16 + }, + smoke = { + filename = "__base__/graphics/entity/smoke-construction/smoke-01.png", + width = 39, + height = 32, + frame_count = 19, + line_length = 19, + shift = {0.078125, -0.15625}, + animation_speed = 0.3 + }, + sparks = { + { + filename = "__base__/graphics/entity/sparks/sparks-01.png", + width = 39, + height = 34, + frame_count = 19, + line_length = 19, + shift = {-0.109375, 0.3125}, + tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, + animation_speed = 0.3 + }, + { + filename = "__base__/graphics/entity/sparks/sparks-02.png", + width = 36, + height = 32, + frame_count = 19, + line_length = 19, + shift = {0.03125, 0.125}, + tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, + animation_speed = 0.3 + }, + { + filename = "__base__/graphics/entity/sparks/sparks-03.png", + width = 42, + height = 29, + frame_count = 19, + line_length = 19, + shift = {-0.0625, 0.203125}, + tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, + animation_speed = 0.3 + }, + { + filename = "__base__/graphics/entity/sparks/sparks-04.png", + width = 40, + height = 35, + frame_count = 19, + line_length = 19, + shift = {-0.0625, 0.234375}, + tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, + animation_speed = 0.3 + }, + { + filename = "__base__/graphics/entity/sparks/sparks-05.png", + width = 39, + height = 29, + frame_count = 19, + line_length = 19, + shift = {-0.109375, 0.171875}, + tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, + animation_speed = 0.3 + }, + { + filename = "__base__/graphics/entity/sparks/sparks-06.png", + width = 44, + height = 36, + frame_count = 19, + line_length = 19, + shift = {0.03125, 0.3125}, + tint = {r = 1.0, g = 0.9, b = 0.0, a = 1.0}, + animation_speed = 0.3 + } + }, + working_sound = sounds.construction_robot(0.5), + construction_vector = {0.30, 0.22} +} diff --git a/prototypes/robots/py-logistic-robot-mk01.lua b/prototypes/robots/py-logistic-robot-mk01.lua index 3bdf92d..f952218 100644 --- a/prototypes/robots/py-logistic-robot-mk01.lua +++ b/prototypes/robots/py-logistic-robot-mk01.lua @@ -1,155 +1,154 @@ -local sounds = require "__base__/prototypes/entity/sounds" - -local cargo_bot = - RECIPE { - type = "recipe", - name = "py-logistic-robot-mk01", - energy_required = 10, - category = "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "item", name = "iron-plate", amount = 10}, - {type = "item", name = "iron-gear-wheel", amount = 10}, - {type = "item", name = "copper-plate", amount = 4}, - {type = "item", name = "electronic-circuit", amount = 10}, - {type = "item", name = "plastic-bar", amount = 5}, - {type = "item", name = "steam-engine", amount = 1}, - }, - results = { - {type = "item", name = "py-logistic-robot-mk01", amount = 1} - } - }:add_ingredient {type = "fluid", name = "fish-oil", amount = 50} -cargo_bot:replace_ingredient("copper-plate", {type = "item", name = "nichrome", amount = 2}):replace_ingredient("iron-plate", "niobium-plate") -cargo_bot:add_unlock {"logistic-robotics"} - -local bot_item = ITEM { - type = "item", - name = "py-logistic-robot-mk01", - icon = "__pyindustrygraphics__/graphics/icons/py-logistic-robot-01.png", - icon_size = 32, - flags = {}, - subgroup = "py-robots", - order = "c", - place_result = "py-logistic-robot-mk01", - stack_size = 50 -} - -if data.raw["item-subgroup"]["py-hightech-items"] then - bot_item:subgroup_order("py-hightech-items", "b") -end - -ENTITY { - type = "logistic-robot", - name = "py-logistic-robot-mk01", - icon = "__pyindustrygraphics__/graphics/icons/py-logistic-robot-01.png", - icon_size = 32, - flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-on-map"}, - minable = {mining_time = 0.1, result = "py-logistic-robot-mk01"}, - resistances = {{type = "fire", percent = 85}}, - max_health = 100, - collision_box = {{0, 0}, {0, 0}}, - selection_box = {{-0.5, -1.5}, {0.5, -0.5}}, - max_payload_size = 3, - speed = 0.08, - transfer_distance = 0.5, - max_energy = "1.5MJ", - energy_per_tick = "0.05kJ", - speed_multiplier_when_out_of_energy = 0.2, - energy_per_move = "4kJ", - min_to_charge = 0.2, - max_to_charge = 0.95, - idle = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/idle.png", - priority = "high", - line_length = 16, - width = 128, - height = 128, - frame_count = 1, - shift = util.by_pixel(0, 0), - direction_count = 16, - --y = 84, - scale = 0.5 - }, - idle_with_cargo = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/idle-cargo.png", - priority = "high", - line_length = 16, - width = 128, - height = 128, - frame_count = 1, - shift = util.by_pixel(0, 0), - direction_count = 16, - scale = 0.5 - }, - in_motion = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/run.png", - priority = "high", - line_length = 16, - width = 128, - height = 128, - frame_count = 1, - shift = util.by_pixel(0, 0), - direction_count = 16, - scale = 0.5 - }, - in_motion_with_cargo = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/run-cargo.png", - priority = "high", - line_length = 16, - width = 128, - height = 128, - frame_count = 1, - shift = util.by_pixel(0, 0), - direction_count = 16, - scale = 0.5 - }, - shadow_idle = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow.png", - priority = "high", - line_length = 16, - width = 128, - height = 96, - frame_count = 1, - shift = util.by_pixel(33.5, 18.75), - draw_as_shadow = true, - direction_count = 16, - scale = 0.5 - }, - shadow_idle_with_cargo = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow-cargo.png", - priority = "high", - line_length = 16, - width = 128, - height = 96, - frame_count = 1, - shift = util.by_pixel(33.5, 18.75), - draw_as_shadow = true, - direction_count = 16, - scale = 0.5 - }, - shadow_in_motion = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow.png", - priority = "high", - line_length = 16, - width = 128, - height = 96, - frame_count = 1, - shift = util.by_pixel(33.5, 18.75), - draw_as_shadow = true, - direction_count = 16, - scale = 0.5 - }, - shadow_in_motion_with_cargo = { - filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow-cargo.png", - priority = "high", - line_length = 16, - width = 128, - height = 96, - frame_count = 1, - shift = util.by_pixel(33.5, 18.75), - draw_as_shadow = true, - direction_count = 16, - scale = 0.5 - }, - working_sound = sounds.flying_robot(0.5), -} +local sounds = require "__base__/prototypes/entity/sounds" + +local cargo_bot = + RECIPE { + type = "recipe", + name = "py-logistic-robot-mk01", + energy_required = 10, + categories = {"crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "item", name = "iron-plate", amount = 10}, + {type = "item", name = "iron-gear-wheel", amount = 10}, + {type = "item", name = "copper-plate", amount = 4}, + {type = "item", name = "electronic-circuit", amount = 10}, + {type = "item", name = "plastic-bar", amount = 5}, + {type = "item", name = "steam-engine", amount = 1}, + }, + results = { + {type = "item", name = "py-logistic-robot-mk01", amount = 1} + } + }:add_ingredient {type = "fluid", name = "fish-oil", amount = 50} +cargo_bot:replace_ingredient("copper-plate", {type = "item", name = "nichrome", amount = 2}):replace_ingredient("iron-plate", "niobium-plate") +cargo_bot:add_unlock {"logistic-robotics"} + +local bot_item = ITEM { + type = "item", + name = "py-logistic-robot-mk01", + icon = "__pyindustrygraphics__/graphics/icons/py-logistic-robot-01.png", + icon_size = 32, + flags = {}, + subgroup = "py-robots", + order = "c", + place_result = "py-logistic-robot-mk01", + stack_size = 50 +} + +if data.raw["item-subgroup"]["py-hightech-items"] then + bot_item:subgroup_order("py-hightech-items", "b") +end + +ENTITY { + type = "logistic-robot", + name = "py-logistic-robot-mk01", + icon = "__pyindustrygraphics__/graphics/icons/py-logistic-robot-01.png", + icon_size = 32, + flags = {"placeable-player", "player-creation", "placeable-off-grid", "not-on-map"}, + minable = {mining_time = 0.1, result = "py-logistic-robot-mk01"}, + resistances = {{type = "fire", percent = 85}}, + max_health = 100, + collision_box = {{0, 0}, {0, 0}}, + selection_box = {{-0.5, -1.5}, {0.5, -0.5}}, + max_payload_size = 3, + speed = 0.08, + max_energy = "1.5MJ", + energy_per_tick = "0.05kJ", + speed_multiplier_when_out_of_energy = 0.2, + energy_per_move = "4kJ", + min_to_charge = 0.2, + max_to_charge = 0.95, + idle = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/idle.png", + priority = "high", + line_length = 16, + width = 128, + height = 128, + frame_count = 1, + shift = util.by_pixel(0, 0), + direction_count = 16, + --y = 84, + scale = 0.5 + }, + idle_with_cargo = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/idle-cargo.png", + priority = "high", + line_length = 16, + width = 128, + height = 128, + frame_count = 1, + shift = util.by_pixel(0, 0), + direction_count = 16, + scale = 0.5 + }, + in_motion = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/run.png", + priority = "high", + line_length = 16, + width = 128, + height = 128, + frame_count = 1, + shift = util.by_pixel(0, 0), + direction_count = 16, + scale = 0.5 + }, + in_motion_with_cargo = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/run-cargo.png", + priority = "high", + line_length = 16, + width = 128, + height = 128, + frame_count = 1, + shift = util.by_pixel(0, 0), + direction_count = 16, + scale = 0.5 + }, + shadow_idle = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow.png", + priority = "high", + line_length = 16, + width = 128, + height = 96, + frame_count = 1, + shift = util.by_pixel(33.5, 18.75), + draw_as_shadow = true, + direction_count = 16, + scale = 0.5 + }, + shadow_idle_with_cargo = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow-cargo.png", + priority = "high", + line_length = 16, + width = 128, + height = 96, + frame_count = 1, + shift = util.by_pixel(33.5, 18.75), + draw_as_shadow = true, + direction_count = 16, + scale = 0.5 + }, + shadow_in_motion = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow.png", + priority = "high", + line_length = 16, + width = 128, + height = 96, + frame_count = 1, + shift = util.by_pixel(33.5, 18.75), + draw_as_shadow = true, + direction_count = 16, + scale = 0.5 + }, + shadow_in_motion_with_cargo = { + filename = "__pyindustrygraphics__/graphics/entity/py-logistic-robot-01/shadow-cargo.png", + priority = "high", + line_length = 16, + width = 128, + height = 96, + frame_count = 1, + shift = util.by_pixel(33.5, 18.75), + draw_as_shadow = true, + direction_count = 16, + scale = 0.5 + }, + working_sound = sounds.flying_robot(0.5), +} diff --git a/prototypes/tiles/multicolored-concrete.lua b/prototypes/tiles/multicolored-concrete.lua index 5ec0b08..fbdeea6 100644 --- a/prototypes/tiles/multicolored-concrete.lua +++ b/prototypes/tiles/multicolored-concrete.lua @@ -1,64 +1,64 @@ -local refined_properties = { - walking_speed_modifier = 3.5, - vehicle_friction_modifier = 0.6, - decorative_removal_probability = 1.0 -} - -local colors = { - {name = "red", player_color = {r = 0.815, g = 0.024, b = 0.0, a = 0.5}, chat_color = {r = 1.000, g = 0.266, b = 0.241}, dye = {type = "fluid", name = "blood", amount = 15}}, - {name = "green", player_color = {r = 0.093, g = 0.768, b = 0.172, a = 0.5}, chat_color = {r = 0.173, g = 0.824, b = 0.250}, dye = {type = "item", name = "guar", amount = 1}}, - {name = "blue", player_color = {r = 0.155, g = 0.540, b = 0.898, a = 0.5}, chat_color = {r = 0.343, g = 0.683, b = 1.000}, dye = {type = "item", name = "moondrop", amount = 1}}, - {name = "orange", player_color = {r = 0.869, g = 0.5, b = 0.130, a = 0.5}, chat_color = {r = 1.000, g = 0.630, b = 0.259}, dye = {type = "item", name = "fawogae-substrate", amount = 1}}, - {name = "yellow", player_color = {r = 0.835, g = 0.666, b = 0.077, a = 0.5}, chat_color = {r = 1.000, g = 0.828, b = 0.231}, dye = {type = "item", name = "ralesia", amount = 1}}, - {name = "pink", player_color = {r = 0.929, g = 0.386, b = 0.514, a = 0.5}, chat_color = {r = 1.000, g = 0.720, b = 0.833}, dye = {type = "item", name = "ti-rejects", amount = 1}}, - {name = "purple", player_color = {r = 0.485, g = 0.111, b = 0.659, a = 0.5}, chat_color = {r = 0.821, g = 0.440, b = 0.998}, dye = {type = "fluid", name = "vpulp3", amount = 5}}, - {name = "black", player_color = {r = 0.1, g = 0.1, b = 0.1, a = 0.5}, chat_color = {r = 0.5, g = 0.5, b = 0.5}, dye = {type = "item", name = "carbon-black", amount = 1}}, - {name = "brown", player_color = {r = 0.300, g = 0.117, b = 0.0, a = 0.5}, chat_color = {r = 0.757, g = 0.522, b = 0.371}, dye = {type = "item", name = "used-comb", amount = 1}}, - {name = "cyan", player_color = {r = 0.275, g = 0.755, b = 0.712, a = 0.5}, chat_color = {r = 0.335, g = 0.918, b = 0.866}, dye = {type = "fluid", name = "cyanic-acid", amount = 10}}, - {name = "acid", player_color = {r = 0.559, g = 0.761, b = 0.157, a = 0.5}, chat_color = {r = 0.708, g = 0.996, b = 0.134}, dye = {type = "fluid", name = "acetic-acid", amount = 10}} -} - -for i, color_data in pairs(colors) do - local name = color_data.name .. "-refined-concrete" - local tile = TILE(name):set_fields(refined_properties) - - tile.minable = {mining_time = 0.1, result = name} - tile.mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"} - tile.collision_mask = {layers = {ground_tile = true}} - - RECIPE { - type = "recipe", - name = name, - category = "mixer", - enabled = false, - ingredients = { - {type = "item", name = "refined-concrete", amount = 2}, - color_data.dye - }, - results = { - {type = "item", name = name, amount = 3} - }, - requester_paste_multiplier = 4, - energy_required = 1 - }:add_unlock("py-asphalt-mk03") - - ITEM { - type = "item", - name = name, - icons = { - { - icon = data.raw.item["refined-concrete"].icon, - tint = color_data.chat_color, - icon_size = 64 - } - }, - flags = {}, - subgroup = "py-tiles-2", - order = "" .. i, - stack_size = 1000, - place_as_tile = {result = name, condition_size = 1, condition = {layers = {water_tile = true}}}, - localised_name = tile.localised_name - } -end - -TILE("refined-concrete"):set_fields(refined_properties) +local refined_properties = { + walking_speed_modifier = 3.5, + vehicle_friction_modifier = 0.6, + decorative_removal_probability = 1.0 +} + +local colors = { + {name = "red", player_color = {r = 0.815, g = 0.024, b = 0.0, a = 0.5}, chat_color = {r = 1.000, g = 0.266, b = 0.241}, dye = {type = "fluid", name = "blood", amount = 15}}, + {name = "green", player_color = {r = 0.093, g = 0.768, b = 0.172, a = 0.5}, chat_color = {r = 0.173, g = 0.824, b = 0.250}, dye = {type = "item", name = "guar", amount = 1}}, + {name = "blue", player_color = {r = 0.155, g = 0.540, b = 0.898, a = 0.5}, chat_color = {r = 0.343, g = 0.683, b = 1.000}, dye = {type = "item", name = "moondrop", amount = 1}}, + {name = "orange", player_color = {r = 0.869, g = 0.5, b = 0.130, a = 0.5}, chat_color = {r = 1.000, g = 0.630, b = 0.259}, dye = {type = "item", name = "fawogae-substrate", amount = 1}}, + {name = "yellow", player_color = {r = 0.835, g = 0.666, b = 0.077, a = 0.5}, chat_color = {r = 1.000, g = 0.828, b = 0.231}, dye = {type = "item", name = "ralesia", amount = 1}}, + {name = "pink", player_color = {r = 0.929, g = 0.386, b = 0.514, a = 0.5}, chat_color = {r = 1.000, g = 0.720, b = 0.833}, dye = {type = "item", name = "ti-rejects", amount = 1}}, + {name = "purple", player_color = {r = 0.485, g = 0.111, b = 0.659, a = 0.5}, chat_color = {r = 0.821, g = 0.440, b = 0.998}, dye = {type = "fluid", name = "vpulp3", amount = 5}}, + {name = "black", player_color = {r = 0.1, g = 0.1, b = 0.1, a = 0.5}, chat_color = {r = 0.5, g = 0.5, b = 0.5}, dye = {type = "item", name = "carbon-black", amount = 1}}, + {name = "brown", player_color = {r = 0.300, g = 0.117, b = 0.0, a = 0.5}, chat_color = {r = 0.757, g = 0.522, b = 0.371}, dye = {type = "item", name = "used-comb", amount = 1}}, + {name = "cyan", player_color = {r = 0.275, g = 0.755, b = 0.712, a = 0.5}, chat_color = {r = 0.335, g = 0.918, b = 0.866}, dye = {type = "fluid", name = "cyanic-acid", amount = 10}}, + {name = "acid", player_color = {r = 0.559, g = 0.761, b = 0.157, a = 0.5}, chat_color = {r = 0.708, g = 0.996, b = 0.134}, dye = {type = "fluid", name = "acetic-acid", amount = 10}} +} + +for i, color_data in pairs(colors) do + local name = color_data.name .. "-refined-concrete" + local tile = TILE(name):set_fields(refined_properties) + + tile.minable = {mining_time = 0.1, result = name} + tile.mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"} + tile.collision_mask = {layers = {ground_tile = true}} + + RECIPE { + type = "recipe", + name = name, + categories = {"mixer"}, + enabled = false, + ingredients = { + {type = "item", name = "refined-concrete", amount = 2}, + color_data.dye + }, + results = { + {type = "item", name = name, amount = 3} + }, + requester_paste_multiplier = 4, + energy_required = 1 + }:add_unlock("py-asphalt-mk03") + + ITEM { + type = "item", + name = name, + icons = { + { + icon = data.raw.item["refined-concrete"].icon, + tint = color_data.chat_color, + icon_size = 64 + } + }, + flags = {}, + subgroup = "py-tiles-2", + order = "" .. i, + stack_size = 1000, + place_as_tile = {result = name, condition_size = 1, condition = {layers = {water_tile = true}}}, + localised_name = tile.localised_name + } +end + +TILE("refined-concrete"):set_fields(refined_properties) diff --git a/prototypes/tiles/py-aluminium.lua b/prototypes/tiles/py-aluminium.lua index fae3cbc..1430c02 100644 --- a/prototypes/tiles/py-aluminium.lua +++ b/prototypes/tiles/py-aluminium.lua @@ -1,59 +1,57 @@ -RECIPE { - type = "recipe", - name = "py-aluminium", - category = "crafting", - enabled = false, - ingredients = { - {type = "item", name = "copper-plate", amount = 2}, - {type = "item", name = "iron-stick", amount = 1} - }, - results = { - {type = "item", name = "py-aluminium", amount = 1} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt-mk02", "coal-processing-2"):replace_ingredient("iron-stick", "solder"):replace_ingredient("copper-plate", "aluminium-plate") - -if mods.pyrawores then - RECIPE("py-aluminium"):add_ingredient {type = "item", name = "graphite", amount = 1} - data.raw.recipe["py-aluminium"].category = "eaf" - data.raw.recipe["py-aluminium"].results = {{type = "item", name = "py-aluminium", amount = 2}} -end - -ITEM { - type = "item", - name = "py-aluminium", - icon = "__pyindustrygraphics__/graphics/icons/py-aluminium.png", - icon_size = 64, - flags = {}, - subgroup = "py-tiles", - order = "a-aluminium-oxide", - stack_size = 1000, - place_as_tile = {result = "py-aluminium", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -TILE { - type = "tile", - name = "py-aluminium", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-aluminium"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.5, - decorative_removal_probability = 1, - layer = 78, - layer_group = "ground-artificial", - walking_sound = table.deepcopy(data.raw.tile["dry-dirt"].walking_sound), - map_color = {r = 100, g = 100, b = 100, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.6, - variants = { - transition = table.deepcopy(TILE("concrete").variants.transition), - material_background = - { - picture = "__pyindustrygraphics__/graphics/tiles/py-aluminium/py-aluminium.png", - count = 4, - scale = 0.5 - } - } -} +RECIPE { + type = "recipe", + name = "py-aluminium", + categories = {"crafting"}, + enabled = false, + ingredients = { + {type = "item", name = "copper-plate", amount = 2}, + {type = "item", name = "iron-stick", amount = 1} + }, + results = { + {type = "item", name = "py-aluminium", amount = 1} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt-mk02", "coal-processing-2"):replace_ingredient("iron-stick", "solder"):replace_ingredient("copper-plate", "aluminium-plate") + +if mods.pyrawores then + RECIPE("py-aluminium"):add_ingredient{type = "item", name = "graphite", amount = 1}:replace_category("crafting", "eaf"):set_result_amount("py-aluminium", 2) +end + +ITEM { + type = "item", + name = "py-aluminium", + icon = "__pyindustrygraphics__/graphics/icons/py-aluminium.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-aluminium-oxide", + stack_size = 1000, + place_as_tile = {result = "py-aluminium", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-aluminium", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-aluminium"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 78, + layer_group = "ground-artificial", + walking_sound = table.deepcopy(data.raw.tile["dry-dirt"].walking_sound), + map_color = {r = 100, g = 100, b = 100, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.6, + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-aluminium/py-aluminium.png", + count = 4, + scale = 0.5 + } + } +} diff --git a/prototypes/tiles/py-asphalt.lua b/prototypes/tiles/py-asphalt.lua index 6826c7b..3ad0143 100644 --- a/prototypes/tiles/py-asphalt.lua +++ b/prototypes/tiles/py-asphalt.lua @@ -1,81 +1,81 @@ -RECIPE { - type = "recipe", - name = "py-asphalt", - category = "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "fluid", name = "water", amount = 10}, - {type = "item", name = "coal", amount = 3}, - {type = "item", name = "stone", amount = 5} - }, - results = { - {type = "item", name = "py-asphalt", amount = 1} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt"):replace_ingredient("water", "tar"):replace_ingredient("coal", "ash"):replace_ingredient("stone", "gravel") - -ITEM { - type = "item", - name = "py-asphalt", - icon = "__base__/graphics/terrain/lab-tiles/lab-dark-2.png", - icon_size = 1, - flags = {}, - subgroup = "py-tiles", - order = "zb", - stack_size = 1000, - place_as_tile = {result = "py-asphalt", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -TILE { - type = "tile", - name = "py-asphalt", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-asphalt"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.25, - decorative_removal_probability = 1, - layer = 9, - layer_group = "ground-artificial", - variants = { - material_background = { - picture = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt.png", - count = 8, - scale = 0.5 - }, - transition = { - mask_layout = { - inner_corner = { - spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-inner-corner-mask.png", - count = 8, - scale = 0.5 - }, - outer_corner = { - spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-outer-corner-mask.png", - count = 8, - scale = 0.5 - }, - side = { - spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-side-mask.png", - count = 8, - scale = 0.5 - }, - u_transition = { - spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-u-mask.png", - count = 8, - scale = 0.5 - }, - o_transition = { - spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-o-mask.png", - count = 4, - scale = 0.5 - } - } - } - }, - walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound), - map_color = {r = 0, g = 0, b = 0, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.6, -} +RECIPE { + type = "recipe", + name = "py-asphalt", + categories = {"crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "fluid", name = "water", amount = 10}, + {type = "item", name = "coal", amount = 3}, + {type = "item", name = "stone", amount = 5} + }, + results = { + {type = "item", name = "py-asphalt", amount = 1} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt"):replace_ingredient("water", "tar"):replace_ingredient("coal", "ash"):replace_ingredient("stone", "gravel") + +ITEM { + type = "item", + name = "py-asphalt", + icon = "__base__/graphics/terrain/lab-tiles/lab-dark-2.png", + icon_size = 1, + flags = {}, + subgroup = "py-tiles", + order = "zb", + stack_size = 1000, + place_as_tile = {result = "py-asphalt", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-asphalt", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-asphalt"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.25, + decorative_removal_probability = 1, + layer = 9, + layer_group = "ground-artificial", + variants = { + material_background = { + picture = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt.png", + count = 8, + scale = 0.5 + }, + transition = { + mask_layout = { + inner_corner = { + spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-inner-corner-mask.png", + count = 8, + scale = 0.5 + }, + outer_corner = { + spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-outer-corner-mask.png", + count = 8, + scale = 0.5 + }, + side = { + spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-side-mask.png", + count = 8, + scale = 0.5 + }, + u_transition = { + spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-u-mask.png", + count = 8, + scale = 0.5 + }, + o_transition = { + spritesheet = "__pyindustrygraphics__/graphics/tiles/py-asphalt/py-asphalt-o-mask.png", + count = 4, + scale = 0.5 + } + } + } + }, + walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound), + map_color = {r = 0, g = 0, b = 0, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.6, +} diff --git a/prototypes/tiles/py-coal-tile.lua b/prototypes/tiles/py-coal-tile.lua index c867fab..33c6712 100644 --- a/prototypes/tiles/py-coal-tile.lua +++ b/prototypes/tiles/py-coal-tile.lua @@ -1,7 +1,7 @@ RECIPE { type = "recipe", name = "py-coal-tile", - category = "crafting", + categories = {"crafting"}, enabled = false, ingredients = { {type = "item", name = "coal", amount = 2}, --ash, 2 @@ -15,9 +15,7 @@ RECIPE { }:add_unlock("py-asphalt"):replace_ingredient("coal", "ash"):replace_ingredient("wood", "tailings-dust") if mods.pypetroleumhandling then - RECIPE("py-coal-tile"):add_ingredient {type = "fluid", name = "medium-distillate", amount = 20} - data.raw.recipe["py-coal-tile"].category = "reformer" - data.raw.recipe["py-coal-tile"].results = {{type = "item", name = "py-coal-tile", amount = 2}} + RECIPE("py-coal-tile"):add_ingredient {type = "fluid", name = "medium-distillate", amount = 20}:replace_category("crafting-with-fluid", "reformer"):set_result_amount("py-coal-tile", 2) end ITEM { diff --git a/prototypes/tiles/py-iron-oxide.lua b/prototypes/tiles/py-iron-oxide.lua index 408c649..a78b345 100644 --- a/prototypes/tiles/py-iron-oxide.lua +++ b/prototypes/tiles/py-iron-oxide.lua @@ -1,75 +1,75 @@ -RECIPE { - type = "recipe", - name = "py-iron-oxide", - category = "hpf", - enabled = false, - ingredients = { - {type = "item", name = "iron-oxide", amount = 4}, - {type = "item", name = "pipe", amount = 1}, - {type = "fluid", name = "muddy-sludge", amount = 20} - }, - results = { - {type = "item", name = "py-iron-oxide", amount = 2} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt") - -ITEM { - type = "item", - name = "py-iron-oxide", - icon = "__pyindustrygraphics__/graphics/icons/py-iron-oxide.png", - icon_size = 64, - flags = {}, - subgroup = "py-tiles", - order = "a-iron-oxide", - stack_size = 1000, - place_as_tile = {result = "py-iron-oxide", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -TILE { - type = "tile", - name = "py-iron-oxide", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-iron-oxide"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.5, - decorative_removal_probability = 1, - layer = 76, - layer_group = "ground-artificial", - walking_sound = { - { - filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", - volume = 0.3, - speed = 1.2 - } - }, - map_color = {r = 87, g = 33, b = 3, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.75, - variants = { - transition = table.deepcopy(TILE("concrete").variants.transition), - material_background = - { - picture = "__pyindustrygraphics__/graphics/tiles/py-iron-oxide/py-iron-oxide.png", - count = 2, - scale = 0.5 - } - } -} +RECIPE { + type = "recipe", + name = "py-iron-oxide", + categories = {"hpf"}, + enabled = false, + ingredients = { + {type = "item", name = "iron-oxide", amount = 4}, + {type = "item", name = "pipe", amount = 1}, + {type = "fluid", name = "muddy-sludge", amount = 20} + }, + results = { + {type = "item", name = "py-iron-oxide", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt") + +ITEM { + type = "item", + name = "py-iron-oxide", + icon = "__pyindustrygraphics__/graphics/icons/py-iron-oxide.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-iron-oxide", + stack_size = 1000, + place_as_tile = {result = "py-iron-oxide", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-iron-oxide", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-iron-oxide"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 76, + layer_group = "ground-artificial", + walking_sound = { + { + filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", + volume = 0.3, + speed = 1.2 + } + }, + map_color = {r = 87, g = 33, b = 3, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.75, + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-iron-oxide/py-iron-oxide.png", + count = 2, + scale = 0.5 + } + } +} diff --git a/prototypes/tiles/py-iron.lua b/prototypes/tiles/py-iron.lua index 0296dc3..d53a461 100644 --- a/prototypes/tiles/py-iron.lua +++ b/prototypes/tiles/py-iron.lua @@ -1,84 +1,84 @@ -RECIPE { - type = "recipe", - name = "py-iron", - category = mods.pycoalprocessing and "evaporator" or "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "item", name = "iron-plate", amount = 4}, - {type = "item", name = "iron-stick", amount = 1} - }, - results = { - {type = "item", name = "py-iron", amount = 2} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt-mk02"):add_ingredient {type = "fluid", name = "organic-solvent", amount = 5} - -ITEM { - type = "item", - name = "py-iron", - icon = "__pyindustrygraphics__/graphics/icons/py-iron.png", - icon_size = 64, - flags = {}, - subgroup = "py-tiles", - order = "a-iron-oxide", - stack_size = 1000, - place_as_tile = {result = "py-iron", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -local variants = {} -for i = 1, 8 do - -end - -TILE { - type = "tile", - name = "py-iron", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-iron"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.5, - decorative_removal_probability = 1, - layer = 72, - layer_group = "ground-artificial", - walking_sound = { - { - filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", - volume = 0.3, - speed = 1.2 - } - }, - map_color = {r = 130, g = 130, b = 130, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.6, - --TODO: fix low quality? - variants = { - transition = table.deepcopy(TILE("concrete").variants.transition), - -- why do we do this instead of the tile_background used elsewhere? - main = - {{ - picture = "__pyindustrygraphics__/graphics/tiles/py-iron/py-iron.png", - count = 8, - scale = 0.5, - size = 1, - y = 0, - line_length = 8 - }} - } -} +RECIPE { + type = "recipe", + name = "py-iron", + categories = {mods.pycoalprocessing and "evaporator" or "crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "item", name = "iron-plate", amount = 4}, + {type = "item", name = "iron-stick", amount = 1} + }, + results = { + {type = "item", name = "py-iron", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt-mk02"):add_ingredient {type = "fluid", name = "organic-solvent", amount = 5} + +ITEM { + type = "item", + name = "py-iron", + icon = "__pyindustrygraphics__/graphics/icons/py-iron.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-iron-oxide", + stack_size = 1000, + place_as_tile = {result = "py-iron", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +local variants = {} +for i = 1, 8 do + +end + +TILE { + type = "tile", + name = "py-iron", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-iron"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 72, + layer_group = "ground-artificial", + walking_sound = { + { + filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", + volume = 0.3, + speed = 1.2 + } + }, + map_color = {r = 130, g = 130, b = 130, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.6, + --TODO: fix low quality? + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + -- why do we do this instead of the tile_background used elsewhere? + main = + {{ + picture = "__pyindustrygraphics__/graphics/tiles/py-iron/py-iron.png", + count = 8, + scale = 0.5, + size = 1, + y = 0, + line_length = 8 + }} + } +} diff --git a/prototypes/tiles/py-limestone.lua b/prototypes/tiles/py-limestone.lua index 68b5672..7fddc99 100644 --- a/prototypes/tiles/py-limestone.lua +++ b/prototypes/tiles/py-limestone.lua @@ -1,75 +1,75 @@ -RECIPE { - type = "recipe", - name = "py-limestone", - category = mods.pycoalprocessing and "smelting" or "crafting-with-fluid", - enabled = false, - ingredients = { - {type = "fluid", name = "water", amount = 35}, - {type = "item", name = "coal", amount = 3}, - {type = "item", name = "stone", amount = 10} - -- {type='fluid', name='creosote', amount=10}, - -- {type='item', name='ash', amount=3}, - -- {type='item', name='limestone', amount=5}, - }, - results = { - {type = "item", name = "py-limestone", amount = 2} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt"):replace_ingredient("water", "creosote"):replace_ingredient("coal", "ash"):replace_ingredient("stone", "limestone") - -ITEM { - type = "item", - name = "py-limestone", - icon = "__pyindustrygraphics__/graphics/icons/py-limestone-icon.png", - icon_size = 64, - flags = {}, - subgroup = "py-tiles", - order = "a-limestone", - stack_size = 1000, - place_as_tile = {result = "py-limestone", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -TILE { - type = "tile", - name = "py-limestone", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-limestone"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.5, - decorative_removal_probability = 1, - layer = 77, - layer_group = "ground-artificial", - walking_sound = { - { - filename = "__base__/sound/walking/concrete-1.ogg", - volume = 0.5 - }, - { - filename = "__base__/sound/walking/concrete-2.ogg", - volume = 0.5 - }, - { - filename = "__base__/sound/walking/concrete-3.ogg", - volume = 0.5 - }, - { - filename = "__base__/sound/walking/concrete-4.ogg", - volume = 0.5 - } - }, - map_color = {r = 176, g = 175, b = 169, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.75, - - variants = { - transition = table.deepcopy(TILE("concrete").variants.transition), - material_background = - { - picture = "__pyindustrygraphics__/graphics/tiles/py-limestone/py-limestone.png", - count = 4, - scale = 0.5 - } - } -} +RECIPE { + type = "recipe", + name = "py-limestone", + categories = {mods.pycoalprocessing and "smelting" or "crafting-with-fluid"}, + enabled = false, + ingredients = { + {type = "fluid", name = "water", amount = 35}, + {type = "item", name = "coal", amount = 3}, + {type = "item", name = "stone", amount = 10} + -- {type='fluid', name='creosote', amount=10}, + -- {type='item', name='ash', amount=3}, + -- {type='item', name='limestone', amount=5}, + }, + results = { + {type = "item", name = "py-limestone", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt"):replace_ingredient("water", "creosote"):replace_ingredient("coal", "ash"):replace_ingredient("stone", "limestone") + +ITEM { + type = "item", + name = "py-limestone", + icon = "__pyindustrygraphics__/graphics/icons/py-limestone-icon.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-limestone", + stack_size = 1000, + place_as_tile = {result = "py-limestone", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-limestone", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-limestone"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 77, + layer_group = "ground-artificial", + walking_sound = { + { + filename = "__base__/sound/walking/concrete-1.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/walking/concrete-2.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/walking/concrete-3.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/walking/concrete-4.ogg", + volume = 0.5 + } + }, + map_color = {r = 176, g = 175, b = 169, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.75, + + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-limestone/py-limestone.png", + count = 4, + scale = 0.5 + } + } +} diff --git a/prototypes/tiles/py-nexelit.lua b/prototypes/tiles/py-nexelit.lua index 7407f8b..e8c3e90 100644 --- a/prototypes/tiles/py-nexelit.lua +++ b/prototypes/tiles/py-nexelit.lua @@ -1,54 +1,54 @@ -RECIPE { - type = "recipe", - name = "py-nexelit", - category = mods.pyhightech and "pcb" or "hpf", - enabled = false, - ingredients = { - {type = "item", name = "nexelit-plate", amount = 1}, - mods.pyhightech and {type = "item", name = "resistor1", amount = 1} or {type = "item", name = "gravel", amount = 2}, - {type = "fluid", name = "tar", amount = 20} - }, - results = { - {type = "item", name = "py-nexelit", amount = 2} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt-mk02", "nexelit-mk02") - -ITEM { - type = "item", - name = "py-nexelit", - icon = "__pyindustrygraphics__/graphics/icons/py-nexelit.png", - icon_size = 64, - flags = {}, - subgroup = "py-tiles", - order = "a-nexelit", - stack_size = 1000, - place_as_tile = {result = "py-nexelit", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -TILE { - type = "tile", - name = "py-nexelit", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-nexelit"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.5, - decorative_removal_probability = 1, - layer = 75, - layer_group = "ground-artificial", - walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound), - map_color = {r = 0, g = 110, b = 255, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.6, - variants = { - transition = table.deepcopy(TILE("concrete").variants.transition), - material_background = - { - picture = "__pyindustrygraphics__/graphics/tiles/py-nexelit/py-nexelit.png", - count = 2, - scale = 0.5 - } - } -} +RECIPE { + type = "recipe", + name = "py-nexelit", + categories = {mods.pyhightech and "pcb" or "hpf"}, + enabled = false, + ingredients = { + {type = "item", name = "nexelit-plate", amount = 1}, + mods.pyhightech and {type = "item", name = "resistor1", amount = 1} or {type = "item", name = "gravel", amount = 2}, + {type = "fluid", name = "tar", amount = 20} + }, + results = { + {type = "item", name = "py-nexelit", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt-mk02", "nexelit-mk02") + +ITEM { + type = "item", + name = "py-nexelit", + icon = "__pyindustrygraphics__/graphics/icons/py-nexelit.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-nexelit", + stack_size = 1000, + place_as_tile = {result = "py-nexelit", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-nexelit", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-nexelit"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 75, + layer_group = "ground-artificial", + walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound), + map_color = {r = 0, g = 110, b = 255, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.6, + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-nexelit/py-nexelit.png", + count = 2, + scale = 0.5 + } + } +} diff --git a/prototypes/tiles/py-quartz.lua b/prototypes/tiles/py-quartz.lua index c7e3ec9..479eba4 100644 --- a/prototypes/tiles/py-quartz.lua +++ b/prototypes/tiles/py-quartz.lua @@ -1,50 +1,50 @@ -RECIPE { - type = "recipe", - name = "py-quartz", - category = "glassworks", - enabled = false, - ingredients = { - {type = "fluid", name = "slacked-lime", amount = 10}, - {type = "item", name = "powdered-quartz", amount = 1}, - {type = "item", name = "pure-sand", amount = 2} - }, - results = { - {type = "item", name = "py-quartz", amount = 2} - }, - requester_paste_multiplier = 4, - energy_required = 3 -}:add_unlock("py-asphalt-mk02") - -ITEM { - type = "item", - name = "py-quartz", - icon = "__base__/graphics/terrain/lab-tiles/lab-white.png", - icon_size = 1, - flags = {}, - subgroup = "py-tiles", - order = "zc", - stack_size = 1000, - place_as_tile = {result = "lab-white", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -data.raw.tile["lab-white"].minable = {mining_time = 0.1, result = "py-quartz"} -data.raw.tile["lab-white"].mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"} -data.raw.tile["lab-white"].walking_speed_modifier = 3.25 -data.raw.tile["lab-white"].decorative_removal_probability = 1 -data.raw.tile["lab-white"].layer = 99 -data.raw.tile["lab-white"].walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound) -data.raw.tile["lab-white"].collision_mask = {layers = {ground_tile = true}} -data.raw.tile["lab-white"].vehicle_friction_modifier = 0.6 -data.raw.tile["lab-white"].tint = {255, 255, 255} - --- giving it concrete base/transitions --- data.raw.tile["lab-white"].variants = table.deepcopy(data.raw.tile.concrete.variants) -data.raw.tile["lab-white"].variants = { - transition = table.deepcopy(data.raw.tile["concrete"].variants.transition), - main = - {{ - picture = "__base__/graphics/terrain/lab-tiles/lab-white.png", - count = 1, - size = 1 - }} -} +RECIPE { + type = "recipe", + name = "py-quartz", + categories = {"glassworks"}, + enabled = false, + ingredients = { + {type = "fluid", name = "slacked-lime", amount = 10}, + {type = "item", name = "powdered-quartz", amount = 1}, + {type = "item", name = "pure-sand", amount = 2} + }, + results = { + {type = "item", name = "py-quartz", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 3 +}:add_unlock("py-asphalt-mk02") + +ITEM { + type = "item", + name = "py-quartz", + icon = "__base__/graphics/terrain/lab-tiles/lab-white.png", + icon_size = 1, + flags = {}, + subgroup = "py-tiles", + order = "zc", + stack_size = 1000, + place_as_tile = {result = "lab-white", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +data.raw.tile["lab-white"].minable = {mining_time = 0.1, result = "py-quartz"} +data.raw.tile["lab-white"].mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"} +data.raw.tile["lab-white"].walking_speed_modifier = 3.25 +data.raw.tile["lab-white"].decorative_removal_probability = 1 +data.raw.tile["lab-white"].layer = 99 +data.raw.tile["lab-white"].walking_sound = table.deepcopy(data.raw.tile["grass-1"].walking_sound) +data.raw.tile["lab-white"].collision_mask = {layers = {ground_tile = true}} +data.raw.tile["lab-white"].vehicle_friction_modifier = 0.6 +data.raw.tile["lab-white"].tint = {255, 255, 255} + +-- giving it concrete base/transitions +-- data.raw.tile["lab-white"].variants = table.deepcopy(data.raw.tile.concrete.variants) +data.raw.tile["lab-white"].variants = { + transition = table.deepcopy(data.raw.tile["concrete"].variants.transition), + main = + {{ + picture = "__base__/graphics/terrain/lab-tiles/lab-white.png", + count = 1, + size = 1 + }} +} diff --git a/prototypes/tiles/py-steel.lua b/prototypes/tiles/py-steel.lua index 0157329..6e39e9d 100644 --- a/prototypes/tiles/py-steel.lua +++ b/prototypes/tiles/py-steel.lua @@ -1,93 +1,93 @@ -if mods.pyrawores and mods.pypetroleumhandling then - RECIPE { - type = "recipe", - name = "py-steel", - category = "casting", - enabled = false, - ingredients = { - {type = "fluid", name = "molten-steel", amount = 10}, - {type = "fluid", name = "hot-air", amount = 5}, - {type = "item", name = "small-parts-01", amount = 1} - }, - results = { - {type = "item", name = "py-steel", amount = 2} - }, - requester_paste_multiplier = 4, - energy_required = 0.5 - }:add_unlock("py-asphalt-mk02") -else - RECIPE { - type = "recipe", - name = "py-steel", - category = "crafting", - enabled = false, - ingredients = { - {type = "item", name = "steel-plate", amount = 2}, - {type = "item", name = "iron-stick", amount = 1} - }, - results = { - {type = "item", name = "py-steel", amount = 1} - }, - requester_paste_multiplier = 4, - energy_required = 0.5 - }:add_unlock("py-asphalt-mk02", "coal-processing-2") -end - -ITEM { - type = "item", - name = "py-steel", - icon = "__pyindustrygraphics__/graphics/icons/py-steel.png", - icon_size = 64, - flags = {}, - subgroup = "py-tiles", - order = "a-steel-oxide", - stack_size = 1000, - place_as_tile = {result = "py-steel", condition_size = 1, condition = {layers = {water_tile = true}}} -} - -TILE { - type = "tile", - name = "py-steel", - needs_correction = false, - minable = {mining_time = 0.1, result = "py-steel"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - collision_mask = {layers = {ground_tile = true}}, - walking_speed_modifier = 3.5, - decorative_removal_probability = 1, - layer = 7, - layer_group = "ground-artificial", - walking_sound = { - { - filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", - volume = 0.3, - speed = 1.2 - }, - { - filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", - volume = 0.3, - speed = 1.2 - } - }, - map_color = {r = 0, g = 0, b = 0, a = 1}, - absorptions_per_second = {pollution = 0}, - vehicle_friction_modifier = 0.6, - variants = { - transition = table.deepcopy(TILE("concrete").variants.transition), - material_background = - { - picture = "__pyindustrygraphics__/graphics/tiles/py-steel/py-steel.png", - count = 1, - scale = 0.5 - } - } -} +if mods.pyrawores and mods.pypetroleumhandling then + RECIPE { + type = "recipe", + name = "py-steel", + categories = {"casting"}, + enabled = false, + ingredients = { + {type = "fluid", name = "molten-steel", amount = 10}, + {type = "fluid", name = "hot-air", amount = 5}, + {type = "item", name = "small-parts-01", amount = 1} + }, + results = { + {type = "item", name = "py-steel", amount = 2} + }, + requester_paste_multiplier = 4, + energy_required = 0.5 + }:add_unlock("py-asphalt-mk02") +else + RECIPE { + type = "recipe", + name = "py-steel", + categories = {"crafting"}, + enabled = false, + ingredients = { + {type = "item", name = "steel-plate", amount = 2}, + {type = "item", name = "iron-stick", amount = 1} + }, + results = { + {type = "item", name = "py-steel", amount = 1} + }, + requester_paste_multiplier = 4, + energy_required = 0.5 + }:add_unlock("py-asphalt-mk02", "coal-processing-2") +end + +ITEM { + type = "item", + name = "py-steel", + icon = "__pyindustrygraphics__/graphics/icons/py-steel.png", + icon_size = 64, + flags = {}, + subgroup = "py-tiles", + order = "a-steel-oxide", + stack_size = 1000, + place_as_tile = {result = "py-steel", condition_size = 1, condition = {layers = {water_tile = true}}} +} + +TILE { + type = "tile", + name = "py-steel", + needs_correction = false, + minable = {mining_time = 0.1, result = "py-steel"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + collision_mask = {layers = {ground_tile = true}}, + walking_speed_modifier = 3.5, + decorative_removal_probability = 1, + layer = 7, + layer_group = "ground-artificial", + walking_sound = { + { + filename = "__pyindustrygraphics__/sounds/iron-foot-01.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-02.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-03.ogg", + volume = 0.3, + speed = 1.2 + }, + { + filename = "__pyindustrygraphics__/sounds/iron-foot-04.ogg", + volume = 0.3, + speed = 1.2 + } + }, + map_color = {r = 0, g = 0, b = 0, a = 1}, + absorptions_per_second = {pollution = 0}, + vehicle_friction_modifier = 0.6, + variants = { + transition = table.deepcopy(TILE("concrete").variants.transition), + material_background = + { + picture = "__pyindustrygraphics__/graphics/tiles/py-steel/py-steel.png", + count = 1, + scale = 0.5 + } + } +} diff --git a/prototypes/updates/base-updates.lua b/prototypes/updates/base-updates.lua index 7fb1833..a76b3b3 100644 --- a/prototypes/updates/base-updates.lua +++ b/prototypes/updates/base-updates.lua @@ -56,6 +56,9 @@ RECIPE("requester-chest"):remove_ingredient("advanced-circuit") RECIPE("locomotive"):remove_ingredient("engine-unit"):add_ingredient {type = "item", name = "pipe", amount = 20}:add_ingredient {type = "item", name = "steam-engine", amount = 2}:add_ingredient {type = "item", name = "iron-gear-wheel", amount = 20}:subgroup_order("py-trains", "a") RECIPE("cargo-wagon"):subgroup_order("py-trains", "ab") RECIPE("fluid-wagon"):subgroup_order("py-trains", "ac") +ENTITY("locomotive").fast_replaceable_group = "locomotive" +ENTITY("cargo-wagon").fast_replaceable_group = "cargo-wagon" +ENTITY("fluid-wagon").fast_replaceable_group = "fluid-wagon" TECHNOLOGY("fluid-wagon"):remove_pack("logistic-science-pack") TECHNOLOGY("automated-rail-transportation"):remove_pack("logistic-science-pack") @@ -65,8 +68,6 @@ RECIPE("rocket-silo"):replace_ingredient("pipe", "niobium-pipe") TECHNOLOGY("electric-energy-accumulators"):set("icon", "__pyindustrygraphics__/graphics/technology/accumulator-mk01.png") TECHNOLOGY("electric-energy-accumulators"):set("icon_size", 128) -data.raw.pump["pump"].fluid_wagon_connector_alignment_tolerance = 1.0 - -- Moved from prototypes/pipes/niobium-pipes.lua because AFH was incorrectly copying the property causing crashes if not settings.startup["py-braided-pipes"].value then data.raw.pipe.pipe.next_upgrade = "niobium-pipe" diff --git a/prototypes/void-recipes/fluid-void.lua b/prototypes/void-recipes/fluid-void.lua index 13f0839..2fc7a3e 100644 --- a/prototypes/void-recipes/fluid-void.lua +++ b/prototypes/void-recipes/fluid-void.lua @@ -1,51 +1,47 @@ -local function make_fluid_recipe(name, locale, icons, category, ing, subgroup) - RECIPE { - name = name, - type = "recipe", - localised_name = locale, - hidden = true, - hidden_in_factoriopedia = false, - enabled = true, - category = category, - energy_required = 1, - ingredients = {ing}, - results = {}, - icons = icons, - icon_size = 32, - subgroup = subgroup or "py-void", - autotech_ignore = true - } -end - -for _, fluid in pairs(data.raw.fluid) do - if fluid.hidden then goto continue end - if fluid.name == "fluid-unknown" or fluid.subgroup == "parameters" then goto continue end - - local name - local icons - - if fluid.icons then - icons = table.deepcopy(fluid.icons) - else - icons = {{icon = fluid.icon, icon_size = fluid.icon_size or 64}} - end - icons[#icons + 1] = {icon = "__pyindustrygraphics__/graphics/icons/no.png", icon_size = 32} - - if (fluid.default_temperature or 15) < (fluid.gas_temperature or 999999999999) then - -- Make sinkhole - name = fluid.name .. "-pyvoid-fluid" - local locale = {"", "Void ", {"fluid-name." .. fluid.name}} - local ing = {type = "fluid", name = fluid.name, amount = 20000} - make_fluid_recipe(name, locale, icons, "py-runoff", ing, "py-void-liquid") - end - - if fluid.gas_temperature and (fluid.default_temperature or 15) >= fluid.gas_temperature then - -- Make venting - name = fluid.name .. "-pyvoid-gas" - local locale = {"", "Void ", {"fluid-name." .. fluid.name}} - local ing = {type = "fluid", name = fluid.name, amount = 20000} - make_fluid_recipe(name, locale, icons, "py-venting", ing, "py-void-gas") - end - - ::continue:: -end +local ignored = settings.startup["py-show-voiding-in-stats"].value and 0 or 20000 + +local function make_fluid_recipe(name, locale, icons, categories, fluid, subgroup) + RECIPE { + name = name, + type = "recipe", + localised_name = locale, + hidden = true, + hidden_in_factoriopedia = false, + enabled = true, + categories = categories, + energy_required = 1, + ingredients = {{type = "fluid", name = fluid, amount = 20000, ignored_by_stats = ignored}}, + results = {}, + icons = icons, + icon_size = 32, + subgroup = subgroup or "py-void", + autotech_ignore = true + } +end + +for _, fluid in pairs(data.raw.fluid) do + if fluid.hidden then goto continue end + if fluid.name == "fluid-unknown" or fluid.subgroup == "parameters" then goto continue end + + local name + local icons + + icons = fluid.icons and table.deepcopy(fluid.icons) or {{icon = fluid.icon, icon_size = fluid.icon_size or 64}} + icons[#icons + 1] = {icon = "__pyindustrygraphics__/graphics/icons/no.png", icon_size = 32} + + if (fluid.default_temperature or 15) < (fluid.gas_temperature or 999999999999) then + -- Make sinkhole + name = fluid.name .. "-pyvoid-fluid" + local locale = {"", "Void ", {"fluid-name." .. fluid.name}} + make_fluid_recipe(name, locale, icons, {"py-runoff"}, fluid.name, "py-void-liquid") + end + + if fluid.gas_temperature and (fluid.default_temperature or 15) >= fluid.gas_temperature then + -- Make venting + name = fluid.name .. "-pyvoid-gas" + local locale = {"", "Void ", {"fluid-name." .. fluid.name}} + make_fluid_recipe(name, locale, icons, {"py-venting"}, fluid.name, "py-void-gas") + end + + ::continue:: +end diff --git a/prototypes/void-recipes/item-void.lua b/prototypes/void-recipes/item-void.lua index 69db90b..b2d8f70 100644 --- a/prototypes/void-recipes/item-void.lua +++ b/prototypes/void-recipes/item-void.lua @@ -1,84 +1,68 @@ --- Courtesy of "pyindustry_burner_fix", by "magu5026", - -local void_result = { - type = "item", - name = data.raw.item["ash"] and "ash" or data.raw.item["coal"] and "coal" or nil, - amount_min = 1, - amount_max = 1, - probability = 0.20 -} -if not void_result.name then - void_result = {type = "fluid", name = "water", amount = 0} -end - -local function make_void_recipe(name, newicons, ing_name, place_result) - RECIPE { - name = name, - type = "recipe", - localised_name = {"recipe-name.py-void", {"?", {"item-name." .. ing_name}, {"entity-name." .. (place_result or ing_name)}, ""}}, - energy_required = 1.5, - icons = newicons, - icon_size = 32, - hidden = true, - enabled = true, - category = "py-incineration", - ingredients = {{type = "item", name = ing_name, amount = 1}}, - results = {void_result}, - subgroup = "py-void-items", - autotech_ignore = true - } -end - ---TODO: See if Raiguard fixes the missing categories for release -local groups = { - "ammo", - "armor", - "capsule", - "gun", - "item-with-entity-data", - --"item-with-inventory", - --"item-with-label", - --"item-with-tags", - "item", - "module", - "rail-planner", - "repair-tool", - "tool", -} - ---local item_count = 0 -local fluid_barrels = {} - -for f, _ in pairs(data.raw.fluid) do - local i = f .. "-barrel" - if data.raw.item[i] then - fluid_barrels[i] = true - end - local i = f .. "-canister" - if data.raw.item[i] then - fluid_barrels[i] = true - end -end - - -for _, type in pairs(groups) do - for _, item in pairs(data.raw[type]) do - if not item.not_voidable and not (item.fuel_value and (item.fuel_category == "chemical" or item.fuel_category == "biomass" or item.fuel_category == "nuke")) - and not fluid_barrels[item.name] and string.match(item.name, "rocket%-fuel") == nil and not (item.subgroup == "parameters") then - --item_count = item_count + 1 - local name = item.name .. "-pyvoid" - - local new_icons - if item.icons then - new_icons = table.deepcopy(item.icons) - else - new_icons = {{icon = item.icon, icon_size = item.icon_size or 64}} - end - new_icons[#new_icons + 1] = {icon = "__pyindustrygraphics__/graphics/icons/no.png", icon_size = 32} - make_void_recipe(name, new_icons, item.name, item.place_result) - end - item.not_voidable = nil - end -end - ---log(item_count) +-- Courtesy of "pyindustry_burner_fix", by "magu5026", + +local void_result = { + type = "item", + name = data.raw.item["ash"] and "ash" or data.raw.item["coal"] and "coal" or nil, + amount_min = 1, + amount_max = 1, + independent_probability = 0.20 +} +if not void_result.name then + void_result = {type = "fluid", name = "water", amount = 0} +end + +local ignored = settings.startup["py-show-voiding-in-stats"].value and 0 or 1 + +local function make_void_recipe(name, newicons, item, place_result) + RECIPE { + name = name, + type = "recipe", + localised_name = {"recipe-name.py-void", {"?", {"item-name." .. item}, {"entity-name." .. (place_result or item)}, ""}}, + energy_required = 1.5, + icons = newicons, + icon_size = 32, + hidden = true, + enabled = true, + categories = {"py-incineration"}, + ingredients = {{type = "item", name = item, amount = 1, ignored_by_stats = ignored}}, + results = {void_result}, + subgroup = "py-void-items", + autotech_ignore = true + } +end + +--local item_count = 0 +local fluid_barrels = {} + +for f, _ in pairs(data.raw.fluid) do + local i = f .. "-barrel" + if data.raw.item[i] then + fluid_barrels[i] = true + end + local i = f .. "-canister" + if data.raw.item[i] then + fluid_barrels[i] = true + end +end + +for type in pairs(defines.prototypes.item) do + for _, item in pairs(data.raw[type] or {}) do + if not item.not_voidable and not (item.fuel_value and (item.fuel_category == "chemical" or item.fuel_category == "biomass" or item.fuel_category == "nuke")) + and not fluid_barrels[item.name] and string.match(item.name, "rocket%-fuel") == nil and not (item.subgroup == "parameters") then + --item_count = item_count + 1 + local name = item.name .. "-pyvoid" + + local new_icons + if item.icons then + new_icons = table.deepcopy(item.icons) + else + new_icons = {{icon = item.icon, icon_size = item.icon_size or 64}} + end + new_icons[#new_icons + 1] = {icon = "__pyindustrygraphics__/graphics/icons/no.png", icon_size = 32} + make_void_recipe(name, new_icons, item.name, item.place_result) + end + item.not_voidable = nil + end +end + +--log(item_count) diff --git a/prototypes/wall/concrete-wall.lua b/prototypes/wall/concrete-wall.lua index 3104d24..45cde76 100644 --- a/prototypes/wall/concrete-wall.lua +++ b/prototypes/wall/concrete-wall.lua @@ -1,171 +1,171 @@ -RECIPE { - type = "recipe", - name = "concrete-wall", - category = "crafting", - enabled = false, - ingredients = { - {type = "item", name = "concrete", amount = 2}, - {type = "item", name = "iron-stick", amount = 4} - }, - results = { - {type = "item", name = "concrete-wall", amount = 1} - } -}:add_unlock("py-asphalt") - -ITEM { - type = "item", - name = "concrete-wall", - icon = "__pyindustrygraphics__/graphics/icons/concrete-wall.png", - icon_size = 32, - flags = {}, - subgroup = "py-walls", - order = "z", - place_result = "concrete-wall", - stack_size = 100 -} - -ENTITY { - type = "wall", - name = "concrete-wall", - icon = "__pyindustrygraphics__/graphics/icons/concrete-wall.png", - icon_size = 32, - flags = {"placeable-neutral", "player-creation"}, - collision_box = {{-0.29, -0.29}, {0.29, 0.29}}, - selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, - minable = {mining_time = 0.1, result = "concrete-wall"}, - max_health = 500, - corpse = "wall-remnants", - repair_sound = {filename = "__base__/sound/manual-repair-simple.ogg"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - repair_speed_modifier = 4, - fast_replaceable_group = "wall", - impact_category = "stone", - connected_gate_visualization = {filename = "__core__/graphics/arrows/underground-lines.png", priority = "high", width = 64, height = 64, scale = 0.5}, - wall_diode_green = { - filename = "__base__/graphics/entity/wall/wall-diode-green.png", - width = 21, - height = 22, - shift = {0, -0.78125} - }, - wall_diode_green_light = { - minimum_darkness = 0.3, - color = {g = 1}, - shift = {0, -0.78125}, - size = 1, - intensity = 0.3 - }, - wall_diode_red = { - filename = "__base__/graphics/entity/wall/wall-diode-red.png", - width = 21, - height = 22, - shift = {0, -0.78125} - }, - wall_diode_red_light = { - minimum_darkness = 0.3, - color = {r = 1}, - shift = {0, -0.78125}, - size = 1, - intensity = 0.3 - }, - resistances = { - {type = "physical", decrease = 5, percent = 60}, - {type = "explosion", decrease = 2, percent = 60}, - {type = "fire", percent = 100}, - {type = "acid", percent = 15} - }, - pictures = { - single = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/single.png", - priority = "extra-high", - width = 32, - height = 44, - shift = {0, -0.0} - } - }, - straight_vertical = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/vertical.png", - priority = "extra-high", - width = 32, - height = 42, - shift = {0, -0.0} - } - }, - straight_horizontal = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-1.png", - priority = "extra-high", - width = 32, - height = 38, - shift = {0.0, 0.08} - }, - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-2.png", - priority = "extra-high", - width = 32, - height = 38, - shift = {0.0, 0.08} - }, - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-3.png", - priority = "extra-high", - width = 32, - height = 38, - shift = {0.0, 0.08} - }, - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-4.png", - priority = "extra-high", - width = 32, - height = 38, - shift = {0.0, 0.08} - } - }, - corner_right_down = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/corner-right.png", - priority = "extra-high", - width = 32, - height = 43, - shift = {0, -0.0} - } - }, - corner_left_down = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/corner-left.png", - priority = "extra-high", - width = 32, - height = 43, - shift = {0.0, -0.0} - } - }, - t_up = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/t-down.png", - priority = "extra-high", - width = 32, - height = 44, - shift = {0, -0.00} - } - }, - ending_right = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/end-right.png", - priority = "extra-high", - width = 32, - height = 43, - shift = {0, -0.0} - } - }, - ending_left = { - { - filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/end-left.png", - priority = "extra-high", - width = 32, - height = 43, - shift = {0, -0.0} - } - } - } -} +RECIPE { + type = "recipe", + name = "concrete-wall", + categories = {"crafting"}, + enabled = false, + ingredients = { + {type = "item", name = "concrete", amount = 2}, + {type = "item", name = "iron-stick", amount = 4} + }, + results = { + {type = "item", name = "concrete-wall", amount = 1} + } +}:add_unlock("py-asphalt") + +ITEM { + type = "item", + name = "concrete-wall", + icon = "__pyindustrygraphics__/graphics/icons/concrete-wall.png", + icon_size = 32, + flags = {}, + subgroup = "py-walls", + order = "z", + place_result = "concrete-wall", + stack_size = 100 +} + +ENTITY { + type = "wall", + name = "concrete-wall", + icon = "__pyindustrygraphics__/graphics/icons/concrete-wall.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + collision_box = {{-0.29, -0.29}, {0.29, 0.29}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + minable = {mining_time = 0.1, result = "concrete-wall"}, + max_health = 500, + corpse = "wall-remnants", + repair_sound = {filename = "__base__/sound/manual-repair-simple.ogg"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + repair_speed_modifier = 4, + fast_replaceable_group = "wall", + impact_category = "stone", + connected_gate_visualization = {filename = "__core__/graphics/arrows/underground-lines.png", priority = "high", width = 64, height = 64, scale = 0.5}, + wall_diode_green = { + filename = "__base__/graphics/entity/wall/wall-diode-green.png", + width = 21, + height = 22, + shift = {0, -0.78125} + }, + wall_diode_green_light = { + minimum_darkness = 0.3, + color = {g = 1}, + shift = {0, -0.78125}, + size = 1, + intensity = 0.3 + }, + wall_diode_red = { + filename = "__base__/graphics/entity/wall/wall-diode-red.png", + width = 21, + height = 22, + shift = {0, -0.78125} + }, + wall_diode_red_light = { + minimum_darkness = 0.3, + color = {r = 1}, + shift = {0, -0.78125}, + size = 1, + intensity = 0.3 + }, + resistances = { + {type = "physical", decrease = 5, percent = 60}, + {type = "explosion", decrease = 2, percent = 60}, + {type = "fire", percent = 100}, + {type = "acid", percent = 15} + }, + pictures = { + single = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/single.png", + priority = "extra-high", + width = 32, + height = 44, + shift = {0, -0.0} + } + }, + straight_vertical = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/vertical.png", + priority = "extra-high", + width = 32, + height = 42, + shift = {0, -0.0} + } + }, + straight_horizontal = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-1.png", + priority = "extra-high", + width = 32, + height = 38, + shift = {0.0, 0.08} + }, + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-2.png", + priority = "extra-high", + width = 32, + height = 38, + shift = {0.0, 0.08} + }, + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-3.png", + priority = "extra-high", + width = 32, + height = 38, + shift = {0.0, 0.08} + }, + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/horizontal-4.png", + priority = "extra-high", + width = 32, + height = 38, + shift = {0.0, 0.08} + } + }, + corner_right_down = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/corner-right.png", + priority = "extra-high", + width = 32, + height = 43, + shift = {0, -0.0} + } + }, + corner_left_down = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/corner-left.png", + priority = "extra-high", + width = 32, + height = 43, + shift = {0.0, -0.0} + } + }, + t_up = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/t-down.png", + priority = "extra-high", + width = 32, + height = 44, + shift = {0, -0.00} + } + }, + ending_right = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/end-right.png", + priority = "extra-high", + width = 32, + height = 43, + shift = {0, -0.0} + } + }, + ending_left = { + { + filename = "__pyindustrygraphics__/graphics/walls/concrete-wall/end-left.png", + priority = "extra-high", + width = 32, + height = 43, + shift = {0, -0.0} + } + } + } +} diff --git a/prototypes/wall/poorman-wood-fence.lua b/prototypes/wall/poorman-wood-fence.lua index 59768f0..e1b5685 100644 --- a/prototypes/wall/poorman-wood-fence.lua +++ b/prototypes/wall/poorman-wood-fence.lua @@ -1,156 +1,156 @@ -RECIPE { - type = "recipe", - name = "poorman-wood-fence", - category = "crafting", - enabled = true, - ingredients = { - {type = "item", name = "wood", amount = 3} - }, - results = { - {type = "item", name = "poorman-wood-fence", amount = 1} - } -} - -ITEM { - type = "item", - name = "poorman-wood-fence", - icon = "__pyindustrygraphics__/graphics/icons/poorman-wood-fence.png", - icon_size = 32, - flags = {}, - subgroup = "py-walls", - order = "z", - place_result = "poorman-wood-fence", - stack_size = 100 -} - -ENTITY { - type = "wall", - name = "poorman-wood-fence", - icon = "__pyindustrygraphics__/graphics/icons/poorman-wood-fence.png", - icon_size = 32, - flags = {"placeable-neutral", "player-creation"}, - collision_box = {{-0.29, -0.29}, {0.29, 0.29}}, - selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, - minable = {mining_time = 0.1, result = "poorman-wood-fence"}, - max_health = 100, - corpse = "wall-remnants", - repair_sound = {filename = "__base__/sound/manual-repair-simple.ogg"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - repair_speed_modifier = 4, - fast_replaceable_group = "wall", - impact_category = "stone", - connected_gate_visualization = {filename = "__core__/graphics/arrows/underground-lines.png", priority = "high", width = 64, height = 64, scale = 0.5}, - wall_diode_green = { - filename = "__base__/graphics/entity/wall/wall-diode-green.png", - width = 21, - height = 22, - shift = {0, -0.78125} - }, - wall_diode_green_light = { - minimum_darkness = 0.3, - color = {g = 1}, - shift = {0, -0.78125}, - size = 1, - intensity = 0.3 - }, - wall_diode_red = { - filename = "__base__/graphics/entity/wall/wall-diode-red.png", - width = 21, - height = 22, - shift = {0, -0.78125} - }, - wall_diode_red_light = { - minimum_darkness = 0.3, - color = {r = 1}, - shift = {0, -0.78125}, - size = 1, - intensity = 0.3 - }, - resistances = { - {type = "physical", decrease = 5, percent = 30}, - {type = "explosion", decrease = 2, percent = 30}, - {type = "fire", percent = 10}, - {type = "acid", percent = 10} - }, - pictures = { - single = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/single.png", - priority = "extra-high", - width = 32, - height = 40, - shift = {0, -0.2} - } - }, - straight_vertical = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/vertical.png", - priority = "extra-high", - width = 32, - height = 45, - shift = {0, -0.2} - } - }, - straight_horizontal = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/horizontal-2.png", - priority = "extra-high", - width = 32, - height = 40, - shift = {0, -0.2} - }, - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/horizontal-1.png", - priority = "extra-high", - width = 32, - height = 40, - shift = {0, -0.2} - } - }, - corner_right_down = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/corner-right.png", - priority = "extra-high", - width = 32, - height = 40, - shift = {0, -0.2} - } - }, - corner_left_down = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/corner-left.png", - priority = "extra-high", - width = 32, - height = 40, - shift = {0, -0.19} - } - }, - t_up = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/t-down.png", - priority = "extra-high", - width = 32, - height = 45, - shift = {0, -0.2} - } - }, - ending_right = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/end-left.png", - priority = "extra-high", - width = 32, - height = 40, - shift = {0, -0.2} - } - }, - ending_left = { - { - filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/end-right.png", - priority = "extra-high", - width = 32, - height = 38, - shift = {0, -0.2} - } - } - } -} +RECIPE { + type = "recipe", + name = "poorman-wood-fence", + categories = {"crafting"}, + enabled = true, + ingredients = { + {type = "item", name = "wood", amount = 3} + }, + results = { + {type = "item", name = "poorman-wood-fence", amount = 1} + } +} + +ITEM { + type = "item", + name = "poorman-wood-fence", + icon = "__pyindustrygraphics__/graphics/icons/poorman-wood-fence.png", + icon_size = 32, + flags = {}, + subgroup = "py-walls", + order = "z", + place_result = "poorman-wood-fence", + stack_size = 100 +} + +ENTITY { + type = "wall", + name = "poorman-wood-fence", + icon = "__pyindustrygraphics__/graphics/icons/poorman-wood-fence.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + collision_box = {{-0.29, -0.29}, {0.29, 0.29}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + minable = {mining_time = 0.1, result = "poorman-wood-fence"}, + max_health = 100, + corpse = "wall-remnants", + repair_sound = {filename = "__base__/sound/manual-repair-simple.ogg"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + repair_speed_modifier = 4, + fast_replaceable_group = "wall", + impact_category = "stone", + connected_gate_visualization = {filename = "__core__/graphics/arrows/underground-lines.png", priority = "high", width = 64, height = 64, scale = 0.5}, + wall_diode_green = { + filename = "__base__/graphics/entity/wall/wall-diode-green.png", + width = 21, + height = 22, + shift = {0, -0.78125} + }, + wall_diode_green_light = { + minimum_darkness = 0.3, + color = {g = 1}, + shift = {0, -0.78125}, + size = 1, + intensity = 0.3 + }, + wall_diode_red = { + filename = "__base__/graphics/entity/wall/wall-diode-red.png", + width = 21, + height = 22, + shift = {0, -0.78125} + }, + wall_diode_red_light = { + minimum_darkness = 0.3, + color = {r = 1}, + shift = {0, -0.78125}, + size = 1, + intensity = 0.3 + }, + resistances = { + {type = "physical", decrease = 5, percent = 30}, + {type = "explosion", decrease = 2, percent = 30}, + {type = "fire", percent = 10}, + {type = "acid", percent = 10} + }, + pictures = { + single = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/single.png", + priority = "extra-high", + width = 32, + height = 40, + shift = {0, -0.2} + } + }, + straight_vertical = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/vertical.png", + priority = "extra-high", + width = 32, + height = 45, + shift = {0, -0.2} + } + }, + straight_horizontal = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/horizontal-2.png", + priority = "extra-high", + width = 32, + height = 40, + shift = {0, -0.2} + }, + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/horizontal-1.png", + priority = "extra-high", + width = 32, + height = 40, + shift = {0, -0.2} + } + }, + corner_right_down = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/corner-right.png", + priority = "extra-high", + width = 32, + height = 40, + shift = {0, -0.2} + } + }, + corner_left_down = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/corner-left.png", + priority = "extra-high", + width = 32, + height = 40, + shift = {0, -0.19} + } + }, + t_up = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/t-down.png", + priority = "extra-high", + width = 32, + height = 45, + shift = {0, -0.2} + } + }, + ending_right = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/end-left.png", + priority = "extra-high", + width = 32, + height = 40, + shift = {0, -0.2} + } + }, + ending_left = { + { + filename = "__pyindustrygraphics__/graphics/walls/poorman-wood-fence/end-right.png", + priority = "extra-high", + width = 32, + height = 38, + shift = {0, -0.2} + } + } + } +} diff --git a/prototypes/wall/wood-fence.lua b/prototypes/wall/wood-fence.lua index 6453c9d..3338bdd 100644 --- a/prototypes/wall/wood-fence.lua +++ b/prototypes/wall/wood-fence.lua @@ -1,149 +1,149 @@ -RECIPE { - type = "recipe", - name = "wood-fence", - category = "crafting", - enabled = false, - ingredients = { - {type = "item", name = "wood", amount = 2} - }, - results = { - {type = "item", name = "wood-fence", amount = 1} - } -}:add_unlock("py-asphalt"):replace_ingredient("wood", "treated-wood") - -ITEM { - type = "item", - name = "wood-fence", - icon = "__pyindustrygraphics__/graphics/icons/wood-fence.png", - icon_size = 32, - flags = {}, - subgroup = "py-walls", - order = "z", - place_result = "wood-fence", - stack_size = 100 -} - -ENTITY { - type = "wall", - name = "wood-fence", - icon = "__pyindustrygraphics__/graphics/icons/wood-fence.png", - icon_size = 32, - flags = {"placeable-neutral", "player-creation"}, - collision_box = {{-0.29, -0.29}, {0.29, 0.29}}, - selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, - minable = {mining_time = 0.1, result = "wood-fence"}, - max_health = 100, - corpse = "wall-remnants", - repair_sound = {filename = "__base__/sound/manual-repair-simple.ogg"}, - mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, - repair_speed_modifier = 4, - fast_replaceable_group = "wall", - impact_category = "stone", - connected_gate_visualization = {filename = "__core__/graphics/arrows/underground-lines.png", priority = "high", width = 64, height = 64, scale = 0.5}, - wall_diode_green = { - filename = "__base__/graphics/entity/wall/wall-diode-green.png", - width = 21, - height = 22, - shift = {0, -0.78125} - }, - wall_diode_green_light = { - minimum_darkness = 0.3, - color = {g = 1}, - shift = {0, -0.78125}, - size = 1, - intensity = 0.3 - }, - wall_diode_red = { - filename = "__base__/graphics/entity/wall/wall-diode-red.png", - width = 21, - height = 22, - shift = {0, -0.78125} - }, - wall_diode_red_light = { - minimum_darkness = 0.3, - color = {r = 1}, - shift = {0, -0.78125}, - size = 1, - intensity = 0.3 - }, - resistances = { - {type = "physical", decrease = 5, percent = 40}, - {type = "explosion", decrease = 2, percent = 40}, - {type = "fire", percent = 20}, - {type = "acid", percent = 20} - }, - pictures = { - single = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/single.png", - priority = "extra-high", - width = 32, - height = 49, - shift = {0, -0.0} - } - }, - straight_vertical = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/vertical.png", - priority = "extra-high", - width = 32, - height = 55, - shift = {0, -0.0} - } - }, - straight_horizontal = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/horizontal.png", - priority = "extra-high", - width = 32, - height = 48, - shift = {0, -0.0} - } - }, - corner_right_down = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/corner-right.png", - priority = "extra-high", - width = 32, - height = 48, - shift = {0, -0.0} - } - }, - corner_left_down = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/corner-left.png", - priority = "extra-high", - width = 32, - height = 48, - shift = {0.0, -0.0} - } - }, - t_up = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/t-down.png", - priority = "extra-high", - width = 32, - height = 48, - shift = {0, -0.0} - } - }, - ending_right = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/end-right.png", - priority = "extra-high", - width = 32, - height = 48, - shift = {0, -0.0} - } - }, - ending_left = { - { - filename = "__pyindustrygraphics__/graphics/walls/wood-fence/end-left.png", - priority = "extra-high", - width = 32, - height = 48, - shift = {0, -0.0} - } - } - } -} +RECIPE { + type = "recipe", + name = "wood-fence", + categories = {"crafting"}, + enabled = false, + ingredients = { + {type = "item", name = "wood", amount = 2} + }, + results = { + {type = "item", name = "wood-fence", amount = 1} + } +}:add_unlock("py-asphalt"):replace_ingredient("wood", "treated-wood") + +ITEM { + type = "item", + name = "wood-fence", + icon = "__pyindustrygraphics__/graphics/icons/wood-fence.png", + icon_size = 32, + flags = {}, + subgroup = "py-walls", + order = "z", + place_result = "wood-fence", + stack_size = 100 +} + +ENTITY { + type = "wall", + name = "wood-fence", + icon = "__pyindustrygraphics__/graphics/icons/wood-fence.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + collision_box = {{-0.29, -0.29}, {0.29, 0.29}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + minable = {mining_time = 0.1, result = "wood-fence"}, + max_health = 100, + corpse = "wall-remnants", + repair_sound = {filename = "__base__/sound/manual-repair-simple.ogg"}, + mined_sound = {filename = "__base__/sound/deconstruct-bricks.ogg"}, + repair_speed_modifier = 4, + fast_replaceable_group = "wall", + impact_category = "stone", + connected_gate_visualization = {filename = "__core__/graphics/arrows/underground-lines.png", priority = "high", width = 64, height = 64, scale = 0.5}, + wall_diode_green = { + filename = "__base__/graphics/entity/wall/wall-diode-green.png", + width = 21, + height = 22, + shift = {0, -0.78125} + }, + wall_diode_green_light = { + minimum_darkness = 0.3, + color = {g = 1}, + shift = {0, -0.78125}, + size = 1, + intensity = 0.3 + }, + wall_diode_red = { + filename = "__base__/graphics/entity/wall/wall-diode-red.png", + width = 21, + height = 22, + shift = {0, -0.78125} + }, + wall_diode_red_light = { + minimum_darkness = 0.3, + color = {r = 1}, + shift = {0, -0.78125}, + size = 1, + intensity = 0.3 + }, + resistances = { + {type = "physical", decrease = 5, percent = 40}, + {type = "explosion", decrease = 2, percent = 40}, + {type = "fire", percent = 20}, + {type = "acid", percent = 20} + }, + pictures = { + single = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/single.png", + priority = "extra-high", + width = 32, + height = 49, + shift = {0, -0.0} + } + }, + straight_vertical = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/vertical.png", + priority = "extra-high", + width = 32, + height = 55, + shift = {0, -0.0} + } + }, + straight_horizontal = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/horizontal.png", + priority = "extra-high", + width = 32, + height = 48, + shift = {0, -0.0} + } + }, + corner_right_down = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/corner-right.png", + priority = "extra-high", + width = 32, + height = 48, + shift = {0, -0.0} + } + }, + corner_left_down = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/corner-left.png", + priority = "extra-high", + width = 32, + height = 48, + shift = {0.0, -0.0} + } + }, + t_up = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/t-down.png", + priority = "extra-high", + width = 32, + height = 48, + shift = {0, -0.0} + } + }, + ending_right = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/end-right.png", + priority = "extra-high", + width = 32, + height = 48, + shift = {0, -0.0} + } + }, + ending_left = { + { + filename = "__pyindustrygraphics__/graphics/walls/wood-fence/end-left.png", + priority = "extra-high", + width = 32, + height = 48, + shift = {0, -0.0} + } + } + } +} diff --git a/scripts/sinkhole.lua b/scripts/sinkhole.lua deleted file mode 100644 index 969771c..0000000 --- a/scripts/sinkhole.lua +++ /dev/null @@ -1,6 +0,0 @@ -py.on_event(defines.events.on_player_flipped_entity, function(event) - local entity = event.entity - if entity.valid and entity.name == "py-sinkhole" then - entity.mirroring = false - end -end) diff --git a/settings.lua b/settings.lua index 8fd4712..6666de9 100644 --- a/settings.lua +++ b/settings.lua @@ -1,15 +1,23 @@ -data:extend {{ - type = "bool-setting", - name = "py-tank-adjust", - setting_type = "startup", - default_value = false, - order = "e", -}} - -data:extend {{ - type = "bool-setting", - name = "py-braided-pipes", - setting_type = "startup", - default_value = true, - order = "f", -}} +data:extend { + { + type = "bool-setting", + name = "py-tank-adjust", + setting_type = "startup", + default_value = false, + order = "e", + }, + { + type = "bool-setting", + name = "py-braided-pipes", + setting_type = "startup", + default_value = true, + order = "f", + }, + { + type = "bool-setting", + name = "py-show-voiding-in-stats", + setting_type = "startup", + default_value = true, + order = "g" + } +}