mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-04-18 02:04:33 +01:00
This PR is reverting the wallening by reverting everything up to
8868a5d1fe and replaying the PRs skipping
#85491.
The following 239 (39 + Wallening Main PR excluded) PRs need to be
replayed (DO NOT EDIT THIS LIST MANUALLY, IT IS USED BY THE BOT TO TRACK
PROGRESS):
- [x] #85777 - Reverted in 3
- [x] #85767 - Reverted in 2
- [x] #85763 - Reverted in c
- [x] #85762 - Reverted in 2
- [x] #85760 - Reverted in dbc19df13b033ac8bb5a83fa38c5cf140cf31836
- [x] #85733 - Reverted in 22f17d057eac71661b86c3f2186489568c130043
- [x] #85721 - Reverted in 6d90643dbbc90f3d21f2d25dc85dc4d4f706d6a3
- [x] #85719 - Reverted in c52954648309ad4786238f409cd33142d486190f
- [x] #85705 - Reverted in 3b5ddabfd5ab2cfec226a643be6e8a8fd656c831
- [x] #85684 - Reverted in cbc1839625f44ba67bcd5489c3629ef98e31b2d4
- [x] #85662 - Reverted in 69cac24e236604c262093abea7b9566ecbd092c4
- [x] #85663 - Reverted in f394c3b1430d346b0598abf19fe511b30c3f4676
- [x] #85673 - Reverted in 8a9ae0411488c9c779a54c5c41076238c230a304
- [x] #85718 - Reverted in f8f18d8b626e963b06555f76850702740d5de0c3
- [x] #85667 - Reverted in a1365766d178b727b6c6b503ad410e9d88d57ddd
- [x] #85683 - Reverted in 3bdb0207d883de8db6f726d976025517cc6d3cba
- [x] #85676 - Reverted in 0a5d667b2c8a9a2519af2a4fda8cd39f568e5049
- [x] #85661 - Reverted in 49fc6bc1815133644d7173aa7914ede6c900218a
- [x] #85682 - Reverted in b41efe96fd72228b079319ac07c660f4cd974af6
- [x] #85695 - Reverted in 89a173b136cb0297070cef39c5bc9783b6323f02
- [x] #85654 - Reverted in 1e4836b5173a40fbeb8755e0fb76ebc8d39fe1e0
- [x] #85655 - Reverted in b4dde41eebd0422e1ec440b4d8d54229fc9617f4
- [x] #85634 - Reverted in 0c352fc785762da025a68873438593b508f757d9
- [x] #85700 - Reverted in 1327cf7fe48d7f4fd227120508f77c831aefa4ca
- [x] #85633 - Reverted in c71c8c9d43112a1f4c6331bbba546881dcffd59d
- [x] #85649 - Reverted in 73484337077f616878e63208d9bf2309f0d2e579
- [x] #85475 - Reverted in 839f700001a57646109e75332d5311fe27bbc957
- [x] #85467 - Reverted in 6f08421f64d01b13775d146cf7a451f9f38e195a
- [x] #85472 - Reverted in 63c6a9b04e72e8130df5eeb2861c75f80a97e3de
- [x] #85300 - Reverted in 7c776034f34ee6a76810c1a3779f169f2430c418
- [x] #85249 - Reverted in 257d02273751fc1f939f76756f70b614a6e06789
- [x] #85236 - Reverted in f9f4c444c8fc027dea87d4dbe0ebb8dd6bc67154
- [x] #85299 - Reverted in f24ddff51dc3fec7145a2e97f057f1b286921db3
- [x] #85228 - Reverted in cb8c318f7e2183d9f941c582f79e4c8b2503d95c
- [x] #84910 - Reverted in 2a562ca26d9d13f335c276487f66edaa0d21b3bd
- [x] #84889 - Reverted in 679da6885b034bcd8843f7f4c855388bce263733
- [x] #84766 - Reverted in 4035dd7adee74af0fed82c14a8749585b2ab1c96
- [x] #85607 - Reverted in dc9a0462b4c287cee2d541925f8a9988d18d9d85
- [x] #85618 - Reverted in 2a06f57c89939dc31e9273ef250bd050cff17ff1
- [x] #85619 - Reverted in b98661affc90e44c68a58c05e57cdf1dfd094c93
- [x] #85608 - Reverted in 57a935126233f90255aef0a55dab16524be1faac
- [x] #85648 - Reverted in ab82c66a95d4fbff86040b421a86cc82dca73009
- [x] #85692 - Reverted in f04fac92bd3594f12f244bae9ea0c5c300c737fb
- [x] #85544 - Reverted in 7b1198eb5c700e85ec163e60828c01fac55a9909
- [x] #85631 - Reverted in 81c04ceb553f9887d59f8edf8b2526ff3807264b
- [x] #85529 - Reverted in 2a7e2c8e3856d67cdefda0d25803393070a6e996
- [x] #85525 - Reverted in 6ed2d9f28a9333c705eafd21acf54771b8e4db36
- [x] #85514 - Reverted in a4fa2aa79d93b69d15e0fb9cb1fb7a5bc288bb34
- [x] #85520 - Reverted in 6e1bd4b11cd55e36cab332c5a0c90c76a2e43703
- [x] #85521 - Reverted in 79afdac194da5f42b38fb0fdfc394f2b8d485266
- [x] #85519 - Reverted in a967cae1fb3feea23fdf196595e496431740f52d
- [x] #85513 - Reverted in e3934edf8794f93a37dc7f63c60aa64ed7b60736
- [x] #85498 - Reverted in cf1fadbc54a1365362aaeb142cbbd4e2c3be6f15
- [x] #85485 - Reverted in 2a650ef9c0454bd650d6a13d10c0cb71bb134b2b
- [x] #85494 - Reverted in bbb97958010dc0f74cee279fd304a7fcaccb625e
- [x] #85552 - Reverted in f1780715bd054300e50e9102ad150c76690d4ca1
- [x] #85724 - Reverted in 6933699cef8b01f9aef989f36ca079680a2777ff
- [x] #85735 - Reverted in a6564f19226ef3969bec0573b49fa772d6e6df31
- [x] #85729 - Reverted in f728d121a2f27a3cc7973fc2041df9b7193b796d
- [x] #85704 - Reverted in 38f5b034a3370eda4657a2a5a6adcf3df6ec280c
- [x] #85660 - Reverted in 7db39869d37ff5b39574d88ffc872449ab5b457c
- [x] #85752 - Reverted in 1f2988028b7cccad121fc658d6547d89453703b7
- [x] #85592 - Reverted in 263cbcfcb54746a9361369d86b44cc3e2d375199
- [x] #85580 - Reverted in a92d53624198dce844c108b5dbea09cf2a16cd10
- [x] #85573 - Reverted in a7d51042355798038ced44f64e987261b85e93bc
- [x] #85534 - Reverted in 31787e7d1ce4fec2ce20776672099bf35486a296
- [x] #85511 - Reverted in 2567a2eb56cdb7058f89ea298e53197147198d82
- [x] #85508 - Reverted in 69de2ac16c20d968adcd19f0732fd2f84a4ae90e
- [x] #85680 - Reverted in 44437ac406c708b9a3ab3b47f4e3c10e77a0b91b
- [x] #85551 - Reverted in 7f17d428fd2787a6982534bfc9ac9188fd4b8675
- [x] #85478 - Reverted in bd9e575dafc62dc7e1259e8c19199ba15d82be4f
- [x] #85476 - Reverted in 4ce8052076de0bb52f1ed87663920e98482ade62
- [x] #85593 - Reverted in 9ff5924d3d56fcba3f180fc4b539568fb2013323
- [x] #85441 - Reverted in db96015adaec01f3fbcb978796a0d7abd5668932
- [x] #85567 - Reverted in 62696ad04fb34fd946708309bd3e439db9b3f488
- [x] #85337 - Reverted in 1267e9f002d03c33187afd2e734e95a78a5ca6ac
- [x] #85348 - Reverted in 4fcc3c659ee2a38d978e137252309644d5adde8f
- [x] #85350 - Reverted in e691c833dd5aca2e7808591516e8443e8ccf1b27
- [x] #85744 - Reverted in 251578d2868a691981b824a268c540b9c15a424e
- [x] #85772 - Reverted in bc6804a04aa9368074bcc853e689c8fe6de2cb3a
- [x] #85797 - Reverted in a05e36ec4a0129ff6901ea07488120b54a8ee124
- [x] #85787 - Reverted in a5393f94b9e71d9ea0625e5fcfb5baaf16af38d3
- [x] #85742 - Reverted in cd99a2aeaa1347b790c9bfdae35e41900e2ada9a
- [x] #85440 - Reverted in 8b5ead7c7f0d8087b41256a296e730443752f17d
- [x] #85739 - Reverted in 3511aae5a4798104220b79ad0e5b2b357dc1e83b
- [x] #85293 - Reverted in fc687ca36ef476ab9080f0c62b427ab0af533d68
- [x] #85716 - Reverted in 130b32a222a7585cfdde71aa561fb8b2c7d8083b
- ~~[ ] #85848 - Reverted in f6c46ca2f5cb2d039e4b26731570ca801741cc5d~~
(SKIPPED)
- [x] #85795 - Reverted in 4684c3325a9135b6bf10eb43026f373993bf605d
- [x] #85859 - Reverted in 0e0838fe11b7d9af4f62af4f7388ed8fb57bf49c
- [x] #84873 - Reverted in 34407b79a45718a305f3bfe3fac7f129b4f1c51f
- [x] #85864 - Reverted in 4b25a209c5019bb65922cd793aff339f20c3d026
- ~~[ ] #85845 - Reverted in a326246e81b7b9242bbf45e7ab3b31caf9ce8147~~
(SKIPPED)
- [x] #85844 - Reverted in bdf1e6c1e3469884550d3211e51ec9303a022482
- ~~[ ] #85843 - Reverted in 41a8acb196af0988372b06ade7131d07d03daab3~~
(NOT BEING INCLUDED)
- ~~[ ] #85840 - Reverted in 4807bacea8418000f84d62ca0fb122846cab4929~~
(NOT BEING INCLUDED)
- ~~[ ] #85837 - Reverted in bc9edfa8666de14ca4e57e466146d753182a3a71~~
(NOT BEING INCLUDED)
- [x] #85865 - Reverted in 14c958b465af40f0ff28b100047c4c572919ae19
- ~~[ ] #85818 - Reverted in a77256f74e2d330f5f76141eb9c994a8e5e45810~~
(NOT BEING INCLUDED)
- [x] #85822 - Reverted in caba685be95fd336f0b09e88bccfb8856d5ad9b4
- [x] #85794 - Reverted in 0d4de984eb8513d065e8ac724e8cde11f01d4ef7
- [x] #85756 - Reverted in 9c5a7e1a5f895851493e149ccb5cd50e35cd6101
- [x] #85852 - Reverted in 74303e5bbae8426a073d068ef4342d8acc420a09
- ~~[ ] #85841 - Reverted in e5831ce3cc87765cb13e6d342417bc1730780392~~
(NOT BEING INCLUDED)
- ~~[ ] #85834 - Reverted in 1be665204da791ec7520d0799c015157fc625953~~
(NOT BEING INCLUDED)
- [x] #85792 - Reverted in 33b4e48175040f9f76ef83d3154f10c69589b6ad
- [x] #85646 - Reverted in fd23a0d6c4c96470b688dc0a35370c61c7e32f61
- ~~[ ] #85799 - Reverted in 4a7a6d812f2f301c1e749c92f324223f9bde8a39~~
(NOT BEING INCLUDED)
- [x] #85819 - Reverted in 8bf001b7889d3a4282947cd332833c473b98eac1
- [x] #85479 - Reverted in 6aeb5ef4582c03febe0c914185d29f75df4d5d94
- ~~[ ] #85824 - Reverted in 9ca3edfaa17d97306ac73207ef32fd1272061f6b~~
(SKIPPED)
- [x] #85406 - Reverted in 702280ff48c8aef44f4da9a85eb33a7bc5faa013
- [x] #85778 - Reverted in ce0ec5c685aadb02ae049d6714f1d2fd6dae1f26
- ~~[ ] #85851 - Reverted in 610c68b275cf3c54181d36ce48bd97b0cce0665c~~
(NOT BEING INCLUDED)
- [x] #85754 - Reverted in 5cbdda00c5335db79ea50aedba097de1d06bf91b
- [x] #85266 - Reverted in abdfec798e5223dfa9d67e1967d7618454dbec28
- ~~[ ] #85823 - Reverted in 86b766abd3d77af8ad835a3464fc5ff95cc11079~~
(NOT BEING INCLUDED)
- ~~[ ] #85842 - Reverted in 7ddd47e26ef1bc336e92a6675a33ec3191039c16~~
(NOT BEING INCLUDED)
- [x] #85857 - Reverted in e32312ee20e9fdccb6dd7c4dc2d185540bd2276b
- [x] #85856 - Reverted in 7d5d74c2b55a08ef5553568e996053157359dbe2
- [x] #85276 - Reverted in 1d6fa881e4aef1e6b368d5b6809bccb021fbbd2a
- [x] #85886 - Reverted in f27d6cabdf8f06f29926616345fa82c4e1e48708
- ~~[ ] #85771 - Reverted in 019d898b601c9ef4d45b7ee0f2144518ee127ca9~~
(SKIPPED)
- [x] #85464 - Reverted in adc00417795deb85f8aa6170b0f0a07c40c8798c
- ~~[ ] #85870 - Reverted in d69b998420bfb39693bb59b9b9a20611880fdafa~~
(NOT BEING INCLUDED)
- ~~[ ] #85869 - Reverted in 0063c69f111bb67144f9b379476250ce86c99eee~~
(NOT BEING INCLUDED)
- [x] #85530 - Reverted in b40c93399411d277b3899e149196f3eb974f841f
- ~~[ ] #85871 - Reverted in 63908bbd0a71d0a2bd0a4691816c17cc9eb5310c~~
(NOT BEING INCLUDED)
- ~~[ ] #85832 - Reverted in b29dab083f091198d65a9b0754536f13a935dc2c~~
(SKIPPED)
- ~~[ ] #85825 - Reverted in d072b294ca3bc526df5128df45653db97ba38fe1~~
(NOT BEING INCLUDED)
- [x] #85632 - Reverted in 290092c7d826aa5b100a38cd4bacc5330b39a934
- [x] #85902 - Reverted in 76118d620e71f1819a9385863b689d9a8d4ea810
- [x] #85906 - Reverted in 82623c2cc0fd9aee3e79c95fe5558146c59bc941
- [x] #85907 - Reverted in 68b7305f21240ca28c33afc904ee532966b7c4bd
- [x] #85449 - Reverted in ab86a79339ef7b01ceb08dc7279c698927ebcbfa
- ~~[ ] #85875 - Reverted in 0a1fcda90e638e66d574c247e93f0669d0c27b0e~~
(NOT BEING INCLUDED)
- ~~[ ] #85861 - Reverted in 6dad5111aa144860371c93a2d78094fe3d39a7e1~~
(NOT BEING INCLUDED)
- [x] #85264 - Reverted in dc1d2dcc995f33fc5773e037f5171e9516897281
- [x] #85726 - Reverted in dbd9ec81586c87c1ab2afc43d43c4f020907dc1b
- [x] #85730 - Reverted in 7de2c2a1d012ccb03f82c6beabd71a66aa0f910a
- [x] #85880 - Reverted in 02169d2f28611765997fa332dda69c8031436fd1
- [x] #85176 - Reverted in e3c85aae1cf665c9892bf7280b7b48ea42323198
- ~~[ ] #85887 - Reverted in 56b35f294b303fd30fbd7685011d37b456d584c7~~
(NOT BEING INCLUDED)
- [x] #85883 - Reverted in 53be06a505ebd8581114bba8590e378d387b6c1a
- ~~[ ] #85882 - Reverted in a8877ff0083ca5753e3d3b1b9c9edc3613fa6570~~
(NOT BEING INCLUDED)
- [x] #85895 - Reverted in 741235d41b3a19a40434653f1c14fc0999fac9c3
- ~~[ ] #85746 - Reverted in b7aebb6e5788f6c484173f0a5e29f042ea0c8560~~
(NOT BEING INCLUDED)
- ~~[ ] #85889 - Reverted in d677231d8c55efcd2cf427d510d961cd00f186c7~~
(NOT BEING INCLUDED)
- ~~[ ] #85888 - Reverted in 693f79abae54980ee098d602ed79926d51d5094b~~
(NOT BEING INCLUDED)
- [x] #85898 - Reverted in 4f41fda23e6b9711aef5d00836591c1ac230612e
- ~~[ ] #85821 - Reverted in 738c9a75f65c4a376da36ad208e1fd8fdeac1ff0~~
(NOT BEING INCLUDED)
- [x] #85694 - Reverted in f7ea4d19cdaa2067c87c43362b514c684b56b1f3
- [x] #85308 - Reverted in 4a89b62774da5e9ec9ea241c60ec2a99f51f9bed
- [x] #85904 - Reverted in 999dbe1773cc7488c629bb8d0d21be5454dbef60
- ~~[ ] #85901 - Reverted in bbf832da9e0c61ad25221530df3b1e93cace25dd~~
(NOT BEING INCLUDED)
- ~~[ ] #85896 - Reverted in 542fe408728faaef8a16869e13c4661018a8a07c~~
(NOT BEING INCLUDED)
- [x] #85927 - Reverted in 7dc87df28e79ef3e9f3fad83cc0907d2dc867c47
- [x] #85908 - Reverted in bcca80f073a486ca7908e9636d0e8b275c2085bf
- [x] #85929 - Reverted in 094bf3610a73961f6433a52ada1a52f25d853738
- [x] #85877 - Reverted in 5874cafd0dab8d3bd61cf1f662793c2708f42dcc
- [x] #85903 - Reverted in b3ba8fffc5548e0f2ae6bada3baf10bad3c75e54
- ~~[ ] #85913 - Reverted in 67f7ec48d20f9a64ce4664fa2c452a25b60db59e~~
(SKIPPED)
- [x] #85914 - Reverted in 7efcd3a5f7fef33c2a1625386bfead80a6ed5309
- [x] #85917 - Reverted in fc50a5ff998d0e7269131a029e533e90e9dc3c54
- ~~[ ] #85949 - Reverted in 10a8e0f5c69e3ca1eb6e26f00945bfe226598bc2~~
(NOT BEING INCLUDED)
- ~~[ ] #85338 - Reverted in 847549ab938f77464829b1392a1b6f2b2f4b9e8f~~
(SKIPPED)
- ~~[ ] #85922 - Reverted in 3d9388249b8c322aac5dd4980d4ab4673ca01006~~
(SKIPPED)
- [x] #85923 - Reverted in 2c6ffa4decf40eb52a92353aeb98aee8cbc7b4a2
- ~~[ ] #85920 - Reverted in 1de5b03981d9fcf9c2e6823bffa515fb939aa541~~
(NOT BEING INCLUDED)
- [x] #85919 - Reverted in 1773e9baccdc941285f56ccb416f5c7125b031ef
- [x] #85271 - Reverted in aecf8002cf2807a76b6b295867e50392b4bc4534
- [x] #85918 - Reverted in 023ec3a4d1b1b2fc8f596fea65a77ddc9a06689f
- [x] #85924 - Reverted in e4886079ad90f33628ac59e0793dfbbc8b8b9420
- [x] #85928 - Reverted in 7470b7d5ac40be21c345e8825f4c4efc4738e29f
- [x] #85926 - Reverted in 7761c9e3a1f442f37d4db4b27e5d78fae95edf00
- [x] #85900 - Reverted in 633736cb0655dc464e9794666c63ae6ec7689826
- [x] #85909 - Reverted in a47c7ec8a77bd02f8b7bb1ce3c621efbe57077c3
- ~~[ ] #85931 - Reverted in 9bc7a412982da6fbdb9cd24570d98877b76a45c3~~
(NOT BEING INCLUDED)
- ~~[ ] #85894 - Reverted in c15e1711656929aeb59f482145ecf029b40d58b8~~
(SKIPPED)
- ~~[ ] #85759 - Reverted in f45d70be0ffb9bf007bfa18a1bd1b5ce23d6dcfc~~
(SKIPPED)
- ~~[ ] #85892 - Reverted in fc08dc1a7160f584c94e368962eb56c18dccc86a~~
(SKIPPED)
- ~~[ ] #85915 - Reverted in 428f475c26f383998a689560a16de86da3f17557~~
(NOT BEING INCLUDED)
- [x] #85222 - Reverted in 66e7ac2f00735c90acdb69a50c9e485a0f4e1552
- [x] #85150 - Reverted in 3079387f926e41febb576105ec0b3acec2f7beba
- [x] #85935 - Reverted in ce6114f644593ead295763362a61d19077f22acf
- ~~[ ] #85936 - Reverted in f601fa796bce7e70645a84fff91391cbb6ed8e37~~
(NOT BEING INCLUDED)
- [x] #85937 - Reverted in 64242f589df3d9118fd5c09d19574758260c76a1
- ~~[ ] #85940 - Reverted in a979c6c24705a8729efab5eca40840f1c8070f1d~~
(NOT BEING INCLUDED)
- ~~[ ] #85942 - Reverted in 9562c14083212fc962b8687663ba5fac2ebfdd1a~~
(NOT BEING INCLUDED)
- [x] #85944 - Reverted in adf8e1927e4b9886c9042d6a0eaaef74e4e0e102
- [x] #85605 - Reverted in 88dbfb4f859f12549e8cf8ed5204ee8d7183d40f
- [x] #85945 - Reverted in dea9e79a9c298eae05b8d173d8df4a37218e2d9c
- [x] #84964 - Reverted in 234481fb1d92a266768fcbca49245151236803ed
- [x] #85952 - Reverted in c62d87ab54d687db64b1551b319195527ca92924
- [x] #85953 - Reverted in bd0e46245ccb597081b8baa4f81ff85949f672be
- ~~[ ] #85943 - Reverted in 697b6841391354885ef2d314d9185b8eee7a5cb0~~
(NOT BEING INCLUDED)
- [x] #85946 - Reverted in f4afd4d330b6fc28397f7707bca8773d44cb15ed
- [x] #85950 - Reverted in 394fffcb836f32f4e1b1fd91a621249e0e5d7d67
- [x] #85955 - Reverted in 2230a5bc141cd11fc79ccf6b4b653257508a7e65
- [x] #85319 - Reverted in fdaddd9cd6ed0bdd1cd78ba3c9729035936abcbd
- ~~[ ] #85934 - Reverted in 41bb6122b6d6e3c38c500d5ddf63808836ab090e~~
(NOT BEING INCLUDED)
- ~~[ ] #85255 - Reverted in 3e213b8554b40e53f6429969d6e9dbaa357fb09e~~
(SKIPPED)
- ~~[ ] #85961 - Reverted in 6f3d000b3601dc7f75f7edd221fab3edc3bbbd8c~~
(NOT BEING INCLUDED)
- [x] #85956 - Reverted in a5bf22a93ca1a149ca839e6c874d088b32c7c25f
- [x] #85958 - Reverted in c964a46741bd26a600bb75bc6463c629c11c914f
- ~~[ ] #85969 - Reverted in b599cd4bd3ae223210eb0d3b47c3bd814e1cb08c~~
(NOT BEING INCLUDED)
- [x] #85252 - Reverted in 5a0e2f31a6e1093ab47970056f5bb3af54172e12
- [x] #85984 - Reverted in b000da82f62bb48b059a881d596f3a2e7d985d21
- [x] #85137 - Reverted in 1f31b558e41fc66d5da9db30a83d89cbb9949eae
- [x] #85881 - Reverted in f3913f94c4557c4fc9d5605cd8e875accabebda6
- [x] #85972 - Reverted in d3afed87a3a8eed7e0016512d2186b6aded0fca9
- [x] #85998 - Reverted in 3d286b763cf2f7fe11b6f0ccb2456130570726c2
- [x] #85358 - Reverted in 75f84bda1b3c80d54ae94a567bf96016aaae45b2
- ~~[ ] #85964 - Reverted in be1aeb010afa20c1b6949218d8911ee9e900b3d7~~
(SKIPPED)
- [x] #85960 - Reverted in 69cbfce1529377ce7cd998ab474add0d61650d7f
- [x] #85992 - Reverted in 89e4a7bb0b793461338ba1b0a3d332bf78ef140c
- [x] #85967 - Reverted in d398e418eb340f309be523514ae0befdf1869560
- [x] #84888 - Reverted in bb98eb09f06a1fdc0bbb733d6a42d711e6d477bc
- ~~[ ] #85983 - Reverted in 81152a9cd347eb7b4073758e2e96490e6e729ca9~~
(NOT BEING INCLUDED)
- [x] #85976 - Reverted in 93c091347ca8f04763b91fd4c39ccdff848a0d50
- ~~[ ] #85962 - Reverted in de32ea25b534c725e3d55418ef0363145f0ed2b0~~
(NOT BEING INCLUDED)
- [x] #85977 - Reverted in 393652a1ef065014748ae6977a9f36b32c99dc7c
- [x] #85959 - Reverted in 52e6e07eb98bcb74a423934b14d5850dbf2c6647
- ~~[ ] #85988 - Reverted in a5853ccde46b5fee2d9eb31755384de15e7a5a87~~
(SKIPPED)
- ~~[ ] #85974 - Reverted in eab20ba04e6b06f862a0fb35cedb6374af7b93c0~~
(SKIPPED)
- [x] #85939 - Reverted in ca85b05692f55f6b3e4bd0b3f30c63f89531c33f
- [x] #85878 - Reverted in 3b3d3dbff9148e46b01f3af28f17f66bef4dfd16
- [x] #85858 - Reverted in 08d6082e62d07117170ff5ffd065daad1278e853
- [x] #85651 - Reverted in b76ab4a2114dd0eb78336878b2825d9919c210cc
- [x] #85505 - Reverted in 0958eaa7b6f4d48400bea4e215e11edaa933ba8a
- ~~[ ] #85352 - Reverted in 620cec18618e514bbe4d3eb0a0d0db1528b9d312~~
(SKIPPED)
- [x] #85279 - Reverted in ba0fd529ef94ba793fe2eee40975533fe8f475e3
- [x] #85954 - Reverted in d7fe0336f2a968b93fd02361814930236e3b8ddf
- ~~[ ] #85996 - Reverted in 5fbd62139e0c1b668aaaf35d249d527cdc276b93~~
(SKIPPED)
- [x] #85994 - Reverted in c99a03c6833ac58e0288111953573f697488234f
- [x] #85470 - Reverted in fbd5ac46d84d27455cbcf5f998741124ed6de625
- ~~[ ] #85981 - Reverted in dc74c75011ddfb1b16d644fd2ca5607599532d6f~~
(NOT BEING INCLUDED)
- [x] #86011 - Reverted in b14b42e70e2bd21f19d443065b2342e4591c5e05
- [x] #85820 - Reverted in 26248546b9f7d0fedec52e7b2f7def40d457e29f
- [x] #86013 - Reverted in e17ac14f53d08be988f0516e7c39d31496a35184
- [x] #85986 - Reverted in 4021ffea0b1bbb1f6c5b26a296abd5a8bda1d5b3
- [x] #86019 - Reverted in c0801b3aa5dbdd33ca7c6c81e80c9fa573ada9e1
- [x] #86010 - Reverted in 10dff005729305b75deaf1c5755a94125fa5141d
- [x] #86029 - Reverted in 664619213db52930fa22007561dad01fe8bb3de4
- [x] #86024 - Reverted in e74ea4368cbd2cd085aa6e8bbe83db07800b0bd4
- [x] #86022 - Reverted in 0b2fc6a1f478c48546b161fd3ddd571f7ed6000f
- [x] #86015 - Reverted in b99d93592dbf8840a035f22f26b64bcf27c817cb
- [x] #85415 - Reverted in d6102c7339838675c03eb771d7a3b5a9bea4035d
- ~~[ ] #85703 - Reverted in 339b7edf3c0318f9f02922018d6918211660234f~~
(SKIPPED)
- [x] #85890 - Reverted in 4e54f376e07071f84ed283e7468e334aaf6e4e02
- [x] #86046 - Reverted in 0bbe2c9a048c229d151682e08aca1fa176c3ad91
- [x] #86008 - Reverted in a0a0635cd6618618c49fda7cf150231d62a14236
- [x] #86042 - Reverted in fa376315a064b945ed9846225c7f48e38e9b55ed
- [x] #85891 - Reverted in 603dcd691e9eaad0a610c60c94fee522391bd2b3
- [x] #86040 - Reverted in e42fc7618194b4b01cb68ca0c61385e465d0cb05
- [x] #86025 - Reverted in 536bb25fe91845fe05bb7d512d8e73cc193b67ff
- [x] #86012 - Reverted in 5cb4ec5bdf87653a5bb651c536f21423db30887e
- [x] #86004 - Reverted in e9536143e78e3b0614d3ce6ee2c9a40005ba9b91
- [x] #85989 - Reverted in 88a92322c2f028d2e3a2be18951d35d1135a6268
- [x] #86044 - Reverted in d0a5fb5956be23144e325d3d51f53cb103dd5bbe
- [x] #86001 - Reverted in 195c3597044315c9b10d002e6196911ac0622c45
- [x] #86030 - Reverted in 5265796286b481d34fc91a1f8c58b6373d23415e
- [x] #86055 - Reverted in e82138798cda028b673fe7ac83890e5a6b9e16d2
- [x] #86057 - Reverted in c921900e6151552aa0768b4c9d7cc58c58dfbcc0
- [x] #86014 - Reverted in c004d4e989a2faa672793f58fd98bd6fded8194e
- [x] #85304 - Reverted in 611510bd7f65ee06738b7344326d72f57a131f8a
- [x] #86061 - Reverted in f14b0a245dcf164bb99f7696e180847bb5be9b11
- [x] #86075 - Reverted in 5339fe6c098d48769eda3f9935aa3488faa73097
- [x] #86089 - Reverted in 10b5398e6b55f4799ca7d6740ac50c031e157c43
- [x] #86081 - Reverted in ba86f43383cd2e8417c0a465c23fe3227fcd5520
- [x] #85609 - Reverted in 9e5208feaca3163b7f4237c316d880161933777f
- [x] #86114 - Reverted in cf410a97b8348381f96cc784a6489d7c1dea49ba
- [x] #86023 - Reverted in a7a2e95c0c1b0598f15019934c80ccc80a9f89af
- [x] #86027 - Reverted in 9cf71611befac64d26d326c060ef082262aeca70
- [x] #86016 - Reverted in b67fa06e1559c8de87899bd06d09891b4c7ae947
- [x] #86095 - Reverted in dc5abd827bb56e1609afe5a9d2bdd957d40cc75c
- [x] #86105 - Reverted in f5b8e7ecbe99cb38e829a98a4f6eb2c200af8b91
- [x] #86070 - Reverted in 6c460bbc22827bdbc566b524b8e6a959cbb61c37
After that some startup commits on this branch need to be reverted then
it can be merged.
---------
Co-authored-by: tgstation-ci <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: MrMelbert <kmelbert4@gmail.com>
521 lines
26 KiB
Plaintext
521 lines
26 KiB
Plaintext
/*!
|
|
* Custom rendering solution to allow for advanced effects
|
|
* We (ab)use plane masters and render source/target to cheaply render 2+ planes as 1
|
|
* if you want to read more read the _render_readme.md
|
|
*/
|
|
|
|
|
|
/**
|
|
* Render relay object assigned to a plane master to be able to relay its render onto other planes that are not its own
|
|
*/
|
|
/atom/movable/render_plane_relay
|
|
screen_loc = "CENTER"
|
|
layer = -1
|
|
plane = 0
|
|
appearance_flags = PASS_MOUSE | NO_CLIENT_COLOR | KEEP_TOGETHER
|
|
/// If we render into a critical plane master, or not
|
|
var/critical_target = FALSE
|
|
|
|
/**
|
|
* ## Rendering plate
|
|
*
|
|
* Acts like a plane master, but for plane masters
|
|
* Renders other planes onto this plane, through the use of render objects
|
|
* Any effects applied onto this plane will act on the unified plane
|
|
* IE a bulge filter will apply as if the world was one object
|
|
* remember that once planes are unified on a render plate you cant change the layering of them!
|
|
*/
|
|
/atom/movable/screen/plane_master/rendering_plate
|
|
name = "Default rendering plate"
|
|
multiz_scaled = FALSE
|
|
|
|
///this plate renders the final screen to show to the player
|
|
/atom/movable/screen/plane_master/rendering_plate/master
|
|
name = "Master rendering plate"
|
|
documentation = "The endpoint of all plane masters, you can think of this as the final \"view\" we draw.\
|
|
<br>If offset is not 0 this will be drawn to the transparent plane of the floor above, but otherwise this is drawn to nothing, or shown to the player."
|
|
plane = RENDER_PLANE_MASTER
|
|
render_relay_planes = list()
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/master/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
if(offset == 0)
|
|
return
|
|
// Non 0 offset render plates will relay up to the transparent plane above them, assuming they're not on the same z level as their target of course
|
|
var/datum/hud/hud = home.our_hud
|
|
// show_to can be called twice successfully with no hide_from call. Ensure no runtimes off the registers from this
|
|
if(hud)
|
|
RegisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change), override = TRUE)
|
|
offset_change(hud?.current_plane_offset || 0)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/master/hide_from(mob/oldmob)
|
|
. = ..()
|
|
if(offset == 0)
|
|
return
|
|
var/datum/hud/hud = home.our_hud
|
|
if(hud)
|
|
UnregisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/master/proc/on_offset_change(datum/source, old_offset, new_offset)
|
|
SIGNAL_HANDLER
|
|
offset_change(new_offset)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/master/proc/offset_change(new_offset)
|
|
if(new_offset == offset) // If we're on our own z layer, relay to nothing, just draw
|
|
remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_TRANSPARENT, offset - 1))
|
|
else // Otherwise, regenerate the relay
|
|
add_relay_to(GET_NEW_PLANE(RENDER_PLANE_TRANSPARENT, offset - 1))
|
|
|
|
///renders general in charachter game objects
|
|
/atom/movable/screen/plane_master/rendering_plate/game_plate
|
|
name = "Game rendering plate"
|
|
documentation = "Holds all objects that are ahhh, in character? is maybe the best way to describe it.\
|
|
<br>We apply a displacement effect from the gravity pulse plane too, so we can warp the game world.\
|
|
<br>If we have fov enabled we'll relay this onto two different rendering plates to apply fov effects to only a portion. If not, we just draw straight to master"
|
|
plane = RENDER_PLANE_GAME
|
|
render_relay_planes = list(RENDER_PLANE_MASTER)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/game_plate/Initialize(mapload, datum/hud/hud_owner)
|
|
. = ..()
|
|
add_filter("displacer", 1, displacement_map_filter(render_source = OFFSET_RENDER_TARGET(GRAVITY_PULSE_RENDER_TARGET, offset), size = 10))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/game_plate/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!. || !mymob)
|
|
return .
|
|
RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
|
|
RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
|
|
if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
|
|
fov_enabled(mymob)
|
|
else
|
|
fov_disabled(mymob)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/game_plate/proc/fov_enabled(mob/source)
|
|
SIGNAL_HANDLER
|
|
add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME_UNMASKED, offset))
|
|
add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME_MASKED, offset))
|
|
remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_MASTER, offset))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/game_plate/proc/fov_disabled(mob/source)
|
|
SIGNAL_HANDLER
|
|
remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME_UNMASKED, offset))
|
|
remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME_MASKED, offset))
|
|
add_relay_to(GET_NEW_PLANE(RENDER_PLANE_MASTER, offset))
|
|
|
|
///renders the parts of the plate unmasked by fov
|
|
/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate
|
|
name = "Unmasked Game rendering plate"
|
|
documentation = "Holds the bits of the game plate that aren't impacted by fov.\
|
|
<br>We use an alpha mask to cut out the bits we plan on dealing with elsewhere"
|
|
plane = RENDER_PLANE_GAME_UNMASKED
|
|
render_relay_planes = list(RENDER_PLANE_MASTER)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
|
|
. = ..()
|
|
add_filter("fov_handled", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!. || !mymob)
|
|
return .
|
|
RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
|
|
RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
|
|
if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
|
|
fov_enabled(mymob)
|
|
else
|
|
fov_disabled(mymob)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/proc/fov_enabled(mob/source)
|
|
SIGNAL_HANDLER
|
|
if(force_hidden == FALSE)
|
|
return
|
|
unhide_plane(source)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/proc/fov_disabled(mob/source)
|
|
SIGNAL_HANDLER
|
|
hide_plane(source)
|
|
|
|
///renders the parts of the plate masked by fov
|
|
/atom/movable/screen/plane_master/rendering_plate/masked_game_plate
|
|
name = "FOV Game rendering plate"
|
|
documentation = "Contains the bits of the game plate that are hidden by some form of fov\
|
|
<br>Applies a color matrix to dim and create contrast, alongside a blur. Goal is only half being able to see stuff"
|
|
plane = RENDER_PLANE_GAME_MASKED
|
|
render_relay_planes = list(RENDER_PLANE_MASTER)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
|
|
. = ..()
|
|
add_filter("fov_blur", 1, gauss_blur_filter(1.8))
|
|
add_filter("fov_handled_space", 2, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset)))
|
|
add_filter("fov_matrix", 3, color_matrix_filter(list(0.5,-0.15,-0.15,0, -0.15,0.5,-0.15,0, -0.15,-0.15,0.5,0, 0,0,0,1, 0,0,0,0)))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!. || !mymob)
|
|
return .
|
|
RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
|
|
RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
|
|
if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
|
|
fov_enabled(mymob)
|
|
else
|
|
fov_disabled(mymob)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/proc/fov_enabled(mob/source)
|
|
SIGNAL_HANDLER
|
|
if(force_hidden == FALSE)
|
|
return
|
|
unhide_plane(source)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/proc/fov_disabled(mob/source)
|
|
SIGNAL_HANDLER
|
|
hide_plane(source)
|
|
|
|
// Blackness renders weird when you view down openspace, because of transforms and borders and such
|
|
// This is a consequence of not using lummy's grouped transparency, but I couldn't get that to work without totally fucking up
|
|
// Sight flags, and shooting vis_contents usage to the moon. So we're doin it different.
|
|
// If image vis contents worked (it should in 515), and we were ok with a maptick cost (wait for threaded maptick) this could be fixed
|
|
/atom/movable/screen/plane_master/rendering_plate/transparent
|
|
name = "Transparent plate"
|
|
documentation = "The master rendering plate from the offset below ours will be mirrored onto this plane. That way we achive a \"stack\" effect.\
|
|
<br>This plane exists to uplayer the master rendering plate to the correct spot in our z layer's rendering order"
|
|
plane = RENDER_PLANE_TRANSPARENT
|
|
appearance_flags = PLANE_MASTER
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/transparent/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
|
|
. = ..()
|
|
// Don't display us if we're below everything else yeah?
|
|
AddComponent(/datum/component/plane_hide_highest_offset)
|
|
color = list(0.9,0,0,0, 0,0.9,0,0, 0,0,0.9,0, 0,0,0,1, 0,0,0,0)
|
|
|
|
///Contains most things in the game world
|
|
/atom/movable/screen/plane_master/rendering_plate/game_world
|
|
name = "Game world plate"
|
|
documentation = "Contains most of the objects in the world. Mobs, machines, etc. Note the drop shadow, it gives a very nice depth effect."
|
|
plane = RENDER_PLANE_GAME_WORLD
|
|
appearance_flags = PLANE_MASTER //should use client color
|
|
blend_mode = BLEND_OVERLAY
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/game_world/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
remove_filter("AO")
|
|
if(istype(mymob) && mymob.canon_client?.prefs?.read_preference(/datum/preference/toggle/ambient_occlusion))
|
|
add_filter("AO", 1, drop_shadow_filter(x = 0, y = -2, size = 4, color = "#04080FAA"))
|
|
|
|
///Contains all lighting objects
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting
|
|
name = "Lighting plate"
|
|
documentation = "Anything on this plane will be <b>multiplied</b> with the plane it's rendered onto (typically the game plane).\
|
|
<br>That's how lighting functions at base. Because it uses BLEND_MULTIPLY and occasionally color matrixes, it needs a backdrop of blackness.\
|
|
<br>See <a href=\"https://secure.byond.com/forum/?post=2141928\">This byond post</a>\
|
|
<br>Lemme see uh, we're masked by the emissive plane so it can actually function (IE: make things glow in the dark).\
|
|
<br>We're also masked by the overlay lighting plane, which contains all the well overlay lights in the game. It draws to us and also the game plane.\
|
|
<br>Masks us out so it has the breathing room to apply its effect.\
|
|
<br>Oh and we quite often have our alpha changed to achive night vision effects, or things of that sort."
|
|
plane = RENDER_PLANE_LIGHTING
|
|
blend_mode_override = BLEND_MULTIPLY
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
critical = PLANE_CRITICAL_DISPLAY
|
|
/// A list of light cutoffs we're actively using, (mass, r, g, b) to avoid filter churn
|
|
var/list/light_cutoffs
|
|
|
|
/*!
|
|
* This system works by exploiting BYONDs color matrix filter to use layers to handle emissive blockers.
|
|
*
|
|
* Emissive overlays are pasted with an atom color that converts them to be entirely some specific color.
|
|
* Emissive blockers are pasted with an atom color that converts them to be entirely some different color.
|
|
* Emissive overlays and emissive blockers are put onto the same plane.
|
|
* The layers for the emissive overlays and emissive blockers cause them to mask eachother similar to normal BYOND objects.
|
|
* A color matrix filter is applied to the emissive plane to mask out anything that isn't whatever the emissive color is.
|
|
* This is then used to alpha mask the lighting plane.
|
|
*/
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting/Initialize(mapload, datum/hud/hud_owner)
|
|
. = ..()
|
|
add_filter("emissives", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(EMISSIVE_RENDER_TARGET, offset), flags = MASK_INVERSE))
|
|
add_filter("object_lighting", 2, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(O_LIGHTING_VISUAL_RENDER_TARGET, offset), flags = MASK_INVERSE))
|
|
set_light_cutoff(10)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
// This applies a backdrop to our lighting plane
|
|
// Why do plane masters need a backdrop sometimes? Read https://secure.byond.com/forum/?post=2141928
|
|
// Basically, we need something to brighten
|
|
// unlit is perhaps less needed rn, it exists to provide a fullbright for things that can't see the lighting plane
|
|
// but we don't actually use invisibility to hide the lighting plane anymore, so it's pointless
|
|
var/atom/movable/screen/backdrop = mymob.overlay_fullscreen("lighting_backdrop_lit_[home.key]#[offset]", /atom/movable/screen/fullscreen/lighting_backdrop/lit)
|
|
// Need to make sure they're on our plane, ALL the time. We always need a backdrop
|
|
SET_PLANE_EXPLICIT(backdrop, PLANE_TO_TRUE(backdrop.plane), src)
|
|
backdrop = mymob.overlay_fullscreen("lighting_backdrop_unlit_[home.key]#[offset]", /atom/movable/screen/fullscreen/lighting_backdrop/unlit)
|
|
SET_PLANE_EXPLICIT(backdrop, PLANE_TO_TRUE(backdrop.plane), src)
|
|
|
|
// Sorry, this is a bit annoying
|
|
// Basically, we only want the lighting plane we can actually see to attempt to render
|
|
// If we don't our lower plane gets totally overriden by the black void of the upper plane
|
|
var/datum/hud/hud = home.our_hud
|
|
// show_to can be called twice successfully with no hide_from call. Ensure no runtimes off the registers from this
|
|
if(hud)
|
|
RegisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change), override = TRUE)
|
|
offset_change(hud?.current_plane_offset || 0)
|
|
set_light_cutoff(mymob.lighting_cutoff, mymob.lighting_color_cutoffs)
|
|
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting/hide_from(mob/oldmob)
|
|
. = ..()
|
|
oldmob.clear_fullscreen("lighting_backdrop_lit_[home.key]#[offset]")
|
|
oldmob.clear_fullscreen("lighting_backdrop_unlit_[home.key]#[offset]")
|
|
var/datum/hud/hud = home.our_hud
|
|
if(hud)
|
|
UnregisterSignal(hud, COMSIG_HUD_OFFSET_CHANGED, PROC_REF(on_offset_change))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting/proc/on_offset_change(datum/source, old_offset, new_offset)
|
|
SIGNAL_HANDLER
|
|
offset_change(new_offset)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting/proc/offset_change(mob_offset)
|
|
// Offsets stack down remember. This implies that we're above the mob's view plane, and shouldn't render
|
|
if(offset < mob_offset)
|
|
disable_alpha()
|
|
else
|
|
enable_alpha()
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/lighting/proc/set_light_cutoff(light_cutoff, list/color_cutoffs)
|
|
var/list/new_cutoffs = list(light_cutoff)
|
|
new_cutoffs += color_cutoffs
|
|
if(new_cutoffs ~= light_cutoffs)
|
|
return
|
|
|
|
remove_filter(list("light_cutdown", "light_cutup"))
|
|
|
|
var/ratio = light_cutoff/100
|
|
if(!color_cutoffs)
|
|
color_cutoffs = list(0, 0, 0)
|
|
|
|
var/red = color_cutoffs[1] / 100
|
|
var/green = color_cutoffs[2] / 100
|
|
var/blue = color_cutoffs[3] / 100
|
|
add_filter("light_cutdown", 3, color_matrix_filter(list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, -(ratio + red),-(ratio+green),-(ratio+blue),0)))
|
|
add_filter("light_cutup", 4, color_matrix_filter(list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, ratio+red,ratio+green,ratio+blue,0)))
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/emissive_slate
|
|
name = "Emissive Plate"
|
|
documentation = "This system works by exploiting BYONDs color matrix filter to use layers to handle emissive blockers.\
|
|
<br>Emissive overlays are pasted with an atom color that converts them to be entirely some specific color.\
|
|
<br>Emissive blockers are pasted with an atom color that converts them to be entirely some different color.\
|
|
<br>Emissive overlays and emissive blockers are put onto the same plane (This one).\
|
|
<br>The layers for the emissive overlays and emissive blockers cause them to mask eachother similar to normal BYOND objects.\
|
|
<br>A color matrix filter is applied to the emissive plane to mask out anything that isn't whatever the emissive color is.\
|
|
<br>This is then used to alpha mask the lighting plane."
|
|
plane = EMISSIVE_RENDER_PLATE
|
|
appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
render_target = EMISSIVE_RENDER_TARGET
|
|
render_relay_planes = list()
|
|
critical = PLANE_CRITICAL_DISPLAY
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/emissive_slate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
|
|
. = ..()
|
|
add_filter("em_block_masking", 2, color_matrix_filter(GLOB.em_mask_matrix))
|
|
if(offset != 0)
|
|
add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset - 1), relay_layer = EMISSIVE_Z_BELOW_LAYER)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/light_mask
|
|
name = "Light Mask"
|
|
documentation = "Any part of this plane that is transparent will be black below it on the game rendering plate.\
|
|
<br>This is done to ensure emissives and overlay lights don't light things up \"through\" the darkness that normally sits at the bottom of the lighting plane.\
|
|
<br>We relay copies of the space, floor and wall planes to it, so we can use them as masks. Then we just boost any existing alpha to 100% and we're done.\
|
|
<br>If we ever switch to a sight setup that shows say, mobs but not floors, we instead mask just overlay lighting and emissives.\
|
|
<br>This avoids dumb seethrough without breaking stuff like thermals."
|
|
plane = LIGHT_MASK_PLANE
|
|
appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR
|
|
// Fullwhite where there's anything, no color otherwise
|
|
color = list(255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, 0,0,0,0)
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
render_target = LIGHT_MASK_RENDER_TARGET
|
|
// We blend against the game plane, so she's gotta multiply!
|
|
blend_mode = BLEND_MULTIPLY
|
|
render_relay_planes = list(RENDER_PLANE_GAME)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/light_mask/show_to(mob/mymob)
|
|
. = ..()
|
|
if(!.)
|
|
return
|
|
|
|
RegisterSignal(mymob, COMSIG_MOB_SIGHT_CHANGE, PROC_REF(handle_sight))
|
|
handle_sight(mymob, mymob.sight, NONE)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/light_mask/hide_from(mob/oldmob)
|
|
. = ..()
|
|
var/atom/movable/screen/plane_master/overlay_lights = home.get_plane(GET_NEW_PLANE(O_LIGHTING_VISUAL_PLANE, offset))
|
|
overlay_lights.remove_filter("lighting_mask")
|
|
var/atom/movable/screen/plane_master/emissive = home.get_plane(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset))
|
|
emissive.remove_filter("lighting_mask")
|
|
remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME, offset))
|
|
UnregisterSignal(oldmob, COMSIG_MOB_SIGHT_CHANGE)
|
|
|
|
/atom/movable/screen/plane_master/rendering_plate/light_mask/proc/handle_sight(datum/source, new_sight, old_sight)
|
|
// If we can see something that shows "through" blackness, and we can't see turfs, disable our draw to the game plane
|
|
// And instead mask JUST the overlay lighting plane, since that will look fuckin wrong
|
|
var/atom/movable/screen/plane_master/overlay_lights = home.get_plane(GET_NEW_PLANE(O_LIGHTING_VISUAL_PLANE, offset))
|
|
var/atom/movable/screen/plane_master/emissive = home.get_plane(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset))
|
|
if(new_sight & SEE_AVOID_TURF_BLACKNESS && !(new_sight & SEE_TURFS))
|
|
remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME, offset))
|
|
overlay_lights.add_filter("lighting_mask", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(LIGHT_MASK_RENDER_TARGET, offset)))
|
|
emissive.add_filter("lighting_mask", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(LIGHT_MASK_RENDER_TARGET, offset)))
|
|
// If we CAN'T see through the black, then draw er down brother!
|
|
else
|
|
overlay_lights.remove_filter("lighting_mask")
|
|
emissive.remove_filter("lighting_mask")
|
|
// We max alpha here, so our darkness is actually.. dark
|
|
// Can't do it before cause it fucks with the filter
|
|
add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME, offset), relay_color = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,1))
|
|
|
|
///render plate for OOC stuff like ghosts, hud-screen effects, etc
|
|
/atom/movable/screen/plane_master/rendering_plate/non_game
|
|
name = "Non-Game rendering plate"
|
|
documentation = "Renders anything that's out of character. Mostly useful as a converse to the game rendering plate."
|
|
plane = RENDER_PLANE_NON_GAME
|
|
render_relay_planes = list(RENDER_PLANE_MASTER)
|
|
|
|
/**
|
|
* Plane master proc called in Initialize() that creates relay objects, and sets them up as needed
|
|
* Sets:
|
|
* * layer from plane to avoid z-fighting
|
|
* * planes to relay the render to
|
|
* * render_source so that the plane will render on these objects
|
|
* * mouse opacity to ensure proper mouse hit tracking
|
|
* * name for debugging purposes
|
|
* Other vars such as alpha will automatically be applied with the render source
|
|
*/
|
|
/atom/movable/screen/plane_master/proc/generate_render_relays()
|
|
#if MIN_COMPILER_VERSION > 516
|
|
#warn Fully change default relay_loc to "1,1"
|
|
#endif
|
|
var/relay_loc = home?.relay_loc || "CENTER"
|
|
// If we're using a submap (say for a popup window) make sure we draw onto it
|
|
if(home?.map)
|
|
relay_loc = "[home.map]:[relay_loc]"
|
|
|
|
var/list/generated_planes = list()
|
|
for(var/atom/movable/render_plane_relay/relay as anything in relays)
|
|
generated_planes += relay.plane
|
|
|
|
for(var/relay_plane in (render_relay_planes - generated_planes))
|
|
generate_relay_to(relay_plane, relay_loc)
|
|
|
|
if(blend_mode != BLEND_MULTIPLY)
|
|
blend_mode = BLEND_DEFAULT
|
|
relays_generated = TRUE
|
|
|
|
/// Creates a connection between this plane master and the passed in plane
|
|
/// Helper for out of system code, shouldn't be used in this file
|
|
/// Build system to differenchiate between generated and non generated render relays
|
|
/atom/movable/screen/plane_master/proc/add_relay_to(target_plane, blend_override, relay_layer, relay_color)
|
|
if(get_relay_to(target_plane))
|
|
return
|
|
render_relay_planes += target_plane
|
|
var/client/display_lad = home?.our_hud?.mymob?.canon_client
|
|
var/atom/movable/render_plane_relay/relay = generate_relay_to(target_plane, show_to = display_lad, blend_override = blend_override, relay_layer = relay_layer)
|
|
relay.color = relay_color
|
|
|
|
/proc/get_plane_master_render_base(name)
|
|
return "*[name]: AUTOGENERATED RENDER TGT"
|
|
|
|
/atom/movable/screen/plane_master/proc/generate_relay_to(target_plane, relay_loc, client/show_to, blend_override, relay_layer)
|
|
if(!length(relays) && !initial(render_target))
|
|
render_target = OFFSET_RENDER_TARGET(get_plane_master_render_base(name), offset)
|
|
if(!relay_loc)
|
|
relay_loc = (show_to?.byond_version > 515) ? "1,1" : "CENTER"
|
|
// If we're using a submap (say for a popup window) make sure we draw onto it
|
|
if(home?.map)
|
|
relay_loc = "[home.map]:[relay_loc]"
|
|
var/blend_to_use = blend_override
|
|
if(isnull(blend_to_use))
|
|
blend_to_use = blend_mode_override || initial(blend_mode)
|
|
|
|
var/atom/movable/render_plane_relay/relay = new()
|
|
relay.render_source = render_target
|
|
relay.plane = target_plane
|
|
relay.screen_loc = relay_loc
|
|
// There are two rules here
|
|
// 1: layer needs to be positive (negative layers are treated as float layers)
|
|
// 2: lower planes (including offset ones) need to be layered below higher ones (because otherwise they'll render fucky)
|
|
// By multiplying LOWEST_EVER_PLANE by 30, we give 30 offsets worth of room to planes before they start going negative
|
|
// Bet
|
|
// We allow for manuel override if requested. careful with this
|
|
relay.layer = relay_layer || (plane + abs(LOWEST_EVER_PLANE * 30)) //layer must be positive but can be a decimal
|
|
relay.blend_mode = blend_to_use
|
|
relay.mouse_opacity = mouse_opacity
|
|
relay.name = render_target
|
|
relay.critical_target = PLANE_IS_CRITICAL(target_plane)
|
|
relays += relay
|
|
// Relays are sometimes generated early, before huds have a mob to display stuff to
|
|
// That's what this is for
|
|
if(show_to)
|
|
show_to.screen += relay
|
|
if(offsetting_flags & OFFSET_RELAYS_MATCH_HIGHEST && home.our_hud)
|
|
offset_relay(relay, home.our_hud.current_plane_offset)
|
|
return relay
|
|
|
|
/// Breaks a connection between this plane master, and the passed in place
|
|
/atom/movable/screen/plane_master/proc/remove_relay_from(target_plane)
|
|
render_relay_planes -= target_plane
|
|
var/atom/movable/render_plane_relay/existing_relay = get_relay_to(target_plane)
|
|
if(!existing_relay)
|
|
return
|
|
relays -= existing_relay
|
|
if(!length(relays) && !initial(render_target))
|
|
render_target = null
|
|
var/client/lad = home?.our_hud?.mymob?.canon_client
|
|
if(lad)
|
|
lad.screen -= existing_relay
|
|
|
|
/// Gets the relay atom we're using to connect to the target plane, if one exists
|
|
/atom/movable/screen/plane_master/proc/get_relay_to(target_plane)
|
|
for(var/atom/movable/render_plane_relay/relay in relays)
|
|
if(relay.plane == target_plane)
|
|
return relay
|
|
|
|
return null
|
|
|
|
/**
|
|
* Offsets our relays in place using the given parameter by adjusting their plane and
|
|
* layer values, avoiding changing the layer for relays with custom-set layers.
|
|
*
|
|
* Used in [proc/build_planes_offset] to make the relays for non-offsetting planes
|
|
* match the highest rendering plane that matches the target, to avoid them rendering
|
|
* on the highest level above things that should be visible.
|
|
*
|
|
* Parameters:
|
|
* - new_offset: the offset we will adjust our relays to
|
|
*/
|
|
/atom/movable/screen/plane_master/proc/offset_relays_in_place(new_offset)
|
|
for(var/atom/movable/render_plane_relay/rpr in relays)
|
|
offset_relay(rpr, new_offset)
|
|
|
|
/**
|
|
* Offsets a given render relay using the given parameter by adjusting its plane and
|
|
* layer values, avoiding changing the layer if it has a custom-set layer.
|
|
*
|
|
* Parameters:
|
|
* - rpr: the render plane relay we will offset
|
|
* - new_offset: the offset we will adjust it by
|
|
*/
|
|
/atom/movable/screen/plane_master/proc/offset_relay(atom/movable/render_plane_relay/rpr, new_offset)
|
|
var/base_relay_plane = PLANE_TO_TRUE(rpr.plane)
|
|
var/old_offset = PLANE_TO_OFFSET(rpr.plane)
|
|
rpr.plane = GET_NEW_PLANE(base_relay_plane, new_offset)
|
|
|
|
var/old_offset_plane = real_plane - (PLANE_RANGE * old_offset)
|
|
var/old_layer = (old_offset_plane + abs(LOWEST_EVER_PLANE * 30))
|
|
if(rpr.layer != old_layer) // Avoid overriding custom-set layers
|
|
return
|
|
|
|
var/offset_plane = real_plane - (PLANE_RANGE * new_offset)
|
|
var/new_layer = (offset_plane + abs(LOWEST_EVER_PLANE * 30))
|
|
rpr.layer = new_layer
|