Simple Modding Guide

Notice: ME3Tweaks does not condone cheating in online multiplayer. This guide is for informational and educational purposes only.

This guide serves as a basic entry point into modding Mass Effect 3 through the use of the Coalesced.bin file. You should be comfortable editing basic things in the game after reading this guide.

There are the tools you will need to follow this guide.

Table of Contents

What is Coalesced?

Coalesced.bin is a file in Mass Effect 3 that contains a huge amount of variables that are used during gameplay. It is a compiled binary file and must be decompiled to a text file in order to be easily modified.

During the lifecycle of the game, BioWare made "balance changes" to the game every 1 - 2 weeks. These are coalesced updates that are downloaded to memory at the title screen and supercede anything we can edit.

Application of Coalesced patches are as follows:

Priority Coalesced
4 Standard Coalesced.bin
3 DLC Coalesced (from newest to oldest)
2 Test Patch DLC (not editable)
1 Balance Changes (from BioWare)

*Lower priorities supercede higher priorities

If you decide to edit other variables while following this guide, some will not take effect as they are superceded by DLC, patches, and balance changes.

Extracting editable .json files

The first step to modding Mass Effect 3 Coalesced files is to get your copy of Coalesced.bin, which can be found in the game installation directory under BIOGame/CookedPCConsole.

You should backup this file by making a copy and renaming it Coalesced.bin.bak. I typically have a few of these floating around as they are easy overwrite by accident and having a clean source makes a new mod easy to create.

Once you have a copy in a working directory, move the Standard Coalesced tool into the same folder, and then drag & drop the Coalesced.bin file onto it. A command prompt should show up for a brief second and a new folder will appear with the same base filename as the file you dropped on it.

In this directory there should be several files. The table below shows what each file is for.

Index Name Description
00 bioai Contains variables that the AI uses for things such as pathfinding.
01 biocompat Unknown
02 biocredits Contains variables for the credits sequence
03 biodifficulty Contains variables for enemies at different dififculty levels in both singleplayer and multiplayer
04 bioengine Contains variables Unreal Engine 3 uses to run the game
05 biogame Contains the majority of game variables, including wavelists
06 bioinput Contains the default keybindings for various game modes and keyboard locales
07 biolightmass Unknown
08 biotest Contains variables that were likely used while testing the game
09 bioai Contains variables that the AI uses for things such as pathfinding.
10 bioweapon Contains variables about weapons and their stats, for both enemies and allies in both MP and SP
11 core Likely default Unreal Engine configuration
12 descriptions Likely default Unreal Engine configuration
13 editortips Likely default Unreal Engine configuration
14 engine Likely default Unreal Engine configuration
15 gfxui Likely default Unreal Engine configuration
16 ipdrv Likely default Unreal Engine configuration
17 launch Likely default Unreal Engine configuration
18 onlinesubsystemgamespy Strange, ME3 uses EA's blaze to do matchmaking, not gamespy. Unused.
19 startup Likely default Unreal Engine configuration


Editing the .json files

For this guide we are going to modify the Geth Prime's rifle, the Ravager's cannon, adjust the number of enemies on the field at a time, and upgrade the shield recharge rate of engineers.

Explaining all the elements is not in the scope of this guide.

Editing the Geth Prime rifle

The Geth Prime rifle is a weapon's object, which would normally mean you can would find it in the bioweapon file. For some reason though, some weapons are tied to the object that creates them, such as the ravager cannon and the geth prime rifle. These weapons are located in bioai.json. Once you open it and search for gethprimerifle, you should see the section shown below.

    "sfxgamecontent.sfxweapon_ai_gethprimerifle": {
      "ai_acccone_max": [
        "(X=0.0,Y=0.0)"
      ],
      "ai_acccone_min": [
        "(X=0.0,Y=0.0)"
      ],
      "ai_aimdelay": [
        "(X=0.0f,Y=0.0f)"
      ],
      "ai_burstfirecount": [
        "(X=3,Y=3)"
      ],
      "ai_burstfiredelay": [
        "(X=2.f,Y=3.25f)"
      ],
      "ammopershot": [
        "0"
      ],
      "damage": [
        "(X=230,Y=230)"
      ],
      "idealmaxrange": [
        "4000.f"
      ],
      "idealminrange": [
        "500.f"
      ],
      "idealtargetdistance": [
        "3000.f"
      ],
      "magsize": [
        "(X=10,Y=10)"
      ],
      "rateoffire": [
        "(X=70,Y=70)"
      ],
      "rateoffireai": [
        "1.0f"
      ]
    },

