Disabling balance changes

Mass Effect 3 Private Server Emulator is a replacement for the Origin/Blaze backend that handles the online component of Mass Effect 3.

Moderator: PSE Developer

User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Disabling balance changes

Post by Mgamerz »

I don't know if this is PSE related, I'll move it out if you want. I just wanted to make a different thread. I have confirmed your method of removing balance changes (change ME3_BINI_VERSION, ME3_BINI_PC doesn't seem to make a difference). I have written up a modification of LauncherWV (and will do a binkw32) to patch it out automatically... i have no idea what i'm doing but it seems to work so why question it. I should have it finished up soon.
Edit: does not work... I have no idea how to use the FindPattern() in binkw32, I got it mostly working in LauncherWV buti t never could read bytes (could find the address). :(

Issues
Players cannot join because "different version of the game". I am unsure how this is done. I added some of the balance changes stuff to patch2 (specifically the ENGINE ini) but it didn't make a difference.
User avatar
Erik JS
Posts: 110
Joined: Sun Jan 10, 2016 8:03 pm
Location: Brazil

Re: Disabling balance changes

Post by Erik JS »

I think it's time to clear something about binkw32: https://github.com/Erik-JS/masseffect-binkw32 (putting this here for those who haven't seen it yet)
Mgamerz wrote: Edit: does not work... I have no idea how to use the FindPattern() in binkw32, I got it mostly working in LauncherWV buti t never could read bytes (could find the address). :(
You want to add new functionality to binkw32. So you just add code to it, and compile a new version.
Now, let's say you want to use Heff's Logger. No problem, just add his code and compile another version.
What about my ClientMessage Exposer? You don't want to resort to RemoteDll32 every damn time, so let's just add more code to the binkw32 cpp and compile it yet again.
Oh look! I have a code which makes the game load PCC files from another folder! And a code which logs the MP ticker (killfeed), and this, and that, and also that other thing over there...

OK, I think it's clear what I'm trying to illustrate here. And this is the reason why I implemented an ASI loader for binkw32.

The ASI loader is based off an exploit present in GTA 3 and VC, where the game loads dll files by itself if they were renamed to .asi and put in the EXE folder. This exploit is present due to how the sound engine's DLL worked on those games.
Subsequently, ASI loaders were created for GTA SA, IV and V, where a DLL used by those games is replaced with a fake one which will look for .asi files in the game's folder.

I planned to create a "ME3-ASI" repository at GitHub, and I'll do this now. Wait a bit, I'll make an ASI plugin to disable the balance changes. :)
Mgamerz wrote: Issues
Players cannot join because "different version of the game". I am unsure how this is done. I added some of the balance changes stuff to patch2 (specifically the ENGINE ini) but it didn't make a difference.
Hm... didn't you run into some other issue? Were you able to complete a wave without "committing suicide"? You said you added some balance changes to patch2, if you didn't run into this, then maybe there's a minimal number of balance changes required to not trigger the end-of-wave suicide thing.
User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Re: Disabling balance changes

Post by Mgamerz »

I didn't fully test it the gameplay. I stripped out some stuff from patch2 and added the engine entries from me3bini. Friends couldn't join. I'll check out the suicide stuff. I had noticed your asi loader but didn't know if it was finished.

An asi loader would be handy... Perhaps I can build asi management into mod manager.

Thanks erikjs, really appreciate the work you're doing.
User avatar
Erik JS
Posts: 110
Joined: Sun Jan 10, 2016 8:03 pm
Location: Brazil

Re: Disabling balance changes

Post by Erik JS »

ASI Plugin repository is online now, plugin for disabling balance changes is there. :D
https://github.com/Erik-JS/ME3-ASI
User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Re: Disabling balance changes

Post by Mgamerz »

For ASIs we should make sure the source code for them is always available. I know this isn't enforcable (and that we can't really control it), but I remember the GTA V angry planes ASI that had a built in keylogger. For balance changes disabler you may want to indicate that further modding is required to fully remove balance changes (patch1/patch2, possibly some testpatch)

I'll be checking this out soon, gotta do 16:10 graphics for controller mod first... priorities, priorities...
User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Re: Disabling balance changes

Post by Mgamerz »

Just tested it out, using official servers. Seems about every 60s I am losing connection to the servers. I think it's related to the automatic progress saving of your profile which occurs at the end of a wave and every X seconds (60, if I recall). I wonder if it is sending incomplete data as you said and not working.

Your ASI loader seems to work great, no issues and easy install (I compiled mine from source).

