{"id":416,"date":"2026-11-07T10:00:44","date_gmt":"2026-11-07T10:00:44","guid":{"rendered":"https:\/\/www.me3tweaks.com\/blog\/?p=416"},"modified":"2026-11-07T17:03:16","modified_gmt":"2026-11-07T17:03:16","slug":"porting-mass-effect-3-multiplayer-to-legendary-edition","status":"publish","type":"post","link":"https:\/\/www.me3tweaks.com\/blog\/modding\/porting-mass-effect-3-multiplayer-to-legendary-edition\/","title":{"rendered":"Porting Mass Effect 3 Multiplayer to Legendary Edition"},"content":{"rendered":"<div class=\"boldgrid-section\">\n<div class=\"container\">\n<div class=\"row\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"mod-reset\"><img data-opt-id=805296975  fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-large wp-image-420\" src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:590\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png\" alt=\"Image of Legendary Edition Multiplayer load screen\" width=\"1024\" height=\"590\" srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:590\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:173\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:443\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:886\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:144\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:317\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:461\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:312\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 312w, https:\/\/mliomtqrfel3.i.optimole.com\/w:520\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 520w, https:\/\/mliomtqrfel3.i.optimole.com\/w:867\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 867w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1873\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/LMPSlug.png 1920w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h1 class=\"\">Legendary Edition Multiplayer Launches!<\/h1>\n<p class=\"\">The ME3Tweaks group has been working to port Mass Effect 3 multiplayer in full to Mass Effect Legendary Edition since November 2023. On November 7, 2026, we finally shipped! Legendary Edition Multiplayer brings back the classic Mass Effect 3 multiplayer experience, with changes throughout brought to you by the experts who modded the original extensively, with plans to expand and improve further in the future.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">In this post I&#8217;ll go over a bit of history of the project.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\">Basic timeline<\/h2>\n<h3 class=\"\">2023\/2024<\/h3>\n<p class=\"\">This project started literally the day I launched Mass Effect 2 Legendary Edition Randomizer. The Discord got set up a few days later so we would be less likely to accidentally leak the project.<\/p>\n<figure id=\"attachment_425\" aria-describedby=\"caption-attachment-425\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1983489141  fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-425 size-large\" src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:394\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png\" alt=\"Image of first messages in the Discord server for Project Milan\" width=\"1024\" height=\"394\" srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:394\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:115\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:295\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:96\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:212\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:308\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:468\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 468w, https:\/\/mliomtqrfel3.i.optimole.com\/w:780\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 780w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1045\/h:402\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-06_20h47_26.png 1045w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><figcaption id=\"caption-attachment-425\" class=\"wp-caption-text\">The opening messages for the private development Discord<\/figcaption><\/figure>\n<p class=\"\">The name Project Milan comes from the ME3Tweaks&#8217; group talks with BioWare before release of Mass Effect Legendary Edition. One of the developers was screen sharing with us, and we saw a Google Drive folder with their project codenames, like Dylan and Bowie. For some reason, I misremembered one of them being &#8216;Milan&#8217;. Years later, when this project was starting, I decided to reuse that name as the name of this project &#8211; hence, Project Milan.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We made rapid progress getting a basic level up and running with a multiplayer kit, taking about two months to get it to a state where you could actually complete a full match (technically it would crash as soon as you finished wave 11). A ton of scaffolding needed to be brought up for this &#8211; an entirely new pipeline system, similar to CrossGen-V, but using what we learned from that to allow it to scale better. At the time we didn&#8217;t know the scope of this project would grow this large.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">I made a small internal trailer back in 2024 to try and motivate myself and the rest of my team after we started to burn out on the project. It shows some of the early gameplay prototyping we had going at the time. It&#8217;s kind of cringe, especially with how AI has changed since it was made.<\/p>\n<p>&nbsp;<\/p>\n<p class=\"\">We planned to implement Redemption and Rejection early on in the development process, splitting its pipelines off into a sub-project called ExtraContent, or EC for short. It lets us build them standalone as DLC mods or as part of the main mod with full integration. We started work rebuilding Rejection from scratch, using new class compiler system to let us define a lot more of it in C# than in package files. Rejection got put on the backburner once we got it prototyped, since it was planned for post-release.<\/p>\n<figure id=\"attachment_430\" aria-describedby=\"caption-attachment-430\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=191496356  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:592\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png\"  decoding=\"async\" class=\"wp-image-430 size-large\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20592%22%20width%3D%221024%22%20height%3D%22592%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22592%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"592\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:592\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:174\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:444\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:889\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:145\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:318\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:463\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:311\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 311w, https:\/\/mliomtqrfel3.i.optimole.com\/w:519\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 519w, https:\/\/mliomtqrfel3.i.optimole.com\/w:864\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 864w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1866\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h32_06.png 1922w\" \/><figcaption id=\"caption-attachment-430\" class=\"wp-caption-text\">A prototype change of the Forerunner. The hair mesh of the original pawn is mixed with the embedded hair in the single mesh that multiplayer uses.<\/figcaption><\/figure>\n<\/div>\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">One big thing to come out of this year was the prototype for the Texture Override system, what would eventually later become M3TO. This allowed us to replace textures at runtime, something we wanted to have since Mass Effect Modder would significantly complicate modding multiplayer given the additional restrictions.<\/p>\n<figure id=\"attachment_431\" aria-describedby=\"caption-attachment-431\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1981064622  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:592\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png\"  decoding=\"async\" class=\"wp-image-431 size-large\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20592%22%20width%3D%221024%22%20height%3D%22592%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22592%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"592\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:592\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:174\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:444\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:889\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:145\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:318\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:463\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:311\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 311w, https:\/\/mliomtqrfel3.i.optimole.com\/w:519\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 519w, https:\/\/mliomtqrfel3.i.optimole.com\/w:864\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 864w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1866\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/cheeseburgeredi.png 1922w\" \/><figcaption id=\"caption-attachment-431\" class=\"wp-caption-text\">Look, it wouldn&#8217;t be a blog post without the Edmonton Cheeseburger<\/figcaption><\/figure>\n<\/div>\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"\">We pivoted to Pinnacle Station 2.0 for 2024&#8217;s N7 day, using the pipeline tech we built for Project Milan to handle its lighting build. Lighting was easier to build for Pinnacle Station because we had the data from ME1 available to build shaders in UDK, which are required for a proper lighting bake. Pinnacle Station was a proof of concept for what we would be doing in Project Milan&#8217;s later builds.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3 class=\"\">2025<\/h3>\n<p class=\"\">Not much work was done in 2025 due to real life issues. Some work was done &#8211; mainly shader research &#8211; but we didn&#8217;t make too much heavy progress. Shader compiler research was slow, extremely challenging, and the scope of the work was immense. We used UDK to help figure out how some of the shaders would have compiled, even though it wasn&#8217;t the same as BioWare&#8217;s shader compiler system.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_427\" aria-describedby=\"caption-attachment-427\" style=\"width: 943px\" class=\"wp-caption aligncenter\"><img data-opt-id=673700907  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png\"  decoding=\"async\" class=\"wp-image-427 size-full\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"943\" height=\"602\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:943\/h:602\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 943w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:192\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:490\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:160\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:351\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:511\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:282\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 282w, https:\/\/mliomtqrfel3.i.optimole.com\/w:470\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 470w, https:\/\/mliomtqrfel3.i.optimole.com\/w:783\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-06-25_18h37_32.png 783w\" \/><figcaption id=\"caption-attachment-427\" class=\"wp-caption-text\">Screenshot of the shader serialization hook for debugging with the team<\/figcaption><\/figure>\n<p class=\"\">I discovered during reverse engineering that the HLSL Translator &#8211; the system that converts a Material export into HLSL for compiling as part of the complicated web of USF HLSL files &#8211; was still left in the game, but unable to be used without significant hijacking of the game. Eventually I was able to force the game to produce these HLSL files, which saved us a ton of time &#8211; but unfortunately, this was actually just the easy part.<\/p>\n<p class=\"\">LE3 has dozens of vertex factories and hundreds of types of shader classes &#8211; many of which can be mixed to produce even more permutations. In the original C++ source code, this was templated C++ code, which made it hell to reverse engineer. I developed ShaderHost and ShaderClient. ShaderClient would inject into the game and force it to compile shader data, which it would pipe out to our C# ShaderHost which could capture it and store it into usable ShaderCaches. It would also orchestrate building shader levels that would trigger ShaderClient, as well as preview them.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_428\" aria-describedby=\"caption-attachment-428\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=2140898901  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:598\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png\"  decoding=\"async\" class=\"size-large wp-image-428\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20598%22%20width%3D%221024%22%20height%3D%22598%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22598%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"Image of broken shaders being previewed\" width=\"1024\" height=\"598\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:598\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:175\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:448\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:897\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1849\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 2048w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:146\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:321\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:467\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:308\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 308w, https:\/\/mliomtqrfel3.i.optimole.com\/w:514\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 514w, https:\/\/mliomtqrfel3.i.optimole.com\/w:856\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2025-07-08_18h09_35.png 856w\" \/><figcaption id=\"caption-attachment-428\" class=\"wp-caption-text\">2025 view of ShaderHost &#8211; previewing compiled shaders for review<\/figcaption><\/figure>\n<p class=\"\">I also prototyped integrating with the Discord Social SDK to provide more platform features like direct friend invites. We actually have a semi-working ASI for this, but there are some serious features lacking in the overlay that made us de-prioritize this. Discord unfortunately hasn&#8217;t really fixed it so the utility of the ASI is pretty low.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3 class=\"\">2026<\/h3>\n<p class=\"\">In 2026, work picked back up on the project throughout the year, as different components started to come together: Wwiser.NET, shader compiler, unattended lighting bakes, among other things. We started to be able to compile the full game and have it feel like a playable game. Things were still broken &#8211; progress saving was really spotty, we had no matchmaking services, and shaders were compiling but often felt off, mainly because we didn&#8217;t have the correct macros that BioWare used to compile the shaders from the HLSL and the USF files the game ships with. Mass Effect 3 (2012) doesn&#8217;t ship with them, so there&#8217;s very little to compare against.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">I spent some time looking at porting Pinnacle Station maps from LE1 to LE3 and what cross-level porting would require. I had ported LE2 maps to LE3 before this project started as part of an abandoned project called <em>Project Wardle<\/em>. I had ported Jacob&#8217;s Loyalty mission to LE3, with working cover. In early March we got some basic working versions of Pinnacle Station, at least visually. Cover was effectively non-existent, since LE1&#8217;s cover system is extremely basic and lacks most of what LE3&#8217;s cover system needs.<\/p>\n<figure id=\"attachment_436\" aria-describedby=\"caption-attachment-436\" style=\"width: 768px\" class=\"wp-caption aligncenter\"><img data-opt-id=1316105299  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png\"  decoding=\"async\" class=\"size-full wp-image-436\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"Splash screen for Milan UDK\" width=\"768\" height=\"342\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:342\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:134\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:111\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:245\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:404\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png 404w, https:\/\/mliomtqrfel3.i.optimole.com\/w:674\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-10-03_10h20_11.png 674w\" \/><figcaption id=\"caption-attachment-436\" class=\"wp-caption-text\">Loading splash screen for Milan UDK &#8211; A custom install of UDK we use for building lighting<\/figcaption><\/figure>\n<p class=\"\">I spent some time researching the cover system for LE3, trying to build some sort of tool that could at least build basic working cover. I did get a super basic working version of dynamically generated cover, but it falls apart when the level geometry doesn&#8217;t follow standard cover height or has ramps, or weird spacing. It got shelved to focus on Project Milan development.<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_435\" aria-describedby=\"caption-attachment-435\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=163936212  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:596\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png\"  decoding=\"async\" class=\"size-large wp-image-435\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20596%22%20width%3D%221024%22%20height%3D%22596%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22596%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"CoverClient showing cover node connections\" width=\"1024\" height=\"596\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:596\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:175\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:447\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:894\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:145\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:320\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:465\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:309\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 309w, https:\/\/mliomtqrfel3.i.optimole.com\/w:516\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 516w, https:\/\/mliomtqrfel3.i.optimole.com\/w:859\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 859w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1602\/h:932\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-03-20_17h26_38.png 1602w\" \/><figcaption id=\"caption-attachment-435\" class=\"wp-caption-text\">CoverClient showing different types of cover data the AI uses to determine the optimal place to position itself<\/figcaption><\/figure>\n<p class=\"\">Around April of 2026 we made the decision to fully split Legendary Edition Multiplayer (LMP) into an entirely new game. It still requires you to own Mass Effect Legendary Edition, but it won\u2019t interact at all with the original game anymore &#8211; settings, saves, mods &#8211; everything is entirely separate. This was done to ensure mods developed for LE3 must be properly reimplemented to work in Project Milan &#8211; there is a much larger set of barriers for mods being used in a replicated environment.<\/p>\n<p class=\"\">This task added a lot of work &#8211; Mod Manager, Legendary Explorer, and all sorts of other tools needed updating, which took significant amounts of time to develop. We also started using AI at this point to begin accelerating some of the work for our tooling &#8211; such as making Legendary Explorer have a dark theme.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">Near the end of July 2026 we set the target release for N7 day, not knowing that there was still a mountain of work ahead of us. At this point we had most of the assets working properly, the rest of development was polishing and adding new features. Most of the team started to come together for this release &#8211; textures, playtesting, feedback, among other things.<\/p>\n<figure id=\"attachment_437\" aria-describedby=\"caption-attachment-437\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img data-opt-id=1040627356  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg\"  decoding=\"async\" class=\"size-full wp-image-437\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"600\" height=\"375\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:600\/h:375\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg 600w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:188\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:156\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:344\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:288\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg 288w, https:\/\/mliomtqrfel3.i.optimole.com\/w:480\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/splash.jpg 480w\" \/><figcaption id=\"caption-attachment-437\" class=\"wp-caption-text\">Splash screen for development builds of Project Milan<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We picked up a new workhorse member, Stumpy, who was vital to getting this thing out the door. I tricked him into joining the project by telling him I was doing a settings overhaul. Once he joined, his first message was &#8216;<em>I guess &#8220;mod that overhauls the settings system&#8221; is accurate&#8230; in a way&#8217;<\/em> once he joined the development Discord server. Give Stumpy a big round of applause for making it through the grueling torture he endured trying to build all of the private versions of our development tools. He crashed out multiple times.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We have a lot of new features for Legendary Edition Multiplayer, too many to show pictures of, but we wanted to focus on things that would make the game feel better to play beyond just a texture upscale and higher quality lighting.<\/p>\n<p class=\"\">Some of those features include:<\/p>\n<ul class=\"\">\n<li>Improved pause menu showing player death status, invite generation, and player pings<\/li>\n<li>Player names showing their health status during gameplay so you can tell if someone is in critical need<\/li>\n<li>New banners to unlock for more personalization<\/li>\n<li>In-game configurable Field of View (FOV) and aim assist tweaks<\/li>\n<li>Heavy weapon options to change up gameplay<\/li>\n<li>Entirely new splash menu that showcases each map<\/li>\n<li>Integration with the main singleplayer campaign by unlocking content via achievements (LMP will not progress anything achievement related)<\/li>\n<li>New wavelist options: Coalition (random enemy faction per wave) and Unified (random enemy waves, scaling per wave)<\/li>\n<\/ul>\n<figure id=\"attachment_438\" aria-describedby=\"caption-attachment-438\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1336820847  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png\"  decoding=\"async\" class=\"size-large wp-image-438\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 889w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h29_34.png 1920w\" \/><figcaption id=\"caption-attachment-438\" class=\"wp-caption-text\">Heavy weapon selection with the cleaned up Talon Mercenary<\/figcaption><\/figure>\n<p class=\"\">We integrated a lot of new debug features for future mods and laid a lot of groundwork for future expansion that you won&#8217;t notice as an end user, but will become relevant later. We have a lot of ideas we wanted to implement that we just didn&#8217;t have time to flesh out, some of which haven&#8217;t been discussed publicly yet, so stay tuned for updates for when they do come out.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We&#8217;ve been working on this literally up until 12 hours before launch time. I spent way too much time writing this blog post when I should have been designing the mod page instead.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\">Using UE4 to build lighting for a UE3 game<\/h2>\n<p class=\"\">In the latter half of August 2026, as our level porting began to fully take shape, we started focusing more on the lighting quality. Baking static lighting for levels is important for performance, and our detour releasing Pinnacle Station 2.0 in 2024 was our initial implementation of lightbaking via UDK. We spent a significant amount of time comparing lightmaps from ME3, LE3, and UDK\u2019s Lightmass.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We learned that Unreal Engine 4 also has Lightmass, and SwarmAgent &#8211; the coordinator that UE3 also uses for lighting compute. Lightmass in UE4 is a direct continuation of the UE3 version, taking a scene, light sources, materials, shaders &#8211; and does a lighting simulation. The UE4 version has better light bouncing and performance and has a very similar interface.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">Using our UDK injection dll, we were able to deploy a shim that could redirect UDK\u2019s scene export into UE4\u2019s lightmass, have that process the lighting compute, and then feed it back through the shim (which translated it back to UDK\u2019s format) and then put it back into the packages.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">Production lighting on my workstation (128GB memory, Ryzen 5900X) for each map at a 2x lightmap scale from BioWare\u2019s ME3 version takes about 30 minutes, and originally used about 55GB during the bake until we reduced the importance volume so lighting quality was more focused. A full production build of Project Milan takes about 9 hours when lighting bake is added.<\/p>\n<figure id=\"attachment_422\" aria-describedby=\"caption-attachment-422\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=2112547594  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:579\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png\"  decoding=\"async\" class=\"wp-image-422 size-large\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20579%22%20width%3D%221024%22%20height%3D%22579%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22579%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"579\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:579\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:170\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:434\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:869\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:311\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:452\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:318\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 318w, https:\/\/mliomtqrfel3.i.optimole.com\/w:530\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 530w, https:\/\/mliomtqrfel3.i.optimole.com\/w:884\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 884w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1909\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-09-30_22h07_00.png 2012w\" \/><figcaption id=\"caption-attachment-422\" class=\"wp-caption-text\">Top right: UE3 Lightmass, Bottom left: UE4 Lightmass (WIP), Bottom right: original ME3<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">Tuning this took quite a while, given how long light bakes take, and that some of the information needed to bake lighting like BioWare did was stripped from ME3 at build time. Being able to tune this allowed me to finally develop an idea I had for Redemption mod back in the day, but could not get working: A proper night map that makes use of flashlights.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<figure id=\"attachment_440\" aria-describedby=\"caption-attachment-440\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=959317581  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png\"  decoding=\"async\" class=\"size-large wp-image-440\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 2048w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/gianthazard_use.png 889w\" \/><figcaption id=\"caption-attachment-440\" class=\"wp-caption-text\">Night mode Hazard Giant with photo mode. This picture shows the brightest part of the map, other areas are nearly pitch black.<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\">Tooling used in the project<\/h2>\n<p class=\"\">Project Milan had a very wide set of tools that were used at just about any time. Development would regularly involve 6 or more open Visual Studio solutions along with Ghidra and multiple copies of the game. Different tools that were regularly open:<\/p>\n<ul class=\"\">\n<li aria-level=\"1\">ME3Tweaks Mod Manager<\/li>\n<li aria-level=\"1\">Legendary Explorer<\/li>\n<li aria-level=\"1\">Ghidra<\/li>\n<li aria-level=\"1\">Visual Studio Solutions \/ Projects:\n<ul>\n<li aria-level=\"2\">ME3-ASI-Plugins (dump ME3 profile)<\/li>\n<li aria-level=\"2\">MilanClient + MilanServer (ASI and Matchmaking)<\/li>\n<li aria-level=\"2\">LECCLI (AI investigative tool)<\/li>\n<li aria-level=\"2\">LExASIs &#8211; Debug Logger, Function Logger, PNG Screenshots (for some advanced photo systems) etc.<\/li>\n<li aria-level=\"2\">Project Milan\n<ul>\n<li aria-level=\"3\">ShaderHost<\/li>\n<li aria-level=\"3\">LEDecooker<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\">New content<\/h2>\n<p class=\"\">We spent a good deal of time planning new features that didn\u2019t come together until near the end of development. We didn\u2019t get all the things we wanted in time for release, but here\u2019s a couple highlights:<\/p>\n<h3 class=\"\">Photo mode<\/h3>\n<figure id=\"attachment_451\" aria-describedby=\"caption-attachment-451\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1213120163  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png\"  decoding=\"async\" class=\"size-large wp-image-451\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 2048w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/photomode.png 889w\" \/><figcaption id=\"caption-attachment-451\" class=\"wp-caption-text\">Photo mode in LMP. There&#8217;s tons of options to follow, change smoothing, or just flycam. It remembers your settings for the next time you die.<\/figcaption><\/figure>\n<p class=\"\">Photo mode was a new addition to Legendary Edition. However, it doesn\u2019t really work in a networked, multi-player setup. It took us several weeks to refine Photo Mode to work in the new environment, including camera transitions, player switching, hiding of different UI elements, and then backing out all of that when you regain control of your character.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">Photo mode is accessible when in spectator mode. Photo mode effectively is an enhanced spectator mode, allowing full-map freecam, motion smoothing, photo filters, and more. We plan to add more photo filters once we get a better material editor in Legendary Explorer, as it\u2019s pretty difficult to preview. We plan to allow you to use photo mode from other parts of the game, but we have to make sure it makes sense &#8211; the host going into photo mode in a public match significantly degrades the experience. But in private matches, you should have expanded freedom &#8211; something we&#8217;re planning for multiple other features too.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3 class=\"\">Banners<\/h3>\n<p class=\"\">Banners are a feature of Mass Effect 3 Multiplayer that was introduced in the Retaliation DLC (MP4). They allow you to have a background for your lobby slot in the game lobby. They provide a bit of fun customization, and by the end of ME3\u2019s development there was a fair number of them.<\/p>\n<p class=\"\">We added more than a dozen new banners, with more on the way. They drop via Mass Effect Legendary Edition achievements, store drops, and other mysterious ways. We plan to have a community banner contest like BioWare did to feature some new ones for everyone to use.<\/p>\n<figure id=\"attachment_423\" aria-describedby=\"caption-attachment-423\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=687722980  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png\"  decoding=\"async\" class=\"wp-image-423 size-large\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 889w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-05_17h28_49.png 1920w\" \/><figcaption id=\"caption-attachment-423\" class=\"wp-caption-text\">Banner selector that shows all unlocked banners, accessible from the main multiplayer menu<\/figcaption><\/figure>\n<p class=\"\">We added an in-game UI to select a banner you&#8217;ve unlocked. We added the ability for banners to unlock via Legendary Edition achievements, as well as various ones in the store packs. We included new items from across BioWare\u2019s catalog of software and various communities related to Mass Effect. These don\u2019t have a meaningful impact but I do recall enjoying having a new fun banner to wear.<\/p>\n<p>&nbsp;<\/p>\n<h3 class=\"\">Accessibility for screen overlays<\/h3>\n<figure id=\"attachment_450\" aria-describedby=\"caption-attachment-450\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=182578995  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg\"  decoding=\"async\" class=\"size-large wp-image-450\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 889w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/kroganrage.jpg 1920w\" \/><figcaption id=\"caption-attachment-450\" class=\"wp-caption-text\">Krogan Rage on Firebase White Hazard. Left: Normal (like ME3), Right: Reduced<\/figcaption><\/figure>\n<p class=\"\">Some of our playtesters brought up some longstanding annoyances with the original game, including issues with colorblindness for certain screen overlay effects. Since we have a working shader compiler, we were able to patch in some additional inputs to the shaders that let us tone down the effects. By default, overlays stay at their ME3 defaults, but you can adjust a few overlay effects in the options:<\/p>\n<ul class=\"\">\n<li aria-level=\"1\">Geth Scanner \/ Hunter Mode (does not affect enemy overlay)<\/li>\n<li aria-level=\"1\">Krogan Rage<\/li>\n<li aria-level=\"1\">Bloodlust<\/li>\n<li aria-level=\"1\">Repair Matrix<\/li>\n<\/ul>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We left some of the other screen effects alone that don\u2019t have much impact on the visibility of the viewport, such as the effect from Barrier. We may add more as needed. You can change these in the Options &gt; Accessibility &gt; Screen effects menu. I recommend Geth Vision and Krogan Rage set to Reduced.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3 class=\"\">Hazard Map changes<\/h3>\n<p class=\"\">We made changes to three of the hazard maps. We thought about changing the others, but didn&#8217;t have time to prototype anything else out. Some of them don&#8217;t really have any interesting gimmicks beyond limited fog visibility, which does change things up but isn&#8217;t really unique.<\/p>\n<p>&nbsp;<\/p>\n<h4 class=\"\">Giant Hazard<\/h4>\n<figure id=\"attachment_447\" aria-describedby=\"caption-attachment-447\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=846672354  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png\"  decoding=\"async\" class=\"size-large wp-image-447\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 2048w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/hazardgiant3.png 889w\" \/><figcaption id=\"caption-attachment-447\" class=\"wp-caption-text\">Combat feels quite different on Giant Hazard now. Playtesters really like this map, we&#8217;ll probably make more night versions, but as separate copies instead<\/figcaption><\/figure>\n<p class=\"\">Some of the hazard maps are pretty dull. Hazard Giant for example is just darker, but still very bright to the point where the darkness doesn\u2019t really make a meaningful difference. There\u2019s a light flash and small screen shake from the cannon, but it\u2019s not very often. In the script that controls the cannon, it looks like the other two were designed to be used, but ultimately got disconnected. When connected, they fired a lot more, which actually provided a hazard, but it\u2019s also annoying to get blinding light flashes all the time, so I understand why they likely pulled the plug on those two.<\/p>\n<p>&nbsp;<\/p>\n<p class=\"\">A concept for a map I worked on for Redemption back in 2019 was the area on Tuchanka where you have to use flashlights. It at one point was playable in multiplayer, but the flashlights didn\u2019t work off host and eventually it got axed, but it was fun in testing.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">I carried that idea into Hazard Giant. By tuning the lighting &#8211; at runtime for character lighting and at lighting bake time for static lighting, we were able to create a much darker version of Hazard Giant, that actually uses flashlights that dynamically spawn on the player. I actually expected this to play poorly in my first tests, but it worked out really well, and after a week or so of tuning we had it dialed in pretty good. The hazard is now a significant reduction in long range visibility, but not due to blinding like White Hazard or Dagger Hazard. In playtesting everyone really enjoyed this map as it feels very different. We likely will expand on this concept for other maps in the future.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h4 class=\"\">Glacier Hazard<\/h4>\n<p class=\"\">Glacier Hazard already has a semi-interesting mechanic with the roaming bees. I\u2019ve made videos about the bees in the past and how they work. Due to either an oversight or something intentional done by BioWare, the script that controls who the bees follow has logic for which player to follow, but it never can reach players 2\/3\/4. So it follows the host player in every zone they are in. The bees are slow enough that this isn\u2019t super noticeable.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We had bigger plans for the bee swarm that didn&#8217;t make it in time for release, which may come in a future update. The notable change is that the bees are now triggered by enemy damage as well as player damage, so stormtrooper aim will be punished. We didn&#8217;t find this to be too disruptive in playtesting, because enemies don&#8217;t randomly fire into them unless it&#8217;s between them and you, which didn&#8217;t happen very often. Enemy Area of Effect (AOE) attacks don&#8217;t affect it either &#8211; something we plan to work on for future updates, as it enables us to do more interesting damage-based events.<\/p>\n<p>&nbsp;<\/p>\n<h4>Reactor Hazard<\/h4>\n<p class=\"\">This map got some notable changes that likely won\u2019t be noticed unless you played a lot of the original multiplayer. The level gimmick is a button you can press to close the reactor door, which after a few seconds closes the door and cooks everything inside for 5 seconds. It\u2019s great for trolling your friends and we left that in.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">But that\u2019s about it. It\u2019s a pretty boring hazard &#8211; you can choose to entirely ignore it and it works just the same as the normal map. So we added hitboxes to the buttons, similar to how the hitbox for the bees causes an event to occur, in this case, a button press. Doing a bit of damage to any of the buttons while the reactor is primed will now trigger the event as if you pushed the button.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">The buttons now turn red when the reactor venting is triggered to provide more feedback. This means a firefight&nbsp; might end up cooking people inside, or you can snipe the button from distance to shut down enemies you routed through it. In playtesting it led to more advantageous reactor cooking and also great trolling on Stumpy. Right now it doesn&#8217;t work with AoE attacks, similar to the bee swarm on Glacier, but we want to fix that so large enemy attacks also can trigger it.<\/p>\n<figure id=\"attachment_448\" aria-describedby=\"caption-attachment-448\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=2003516518  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png\"  decoding=\"async\" class=\"size-large wp-image-448\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 2048w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2026-11-07_01h32_20.png 889w\" \/><figcaption id=\"caption-attachment-448\" class=\"wp-caption-text\">You can now trigger the hazard remotely&#8230; friend or foe!<\/figcaption><\/figure>\n<p class=\"\">As for bugfixes &#8211; the main one is that the doors now properly block enemies from walking through them. When enemies are on the pathfinding network and traversing it, they actually ignore collision for some things. This includes the doors. As a result enemies would just walk through the closed door if they were already on the way to attacking you, something that greatly angered me back in the day. Enemies no longer can walk through the doors because we disabled the pathfinding nodes near the doors when closed &#8211; which means they can\u2019t be on the pathfinding network when closed &#8211; and thus can\u2019t walk through them.<\/p>\n<p class=\"\">This also required a change for the escort drone &#8211; something I have a personal vendetta against from Redemption map making &#8211; if the drone can\u2019t find a pathfinding path to the endpoint on spawn, it immediately gives up and finishes the objective. If you were to activate it right as the doors slammed shut, you could cheese the objective and have it finish immediately.<\/p>\n<p class=\"\">As much as I love cheese, this one wasn\u2019t something I\u2019d let go, so when nav points are temporarily turned off, we track how many disabled. If any are disabled, the escort drone just waits. Once they are all enabled, it can then fail if it can\u2019t pathfind, like normal, but it closes the loophole introduced by locking the drone in the oven.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\">Upcoming Content<\/h2>\n<p class=\"\">We have quite a bit of planned content for post-release, starting with some polishing of the initial release, plus some features we cut for time.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">As for larger content drops, we have at least three content packs planned with varying levels of prototyping already completed.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3>Redemption Map Pack<\/h3>\n<p class=\"\">Redemption Map Pack in the original game was my DLC mod that added multiple new maps to the game, ported from Singleplayer. It includes maps such as Shipwreck (from Leviathan DLC), Sanctuary, and all the Armax maps, to name a few.&nbsp;<\/p>\n<figure id=\"attachment_441\" aria-describedby=\"caption-attachment-441\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1704896789  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png\"  decoding=\"async\" class=\"size-large wp-image-441\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20576%22%20width%3D%221024%22%20height%3D%22576%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22576%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"576\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:576\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:169\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:432\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:864\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:141\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:309\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:450\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:320\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 320w, https:\/\/mliomtqrfel3.i.optimole.com\/w:533\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 533w, https:\/\/mliomtqrfel3.i.optimole.com\/w:889\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 889w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1920\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/vlcsnap-2026-11-07-00h21m36s641.png 1920w\" \/><figcaption id=\"caption-attachment-441\" class=\"wp-caption-text\">Playtest for Redemption. As you can see it&#8217;s very broken<\/figcaption><\/figure>\n<p class=\"\">With new tooling available to us, we plan to remake this DLC from the ground up to have correct lighting, pathing, and less networking issues. We also plan to attempt to build an entirely brand new map with working cover &#8211; something nobody\u2019s actually been able to do yet. We played a map on Armax Classic as a playtest and it worked, but the visuals are pretty broken and none of the interactive features work yet.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3>Rejection<\/h3>\n<p class=\"\">The Rejection DLC mod added a new faction called the Rejects. It was essentially a collection of singleplayer enemies that never got put into multiplayer &#8211; CAT6, Adjutant, Rampart, plus some smaller enemies like the Geth Sniper (Legion). I had tweaked this faction to be more difficult, and they proved challenging, but it was not the most stable mod at the time.<\/p>\n<figure id=\"attachment_442\" aria-describedby=\"caption-attachment-442\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=226275406  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:592\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png\"  decoding=\"async\" class=\"size-large wp-image-442\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20592%22%20width%3D%221024%22%20height%3D%22592%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22592%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"592\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:592\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:174\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:444\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1536\/h:889\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:145\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:318\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:463\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:311\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 311w, https:\/\/mliomtqrfel3.i.optimole.com\/w:519\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 519w, https:\/\/mliomtqrfel3.i.optimole.com\/w:864\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 864w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1866\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/2024-07-08_23h43_31.png 1922w\" \/><figcaption id=\"caption-attachment-442\" class=\"wp-caption-text\">Playtesting Rejection in 2024<\/figcaption><\/figure>\n<p class=\"\">We prototyped Rejection back in 2024 and 2025, and it plays, but we haven\u2019t actually done a network playtest yet. There\u2019s likely a lot of work to do to fix the problems the original version had, which had enemies with code that executed on host only without proper client replication. We\u2019re also planning to change up the roles a bit now that we have a team for development.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3>Reinstatement (working name)<\/h3>\n<p class=\"\">Part of developing Project Milan\u2019s pipelines involves building the code that generates all of the config changes required for kits, as well as compiling the assets. For example, provided a set of meshes, we can compile a kit using a base set of animations, port in powers, hook all of it up in config so it drops from the store and can be selected.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We don\u2019t have this working yet, however, we do have a single kit that builds and is quite overpowered right now. This one\u2019s still a way off, but once it\u2019s up, making new kits should be much easier.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3 class=\"\">Other changes<\/h3>\n<p>In the short term, we plan to add some things we didn\u2019t get into the final build for release. This includes things such as:<\/p>\n<ul class=\"\">\n<li aria-level=\"1\">Banner selection in the multiplayer lobby<\/li>\n<li aria-level=\"1\">Direct-purchase store rather than random loot drops (they\u2019ll still be around)<\/li>\n<li aria-level=\"1\">Downed UI showing your medigel count and distance to a nearby teammate<\/li>\n<li aria-level=\"1\">Implementing the Battlefield 3 Infiltrator &#8211; we have it working, but its powers are weak and we wanted to spend more time tuning it to be less boring<\/li>\n<li aria-level=\"1\">Making the \u201cpizza run\u201d work as proper running rather than requiring dexterity that not all players will have which puts them at a disadvantage<\/li>\n<li aria-level=\"1\">Completely replacing the Challenges UI &#8211; it\u2019s a total disaster in ME3 and it\u2019s still a disaster in our version even though we attempted to fix it<\/li>\n<li aria-level=\"1\">Entering invite-codes in game &#8211; this was delayed because Microsoft completely broke controller keyboard input in recent Windows updates<\/li>\n<li aria-level=\"1\">In-game text chat improvements<\/li>\n<li aria-level=\"1\">Configurable lobby sizes &#8211; we have tested this and it\u2019s mostly working now across the entire game, but a few UIs don\u2019t support it yet so we didn\u2019t ship this<\/li>\n<li aria-level=\"1\">Improved blind firing<\/li>\n<li aria-level=\"1\">Splitting up the omni-key so you can rebind each part in-game (or keep it as it is)<\/li>\n<\/ul>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\">Information for modders<\/h2>\n<h3 class=\"\">Package File Format changes<\/h3>\n<p class=\"\">Files made for Project Milan are not compatible with the other Mass Effect Legendary Edition games. We purposely broke LE3 direct compatibility to increase the difficulty of porting content between games because a mod developed for LE3 is very unlikely to properly work in LMP without breaking replication. A player hosting a broken replicated lobby will cause clients to try to join and immediately have problems, which degrades the experience, so we have purposely broken this compatibility.<\/p>\n<p>&nbsp;<\/p>\n<p class=\"\">We also made significant changes to the basegame, so files for LE3 will not natively work in LMP without changes. If you attempt to do it manually the game will simply crash. By breaking compatibility, we are able to leave any baggage behind and force new mods to be redeveloped, rather than using ancient incompatible versions. We don\u2019t have plans to support mods for the initial release version, but we will open up modding for it once we have a more stable foundation for mods to build on and tooling that is more aware of these issues. We also want to make it so changes mods need can be done at the basegame level, so that DLC mods can work without having to edit the packages. An example of this is having us expand what is marked as config, so you don&#8217;t need to ship packages to tune various things.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">You&#8217;ll be able to open packages with newer builds of Legendary Explorer, which will come out shortly after release while we sort out merging the private codebase back to the public one.<\/p>\n<p>&nbsp;<\/p>\n<h2 class=\"\">Use of AI in this endeavor<\/h2>\n<p class=\"\">When I started writing this blog post, there wasn\u2019t much AI used in our scene for modding. In the past two months or so, it has exploded.<\/p>\n<p>&nbsp;<\/p>\n<p class=\"\">For the first two years of this project, we did not use any AI &#8211; all of the initial prototyping work was done manually &#8211; reverse engineering, native patching, controller support in user interfaces, mod building, pipeline development, exporting to UDK and building lighting, etc. Development time during the first two or so years was almost entirely devoted to asset porting and creation &#8211; audio, lighting, shaders, etc. Big chunks of this were part of the LEDecooker project &#8211; a system that converts the Legendary Edition games into a system UDK can support loading without crashing.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">In the final 5 months of development, we began to use more AI to help expedite bug fixing, UI prototyping, pipeline performance, and feature research.&nbsp;<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">I developed a custom agent tool called LECCLI to help perform game research. It\u2019s a&nbsp; command line tool that wraps Legendary Explorer Core, the library that powers most of the scene\u2019s modding software &#8211; we developed it. This command line application runs a client\/server model, with the AI harnesses invoking the client, which then interacts with the server. This lets invocations be cheap (performance wise) and allows the server component to cache things for near-future tasks.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">This tool was explicitly designed only for research: it purposely cannot save game packages, but it could be used to initiate its own investigations, combing through decompiled classes, textures, user interfaces, configuration files, etc. It can render meshes, preview UIs in scaleform, resolve localized strings, search the entire game at once for usages, among other things. This allowed our AI tools to get a view of the entire game all at once and was very useful for finding bugs in our own edits. An example of a few things it was able to quickly figure out for us that weren\u2019t immediately obvious:<\/p>\n<ul class=\"\">\n<li aria-level=\"1\">Kits are hidden by a \u2018show if locked\u2019 flag &#8211; something that BioWare used to drip feed MP4 content back in the day, but has been entirely irrelevant since, so it\u2019s not really well known<\/li>\n<li aria-level=\"1\">Identifying why opening a lobby would not respect your settings after the first time opening a lobby<\/li>\n<li aria-level=\"1\">Explaining how the grinder system works (challenges) &#8211; a quasi-database progress tracker implemented in config that is awful to read due to the huge amount of text and properties it involves, which allows us to expand it to include new items<\/li>\n<li aria-level=\"1\">Fixing off-host health regen being broken to bad fixes made by me that were implemented to allow you to play with bots. ME3 had basic bot AI (for QA), but when it took damage, you\u2019d get its blood overlay effect, causing massive flickering issues<\/li>\n<\/ul>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">In some advanced scenarios, we used it to help track down issues such as incorrect UV mapping in ME3\u2019s original data (such as Hydra\u2019s black plane near the spawnpoints) and generate top-down geometry maps to help us locate in-game where an asset is at that we fixed UVs on, for verification. It also helped us set up the Blackstorm render, because the orientation and lighting data wasn&#8217;t part of the shipping game, and there is no documented information about how to generate one.<\/p>\n<figure id=\"attachment_443\" aria-describedby=\"caption-attachment-443\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1627521185  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg\"  decoding=\"async\" class=\"size-full wp-image-443\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"810\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:810\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:237\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:608\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:198\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:435\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:633\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:228\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 228w, https:\/\/mliomtqrfel3.i.optimole.com\/w:379\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 379w, https:\/\/mliomtqrfel3.i.optimole.com\/w:632\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/image-1794038038538.jpg 632w\" \/><figcaption id=\"caption-attachment-443\" class=\"wp-caption-text\">LECCLI is useful for making renders which helped figure out the frame that is used for the heavy weapon screenshots<\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">We had working prototypes for two major components that we essentially had AI rewrite for performance: Wwiser.NET for converting audio banks and ShaderHost\/ShaderClient, a C# server and C++ ASI mod for the game, which triggers its internal HLSL translator that is required to build shaders. In 2025 we discovered that BioWare didn\u2019t strip this out of the build of the game, which saved us an unbelievably huge amount of work.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">AI helped us convert these into more performant versions that could be targeted to specific use cases; for example, ShaderHost\/ShaderClient required building the entire material package, loading into a level with meshes that had the materials with the graphs, then hijacking the game to run it through the MilanShaderCompilerLib, which compiled shaders using my own custom tuned list of shader compiler macros. It worked, but it was pretty inflexible and game boot alone added multiple seconds to every compilation session &#8211; and there were hundreds of packages, constantly needing recompiling for testing. A full shader compile for all materials literally took hours, and fixing a macro for a shader type would necessitate a recompile to then check if it\u2019s accurate or not.<\/p>\n<figure id=\"attachment_444\" aria-describedby=\"caption-attachment-444\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><img data-opt-id=1968173824  data-opt-src=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:878\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png\"  decoding=\"async\" class=\"size-large wp-image-444\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%20878%22%20width%3D%221024%22%20height%3D%22878%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%221024%22%20height%3D%22878%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\" width=\"1024\" height=\"878\" old-srcset=\"https:\/\/mliomtqrfel3.i.optimole.com\/w:1024\/h:878\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 1024w, https:\/\/mliomtqrfel3.i.optimole.com\/w:300\/h:257\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 300w, https:\/\/mliomtqrfel3.i.optimole.com\/w:768\/h:658\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 768w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1259\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 1536w, https:\/\/mliomtqrfel3.i.optimole.com\/w:1260\/h:1080\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 2048w, https:\/\/mliomtqrfel3.i.optimole.com\/w:250\/h:214\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 250w, https:\/\/mliomtqrfel3.i.optimole.com\/w:550\/h:471\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 550w, https:\/\/mliomtqrfel3.i.optimole.com\/w:800\/h:686\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 800w, https:\/\/mliomtqrfel3.i.optimole.com\/w:210\/h:180\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 210w, https:\/\/mliomtqrfel3.i.optimole.com\/w:350\/h:300\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 350w, https:\/\/mliomtqrfel3.i.optimole.com\/w:583\/h:500\/q:mauto\/ig:avif\/https:\/\/www.me3tweaks.com\/blog\/wp-content\/uploads\/2026\/11\/blocking-volume-204.png 583w\" \/><figcaption id=\"caption-attachment-444\" class=\"wp-caption-text\">Top-down render of blocking volumes on Condor to help determine which one(s) are causing collision issues<\/figcaption><\/figure>\n<p class=\"\">We do have some AI-assisted UnrealScript and C++ code. As part of the process of development, I reviewed every generated line before commit, changing quite a bit of it. Certainly there are some parts that are missed, and some parts got less review than others, but I took significant time to review code, and not commit it until it was fully reviewed and verified working (much to the chagrin of others &#8211; committing parts that were verified, but depended on other parts not yet fully verified, broke the build many times&#8230; especially for Stumpy \ud83d\ude0a)<\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\">No AI was used to generate audio or art assets, however AI\/ML was used to upscale textures, similar to how it was done in ALOT, but many textures were manually remade, such as the main branding image the mod uses, which was quite a task to recompose.<\/p>\n<p>&nbsp;<\/p>\n<h2 class=\"\">Future plans<\/h2>\n<p class=\"\">We plan to support Legendary Edition Multiplayer with updates to the base install in the future &#8211; more banners, more accessibility, more bug fixes. We know that modding on top of a moving target is really annoying, so we\u2019re trying to design around that up front, but we don\u2019t plan to try to provide a stable interface for mods until at least the first major update. We also need to figure out how to solve conformance and net indexing in tools; something our tools pretty much don\u2019t support but will cause serious problems in multiplayer if they fall out of sync &#8211; which they will on just about any mod install.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h2 class=\"\"><b>Special Thanks<\/b><\/h2>\n<p class=\"\">I&#8217;d like to extend thanks to all the people who helped develop this mod over the years, which now consists of over 20 people. This all started because I was frustrated with trying to make another multiplayer mod for the original game, thinking it&#8217;d be easier to port multiplayer to legendary edition instead. I don&#8217;t think I&#8217;d agree with that statement anymore, but now I can start making mods for multiplayer again. Maybe someday we can do the <a href=\"https:\/\/www.twitch.tv\/mgamerz\/clip\/TardyNimbleBeeEagleEye\">bungie batarian<\/a> again.<\/p>\n<p class=\"\">&nbsp;<\/p>\n<h3 class=\"\">Extra Special Thanks<\/h3>\n<p class=\"\">We\u2019d like to extend our extra special thanks to PCGamer for not reading our introduction email\u2019s confidentiality request, doing what looks like no due diligence, leaking this mod a week early, and then ghosting us. Thanks!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Legendary Edition Multiplayer Launches! The ME3Tweaks group has been working to port Mass Effect 3 multiplayer in full to Mass Effect Legendary Edition since November 2023. On November 7, 2026, we finally shipped! Legendary Edition Multiplayer brings back the classic Mass Effect 3 multiplayer experience, with changes throughout brought to you by the experts who [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bgseo_title":"","bgseo_description":"","bgseo_robots_index":"index","bgseo_robots_follow":"follow","_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[7],"tags":[],"class_list":["post-416","post","type-post","status-publish","format-standard","hentry","category-modding"],"_links":{"self":[{"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/posts\/416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/comments?post=416"}],"version-history":[{"count":10,"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/posts\/416\/revisions"}],"predecessor-version":[{"id":458,"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/posts\/416\/revisions\/458"}],"wp:attachment":[{"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/media?parent=416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/categories?post=416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.me3tweaks.com\/blog\/wp-json\/wp\/v2\/tags?post=416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}