This is how all of these json files are structured. If you want to learn more about how JSON's syntax works, check out the Wikipedia article on it. As you can see, the variable names are fairly easy to understand their meaning. Remember, this applies only to the Geth Prime rifle.

For this tutorial, we will lower the damage of the Geth Prime rifle and make it fire faster as a wider arc, just like in my Insanity Challenge mod. Everyone seems to love that version of the Geth Prime.

Change the ai_burstfirecount X and Y values to 15 and 20, respectively. In many scenarios, the X is the minimum and Y is the maximum; thus, the Geth Prime will fire between 15 and 20 shots if it is not interupted.

That's all you have to do to make edits to Coalesced! Everything you will edit will be no more difficult than just changing some text. Some things like wave editing are more involved but there are no special skills required to mod this game.

To make the Geth Prime fire faster you can change 1 of 2 things; The rateoffire attribute, or you can just change the multiplier rateoffireai. rateoffire is measured in frames (with 60 being 1 second). rateoffireai is a multiplier that is applied to rateoffire, which you can use to easily change the rate of fire. I typically use rateoffire over ai because it's easier to fine tune.

Editing some of these variables, such as ammopershot will not work because other variables that are inherited disabled this variable from being used. In the advanced guide, inheritance is explained.

The same procedure is done for the Ravager. If you search for ravager in the same file, you will find two results, sfxgamecontent.sfxai_ravager and sfxgamecontent.sfxweapon_ai_ravager. We will be editing sfxweapon_ai_ravager, as the other one does not have anything to do with its weapon. You can typically tell by what attributes are listed if it's not immediately obvious.

    "sfxgamecontent.sfxweapon_ai_ravager": {
      "ai_acccone_max": [
        "(X=2.05,Y=2.05)"
      ],
      "ai_acccone_min": [
        "(X=1.05,Y=1.05)"
      ],
      "ai_aimdelay": [
        "(X=0.0f,Y=0.0f)"
      ],
      "ai_burstfirecount": [
        "(X=3,Y=3)"
      ],
      "ai_burstfiredelay": [
        "(X=0.8f,Y=1.35f)"
      ],
      "ammopershot": [
        "0"
      ],
      "damage": [
        "(X=400,Y=400)"
      ],
      "idealmaxrange": [
        "4000.f"
      ],
      "idealminrange": [
        "600.f"
      ],
      "idealtargetdistance": [
        "2500.f"
      ],
      "magsize": [
        "(X=3,Y=3)"
      ],
      "rateoffire": [
        "(X=75,Y=75)"
      ],
      "rateoffireai": [
        "1.0f"
      ]
    },

Up the rate of fire, decrease the damage, and increase both the ai_acccone_max and ai_acccone_min values to about 20 and 15, respectively. This the is the "cone" that the enemies use when aiming at you, and it is measured in degrees. At 90 degrees they will fire perpendicular to you.

Many enemy bullets can curve towards you to help compensate for "bullet lag".

Save and close the file.

Adjusting the number of enemies on the field at a time

Mass Effect 3 limits the number of enemies allowed on the field at a time to 8, likely because consoles had limited processing power when computing AI pathfinding. PC doesn't have such a low limit, so let's add an enemy or two. This setting can be found in biogame.json.

Searching for the value maxenemies should yield 2 results, maxenemies and right beneath it maxenemiesperspawnpoint.

You should see the following.

      "maxenemies": [
        "8"
      ],
      "maxenemiesperspawnpoint": [
        "5"
      ],

These two values will change both how many enemies can spawn at a single point at a time (typically on wave load) and how many can run around on the field. More than 3 will make a very noticable impact, especially on objective waves. Set them to 12 and 6, respectively.

This will spawn more of the base enemy defined in a wavelist - all other enemies have a defined min and max value and won't be affected.

Save and close the file, as we are done with biogame.

Adjusting the Cerberus Engineer shield

The final part of the tutorial is perhaps one of the most interesting, where you can tweaks many enemy stats. Open biodifficulty.json.