I know there is code for onEAServerConenctionLost() or something, I should look into seeing if I can disable that. I'll attempt to integrate all balance changes into patch2 and see if that makes any difference. I do see some stuff related to ping.
User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Re: Disabling balance changes

Post by Mgamerz »

Okay. Integrated all of the balance changes into patch2.

No longer disconnects from EA servers (probably something about save timeout 15000 > 20000). I am now seeing your suicide at the end of a wave. That's weird! Even with god mode on I still die. I wonder if my character is part of the wave end cleanup or something?

Edit: People still can't join, says different version of the game. I can send you a mod that has all of it packed into Patch2 if you want.
User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Re: Disabling balance changes

Post by Mgamerz »

Update

Patch2 came out *before* reckoning apparently. I'm trying to maximise compatability across my mods here while keeping everything in order... Was thinking of switching mount priorities around:

Patch2 is now Patch1
Reckoning is now Patch2
Patch1 is now reckoning (balance changes)

This will make the game think all the same DLCs are installed (same cached priority numbers) but will let us apply balance changes without breaking a lot of mod compatability. I'll test this idea out and see if it works. It should fix some issues I found in my merged one.

I think the balance changes are downloaded and assigned some dlc ID. It may be possible to create a new DLC with the correct name and put the balance changes in there if it has the same ID. I'll use cheat engine to see if I can sniff out the numbers since I'll know the mount IDs. They should be in an array according to unrealscript.

As for suicide:
Had a user join with balance off and my merged patch2. At wave end we both committed suicide bit he simply desynced and was back up moments later. When I died from normal gunfire many times I could not use medigel (I may have run out). When I was revived I seemed to die almost immediately after. I did not merge biodifficulty which may have been the issue. Also got 0 credits per objective in bronze. I wonder if mpglobal was type 4'd out or something.

Edit: May have found the list of mounted DLC IDs. Working to verify the list.
User avatar
Mgamerz
Site Admin
Posts: 571
Joined: Wed Jan 06, 2016 1:13 am

Re: Disabling balance changes

Post by Mgamerz »

Creating lobby with standard set up (just MITM) returns this as ATTR
{ME3_dlc2300 ; required}
{ME3_dlc2500 ; required}
{ME3_dlc2700 ; required}
{ME3_dlc3050 ; required}
{ME3_dlc3225 ; required}
{ME3gameDifficulty ; difficulty0}
{ME3gameEnemyType ; random}
{ME3map ; map11}
{ME3privacy ; PUBLIC}

However doing it without balance changes (EDIT: this seems to be my mods problem):
{ME3_dlc2300 ; required}
{ME3_dlc2500 ; required}
{ME3_dlc2700 ; required}
{ME3_dlc3050 ; required}
{ME3_dlc3225 ; unused}
{ME3gameDifficulty ; difficulty0}
{ME3gameEnemyType ; random}
{ME3map ; map11}
{ME3privacy ; PUBLIC}

DLC 3225 is apparently PATCH2 according some notes I just posted in the ME3 board... The only change I have for this is that I switched mount priorities for reckoning and PATCH2 since reckoning comes after patch2.

Creating with no mods, only no balance changes:
{ME3_dlc2300 ; required}
{ME3_dlc2500 ; required}
{ME3_dlc2700 ; required}
{ME3_dlc3050 ; required}
{ME3_dlc3225 ; required}
{ME3gameDifficulty ; difficulty0}
{ME3gameEnemyType ; random}
{ME3map ; map11}
{ME3privacy ; PRIVATE}

Friend still cannot join, says different versions. I wonder if the special mount flag 0xC for MP patches has something to do with this. I don't see anything that should make them think their game is on a different version.

One thing I can think of is that the ME3BINI file is returned with a VERSION attribute (99001). By making it not return it also does not get a VERSION, but I don't see this anywhere in the game lobby either.
User avatar
Erik JS
Posts: 110
Joined: Sun Jan 10, 2016 8:03 pm
Location: Brazil

Re: Disabling balance changes

Post by Erik JS »

When the game asks for "ME3_BINI_VERSION", this is what the server replies with:

Code: Select all

{SECTION ; BINI_PC_COMPRESSED}
{VERSION ; 40128}
The game then appends "ME3_" to "BINI_PC_COMPRESSED", then asks for "ME3_BINI_PC_COMPRESSED".

I think it would better if I hook the function which does that string concatenation then, so the game will keep receiving the version from the server.

EDIT: the ideal solution would be making the game use a blank Coalesced in place of the real one from the server. This obviously can be done with MITM, but I want to find a way to manipulate packets directly inside the game's code. This is also in my "to-do" list.
Post Reply