Compare commits

...

913 Commits

Author SHA1 Message Date
Redrover1760 eebcb303f0 and better 2026-05-07 21:12:27 -04:00
Redrover1760 2ccf6d95b6 makes it even better 2026-05-07 21:12:16 -04:00
Redrover1760 1b953cf4cb ide said so 2026-05-07 21:10:20 -04:00
Redrover1760 9ddc145cc1 aaa 2026-05-07 18:21:30 -04:00
Redrover1760 8e59b16718 throw on bad usage 2026-05-07 17:25:18 -04:00
Redrover1760 bbaeab61b5 blip optimizations round 2 2026-05-07 17:18:49 -04:00
Redrover1760 97e11f66d1 next 2026-05-07 16:42:14 -04:00
monolith8319 80ae6a33a5 Automated Changelog (#3960) 2026-05-07 00:48:53 +00:00
significant harassment 4a3178b4e2 Draupnir Nerf (#3960)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-05-06 20:48:17 -04:00
monolith8319 36faba3835 Automated Changelog (#3962) 2026-05-06 22:28:43 +00:00
Redrover1760 2c6fe74bca A Few More Optimizations (#3962) 2026-05-06 18:28:08 -04:00
monolith8319 3ce24a6dea Automated Changelog (#3939) 2026-05-06 22:19:29 +00:00
kasature90 ff40a7c9ce IT DIDNT NEED TO TAKE THIS LONG (#3939)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-05-06 18:18:54 -04:00
monolith8319 f66007ed82 Automated Changelog (#3945) 2026-05-06 21:57:15 +00:00
Svarshik 116b6b5201 Hotfix - Spasaka Modsuit Helmet Fixed (#3945) 2026-05-06 17:56:48 -04:00
monolith8319 eceaa24095 Automated Changelog (#3959) 2026-05-06 21:34:00 +00:00
Redrover1760 51e43c0218 Starting Gun Update Optimizations (#3959) 2026-05-06 17:33:23 -04:00
monolith8319 d11a891bed Automated Changelog (#3952) 2026-05-06 21:29:12 +00:00
Mrrpip 53222c7db0 Deletes Duplicate Consoles on Tarantula. (#3952) 2026-05-06 17:28:35 -04:00
monolith8319 f875a93d99 Automated Changelog (#3931) 2026-05-06 21:22:00 +00:00
Redrover1760 58e585fafb Emp Emitter Buffs (#3931) 2026-05-06 17:21:28 -04:00
monolith8319 4b371b6f08 Automated Changelog (#3934) 2026-05-06 20:52:47 +00:00
Re-Atomized 61bbc0b04d Miscellaneous Fixes of Things Nobody Else Wanted to Touch Apparently (#3934) 2026-05-06 16:51:59 -04:00
monolith8319 17376acb2b Automated Changelog (#3954) 2026-05-06 20:51:35 +00:00
Mrrpip 2a91d09f34 Renames the NT Secure Vault to Something More Solarian. (#3954) 2026-05-06 16:50:58 -04:00
monolith8319 425732c52b Automated Changelog (#3957) 2026-05-06 17:26:01 +00:00
Ilya246 f2d130f925 Temp Disable Radar Markings (#3957) 2026-05-06 17:25:20 +00:00
monolith8319 5423c7111e Automated Changelog (#3942) 2026-05-05 17:23:31 +00:00
Corrupt dce3a56655 Serkesh Tweaks (#3942)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-05-05 13:22:54 -04:00
monolith8319 b4fe165b53 Automated Changelog (#3949) 2026-05-05 17:18:09 +00:00
Redrover1760 5c883e42d7 Fixes Biomass Being Shit (#3949) 2026-05-05 13:17:33 -04:00
monolith8319 f99ef195df Automated Changelog (#3944) 2026-05-05 16:37:17 +00:00
Mrrpip a5d51193cb Decreases Eject Delay on the ChemVend to NanoMed Plus' Value. (#3944)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-05-05 12:36:39 -04:00
Minerva b8cfff831f Cherrypicks some Nix-Related Commits From Wizard's Den (#3948)
Co-authored-by: Tobias Berger <toby@tobot.dev>
Co-authored-by: EchoOfNothing <52498373+EchoOfNothing@users.noreply.github.com>
Co-authored-by: MidoriKurage <104000416+mdrkrg@users.noreply.github.com>
2026-05-05 12:32:28 -04:00
monolith8319 84b077432d Automated Changelog (#3947) 2026-05-05 13:13:11 +00:00
Corrupt 901f1dad81 Remove Merchant (#3947) 2026-05-05 15:12:29 +02:00
monolith8319 9b0c66171a Automated Changelog (#3941) 2026-05-04 18:11:55 +00:00
Corrupt 8f354a91f8 merge ts NOW 2026-05-04 20:11:12 +02:00
monolith8319 f9dad2c68a Automated Changelog (#3943) 2026-05-04 16:38:31 +00:00
Redrover1760 730f0758b9 Shader Fixes V2 (#3943) 2026-05-04 12:38:01 -04:00
monolith8319 8956b8693a Automated Changelog (#3437) 2026-05-04 06:53:53 +00:00
Corrupt 8ec089e18a New Ship: MAWC Merchant (#3437)
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: kasature90 <kasature.asakim@gmail.com>
2026-05-04 02:53:21 -04:00
monolith8319 1415ce6c0c Automated Changelog (#3796) 2026-05-04 06:52:31 +00:00
Huaqas 94fcc2457a Resomi Visual Update (#3796)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-05-04 02:52:01 -04:00
monolith8319 cee68ab5f9 Automated Changelog (#3769) 2026-05-04 06:50:26 +00:00
significant harassment 4c6401cf0f Shipgun Reworking (#3769)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-05-04 02:49:50 -04:00
monolith8319 b1580d2dc0 Automated Changelog (#3938) 2026-05-04 02:52:32 +00:00
Redrover1760 9cb45515cf Crash Fix (#3938) 2026-05-03 22:52:04 -04:00
monolith8319 6835481c97 Automated Changelog (#3932) 2026-05-03 16:38:57 +00:00
Redrover1760 236fcf75c5 Decreases Cerberus Range (#3932) 2026-05-03 12:38:28 -04:00
monolith8319 04a7bb42b5 Automated Changelog (#3935) 2026-05-03 16:37:37 +00:00
significant harassment fd6c0569d1 Fix Not Being Able to Unassign Normal Deeds (#3935)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-05-03 12:37:06 -04:00
monolith8319 4028405a5a Automated Changelog (#3933) 2026-05-03 09:39:54 +00:00
lopsidedmanboobs 919dc543e0 Rulechanges (#3933) 2026-05-03 09:39:22 +00:00
monolith8319 83b4f9a5d7 Automated Changelog (#3886) 2026-05-03 01:22:03 +00:00
significant harassment cbe7f6c3f5 Faction LPC Rework (#3886)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: kasature90 <kasature.asakim@gmail.com>
2026-05-02 21:21:34 -04:00
monolith8319 9c9ad7248c Automated Changelog (#3926) 2026-05-03 00:06:26 +00:00
kasature90 dfbe98cbbb Nuke Separate Iconsmooth for Walls (#3926)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-05-02 20:05:54 -04:00
monolith8319 1dae5d84f5 Automated Changelog (#3928) 2026-05-02 22:22:00 +00:00
kasature90 07c99c87d7 ACTUALLY FIX GRAIN SHADER (#3928)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-05-02 18:21:30 -04:00
monolith8319 7944589905 Automated Changelog (#3887) 2026-05-02 14:41:59 +00:00
kasature90 690299e366 Buran NFR (#3887)
Co-authored-by: starch <starchpersonal@gmail.com>
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-05-02 10:41:24 -04:00
monolith8319 cbef529e94 Automated Changelog (#3923) 2026-05-02 14:22:18 +00:00
Maples c3f506e6aa Some Slang Additions (#3923)
Co-authored-by: Maples <just like ping me on discord>
2026-05-02 10:21:48 -04:00
monolith8319 dc7e3a8b0f Automated Changelog (#3924) 2026-05-02 07:39:08 +00:00
kasature90 00f103890e Fix an Issue with VHS Filter (#3924)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-05-02 03:38:38 -04:00
monolith8319 2b979960ad Automated Changelog (#3902) 2026-05-02 05:46:33 +00:00
kasature90 c83930bf2f Ultimate Silicon Pain Operation of 2026 (#3902)
Co-authored-by: evergreenBloom <ofthefathoms@gmail.com>
Co-authored-by: starch <starchpersonal@gmail.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-05-01 22:46:04 -07:00
Ed 8287d6a9bc CSP Rising: Revengeance (#3922) 2026-05-02 01:20:11 -04:00
monolith8319 5085871129 Automated Changelog (#3919) 2026-05-02 05:20:06 +00:00
Maples 17aed77cc0 Adds Corner Plating and Lattices to the RCD (#3919)
Co-authored-by: Maples <just like ping me on discord>
2026-05-02 01:19:39 -04:00
monolith8319 090b0d49db Automated Changelog (#3893) 2026-05-02 05:18:44 +00:00
Ark 4099cf5c5f [PORT] Ambient Occlusion + Observation Admin Tool (#3893)
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2026-05-02 01:18:07 -04:00
Ark 662670d3eb [PORT] Minor Refactor AdminNameOverlay (#3895)
Co-authored-by: Schrödinger <132720404+schrodinger71@users.noreply.github.com>
Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com>
2026-05-02 01:17:45 -04:00
Redrover1760 ae3ad17500 Spritecomponent Warn Cleanups (#3911)
Co-authored-by: Tayrtahn <tayrtahn@gmail.com>
2026-04-29 20:30:46 -04:00
monolith8319 780bac284c Automated Changelog (#3867) 2026-04-29 23:04:54 +00:00
kasature90 0ec333ebed Copper & Lithium for Industry/Economy Rework (#3867)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-29 19:04:16 -04:00
monolith8319 33552b44a2 Automated Changelog (#3908) 2026-04-29 21:25:46 +00:00
significant harassment 87ab827f04 Structure IconSmooth Separation (#3908)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-29 17:25:12 -04:00
Redrover1760 a7761b1742 Test Improvements (#3910) 2026-04-29 05:04:19 -04:00
monolith8319 3cdf4cf142 Automated Changelog (#3897) 2026-04-29 00:00:12 +00:00
kasature90 ffa0efdb7c Nuke Mask Flashprot (#3897)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-28 19:59:40 -04:00
monolith8319 2cdb0021ea Automated Changelog (#3872) 2026-04-28 22:55:21 +00:00
monolith8319 cc94e52caa Automated Changelog (#3881) 2026-04-28 22:54:51 +00:00
Corrupt 98e512fbba VG Jumpsuit Price Fix (#3872) 2026-04-28 18:54:38 -04:00
kasature90 d66474366c Heavy-Duty Airlocks (#3881)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-28 18:54:13 -04:00
monolith8319 30a736ec45 Automated Changelog (#3904) 2026-04-28 22:53:55 +00:00
Ilya246 49035ada5c Ship Slowdownening (#3904) 2026-04-28 18:53:11 -04:00
Mrrpip 36a752851c Typos: The Sequel. (#3905) 2026-04-28 18:52:56 -04:00
monolith8319 fcfb8feff6 Automated Changelog (#3907) 2026-04-28 22:12:08 +00:00
significant harassment cee5f2a57e Energy Shield Nerf + Smilodon Buff (#3907)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-28 18:11:33 -04:00
monolith8319 6cfedd70f2 Automated Changelog (#3898) 2026-04-28 22:09:33 +00:00
kasature90 57d41c69b2 Some TGMC Grenade Sprites. (#3898)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-28 18:08:56 -04:00
monolith8319 94dd84d1fd Automated Changelog (#3899) 2026-04-28 22:04:41 +00:00
Re-Atomized e9229f2946 Organ Harvesting (#3899) 2026-04-28 18:04:08 -04:00
Mrrpip d70855f08d A Couple of Typo Fixes (#3892)
Co-authored-by: kasature90 <kasature.asakim@gmail.com>
2026-04-26 17:42:02 -07:00
monolith8319 e7b11673dd Automated Changelog (#3894) 2026-04-27 00:08:21 +00:00
Ark 7d19340a0a Crystallizer GUI Fix (#3894) 2026-04-26 20:07:50 -04:00
monolith8319 217a647528 Automated Changelog (#3891) 2026-04-26 21:52:10 +00:00
kasature90 9b8604c8e9 Fix Parallax Being Default (#3891)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-26 17:51:41 -04:00
monolith8319 50a6912312 Automated Changelog (#3889) 2026-04-26 17:12:44 +00:00
kasature90 daf3801a89 Makes Reactor Explosions Big and Strong (#3889)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-26 13:12:16 -04:00
monolith8319 ebdc1c9f50 Automated Changelog (#3861) 2026-04-26 16:23:29 +00:00
Redrover1760 5c73fa2e64 Decreases ADC Piloting Boost (#3861) 2026-04-26 19:23:01 +03:00
monolith8319 5abadca6eb Automated Changelog (#3888) 2026-04-26 16:20:34 +00:00
tonotom1 7dbd1fc4ee Medchem Tweak (#3888) 2026-04-26 19:20:04 +03:00
Ilya246 69a088ab1c Prevent Hitscans From Spawning Phantom Entities (#3890) 2026-04-26 09:24:53 +00:00
monolith8319 11bd89ab29 Automated Changelog (#3787) 2026-04-26 01:37:34 +00:00
chuga-git 1c4707ef20 Ammo Loader Cartridge Fix (#3787) 2026-04-25 21:37:06 -04:00
monolith8319 e13dd8e284 Automated Changelog (#3738) 2026-04-26 01:35:01 +00:00
GOLDMASK990 c37fdece10 Ussp Remnant Description Update (#3738) 2026-04-25 21:34:30 -04:00
monolith8319 368f9f66eb Automated Changelog (#3882) 2026-04-26 01:33:21 +00:00
Ilya246 bb804fb4eb World Loader Speed Compensation (#3882) 2026-04-25 21:32:53 -04:00
monolith8319 687d0baf38 Automated Changelog (#3878) 2026-04-25 14:42:58 +00:00
kasature90 01c3731dd6 Fix Loadout Window Title (#3878)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-25 10:42:30 -04:00
monolith8319 07b89a7ddd Automated Changelog (#3838) 2026-04-25 09:28:27 +00:00
kasature90 a12713d824 Nuclear Fission Reactor Port (#3838)
Co-authored-by: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com>
Co-authored-by: starch <starchpersonal@gmail.com>
Co-authored-by: mogaiskii <sani.mog@gmail.com>
Co-authored-by: princess-gurchi <kharitonovich.m+pg@gmail.com>
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: significant harassment <moguls-charade4n@icloud.com>
2026-04-25 05:27:57 -04:00
Saint 827ac02e14 Fix EVA Suits (#3880) 2026-04-25 01:40:33 -04:00
monolith8319 643e335430 Automated Changelog (#3879) 2026-04-25 03:03:19 +00:00
lopsidedmanboobs 9fd9c8e0d3 I Hate Dating! (#3879) 2026-04-24 23:02:50 -04:00
monolith8319 751236b093 Automated Changelog (#3862) 2026-04-25 01:06:17 +00:00
Redrover1760 546ded6a0f Autopulser Tweaks (#3862) 2026-04-24 21:05:47 -04:00
monolith8319 93477eb322 Automated Changelog (#3849) 2026-04-25 01:05:36 +00:00
Redrover1760 65d50d7b46 Fixes Tarantula with Correct File (#3849) 2026-04-24 21:05:07 -04:00
significant harassment ceec2eda2f ShuttleVoucher Purchase Cooldown Functionality (#3435)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-04-24 21:03:11 -04:00
Diesel 1058c5e8c1 Hot Fix - More Access Changes (#3875)
Co-authored-by: kasature90 <kasature.asakim@gmail.com>
2026-04-24 21:01:06 -04:00
monolith8319 aea7d67573 Automated Changelog (#3876) 2026-04-24 19:27:30 +00:00
Redrover1760 4f26f02318 Removes Sultan Price (#3876) 2026-04-24 15:27:01 -04:00
monolith8319 905757742d Automated Changelog (#3870) 2026-04-24 18:13:45 +00:00
kasature90 9ea1fe9d58 Fix ASM-220s From Blowing Themselves Up (#3870)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-24 14:13:14 -04:00
monolith8319 788f30a40d Automated Changelog (#3874) 2026-04-24 15:27:39 +00:00
SixplyDev 6f6eeef1d2 Reduce Sultan Shotgun Sell Price (#3874) 2026-04-24 11:27:02 -04:00
monolith8319 fe335ba114 Automated Changelog (#3864) 2026-04-24 13:32:42 +00:00
Redrover1760 b7c39e31ca Flatpack Opening Uses Collision of Flatpacked Entity (#3864) 2026-04-24 16:32:11 +03:00
monolith8319 7dfbc4441e Automated Changelog (#3863) 2026-04-23 13:24:10 +00:00
Redrover1760 6ffca1c96d M92x Active Recharge Rate Buff (#3863) 2026-04-23 09:23:34 -04:00
monolith8319 f7394c02a3 Automated Changelog (#3866) 2026-04-23 09:55:09 +00:00
kasature90 8afd0a1ac0 Fix Shipyard Testfails (#3866)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-23 05:54:38 -04:00
monolith8319 51d1122dc2 Automated Changelog (#3203) 2026-04-23 01:50:14 +00:00
Loldaddy5676 343c6dd98c Ravager Updates/CC Sec and Overseer Modsuit Updates (#3203)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-04-22 21:49:46 -04:00
monolith8319 17795e629d Automated Changelog (#3566) 2026-04-23 01:18:49 +00:00
Loldaddy5676 a906504c18 SEC Vessel Spitfire Has Been Added (#3566) 2026-04-22 21:18:14 -04:00
significant harassment e9bd143612 Industry Stuff Pt. 1 (#3858)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-22 20:25:45 -04:00
monolith8319 3f9487e507 Automated Changelog (#3859) 2026-04-23 00:17:43 +00:00
kasature90 dfb81dd5c4 Bunkbeds (#3859)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-22 20:17:13 -04:00
monolith8319 d1218ad15b Automated Changelog (#3860) 2026-04-23 00:01:46 +00:00
Redrover1760 5d82605e4c Retweaks Shield Balance (#3860) 2026-04-22 20:01:18 -04:00
monolith8319 ff856ddcbc Automated Changelog (#3703) 2026-04-22 23:15:49 +00:00
EckoAurum c14df33b47 Large Machine Frame Systems | Large Thruster Construction/Upgrading (#3703) 2026-04-22 19:15:17 -04:00
monolith8319 aa3aef3786 Automated Changelog (#3852) 2026-04-22 21:56:29 +00:00
kasature90 12ff1257f7 Shiptest Casing Sprites Too I Guess (#3852)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-22 17:56:00 -04:00
monolith8319 878fe89966 Automated Changelog (#3857) 2026-04-22 21:48:23 +00:00
Mrrpip bfcad4b309 Swaps Names for the Cargo Dravon and AK-570 Autoloader Crates (#3857) 2026-04-22 17:47:54 -04:00
monolith8319 89b7db6957 Automated Changelog (#3419) 2026-04-22 21:47:20 +00:00
EldritchPineapple 6c402241db Removed Xenos From Lancelots and Added a More... Exotic Threat. (#3419) 2026-04-22 17:46:51 -04:00
monolith8319 c228375dc1 Automated Changelog (#3856) 2026-04-22 18:20:37 +00:00
Redrover1760 1be5bc68d5 Fixes and Improves Flatpacks (#3856) 2026-04-22 14:19:59 -04:00
monolith8319 1122d4d30f Automated Changelog (#3853) 2026-04-22 15:23:24 +00:00
Redrover1760 bc0cd37fb6 Generation 0 Memory Optimizations (#3853). 2026-04-22 11:22:53 -04:00
monolith8319 182c63c87e Automated Changelog (#3854) 2026-04-22 13:26:16 +00:00
kasature90 a16b01982a T2-T5 Rad Blocking Stats (#3854)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-22 09:25:41 -04:00
monolith8319 260e34054d Automated Changelog (#3596) 2026-04-22 02:22:34 +00:00
Redrover1760 73b055c6cb Shield Fixing and Some Optimizations/Refactoring (#3596) 2026-04-21 22:22:06 -04:00
monolith8319 dea71210b0 Automated Changelog (#3848) 2026-04-21 22:24:46 +00:00
kasature90 17289457c0 Baystation Medkit & Portafib Sprites (#3848)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-21 18:24:15 -04:00
monolith8319 94d3092c33 Automated Changelog (#3851) 2026-04-21 02:21:29 +00:00
Redrover1760 66c9bd6455 Buffs PDV Bank (#3851) 2026-04-20 22:20:59 -04:00
TheRex191 154f242bb8 Meteor Docking Take 2 (#3817)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-04-20 20:45:34 +00:00
monolith8319 1e6bd607fc Automated Changelog (#3823) 2026-04-20 19:15:43 +00:00
significant harassment dd467907ec Let There Be Chaos (PDV Music Addition) (#3823)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-20 15:15:12 -04:00
monolith8319 9a8c753491 Automated Changelog (#3833) 2026-04-20 18:34:54 +00:00
Ilya246 d354f90036 More Ship Ai Improvements (#3833) 2026-04-20 18:34:15 +00:00
monolith8319 a33eb842f7 Automated Changelog (#3824) 2026-04-20 00:56:46 +00:00
Ilya246 d7ea4b55c4 Mech Wideswing (#3824) 2026-04-19 20:56:17 -04:00
monolith8319 a40ece4b7c Automated Changelog (#3828) 2026-04-20 00:51:51 +00:00
Ilya246 0b8062b471 Fix Projectile Penetration (#3828) 2026-04-19 20:51:23 -04:00
monolith8319 dadcdfc692 Automated Changelog (#3816) 2026-04-20 00:49:20 +00:00
Redrover1760 e4177484ca Makes Jumpsuit Signatures Require No Grid to Show (#3816) 2026-04-19 20:48:52 -04:00
monolith8319 5629674bbb Automated Changelog (#3831) 2026-04-20 00:48:25 +00:00
Mrrpip 253eb267d2 Adjusts the USSP and Winter Solstice Stamp. Also Adds a USSP TACCOM Stamp. (#3831)
Co-authored-by: kasature90 <kasature.asakim@gmail.com>
2026-04-19 20:47:56 -04:00
monolith8319 0650ef5f24 Automated Changelog (#3832) 2026-04-20 00:07:29 +00:00
kasature90 cf19d8ed54 General LMG/MMG Buffs/Rebalance (#3832)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-19 20:07:01 -04:00
monolith8319 ff66ed37dd Automated Changelog (#3842) 2026-04-20 00:06:50 +00:00
kasature90 e7f615461d Larpy Asteroid Names (#3842)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-19 20:06:18 -04:00
monolith8319 4ef14f0dce Automated Changelog (#3841) 2026-04-19 23:55:28 +00:00
Redrover1760 3296e8d2cd Readds Handheld Radio to Asakim Loadout (#3841) 2026-04-19 19:54:58 -04:00
monolith8319 8b78b737cd Automated Changelog (#3822) 2026-04-19 23:32:48 +00:00
significant harassment 3f7bfcb78e Armor Plate Rework + Slight Armor Tweaks (#3822)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-19 19:32:21 -04:00
monolith8319 fb1103c457 Automated Changelog (#3840) 2026-04-19 23:08:44 +00:00
Redrover1760 af2d45dd55 Fixes AI Interaction (#3840) 2026-04-19 19:08:15 -04:00
monolith8319 560e64c13c Automated Changelog (#3834) 2026-04-19 21:42:53 +00:00
Redrover1760 5054665057 Emp Emitter and Bullets Nerf (#3834) 2026-04-19 17:42:23 -04:00
kasature90 5fd442171f Greeble Stuff (#3835)
Co-authored-by: starch <starchpersonal@gmail.com>
2026-04-19 17:41:53 -04:00
monolith8319 8894d4e5ff Automated Changelog (#3827) 2026-04-19 02:04:51 +00:00
Mrrpip eef28959e2 Makes Osiris Inhands Visible. (#3827) 2026-04-18 22:04:23 -04:00
monolith8319 4ea83d389a Automated Changelog (#3821) 2026-04-18 15:48:18 +00:00
Diesel 02f74c26e9 Hot Fix - PTech Access Change (#3821) 2026-04-18 18:47:50 +03:00
monolith8319 c0ea5adf5d Automated Changelog (#3815) 2026-04-18 14:20:48 +00:00
significant harassment 6daf9f02e6 Various Ground Balancing Tweaks (#3815)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-18 10:20:18 -04:00
monolith8319 afabe747f2 Automated Changelog (#3818) 2026-04-18 14:18:17 +00:00
burrrkeye 699232f653 Asakim Breathe Air Update (#3818) 2026-04-18 10:17:50 -04:00
monolith8319 262aa8cd4b Automated Changelog (#3814) 2026-04-17 20:43:04 +00:00
significant harassment bcb9440046 TSFMC Guidebook Slop (#3814)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-17 16:42:34 -04:00
monolith8319 93bd8b8356 Automated Changelog (#3798) 2026-04-17 17:01:02 +00:00
Redrover1760 d14dd88149 Asakim Changes (#3798) 2026-04-17 13:00:31 -04:00
monolith8319 f520ddf911 Automated Changelog (#3812) 2026-04-17 16:56:49 +00:00
Corrupt c2ea1eaf94 Wyvern Tweaks! (#3812) 2026-04-17 12:56:15 -04:00
monolith8319 fc105b61fc Automated Changelog (#3811) 2026-04-17 14:52:46 +00:00
Ilya246 271c4e7efc Even More Ship HTN Upgrades (#3811) 2026-04-17 14:52:16 +00:00
monolith8319 a4138f4b11 Automated Changelog (#3809) 2026-04-17 00:42:16 +00:00
lopsidedmanboobs ff74cf3ae1 Brush up Rules (#3809) 2026-04-16 20:41:48 -04:00
monolith8319 663425a050 Automated Changelog (#3808) 2026-04-16 19:44:40 +00:00
NazrinNya b4e4a284bc De-WL Overseer (#3808)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-04-16 22:44:11 +03:00
monolith8319 3a8ac92ef8 Automated Changelog (#3807) 2026-04-16 19:32:57 +00:00
TheRex191 d3d3ab531e Gas Dock Not Docking, Now Docking. (#3807) 2026-04-16 22:32:26 +03:00
monolith8319 71cf5f42c7 Automated Changelog (#3454) 2026-04-16 18:28:15 +00:00
Diesel fce9e95910 Faction ID Console Compatibility and Fixes Company Banks (#3454)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-16 21:27:44 +03:00
monolith8319 ee337596d6 Automated Changelog (#3804) 2026-04-16 16:36:28 +00:00
NazrinNya a2b3ddecdf Components Adjustment, RCD Buff. (#3804)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-04-16 19:35:53 +03:00
monolith8319 0939533dc1 Automated Changelog (#3531) 2026-04-16 16:19:14 +00:00
Mrrpip 42f6f53be9 Sentinel Fuel Locker Hotfix. (#3531) 2026-04-16 19:18:43 +03:00
monolith8319 2651c00cfd Automated Changelog (#3538) 2026-04-16 16:17:32 +00:00
Lily Autumn a462d09fb9 Yip Woof Bark (#3538) 2026-04-16 19:16:57 +03:00
monolith8319 ce617c185e Automated Changelog (#3781) 2026-04-16 16:04:47 +00:00
doublechest 131c5e79a5 Auto Disable Jetpack when Entering Grid with Enabled Magboots (#3781)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-16 19:04:09 +03:00
monolith8319 86c9a843b1 Automated Changelog (#3794) 2026-04-16 15:55:59 +00:00
Ssar’keth of the First Clutch dd910f1550 Add Radar Mode Toggles and UI Injection Wrapper (#3794)
Co-authored-by: Ssar'keth of the First Clutch <ziz11@users.noreply.github.com>
Co-authored-by: Ilya246 <ilyukarno@gmail.com>
2026-04-16 18:55:16 +03:00
monolith8319 cd8d59c095 Automated Changelog (#3803) 2026-04-16 15:24:48 +00:00
Redrover1760 20bc7af2a4 Unbreaks Yowie Randomized Last Names (#3803) 2026-04-16 18:24:17 +03:00
monolith8319 65ea89b673 Automated Changelog (#3789) 2026-04-16 12:46:01 +00:00
Ilya246 44445f3d2a Explosions Tempbuff (#3789)
Co-authored-by: significant harassment <moguls-charade4n@icloud.com>
2026-04-16 12:45:27 +00:00
monolith8319 648cc99aff Automated Changelog (#3800) 2026-04-15 22:26:41 +00:00
Redrover1760 e8c2b72aa0 Dewhitelists Faction AIs (#3800) 2026-04-15 18:26:12 -04:00
monolith8319 7d85dbca00 Automated Changelog (#3799) 2026-04-15 20:57:28 +00:00
Redrover1760 85e0cb1c76 CPRing Now Checks for Unrevivable + CPR Revivals Now Notify Ghost (#3799) 2026-04-15 16:56:57 -04:00
monolith8319 3c32d2f6f5 Automated Changelog (#3792) 2026-04-15 20:16:30 +00:00
Redrover1760 9d8d0b9016 Ensures Mechs Can't Be Entered if Broken (#3792) 2026-04-15 16:15:59 -04:00
monolith8319 02e72a4c1d Automated Changelog (#3795) 2026-04-15 10:37:26 +00:00
PunishedJoe 5fac554802 Fixes Balaclava and Neck Layers (#3795) 2026-04-15 19:36:56 +09:00
Redrover1760 bc62bf3700 Close Prs on Master (#3793) 2026-04-14 19:55:45 -04:00
monolith8319 accb1404b0 Automated Changelog (#3276) 2026-04-14 21:02:17 +00:00
Redrover1760 326440aa22 Tarantula Revamp (#3276)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-04-14 17:01:36 -04:00
monolith8319 b4fe4ab5e7 Automated Changelog (#3785) 2026-04-14 19:17:32 +00:00
Redrover1760 8ff52fcd7b Infinite FMC/DC Contra Lathe Fix (#3785) 2026-04-14 15:16:58 -04:00
monolith8319 e8a620e044 Automated Changelog (#3788) 2026-04-14 16:21:49 +00:00
chuga-git 9ea80d6405 Revert "Fix Projectile Raycast" (#3788) 2026-04-14 12:21:16 -04:00
monolith8319 abec847ca3 Automated Changelog (#3790) 2026-04-14 13:51:22 +00:00
Ilya246 36214087e9 Fix Thermal Signatures (#3790) 2026-04-14 13:50:47 +00:00
monolith8319 2b4f4f2ba0 Automated Changelog (#3736) 2026-04-13 18:31:43 +00:00
Mrrpip 258bc12f16 WOE, YE FIEND. STAMPS UPON YE. (#3736)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-04-13 21:31:11 +03:00
monolith8319 d73cf7aeaf Automated Changelog (#3033) 2026-04-13 18:14:00 +00:00
thoughtlessuser b1e200408d Polaris Re-Evil-Ening (#3033)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-13 21:13:27 +03:00
monolith8319 95227750d9 Automated Changelog (#3710) 2026-04-13 18:03:18 +00:00
chuga-git 34f71b59b9 Buffs "Entropy" Electron Torpedo Speed (#3710)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-04-13 21:02:19 +03:00
monolith8319 547420d4bc Automated Changelog (#3441) 2026-04-13 17:44:48 +00:00
Mrrpip 510434fb65 Unlimited Mil-Fabs and Servers in the USSPvend (#3441) 2026-04-13 20:43:55 +03:00
monolith8319 862ce8352c Automated Changelog (#3484) 2026-04-13 17:43:20 +00:00
significant harassment 552ab5718a Large APC (#3484)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-13 20:42:50 +03:00
monolith8319 2bacec206b Automated Changelog (#3576) 2026-04-13 17:28:12 +00:00
Kiithnaras bd8ae0ec9b Medicine Improvement Attempt (#3576)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-13 20:27:35 +03:00
monolith8319 6ba17c6e1b Automated Changelog (#3702) 2026-04-13 17:10:50 +00:00
Ghost581 50d7de7818 Bolt Down Camelot's Military Assembler + Fax + Silo (#3702) 2026-04-13 20:10:17 +03:00
monolith8319 02348e780e Automated Changelog (#3712) 2026-04-13 15:47:27 +00:00
tonotom1 80cc460d69 Repairable CC Turret (#3712) 2026-04-13 18:46:56 +03:00
monolith8319 e95a87a1d8 Automated Changelog (#3713) 2026-04-13 15:46:07 +00:00
Redrover1760 78ecd13c0a Scythe Nerfs (#3713) 2026-04-13 18:45:38 +03:00
Ghost581 9eb4c8333c Fix some Wording in VG's Description (#3724) 2026-04-13 18:42:24 +03:00
monolith8319 882b1acae7 Automated Changelog (#3732) 2026-04-13 15:40:49 +00:00
Ilya246 df39f7bd6d Turret Shootthrough (#3732) 2026-04-13 18:40:17 +03:00
monolith8319 c68d329dd2 Automated Changelog (#3733) 2026-04-13 15:39:50 +00:00
Svarshik 5a2341407b Modsuits Yml Cleanup and Minor Buff (#3733) 2026-04-13 18:39:20 +03:00
monolith8319 b4b49016d9 Automated Changelog (#3741) 2026-04-13 15:25:57 +00:00
Redrover1760 53a40c6c3c Black Cloth Wraps (#3741) 2026-04-13 18:25:26 +03:00
monolith8319 fbf93d50be Automated Changelog (#3751) 2026-04-13 15:01:14 +00:00
Corrupt 68144857e8 RSC Ship Tweaks (#3751) 2026-04-13 18:00:42 +03:00
monolith8319 820a70c695 Automated Changelog (#3754) 2026-04-13 14:57:51 +00:00
Corrupt bff7436490 RS-2 Malandro (#3754) 2026-04-13 17:57:19 +03:00
monolith8319 2b76b0a55a Automated Changelog (#3761) 2026-04-13 14:40:32 +00:00
ToastEnjoyer fa61e959fb Fix Vox Neck Displacements (#3761) 2026-04-13 17:40:01 +03:00
ondrej008 b427f087b0 Adds Missing Locale Strings (#3775) 2026-04-13 17:19:10 +03:00
monolith8319 7a8b90339f Automated Changelog (#3780) 2026-04-13 14:16:14 +00:00
iramoye cecc52bff9 Adds Maintenance Jack to 'Expanding and Repairing Station' Guidebook (#3780) 2026-04-13 17:15:41 +03:00
monolith8319 378592a0ba Automated Changelog (#3767) 2026-04-13 12:55:55 +00:00
Corrupt 89dff2ec03 Remove Flashpoint (#3767) 2026-04-13 14:55:26 +02:00
monolith8319 4faad89b0c Automated Changelog (#3778) 2026-04-13 09:48:48 +00:00
lopsidedmanboobs 8f8b94862a I HATE ALL MEDICS (#3778) 2026-04-13 11:48:20 +02:00
monolith8319 7c29b33d27 Automated Changelog (#3766) 2026-04-12 16:17:24 +00:00
doublechest 8180e5d436 Increase Cargo Order Capacity From 20 to 60 in the Trade Mall (#3766) 2026-04-12 12:16:54 -04:00
monolith8319 e081dd59c6 Automated Changelog (#3765) 2026-04-12 10:10:37 +00:00
Ilya246 295ef88a95 Fix Poi Ftling (#3765) 2026-04-12 10:10:05 +00:00
monolith8319 39292553b3 Automated Changelog (#3764) 2026-04-12 09:27:34 +00:00
Ilya246 2652423c4d Fix New Ship Speed (#3764) 2026-04-12 09:27:05 +00:00
monolith8319 fb836a0ee7 Automated Changelog (#3756) 2026-04-11 20:32:31 +00:00
Ilya246 7a63aba489 Fix Projectile Raycast (#3756) 2026-04-11 16:32:01 -04:00
monolith8319 7ec10d578c Automated Changelog (#3753) 2026-04-11 15:45:44 +00:00
Ilya246 91f4eb7b51 More Gun Fixes (#3753) 2026-04-11 15:45:12 +00:00
Ssar’keth of the First Clutch e552e2498f Add Compass and Azimuth Ring to Shuttle Radar (#3737)
Co-authored-by: Ssar'keth of the First Clutch <ziz11@users.noreply.github.com>
2026-04-11 12:01:06 +00:00
Ilya246 ef34f255bf Also Fix Borg Mass Scanner (#3750) 2026-04-11 11:43:08 +00:00
monolith8319 0f3390aba8 Automated Changelog (#3749) 2026-04-11 08:48:00 +00:00
Ilya246 25033ae9c1 Shipgun Aiming Hotfix (#3749) 2026-04-11 08:47:32 +00:00
monolith8319 d32fd9dd0a Automated Changelog (#3748) 2026-04-11 06:05:33 +00:00
Ilya246 728c10974e Fix Scanner Rotation Stuff (#3748) 2026-04-11 06:05:04 +00:00
monolith8319 50c5891b4e Automated Changelog (#3746) 2026-04-10 18:58:54 +00:00
Ilya246 51818f6dc3 Companies Fix (#3746) 2026-04-10 18:58:20 +00:00
monolith8319 dcaefa16d7 Automated Changelog (#3745) 2026-04-10 15:17:15 +00:00
Ilya246 15936634b1 Increase Shiphtn Grid Evasion Buffer (#3745) 2026-04-10 15:16:43 +00:00
monolith8319 574bb25522 Automated Changelog (#3705) 2026-04-10 14:50:16 +00:00
Ilya246 1125715a3f No Gunnery Rotation (#3705)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-10 14:49:46 +00:00
monolith8319 9e3a270988 Automated Changelog (#3711) 2026-04-10 12:39:36 +00:00
Antoine bf1a02bfcb Fixed Radio Highlighting (#3711) 2026-04-10 21:39:07 +09:00
monolith8319 57c59e3684 Automated Changelog (#3586) 2026-04-10 12:25:32 +00:00
tonotom1 0e31d3885f Plant Analyzer Friction Deletion (#3586) 2026-04-10 15:25:02 +03:00
monolith8319 27b05a3b75 Automated Changelog (#3743) 2026-04-10 10:19:13 +00:00
Ilya246 f99e36e101 Ship Htn Hotfix (#3743) 2026-04-10 10:18:45 +00:00
monolith8319 5a17e7781f Automated Changelog (#3731) 2026-04-09 21:23:34 +00:00
significant harassment 98f8d334a1 Gun-Based Damage Modifier Port (#3731)
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-09 17:23:05 -04:00
monolith8319 c9bba3367d Automated Changelog (#3528) 2026-04-09 18:21:59 +00:00
Redrover1760 4ac8f937fb 12 Gauge Buff (#3528) 2026-04-09 14:21:28 -04:00
monolith8319 9648f54fc3 Automated Changelog (#3735) 2026-04-09 17:40:58 +00:00
Redrover1760 33e0bf8293 Gun Health Oversights (#3735) 2026-04-09 13:40:26 -04:00
monolith8319 81ed57e9fb Automated Changelog (#3734) 2026-04-09 17:23:09 +00:00
Redrover1760 0943abba3e Lying Down Makes Projectiles Sometimes Miss You (#3734) 2026-04-09 13:22:37 -04:00
monolith8319 886752cd7a Automated Changelog (#3698) 2026-04-09 16:17:45 +00:00
Ilya246 f8ba24d3f1 Make Shuttle Speedcap Slowdown Instead (#3698) 2026-04-09 19:17:10 +03:00
EckoAurum 1765c7d506 Company Commands for Offline Users (#3721) 2026-04-10 00:57:26 +09:00
monolith8319 16f40a5289 Automated Changelog (#3579) 2026-04-09 15:19:41 +00:00
Ghost581 b80fb6d554 No More Crawling for Non-Targetted Evasion (#3579)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-09 15:19:10 +00:00
Redrover1760 e1932935fe Decreases Thruster SRD Cost (#3729) 2026-04-08 20:33:33 -04:00
monolith8319 5aa06e8fc0 Automated Changelog (#3728) 2026-04-08 23:37:12 +00:00
Redrover1760 914c5529ec Minor Spelling Mistake (#3726) 2026-04-08 19:36:54 -04:00
Ilya246 f406be9a5d 2x Drone Targeting Range (#3728) 2026-04-08 19:36:44 -04:00
monolith8319 002ba09258 Automated Changelog (#3723) 2026-04-07 18:36:29 +00:00
Ilya246 f89e18df88 Kill Gunnery Server Thermal Sigs (#3723) 2026-04-07 14:35:47 -04:00
monolith8319 a7dcf1afea Automated Changelog (#3720) 2026-04-07 01:44:26 +00:00
EckoAurum 670785fd48 HotFix - AI Control Round Remove (#3720) 2026-04-06 21:43:58 -04:00
Ilya246 654a657788 Hotfix Company Owner Setting (#3714) 2026-04-06 18:01:33 +00:00
monolith8319 52137b967a Automated Changelog (#3716) 2026-04-06 17:16:14 +00:00
Redrover1760 8e0bff68cb Siebel Blast Doors Start Open (#3716) 2026-04-06 13:15:41 -04:00
monolith8319 af99be86ed Automated Changelog (#3707) 2026-04-06 15:53:43 +00:00
significant harassment 3ed4f7cc1a Fmc/Dc Value Buff (#3707)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-04-06 11:53:14 -04:00
Ilya246 e72a06c19d emergency postgres migration fix 2026-04-06 16:42:30 +04:00
monolith8319 6619538fb9 Automated Changelog (#3709) 2026-04-05 22:14:21 +00:00
Redrover1760 005950f2a0 Hristov Structrual Buff (#3709) 2026-04-05 18:13:51 -04:00
monolith8319 468be1435c Automated Changelog (#3334) 2026-04-05 21:43:24 +00:00
Redrover1760 685422209e Increases 57mm Explosive Damage (#3334)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-04-05 17:42:55 -04:00
monolith8319 ae58c4d021 Automated Changelog (#3075) 2026-04-05 21:35:16 +00:00
significant harassment 464975916d Kino Weapons Update - Finished (#3075)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-05 17:34:46 -04:00
monolith8319 2f39b9edce Automated Changelog (#3708) 2026-04-05 20:31:10 +00:00
10KE a18831a0c5 Update Shift Duration in Guidebook (#3708) 2026-04-05 16:30:35 -04:00
monolith8319 42dcb56e22 Automated Changelog (#3706) 2026-04-05 18:43:20 +00:00
Ilya246 3eeb83a16e Kill Nf Console Depower Autoanchor (#3706) 2026-04-05 18:42:53 +00:00
monolith8319 abf8bd7218 Automated Changelog (#3583) 2026-04-05 18:34:22 +00:00
Redrover1760 c6de815de4 Refactors and Depowercreeps Shipgun HP (#3583) 2026-04-05 14:33:51 -04:00
Maxim Bychkov 53b02b5830 Unhardcode Companies Whitelist (#3553)
Co-authored-by: Ilya246 <ilyukarno@gmail.com>
2026-04-05 18:32:46 +00:00
monolith8319 40d2f70e08 Automated Changelog (#3691) 2026-04-05 18:23:35 +00:00
Redrover1760 1791e631f7 Adjusts ADS Spawntable and Decreases Wyvern Spawnrate (#3691) 2026-04-05 14:23:06 -04:00
monolith8319 f79b69a3f6 Automated Changelog (#3688) 2026-04-05 18:04:46 +00:00
Redrover1760 b8d5ca7022 Scythe Firerate Nerf (#3688) 2026-04-05 14:03:54 -04:00
monolith8319 f37ef8c994 Automated Changelog (#3489) 2026-04-05 14:22:53 +00:00
Corrupt b4ae011b87 RSC-Serkesh (#3489)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-04-05 16:21:51 +02:00
monolith8319 0adcb3c8a4 Automated Changelog (#3696) 2026-04-05 14:00:48 +00:00
NazrinNya ad1a263596 Lawbringer Port [Bounty] (#3696)
Co-authored-by: Centronias <me@centronias.com>
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-04-05 17:00:18 +03:00
monolith8319 591a6ba333 Automated Changelog (#3699) 2026-04-05 12:21:54 +00:00
Ilya246 ebf2e56159 Hotfix New Drone Targeting (#3699) 2026-04-05 12:21:26 +00:00
monolith8319 c6b36bf126 Automated Changelog (#3697) 2026-04-05 10:31:02 +00:00
NazrinNya 2cd30797ac Revert "Stinky Trait (#594)" (#3697)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-04-05 13:30:34 +03:00
monolith8319 2aad60a3d7 Automated Changelog (#3693) 2026-04-05 06:49:30 +00:00
Ilya246 f561fcb45e Make Drones Target People in Space (#3693) 2026-04-05 06:49:03 +00:00
monolith8319 a68c0d48ba Automated Changelog (#3521) 2026-04-04 21:45:28 +00:00
Mrrpip ec2c5a521d Shortens the Names of Missile Launchers. (#3521)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-04 17:44:56 -04:00
monolith8319 39efe6f747 Automated Changelog (#3592) 2026-04-04 21:38:41 +00:00
Redrover1760 0816b4457c Changes Jetpack Stealth to Detection Radius (#3592) 2026-04-04 17:38:13 -04:00
monolith8319 6c87da3dc3 Automated Changelog (#3535) 2026-04-04 20:50:20 +00:00
Ghost581 05d4b2eebd Viper Group Tech Tree and Jugsuit Slowdown Alleviation + More YAML Roadrage (#3535) 2026-04-04 16:49:50 -04:00
monolith8319 6ee1e7d8f3 Automated Changelog (#3658) 2026-04-04 19:54:13 +00:00
EckoAurum f097148d99 Ai Control Port (#3658) 2026-04-04 19:53:42 +00:00
monolith8319 ef2ce6565d Automated Changelog (#3686) 2026-04-04 13:44:43 +00:00
EckoAurum 98ad67497b Fix Mechlag (Hopefully) (#3686) 2026-04-04 13:44:14 +00:00
monolith8319 67644068b6 Automated Changelog (#3332) 2026-04-04 11:15:08 +00:00
TheScienceOfKSP 1b64380dbb SEC KS-P Pacem Class Corvette (#3332)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
Co-authored-by: Corrupt <compeldominik6@gmail.com>
2026-04-04 13:14:40 +02:00
monolith8319 465006f16b Automated Changelog (#3685) 2026-04-04 03:50:48 +00:00
Redrover1760 e1ec12fb3e Updates Datafarm Descriptions (#3685) 2026-04-03 23:50:20 -04:00
Redrover1760 d62e3a42d0 Lazy Yaml Slop Fix (#3683) 2026-04-03 21:21:06 -04:00
Redrover1760 02be1ef282 Merge branch 'main' of https://github.com/Monolith-Station/Monolith 2026-04-03 20:48:51 -04:00
Redrover1760 85c4a0c9ec fixes grilles protecting biomass 2026-04-03 20:48:12 -04:00
monolith8319 baeb53ee82 Automated Changelog (#3578) 2026-04-03 18:29:42 +00:00
Redrover1760 933dc75c33 Buffs Standard Borg HP, Removes Negative Burn Armor (#3578) 2026-04-03 21:29:10 +03:00
monolith8319 fc45f016ee Automated Changelog (#3602) 2026-04-03 18:28:53 +00:00
Ilya246 6a719f7c39 Adc Piloting Boost (#3602) 2026-04-03 21:28:23 +03:00
monolith8319 d83db373fe Automated Changelog (#3667) 2026-04-03 18:27:01 +00:00
monolith8319 ccec7894c6 Automated Changelog (#3680) 2026-04-03 18:26:27 +00:00
Redrover1760 3319b5f0d3 Makes Tsf Mech Blips Lighter (#3667) 2026-04-03 21:26:26 +03:00
EldritchPineapple 81d9ae37e3 Medicated Suture and Meshes Buff (#3680) 2026-04-03 21:25:56 +03:00
monolith8319 1990f2a272 Automated Changelog (#3636) 2026-04-03 17:46:40 +00:00
Kiithnaras 3665639420 Laser Weapon Improvements (#3636) 2026-04-03 20:46:11 +03:00
monolith8319 20e2ceb0db Automated Changelog (#3673) 2026-04-03 17:45:43 +00:00
chuga-git 84a116fd27 Torpedo/GPO Speed Buffs (#3673) 2026-04-03 20:45:12 +03:00
monolith8319 c3c402d380 Automated Changelog (#3681) 2026-04-03 17:43:07 +00:00
Redrover1760 92e8677e82 Research Datafarms Buffs (#3681) 2026-04-03 20:42:36 +03:00
monolith8319 65365135e3 Automated Changelog (#3285) 2026-04-03 11:09:38 +00:00
monolith8319 62e372c9d2 Automated Changelog (#3195) 2026-04-03 11:09:08 +00:00
NazrinNya 4279c1977d Hullmods (#3285)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-04-03 14:08:54 +03:00
NazrinNya 6406a7cf4f Non-POI Vends Are Now Free. (#3195)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-03 14:08:39 +03:00
monolith8319 806e22e8b4 Automated Changelog (#3679) 2026-04-03 09:51:27 +00:00
EckoAurum c2934d0bd7 Fix Borg Hand Whitelist Bug (#3679) 2026-04-03 09:50:59 +00:00
monolith8319 5316f1fdd9 Automated Changelog (#3678) 2026-04-03 09:04:37 +00:00
Ilya246 66fed8d2a2 Kill Shield Ramming (#3678) 2026-04-03 12:04:09 +03:00
monolith8319 28e3584a67 Automated Changelog (#3677) 2026-04-02 18:53:22 +00:00
Ilya246 78c94ddbc4 Far Reaches IV, New Drone (#3677) 2026-04-02 20:52:53 +02:00
monolith8319 cef95a03bf Automated Changelog (#3559) 2026-04-02 17:25:51 +00:00
Ilya246 bd3a35ee64 New Drone: Bracket, Refactor Drone Yaml a Bit (#3559) 2026-04-02 17:25:02 +00:00
Redrover1760 0b50c919e4 Stops Sloppy Vgroid Debug/Localhost Crashing (#3597) 2026-04-02 10:37:55 -04:00
monolith8319 afcf994545 Automated Changelog (#3672) 2026-04-01 22:09:20 +00:00
UnicornOnLSD 5aaee26a09 Adds a Single OREBOX to the DIS Rig (#3672) 2026-04-02 00:08:49 +02:00
monolith8319 fb3c49bd09 Automated Changelog (#3635) 2026-04-01 16:22:35 +00:00
Redrover1760 2c381cbcd0 Makes Biomass Less Painful to Deal With (#3635) 2026-04-01 12:22:03 -04:00
Ilya246 f4e3ac2478 Fix Logspam 2 (#3661) 2026-03-31 09:12:58 -04:00
Anri 31de4af5e2 Remove Repeat Work in ThermalSignatureSystem (#3631)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-31 11:28:47 +00:00
Ilya246 5e67e63032 Fix Server Log Spam (#3657) 2026-03-31 06:46:54 +00:00
Redrover1760 f3919fafc1 Revert "Merge branch 'april1st' into main" (#3655) 2026-03-30 21:01:19 -04:00
Redrover1760 974b78863b Merge branch 'april1st' into main 2026-03-30 20:48:47 -04:00
monolith8319 1654bd5cf8 Automated Changelog (#3650) 2026-03-30 19:42:07 +00:00
mikus d353667f97 [April 1st] Only True Noticers (#3650) 2026-03-30 15:41:35 -04:00
monolith8319 47116d8ba7 Automated Changelog (#3648) 2026-03-30 18:16:21 +00:00
Ilya246 9bd6d5f3f2 [April 1st] Asteroid Update (#3648) 2026-03-30 18:15:50 +00:00
Corrupt 1dc696deb6 AAAAA (#3646) 2026-03-30 19:34:15 +02:00
monolith8319 f2df23dc81 Automated Changelog (#3645) 2026-03-30 17:33:41 +00:00
mikus 76d6ea96e0 [April 1st] New Company (#3645)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-30 17:33:10 +00:00
monolith8319 93ba265e00 Automated Changelog (#3642) 2026-03-30 17:08:08 +00:00
tonotom1 16f73ec031 [April 1st] Buffs Space Pen (#3642) 2026-03-30 17:07:38 +00:00
monolith8319 9d3b0778b3 Automated Changelog (#3643) 2026-03-30 16:56:33 +00:00
lopsidedmanboobs 32b15951e2 PIrate CBT (#3643) 2026-03-30 18:56:00 +02:00
monolith8319 7a0f0d04c5 Automated Changelog (#3641) 2026-03-30 16:42:14 +00:00
mikus bcce8e67a3 [April 1st] 65 (#3641) 2026-03-30 16:41:45 +00:00
monolith8319 5afcdd9379 Automated Changelog (#3615) 2026-03-30 16:22:32 +00:00
mikus 01c7ea464a [April 1st] 65 (#3615) 2026-03-30 16:22:01 +00:00
monolith8319 55f6108312 Automated Changelog (#3514) 2026-03-30 16:16:08 +00:00
UnicornOnLSD 8be27c1658 Reworks the DIS Rig (#3514)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
2026-03-30 18:15:38 +02:00
monolith8319 4df38cc9cc Automated Changelog (#3640) 2026-03-30 15:45:53 +00:00
mikus 8c0d2a50df [April 1st] Clanker Rebalance (#3640) 2026-03-30 15:45:19 +00:00
monolith8319 2d8105de13 Automated Changelog (#3611) 2026-03-30 15:43:28 +00:00
burrrkeye 01bb73bf56 [APRIL 1st] Charon Rebalance (#3611)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
2026-03-30 15:42:55 +00:00
monolith8319 fb09b866f2 Automated Changelog (#3639) 2026-03-30 13:57:16 +00:00
tonotom1 0458a500ff Harmonica-Fy All Handheld Instruments (#3639) 2026-03-30 09:56:46 -04:00
monolith8319 4334b07093 Automated Changelog (#3638) 2026-03-30 09:23:54 +00:00
Isratosh ad2dd99a9b Thruster Capacitor Uniformity (#3638) 2026-03-30 13:23:22 +04:00
monolith8319 f11c83a96e Automated Changelog (#3626) 2026-03-30 04:38:58 +00:00
mikus 36d1740829 [April 1st] Adjusts (#3626) 2026-03-30 08:38:28 +04:00
Ghost581 1e201bb8d2 Viper Group Whitelist Fix (#3634) 2026-03-29 23:36:29 -04:00
monolith8319 c7a34dfc22 Automated Changelog (#3627) 2026-03-29 18:38:24 +00:00
Redrover1760 e366c4d7cc [April 1st] Adds a Very Fair Drone to the Game (#3627)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: EckoAurum <202461799+EckoAurum@users.noreply.github.com>
Co-authored-by: ScarletLightweaver <82061820+ScarletLightweaverSS14@users.noreply.github.com>
2026-03-29 14:37:54 -04:00
monolith8319 bc0151e540 Automated Changelog (#3564) 2026-03-29 18:15:53 +00:00
UnicornOnLSD b2307660de Uniformises Shutter Sprites (#3564) 2026-03-29 20:15:23 +02:00
monolith8319 5d5f6b4654 Automated Changelog (#3622) 2026-03-29 18:10:30 +00:00
mikus 165f9950b5 {April 1st] Brings Back the Tactics of Evil Hidden TSF Ninja Warriors (#3622) 2026-03-29 14:10:01 -04:00
monolith8319 ef9858936d Automated Changelog (#3619) 2026-03-29 18:09:42 +00:00
Redrover1760 d0a95f5d8b [April 1st] Upgrades Bomb Collars (#3619)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: EckoAurum <202461799+EckoAurum@users.noreply.github.com>
Co-authored-by: ScarletLightweaver <82061820+ScarletLightweaverSS14@users.noreply.github.com>
2026-03-29 14:09:11 -04:00
monolith8319 ee386b0633 Automated Changelog (#3623) 2026-03-29 18:08:59 +00:00
mikus de38cc18ef [April 1st] Buffs Shortband (#3623) 2026-03-29 14:08:28 -04:00
monolith8319 ca928bdc83 Automated Changelog (#3625) 2026-03-29 17:56:37 +00:00
mikus cee6ce9566 [April 1st] Updates Ownership of the Treasury to the Bank Of America (#3625) 2026-03-29 17:56:06 +00:00
monolith8319 984a2c9b71 Automated Changelog (#3624) 2026-03-29 17:16:08 +00:00
Ilya246 548e9eccb6 [April 1st] Mobile Pois 2 (#3624) 2026-03-29 17:15:36 +00:00
monolith8319 cd817abd2c Automated Changelog (#3620) 2026-03-29 16:54:09 +00:00
NazrinNya f276df8fe9 [1 April] Add Larp (#3620)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-29 16:53:40 +00:00
monolith8319 dd323be01d Automated Changelog (#3621) 2026-03-29 16:53:31 +00:00
mikus 0cf9b35f08 [April 1st] Adds New Forms of Energy Production (#3621) 2026-03-29 19:52:59 +03:00
monolith8319 114a09f290 Automated Changelog (#3618) 2026-03-29 16:20:15 +00:00
Redrover1760 dc4b50e71e updates VSC/build configurations (#3618) 2026-03-29 12:19:46 -04:00
monolith8319 c405c32c89 Automated Changelog (#3598) 2026-03-29 15:49:50 +00:00
monolith8319 34ff30a736 Automated Changelog (#3599) 2026-03-29 15:49:22 +00:00
ScarletLightweaver c8e162baa1 Made Bulwark Gauntlets Wideswing (#3598) 2026-03-29 11:49:12 -04:00
Ilya246 ffcbc32c43 Add Carpsuit to Xenopsychology (#3599) 2026-03-29 11:48:53 -04:00
monolith8319 351b225102 Automated Changelog (#3616) 2026-03-29 15:47:58 +00:00
gonz0 496432881e [April 1st] Detroit Borers (#3616) 2026-03-29 11:47:30 -04:00
monolith8319 9fd2a7b5af Automated Changelog (#3614) 2026-03-29 15:16:12 +00:00
EckoAurum 8972408ec1 Drone Turret Small Fix (#3614) 2026-03-29 11:15:43 -04:00
monolith8319 5798b57788 Automated Changelog (#3612) 2026-03-29 14:46:04 +00:00
mikus ec88162ac0 [April 1st] Adds New Type of Bluespace Drive (#3612) 2026-03-29 14:45:36 +00:00
monolith8319 3992aa846f Automated Changelog (#3610) 2026-03-29 14:18:14 +00:00
Ilya246 4b62f35f10 [April 1st] ilya changes round 2 (#3610) 2026-03-29 14:17:46 +00:00
Ilya246 cc1c91f39f Actually Fix Changelog (#3609) 2026-03-29 14:10:42 +00:00
mikus c5241854ce [April 1st] Piras314 Wrote This (#3606) 2026-03-29 13:57:07 +00:00
Ilya246 d02895a50f prune changelog 2026-03-29 13:55:25 +00:00
Ilya246 c41d005cf4 fix changelog workflow (#3607) 2026-03-29 13:52:43 +00:00
monolith8319 013f57a73d Automated Changelog (#3605) 2026-03-29 13:40:51 +00:00
mikus c3f687a493 [April 1st] Rebalances Gunnery Controls (#3605) 2026-03-29 13:40:19 +00:00
monolith8319 f837710be1 Automated Changelog (#3604) 2026-03-29 13:25:12 +00:00
Ilya246 7b00d623e0 [April 1st] Ilya April1st Changes Round 1 (#3603) 2026-03-29 13:24:54 +00:00
mikus dafbb5f3d8 [April 1st] Makes Borgs Balanced (#3604) 2026-03-29 13:24:41 +00:00
Corrupt d4487d9a5a RSC WL Update no.3 (#3601)
brr
2026-03-29 15:03:48 +02:00
monolith8319 7b9f602c55 Automated Changelog (#3571) 2026-03-29 06:31:08 +00:00
Antoine 97509dd3b6 Chat Message Highlighting (#3571)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-29 06:30:38 +00:00
monolith8319 55c2a03ea4 Automated Changelog (#3594) 2026-03-29 05:46:36 +00:00
Redrover1760 543c19645f Gigabuffs Signaller Range (#3594) 2026-03-29 01:46:05 -04:00
monolith8319 da8b19dd05 Automated Changelog (#3595) 2026-03-29 02:40:33 +00:00
Redrover1760 4fc44d3a9c Really Ensures Delayed Gamerules Don't Trigger Early (#3595) 2026-03-28 22:40:06 -04:00
Redrover1760 55688cc9e0 Nuke Collar Buff (#3593) 2026-03-28 18:29:23 -04:00
Redrover1760 5357469644 Adds Tsf/Pdv Borgs to Debug Map (#3591) 2026-03-28 17:59:46 -04:00
monolith8319 6040135534 Automated Changelog (#3590) 2026-03-28 19:05:03 +00:00
Ilya246 52649a871e Fastify Apoc (#3590) 2026-03-28 15:04:33 -04:00
monolith8319 fef33511d8 Automated Changelog (#3444) 2026-03-28 18:43:41 +00:00
EckoAurum fec5bfce0a Faction Borg Specialization | Independent Cyborg Selectable Whitelist (#3444) 2026-03-28 14:43:12 -04:00
monolith8319 11f82f95d3 Automated Changelog (#3459) 2026-03-28 18:17:06 +00:00
NazrinNya 3dbad97455 Small Mech Rebalance. (#3459)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-28 21:16:36 +03:00
monolith8319 a193ab828e Automated Changelog (#3574) 2026-03-28 16:46:17 +00:00
Vinny Shick c75083140d Vasnyx 150mm Launcher Buff (#3574) 2026-03-28 19:45:49 +03:00
Redrover1760 106f9b6d28 Actually Removes Lancelot Wildcard Trade Crate Selling (#3577) 2026-03-28 19:45:07 +03:00
monolith8319 fe24fc22bc Automated Changelog (#3589) 2026-03-28 16:43:10 +00:00
Redrover1760 85c9636003 Buffs Thruster Speed Increase (#3589) 2026-03-28 19:42:39 +03:00
monolith8319 a1d2f4dcbc Automated Changelog (#3587) 2026-03-28 16:22:15 +00:00
NazrinNya 3381fe165c Various Patches. (#3587)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-28 12:21:43 -04:00
monolith8319 a913c35b21 Automated Changelog (#3588) 2026-03-28 16:18:20 +00:00
Redrover1760 0706b759d4 Fixes Diagonal Collisions, Can Kill Kudzu/Chimerazu Under It (#3588) 2026-03-28 12:17:49 -04:00
monolith8319 73a91c0b0a Automated Changelog (#3585) 2026-03-28 06:42:25 +00:00
Redrover1760 9e390680bd Speciest Turrets Fix (#3585) 2026-03-28 02:41:55 -04:00
monolith8319 d3d391f5a0 Automated Changelog (#3582) 2026-03-27 21:58:06 +00:00
Redrover1760 a6506c7f46 Anti-Chimera RIP Turrets to CC and MD (#3582) 2026-03-27 17:57:35 -04:00
monolith8319 958421b6c9 Automated Changelog (#3461) 2026-03-27 19:26:53 +00:00
NazrinNya c513938ed9 Make Heavy Ballistic Turrets Less Painful. (#3461)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-27 15:26:22 -04:00
monolith8319 a6431c9bab Automated Changelog (#3570) 2026-03-27 17:58:37 +00:00
Ilya246 f3390a81cc Gamemode Fixes and Changes (#3570)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-27 13:58:07 -04:00
monolith8319 6ba80381cc Automated Changelog (#3565) 2026-03-27 07:21:00 +00:00
Redrover1760 ef095aec88 Mono Claws Guidebook Update (#3565) 2026-03-27 03:20:31 -04:00
monolith8319 d02738089c Automated Changelog (#3575) 2026-03-27 07:19:51 +00:00
Redrover1760 b9f0de8576 Improves Hydrakin Head Displacement (#3575) 2026-03-27 03:19:24 -04:00
monolith8319 5a6d4b74b1 Automated Changelog (#3524) 2026-03-27 05:49:41 +00:00
significant harassment 1ac13bf597 Triple Rot Delay (#3524)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-27 01:49:14 -04:00
monolith8319 90ee912816 Automated Changelog (#3573) 2026-03-26 22:06:02 +00:00
Redrover1760 27665829e6 Viscerators No Longer Drop Lootboxes (#3572) 2026-03-26 18:05:41 -04:00
Redrover1760 e1459b0d43 Trade Crates Can No Longer Be Sold on Helios or Lancelot (#3573) 2026-03-26 18:05:32 -04:00
monolith8319 395d334dd7 Automated Changelog (#3560) 2026-03-26 05:55:40 +00:00
UnicornOnLSD 75e166e9b3 Maintains the DIS Femur (#3560)
Merged by Corrupt, Has 1 Fakefail.
2026-03-26 06:55:12 +01:00
monolith8319 d987cfe88d Automated Changelog (#3563) 2026-03-25 22:19:01 +00:00
Redrover1760 a942f3e7b1 Reflect Fixes (#3563) 2026-03-25 18:18:31 -04:00
monolith8319 4108933834 Automated Changelog (#3542) 2026-03-25 19:54:26 +00:00
Redrover1760 6af6f3b386 Fireteam Time Requirement Tweak (#3542) 2026-03-25 15:53:53 -04:00
monolith8319 9a590069d2 Automated Changelog (#3555) 2026-03-25 18:33:51 +00:00
Redrover1760 a60321f201 Ports CMO Webbing From Goob (#3555) 2026-03-25 19:33:22 +01:00
monolith8319 dfabb71045 Automated Changelog (#3554) 2026-03-25 06:13:58 +00:00
Redrover1760 ce034c3f19 Claws Tweak, Claws-Based Chemicals (#3554) 2026-03-25 02:13:30 -04:00
monolith8319 79c9dee112 Automated Changelog (#3558) 2026-03-25 05:50:21 +00:00
lopsidedmanboobs 6a048def33 Kill Ransom (#3558) 2026-03-25 01:49:54 -04:00
monolith8319 e41ef48441 Automated Changelog (#3556) 2026-03-25 04:12:58 +00:00
Redrover1760 27e7b2f70a Research Client Fix (#3556) 2026-03-25 00:12:27 -04:00
monolith8319 2bd317dadb Automated Changelog (#3551) 2026-03-25 00:09:05 +00:00
Maxim Bychkov 1145822797 Fix Voidboots Ability To Lie In Space (#3551) 2026-03-24 20:08:36 -04:00
monolith8319 27dca32ef3 Automated Changelog (#3260) 2026-03-24 23:42:18 +00:00
Avalon 4bdad8f6ee Ullman Coat 2 Electric Boogaloo (#3260)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-24 19:41:50 -04:00
monolith8319 38ebc2699c Automated Changelog (#3552) 2026-03-24 19:54:37 +00:00
Ilya246 82f75ff37f Nerf Big Ame (#3552) 2026-03-24 19:54:07 +00:00
Maxim Bychkov c84cde54cb Fix Map Painter (#3544) 2026-03-24 19:28:05 +00:00
monolith8319 f0c6624762 Automated Changelog (#3550) 2026-03-24 19:01:03 +00:00
Ilya246 277ad91140 Bugfixes (#3550) 2026-03-24 19:00:31 +00:00
monolith8319 b9419b25a1 Automated Changelog (#3155) 2026-03-24 15:08:01 +00:00
gelliii e1a5488f14 New Scrap Ship - Horsefly (#3155) 2026-03-24 16:07:30 +01:00
Redrover1760 d9b46ca6dc Update README.md 2026-03-24 09:15:30 -04:00
tonotom1 a672e9bd28 Revert "Cable Destruction Lag Reduction" (#3532) 2026-03-24 08:18:13 -04:00
monolith8319 2a5fe8fe6a Automated Changelog (#3548) 2026-03-24 12:07:19 +00:00
Redrover1760 e069f2ba9d Makes Printed Contraband Worth Things Again (#3548) 2026-03-24 08:06:49 -04:00
monolith8319 db3675b3e8 Automated Changelog (#3549) 2026-03-24 11:45:08 +00:00
chuga-git 79bf0fec68 Buffs MARAUDER Projectile Speed (#3549) 2026-03-24 07:44:39 -04:00
monolith8319 41b3fb9113 Automated Changelog (#3543) 2026-03-23 17:24:06 +00:00
Redrover1760 7cd749dfa6 Datafarm Fixes (#3543) 2026-03-23 13:23:36 -04:00
monolith8319 eb44deeeda Automated Changelog (#3534) 2026-03-23 06:05:19 +00:00
Redrover1760 7035e752a9 Majorly Buffs Part Wound Tending (#3534) 2026-03-23 02:04:49 -04:00
monolith8319 2fdd1cd573 Automated Changelog (#3381) 2026-03-23 04:08:14 +00:00
Kiithnaras 6c4101e0c0 Added Roofing and Emergency Lighting to Comet (#3381) 2026-03-23 00:00:28 -04:00
monolith8319 5f90433697 Automated Changelog (#3536) 2026-03-23 03:42:43 +00:00
Redrover1760 9f54374593 Research Datafarm Fix (#3536) 2026-03-22 23:42:15 -04:00
monolith8319 5272291275 Automated Changelog (#3533) 2026-03-22 23:23:01 +00:00
Redrover1760 4a0f4cec3a Buffed Chems and Surgery Part Healing/Damage (#3533) 2026-03-22 19:22:33 -04:00
monolith8319 5d68716090 Automated Changelog (#3530) 2026-03-22 22:54:38 +00:00
Redrover1760 a4b1a5317c People No Longer Thermal Regulate While Dead, Hydrakin Do Not While Crit Either (#3530) 2026-03-22 18:54:10 -04:00
monolith8319 ee48853724 Automated Changelog (#3520) 2026-03-22 22:41:50 +00:00
tonotom1 a8651f6457 Cable Destruction Lag Reduction (#3520) 2026-03-22 18:41:10 -04:00
monolith8319 47378ac726 Automated Changelog (#3499) 2026-03-22 19:50:36 +00:00
chuga-git 9ca8d4a82a Make Directions to Purchased Shuttles Point the Right Way (#3473) 2026-03-22 22:49:33 +03:00
Redrover1760 f8e940c5f5 Faction Borg Health Decrease (#3499) 2026-03-22 22:49:14 +03:00
monolith8319 89b73cdc76 Automated Changelog (#2620) 2026-03-22 19:46:59 +00:00
significant harassment 881ee08f91 Data Farms (#2620)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: Ilya246 <ilyukarno@gmail.com>
2026-03-22 22:46:27 +03:00
monolith8319 19d869bda1 Automated Changelog (#3201) 2026-03-22 19:44:53 +00:00
tonotom1 964b5768fd Jingle Jangle (#3201) 2026-03-22 22:44:22 +03:00
monolith8319 925933bbcb Automated Changelog (#3247) 2026-03-22 19:43:47 +00:00
Aithaed 277086116a Mech Laser Buff, The Snails Know, TSF Mech Pulse Rifle, TSF Volta Tweak (#3247)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-03-22 22:43:16 +03:00
monolith8319 54412b25e4 Automated Changelog (#3371) 2026-03-22 19:40:40 +00:00
Mrrpip b75be35a1d Turns USSP Locker and Button Access to Mercenary. (#3371) 2026-03-22 22:40:11 +03:00
monolith8319 1d184cfd27 Automated Changelog (#3415) 2026-03-22 19:40:01 +00:00
Ilya246 ea8ce6d5b5 Optimise Shuttle Impacts (#3415)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
2026-03-22 22:39:33 +03:00
monolith8319 a9a05d0da3 Automated Changelog (#3519) 2026-03-22 16:01:37 +00:00
Redrover1760 e2c193f7c7 Edits MD/Halcyon/Drillsite Distances (#3517) 2026-03-22 12:01:34 -04:00
Kiithnaras 060a7565c5 Bedhealing Changes (#3519) 2026-03-22 12:01:07 -04:00
monolith8319 2d94504508 Automated Changelog (#3500) 2026-03-22 14:53:38 +00:00
tonotom1 9ec05018b0 Rad Hater's Initiative (#3500)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-22 10:53:08 -04:00
monolith8319 9574d6fe1f Automated Changelog (#3522) 2026-03-22 13:49:56 +00:00
Ilya246 937131c2a4 Ship Htn Fix (#3522) 2026-03-22 13:49:25 +00:00
monolith8319 f2cd5a6f3a Automated Changelog (#3426) 2026-03-22 11:13:31 +00:00
Corrupt 7749344876 Wyvern Nerf (#3426) 2026-03-22 12:13:01 +01:00
monolith8319 cda0c1f802 Automated Changelog (#3469) 2026-03-22 11:05:16 +00:00
Maxim Bychkov ad37c2895a [DNM] v271.2.0 RT Update - .NET 10 (#3469)
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-22 11:04:46 +00:00
monolith8319 7ceedb6014 Automated Changelog (#3508) 2026-03-22 11:04:17 +00:00
Ilya246 a8c0d92351 [Testmerge End] Revert Movable POIs (#3508) 2026-03-22 11:03:41 +00:00
Redrover1760 1ead85c1c5 reee (#3516) 2026-03-21 22:51:15 -04:00
monolith8319 135335f7c9 Automated Changelog (#3513) 2026-03-21 22:51:22 +00:00
Redrover1760 c1a5f4d8c5 Natural Letoferal Guidebook Again (#3513) 2026-03-21 18:50:51 -04:00
monolith8319 9f204d62d1 Automated Changelog (#3512) 2026-03-21 22:41:11 +00:00
Redrover1760 7ef79b3fda Natural Letoferol Guidebook Description Update (#3512) 2026-03-21 18:40:38 -04:00
monolith8319 3f0670b985 Automated Changelog (#3511) 2026-03-21 22:12:04 +00:00
Redrover1760 c7060a0dc3 Asakim Autopulser Burst Nerf (#3511) 2026-03-21 18:11:32 -04:00
monolith8319 6a48576e4e Automated Changelog (#3510) 2026-03-21 21:38:09 +00:00
Redrover1760 e4412cfbb6 Critical Shipgun Fixture Fix (#3510) 2026-03-21 17:37:36 -04:00
monolith8319 a119933e1a Automated Changelog (#3458) 2026-03-21 21:23:39 +00:00
significant harassment 7602c54c29 Nuke Synthalloy (#3458)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-21 17:23:08 -04:00
monolith8319 f58931c915 Automated Changelog (#3468) 2026-03-21 20:04:23 +00:00
Mrrpip 686d6c8c37 Adds a Ship Based Flare Launcher. (And a Slight Spyglass Buff?) (#3468) 2026-03-21 16:03:52 -04:00
monolith8319 e8850079f0 Automated Changelog (#3482) 2026-03-21 20:00:45 +00:00
Ghost581 9cfdbd75e0 VIPER GROUP STUFF + SOME YAML TIDYING (#3482) 2026-03-21 16:00:13 -04:00
monolith8319 100800d09c Automated Changelog (#3449) 2026-03-21 19:55:43 +00:00
Mrrpip 863cd54169 Swaps the Triage's Generator. Ups It's Armor. Changes the Engine/Weapon Floors. (#3449) 2026-03-21 20:55:12 +01:00
monolith8319 b4bd44a589 Automated Changelog (#3241) 2026-03-21 19:53:23 +00:00
EldritchPineapple 8ab20f7058 New Tsf Frigate : The Altair (#3241)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-21 20:52:52 +01:00
monolith8319 29e20df5b0 Automated Changelog (#3506) 2026-03-21 18:35:12 +00:00
Redrover1760 e7b1f19944 Increases World Loading (#3506) 2026-03-21 14:34:40 -04:00
monolith8319 615cc446e0 Automated Changelog (#3505) 2026-03-21 16:49:05 +00:00
Redrover1760 4e794d6a42 Anchor Fixes (#3505) 2026-03-21 12:48:32 -04:00
monolith8319 63ac33ebce Automated Changelog (#3504) 2026-03-21 11:39:43 +00:00
UnicornOnLSD d5d89acbb4 Port Ghost Types (#37949) and Subsequent Necessities (#3504)
Co-authored-by: Thinbug <101073555+Thinbug0@users.noreply.github.com>
Co-authored-by: Fildrance <fildrance@gmail.com>
Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-03-21 11:39:13 +00:00
monolith8319 1cee621041 Automated Changelog (#3470) 2026-03-21 09:07:05 +00:00
NazrinNya 9dbf4629a0 Hailstorm Nerf, Exped Ore Buff. (#3470)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-21 05:06:33 -04:00
monolith8319 67e804698e Automated Changelog (#3503) 2026-03-21 09:05:14 +00:00
Redrover1760 b63dd431e8 Mobile POIs (#3503) 2026-03-21 05:04:44 -04:00
monolith8319 849b094574 Automated Changelog (#3502) 2026-03-21 08:16:39 +00:00
Redrover1760 2dcf189143 Yet Another Shortband Buff (#3502) 2026-03-21 04:16:08 -04:00
monolith8319 9e4a84a3b2 Automated Changelog (#3501) 2026-03-21 07:44:54 +00:00
Isratosh e69a387839 Add Vanyk and Vespera Missile Magazine Recipes to Military and Ammo Techfab (#3501) 2026-03-21 03:44:24 -04:00
Corrupt 3f50e9e035 RSC WL Updates (#3496) 2026-03-20 20:44:06 -04:00
monolith8319 6b1977d0f9 Automated Changelog (#3497) 2026-03-21 00:38:12 +00:00
NazrinNya b9c02cd366 Nerf Platelets (#3497)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-20 20:37:38 -04:00
monolith8319 f35f5e264d Automated Changelog (#3388) 2026-03-21 00:33:19 +00:00
Ilya246 60c6741960 ADM Nerf (#3388)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-20 20:32:45 -04:00
monolith8319 94812b996b Automated Changelog (#3476) 2026-03-21 00:29:39 +00:00
chuga-git b291b1cfd6 Fix Charon Range (#3476) 2026-03-20 20:29:05 -04:00
significant harassment 96902972d5 Template (#3494)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-20 19:26:55 -04:00
monolith8319 45bce4ed33 Automated Changelog (#3498) 2026-03-20 18:43:21 +00:00
Redrover1760 9347f67507 Draupnir Accuracy Buff (#3498) 2026-03-20 14:42:51 -04:00
monolith8319 e3635d4c91 Automated Changelog (#3495) 2026-03-20 11:39:15 +00:00
Redrover1760 a40b954978 Chimera and Other Mobs No Longer Randomly Die on Colossus (#3495) 2026-03-20 14:38:42 +03:00
monolith8319 adb4296d38 Automated Changelog (#3493) 2026-03-20 00:18:11 +00:00
significant harassment a48a235bf6 Catwalk Directional Tiles (#3493)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-19 20:17:39 -04:00
monolith8319 176055630f Automated Changelog (#3492) 2026-03-19 20:31:41 +00:00
Redrover1760 ff6bf1c131 Borer Radio/Polymorph Bugfixes (#3492) 2026-03-19 16:31:07 -04:00
monolith8319 1be801abf4 Automated Changelog (#3382) 2026-03-19 20:29:27 +00:00
Kiithnaras 0f25271add Specialized Armor for Industrial Mechs (#3382) 2026-03-19 23:28:56 +03:00
monolith8319 24bc95450a Automated Changelog (#3471) 2026-03-19 20:26:28 +00:00
Nikovnik 77ebbdad20 Claws and Bows (#3471) 2026-03-19 23:25:57 +03:00
monolith8319 44a6d7eca6 Automated Changelog (#3487) 2026-03-19 19:42:52 +00:00
EldritchPineapple eb5c8ac4e9 Spica and Aldebaran Hotfix (#3487) 2026-03-19 20:42:18 +01:00
monolith8319 188070b757 Automated Changelog (#3475) 2026-03-19 19:35:28 +00:00
EldritchPineapple 3f97487c0b Nuke... 2026-03-19 20:34:56 +01:00
monolith8319 c7de9b660a Automated Changelog (#3490) 2026-03-19 19:14:06 +00:00
EldritchPineapple 4b44b891d3 A (#3490) 2026-03-19 20:13:32 +01:00
monolith8319 b895b2ba42 Automated Changelog (#3485) 2026-03-19 12:24:15 +00:00
Mrrpip 8a6b39a560 Fixes the Hades' Offsets. (#3485) 2026-03-19 08:23:42 -04:00
monolith8319 ad7633023b Automated Changelog (#3287) 2026-03-19 06:09:52 +00:00
Redrover1760 8777215b34 Bomb Collars (#3287)
Co-authored-by: Redrover1760 <gnarlysheep.personal@gmail.com>
2026-03-19 02:09:21 -04:00
monolith8319 4007b079f8 Automated Changelog (#3474) 2026-03-19 05:34:23 +00:00
chuga-git 79067884e1 Remove Dumpable From the RPED (#3474) 2026-03-19 05:33:51 +00:00
monolith8319 ae72c4b217 Automated Changelog (#3486) 2026-03-19 00:45:06 +00:00
lopsidedmanboobs 12485a5ce2 Mildly Important Safezone Clarifications Added (#3486) 2026-03-19 11:44:34 +11:00
monolith8319 53b74938fd Automated Changelog (#3440) 2026-03-17 23:48:45 +00:00
NazrinNya 42c12489e3 Return Limited Missle Ammo. (#3440)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-17 19:48:16 -04:00
monolith8319 3c31450ab3 Automated Changelog (#3074) 2026-03-17 23:46:38 +00:00
Ghost581 273ca2cd2c Viper Group Hardsuits and Lore Update (#3074) 2026-03-17 19:46:06 -04:00
monolith8319 64a800ab06 Automated Changelog (#3455) 2026-03-16 13:46:00 +00:00
Mrrpip 1fec90e647 Adds a Ammo Variant for the Heavy Weapons Case. (#3455) 2026-03-16 09:45:25 -04:00
monolith8319 389b1a39fe Automated Changelog (#3436) 2026-03-15 19:36:36 +00:00
DevArchwave 8ef3e658b4 Allows Armor Plates to Have Their Durability Examined Outside of Armor (#3436) 2026-03-15 15:36:04 -04:00
monolith8319 b6623e107b Automated Changelog (#3450) 2026-03-15 14:20:19 +00:00
significant harassment 136225a067 Sprite Dump (#3450)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-15 10:19:46 -04:00
monolith8319 7e88f38fa9 Automated Changelog (#3174) 2026-03-15 14:14:20 +00:00
EldritchPineapple 5abbb4beb3 Added the Aldebaran, a Tsf Corvette to Replace the Calypso (#3174) 2026-03-15 15:13:49 +01:00
monolith8319 cdcb4454b0 Automated Changelog (#3106) 2026-03-15 11:21:46 +00:00
EldritchPineapple 4185d83e64 Fracture Placement : PIN-Spica (#3106)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-15 12:21:12 +01:00
Mrrpip 8f921ed705 Updates a Bunch of Ship Author Details (#3447)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-14 22:22:50 +01:00
monolith8319 9a454d9b9a Automated Changelog (#3221) 2026-03-14 19:14:06 +00:00
UnicornOnLSD 6d5e1cb119 Pluto Mk.II Maintenance (#3221) 2026-03-14 20:13:37 +01:00
Corrupt 44b443bdf9 RSC Whitelist Updates! (#3446) 2026-03-14 19:42:15 +01:00
monolith8319 696736da06 Automated Changelog (#3439) 2026-03-14 16:00:17 +00:00
Corrupt 926c4fab49 Delist Scallywag From Normal Shipyards (#3439) 2026-03-14 16:59:46 +01:00
monolith8319 a80e0db8a0 Automated Changelog (#3418) 2026-03-14 15:48:45 +00:00
EldritchPineapple c4954e4bd2 Monolithed the Tanker (#3418) 2026-03-14 16:48:12 +01:00
monolith8319 981017a9b4 Automated Changelog (#3307) 2026-03-13 22:17:03 +00:00
UnicornOnLSD 84b90912f9 Makes (Nearly) ALL Magboots Sprites Uniform (#3307)
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-13 18:16:28 -04:00
monolith8319 78d90096a2 Automated Changelog (#3380) 2026-03-13 21:28:00 +00:00
significant harassment a9a5f194f5 Full Tech Corners, Battle Table, Live Fire Warn (#3380)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-13 17:27:17 -04:00
monolith8319 bc85b73fee Automated Changelog (#3427) 2026-03-12 16:48:25 +00:00
Redrover1760 0f316130e4 Fang Buff, More Projectile Speed/Range (#3427)
Co-authored-by: Redrover1760 <gnarlysheep.personal@gmail.com>
2026-03-12 19:42:06 +03:00
monolith8319 275ecb8e01 Automated Changelog (#3431) 2026-03-12 16:39:39 +00:00
Ilya246 a3ee39de70 Increase Mech Speed (#3433) 2026-03-12 19:37:24 +03:00
chuga-git 9d38f200d7 Reptilian Claw Popup Fix (#3431) 2026-03-12 19:35:42 +03:00
Toastical 8350c4d544 Let Shuttle Console Open Attempts Be Predicted on the Client (#3428) 2026-03-12 05:54:03 +00:00
Corrupt e4d67e8d33 RSC WL Updates (#3430) 2026-03-11 08:52:08 +01:00
monolith8319 278d73dd78 Automated Changelog (#3425) 2026-03-09 23:04:59 +00:00
Redrover1760 3ab8f43ea3 Core Rule 2 Speciesm Clarification (#3425) 2026-03-09 19:04:25 -04:00
monolith8319 0bd1b0800e Automated Changelog (#3346) 2026-03-09 23:00:00 +00:00
burrrkeye c0a10d659a Defector Re-Imagined (#3346)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-10 09:59:28 +11:00
monolith8319 bf89ec2037 Automated Changelog (#3421) 2026-03-09 20:51:31 +00:00
Redrover1760 77811a2d7f Autorecharge Pause Time Down on Dymeres (#3421) 2026-03-09 16:50:55 -04:00
monolith8319 fa7b973bb3 Automated Changelog (#3424) 2026-03-09 20:46:47 +00:00
Redrover1760 b686b65058 l6 saw borg de-ap (#3424) 2026-03-09 16:46:14 -04:00
monolith8319 361c0111ca Automated Changelog (#3423) 2026-03-09 20:40:16 +00:00
Redrover1760 c62943f2e0 Jetpack Blip Fix (#3423) 2026-03-09 16:39:45 -04:00
monolith8319 701883e108 Automated Changelog (#3422) 2026-03-09 19:54:52 +00:00
Redrover1760 b68630257f jaws of life can be used to clip lizard nails now (#3422) 2026-03-09 15:54:17 -04:00
monolith8319 7072751108 Automated Changelog (#3420) 2026-03-09 19:41:49 +00:00
Redrover1760 469c42f2a4 Increases Visible Blip Distance to 2048 From 1024 (#3420) 2026-03-09 15:41:19 -04:00
Corrupt dd8070316f RSC WL Additions/Fixes (#3417) 2026-03-09 13:23:59 -04:00
monolith8319 6e0dbdd1e7 Automated Changelog (#3416) 2026-03-09 17:03:03 +00:00
Ilya246 ef47aad488 Hotfix Companies (#3416) 2026-03-09 13:02:31 -04:00
monolith8319 7f00a4c13a Automated Changelog (#3414) 2026-03-09 08:57:34 +00:00
Ilya246 a651e15ab5 Try Fix some Lag (#3414)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-03-09 08:57:00 +00:00
monolith8319 f089bf5a29 Automated Changelog (#3395) 2026-03-09 08:48:14 +00:00
Corrupt 785e6abe69 RedSail Corsairs (RSC) (#3395) 2026-03-09 09:47:43 +01:00
monolith8319 6c0061a2d3 Automated Changelog (#3391) 2026-03-09 08:42:00 +00:00
UnicornOnLSD c3e008866a Reshades the Wardlord Hardsuit (#3391) 2026-03-09 11:41:29 +03:00
monolith8319 8245850cb0 Automated Changelog (#3412) 2026-03-09 08:41:21 +00:00
Kiithnaras 5da958f7a9 Alternate Hydrakin Heating (#3412)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-03-09 11:40:51 +03:00
NazrinNya 27513e7a28 Fix the Tests (#3413)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-09 11:07:55 +03:00
significant harassment c39c6ca2f5 World Controller System Delay (#3402)
Co-authored-by: Onezero0 <onezero0@outlook.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-09 07:32:30 +00:00
monolith8319 319b12b138 Automated Changelog (#3372) 2026-03-09 07:30:38 +00:00
Kiithnaras 21ba67d599 Buffs ExoPKA to Gather Multiple Tiles Like Handheld PKA (#3372) 2026-03-09 07:30:09 +00:00
monolith8319 454f33ad43 Automated Changelog (#3400) 2026-03-09 07:06:50 +00:00
Ilya246 ad9093094c Try Improve Autopilot (#3400) 2026-03-09 07:06:16 +00:00
Aiden 09c7bf422b Fix2 (#3411)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-09 05:33:58 +00:00
Ilya246 d24a85c6d8 Actually Fill the Configs (#3407) 2026-03-09 05:14:11 +00:00
monolith8319 8709244f6f Automated Changelog (#3409) 2026-03-09 02:09:09 +00:00
lopsidedmanboobs 856093613e Update Portstrike Radius for Ship Attacks (#3409) 2026-03-09 13:08:40 +11:00
monolith8319 6b1aabb8f5 Automated Changelog (#3403) 2026-03-08 23:57:14 +00:00
UnicornOnLSD 2939e6b9bc RSC Scallywag Armament Tweak (#3403) 2026-03-09 10:56:45 +11:00
monolith8319 9476e003c2 Automated Changelog (#3408) 2026-03-08 23:09:18 +00:00
lopsidedmanboobs 6e220606fb Remove Memes (#3408) 2026-03-08 19:08:47 -04:00
Ilya246 a56db3da27 Maint Custompoll (#3397) 2026-03-08 18:43:04 -04:00
Ilya246 f7960e90ab add configs to ConfigPresets (#3406) 2026-03-08 22:15:49 +00:00
Ilya246 313e4f1db6 Thermal Sig Sys Microoptimisation (#3401) 2026-03-08 17:39:48 -04:00
Ilya246 d9721a8328 Revert "v264.0.0-fixphysics to v264.0.4-fixphysics" (#3398)
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-03-08 18:02:39 +00:00
monolith8319 8100503e6a Automated Changelog (#3323) 2026-03-08 16:34:56 +00:00
Redrover1760 a0f3d8193b v264.0.0-fixphysics to v264.0.4-fixphysics (#3323) 2026-03-08 16:34:27 +00:00
NazrinNya cacbaec4cf Dehardcode Assigning Companies to the Job (#3355)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-08 16:31:36 +00:00
monolith8319 d5e213abd9 Automated Changelog (#3190) 2026-03-08 16:26:06 +00:00
tonotom1 eacac0b2e3 Port Wizden #42613: Optical Thermal Scanner Implementation (#3193)
Co-authored-by: InsoPL <lukasz.lindert@protonmail.com>
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
Co-authored-by: psykana <36602558+psykana@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-03-08 16:25:43 +00:00
tonotom1 b3e51ba5a9 Plate Bang (#3190)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-08 16:25:35 +00:00
monolith8319 d54cc99491 Automated Changelog (#3387) 2026-03-08 16:21:01 +00:00
tonotom1 51797e0933 Repairable + Climbable Shipgun & Examinable Damage (#3387) 2026-03-08 16:20:28 +00:00
monolith8319 9d97920e55 Automated Changelog (#3394) 2026-03-08 15:56:34 +00:00
Ilya246 68da6b039c Autopilot (#3394) 2026-03-08 15:56:03 +00:00
monolith8319 9a8c9b76e2 Automated Changelog (#3396) 2026-03-08 15:33:27 +00:00
Redrover1760 5d0fe0a94b Revert "Rammable POIs (#3344)" (#3396) 2026-03-08 11:32:56 -04:00
monolith8319 88c1e7fd1d Automated Changelog (#3164) 2026-03-08 11:40:44 +00:00
Corrupt 3f594f2387 RSC Scallywag (#3164)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-08 22:39:22 +11:00
monolith8319 b19ec1eb9f Automated Changelog (#3354) 2026-03-07 11:14:31 +00:00
Mrrpip f76e2bb807 Adds a Fan to the Talon-SYN Ship. (#3354)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-07 12:14:01 +01:00
monolith8319 ee02f8afdd Automated Changelog (#3188) 2026-03-07 11:03:49 +00:00
tonotom1 0a4753edae Sellsword Dronehunt Edition (#3188)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-07 12:02:56 +01:00
monolith8319 d0ceadf130 Automated Changelog (#3385) 2026-03-07 00:43:32 +00:00
significant harassment 05c046d055 Fighter Spam Fix (#3385)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-06 19:43:00 -05:00
NazrinNya b1aa743a40 Kill Peranol Pop-Up Message. (#3384) 2026-03-06 19:13:46 -05:00
monolith8319 5125fc084e Automated Changelog (#3364) 2026-03-06 16:46:19 +00:00
Ilya246 2fa487e4b3 Chimera Drip (#3364) 2026-03-06 19:45:46 +03:00
monolith8319 d63c42b0ee Automated Changelog (#3378) 2026-03-06 15:49:21 +00:00
NazrinNya da16de09a5 Missle Turbonerf (#3378)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-06 10:48:50 -05:00
monolith8319 58fa85d648 Automated Changelog (#3377) 2026-03-06 13:43:24 +00:00
NazrinNya 3ce7df2433 Adjust Hydrakin (#3377)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-06 08:42:50 -05:00
NazrinNya a11952bdd2 Reptilian Claws Hotfix (#3376)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-06 16:37:23 +03:00
monolith8319 22c29f0a46 Automated Changelog (#3373) 2026-03-06 12:19:13 +00:00
significant harassment 39358d68cd Lore Primer (#3373)
Co-authored-by: Onezero0 <onezero0@outlook.com>
2026-03-06 07:18:42 -05:00
monolith8319 52cd9ad5c5 Automated Changelog (#3374) 2026-03-06 03:53:37 +00:00
Arcticular 3b272d0572 Vanyk Damage Nerf (#3374) 2026-03-05 22:53:06 -05:00
monolith8319 fa47f767a3 Automated Changelog (#3173) 2026-03-06 00:46:07 +00:00
Avalon 94d15b0fcf Incendiary Ammo Rebalance (#3173) 2026-03-05 19:45:37 -05:00
monolith8319 9b20d3aee4 Automated Changelog (#3319) 2026-03-05 23:59:28 +00:00
UnicornOnLSD 13a4c7eb63 Resprites the DI Emblem & Adds Appropriate Banner (#3319)
Co-authored-by: NL-42 <lombardini.nicolas17@gmail.com>
Co-authored-by: NazrinNya <137837419+NazrinNya@users.noreply.github.com>
2026-03-05 18:58:56 -05:00
monolith8319 a364ff074b Automated Changelog (#3356) 2026-03-05 23:57:33 +00:00
Redrover1760 6c33c74260 Reduces Harbringer Range From 8000m to 3520m (#3348) 2026-03-05 18:57:23 -05:00
NazrinNya e03bc781c8 Adjust Reptilians (#3356)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-05 18:56:56 -05:00
monolith8319 a76089a1d8 Automated Changelog (#3370) 2026-03-05 23:56:33 +00:00
NazrinNya 14c3ca4ed6 [Bugfix] Actually Make Hydrakins Heat Up (#3369)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-05 18:56:21 -05:00
NazrinNya 6378076a5d Small IPC Nerf (#3370)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-05 18:56:02 -05:00
monolith8319 e01cb2be78 Automated Changelog (#3343) 2026-03-05 21:36:53 +00:00
Mrrpip a2cbcddd12 Adds the QJ340 Support Fighter to the Tumour's Shipyard. (#3343)
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
2026-03-05 22:36:19 +01:00
monolith8319 70b903467e Automated Changelog (#3357) 2026-03-05 20:00:16 +00:00
Mrrpip fdb9954a22 Adjusts Description on Standard Diagonal Plastitanium Walls. (#3357) 2026-03-05 22:59:45 +03:00
monolith8319 01e622b43d Automated Changelog (#3351) 2026-03-05 19:58:39 +00:00
Mrrpip 1154e94757 Allows All Moveable Shipguns to Be Rotated. (#3351) 2026-03-05 22:58:09 +03:00
monolith8319 d95e82922d Automated Changelog (#3349) 2026-03-05 19:57:42 +00:00
Redrover1760 24e77e2fc4 Fixes Wyverns Spawning Nonstop (#3349) 2026-03-05 22:57:11 +03:00
monolith8319 f15d0e74c9 Automated Changelog (#3365) 2026-03-05 17:34:23 +00:00
tonotom1 1107c9c288 Holy Sensors Dude (#3365) 2026-03-05 20:05:14 +03:00
Ilya246 57c5287e02 Upgrade Map Painter (#3367) 2026-03-05 12:57:58 +00:00
monolith8319 838a56a68a Automated Changelog (#3309) 2026-03-05 04:57:24 +00:00
Redrover1760 8134e4733e Halcyon Update (#3309) 2026-03-05 15:56:49 +11:00
Redrover1760 b7fc2cc7e7 oversight (#3362) 2026-03-04 21:10:43 -05:00
monolith8319 b5618452d5 Automated Changelog (#3361) 2026-03-04 23:44:58 +00:00
Redrover1760 3c697015a6 Adm Tweaks (#3361) 2026-03-04 18:44:29 -05:00
monolith8319 5be002dbc2 Automated Changelog (#3358) 2026-03-04 17:40:31 +00:00
NazrinNya e8989e1fc3 Adjust Mech Destruction Threshold (#3358)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-04 12:39:58 -05:00
monolith8319 a5fcf434ec Automated Changelog (#3353) 2026-03-04 13:21:55 +00:00
NazrinNya 8ee21957a3 Smart Magnum Adjustments (#3353)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-03-04 08:21:23 -05:00
monolith8319 88c6b190b5 Automated Changelog (#3350) 2026-03-04 09:04:18 +00:00
tonotom1 e490f5216c Free Ironman Frameworks (#3350) 2026-03-04 12:03:47 +03:00
monolith8319 4da4b3b01a Automated Changelog (#3297) 2026-03-03 21:33:02 +00:00
Redrover1760 f457d5c33c Wizden/Frontier Armor Vest Buffs (#3297) 2026-03-03 16:32:29 -05:00
monolith8319 f2726120f6 Automated Changelog (#3318) 2026-03-03 20:33:29 +00:00
freturt 04a3fc2949 ATU Leader's Buff (#3318) 2026-03-03 23:32:57 +03:00
monolith8319 3e38958cab Automated Changelog (#3303) 2026-03-03 19:09:18 +00:00
Redrover1760 0642406657 Lets Mindshields Be Removed From People (#3286) 2026-03-03 22:09:07 +03:00
Jae c62bade639 Convert WSPR to General 7.62x39mm (#3303) 2026-03-03 22:08:32 +03:00
Redrover1760 1365399931 More Ads Nerfs (#3335) 2026-03-03 22:07:52 +03:00
monolith8319 b02070a3c0 Automated Changelog (#3315) 2026-03-03 18:17:59 +00:00
UnicornOnLSD 94a7413968 DIS Femur Patch, 2nd Edition (#3315) 2026-03-03 21:17:29 +03:00
monolith8319 c984c461c7 Automated Changelog (#3321) 2026-03-03 18:14:21 +00:00
DevArchwave e102989c28 Utility Loadout Access for More Roles (#3321) 2026-03-03 21:11:14 +03:00
monolith8319 f8b1355bbb Automated Changelog (#3328) 2026-03-03 18:04:04 +00:00
tonotom1 52e11f7a59 Port Wizden #37129: Add EvenHealthChange Effect (#3328)
Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-03-03 21:03:33 +03:00
monolith8319 5e152a2875 Automated Changelog (#3340) 2026-03-03 17:43:03 +00:00
Mrrpip 3f40d8f59f Adjusts the Zephyr, Swaps Thrusters for TSF Variants, Lowers the Gunnery Server to Low. (#3340) 2026-03-03 20:42:31 +03:00
monolith8319 56727c248c Automated Changelog (#3344) 2026-03-03 17:28:45 +00:00
Ilya246 56dbf295c2 Rammable POIs (#3344) 2026-03-03 20:28:11 +03:00
monolith8319 1f5f3d38d5 Automated Changelog (#3325) 2026-03-03 17:27:58 +00:00
burrrkeye 86f70184d7 PDV Helmets Get Sechuds, Neptune Gets Station Records and IFF Console (#3325) 2026-03-03 20:27:25 +03:00
monolith8319 3a1f36ea15 Automated Changelog (#3055) 2026-03-03 17:07:56 +00:00
NazrinNya 036870c2d0 Lizard Rework. (#3055)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-03 20:07:25 +03:00
monolith8319 108864d7ed Automated Changelog (#3342) 2026-03-03 14:41:12 +00:00
NazrinNya 4a21e19afe Revert "LPB Updates Plus New Syndie Borg Ghostrole (#3215)" (#3342)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-03 17:40:40 +03:00
Ilya246 1d53b774b4 Fix Dynamic Role Timer (#3327) 2026-03-03 00:28:30 -05:00
monolith8319 6f3508f497 Automated Changelog (#3316) 2026-03-03 04:08:58 +00:00
Corrupt faf89dc740 Wyvern Tweaks (#3316) 2026-03-02 23:08:28 -05:00
monolith8319 2e2c0e2a97 Automated Changelog (#3215) 2026-03-02 23:53:39 +00:00
Loldaddy5676 424c5001a1 LPB Updates Plus New Syndie Borg Ghostrole (#3215) 2026-03-02 18:53:09 -05:00
monolith8319 e845a6f77c Automated Changelog (#3333) 2026-03-02 21:42:31 +00:00
Redrover1760 e6e9346979 rebuffs the Scythe (#3333) 2026-03-02 16:41:44 -05:00
monolith8319 30a6e47d6f Automated Changelog (#3330) 2026-03-02 21:19:09 +00:00
Redrover1760 298ed43ee5 Prefracture Ship Repairable (#3330) 2026-03-02 16:18:37 -05:00
monolith8319 c992c56fa3 Automated Changelog (#3329) 2026-03-02 18:26:24 +00:00
Ilya246 fe071126d5 Optimise Blip Network Usage (#3329) 2026-03-02 13:25:53 -05:00
monolith8319 86d46357bd Automated Changelog (#3326) 2026-03-02 14:33:32 +00:00
Redrover1760 32ab30233f Gamerule Fixes Maybe (#3326)
Co-authored-by: Redrover1760 <gnarlysheep.personal@gmail.com>
2026-03-02 09:33:00 -05:00
Redrover1760 afb33ea720 Doubles Clientside Network Blip Throttling (#3322) 2026-03-02 08:24:42 -05:00
monolith8319 d83e97be76 Automated Changelog (#3306) 2026-03-01 23:48:10 +00:00
Hverabrao 77323026ae Updates Buran (#3306) 2026-03-02 10:47:39 +11:00
monolith8319 f9d115f708 Automated Changelog (#3298) 2026-03-01 23:35:07 +00:00
burrrkeye 0fffae63af PDV BT-Y Fenrir Class Light Carrier Destroyer (#3298) 2026-03-02 10:34:38 +11:00
monolith8319 4848763feb Automated Changelog (#3301) 2026-03-01 23:33:12 +00:00
Redrover1760 b52fea4920 Just ADS Re-Alot of Things (#3301)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: Ilya246 <ilyukarno@gmail.com>
2026-03-01 18:32:41 -05:00
monolith8319 ca50c40b3b Automated Changelog (#3140) 2026-03-01 22:43:38 +00:00
Arcticular 5d8b66f491 ADS Wyrm (#3140) 2026-03-01 17:43:10 -05:00
monolith8319 0e717b1cd6 Automated Changelog (#3314) 2026-03-01 17:22:27 +00:00
Ilya246 3da48f94d1 Fix Drone Collision Evasion (#3314) 2026-03-01 17:21:58 +00:00
monolith8319 92eaee9dc0 Automated Changelog (#3313) 2026-03-01 17:07:50 +00:00
DevArchwave 9945dcc5fa Self-Defense Loadout for Colonial Staff (#3313) 2026-03-01 12:07:21 -05:00
monolith8319 e91ee50973 Automated Changelog (#3288) 2026-03-01 11:40:43 +00:00
Kiithnaras abf7764557 Improves AME, Nerfs ZPinch (#3288) 2026-03-01 11:40:11 +00:00
monolith8319 b5d0ce7866 Automated Changelog (#3310) 2026-02-28 23:17:13 +00:00
UnicornOnLSD f9f4c37b03 Fixes DIS Femur Issues (#3310) 2026-02-28 18:16:42 -05:00
monolith8319 0d340bbae9 Automated Changelog (#3311) 2026-02-28 22:18:37 +00:00
Redrover1760 81a1371eb4 Missiles and Tarnyx Have Infinite Base Ammo Now. (#3311) 2026-02-28 17:18:06 -05:00
monolith8319 2825f0f400 Automated Changelog (#3291) 2026-02-28 19:56:24 +00:00
Redrover1760 c218faac8d Hydrakin Marking Update (#3291) 2026-02-28 14:55:54 -05:00
monolith8319 1fb4bca1b3 Automated Changelog (#3167) 2026-02-28 05:08:42 +00:00
Corrupt 846fb711a6 ADS Wyvern Replacement (#3167)
Good
2026-02-28 16:08:11 +11:00
monolith8319 c943010bc1 Automated Changelog (#3109) 2026-02-28 03:44:19 +00:00
Arcticular c497df354b 520mm Syndicate Howitzer (#3109)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-02-27 22:43:46 -05:00
Redrover1760 f692d16b1a description fix (#3300) 2026-02-27 19:16:57 -05:00
Redrover1760 885c2feec3 Mild Chemmastercode Update (#3296) 2026-02-27 14:38:38 -05:00
monolith8319 ab4e4daa48 Automated Changelog (#3257) 2026-02-27 17:11:09 +00:00
Aithaed 8743651e1b ATTENTION STALKER, AN EMISSION IS APPROACHING (#3257) 2026-02-27 12:10:39 -05:00
monolith8319 ccff51b77b Automated Changelog (#3268) 2026-02-27 03:31:26 +00:00
UnicornOnLSD 52915390bb Makes All Computer Sprites Uniform (#3268) 2026-02-26 22:30:54 -05:00
monolith8319 09150f5a7d Automated Changelog (#3295) 2026-02-27 01:07:38 +00:00
Redrover1760 9ea3e34f49 Optimizes Blip Memory GC/Usage (#3295) 2026-02-26 20:07:07 -05:00
monolith8319 1ca09e96d3 Automated Changelog (#3294) 2026-02-27 00:24:01 +00:00
lopsidedmanboobs 44aac3d94b Core Rule 2: Slurs - Head Admin Approved (#3294) 2026-02-26 19:23:30 -05:00
monolith8319 75f18469aa Automated Changelog (#3261) 2026-02-26 05:27:52 +00:00
Redrover1760 956658b305 Retires the Ruby (#3261) 2026-02-26 00:27:23 -05:00
monolith8319 297262017b Automated Changelog (#3282) 2026-02-24 22:28:18 +00:00
Redrover1760 7536925649 Clarifies that Military Outposts Are Protected Under ADS Lawset Under Its Laws (#3282) 2026-02-24 17:27:47 -05:00
monolith8319 d463794da7 Automated Changelog (#3212) 2026-02-24 20:31:00 +00:00
burrrkeye ee903e3735 Hazel Loadout Change (#3212) 2026-02-24 23:30:29 +03:00
monolith8319 3f9e35f900 Automated Changelog (#3168) 2026-02-24 20:15:50 +00:00
rishani-ss14 90b2bd34e2 Fixes Service Workers' Valet Voucher (#3168) 2026-02-24 23:15:17 +03:00
monolith8319 0fe194c209 Automated Changelog (#3178) 2026-02-24 20:14:24 +00:00
Kei Kiyomi 3cbfc5055c Add High Command Phone (#3178) 2026-02-24 23:13:54 +03:00
monolith8319 c4d5fa6813 Automated Changelog (#3272) 2026-02-24 20:00:34 +00:00
UnicornOnLSD 41e8348d96 Adds the DIS Femur, Removes SHM Acera (#3272) 2026-02-24 23:00:03 +03:00
monolith8319 f715d4c00b Automated Changelog (#3253) 2026-02-24 19:42:55 +00:00
Kiithnaras 685d12c35f Tweaks and Balancing to Big Mecha and Power Cages/Cells (#3253) 2026-02-24 22:42:25 +03:00
monolith8319 1182332c0d Automated Changelog (#3279) 2026-02-24 19:00:55 +00:00
Loldaddy5676 9ce9d7258d MLA Additonal Ammo (#3279) 2026-02-24 22:00:21 +03:00
monolith8319 23489aaadd Automated Changelog (#3275) 2026-02-24 18:58:17 +00:00
Mrrpip b36192bf3b Adds (Re-Adds?) Signal Control to Various Ship Weapons. (#3275) 2026-02-24 21:57:45 +03:00
monolith8319 417cd92c4b Automated Changelog (#3283) 2026-02-24 13:50:16 +00:00
Redrover1760 7561cdfb92 Thieving Trait Nerf (#3283) 2026-02-24 08:49:46 -05:00
monolith8319 dfe9c65221 Automated Changelog (#3280) 2026-02-24 13:24:24 +00:00
Redrover1760 7f852a8cb8 90mm Nerf (#3280) 2026-02-24 14:23:51 +01:00
monolith8319 6895525e91 Automated Changelog (#3281) 2026-02-24 12:49:51 +00:00
Kiithnaras dc230618e3 Fixes Watchdog Respirator States on Hydrakin (#3281) 2026-02-24 15:49:18 +03:00
monolith8319 d5530fb5ee Automated Changelog (#3284) 2026-02-24 04:32:22 +00:00
Aithaed 1a6bd945c5 Carrion Suit Storage Fix (#3284) 2026-02-23 23:31:52 -05:00
monolith8319 69c0484989 Automated Changelog (#3273) 2026-02-23 16:07:29 +00:00
Ilya246 c7f86e6b6f Ftl Lock Lodging Bandaid Fix (#3273) 2026-02-23 11:06:55 -05:00
monolith8319 8cb67fbbe2 Automated Changelog (#3278) 2026-02-23 13:25:27 +00:00
Kiithnaras 4c7d77502c Adds Hunger and Thirst Processing Components to Hydrakin. (#3278) 2026-02-23 08:24:55 -05:00
monolith8319 7b6ebef36f Automated Changelog (#3263) 2026-02-23 05:19:08 +00:00
Redrover1760 974cb92dc5 Increases MD Distance Variance (#3263) 2026-02-23 00:18:37 -05:00
4060 changed files with 260615 additions and 166531 deletions
+1 -1
View File
@@ -348,7 +348,7 @@ resharper_csharp_qualified_using_at_nested_scope = false
resharper_csharp_prefer_qualified_reference = false
resharper_csharp_allow_alias = false
[*.{csproj,xml,yml,yaml,dll.config,msbuildproj,targets,props,json}]
[*.{csproj,xml,yml,yaml,dll.config,msbuildproj,targets,props,json,slnx}]
indent_size = 2
[nuget.config]
+7 -8
View File
@@ -1,4 +1,3 @@
<!-- Guidelines: https://docs.spacestation14.io/en/getting-started/pr-guideline -->
## About the PR
<!-- What did you change? -->
@@ -7,23 +6,23 @@
## Why / Balance
<!-- Discuss how this would affect game balance or explain why it was changed. Link any relevant discussions or issues. -->
## How to test
<!-- Describe the way it can be tested -->
## Media
<!-- Attach media if the PR makes ingame changes (clothing, items, features, etc).
Small fixes/refactors are exempt. Media may be used in SS14 progress reports with credit. -->
## Requirements
<!-- Confirm the following by placing an X in the brackets [X]: -->
- [ ] I have read and am following the [Pull Request and Changelog Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).
- [ ] I have read relevant guidelines/documentation to this PR found on [our devwiki](https://monolith-station.github.io/mono-docs/).
- [ ] I have added media to this PR or it does not require an ingame showcase.
- [ ] I can confirm this PR contains no AI-generated content, and did not use any AI-generated content.
- [ ] I can confirm this PR contains either no AI-generated content, or AI-generated content that meets our guidelines.
<!-- You should understand that not following the above may get your PR closed at maintainers discretion -->
<!-- When using AI, make sure you are already proficient in creating whatever content you are attempting to generate and that you already have experience contributing to SS14. This means using AI to enhance your preexisting workflow, not vibecoding. -->
## How to test
<!-- Describe the way it can be tested -->
## Breaking changes
<!-- List any breaking changes, including namespaces, public class/method/field changes, prototype renames; and provide instructions for fixing them.
This will be posted in #codebase-changes. -->
<!-- List any breaking changes, including namespaces, public class/method/field changes, prototype renames; and provide instructions for fixing them. -->
**Changelog**
<!-- Add a Changelog entry to make players aware of new features or changes that could affect gameplay.
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
name: Run Benchmarks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
with:
submodules: 'recursive'
- name: Get Engine version
+3 -3
View File
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Checkout Master
uses: actions/checkout@v3.6.0
uses: actions/checkout@v4.2.2
- name: Setup Submodule
run: |
@@ -38,9 +38,9 @@ jobs:
git submodule update --init --recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install dependencies
run: dotnet restore
+3 -3
View File
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Checkout Master
uses: actions/checkout@v3.6.0
uses: actions/checkout@v4.2.2
- name: Setup Submodule
run: |
@@ -38,9 +38,9 @@ jobs:
git submodule update --init --recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install dependencies
run: dotnet restore
+5 -5
View File
@@ -1,5 +1,5 @@
name: PR Changelogs
concurrency: commit_action
concurrency: commit_action-${{ github.event.pull_request.base.ref }} # Mono
on:
pull_request_target:
types: [closed]
@@ -16,11 +16,11 @@ jobs:
permissions:
contents: write
steps:
- name: Checkout Master
- name: Checkout Base Branch # Mono
uses: actions/checkout@v3
with:
token: ${{ secrets.BOT_TOKEN }}
ref: "${{ vars.CHANGELOG_BRANCH }}"
ref: "${{ github.event.pull_request.base.ref }}" # Mono
- name: Setup Git
run: |
@@ -47,9 +47,9 @@ jobs:
- name: Commit Changelog
run: |
git pull origin main
git pull origin "${{ github.event.pull_request.base.ref }}"
git add "${{ env.CHANGELOG_DIR }}"
git commit -m "Automated Changelog (#${{ env.PR_NUMBER }})"
git push
git push origin "${{ github.event.pull_request.base.ref }}"
shell: bash
continue-on-error: true
+1 -1
View File
@@ -14,6 +14,6 @@ jobs:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
- name: Check for CRLF
run: Tools/check_crlf.py
+12 -12
View File
@@ -10,18 +10,18 @@ jobs:
if: ${{github.head_ref == 'master' || github.head_ref == 'main' || github.head_ref == 'develop'}}
steps:
# - uses: superbrothers/close-pull-request@v3
# with:
# comment: "Thank you for contributing to the Space Station 14 repository. Unfortunately, it looks like you submitted your pull request from the master branch. We suggest you follow [our git usage documentation](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html) \n\n You can move your current work from the master branch to another branch by doing `git branch <branch_name` and resetting the master branch."
- uses: superbrothers/close-pull-request@v3
with:
comment: "Thank you for contributing to the Monolith repository. Unfortunately, it looks like you submitted your pull request from the master branch. We suggest you follow [our git usage documentation](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html) \n\n You can move your current work from the master branch to another branch by doing `git branch <branch_name` and resetting the master branch."
# If you prefer to just comment on the pr and not close it, uncomment the bellow and comment the above
- uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: ${{ github.event.number }},
owner: context.repo.owner,
repo: context.repo.repo,
body: "Thank you for contributing to the Space Station 14 repository. Unfortunately, it looks like you submitted your pull request from the master branch. We suggest you follow [our git usage documentation](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html) \n\n You can move your current work from the master branch to another branch by doing `git branch <branch_name` and resetting the master branch. \n\n This pr won't be automatically closed. However, a maintainer may close it for this reason."
})
#- uses: actions/github-script@v7
# with:
# script: |
# github.rest.issues.createComment({
# issue_number: ${{ github.event.number }},
# owner: context.repo.owner,
# repo: context.repo.repo,
# body: "Thank you for contributing to the Monolith repository. Unfortunately, it looks like you submitted your pull request from the master branch. We suggest you follow [our git usage documentation](https://docs.spacestation14.com/en/general-development/setup/git-for-the-ss14-developer.html) \n\n You can move your current work from the master branch to another branch by doing `git branch <branch_name>` and resetting the master branch. \n\n This pr won't be automatically closed. However, a maintainer may close it for this reason."
# })
+3 -3
View File
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout Master
uses: actions/checkout@v3.6.0
uses: actions/checkout@v4.2.2
- name: Setup Submodule
run: |
@@ -35,9 +35,9 @@ jobs:
git submodule update --init --recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install Dependencies
run: dotnet restore
+3 -3
View File
@@ -13,13 +13,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
with:
submodules: 'recursive'
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Get Engine Tag
run: |
+3 -3
View File
@@ -15,13 +15,13 @@ jobs:
- name: Install dependencies
run: sudo apt-get install -y python3-paramiko python3-lxml
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
with:
submodules: 'recursive'
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Get Engine Tag
run: |
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3.6.0
uses: actions/checkout@v4.2.2
- name: Get changed files
id: files
+3 -3
View File
@@ -38,7 +38,7 @@ jobs:
steps:
- name: Checkout Master
uses: actions/checkout@v3.6.0
uses: actions/checkout@v4.2.2
- name: Setup Submodule
run: |
@@ -53,9 +53,9 @@ jobs:
git submodule update --init --recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install dependencies
run: dotnet restore
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
if: github.repository == 'Monolith-Station/Monolith' # Mono: space-wizards/space-station-14 > Monolith-Station/Monolith
steps:
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
with:
ref: main
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
name: Validate RSIs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
- name: Setup Submodule
run: git submodule update --init
- name: Pull engine updates
+3 -3
View File
@@ -17,7 +17,7 @@ jobs:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.6.0
- uses: actions/checkout@v4.2.2
- name: Setup submodule
run: |
git submodule update --init --recursive
@@ -28,9 +28,9 @@ jobs:
cd RobustToolbox/
git submodule update --init --recursive
- name: Setup .NET Core
uses: actions/setup-dotnet@v3.2.0
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Install dependencies
run: dotnet restore
- name: Build
+3
View File
@@ -1,3 +1,6 @@
# MSbuild binlog files
*.binlog
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
+53 -7
View File
@@ -13,6 +13,26 @@
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Client - Tools",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build - Tools",
"program": "${workspaceFolder}/bin/Content.Client/Content.Client.dll",
"args": [],
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Client - Release",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build - Release",
"program": "${workspaceFolder}/bin/Content.Client/Content.Client.dll",
"args": [],
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Client (Compatibility renderer)",
"type": "coreclr",
@@ -31,6 +51,26 @@
"console": "integratedTerminal",
"stopAtEntry": false
},
{
"name": "Server - Tools",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build - Tools",
"program": "${workspaceFolder}/bin/Content.Server/Content.Server.dll",
"args": [""],
"console": "integratedTerminal",
"stopAtEntry": false
},
{
"name": "Server - Release",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build - Release",
"program": "${workspaceFolder}/bin/Content.Server/Content.Server.dll",
"args": [""],
"console": "integratedTerminal",
"stopAtEntry": false
},
{
"name": "YAML Linter",
"type": "coreclr",
@@ -40,7 +80,7 @@
"cwd": "${workspaceFolder}/Content.YAMLLinter",
"console": "internalConsole",
"stopAtEntry": false
}
},
],
"compounds": [
{
@@ -51,14 +91,21 @@
],
"preLaunchTask": "build"
},
// Frontier begin
{
"name": "Server/Client (Release)",
"name": "Server/Client - Tools",
"configurations": [
"Server",
"Client"
"Server - Tools",
"Client - Tools"
],
"preLaunchTask": "build-release"
"preLaunchTask": "build - Tools"
},
{
"name": "Server/Client - Release",
"configurations": [
"Server - Release",
"Client - Release"
],
"preLaunchTask": "build - Release"
},
{
"name": "Server/Client (No Build)",
@@ -67,6 +114,5 @@
"Client"
]
}
// Frontier end
]
}
+26 -6
View File
@@ -21,26 +21,46 @@
},
"problemMatcher": "$msCompile"
},
// Frontier begin
{
"label": "build-release",
"label": "build - Tools",
"command": "dotnet",
"type": "shell",
"args": [
"build",
"--configuration=Release", // Build in release mode. Note: --, not /. /configuration doesn't work, because Microsoft.
"--configuration",
"Tools",
"/property:GenerateFullPaths=true", // Ask dotnet build to generate full paths for file names.
"/consoleloggerparameters:NoSummary" // Do not generate summary otherwise it leads to duplicate errors in Problems panel
"/consoleloggerparameters:'ForceNoAlign;NoSummary'", // Do not generate summary otherwise it leads to duplicate errors in Problems panel
],
"group": {
"kind": "build"
"kind": "build",
"isDefault": false
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
{
"label": "build - Release",
"command": "dotnet",
"type": "shell",
"args": [
"build",
"--configuration",
"Release",
"/property:GenerateFullPaths=true", // Ask dotnet build to generate full paths for file names.
"/consoleloggerparameters:'ForceNoAlign;NoSummary'", // Do not generate summary otherwise it leads to duplicate errors in Problems panel
],
"group": {
"kind": "build",
"isDefault": false
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
// Frontier end
{
"label": "build-yaml-linter",
"command": "dotnet",
+1 -1
View File
@@ -8,7 +8,7 @@ import shutil
from pathlib import Path
from typing import List
SOLUTION_PATH = Path("..") / "SpaceStation14.sln"
SOLUTION_PATH = Path("..") / "SpaceStation14.slnx"
# If this doesn't match the saved version we overwrite them all.
CURRENT_HOOKS_VERSION = "2"
QUIET = len(sys.argv) == 2 and sys.argv[1] == "--quiet"
+14 -9
View File
@@ -1,17 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\RobustToolbox\MSBuild\Robust.Properties.targets" />
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<OutputPath>..\bin\Content.Benchmarks\</OutputPath>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>12</LangVersion>
<IsTestingPlatformApplication>false</IsTestingPlatformApplication>
<Nullable>disable</Nullable>
</PropertyGroup>
<Import Project="../MSBuild/Content.props" />
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" />
<!-- pin transitive deps -->
<PackageReference Include="System.Management" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Content.Client\Content.Client.csproj" />
@@ -19,10 +22,12 @@
<ProjectReference Include="..\Content.Shared\Content.Shared.csproj" />
<ProjectReference Include="..\Content.Tests\Content.Tests.csproj" />
<ProjectReference Include="..\Content.IntegrationTests\Content.IntegrationTests.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Benchmarks\Robust.Benchmarks.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Client\Robust.Client.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Server\Robust.Server.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Shared.Maths\Robust.Shared.Maths.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Shared\Robust.Shared.csproj" />
</ItemGroup>
<Import Project="..\RobustToolbox\Imports\Lidgren.props" />
<Import Project="..\RobustToolbox\Imports\Client.props" />
<Import Project="..\RobustToolbox\Imports\Server.props" />
<Import Project="..\RobustToolbox\Imports\Shared.props" />
<Import Project="..\RobustToolbox\Imports\Benchmarks.props" />
<Import Project="..\RobustToolbox\Imports\Testing.props" />
</Project>
+3
View File
@@ -0,0 +1,3 @@
// Global usings for Content.Benchmarks
global using Robust.UnitTesting.Pool;
@@ -51,6 +51,8 @@ internal sealed class AdminNameOverlay : Overlay
//TODO make this adjustable via GUI
var classic = _config.GetCVar(CCVars.AdminOverlayClassic);
var playTime = _config.GetCVar(CCVars.AdminOverlayPlaytime);
var startingJob = _config.GetCVar(CCVars.AdminOverlayStartingJob);
foreach (var playerInfo in _system.PlayerList)
{
@@ -77,25 +79,50 @@ internal sealed class AdminNameOverlay : Overlay
}
var uiScale = _userInterfaceManager.RootControl.UIScale;
var lineoffset = new Vector2(0f, 11f) * uiScale;
var lineoffset = new Vector2(0f, 14f) * uiScale;
var screenCoordinates = _eyeManager.WorldToScreen(aabb.Center +
new Angle(-_eyeManager.CurrentEye.Rotation).RotateVec(
aabb.TopRight - aabb.Center)) + new Vector2(1f, 7f);
var balance = playerInfo.Balance == int.MinValue ? "NO BALANCE" : BankSystemExtensions.ToCurrencyString(playerInfo.Balance); // Frontier
var currentOffset = Vector2.Zero;
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, playerInfo.CharacterName, uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White);
currentOffset += lineoffset;
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, playerInfo.Username, uiScale, playerInfo.Connected ? Color.Yellow : Color.White);
currentOffset += lineoffset;
var balance = playerInfo.Balance == int.MinValue
? "NO BALANCE"
: BankSystemExtensions.ToCurrencyString(playerInfo.Balance);
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, $"Balance: {balance}", uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White);
currentOffset += lineoffset;
if (!string.IsNullOrEmpty(playerInfo.PlaytimeString) && playTime)
{
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, playerInfo.PlaytimeString, uiScale, playerInfo.Connected ? Color.Orange : Color.White);
currentOffset += lineoffset;
}
if (!string.IsNullOrEmpty(playerInfo.StartingJob) && startingJob)
{
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, Loc.GetString(playerInfo.StartingJob), uiScale, playerInfo.Connected ? Color.GreenYellow : Color.White);
currentOffset += lineoffset;
}
if (classic && playerInfo.Antag)
{
args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 3), _antagLabelClassic, uiScale, _antagColorClassic); // Frontier: 2<3
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, _antagLabelClassic, uiScale, Color.OrangeRed);
currentOffset += lineoffset;
}
else if (!classic && _filter.Contains(playerInfo.RoleProto))
{
var label = Loc.GetString(playerInfo.RoleProto.Name).ToUpper();
var color = playerInfo.RoleProto.Color;
args.ScreenHandle.DrawString(_font, screenCoordinates + (lineoffset * 3), label, uiScale, color); // Frontier: 2<3
args.ScreenHandle.DrawString(_font, screenCoordinates + currentOffset, label, uiScale, color);
currentOffset += lineoffset;
}
args.ScreenHandle.DrawString(_font, screenCoordinates+lineoffset, playerInfo.Username, uiScale, playerInfo.Connected ? Color.Yellow : Color.White);
args.ScreenHandle.DrawString(_font, screenCoordinates, playerInfo.CharacterName, uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White);
args.ScreenHandle.DrawString(_font, screenCoordinates + lineoffset * 2, $"Balance: {balance}", uiScale, playerInfo.Connected ? Color.Aquamarine : Color.White); // Frontier
}
}
}
@@ -0,0 +1,20 @@
<Control
xmlns="https://spacestation14.io"
xmlns:viewport="clr-namespace:Content.Client.Viewport"
MouseFilter="Stop">
<PanelContainer StyleClasses="BackgroundDark" Name="AdminCameraWindowRoot" Access="Public">
<BoxContainer Orientation="Vertical" Access="Public">
<!-- Camera -->
<Control VerticalExpand="True" Name="CameraViewBox">
<viewport:ScalingViewport Name="CameraView"
MinSize="100 100"
MouseFilter="Ignore" />
</Control>
<!-- Controller buttons -->
<BoxContainer Orientation="Horizontal" Margin="5 5 5 5">
<Button StyleClasses="OpenRight" Name="FollowButton" HorizontalExpand="True" Access="Public" Text="{Loc 'admin-camera-window-follow'}" />
<Button StyleClasses="OpenLeft" Name="PopControl" HorizontalExpand="True" Access="Public" Text="{Loc 'admin-camera-window-pop-out'}" />
</BoxContainer>
</BoxContainer>
</PanelContainer>
</Control>
@@ -0,0 +1,101 @@
using System.Numerics;
using Content.Client.Eye;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.Timing;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
namespace Content.Client.Administration.UI.AdminCamera;
[GenerateTypedNameReferences]
public sealed partial class AdminCameraControl : Control
{
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IClientGameTiming _timing = default!;
public event Action? OnFollow;
public event Action? OnPopoutControl;
private readonly EyeLerpingSystem _eyeLerpingSystem;
private readonly FixedEye _defaultEye = new();
private AdminCameraEuiState? _nextState;
private const float MinimumZoom = 0.1f;
private const float MaximumZoom = 2.0f;
public EntityUid? CurrentCamera;
public float Zoom = 1.0f;
public bool IsPoppedOut;
public AdminCameraControl()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_eyeLerpingSystem = _entManager.System<EyeLerpingSystem>();
CameraView.Eye = _defaultEye;
FollowButton.OnPressed += _ => OnFollow?.Invoke();
PopControl.OnPressed += _ => OnPopoutControl?.Invoke();
CameraView.OnResized += OnResized;
}
private new void OnResized()
{
var width = Math.Max(CameraView.PixelWidth, (int)Math.Floor(CameraView.MinWidth));
var height = Math.Max(CameraView.PixelHeight, (int)Math.Floor(CameraView.MinHeight));
CameraView.ViewportSize = new Vector2i(width, height);
}
protected override void MouseWheel(GUIMouseWheelEventArgs args)
{
base.MouseWheel(args);
if (CameraView.Eye == null)
return;
Zoom = Math.Clamp(Zoom - args.Delta.Y * 0.15f * Zoom, MinimumZoom, MaximumZoom);
CameraView.Eye.Zoom = new Vector2(Zoom, Zoom);
args.Handle();
}
public void SetState(AdminCameraEuiState state)
{
_nextState = state;
}
// I know that this is awful, but I copied this from the solution editor anyways.
// This is needed because EUIs update before the gamestate is applied, which means it will fail to get the uid from the net entity.
// The suggestion from the comment in the solution editor saying to use a BUI is not ideal either:
// - We would need to bind the UI to an entity, but with how BUIs currently work we cannot open it in the same tick as we spawn that entity on the server.
// - We want the UI opened by the user session, not by their currently attached entity. Otherwise it would close in cases where admins move from one entity to another, for example when ghosting.
protected override void FrameUpdate(FrameEventArgs args)
{
if (_nextState == null || _timing.LastRealTick < _nextState.Tick) // make sure the last gamestate has been applied
return;
if (!_entManager.TryGetEntity(_nextState.Camera, out var cameraUid))
return;
if (CurrentCamera == null)
{
_eyeLerpingSystem.AddEye(cameraUid.Value);
CurrentCamera = cameraUid;
}
else if (CurrentCamera != cameraUid)
{
_eyeLerpingSystem.RemoveEye(CurrentCamera.Value);
_eyeLerpingSystem.AddEye(cameraUid.Value);
CurrentCamera = cameraUid;
}
if (_entManager.TryGetComponent<EyeComponent>(CurrentCamera, out var eye))
CameraView.Eye = eye.Eye ?? _defaultEye;
}
}
@@ -0,0 +1,117 @@
using System.Numerics;
using Content.Client.Eui;
using Content.Shared.Administration;
using Content.Shared.Eui;
using JetBrains.Annotations;
using Robust.Client.UserInterface.Controls;
namespace Content.Client.Administration.UI.AdminCamera;
/// <summary>
/// Admin Eui for opening a viewport window to observe entities.
/// Use the "Open Camera" admin verb or the "camera" command to open.
/// </summary>
[UsedImplicitly]
public sealed partial class AdminCameraEui : BaseEui
{
private readonly AdminCameraWindow _window;
private readonly AdminCameraControl _control;
// If not null the camera is in "popped out" mode and is in an external window.
private OSWindow? _OSWindow;
// The last location the window was located at in game.
// Is used for getting knowing where to "pop in" external windows.
private Vector2 _lastLocation;
public AdminCameraEui()
{
_window = new AdminCameraWindow();
_control = new AdminCameraControl();
_window.Contents.AddChild(_control);
_control.OnFollow += () => SendMessage(new AdminCameraFollowMessage());
_window.OnClose += () =>
{
if (!_control.IsPoppedOut)
SendMessage(new CloseEuiMessage());
};
_control.OnPopoutControl += () =>
{
if (_control.IsPoppedOut)
PopIn();
else
PopOut();
};
}
// Pop the window out into an external OS window
private void PopOut()
{
_lastLocation = _window.Position;
// TODO: When there is a way to have a minimum window size, enforce something!
_OSWindow = new OSWindow
{
SetSize = _window.Size,
Title = _window.Title ?? Loc.GetString("admin-camera-window-title-placeholder"),
};
_OSWindow.Show();
if (_OSWindow.Root == null)
return;
_control.Orphan();
_OSWindow.Root.AddChild(_control);
_OSWindow.Closed += () =>
{
if (_control.IsPoppedOut)
SendMessage(new CloseEuiMessage());
};
_control.IsPoppedOut = true;
_control.PopControl.Text = Loc.GetString("admin-camera-window-pop-in");
_window.Close();
}
// Pop the window back into the in game window.
private void PopIn()
{
_control.Orphan();
_window.Contents.AddChild(_control);
_window.Open(_lastLocation);
_control.IsPoppedOut = false;
_control.PopControl.Text = Loc.GetString("admin-camera-window-pop-out");
_OSWindow?.Close();
_OSWindow = null;
}
public override void Opened()
{
base.Opened();
_window.OpenCentered();
}
public override void Closed()
{
base.Closed();
_window.Close();
}
public override void HandleState(EuiStateBase baseState)
{
if (baseState is not AdminCameraEuiState state)
return;
_window.SetState(state);
_control.SetState(state);
}
}
@@ -0,0 +1,6 @@
<DefaultWindow xmlns="https://spacestation14.io"
Title="{Loc admin-camera-window-title-placeholder}"
SetSize="425 550"
MinSize="200 225"
Name="Window">
</DefaultWindow>
@@ -0,0 +1,23 @@
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
namespace Content.Client.Administration.UI.AdminCamera;
[GenerateTypedNameReferences]
public sealed partial class AdminCameraWindow : DefaultWindow
{
public AdminCameraWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
ContentsContainer.Margin = new Thickness(5, 0, 5, 0);
}
public void SetState(AdminCameraEuiState state)
{
Title = Loc.GetString("admin-camera-window-title", ("name", state.Name));
}
}
@@ -30,6 +30,7 @@
<Button Name="FreezeAndMuteToggleButton" Text="{Loc player-panel-freeze-and-mute}" Disabled="True"/>
<Button Name="BanButton" Text="{Loc player-panel-ban}" Disabled="True"/>
<controls:ConfirmButton Name="RejuvenateButton" Text="{Loc player-panel-rejuvenate}" Disabled="True"/>
<Button Name="CameraButton" Text="{Loc player-panel-camera}" Disabled="True"/>
</GridContainer>
<Button Name="JobWhitelistsButton" Text="{Loc player-panel-job-whitelists}" SetWidth="136" SetHeight="27" Disabled="True"/> <!-- DeltaV: Job whitelists -->
</BoxContainer>
@@ -19,6 +19,7 @@ public sealed partial class PlayerPanel : FancyWindow
public event Action<NetUserId?>? OnOpenBans;
public event Action<NetUserId?>? OnAhelp;
public event Action<string?>? OnKick;
public event Action<string?>? OnCamera;
public event Action<NetUserId?>? OnOpenBanPanel;
public event Action<NetUserId?, bool>? OnWhitelistToggle;
public event Action? OnFreezeAndMuteToggle;
@@ -40,6 +41,7 @@ public sealed partial class PlayerPanel : FancyWindow
UsernameCopyButton.OnPressed += _ => OnUsernameCopy?.Invoke(PlayerName.Text ?? "");
BanButton.OnPressed += _ => OnOpenBanPanel?.Invoke(TargetPlayer);
KickButton.OnPressed += _ => OnKick?.Invoke(TargetUsername);
CameraButton.OnPressed += _ => OnCamera?.Invoke(TargetUsername);
NotesButton.OnPressed += _ => OnOpenNotes?.Invoke(TargetPlayer);
ShowBansButton.OnPressed += _ => OnOpenBans?.Invoke(TargetPlayer);
AhelpButton.OnPressed += _ => OnAhelp?.Invoke(TargetPlayer);
@@ -132,5 +134,6 @@ public sealed partial class PlayerPanel : FancyWindow
RejuvenateButton.Disabled = !_adminManager.HasFlag(AdminFlags.Debug);
DeleteButton.Disabled = !_adminManager.HasFlag(AdminFlags.Debug);
JobWhitelistsButton.Disabled = !_adminManager.HasFlag(AdminFlags.Whitelist); // DeltaV
CameraButton.Disabled = !_adminManager.CanCommand("camera");
}
}
@@ -25,6 +25,7 @@ public sealed class PlayerPanelEui : BaseEui
PlayerPanel.OnOpenNotes += id => _console.ExecuteCommand($"adminnotes \"{id}\"");
// Kick command does not support GUIDs
PlayerPanel.OnKick += username => _console.ExecuteCommand($"kick \"{username}\"");
PlayerPanel.OnCamera += username => _console.ExecuteCommand($"camera \"{username}\"");
PlayerPanel.OnOpenBanPanel += id => _console.ExecuteCommand($"banpanel \"{id}\"");
PlayerPanel.OnOpenBans += id => _console.ExecuteCommand($"banlist \"{id}\"");
PlayerPanel.OnAhelp += id => _console.ExecuteCommand($"openahelp \"{id}\"");
@@ -8,6 +8,8 @@ namespace Content.Client.AlertLevel;
public sealed class AlertLevelDisplaySystem : EntitySystem
{
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
base.Initialize();
@@ -21,26 +23,26 @@ public sealed class AlertLevelDisplaySystem : EntitySystem
{
return;
}
var layer = args.Sprite.LayerMapReserveBlank(AlertLevelDisplay.Layer);
var layer = _sprite.LayerMapReserve((uid, args.Sprite), AlertLevelDisplay.Layer);
if (args.AppearanceData.TryGetValue(AlertLevelDisplay.Powered, out var poweredObject))
{
args.Sprite.LayerSetVisible(layer, poweredObject is true);
_sprite.LayerSetVisible((uid, args.Sprite), layer, poweredObject is true);
}
if (!args.AppearanceData.TryGetValue(AlertLevelDisplay.CurrentLevel, out var level))
{
args.Sprite.LayerSetState(layer, alertLevelDisplay.AlertVisuals.Values.First());
_sprite.LayerSetRsiState((uid, args.Sprite), layer, alertLevelDisplay.AlertVisuals.Values.First());
return;
}
if (alertLevelDisplay.AlertVisuals.TryGetValue((string) level, out var visual))
if (alertLevelDisplay.AlertVisuals.TryGetValue((string)level, out var visual))
{
args.Sprite.LayerSetState(layer, visual);
_sprite.LayerSetRsiState((uid, args.Sprite), layer, visual);
}
else
{
args.Sprite.LayerSetState(layer, alertLevelDisplay.AlertVisuals.Values.First());
_sprite.LayerSetRsiState((uid, args.Sprite), layer, alertLevelDisplay.AlertVisuals.Values.First());
}
}
}
@@ -0,0 +1,253 @@
using Content.Client.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.EntitySystems;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using System.Numerics;
namespace Content.Client.Atmos.Overlays;
/// <summary>
/// Renders a thermal heatmap overlay for gas tiles, used for equipment like thermal glasses.
/// /// </summary>
public sealed class GasTileDangerousTemperatureOverlay : Overlay
{
public override bool RequestScreenTexture { get; set; } = false;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IClyde _clyde = default!;
private GasTileOverlaySystem? _gasTileOverlay;
private readonly SharedTransformSystem _xformSys;
private EntityQuery<GasTileOverlayComponent> _overlayQuery;
private IRenderTexture? _temperatureTarget;
// Cache used to transform ThermalByte into Color for overlay
private readonly Color[] _colorCache = new Color[256];
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
public GasTileDangerousTemperatureOverlay()
{
IoCManager.InjectDependencies(this);
_xformSys = _entManager.System<SharedTransformSystem>();
_overlayQuery = _entManager.GetEntityQuery<GasTileOverlayComponent>();
for (byte i = 0; i <= ThermalByte.TempResolution; i++)
{
_colorCache[i] = PreCalculateColor(i);
}
_colorCache[ThermalByte.StateVacuum] = Color.Teal;
_colorCache[ThermalByte.StateVacuum].A = 0.6f;
_colorCache[ThermalByte.AtmosImpossible] = Color.Transparent;
#if DEBUG // This shouldn't happend so tell me if you see this LimeGreen on the screen
_colorCache[ThermalByte.ReservedFuture0] = Color.LimeGreen;
_colorCache[ThermalByte.ReservedFuture1] = Color.LimeGreen;
_colorCache[ThermalByte.ReservedFuture2] = Color.LimeGreen;
#else
_colorCache[ThermalByte.ReservedFuture0] = Color.Transparent;
_colorCache[ThermalByte.ReservedFuture1] = Color.Transparent;
_colorCache[ThermalByte.ReservedFuture2] = Color.Transparent;
#endif
}
/// <summary>
/// Used for Calculating onscreen color from ThermalByte core value
/// /// </summary>
private static Color PreCalculateColor(byte byteTemp)
{
// Color Thresholds in Kelvin
// -150 C
const float deepFreezeK = 123.15f;
// -50 C
const float freezeStartK = 223.15f;
// 0 C
const float waterFreezeK = 273.15f;
// 50 C
const float heatStartK = 323.15f;
// 100 C
const float waterBoilK = 373.15f;
// 300 C
const float superHeatK = 573.15f;
var tempK = byteTemp * ThermalByte.TempDegreeResolution;
// Neutral Zone Check (0C to 50C)
// If between 273.15K and 323.15K, it's transparent.
if (tempK >= waterFreezeK && tempK < heatStartK)
{
return Color.Transparent;
}
Color resultingColor;
switch (tempK)
{
case < deepFreezeK:
resultingColor = Color.FromHex("#330066");
resultingColor.A = 0.7f;
break;
case < freezeStartK:
// Interpolate Deep Purple -> Blue
// Range: 123.15 to 223.15 (Span: 100)
resultingColor = Color.InterpolateBetween(
Color.FromHex("#330066"),
Color.Blue,
(tempK - deepFreezeK) * 0.01f);
resultingColor.A = 0.6f;
break;
case < waterFreezeK:
// Interpolate Blue -> Transparent
// Range: 223.15 to 273.15 (Span: 50)
resultingColor = Color.InterpolateBetween(
new Color(Color.Blue.R, Color.Blue.G, Color.Blue.B, 0.6f),
new Color(Color.Blue.R, Color.Blue.G, Color.Blue.B, 0.2f),
(tempK - freezeStartK) * 0.02f);
break;
case < waterBoilK:
// Interpolate Transparent -> Yellow
// Range: 323.15 to 373.15 (Span: 50)
resultingColor = Color.InterpolateBetween(
new Color(Color.Yellow.R, Color.Yellow.G, Color.Yellow.B, 0.2f),
new Color(Color.Yellow.R, Color.Yellow.G, Color.Yellow.B, 0.6f),
(tempK - heatStartK) * 0.02f);
break;
case < superHeatK:
// Interpolate Yellow -> Red
// Range: 373.15 to 573.15 (Span: 200)
resultingColor = Color.InterpolateBetween(
Color.Yellow,
Color.Red,
(tempK - waterBoilK) * 0.005f);
resultingColor.A = 0.6f;
break;
default:
resultingColor = Color.DarkRed;
resultingColor.A = 0.7f;
break;
}
return resultingColor;
}
protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace)
return false;
_gasTileOverlay ??= _entManager.System<GasTileOverlaySystem>();
if (_gasTileOverlay == null)
return false;
var target = args.Viewport.RenderTarget;
if (_temperatureTarget?.Texture.Size != target.Size)
{
_temperatureTarget?.Dispose();
_temperatureTarget = _clyde.CreateRenderTarget(
target.Size,
new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb),
name: nameof(GasTileDangerousTemperatureOverlay));
}
var drawHandle = args.WorldHandle;
var worldBounds = args.WorldBounds;
var worldAABB = args.WorldAABB;
var mapId = args.MapId;
var worldToViewportLocal = args.Viewport.GetWorldToLocalMatrix();
var anyGasDrawn = false;
List<Entity<MapGridComponent>> grids = new();
drawHandle.RenderInRenderTarget(_temperatureTarget,
() =>
{
grids.Clear();
_mapManager.FindGridsIntersecting(mapId, worldAABB, ref grids);
foreach (var grid in grids)
{
if (!_overlayQuery.TryGetComponent(grid.Owner, out var comp))
continue;
var gridTileSizeVec = grid.Comp.TileSizeVector;
var gridTileCenterVec = grid.Comp.TileSizeHalfVector;
var gridEntToWorld = _xformSys.GetWorldMatrix(grid.Owner);
var gridEntToViewportLocal = gridEntToWorld * worldToViewportLocal;
drawHandle.SetTransform(gridEntToViewportLocal);
var worldToGridLocal = _xformSys.GetInvWorldMatrix(grid.Owner);
var floatBounds = worldToGridLocal.TransformBox(worldBounds).Enlarged(grid.Comp.TileSize);
var localBounds = new Box2i(
(int)MathF.Floor(floatBounds.Left),
(int)MathF.Floor(floatBounds.Bottom),
(int)MathF.Ceiling(floatBounds.Right),
(int)MathF.Ceiling(floatBounds.Top));
foreach (var chunk in comp.Chunks.Values)
{
var enumerator = new GasChunkEnumerator(chunk);
while (enumerator.MoveNext(out var tileGas))
{
var tilePosition = chunk.Origin + (enumerator.X, enumerator.Y);
if (!localBounds.Contains(tilePosition))
continue;
var gasColor = _colorCache[tileGas.ByteGasTemperature.Value];
if (gasColor.A <= 0f)
continue;
anyGasDrawn = true;
drawHandle.DrawRect(
Box2.CenteredAround(tilePosition + gridTileCenterVec, gridTileSizeVec),
gasColor
);
}
}
}
},
new Color(0, 0, 0, 0));
drawHandle.SetTransform(Matrix3x2.Identity);
if (!anyGasDrawn)
{
_temperatureTarget?.Dispose();
_temperatureTarget = null;
return false;
}
return true;
}
protected override void Draw(in OverlayDrawArgs args)
{
if (_temperatureTarget is null)
return;
args.WorldHandle.DrawTextureRect(_temperatureTarget.Texture, args.WorldBounds);
args.WorldHandle.SetTransform(Matrix3x2.Identity);
}
protected override void DisposeBehavior()
{
_temperatureTarget?.Dispose();
_temperatureTarget = null;
base.DisposeBehavior();
}
}
@@ -36,8 +36,6 @@ public sealed partial class ContentAudioSystem
[Dependency] private readonly IStateManager _state = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly CombatModeSystem _combatModeSystem = default!; //CLIENT ONE. WHY ARE THERE 3???
[Dependency] private readonly IPrototypeManager _protMan = default!;
[Dependency] private readonly SpaceBiomeSystem _spaceBiome = default!;
//options menu ---
private static float _volumeSliderAmbient;
+13 -12
View File
@@ -12,6 +12,7 @@ public sealed class JukeboxSystem : SharedJukeboxSystem
[Dependency] private readonly AnimationPlayerSystem _animationPlayer = default!;
[Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
[Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -64,7 +65,7 @@ public sealed class JukeboxSystem : SharedJukeboxSystem
visualState = JukeboxVisualState.On;
}
UpdateAppearance(uid, visualState, component, sprite);
UpdateAppearance((uid, sprite), visualState, component);
}
private void OnAppearanceChange(EntityUid uid, JukeboxComponent component, ref AppearanceChangeEvent args)
@@ -78,25 +79,25 @@ public sealed class JukeboxSystem : SharedJukeboxSystem
visualState = JukeboxVisualState.On;
}
UpdateAppearance(uid, visualState, component, args.Sprite);
UpdateAppearance((uid, args.Sprite), visualState, component);
}
private void UpdateAppearance(EntityUid uid, JukeboxVisualState visualState, JukeboxComponent component, SpriteComponent sprite)
private void UpdateAppearance(Entity<SpriteComponent> entity, JukeboxVisualState visualState, JukeboxComponent component)
{
SetLayerState(JukeboxVisualLayers.Base, component.OffState, sprite);
SetLayerState(JukeboxVisualLayers.Base, component.OffState, entity);
switch (visualState)
{
case JukeboxVisualState.On:
SetLayerState(JukeboxVisualLayers.Base, component.OnState, sprite);
SetLayerState(JukeboxVisualLayers.Base, component.OnState, entity);
break;
case JukeboxVisualState.Off:
SetLayerState(JukeboxVisualLayers.Base, component.OffState, sprite);
SetLayerState(JukeboxVisualLayers.Base, component.OffState, entity);
break;
case JukeboxVisualState.Select:
PlayAnimation(uid, JukeboxVisualLayers.Base, component.SelectState, 1.0f, sprite);
PlayAnimation(entity.Owner, JukeboxVisualLayers.Base, component.SelectState, 1.0f, entity);
break;
}
}
@@ -109,7 +110,7 @@ public sealed class JukeboxSystem : SharedJukeboxSystem
if (!_animationPlayer.HasRunningAnimation(uid, state))
{
var animation = GetAnimation(layer, state, animationTime);
sprite.LayerSetVisible(layer, true);
_sprite.LayerSetVisible((uid, sprite), layer, true);
_animationPlayer.Play(uid, animation, state);
}
}
@@ -133,13 +134,13 @@ public sealed class JukeboxSystem : SharedJukeboxSystem
};
}
private void SetLayerState(JukeboxVisualLayers layer, string? state, SpriteComponent sprite)
private void SetLayerState(JukeboxVisualLayers layer, string? state, Entity<SpriteComponent> sprite)
{
if (string.IsNullOrEmpty(state))
return;
sprite.LayerSetVisible(layer, true);
sprite.LayerSetAutoAnimated(layer, true);
sprite.LayerSetState(layer, state);
_sprite.LayerSetVisible(sprite.AsNullable(), layer, true);
_sprite.LayerSetAutoAnimated(sprite.AsNullable(), layer, true);
_sprite.LayerSetRsiState(sprite.AsNullable(), layer, state);
}
}
@@ -1,11 +1,14 @@
using Content.Client.Botany.Components;
using Content.Shared.Botany;
using Robust.Client.GameObjects;
using Robust.Shared.Utility;
namespace Content.Client.Botany;
public sealed class PlantHolderVisualizerSystem : VisualizerSystem<PlantHolderVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
base.Initialize();
@@ -17,8 +20,8 @@ public sealed class PlantHolderVisualizerSystem : VisualizerSystem<PlantHolderVi
if (!TryComp<SpriteComponent>(uid, out var sprite))
return;
sprite.LayerMapReserveBlank(PlantHolderLayers.Plant);
sprite.LayerSetVisible(PlantHolderLayers.Plant, false);
_sprite.LayerMapReserve((uid, sprite), PlantHolderLayers.Plant);
_sprite.LayerSetVisible((uid, sprite), PlantHolderLayers.Plant, false);
}
protected override void OnAppearanceChange(EntityUid uid, PlantHolderVisualsComponent component, ref AppearanceChangeEvent args)
@@ -31,12 +34,12 @@ public sealed class PlantHolderVisualizerSystem : VisualizerSystem<PlantHolderVi
{
var valid = !string.IsNullOrWhiteSpace(state);
args.Sprite.LayerSetVisible(PlantHolderLayers.Plant, valid);
_sprite.LayerSetVisible((uid, args.Sprite), PlantHolderLayers.Plant, valid);
if (valid)
{
args.Sprite.LayerSetRSI(PlantHolderLayers.Plant, rsi);
args.Sprite.LayerSetState(PlantHolderLayers.Plant, state);
_sprite.LayerSetRsi((uid, args.Sprite), PlantHolderLayers.Plant, new ResPath(rsi));
_sprite.LayerSetRsiState((uid, args.Sprite), PlantHolderLayers.Plant, state);
}
}
}
+5 -4
View File
@@ -14,6 +14,7 @@ internal sealed class BuckleSystem : SharedBuckleSystem
[Dependency] private readonly RotationVisualizerSystem _rotationVisualizerSystem = default!;
[Dependency] private readonly IEyeManager _eye = default!;
[Dependency] private readonly SharedTransformSystem _xformSystem = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -73,11 +74,11 @@ internal sealed class BuckleSystem : SharedBuckleSystem
{
// This will only assign if empty, it won't get overwritten by new depth on multiple calls, which do happen easily
buckle.OriginalDrawDepth ??= buckledSprite.DrawDepth;
buckledSprite.DrawDepth = strapSprite.DrawDepth - 1;
_sprite.SetDrawDepth((buckledEntity, buckledSprite), strapSprite.DrawDepth - 1);
}
else if (buckle.OriginalDrawDepth.HasValue)
{
buckledSprite.DrawDepth = buckle.OriginalDrawDepth.Value;
_sprite.SetDrawDepth((buckledEntity, buckledSprite), buckle.OriginalDrawDepth.Value);
buckle.OriginalDrawDepth = null;
}
}
@@ -101,7 +102,7 @@ internal sealed class BuckleSystem : SharedBuckleSystem
return;
ent.Comp.OriginalDrawDepth ??= buckledSprite.DrawDepth;
buckledSprite.DrawDepth = strapSprite.DrawDepth - 1;
_sprite.SetDrawDepth((ent.Owner, buckledSprite), strapSprite.DrawDepth - 1);
}
/// <summary>
@@ -115,7 +116,7 @@ internal sealed class BuckleSystem : SharedBuckleSystem
if (!ent.Comp.OriginalDrawDepth.HasValue)
return;
buckledSprite.DrawDepth = ent.Comp.OriginalDrawDepth.Value;
_sprite.SetDrawDepth((ent.Owner, buckledSprite), ent.Comp.OriginalDrawDepth.Value);
ent.Comp.OriginalDrawDepth = null;
}
@@ -8,7 +8,6 @@ using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Serilog;
namespace Content.Client.Cargo.UI;
@@ -32,6 +32,10 @@ public sealed class CharacterInfoSystem : EntitySystem
private void OnCharacterInfoEvent(CharacterInfoEvent msg, EntitySessionEventArgs args)
{
var entity = GetEntity(msg.NetEntity);
// Mono - fix
if (TerminatingOrDeleted(entity))
return;
var data = new CharacterData(entity, msg.JobTitle, msg.Objectives, msg.Briefing, Name(entity));
OnCharacterUpdate?.Invoke(data);
+2 -2
View File
@@ -9,13 +9,13 @@
<!-- Main -->
<ui:RadialContainer Name="Main" VerticalExpand="True" HorizontalExpand="True" InitialRadius="100" ReserveSpaceForHiddenChildren="False">
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'emote-menu-category-general'}" TargetLayer="General" Visible="False">
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Clothing/Head/Soft/mimesoft.rsi/icon.png"/>
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" Name="GeneralCategoryTexture"/>
</ui:RadialMenuTextureButtonWithSector>
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'emote-menu-category-vocal'}" TargetLayer="Vocal" Visible="False">
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Emotes/vocal.png"/>
</ui:RadialMenuTextureButtonWithSector>
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'emote-menu-category-hands'}" TargetLayer="Hands" Visible="False">
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Clothing/Hands/Gloves/latex.rsi/icon.png"/>
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" Name="HandsCategoryTexture"/>
</ui:RadialMenuTextureButtonWithSector>
</ui:RadialContainer>
@@ -5,10 +5,12 @@ using Content.Shared.Speech;
using Content.Shared.Whitelist;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Client.Chat.UI;
@@ -86,6 +88,9 @@ public sealed partial class EmotesMenu : RadialMenu
continue;
AddEmoteClickAction(container);
}
GeneralCategoryTexture.Texture = spriteSystem.Frame0(new SpriteSpecifier.Rsi(new ResPath("/Textures/Clothing/Head/Soft/mimesoft.rsi"), "icon"));
HandsCategoryTexture.Texture = spriteSystem.Frame0(new SpriteSpecifier.Rsi(new ResPath("/Textures/Clothing/Hands/Gloves/latex.rsi"), "icon"));
}
private void AddEmoteClickAction(RadialContainer container)
@@ -6,7 +6,6 @@ using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Client.Utility;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using System.Linq;
@@ -14,6 +13,7 @@ using System.Numerics;
using Content.Shared.FixedPoint;
using Robust.Client.Graphics;
using static Robust.Client.UserInterface.Controls.BoxContainer;
using Robust.Client.GameObjects;
namespace Content.Client.Chemistry.UI
{
@@ -24,6 +24,8 @@ namespace Content.Client.Chemistry.UI
public sealed partial class ChemMasterWindow : FancyWindow
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
private readonly SpriteSystem _sprite;
public event Action<BaseButton.ButtonEventArgs, ReagentButton>? OnReagentButtonPressed;
public readonly Button[] PillTypeButtons;
@@ -37,6 +39,7 @@ namespace Content.Client.Chemistry.UI
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
_sprite = _entityManager.System<SpriteSystem>();
// Pill type selection buttons, in total there are 20 pills.
// Pill rsi file should have states named as pill1, pill2, and so on.
@@ -67,9 +70,9 @@ namespace Content.Client.Chemistry.UI
// Generate buttons textures
var specifier = new SpriteSpecifier.Rsi(resourcePath, "pill" + (i + 1));
TextureRect pillTypeTexture = new TextureRect
var pillTypeTexture = new TextureRect
{
Texture = specifier.Frame0(),
Texture = _sprite.Frame0(specifier),
TextureScale = new Vector2(1.75f, 1.75f),
Stretch = TextureRect.StretchMode.KeepCentered,
};
@@ -249,7 +252,7 @@ namespace Content.Client.Chemistry.UI
ChemMasterSortingType.Latest => Loc.GetString("chem-master-window-sort-type-latest"),
_ => Loc.GetString("chem-master-window-sort-type-none")
};
OutputBufferDraw.Pressed = state.DrawSource == ChemMasterDrawSource.Internal;
OutputBeakerDraw.Pressed = state.DrawSource == ChemMasterDrawSource.External;
@@ -434,7 +437,7 @@ namespace Content.Client.Chemistry.UI
get => LabelLineEdit.Text;
set => LabelLineEdit.Text = value;
}
private void SetBufferText(FixedPoint2? volume, string text)
{
BufferCurrentVolume.Text = $" {volume ?? FixedPoint2.Zero}u";
@@ -50,7 +50,7 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
if (args.Sprite == null)
return;
if (!args.Sprite.LayerMapTryGet(component.Layer, out var fillLayer))
if (!SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.Layer, out var fillLayer, false))
return;
var maxFillLevels = component.MaxFillLevels;
@@ -68,9 +68,9 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
}
if (component.Metamorphic)
{
if (args.Sprite.LayerMapTryGet(component.BaseLayer, out var baseLayer))
if (SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.BaseLayer, out var baseLayer, false))
{
var hasOverlay = args.Sprite.LayerMapTryGet(component.OverlayLayer, out var overlayLayer);
var hasOverlay = SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.OverlayLayer, out var overlayLayer, false);
if (AppearanceSystem.TryGetData<string>(uid, SolutionContainerVisuals.BaseOverride,
out var baseOverride,
@@ -80,35 +80,35 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
if (reagentProto?.MetamorphicSprite is { } sprite)
{
args.Sprite.LayerSetSprite(baseLayer, sprite);
SpriteSystem.LayerSetSprite((uid, args.Sprite), baseLayer, sprite);
if (reagentProto.MetamorphicMaxFillLevels > 0)
{
args.Sprite.LayerSetVisible(fillLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, true);
maxFillLevels = reagentProto.MetamorphicMaxFillLevels;
fillBaseName = reagentProto.MetamorphicFillBaseName;
changeColor = reagentProto.MetamorphicChangeColor;
fillSprite = sprite;
}
else
args.Sprite.LayerSetVisible(fillLayer, false);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, false);
if (hasOverlay)
args.Sprite.LayerSetVisible(overlayLayer, false);
SpriteSystem.LayerSetVisible((uid, args.Sprite), overlayLayer, false);
}
else
{
args.Sprite.LayerSetVisible(fillLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, true);
if (hasOverlay)
args.Sprite.LayerSetVisible(overlayLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), overlayLayer, true);
if (component.MetamorphicDefaultSprite != null)
args.Sprite.LayerSetSprite(baseLayer, component.MetamorphicDefaultSprite);
SpriteSystem.LayerSetSprite((uid, args.Sprite), baseLayer, component.MetamorphicDefaultSprite);
}
}
}
}
else
{
args.Sprite.LayerSetVisible(fillLayer, true);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, true);
}
var closestFillSprite = ContentHelpers.RoundToLevels(fraction, 1, maxFillLevels + 1);
@@ -120,25 +120,25 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
var stateName = fillBaseName + closestFillSprite;
if (fillSprite != null)
args.Sprite.LayerSetSprite(fillLayer, fillSprite);
args.Sprite.LayerSetState(fillLayer, stateName);
SpriteSystem.LayerSetSprite((uid, args.Sprite), fillLayer, fillSprite);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), fillLayer, stateName);
if (changeColor && AppearanceSystem.TryGetData<Color>(uid, SolutionContainerVisuals.Color, out var color, args.Component))
args.Sprite.LayerSetColor(fillLayer, color);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, color);
else
args.Sprite.LayerSetColor(fillLayer, Color.White);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, Color.White);
}
else
{
if (component.EmptySpriteName == null)
args.Sprite.LayerSetVisible(fillLayer, false);
SpriteSystem.LayerSetVisible((uid, args.Sprite), fillLayer, false);
else
{
args.Sprite.LayerSetState(fillLayer, component.EmptySpriteName);
SpriteSystem.LayerSetRsiState((uid, args.Sprite), fillLayer, component.EmptySpriteName);
if (changeColor)
args.Sprite.LayerSetColor(fillLayer, component.EmptySpriteColor);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, component.EmptySpriteColor);
else
args.Sprite.LayerSetColor(fillLayer, Color.White);
SpriteSystem.LayerSetColor((uid, args.Sprite), fillLayer, Color.White);
}
}
+10 -12
View File
@@ -1,26 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>12</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Client\</OutputPath>
<OutputType Condition="'$(FullRelease)' != 'True'">Exe</OutputType>
<WarningsAsErrors>nullable</WarningsAsErrors>
<Nullable>enable</Nullable>
<Configurations>Debug;Release;Tools;DebugOpt</Configurations>
<Platforms>AnyCPU</Platforms>
<WarningsAsErrors>RA0032;nullable</WarningsAsErrors>
</PropertyGroup>
<Import Project="../MSBuild/Content.props" />
<ItemGroup>
<PackageReference Include="Nett" />
<PackageReference Include="JetBrains.Annotations" PrivateAssets="All" />
<PackageReference Include="SixLabors.ImageSharp" />
<PackageReference Include="Pidgin" />
<PackageReference Include="Robust.Shared.AuthLib" />
</ItemGroup>
<Import Project="..\RobustToolbox\Imports\Lidgren.props" />
<Import Project="..\RobustToolbox\Imports\Client.props" />
<Import Project="..\RobustToolbox\Imports\Shared.props" />
<ItemGroup>
<ProjectReference Include="..\RobustToolbox\Lidgren.Network\Lidgren.Network.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Shared.Maths\Robust.Shared.Maths.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Shared\Robust.Shared.csproj" />
<ProjectReference Include="..\RobustToolbox\Robust.Client\Robust.Client.csproj" />
<ProjectReference Include="..\Content.Shared\Content.Shared.csproj" />
</ItemGroup>
<ItemGroup>
+3 -2
View File
@@ -1,4 +1,5 @@
using Robust.Client.Graphics;
using System.Numerics;
using Robust.Client.Graphics;
using Robust.Client.UserInterface;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
@@ -34,7 +35,7 @@ namespace Content.Client.Cooldown
if (Progress >= 0f)
{
var hue = (5f / 18f) * lerp;
color = Color.FromHsv((hue, 0.75f, 0.75f, 0.50f));
color = Color.FromHsv(new Vector4(hue, 0.75f, 0.75f, 0.50f));
}
else
{
+7 -5
View File
@@ -4,12 +4,14 @@ using Content.Shared.Cuffs.Components;
using Content.Shared.Humanoid;
using Robust.Client.GameObjects;
using Robust.Shared.GameStates;
using Robust.Shared.Utility;
namespace Content.Client.Cuffs;
public sealed class CuffableSystem : SharedCuffableSystem
{
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -22,7 +24,7 @@ public sealed class CuffableSystem : SharedCuffableSystem
private void OnCuffableShutdown(EntityUid uid, CuffableComponent component, ComponentShutdown args)
{
if (TryComp<SpriteComponent>(uid, out var sprite))
sprite.LayerSetVisible(HumanoidVisualLayers.Handcuffs, false);
_sprite.LayerSetVisible((uid, sprite), HumanoidVisualLayers.Handcuffs, false);
}
private void OnCuffableHandleState(EntityUid uid, CuffableComponent component, ref ComponentHandleState args)
@@ -39,22 +41,22 @@ public sealed class CuffableSystem : SharedCuffableSystem
if (!TryComp<SpriteComponent>(uid, out var sprite))
return;
var cuffed = cuffState.NumHandsCuffed > 0;
sprite.LayerSetVisible(HumanoidVisualLayers.Handcuffs, cuffed);
_sprite.LayerSetVisible((uid, sprite), HumanoidVisualLayers.Handcuffs, cuffed);
// if they are not cuffed, that means that we didn't get a valid color,
// iconstate, or RSI. that also means we don't need to update the sprites.
if (!cuffed)
return;
sprite.LayerSetColor(HumanoidVisualLayers.Handcuffs, cuffState.Color!.Value);
_sprite.LayerSetColor((uid, sprite), HumanoidVisualLayers.Handcuffs, cuffState.Color!.Value);
if (!Equals(component.CurrentRSI, cuffState.RSI) && cuffState.RSI != null) // we don't want to keep loading the same RSI
{
component.CurrentRSI = cuffState.RSI;
sprite.LayerSetState(HumanoidVisualLayers.Handcuffs, cuffState.IconState, component.CurrentRSI);
_sprite.LayerSetRsi((uid, sprite), _sprite.LayerMapGet((uid, sprite), HumanoidVisualLayers.Handcuffs), new ResPath(component.CurrentRSI), cuffState.IconState);
}
else
{
sprite.LayerSetState(HumanoidVisualLayers.Handcuffs, cuffState.IconState);
_sprite.LayerSetRsiState((uid, sprite), HumanoidVisualLayers.Handcuffs, cuffState.IconState);
}
}
}
+2 -1
View File
@@ -1,4 +1,5 @@
using Content.Shared.Disposal;
using System.Numerics;
using Content.Shared.Disposal;
using Content.Shared.Disposal.Unit;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
+7 -6
View File
@@ -11,6 +11,7 @@ public sealed class DoorSystem : SharedDoorSystem
{
[Dependency] private readonly AnimationPlayerSystem _animationSystem = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -85,7 +86,7 @@ public sealed class DoorSystem : SharedDoorSystem
state = DoorState.Closed;
if (AppearanceSystem.TryGetData<string>(entity, DoorVisuals.BaseRSI, out var baseRsi, args.Component))
UpdateSpriteLayers(args.Sprite, baseRsi);
UpdateSpriteLayers((entity.Owner, args.Sprite), baseRsi);
if (_animationSystem.HasRunningAnimation(entity, DoorComponent.AnimationKey))
_animationSystem.Stop(entity.Owner, DoorComponent.AnimationKey);
@@ -95,21 +96,21 @@ public sealed class DoorSystem : SharedDoorSystem
private void UpdateAppearanceForDoorState(Entity<DoorComponent> entity, SpriteComponent sprite, DoorState state)
{
sprite.DrawDepth = state is DoorState.Open ? entity.Comp.OpenDrawDepth : entity.Comp.ClosedDrawDepth;
_sprite.SetDrawDepth((entity.Owner, sprite), state is DoorState.Open ? entity.Comp.OpenDrawDepth : entity.Comp.ClosedDrawDepth);
switch (state)
{
case DoorState.Open:
foreach (var (layer, layerState) in entity.Comp.OpenSpriteStates)
{
sprite.LayerSetState(layer, layerState);
_sprite.LayerSetRsiState((entity.Owner, sprite), layer, layerState);
}
return;
case DoorState.Closed:
foreach (var (layer, layerState) in entity.Comp.ClosedSpriteStates)
{
sprite.LayerSetState(layer, layerState);
_sprite.LayerSetRsiState((entity.Owner, sprite), layer, layerState);
}
return;
@@ -138,7 +139,7 @@ public sealed class DoorSystem : SharedDoorSystem
}
}
private void UpdateSpriteLayers(SpriteComponent sprite, string baseRsi)
private void UpdateSpriteLayers(Entity<SpriteComponent> sprite, string baseRsi)
{
if (!_resourceCache.TryGetResource<RSIResource>(SpriteSpecifierSerializer.TextureRoot / baseRsi, out var res))
{
@@ -146,6 +147,6 @@ public sealed class DoorSystem : SharedDoorSystem
return;
}
sprite.BaseRSI = res.RSI;
_sprite.SetBaseRsi(sprite.AsNullable(), res.RSI);
}
}
@@ -11,6 +11,7 @@ namespace Content.Client.Electrocution;
public sealed class ElectrocutionHUDVisualizerSystem : VisualizerSystem<ElectrocutionHUDVisualsComponent>
{
[Dependency] private readonly IPlayerManager _playerMan = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -53,15 +54,12 @@ public sealed class ElectrocutionHUDVisualizerSystem : VisualizerSystem<Electroc
private void ShowHUD()
{
var electrifiedQuery = AllEntityQuery<ElectrocutionHUDVisualsComponent, AppearanceComponent, SpriteComponent>();
while (electrifiedQuery.MoveNext(out var uid, out var _, out var appearanceComp, out var spriteComp))
while (electrifiedQuery.MoveNext(out var uid, out _, out var appearanceComp, out var spriteComp))
{
if (!AppearanceSystem.TryGetData<bool>(uid, ElectrifiedVisuals.IsElectrified, out var electrified, appearanceComp))
continue;
if (electrified)
spriteComp.LayerSetVisible(ElectrifiedLayers.HUD, true);
else
spriteComp.LayerSetVisible(ElectrifiedLayers.HUD, false);
_sprite.LayerSetVisible((uid, spriteComp), ElectrifiedLayers.HUD, electrified);
}
}
@@ -70,10 +68,9 @@ public sealed class ElectrocutionHUDVisualizerSystem : VisualizerSystem<Electroc
private void RemoveHUD()
{
var electrifiedQuery = AllEntityQuery<ElectrocutionHUDVisualsComponent, AppearanceComponent, SpriteComponent>();
while (electrifiedQuery.MoveNext(out var uid, out var _, out var appearanceComp, out var spriteComp))
while (electrifiedQuery.MoveNext(out var uid, out _, out _, out var spriteComp))
{
spriteComp.LayerSetVisible(ElectrifiedLayers.HUD, false);
_sprite.LayerSetVisible((uid, spriteComp), ElectrifiedLayers.HUD, false);
}
}
@@ -87,9 +84,6 @@ public sealed class ElectrocutionHUDVisualizerSystem : VisualizerSystem<Electroc
return;
var player = _playerMan.LocalEntity;
if (electrified && HasComp<ShowElectrocutionHUDComponent>(player))
args.Sprite.LayerSetVisible(ElectrifiedLayers.HUD, true);
else
args.Sprite.LayerSetVisible(ElectrifiedLayers.HUD, false);
_sprite.LayerSetVisible((uid, args.Sprite), ElectrifiedLayers.HUD, electrified && HasComp<ShowElectrocutionHUDComponent>(player));
}
}
@@ -1,12 +1,14 @@
using Content.Shared.Ensnaring;
using Content.Shared.Ensnaring.Components;
using Robust.Client.GameObjects;
using Robust.Shared.Utility;
namespace Content.Client.Ensnaring;
public sealed class EnsnareableSystem : SharedEnsnareableSystem
{
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -19,25 +21,25 @@ public sealed class EnsnareableSystem : SharedEnsnareableSystem
{
base.OnEnsnareInit(ent, ref args);
if(!TryComp<SpriteComponent>(ent.Owner, out var sprite))
if (!TryComp<SpriteComponent>(ent.Owner, out var sprite))
return;
// TODO remove this, this should just be in yaml.
sprite.LayerMapReserveBlank(EnsnaredVisualLayers.Ensnared);
_sprite.LayerMapReserve((ent.Owner, sprite), EnsnaredVisualLayers.Ensnared);
}
private void OnAppearanceChange(EntityUid uid, EnsnareableComponent component, ref AppearanceChangeEvent args)
{
if (args.Sprite == null || !args.Sprite.LayerMapTryGet(EnsnaredVisualLayers.Ensnared, out var layer))
if (args.Sprite == null || !_sprite.LayerMapTryGet((uid, args.Sprite), EnsnaredVisualLayers.Ensnared, out var layer, false))
return;
if (_appearance.TryGetData<bool>(uid, EnsnareableVisuals.IsEnsnared, out var isEnsnared, args.Component))
{
if (component.Sprite != null)
{
args.Sprite.LayerSetRSI(layer, component.Sprite);
args.Sprite.LayerSetState(layer, component.State);
args.Sprite.LayerSetVisible(layer, isEnsnared);
_sprite.LayerSetRsi((uid, args.Sprite), layer, new ResPath(component.Sprite));
_sprite.LayerSetRsiState((uid, args.Sprite), layer, component.State);
_sprite.LayerSetVisible((uid, args.Sprite), layer, isEnsnared);
}
}
}
+3
View File
@@ -38,6 +38,7 @@ using Robust.Shared.Prototypes;
using Robust.Shared.Replays;
using Robust.Shared.Timing;
using Content.Client._NF.Emp.Overlays; // Frontier
using Content.Client._Mono.Company; // Mono
namespace Content.Client.Entry
{
@@ -75,6 +76,7 @@ namespace Content.Client.Entry
[Dependency] private readonly DebugMonitorManager _debugMonitorManager = default!;
[Dependency] private readonly TitleWindowManager _titleWindowManager = default!;
[Dependency] private readonly IEntitySystemManager _entitySystemManager = default!;
[Dependency] private readonly CompanyManager _companyManager = default!; // Mono
public override void Init()
{
@@ -137,6 +139,7 @@ namespace Content.Client.Entry
_extendedDisconnectInformation.Initialize();
_jobRequirements.Initialize();
_playbackMan.Initialize();
_companyManager.Initialize();
//AUTOSCALING default Setup!
_configManager.SetCVar("interface.resolutionAutoScaleUpperCutoffX", 1080);
+8 -7
View File
@@ -10,6 +10,7 @@ namespace Content.Client.Fluids;
public sealed class PuddleSystem : SharedPuddleSystem
{
[Dependency] private readonly IconSmoothSystem _smooth = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -27,7 +28,7 @@ public sealed class PuddleSystem : SharedPuddleSystem
if (args.AppearanceData.TryGetValue(PuddleVisuals.CurrentVolume, out var volumeObj))
{
volume = (float) volumeObj;
volume = (float)volumeObj;
}
// Update smoothing and sprite based on volume.
@@ -35,19 +36,19 @@ public sealed class PuddleSystem : SharedPuddleSystem
{
if (volume < LowThreshold)
{
args.Sprite.LayerSetState(0, $"{smooth.StateBase}a");
_sprite.LayerSetRsiState((uid, args.Sprite), 0, $"{smooth.StateBase}a");
_smooth.SetEnabled(uid, false, smooth);
}
else if (volume < MediumThreshold)
{
args.Sprite.LayerSetState(0, $"{smooth.StateBase}b");
_sprite.LayerSetRsiState((uid, args.Sprite), 0, $"{smooth.StateBase}b");
_smooth.SetEnabled(uid, false, smooth);
}
else
{
if (!smooth.Enabled)
{
args.Sprite.LayerSetState(0, $"{smooth.StateBase}0");
_sprite.LayerSetRsiState((uid, args.Sprite), 0, $"{smooth.StateBase}0");
_smooth.SetEnabled(uid, true, smooth);
_smooth.DirtyNeighbours(uid);
}
@@ -58,12 +59,12 @@ public sealed class PuddleSystem : SharedPuddleSystem
if (args.AppearanceData.TryGetValue(PuddleVisuals.SolutionColor, out var colorObj))
{
var color = (Color) colorObj;
args.Sprite.Color = color * baseColor;
var color = (Color)colorObj;
_sprite.SetColor((uid, args.Sprite), color * baseColor);
}
else
{
args.Sprite.Color *= baseColor;
_sprite.SetColor((uid, args.Sprite), args.Sprite.Color * baseColor);
}
}
@@ -0,0 +1,90 @@
using Robust.Client.Graphics;
namespace Content.Client.Graphics;
/// <summary>
/// A cache for <see cref="Overlay"/>s to store per-viewport render resources, such as render targets.
/// </summary>
/// <typeparam name="T">The type of data stored in the cache.</typeparam>
public sealed class OverlayResourceCache<T> : IDisposable where T : class, IDisposable
{
private readonly Dictionary<long, CacheEntry> _cache = new();
/// <summary>
/// Get the data for a specific viewport, creating a new entry if necessary.
/// </summary>
/// <remarks>
/// The cached data may be cleared at any time if <see cref="IClydeViewport.ClearCachedResources"/> gets invoked.
/// </remarks>
/// <param name="viewport">The viewport for which to retrieve cached data.</param>
/// <param name="factory">A delegate used to create the cached data, if necessary.</param>
public T GetForViewport(IClydeViewport viewport, Func<IClydeViewport, T> factory)
{
return GetForViewport(viewport, out _, factory);
}
/// <summary>
/// Get the data for a specific viewport, creating a new entry if necessary.
/// </summary>
/// <remarks>
/// The cached data may be cleared at any time if <see cref="IClydeViewport.ClearCachedResources"/> gets invoked.
/// </remarks>
/// <param name="viewport">The viewport for which to retrieve cached data.</param>
/// <param name="wasCached">True if the data was pulled from cache, false if it was created anew.</param>
/// <param name="factory">A delegate used to create the cached data, if necessary.</param>
public T GetForViewport(IClydeViewport viewport, out bool wasCached, Func<IClydeViewport, T> factory)
{
if (_cache.TryGetValue(viewport.Id, out var entry))
{
wasCached = true;
return entry.Data;
}
wasCached = false;
entry = new CacheEntry
{
Data = factory(viewport),
Viewport = new WeakReference<IClydeViewport>(viewport),
};
_cache.Add(viewport.Id, entry);
viewport.ClearCachedResources += ViewportOnClearCachedResources;
return entry.Data;
}
private void ViewportOnClearCachedResources(ClearCachedViewportResourcesEvent ev)
{
if (!_cache.Remove(ev.ViewportId, out var entry))
{
// I think this could theoretically happen if you manually dispose the cache *after* a leaked viewport got
// GC'd, but before its ClearCachedResources got invoked.
return;
}
entry.Data.Dispose();
if (ev.Viewport != null)
ev.Viewport.ClearCachedResources -= ViewportOnClearCachedResources;
}
public void Dispose()
{
foreach (var entry in _cache)
{
if (entry.Value.Viewport.TryGetTarget(out var viewport))
viewport.ClearCachedResources -= ViewportOnClearCachedResources;
entry.Value.Data.Dispose();
}
_cache.Clear();
}
private struct CacheEntry
{
public T Data;
public WeakReference<IClydeViewport> Viewport;
}
}
@@ -36,39 +36,37 @@ public sealed partial class DocumentParsingManager
.Assert(_tagControlParsers.ContainsKey, tag => $"unknown tag: {tag}")
.Bind(tag => _tagControlParsers[tag]);
// Frontier: comment parser
Parser<char, Unit> whitespaceAndCommentParser = SkipWhitespaces.Then(Try(String("<!--").Then(Parser<char>.Any.SkipUntil(Try(String("-->"))))).SkipMany());
var whitespaceAndCommentParser = SkipWhitespaces.Then(Try(String("<!--").Then(Parser<char>.Any.SkipUntil(Try(String("-->"))))).SkipMany());
_controlParser = OneOf(_tagParser, TryHeaderControl, TryListControl, TextControlParser)
.Before(whitespaceAndCommentParser);
// End Frontier
foreach (var typ in _reflectionManager.GetAllChildren<IDocumentTag>())
{
_tagControlParsers.Add(typ.Name, CreateTagControlParser(typ.Name, typ, _sandboxHelper));
}
ControlParser = whitespaceAndCommentParser.Then(_controlParser.Many()); // Frontier: SkipWhitespaces<whitespaceAndCommentParser
ControlParser = whitespaceAndCommentParser.Then(_controlParser.Many());
_sawmill = Logger.GetSawmill("Guidebook");
}
public bool TryAddMarkup(Control control, ProtoId<GuideEntryPrototype> entryId, bool log = true)
public bool TryAddMarkup(Control control, ProtoId<GuideEntryPrototype> entryId)
{
if (!_prototype.TryIndex(entryId, out var entry))
if (!_prototype.Resolve(entryId, out var entry))
return false;
using var file = _resourceManager.ContentFileReadText(entry.Text);
return TryAddMarkup(control, file.ReadToEnd(), log);
return TryAddMarkup(control, file.ReadToEnd());
}
public bool TryAddMarkup(Control control, GuideEntry entry, bool log = true)
public bool TryAddMarkup(Control control, GuideEntry entry)
{
using var file = _resourceManager.ContentFileReadText(entry.Text);
return TryAddMarkup(control, file.ReadToEnd(), log);
return TryAddMarkup(control, file.ReadToEnd());
}
public bool TryAddMarkup(Control control, string text, bool log = true)
public bool TryAddMarkup(Control control, string text)
{
try
{
@@ -83,7 +83,7 @@ public sealed partial class DocumentParsingManager
}
msg.Pop();
rt.SetMessage(msg);
rt.SetMessage(msg, tagsAllowed: null);
return rt;
},
TextParser)
+7 -5
View File
@@ -19,6 +19,7 @@ using Robust.Shared.Containers;
using Robust.Shared.GameStates;
using Robust.Shared.Player;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
namespace Content.Client.Hands.Systems
{
@@ -30,6 +31,7 @@ namespace Content.Client.Hands.Systems
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
[Dependency] private readonly StrippableSystem _stripSys = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
[Dependency] private readonly ExamineSystem _examine = default!;
[Dependency] private readonly DisplacementMapSystem _displacement = default!;
@@ -330,7 +332,7 @@ namespace Content.Client.Hands.Systems
{
foreach (var key in revealedLayers)
{
sprite.RemoveLayer(key);
_sprite.RemoveLayer((uid, sprite), key);
}
revealedLayers.Clear();
@@ -366,7 +368,7 @@ namespace Content.Client.Hands.Systems
continue;
}
var index = sprite.LayerMapReserveBlank(key);
var index = _sprite.LayerMapReserve((uid, sprite), key);
// In case no RSI is given, use the item's base RSI as a default. This cuts down on a lot of unnecessary yaml entries.
if (layerData.RsiPath == null
@@ -374,12 +376,12 @@ namespace Content.Client.Hands.Systems
&& sprite[index].Rsi == null)
{
if (TryComp<ItemComponent>(held, out var itemComponent) && itemComponent.RsiPath != null)
sprite.LayerSetRSI(index, itemComponent.RsiPath);
_sprite.LayerSetRsi((uid, sprite), index, new ResPath(itemComponent.RsiPath));
else if (TryComp(held, out SpriteComponent? clothingSprite))
sprite.LayerSetRSI(index, clothingSprite.BaseRSI);
_sprite.LayerSetRsi((uid, sprite), index, clothingSprite.BaseRSI);
}
sprite.LayerSetData(index, layerData);
_sprite.LayerSetData((uid, sprite), index, layerData);
//Add displacement maps
if (handComp.HandDisplacement is not null)
+1
View File
@@ -5,6 +5,7 @@ using Robust.Client.Graphics;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using System.Linq;
using System.Numerics;
using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
namespace Content.Client.Holopad;
+1 -1
View File
@@ -18,7 +18,7 @@ public sealed partial class InfoSection : BoxContainer
{
TitleLabel.Text = title;
if (markup)
Content.SetMessage(FormattedMessage.FromMarkupOrThrow(text.Trim()));
Content.SetMessage(FormattedMessage.FromMarkupOrThrow(text.Trim()), tagsAllowed: null);
else
Content.SetMessage(text);
}
+1 -1
View File
@@ -24,7 +24,7 @@ namespace Content.Client.Info
}
public void SetInfoBlob(string markup)
{
_richTextLabel.SetMessage(FormattedMessage.FromMarkupOrThrow(markup));
_richTextLabel.SetMessage(FormattedMessage.FromMarkupOrThrow(markup), tagsAllowed: null);
}
}
}
+2
View File
@@ -24,6 +24,7 @@ using Content.Shared.Administration.Managers;
using Content.Shared.Chat;
using Content.Shared.Players.PlayTimeTracking;
using Content.Shared.Players.RateLimiting;
using Content.Client._Mono.Company; // Mono
namespace Content.Client.IoC
{
@@ -60,6 +61,7 @@ namespace Content.Client.IoC
collection.Register<PlayerRateLimitManager>();
collection.Register<SharedPlayerRateLimitManager, PlayerRateLimitManager>();
collection.Register<TitleWindowManager>();
collection.Register<CompanyManager>(); // Mono
}
}
}
@@ -30,6 +30,7 @@ public sealed class AfterLightTargetOverlay : Overlay
return;
var lightOverlay = _overlay.GetOverlay<BeforeLightTargetOverlay>();
var lightRes = lightOverlay.GetCachedForViewport(args.Viewport);
var bounds = args.WorldBounds;
// at 1-1 render scale it's mostly fine but at 4x4 it's way too fkn big
@@ -38,7 +39,7 @@ public sealed class AfterLightTargetOverlay : Overlay
var localMatrix =
viewport.LightRenderTarget.GetWorldToLocalMatrix(viewport.Eye, newScale);
var diff = (lightOverlay.EnlargedLightTarget.Size - viewport.LightRenderTarget.Size);
var diff = (lightRes.EnlargedLightTarget.Size - viewport.LightRenderTarget.Size);
var halfDiff = diff / 2;
// Pixels -> Metres -> Half distance.
@@ -53,7 +54,7 @@ public sealed class AfterLightTargetOverlay : Overlay
viewport.LightRenderTarget.Size.Y + halfDiff.Y);
worldHandle.SetTransform(localMatrix);
worldHandle.DrawTextureRectRegion(lightOverlay.EnlargedLightTarget.Texture, bounds, subRegion: subRegion);
worldHandle.DrawTextureRectRegion(lightRes.EnlargedLightTarget.Texture, bounds, subRegion: subRegion);
}, Color.Transparent);
}
}
@@ -0,0 +1,140 @@
using System.Numerics;
using Content.Shared.CCVar;
using Content.Shared.Maps;
using Robust.Client.Graphics;
using Robust.Shared.Configuration;
using Robust.Shared.Enums;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Client.Light;
/// <summary>
/// Applies ambient-occlusion to the viewport.
/// </summary>
public sealed class AmbientOcclusionOverlay : Overlay
{
[Dependency] private readonly IClyde _clyde = default!;
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly ITileDefinitionManager _tileDefManager = default!;
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowEntities;
private IRenderTexture? _aoTarget;
// Couldn't figure out a way to avoid this so if you can then please do.
private IRenderTexture? _aoStencilTarget;
public AmbientOcclusionOverlay()
{
IoCManager.InjectDependencies(this);
ZIndex = AfterLightTargetOverlay.ContentZIndex + 1;
}
protected override void Draw(in OverlayDrawArgs args)
{
/*
* tl;dr
* - we draw a black square on each "ambient occlusion" entity.
* - we blur this.
* - We apply it to the viewport.
*
* We do this while ignoring lighting because it will wash out the actual effect.
* In 3D ambient occlusion is more complicated due top having to calculate normals but in 2D
* we don't have a concept of depth / corners necessarily.
*/
var viewport = args.Viewport;
var mapId = args.MapId;
var worldBounds = args.WorldBounds;
var worldHandle = args.WorldHandle;
var color = Color.FromHex(_cfgManager.GetCVar(CCVars.AmbientOcclusionColor));
var distance = _cfgManager.GetCVar(CCVars.AmbientOcclusionDistance);
//var color = Color.Red;
var target = viewport.RenderTarget;
var lightScale = target.Size / (Vector2) viewport.Size;
var scale = viewport.RenderScale / (Vector2.One / lightScale);
var maps = _entManager.System<SharedMapSystem>();
var lookups = _entManager.System<EntityLookupSystem>();
var query = _entManager.System<OccluderSystem>();
var xformSystem = _entManager.System<SharedTransformSystem>();
var invMatrix = args.Viewport.GetWorldToLocalMatrix();
if (_aoTarget?.Texture.Size != target.Size)
{
_aoTarget?.Dispose();
_aoTarget = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-target");
}
if (_aoStencilTarget?.Texture.Size != target.Size)
{
_aoStencilTarget?.Dispose();
_aoStencilTarget = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-stencil-target");
}
// Draw the texture data to the texture.
args.WorldHandle.RenderInRenderTarget(_aoTarget,
() =>
{
worldHandle.UseShader(_proto.Index<ShaderPrototype>("unshaded").Instance());
var invMatrix = _aoTarget.GetWorldToLocalMatrix(viewport.Eye!, scale);
foreach (var entry in query.QueryAabb(mapId, worldBounds))
{
DebugTools.Assert(entry.Component.Enabled);
var matrix = xformSystem.GetWorldMatrix(entry.Transform);
var localMatrix = Matrix3x2.Multiply(matrix, invMatrix);
worldHandle.SetTransform(localMatrix);
// 4 pixels
worldHandle.DrawRect(Box2.UnitCentered.Enlarged(distance / EyeManager.PixelsPerMeter), Color.White);
}
}, Color.Transparent);
_clyde.BlurRenderTarget(viewport, _aoTarget, _aoTarget, viewport.Eye!, 14f);
// Need to do stencilling after blur as it will nuke it.
// Draw stencil for the grid so we don't draw in space.
args.WorldHandle.RenderInRenderTarget(_aoStencilTarget,
() =>
{
// Don't want lighting affecting it.
worldHandle.UseShader(_proto.Index<ShaderPrototype>("unshaded").Instance());
foreach (var grid in _mapManager.FindGridsIntersecting(mapId, worldBounds))
{
var transform = xformSystem.GetWorldMatrix(grid.Owner);
var worldToTextureMatrix = Matrix3x2.Multiply(transform, invMatrix);
var tiles = maps.GetTilesEnumerator(grid.Owner, grid, worldBounds);
worldHandle.SetTransform(worldToTextureMatrix);
while (tiles.MoveNext(out var tileRef))
{
if (tileRef.IsSpace(_tileDefManager))
continue;
var bounds = lookups.GetLocalBounds(tileRef, grid.TileSize);
worldHandle.DrawRect(bounds, Color.White);
}
}
}, Color.Transparent);
// Draw the stencil texture to depth buffer.
worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilMask").Instance());
worldHandle.DrawTextureRect(_aoStencilTarget!.Texture, worldBounds);
// Draw the Blurred AO texture finally.
worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilEqualDraw").Instance());
worldHandle.DrawTextureRect(_aoTarget!.Texture, worldBounds, color);
worldHandle.UseShader(_proto.Index<ShaderPrototype>("StencilClear").Instance());
worldHandle.DrawRect(worldBounds, Color.White);
args.WorldHandle.SetTransform(Matrix3x2.Identity);
args.WorldHandle.UseShader(null);
}
}
@@ -1,4 +1,4 @@
using System.Numerics;
using Content.Client.Graphics;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
@@ -13,7 +13,8 @@ public sealed class BeforeLightTargetOverlay : Overlay
[Dependency] private readonly IClyde _clyde = default!;
public IRenderTexture EnlargedLightTarget = default!;
private readonly OverlayResourceCache<CachedResources> _resources = new();
public Box2Rotated EnlargedBounds;
/// <summary>
@@ -36,16 +37,42 @@ public sealed class BeforeLightTargetOverlay : Overlay
var size = args.Viewport.LightRenderTarget.Size + (int) (_skirting * EyeManager.PixelsPerMeter);
EnlargedBounds = args.WorldBounds.Enlarged(_skirting / 2f);
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
// This just exists to copy the lightrendertarget and write back to it.
if (EnlargedLightTarget?.Size != size)
if (res.EnlargedLightTarget?.Size != size)
{
EnlargedLightTarget = _clyde
res.EnlargedLightTarget = _clyde
.CreateRenderTarget(size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "enlarged-light-copy");
}
args.WorldHandle.RenderInRenderTarget(EnlargedLightTarget,
args.WorldHandle.RenderInRenderTarget(res.EnlargedLightTarget,
() =>
{
}, _clyde.GetClearColor(args.MapUid));
}
internal CachedResources GetCachedForViewport(IClydeViewport viewport)
{
return _resources.GetForViewport(viewport,
static _ => throw new InvalidOperationException(
"Expected BeforeLightTargetOverlay to have created its resources"));
}
protected override void DisposeBehavior()
{
_resources.Dispose();
base.DisposeBehavior();
}
internal sealed class CachedResources : IDisposable
{
public IRenderTexture EnlargedLightTarget = default!;
public void Dispose()
{
EnlargedLightTarget?.Dispose();
}
}
}
@@ -6,6 +6,8 @@ namespace Content.Client.Light.EntitySystems;
public sealed class EmergencyLightSystem : VisualizerSystem<EmergencyLightComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, EmergencyLightComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
@@ -14,13 +16,13 @@ public sealed class EmergencyLightSystem : VisualizerSystem<EmergencyLightCompon
if (!AppearanceSystem.TryGetData<bool>(uid, EmergencyLightVisuals.On, out var on, args.Component))
on = false;
args.Sprite.LayerSetVisible(EmergencyLightVisualLayers.LightOff, !on);
args.Sprite.LayerSetVisible(EmergencyLightVisualLayers.LightOn, on);
_sprite.LayerSetVisible((uid, args.Sprite), EmergencyLightVisualLayers.LightOff, !on);
_sprite.LayerSetVisible((uid, args.Sprite), EmergencyLightVisualLayers.LightOn, on);
if (AppearanceSystem.TryGetData<Color>(uid, EmergencyLightVisuals.Color, out var color, args.Component))
{
args.Sprite.LayerSetColor(EmergencyLightVisualLayers.LightOn, color);
args.Sprite.LayerSetColor(EmergencyLightVisualLayers.LightOff, color);
_sprite.LayerSetColor((uid, args.Sprite), EmergencyLightVisualLayers.LightOn, color);
_sprite.LayerSetColor((uid, args.Sprite), EmergencyLightVisualLayers.LightOff, color);
}
}
}
@@ -5,6 +5,8 @@ namespace Content.Client.Light.Visualizers;
public sealed class LightBulbSystem : VisualizerSystem<LightBulbComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, LightBulbComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
@@ -16,13 +18,13 @@ public sealed class LightBulbSystem : VisualizerSystem<LightBulbComponent>
switch (state)
{
case LightBulbState.Normal:
args.Sprite.LayerSetState(LightBulbVisualLayers.Base, comp.NormalSpriteState);
_sprite.LayerSetRsiState((uid, args.Sprite), LightBulbVisualLayers.Base, comp.NormalSpriteState);
break;
case LightBulbState.Broken:
args.Sprite.LayerSetState(LightBulbVisualLayers.Base, comp.BrokenSpriteState);
_sprite.LayerSetRsiState((uid, args.Sprite), LightBulbVisualLayers.Base, comp.BrokenSpriteState);
break;
case LightBulbState.Burned:
args.Sprite.LayerSetState(LightBulbVisualLayers.Base, comp.BurnedSpriteState);
_sprite.LayerSetRsiState((uid, args.Sprite), LightBulbVisualLayers.Base, comp.BurnedSpriteState);
break;
}
}
@@ -30,7 +32,7 @@ public sealed class LightBulbSystem : VisualizerSystem<LightBulbComponent>
// also update sprites color
if (AppearanceSystem.TryGetData<Color>(uid, LightBulbVisuals.Color, out var color, args.Component))
{
args.Sprite.Color = color;
_sprite.SetColor((uid, args.Sprite), color);
}
}
}
@@ -1,17 +1,51 @@
using Content.Shared.CCVar;
using Robust.Client.Graphics;
using Robust.Shared.Configuration;
namespace Content.Client.Light.EntitySystems;
public sealed class PlanetLightSystem : EntitySystem
{
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
[Dependency] private readonly IOverlayManager _overlayMan = default!;
/// <summary>
/// Enables / disables the ambient occlusion overlay.
/// </summary>
public bool AmbientOcclusion
{
get => _ambientOcclusion;
set
{
if (_ambientOcclusion == value)
return;
_ambientOcclusion = value;
if (value)
{
_overlayMan.AddOverlay(new AmbientOcclusionOverlay());
}
else
{
_overlayMan.RemoveOverlay<AmbientOcclusionOverlay>();
}
}
}
private bool _ambientOcclusion;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<GetClearColorEvent>(OnClearColor);
_cfgManager.OnValueChanged(CCVars.AmbientOcclusion, val =>
{
AmbientOcclusion = val;
}, true);
_overlayMan.AddOverlay(new BeforeLightTargetOverlay());
_overlayMan.AddOverlay(new RoofOverlay(EntityManager));
_overlayMan.AddOverlay(new TileEmissionOverlay(EntityManager));
+1 -1
View File
@@ -44,7 +44,7 @@ public sealed class HandheldLightSystem : SharedHandheldLightSystem
return;
}
if (!_appearance.TryGetData<bool>(uid, ToggleableLightVisuals.Enabled, out var enabled, args.Component))
if (!_appearance.TryGetData<bool>(uid, ToggleableVisuals.Enabled, out var enabled, args.Component))
{
return;
}
+27 -6
View File
@@ -1,3 +1,4 @@
using Content.Client.Graphics;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
@@ -15,7 +16,7 @@ public sealed class LightBlurOverlay : Overlay
public const int ContentZIndex = TileEmissionOverlay.ContentZIndex + 1;
private IRenderTarget? _blurTarget;
private readonly OverlayResourceCache<CachedResources> _resources = new();
public LightBlurOverlay()
{
@@ -29,16 +30,36 @@ public sealed class LightBlurOverlay : Overlay
return;
var beforeOverlay = _overlay.GetOverlay<BeforeLightTargetOverlay>();
var size = beforeOverlay.EnlargedLightTarget.Size;
var beforeLightRes = beforeOverlay.GetCachedForViewport(args.Viewport);
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
if (_blurTarget?.Size != size)
var size = beforeLightRes.EnlargedLightTarget.Size;
if (res.BlurTarget?.Size != size)
{
_blurTarget = _clyde
res.BlurTarget = _clyde
.CreateRenderTarget(size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "enlarged-light-blur");
}
var target = beforeOverlay.EnlargedLightTarget;
var target = beforeLightRes.EnlargedLightTarget;
// Yeah that's all this does keep walkin.
_clyde.BlurRenderTarget(args.Viewport, target, _blurTarget, args.Viewport.Eye, 14f * 5f);
_clyde.BlurRenderTarget(args.Viewport, target, res.BlurTarget, args.Viewport.Eye, 14f * 5f);
}
protected override void DisposeBehavior()
{
_resources.Dispose();
base.DisposeBehavior();
}
private sealed class CachedResources : IDisposable
{
public IRenderTarget? BlurTarget;
public void Dispose()
{
BlurTarget?.Dispose();
}
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using System.Numerics;
using Content.Client.Items.Systems;
using Content.Shared.Clothing;
using Content.Shared.Hands;
+5 -19
View File
@@ -43,7 +43,7 @@ public sealed class RoofOverlay : Overlay
protected override void Draw(in OverlayDrawArgs args)
{
if (args.Viewport.Eye == null)
if (args.Viewport.Eye == null || !_entManager.HasComponent<MapLightComponent>(args.MapUid))
return;
var viewport = args.Viewport;
@@ -52,37 +52,23 @@ public sealed class RoofOverlay : Overlay
var worldHandle = args.WorldHandle;
var lightoverlay = _overlay.GetOverlay<BeforeLightTargetOverlay>();
var bounds = lightoverlay.EnlargedBounds;
var target = lightoverlay.EnlargedLightTarget;
var target = lightoverlay.GetCachedForViewport(viewport).EnlargedLightTarget;
_grids.Clear();
_mapManager.FindGridsIntersecting(args.MapId, bounds, ref _grids);
for (var i = _grids.Count - 1; i >= 0; i--)
{
var grid = _grids[i];
if (_entManager.HasComponent<RoofComponent>(grid.Owner))
continue;
_grids.RemoveAt(i);
}
if (_grids.Count == 0)
return;
_mapManager.FindGridsIntersecting(args.MapId, bounds, ref _grids, approx: true, includeMap: true);
var lightScale = viewport.LightRenderTarget.Size / (Vector2) viewport.Size;
var scale = viewport.RenderScale / (Vector2.One / lightScale);
worldHandle.RenderInRenderTarget(target,
() =>
{
var invMatrix = target.GetWorldToLocalMatrix(eye, scale);
foreach (var grid in _grids)
{
if (!_entManager.TryGetComponent(grid.Owner, out RoofComponent? roof))
continue;
var invMatrix = target.GetWorldToLocalMatrix(eye, scale);
var gridMatrix = _xformSystem.GetWorldMatrix(grid.Owner);
var matty = Matrix3x2.Multiply(gridMatrix, invMatrix);
+41 -12
View File
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.Client.Graphics;
using Content.Shared.Light.Components;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
@@ -11,6 +12,8 @@ namespace Content.Client.Light;
public sealed class SunShadowOverlay : Overlay
{
private static readonly ProtoId<ShaderPrototype> MixShader = "Mix";
public override OverlaySpace Space => OverlaySpace.BeforeLighting;
[Dependency] private readonly IClyde _clyde = default!;
@@ -22,8 +25,7 @@ public sealed class SunShadowOverlay : Overlay
private readonly HashSet<Entity<SunShadowCastComponent>> _shadows = new();
private IRenderTexture? _blurTarget;
private IRenderTexture? _target;
private readonly OverlayResourceCache<CachedResources> _resources = new();
public SunShadowOverlay()
{
@@ -53,16 +55,18 @@ public sealed class SunShadowOverlay : Overlay
var worldBounds = args.WorldBounds;
var targetSize = viewport.LightRenderTarget.Size;
if (_target?.Size != targetSize)
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
if (res.Target?.Size != targetSize)
{
_target = _clyde
res.Target = _clyde
.CreateRenderTarget(targetSize,
new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb),
name: "sun-shadow-target");
if (_blurTarget?.Size != targetSize)
if (res.BlurTarget?.Size != targetSize)
{
_blurTarget = _clyde
res.BlurTarget = _clyde
.CreateRenderTarget(targetSize, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "sun-shadow-blur");
}
}
@@ -91,11 +95,11 @@ public sealed class SunShadowOverlay : Overlay
_shadows.Clear();
// Draw shadow polys to stencil
args.WorldHandle.RenderInRenderTarget(_target,
args.WorldHandle.RenderInRenderTarget(res.Target,
() =>
{
var invMatrix =
_target.GetWorldToLocalMatrix(eye, scale);
res.Target.GetWorldToLocalMatrix(eye, scale);
var indices = new Vector2[PhysicsConstants.MaxPolygonVertices * 2];
// Go through shadows in range.
@@ -114,7 +118,9 @@ public sealed class SunShadowOverlay : Overlay
foreach (var ent in _shadows)
{
var xform = _entManager.GetComponent<TransformComponent>(ent.Owner);
var worldMatrix = _xformSys.GetWorldMatrix(xform);
var (worldPos, worldRot) = _xformSys.GetWorldPositionRotation(xform);
// Need no rotation on matrix as sun shadow direction doesn't care.
var worldMatrix = Matrix3x2.CreateTranslation(worldPos);
var renderMatrix = Matrix3x2.Multiply(worldMatrix, invMatrix);
var pointCount = ent.Comp.Points.Length;
@@ -122,6 +128,10 @@ public sealed class SunShadowOverlay : Overlay
for (var i = 0; i < pointCount; i++)
{
// Update point based on entity rotation.
indices[i] = worldRot.RotateVec(indices[i]);
// Add the offset point by the sun shadow direction.
indices[pointCount + i] = indices[i] + direction;
}
@@ -134,7 +144,7 @@ public sealed class SunShadowOverlay : Overlay
Color.Transparent);
// Slightly blur it just to avoid aliasing issues on the later viewport-wide blur.
_clyde.BlurRenderTarget(viewport, _target, _target, eye, 1f);
_clyde.BlurRenderTarget(viewport, res.Target, res.BlurTarget!, eye, 1f);
// Draw stencil (see roofoverlay).
args.WorldHandle.RenderInRenderTarget(viewport.LightRenderTarget,
@@ -144,11 +154,30 @@ public sealed class SunShadowOverlay : Overlay
viewport.LightRenderTarget.GetWorldToLocalMatrix(eye, scale);
worldHandle.SetTransform(invMatrix);
var maskShader = _protoManager.Index<ShaderPrototype>("Mix").Instance();
var maskShader = _protoManager.Index(MixShader).Instance();
worldHandle.UseShader(maskShader);
worldHandle.DrawTextureRect(_target.Texture, worldBounds, Color.Black.WithAlpha(alpha));
worldHandle.DrawTextureRect(res.Target.Texture, worldBounds, Color.Black.WithAlpha(alpha));
}, null);
}
}
protected override void DisposeBehavior()
{
_resources.Dispose();
base.DisposeBehavior();
}
private sealed class CachedResources : IDisposable
{
public IRenderTexture? BlurTarget;
public IRenderTexture? Target;
public void Dispose()
{
BlurTarget?.Dispose();
Target?.Dispose();
}
}
}
+1 -1
View File
@@ -47,7 +47,7 @@ public sealed class TileEmissionOverlay : Overlay
var worldHandle = args.WorldHandle;
var lightoverlay = _overlay.GetOverlay<BeforeLightTargetOverlay>();
var bounds = lightoverlay.EnlargedBounds;
var target = lightoverlay.EnlargedLightTarget;
var target = lightoverlay.GetCachedForViewport(args.Viewport).EnlargedLightTarget;
var viewport = args.Viewport;
_grids.Clear();
_mapManager.FindGridsIntersecting(mapId, bounds, ref _grids, approx: true);
@@ -12,6 +12,7 @@ public sealed class PoweredLightVisualizerSystem : VisualizerSystem<PoweredLight
{
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -28,16 +29,16 @@ public sealed class PoweredLightVisualizerSystem : VisualizerSystem<PoweredLight
return;
if (comp.SpriteStateMap.TryGetValue(state, out var spriteState))
args.Sprite.LayerSetState(PoweredLightLayers.Base, spriteState);
_sprite.LayerSetRsiState((uid, args.Sprite), PoweredLightLayers.Base, spriteState);
if (args.Sprite.LayerExists(PoweredLightLayers.Glow))
if (_sprite.LayerExists((uid, args.Sprite), PoweredLightLayers.Glow))
{
if (TryComp<PointLightComponent>(uid, out var light))
{
args.Sprite.LayerSetColor(PoweredLightLayers.Glow, light.Color);
_sprite.LayerSetColor((uid, args.Sprite), PoweredLightLayers.Glow, light.Color);
}
args.Sprite.LayerSetVisible(PoweredLightLayers.Glow, state == PoweredLightState.On);
_sprite.LayerSetVisible((uid, args.Sprite), PoweredLightLayers.Glow, state == PoweredLightState.On);
}
SetBlinkingAnimation(
@@ -55,8 +56,7 @@ public sealed class PoweredLightVisualizerSystem : VisualizerSystem<PoweredLight
{
if (args.Key != PoweredLightVisualsComponent.BlinkingAnimationKey)
return;
if(!comp.IsBlinking)
if (!comp.IsBlinking)
return;
AnimationSystem.Play(uid, Comp<AnimationPlayerComponent>(uid), BlinkingAnimation(comp), PoweredLightVisualsComponent.BlinkingAnimationKey);
+4 -1
View File
@@ -1,4 +1,5 @@
using System.Linq;
using Content.Client._Mono.Company; // Mono
using Content.Client._Mono.MonoCoins;
using Content.Client.Guidebook;
using Content.Client.Humanoid;
@@ -41,6 +42,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered<LobbyState
[Dependency] private readonly IStateManager _stateManager = default!;
[Dependency] private readonly JobRequirementsManager _requirements = default!;
[Dependency] private readonly MarkingManager _markings = default!;
[Dependency] private readonly CompanyManager _companyManager = default!; // Mono
[UISystemDependency] private readonly HumanoidAppearanceSystem _humanoid = default!;
[UISystemDependency] private readonly ClientInventorySystem _inventory = default!;
[UISystemDependency] private readonly StationSpawningSystem _spawn = default!;
@@ -350,7 +352,8 @@ public sealed class LobbyUIController : UIController, IOnStateEntered<LobbyState
_prototypeManager,
_resourceCache,
_requirements,
_markings);
_markings,
_companyManager); // Mono
_profileEditor.OnOpenGuidebook += _guide.OpenHelp;
@@ -35,6 +35,7 @@ using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Direction = Robust.Shared.Maths.Direction;
using Content.Client._Mono.Company;
namespace Content.Client.Lobby.UI
{
@@ -52,6 +53,7 @@ namespace Content.Client.Lobby.UI
private readonly JobRequirementsManager _requirements;
private readonly LobbyUIController _controller;
private readonly EntityWhitelistSystem _whitelist; // Frontier
private readonly CompanyManager _companyManager; // Mono
private FlavorText.FlavorText? _flavorText;
private TextEdit? _flavorTextEdit;
@@ -116,7 +118,8 @@ namespace Content.Client.Lobby.UI
IPrototypeManager prototypeManager,
IResourceManager resManager,
JobRequirementsManager requirements,
MarkingManager markings)
MarkingManager markings,
CompanyManager manager) // Mono
{
RobustXamlLoader.Load(this);
_sawmill = logManager.GetSawmill("profile.editor");
@@ -127,6 +130,7 @@ namespace Content.Client.Lobby.UI
_prototypeManager = prototypeManager;
_markingManager = markings;
_preferencesManager = preferencesManager;
_companyManager = manager; // Mono
_resManager = resManager;
_requirements = requirements;
_controller = UserInterfaceManager.GetUIController<LobbyUIController>();
@@ -446,12 +450,9 @@ namespace Content.Client.Lobby.UI
// Clear any existing items
CompanyButton.Clear();
var username = _playerManager.LocalPlayer?.Session?.Name; //Lua modified - company login support
// Add all companies from prototypes - use consistent sorting with UpdateCompanyControls
var companies = _prototypeManager.EnumeratePrototypes<CompanyPrototype>()
//.Where(c => !c.Disabled) // Filter out disabled companies
.Where(c => !c.Disabled || (username != null && c.Logins.Contains(username))) //Lua modified - company login support
.Where(c => !c.Disabled && _companyManager.IsAllowed(c.ID))
.ToList();
companies.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal));
@@ -1451,7 +1452,7 @@ namespace Content.Client.Lobby.UI
_loadoutWindow = new LoadoutWindow(Profile, roleLoadout, roleLoadoutProto, _playerManager.LocalSession, collection)
{
Title = jobProto?.ID + "-loadout",
Title = jobProto?.LocalizedName + " loadout", // Mono - replace the "-" with a space in "-loadout", change to LocalizedName from ID
};
// Refresh the buttons etc.
@@ -2194,11 +2195,8 @@ namespace Content.Client.Lobby.UI
if (Profile is null)
return;
var username = _playerManager.LocalPlayer?.Session?.Name; //Lua modified - company login support
var companies = _prototypeManager.EnumeratePrototypes<CompanyPrototype>()
//.Where(c => !c.Disabled) // Filter out disabled companies
.Where(c => !c.Disabled || (username != null && c.Logins.Contains(username))) //Lua modified - company login support
.Where(c => !c.Disabled && _companyManager.IsAllowed(c.ID))
.ToList();
companies.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal));
@@ -1,6 +1,4 @@
using System.Numerics;
using Content.Client.UserInterface.Controls;
using Prometheus;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
@@ -1,3 +1,4 @@
using System.Numerics;
using Content.Shared.Nyanotrasen.Kitchen.UI;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
@@ -0,0 +1,7 @@
<Control xmlns="https://spacestation14.io">
<BoxContainer Orientation="Vertical">
<Label Name="TitleLabel" Access="Public" />
<Label Name="ExampleLabel" Access="Public" />
<ColorSelectorSliders Name="Slider" Access="Public" HorizontalExpand="True" />
</BoxContainer>
</Control>
@@ -0,0 +1,31 @@
using Content.Client.Options.UI;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
namespace Content.Client.Options.UI;
/// <summary>
/// Standard UI control used for color sliders in the options menu. Intended for use with <see cref="OptionsTabControlRow"/>.
/// </summary>
/// <seealso cref="OptionsTabControlRow.AddOptionColorSlider"/>
[GenerateTypedNameReferences]
public sealed partial class OptionColorSlider : Control
{
/// <summary>
/// The text describing what this slider affects.
/// </summary>
public string? Title
{
get => TitleLabel.Text;
set => TitleLabel.Text = value;
}
/// <summary>
/// The example text showing the current color of the slider.
/// </summary>
public string? Example
{
get => ExampleLabel.Text;
set => ExampleLabel.Text = value;
}
}
@@ -143,6 +143,19 @@ public sealed partial class OptionsTabControlRow : Control
return AddOption(new OptionSliderIntCVar(this, _cfg, cVar, slider, min, max, format ?? FormatInt));
}
/// <summary>
/// Add a color slider option, backed by a simple string CVar.
/// </summary>
/// <param name="cVar">The CVar represented by the slider.</param>
/// <param name="slider">The UI control for the option.</param>
/// <returns>The option instance backing the added option.</returns>
public OptionColorSliderCVar AddOptionColorSlider(
CVarDef<string> cVar,
OptionColorSlider slider)
{
return AddOption(new OptionColorSliderCVar(this, _cfg, cVar, slider));
}
/// <summary>
/// Add a drop-down option, backed by a CVar.
/// </summary>
@@ -518,6 +531,54 @@ public sealed class OptionSliderFloatCVar : BaseOptionCVar<float>
}
}
public sealed class OptionColorSliderCVar : BaseOptionCVar<string>
{
private readonly OptionColorSlider _slider;
protected override string Value
{
get => _slider.Slider.Color.ToHex();
set
{
_slider.Slider.Color = Color.FromHex(value);
UpdateLabelColor();
}
}
/// <summary>
/// Creates a new instance of this type.
/// </summary>
/// <remarks>
/// <para>
/// It is generally more convenient to call overloads on <see cref="OptionsTabControlRow"/>
/// such as <see cref="OptionsTabControlRow.AddOptionPercentSlider"/> instead of instantiating this type directly.
/// </para>
/// </remarks>
/// <param name="controller">The control row that owns this option.</param>
/// <param name="cfg">The configuration manager to get and set values from.</param>
/// <param name="cVar">The CVar that is being controlled by this option.</param>
/// <param name="slider">The UI control for the option.</param>
public OptionColorSliderCVar(
OptionsTabControlRow controller,
IConfigurationManager cfg,
CVarDef<string> cVar,
OptionColorSlider slider) : base(controller, cfg, cVar)
{
_slider = slider;
slider.Slider.OnColorChanged += _ =>
{
ValueChanged();
UpdateLabelColor();
};
}
private void UpdateLabelColor()
{
_slider.ExampleLabel.FontColorOverride = Color.FromHex(Value);
}
}
/// <summary>
/// Implementation of a CVar option that simply corresponds with an integer <see cref="OptionSlider"/>.
/// </summary>
@@ -12,6 +12,10 @@
<ui:OptionSlider Name="SpeechBubbleTextOpacitySlider" Title="{Loc 'ui-options-speech-bubble-text-opacity'}" />
<ui:OptionSlider Name="SpeechBubbleSpeakerOpacitySlider" Title="{Loc 'ui-options-speech-bubble-speaker-opacity'}" />
<ui:OptionSlider Name="SpeechBubbleBackgroundOpacitySlider" Title="{Loc 'ui-options-speech-bubble-background-opacity'}" />
<CheckBox Name="AutoFillHighlightsCheckBox" Text="{Loc 'ui-options-auto-fill-highlights'}" />
<ui:OptionColorSlider Name="HighlightsColorSlider"
Title="{Loc 'ui-options-highlights-color'}"
Example="{Loc 'ui-options-highlights-color-example'}"/>
</BoxContainer>
</ScrollContainer>
<ui:OptionsTabControlRow Name="Control" Access="Public" />
@@ -20,6 +20,8 @@ public sealed partial class AccessibilityTab : Control
Control.AddOptionPercentSlider(CCVars.SpeechBubbleTextOpacity, SpeechBubbleTextOpacitySlider);
Control.AddOptionPercentSlider(CCVars.SpeechBubbleSpeakerOpacity, SpeechBubbleSpeakerOpacitySlider);
Control.AddOptionPercentSlider(CCVars.SpeechBubbleBackgroundOpacity, SpeechBubbleBackgroundOpacitySlider);
Control.AddOptionCheckBox(CCVars.ChatAutoFillHighlights, AutoFillHighlightsCheckBox);
Control.AddOptionColorSlider(CCVars.ChatHighlightsColor, HighlightsColorSlider);
Control.Initialize();
}
@@ -14,6 +14,7 @@
<ui:OptionDropDown Name="DropDownLightingQuality" Title="{Loc 'ui-options-lighting-label'}" />
<CheckBox Name="ViewportLowResCheckBox" Text="{Loc 'ui-options-vp-low-res'}" />
<CheckBox Name="ParallaxLowQualityCheckBox" Text="{Loc 'ui-options-parallax-low-quality'}" />
<CheckBox Name="AmbientOcclusionCheckBox" Text="{Loc 'ui-options-ambient-occlusion'}" />
<!-- Interface -->
<Label Text="{Loc 'ui-options-interface-label'}" StyleClasses="LabelKeyText"/>
@@ -20,6 +20,7 @@ public sealed partial class GraphicsTab : Control
RobustXamlLoader.Load(this);
Control.AddOptionCheckBox(CVars.DisplayVSync, VSyncCheckBox);
Control.AddOptionCheckBox(CCVars.AmbientOcclusion, AmbientOcclusionCheckBox);
Control.AddOption(new OptionFullscreen(Control, _cfg, FullscreenCheckBox));
Control.AddOption(new OptionLightingQuality(Control, _cfg, DropDownLightingQuality));
@@ -7,7 +7,11 @@ namespace Content.Client.Overlays;
public sealed partial class StencilOverlay
{
private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeComponent rangeComp, Matrix3x2 invMatrix)
private void DrawRestrictedRange(
in OverlayDrawArgs args,
CachedResources res,
RestrictedRangeComponent rangeComp,
Matrix3x2 invMatrix)
{
var worldHandle = args.WorldHandle;
var renderScale = args.Viewport.RenderScale.X;
@@ -38,20 +42,20 @@ public sealed partial class StencilOverlay
// Cut out the irrelevant bits via stencil
// This is why we don't just use parallax; we might want specific tiles to get drawn over
// particularly for planet maps or stations.
worldHandle.RenderInRenderTarget(_blep!, () =>
worldHandle.RenderInRenderTarget(res.Blep!, () =>
{
worldHandle.UseShader(_shader);
worldHandle.DrawRect(localAABB, Color.White);
}, Color.Transparent);
worldHandle.SetTransform(Matrix3x2.Identity);
worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
worldHandle.DrawTextureRect(_blep!.Texture, worldBounds);
worldHandle.UseShader(_protoManager.Index(StencilMask).Instance());
worldHandle.DrawTextureRect(res.Blep!.Texture, worldBounds);
var curTime = _timing.RealTime;
var sprite = _sprite.GetFrame(new SpriteSpecifier.Texture(new ResPath("/Textures/Parallaxes/noise.png")), curTime);
// Draw the rain
worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilDraw").Instance());
worldHandle.UseShader(_protoManager.Index(StencilDraw).Instance());
_parallax.DrawParallax(worldHandle, worldAABB, sprite, curTime, position, new Vector2(0.5f, 0f));
}
}
@@ -11,7 +11,12 @@ public sealed partial class StencilOverlay
{
private List<Entity<MapGridComponent>> _grids = new();
private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha, Matrix3x2 invMatrix)
private void DrawWeather(
in OverlayDrawArgs args,
CachedResources res,
WeatherPrototype weatherProto,
float alpha,
Matrix3x2 invMatrix)
{
var worldHandle = args.WorldHandle;
var mapId = args.MapId;
@@ -22,7 +27,7 @@ public sealed partial class StencilOverlay
// Cut out the irrelevant bits via stencil
// This is why we don't just use parallax; we might want specific tiles to get drawn over
// particularly for planet maps or stations.
worldHandle.RenderInRenderTarget(_blep!, () =>
worldHandle.RenderInRenderTarget(res.Blep!, () =>
{
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
_grids.Clear();
@@ -55,13 +60,13 @@ public sealed partial class StencilOverlay
}, Color.Transparent);
worldHandle.SetTransform(Matrix3x2.Identity);
worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
worldHandle.DrawTextureRect(_blep!.Texture, worldBounds);
worldHandle.UseShader(_protoManager.Index(StencilMask).Instance());
worldHandle.DrawTextureRect(res.Blep!.Texture, worldBounds);
var curTime = _timing.RealTime;
var sprite = _sprite.GetFrame(weatherProto.Sprite, curTime);
// Draw the rain
worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilDraw").Instance());
worldHandle.UseShader(_protoManager.Index(StencilDraw).Instance());
_parallax.DrawParallax(worldHandle, worldAABB, sprite, curTime, position, Vector2.Zero, modulate: (weatherProto.Color ?? Color.White).WithAlpha(alpha));
worldHandle.SetTransform(Matrix3x2.Identity);
+29 -6
View File
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.Client.Graphics;
using Content.Client.Parallax;
using Content.Client.Weather;
using Content.Shared.Salvage;
@@ -17,6 +18,9 @@ namespace Content.Client.Overlays;
/// </summary>
public sealed partial class StencilOverlay : Overlay
{
private static readonly ProtoId<ShaderPrototype> StencilMask = "StencilMask";
private static readonly ProtoId<ShaderPrototype> StencilDraw = "StencilDraw";
[Dependency] private readonly IClyde _clyde = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IGameTiming _timing = default!;
@@ -30,7 +34,7 @@ public sealed partial class StencilOverlay : Overlay
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
private IRenderTexture? _blep;
private readonly OverlayResourceCache<CachedResources> _resources = new();
private readonly ShaderInstance _shader;
@@ -51,10 +55,12 @@ public sealed partial class StencilOverlay : Overlay
var mapUid = _mapManager.GetMapEntityId(args.MapId);
var invMatrix = args.Viewport.GetWorldToLocalMatrix();
if (_blep?.Texture.Size != args.Viewport.Size)
var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources());
if (res.Blep?.Texture.Size != args.Viewport.Size)
{
_blep?.Dispose();
_blep = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "weather-stencil");
res.Blep?.Dispose();
res.Blep = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "weather-stencil");
}
if (_entManager.TryGetComponent<WeatherComponent>(mapUid, out var comp))
@@ -65,16 +71,33 @@ public sealed partial class StencilOverlay : Overlay
continue;
var alpha = _weather.GetPercent(weather, mapUid);
DrawWeather(args, weatherProto, alpha, invMatrix);
DrawWeather(args, res, weatherProto, alpha, invMatrix);
}
}
if (_entManager.TryGetComponent<RestrictedRangeComponent>(mapUid, out var restrictedRangeComponent))
{
DrawRestrictedRange(args, restrictedRangeComponent, invMatrix);
DrawRestrictedRange(args, res, restrictedRangeComponent, invMatrix);
}
args.WorldHandle.UseShader(null);
args.WorldHandle.SetTransform(Matrix3x2.Identity);
}
protected override void DisposeBehavior()
{
_resources.Dispose();
base.DisposeBehavior();
}
private sealed class CachedResources : IDisposable
{
public IRenderTexture? Blep;
public void Dispose()
{
Blep?.Dispose();
}
}
}
@@ -0,0 +1,34 @@
using Content.Client.Atmos.Overlays;
using Content.Shared.Inventory.Events;
using Content.Shared.Overlays;
using Robust.Client.Graphics;
namespace Content.Client.Overlays;
public sealed partial class ThermalSightOverlaySystem : EquipmentHudSystem<ThermalSightComponent>
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
private GasTileDangerousTemperatureOverlay _temperatureOverlay = default!;
public override void Initialize()
{
base.Initialize();
_temperatureOverlay = new();
}
protected override void UpdateInternal(RefreshEquipmentHudEvent<ThermalSightComponent> component)
{
base.UpdateInternal(component);
_overlayMan.AddOverlay(_temperatureOverlay);
}
protected override void DeactivateInternal()
{
base.DeactivateInternal();
_overlayMan.RemoveOverlay(_temperatureOverlay);
}
}
@@ -6,18 +6,28 @@ namespace Content.Client.Paper.UI;
public sealed class PaperVisualizerSystem : VisualizerSystem<PaperVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, PaperVisualsComponent component, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
return;
if (AppearanceSystem.TryGetData<PaperStatus>(uid, PaperVisuals.Status , out var writingStatus, args.Component))
args.Sprite.LayerSetVisible(PaperVisualLayers.Writing, writingStatus == PaperStatus.Written);
if (AppearanceSystem.TryGetData<PaperStatus>(uid, PaperVisuals.Status, out var writingStatus, args.Component))
_sprite.LayerSetVisible((uid, args.Sprite), PaperVisualLayers.Writing, writingStatus == PaperStatus.Written);
if (AppearanceSystem.TryGetData<string>(uid, PaperVisuals.Stamp, out var stampState, args.Component))
{
args.Sprite.LayerSetState(PaperVisualLayers.Stamp, stampState);
args.Sprite.LayerSetVisible(PaperVisualLayers.Stamp, true);
if (stampState != string.Empty)
{
_sprite.LayerSetRsiState((uid, args.Sprite), PaperVisualLayers.Stamp, stampState);
_sprite.LayerSetVisible((uid, args.Sprite), PaperVisualLayers.Stamp, true);
}
else
{
_sprite.LayerSetVisible((uid, args.Sprite), PaperVisualLayers.Stamp, false);
}
}
}
}
@@ -98,10 +98,13 @@ public sealed class ParallaxManager : IParallaxManager
}
else
{
layers = await Task.WhenAll(
// Explicitly allocate params array to avoid sandbox violation since C# 14.
var tasks = new[]
{
LoadParallaxLayers(parallaxPrototype.Layers, loadedLayers, cancel),
LoadParallaxLayers(parallaxPrototype.LayersLQ, loadedLayers, cancel)
);
LoadParallaxLayers(parallaxPrototype.LayersLQ, loadedLayers, cancel),
};
layers = await Task.WhenAll(tasks);
}
cancel.ThrowIfCancellationRequested();
@@ -1,4 +1,3 @@
using System.Linq;
using Content.Shared.Singularity.Components;
using Robust.Client.GameObjects;
@@ -6,12 +5,14 @@ namespace Content.Client.ParticleAccelerator;
public sealed class ParticleAcceleratorPartVisualizerSystem : VisualizerSystem<ParticleAcceleratorPartVisualsComponent>
{
[Dependency] private readonly SpriteSystem _sprite = default!;
protected override void OnAppearanceChange(EntityUid uid, ParticleAcceleratorPartVisualsComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
return;
if (!args.Sprite.LayerMapTryGet(ParticleAcceleratorVisualLayers.Unlit, out var index))
if (!_sprite.LayerMapTryGet((uid, args.Sprite), ParticleAcceleratorVisualLayers.Unlit, out var index, false))
return;
if (!AppearanceSystem.TryGetData<ParticleAcceleratorVisualState>(uid, ParticleAcceleratorVisuals.VisualState, out var state, args.Component))
@@ -21,12 +22,12 @@ public sealed class ParticleAcceleratorPartVisualizerSystem : VisualizerSystem<P
if (state != ParticleAcceleratorVisualState.Unpowered)
{
args.Sprite.LayerSetVisible(index, true);
args.Sprite.LayerSetState(index, comp.StateBase + comp.StatesSuffixes[state]);
_sprite.LayerSetVisible((uid, args.Sprite), index, true);
_sprite.LayerSetRsiState((uid, args.Sprite), index, comp.StateBase + comp.StatesSuffixes[state]);
}
else
{
args.Sprite.LayerSetVisible(index, false);
_sprite.LayerSetVisible((uid, args.Sprite), index, false);
}
}
}
@@ -11,6 +11,7 @@ using Robust.Shared.GameObjects;
using Robust.Shared.Localization;
using Robust.Shared.Maths;
using FancyWindow = Content.Client.UserInterface.Controls.FancyWindow;
using System.Numerics;
namespace Content.Client.Power.APC.UI
{
@@ -6,7 +6,6 @@ using Robust.Shared.Utility;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Numerics;
using Vector4 = Robust.Shared.Maths.Vector4;
namespace Content.Client.Power;
+5 -4
View File
@@ -9,6 +9,7 @@ namespace Content.Client.PowerCell;
public sealed class PowerCellSystem : SharedPowerCellSystem
{
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SpriteSystem _sprite = default!;
public override void Initialize()
{
@@ -44,19 +45,19 @@ public sealed class PowerCellSystem : SharedPowerCellSystem
if (args.Sprite == null)
return;
if (!args.Sprite.TryGetLayer((int) PowerCellVisualLayers.Unshaded, out var unshadedLayer))
if (!_sprite.LayerExists((uid, args.Sprite), PowerCellVisualLayers.Unshaded))
return;
if (_appearance.TryGetData<byte>(uid, PowerCellVisuals.ChargeLevel, out var level, args.Component))
{
if (level == 0)
{
unshadedLayer.Visible = false;
_sprite.LayerSetVisible((uid, args.Sprite), PowerCellVisualLayers.Unshaded, false);
return;
}
unshadedLayer.Visible = true;
args.Sprite.LayerSetState(PowerCellVisualLayers.Unshaded, $"o{level}");
_sprite.LayerSetVisible((uid, args.Sprite), PowerCellVisualLayers.Unshaded, false);
_sprite.LayerSetRsiState((uid, args.Sprite), PowerCellVisualLayers.Unshaded, $"o{level}");
}
}
+14
View File
@@ -12,9 +12,16 @@
<!-- Entry layer (shows main categories) -->
<ui:RadialContainer Name="Main" VerticalExpand="True" HorizontalExpand="True" InitialRadius="100" ReserveSpaceForHiddenChildren="False">
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'rcd-component-walls-and-flooring'}" TargetLayer="WallsAndFlooring" Visible="False">
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/walls_and_flooring.png"/>
</ui:RadialMenuTextureButtonWithSector>
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'rcd-component-latticetiles'}" TargetLayer="LatticeTiles" Visible="False"> <!-- Mono -->
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/lattice.png"/>
</ui:RadialMenuTextureButtonWithSector>
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'rcd-component-platingtiles'}" TargetLayer="PlatingTiles" Visible="False"> <!-- Mono -->
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/plating.png"/>
</ui:RadialMenuTextureButtonWithSector>
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'rcd-component-windows-and-grilles'}" TargetLayer="WindowsAndGrilles" Visible="False">
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/windows_and_grilles.png"/>
</ui:RadialMenuTextureButtonWithSector>
@@ -27,11 +34,18 @@
<ui:RadialMenuTextureButtonWithSector SetSize="64 64" ToolTip="{Loc 'rcd-component-lighting'}" TargetLayer="Lighting" Visible="False">
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/lighting.png"/>
</ui:RadialMenuTextureButtonWithSector>
</ui:RadialContainer>
<!-- Walls and flooring -->
<ui:RadialContainer Name="WallsAndFlooring" VerticalExpand="True" HorizontalExpand="True" InitialRadius="100"/>
<!-- Lattices Mono -->
<ui:RadialContainer Name="LatticeTiles" VerticalExpand="True" HorizontalExpand="True" InitialRadius="100"/>
<!-- Plating Mono -->
<ui:RadialContainer Name="PlatingTiles" VerticalExpand="True" HorizontalExpand="True" InitialRadius="100"/>
<!-- Windows and grilles -->
<ui:RadialContainer Name="WindowsAndGrilles" VerticalExpand="True" HorizontalExpand="True" InitialRadius="100"/>
@@ -77,6 +77,16 @@ public sealed partial class RoboticsConsoleWindow : FancyWindow
if (_selected is {} selected && !_cyborgs.ContainsKey(selected))
_selected = null;
// Corvax-Next-AiRemoteControl-Start
var isAiControllable = false;
if (_selected != null)
{
_cyborgs.TryGetValue(_selected, out var data);
isAiControllable = data.IsAiControllable;
}
// Corvax-Next-AiRemoteControl-End
var hasCyborgs = _cyborgs.Count > 0;
NoCyborgs.Visible = !hasCyborgs;
CyborgsContainer.Visible = hasCyborgs;
@@ -6,6 +6,9 @@ using Robust.Client.UserInterface;
using Robust.Shared.Log;
using Robust.Shared.Map;
// Mono
using Content.Shared._Mono.Shuttles;
namespace Content.Client.Shuttles.BUI;
[UsedImplicitly]
@@ -25,6 +28,7 @@ public sealed partial class ShuttleConsoleBoundUserInterface : BoundUserInterfac
_window.RequestFTL += OnFTLRequest;
_window.RequestBeaconFTL += OnFTLBeaconRequest;
_window.RequestAutopilot += OnAutopilotRequest; // Mono
_window.DockRequest += OnDockRequest;
_window.UndockRequest += OnUndockRequest;
_window.UndockAllRequest += OnUndockAllRequest;
@@ -78,6 +82,16 @@ public sealed partial class ShuttleConsoleBoundUserInterface : BoundUserInterfac
});
}
// Mono
private void OnAutopilotRequest(MapCoordinates obj, Angle angle)
{
SendMessage(new ShuttleConsoleAutopilotPositionMessage()
{
Coordinates = obj,
Angle = angle,
});
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
@@ -1,6 +1,7 @@
using Content.Shared.Shuttles.Systems;
using Content.Shared.Shuttles.Components;
using Content.Shared.Access.Components;
using Content.Shared.UserInterface;
namespace Content.Client.Shuttles.Systems;
@@ -17,4 +18,17 @@ public sealed class ShuttleConsoleLockSystem : SharedShuttleConsoleLockSystem
// Prediction only
return false;
}
}
/// <summary>
/// Client extension of OnUIOpenAttempt. Prevents UI flashing open on client.
/// </summary>
protected override void OnUIOpenAttempt(EntityUid uid,
ShuttleConsoleLockComponent component,
ActivatableUIOpenAttemptEvent args)
{
base.OnUIOpenAttempt(uid, component, args);
if(Timing.IsFirstTimePredicted && args.Cancelled)
Popup.PopupEntity(Loc.GetString("shuttle-console-locked"), uid, args.User);
}
}
@@ -138,6 +138,293 @@ public partial class BaseShuttleControl : MapGridControl
}
// End Frontier Corvax
// Mono
protected void DrawAzimuthScale(DrawingHandleScreen handle, Angle rotation)
{
const int azimuthMinorTickStepDegrees = 10;
const int azimuthMajorTickInterval = 3;
const int azimuthCardinalTickInterval = 9;
const float edgeInset = 10f;
const float tickInset = 4f;
const float minorTickLength = 5f;
const float majorTickLength = 9f;
const float cardinalTickLength = 12f;
const float labelPadding = 3f;
const float labelOffset = tickInset + cardinalTickLength + labelPadding;
const float regularLabelScale = 0.62f;
const float cardinalLabelScale = 0.72f;
var origin = MidPointVector;
var viewportSize = new Vector2(PixelWidth, PixelHeight);
var subtleGray = Color.FromHex("#676767");
var northAccent = Color.FromHex("#7F7442");
var eastAccent = Color.FromHex("#456273");
var baseTickColor = subtleGray.WithAlpha(0.34f);
var majorTickColor = subtleGray.WithAlpha(0.5f);
var cardinalTickColor = subtleGray.WithAlpha(0.68f);
var regularLabelColor = subtleGray.WithAlpha(0.76f);
var cardinalLabelColor = subtleGray.WithAlpha(0.9f);
var labelShadowColor = Color.Black.WithAlpha(0.36f);
for (var step = 0; step < 360 / azimuthMinorTickStepDegrees; step++)
{
var degrees = step * azimuthMinorTickStepDegrees;
var direction = GetAzimuthDirection(rotation, degrees);
var isCardinal = step % azimuthCardinalTickInterval == 0;
var isMajor = step % azimuthMajorTickInterval == 0;
var isNorth = degrees == 0;
var isEast = degrees == 90;
var tickLength = isCardinal
? cardinalTickLength
: isMajor
? majorTickLength
: minorTickLength;
if (!TryGetViewportEdgePoint(origin, direction, viewportSize, edgeInset, out var edgePoint, out var inwardNormal))
continue;
var outer = edgePoint + inwardNormal * tickInset;
var inner = outer + inwardNormal * tickLength;
var tickColor = isNorth
? northAccent.WithAlpha(0.58f)
: isEast
? eastAccent.WithAlpha(0.58f)
: isCardinal
? cardinalTickColor
: isMajor
? majorTickColor
: baseTickColor;
handle.DrawLine(outer, inner, tickColor);
if (isNorth)
{
var sideOffset = new Vector2(-inwardNormal.Y, inwardNormal.X) * 0.35f;
handle.DrawLine(outer + sideOffset, inner + sideOffset, tickColor.WithAlpha(0.46f));
}
if (!isMajor)
continue;
var label = degrees.ToString();
var labelScale = isCardinal ? cardinalLabelScale : regularLabelScale;
var labelColor = isEast
? eastAccent.WithAlpha(0.76f)
: isCardinal
? cardinalLabelColor
: regularLabelColor;
var labelSize = handle.GetDimensions(Font, label, labelScale);
var labelPosition = GetEdgeLabelPosition(edgePoint, inwardNormal, labelSize, viewportSize, labelOffset);
handle.DrawString(Font, labelPosition + new Vector2(1f, 1f), label, labelScale, labelShadowColor);
handle.DrawString(Font, labelPosition, label, labelScale, labelColor);
}
}
protected void DrawAzimuthRing(DrawingHandleScreen handle, Angle rotation)
{
const int azimuthMinorTickStepDegrees = 10;
const int azimuthMajorTickInterval = 3;
const int azimuthCardinalTickInterval = 9;
const float ringInset = 16f;
const float minorTickLength = 5f;
const float majorTickLength = 9f;
const float cardinalTickLength = 12f;
const float labelPadding = 5f;
const float regularLabelScale = 0.62f;
const float cardinalLabelScale = 0.72f;
var origin = MidPointVector;
var radius = MathF.Max(8f, SizeFull * 0.5f - ringInset);
var subtleGray = Color.FromHex("#676767");
var northAccent = Color.FromHex("#7F7442");
var eastAccent = Color.FromHex("#456273");
var baseTickColor = subtleGray.WithAlpha(0.34f);
var majorTickColor = subtleGray.WithAlpha(0.5f);
var cardinalTickColor = subtleGray.WithAlpha(0.68f);
var regularLabelColor = subtleGray.WithAlpha(0.76f);
var cardinalLabelColor = subtleGray.WithAlpha(0.9f);
var labelShadowColor = Color.Black.WithAlpha(0.36f);
handle.DrawCircle(origin, radius, subtleGray.WithAlpha(0.12f), false);
for (var step = 0; step < 360 / azimuthMinorTickStepDegrees; step++)
{
var degrees = step * azimuthMinorTickStepDegrees;
var direction = GetAzimuthDirection(rotation, degrees);
var isCardinal = step % azimuthCardinalTickInterval == 0;
var isMajor = step % azimuthMajorTickInterval == 0;
var isNorth = degrees == 0;
var isEast = degrees == 90;
var tickLength = isCardinal
? cardinalTickLength
: isMajor
? majorTickLength
: minorTickLength;
var outer = origin + direction * radius;
var inner = origin + direction * (radius - tickLength);
var tickColor = isNorth
? northAccent.WithAlpha(0.58f)
: isEast
? eastAccent.WithAlpha(0.58f)
: isCardinal
? cardinalTickColor
: isMajor
? majorTickColor
: baseTickColor;
handle.DrawLine(outer, inner, tickColor);
if (isNorth)
{
var sideOffset = new Vector2(-direction.Y, direction.X) * 0.35f;
handle.DrawLine(outer + sideOffset, inner + sideOffset, tickColor.WithAlpha(0.46f));
}
if (!isMajor)
continue;
var label = degrees.ToString();
var labelScale = isCardinal ? cardinalLabelScale : regularLabelScale;
var labelColor = isEast
? eastAccent.WithAlpha(0.76f)
: isCardinal
? cardinalLabelColor
: regularLabelColor;
var labelSize = handle.GetDimensions(Font, label, labelScale);
var labelPosition = origin + direction * (radius - tickLength - labelPadding) - labelSize * 0.5f;
handle.DrawString(Font, labelPosition + new Vector2(1f, 1f), label, labelScale, labelShadowColor);
handle.DrawString(Font, labelPosition, label, labelScale, labelColor);
}
}
protected void DrawCompassOverlay(DrawingHandleScreen handle, Angle heading)
{
var compassCenter = new Vector2(44f, 44f);
const float compassRadius = 24f;
var ringColor = Color.White.WithAlpha(0.08f);
var northColor = Color.FromHex("#776C43");
var eastColor = Color.FromHex("#4C6572");
handle.DrawCircle(compassCenter, compassRadius, ringColor, false);
handle.DrawCircle(compassCenter, 2.5f, ringColor.WithAlpha(0.48f), true);
DrawCompassNeedle(handle, compassCenter, compassRadius, GetAzimuthDirection(heading, 0f), "N", northColor);
DrawCompassNeedle(handle, compassCenter, compassRadius * 0.82f, GetAzimuthDirection(heading, 90f), "E", eastColor);
}
private void DrawCompassNeedle(
DrawingHandleScreen handle,
Vector2 compassCenter,
float radius,
Vector2 direction,
string label,
Color color)
{
var tip = compassCenter + direction * radius;
var tail = compassCenter - direction * (radius * 0.35f);
DrawArrowLine(handle, tail, tip, color.WithAlpha(0.58f), 6f);
var labelSize = handle.GetDimensions(Font, label, 0.9f);
var labelPosition = tip + direction * 6f - new Vector2(labelSize.X * 0.5f, labelSize.Y * 0.5f);
handle.DrawString(Font, labelPosition, label, 0.9f, color.WithAlpha(0.7f));
}
private static void DrawArrowLine(
DrawingHandleScreen handle,
Vector2 start,
Vector2 end,
Color color,
float headLength)
{
var direction = end - start;
if (direction.LengthSquared() <= 0.001f)
return;
direction = Vector2.Normalize(direction);
var left = new Vector2(-direction.Y, direction.X);
handle.DrawLine(start, end, color);
handle.DrawLine(end, end - direction * headLength + left * (headLength * 0.45f), color);
handle.DrawLine(end, end - direction * headLength - left * (headLength * 0.45f), color);
}
private static bool TryGetViewportEdgePoint(
Vector2 origin,
Vector2 direction,
Vector2 viewportSize,
float inset,
out Vector2 edgePoint,
out Vector2 inwardNormal)
{
edgePoint = default;
inwardNormal = default;
if (direction.LengthSquared() <= 0.001f)
return false;
direction = Vector2.Normalize(direction);
var min = new Vector2(inset, inset);
var max = viewportSize - min;
if (max.X <= min.X || max.Y <= min.Y)
return false;
var tx = direction.X > 0f
? (max.X - origin.X) / direction.X
: direction.X < 0f
? (min.X - origin.X) / direction.X
: float.PositiveInfinity;
var ty = direction.Y > 0f
? (max.Y - origin.Y) / direction.Y
: direction.Y < 0f
? (min.Y - origin.Y) / direction.Y
: float.PositiveInfinity;
var t = Math.Min(tx, ty);
if (!float.IsFinite(t) || t <= 0f)
return false;
edgePoint = origin + direction * t;
if (tx < ty)
inwardNormal = direction.X > 0f ? -Vector2.UnitX : Vector2.UnitX;
else
inwardNormal = direction.Y > 0f ? -Vector2.UnitY : Vector2.UnitY;
return true;
}
private static Vector2 GetEdgeLabelPosition(
Vector2 edgePoint,
Vector2 inwardNormal,
Vector2 labelSize,
Vector2 viewportSize,
float offset)
{
var anchor = edgePoint + inwardNormal * offset;
Vector2 requested;
if (Math.Abs(inwardNormal.X) > Math.Abs(inwardNormal.Y))
{
requested = inwardNormal.X > 0f
? new Vector2(anchor.X, anchor.Y - labelSize.Y * 0.5f)
: new Vector2(anchor.X - labelSize.X, anchor.Y - labelSize.Y * 0.5f);
}
else
{
requested = inwardNormal.Y > 0f
? new Vector2(anchor.X - labelSize.X * 0.5f, anchor.Y)
: new Vector2(anchor.X - labelSize.X * 0.5f, anchor.Y - labelSize.Y);
}
var minPosition = new Vector2(offset, offset);
var maxPosition = viewportSize - labelSize - minPosition;
return Vector2.Clamp(requested, minPosition, maxPosition);
}
private static Vector2 GetAzimuthDirection(Angle baseAngle, float azimuthDegrees)
{
var angle = baseAngle + Angle.FromDegrees(azimuthDegrees);
var radians = (float) angle.Theta - MathF.PI / 2f;
return new Vector2(MathF.Cos(radians), MathF.Sin(radians));
}
// End Mono
protected void DrawGrid(DrawingHandleScreen handle, Matrix3x2 gridToView, Entity<MapGridComponent> grid, Color color, float alpha = 0.01f)
{
var rator = Maps.GetAllTilesEnumerator(grid.Owner, grid.Comp);
@@ -28,7 +28,7 @@
Orientation="Vertical">
<!-- FTL Lock Section -->
<controls1:StripeBack MinSize="48 48">
<controls:Label Text="{controls:Loc 'FTL Lock'}" HorizontalAlignment="Center"/>
<controls:Label Text="{controls:Loc 'shuttle-console-ftl-lock'}" HorizontalAlignment="Center"/>
</controls1:StripeBack>
<controls:PanelContainer VerticalExpand="True" HorizontalExpand="True" Margin="4 4 4 4">
<controls:PanelContainer.PanelOverride>
@@ -36,12 +36,12 @@
</controls:PanelContainer.PanelOverride>
<controls:BoxContainer Orientation="Horizontal" HorizontalAlignment="Stretch" Margin="5 5 5 5">
<controls:Button Name="FTLLockEnabledButton"
Text="{controls:Loc 'Enabled'}"
Text="{controls:Loc 'shuttle-console-ftl-lock-enabled'}"
ToggleMode="True"
HorizontalExpand="True"
StyleClasses="OpenRight"/>
<controls:Button Name="FTLLockDisabledButton"
Text="{controls:Loc 'Disabled'}"
Text="{controls:Loc 'shuttle-console-ftl-lock-disabled'}"
ToggleMode="True"
HorizontalExpand="True"
StyleClasses="OpenLeft"/>
@@ -50,7 +50,7 @@
<!-- Docks Section -->
<controls1:StripeBack MinSize="48 48">
<controls:Label Text="{controls:Loc 'Docks'}" HorizontalAlignment="Center"/>
<controls:Label Text="{controls:Loc 'shuttle-console-docks-label'}" HorizontalAlignment="Center"/>
</controls1:StripeBack>
<controls:PanelContainer VerticalExpand="True" HorizontalExpand="True" Margin="4 4 4 4">
<controls:PanelContainer.PanelOverride>
@@ -62,7 +62,7 @@
<graphics:StyleBoxFlat BorderThickness="2" BorderColor="#333333" BackgroundColor="#121212"/>
</controls:PanelContainer.PanelOverride>
<controls:Button Name="UndockAllButton"
Text="{controls:Loc 'Undock All'}"
Text="{controls:Loc 'shuttle-console-undock-all'}"
Margin="5 5 5 5"
StyleClasses="ButtonSquare"/>
</controls:PanelContainer>

Some files were not shown because too many files have changed in this diff Show More