If you have word-wrap on in your text editor, you may see a huge jumbled blob that looks simliar to the following:

Do not worry. It is the same as what you have modified before, just a bit harder to read. Turning off word-wrap might help, but it also makes it easier to get lost with the line you are editing. If you scroll up and down the file, you should see repeating patterns of categories, as well as headers such as level3difficultydata and such.

These lines define stats for enemies across all difficulties in both SinglePlayer and Multiplayer. You can modify tons of stats here from the rate of grenade throws to the sync-kill rate. We're going to be editing the Cerberus Engineer, so find the sfxgamempcontent.sfxdifficultyhandlermp key, the level3difficultydata item underneath it, and finally find "(Category=\"Gunner\" in that block.

Why gunner? It seems the engineer was going to be something else during development. Perhaps a pilot for the Atlas. Other enemies are sometimes named this way, such as the Dragoon being called Phoenix internally.

We will be changing the maximum recharge of the shield to 100%, lower the delay, and the speed at which it recharges. The first item we need to edit is MaxEnemyShieldRecharge, which you can find on the same line as the Gunner block. You may have to scroll a ways if you do not have word-wrap on. The relevant section you are looking for is this:

(StatName=\"MaxEnemyShieldRecharge\",StatRange=(X=0.3f,Y=0.3f)),(StatName=\"AIShieldRegenDelay\",StatRange=(X=8.5f,Y=8.5f)),(StatName=\"AIShieldRegenPct\",StatRange=(X=0.25f,Y=0.25f))

MaxEnemyShieldRecharge

Change both values to 1.0f. This will allow the engineer to recharge his shields to 100%. The f stands for float, which essentially means it accepts decimal points instead of just integers. It's a data type used in programming.

AIShieldRegenDelay

This value defines the delay before the shield begins to regen. This only takes effect if the engineer is not damaged, including damage-over-time. It is measured in seconds. We will lower this to 3.0f. Making this value low makes the engineer very difficult to kill on higher difficulties as he will constantly shield gate your attacks.

AIShieldRegenPct

The regen percent value is how fast the shield regenerates over a second. It currently can regenerate up to 25% a second, which is pretty quick, given the original shield only could go up to 30 after being depleted that far. If you change this to something like .1f for both values, it will take 10 seconds to fully regenerate the shield, something you could expect an engineer to be able to do.

That's all you have to do to mod the files of the original Coalesced.

Recompiling the .json files into a Coalesced.bin

Now that you have your files modified, it's time to put them all back together into a modded Coalesced file. Close all open .json files and exit Notepad++ if you haven't already.

At this stage I would recommend you rename the folder that Gibbed's tool made from Coalesced to something else, as it will overwrite the original Coalesced.bin. Name it whatever you want, like coalesced-tutorial. Once you've done that, just drag the folder onto the Gibbed tool (not the DLC one!) and a command prompt will open for a few seconds, and then close. If you see a lot of text, or it crashes, you likely have erased something or added extra characters in the .json files and it crashed the compiler.

If this happens to you, I would suggest using JSONLint, which is a JSON validator tool. Copy and paste the entire contents of the files you edited into the field and click validate. Do note that it will likely lock up your browser for a significant time as these files are huge, mine are sometimes upward of 3 minutes. This is normal.

If you see a Coalesced-tutorial.bin file (or whatever your folder name was plus .bin), you've made your first mod.

Installing your mod

There are two ways to install your mod. You can do it manually, which is easier in this scenario, or you can build a mod package for Mod Manager which makes it only a click or two to install and revert your mod. Personally I prefer mod manager, but I'll cover both.

Manually installing your mod

Manually installing your mod is fairly simple for mods that do not edit DLC. All you need to do is make a backup of your Coalesced.bin file in your Mass Effect 3 directory, and copy your new one into it's place with the name Coalesced.bin.

Install using Mod Manager

Installing mods using Mod Manager will save you a ton of time if you choose to play around with Mods. Directions on how to do this are located in the Mod Manager FAQ. You can use other mod templates to get started.

Testing your mod

Your mod is now installed. The best part comes next. If your game was running during the tutorial, you'll need to restart it so it can pick up the new Coalesced.bin values. Your game should now be a little different, with it being a bit harder, but a bit faster too!

Ready for more? Read the other modding guides guide and tweak to your heart's content!