Greetings Stranger! I'm not surprised to see your kind here.
This is a free script I made for loading multiple Diablo 2 Resurrected instances (AKA Multiboxing/MultiLaunching etc), but can also be used for a single account, ideal if you want to play single player and switch between mods easily.
This will help you load up your account(s) quickly from one place without having multiple install directories of the game eating up excessive drive space.
This will also enable you easily switch realms for trades, DClones, rushes etc for one or more accounts from one simple menu.
Oh yeah and you can check DClone status, the Current TZ AND the next TZ from this launcher. Cool aye?
Using this script means you DON'T have to do any of this awful stuff to multibox:
Note that this script DOES NOT alter the game, automate key presses, game joining or add any efficiencies with RAM/VRAM usage. It's simply used to launch the game.
If you want to use additional scripts, programs or mods to achieve any of the above (which I would strongly discourage), then that's at your own risk.
This is a labour of love, for a game I love, for what I feel is a pretty good gaming community :)
This Readme is a bit wordy sorry, I've tried to capture all the information that anyone might ever ask for.
I've put several 100's of hours into making this, so if you like it, consider buying me a beer at https://www.buymeacoffee.com/shupershuff or here https://github.com/sponsors/shupershuff or here https://paypal.me/Shupershuff.
Cheers!
Script Screenshot:
What your windows will look like:
Not everyone wants to use a random script or an app and that's understandable.
See guides for alternative multiboxing methods here: https://github.com/shupershuff/D2r-Multiboxing-Without-A-Script
Script will allow opening multiple Diablo 2 resurrected instances and will automatically close the 'DiabloII Check For Other Instances' handle.
It will achieve this by importing account details from a CSV that you populate and essentially launches the game the same way you would with a shortcut: by passing account, password and region parameters to D2r.exe.
Note: Plain text passwords entered into the CSV will be converted into a secure string after running. If you don't want to enter plain text passwords EVER then you can leave the PW field in the CSV blank and manually type in when running the script.
Once the game has initialised, the window will be renamed so it's easier to tell which account and region each game is using.
This also helps the script know which games are open to prevent you accidentally opening a game with the same account twice.
Optionally you can also have the game launch using custom settings.json for each account in case you want different graphics/audio/game settings for each account you have.
* This script in no way enhances or changes gameplay. *
Open All accounts at once
Time is precious so work smarter not harder by opening all your accounts at once to maximise your free time to actually play the game instead of clicking through menus.
Note that if you've configured your account(s) or a region(s) to launch the game using an Authentication Token instead of parameters, you will need to wait for each game to reach the character selection screen before the next instance can launch.
Batch Open Accounts
Rather than open all accounts, you can open a group of accounts. This feature is designed for you creatures that have several accounts but only want to launch a subset of these, for example only launch the 3 accounts you primarily play from.
Launch Each account with specific game settings
These features were made in mind for multiboxing where you may have different screen sizes and want your secondary accounts to have lower graphics settings:
Auto Settings Switcher: If enabled you can essentially have it so all accounts have their own game settings to load from. Game settings are loaded from settings<_ID_>.json instead of settings.json.
Manual Settings Switcher: Alternatively, if you want to specify which game settings you want to load from, you can choose the settings file each account should use when launching. Once enabled in config, this can be toggled on and off using 's' in the menu.
You can enable both of these features at the same time. See Setup Steps below.
Statistics - Track your playtime
It was too technically difficult for Blizzard to track time played for D2r within their Battlenet Client so you can use my janky one instead.
Time per account can be seen from the main menu. Total time the script has ran for with D2r running can be seen by going into the info screen ('i').
Now you can look back on your D2r playtime and think back on all of the productive things you should've done, but didn't.
Other misc stats and info can be seen on the info screen. Statistics are recorded locally to stats.csv and accounts.csv in your script folder.
Terror Zone Details
You can also check the current and next Terror Zone by pressing 't'.
Data courtesy of D2Emu.com
Check DClone Status
You can also manually check the current DClone status by pressing 'd'.
Data courtesy of D2Emu.com, d2runewizard.com and diablo2.io. That's right, you can choose your source!
Alarms for DClone Walk status changes
If configured, you can select which regions and modes to monitor for D Clone (Über Diablo) walk status changes.
If there's a change in status whilst the script is running, it will activate the alarm function.
The alarm will a text warning (as seen in example below) as well as a text to speech alarm notifying you where the walk is happening.
The voice alarm activates only once but the text warnings will remain in place for 5 minutes.
You will also be notified after the script has launched if there's any imminent walks about to happen (ie status is 5/6).
See the DClone Status Alarms and config sections for more information and how to configure this.
Voice Examples (make sure to unmute, GitHub mutes by default):
https://github.com/shupershuff/Diablo2RLoader/assets/63577525/50e9a49d-a01c-40e4-8654-a8da9fe40c05
https://github.com/shupershuff/Diablo2RLoader/assets/63577525/56bd87d5-157f-4119-b99b-bd1d26f06052
Be an Entertainer in Baals Comedy Club
If you're an A grade leecher like me and typically stand around in Baals Throne room sapping up XP, why not at least pretend you have a sense of humour by using the built in joke generator to copy & paste mediocre jokes.
That way instead of providing any real value in terms of damage, you can provide entertainment value instead.
Jokes courtesy of v2.jokeapi.dev, official-joke-api.appspot.com, icanhazdadjoke.com and api.chucknorris.io
Remember Windows Layout
If configured, the script can launch each game instance to the preferred screen location and window size so that you don't have to rearrange your game windows at launch.
Launch Parameters You can run the script using launch parameters instead. This is ideal if you want to create a desktop shortcut to open a set of accounts, or if you're a super nerd and you want to launch the accounts from a scheduled task or from Home Assistant so that your game is ready to go when you get home from work :) Available launch parameters and values to use are as per the table below: |
Parameter | value example(s) | Purpose | Notes |
---|---|---|---|---|
-account | username@emailaddress.com | Specify Signin Address to pass through to the script | -AccountUsername also works as a parameter. Can't be used with -all or -batch. If you don't use the -pw parameter, you can simply specify the ID of the account you want to launch from accounts.csv. | |
-pw | YourBNetAccountPassword | Specify Password to pass through to the script | Can't be used with -all or -batch. If not specified, script will check if there's a matching account in accounts.csv to use password or token for. | |
-region | na.actual.battle.net 1/2/3 NA/EU/AS/KR |
Used to specify the connection region | Specify either the full server name, use the realm initials (NA/EU/AS/KR) or use 1, 2 or 3 as values to select NA, EU or KR | |
-all | True | Opens all accounts | Recommend using -region with this parameter. | |
-batch | 1 | Opens a batch of accounts at once | Recommend using -region with this parameter | |
-manualsettingswitcher | True | Use this if you want to manually choose which settings file to load with each account. | Recommend not using this but instead enabling SettingSwitcherEnabled in your config file so that it automatically loads from settings<_ID_>.json |
To make a shortcut to open a set of accounts, copy the D2RLoader Shortcut, rename it to whatever suits, open the properties and add parameters to the target eg -batch 1 -region na
Magic Find in the script
You might also notice the quotes sometimes change colour, each time you refresh the script you have a chance to roll for Normal, Magic, Rare, Set, Unique quality quotes.
There's also a 1 in 19,999 chance to land a High Rune but you'll never see this :)
There are ways to improve your script MaGic Find...
Please see the detailed setup steps below, it's not as scary as it looks. I've included details for all of the features you may or may not want to use.
A basic setup only takes 3-5 minutes.
For those allergic to reading, have a gander at this youtube video tutorial here that a great bloke made. I promise it's not a rick roll video :)
TL;DR steps are:
🔴 If you have any issues, come back and fully read these instructions. I can almost guarantee any issue you see is covered in the detailed setup steps below and/or FAQ section.
NOTE: If you have MFA configured on one account it will not work with Parameter based authentication. This to work due to Blizzard not implementing MFA capability with this authentication method. If you want to keep MFA enabled, you can utilise the AuthToken method outlinned below.
🔶🔶 Special Note - PLEASE READ THIS 🔶🔶 Please pay attention to these instructions and particularly to step 8 around auth token setup. Almost all setup issues are due to missing or incorrectly performing one or more of these steps.
Make sure to save it and close the file :)
Account CSV BEFORE running script:
What it will look like AFTER running the script (in a later step):
Default settings within config.xml should be ok but can be optionally changed. Recommend checking out the features here. Open the .xml file in a text editor such as notepad, Powershell ISE, Notepad++ etc.
All other config options below this are strictly optional:
Done editing? What are your thoughts on saving the file? I've heard it helps. CTRL + S for the win :)
If you've skipped ahead, the script will error out and tell you which of the previous setup steps you've skipped.
Do you want your primary account to launch with decent graphics settings with your other accounts to be set to poo tier settings? This is for you! This feature is disabled by default, as it will cause confusing behaviour for users who haven't read and understood this first.
What this feature does is create copies Settings.json (found in the "C:\Users\\
E.G if you have 3 accounts, you will have Settings1.json, Settings2.json & Settings3.json. When the script runs and you choose account 1, it copies Settings1.json to Settings.json causing the game to essentially load off those settings. This essentially turns Settings.json into a temporary file that's just used at load time.
NOTE: Any changes you make to non-character options in game (eg graphics, audio, game options) will be saved to Settings.json, which will be overwritten the next time you launch a game via this loader. Therefore if you want to edit your game settings for say your 2nd account, you would need to open diablo (on any account), make the options changes you'd like to see that account have each time, close the game and then copy Settings.json to Settings2.json.
Quick Guide to updating Game settings for a particular account with this auto switcher.
For these instructions, let's assume we're trying to edit the config for account 1
Do you want to manually choose which settings to use when launching the game? This is for you! This feature is disabled by default, as this needs to be setup first and understood this first.
Setup is exactly the same as the Auto Settings Switcher, except for step 8 as you need to name the settings file settings.name.json where name is whatever you want it called (eg settings.1440pHigh.json or settings.PotatoGraphics.json)
Don't forget to enable this feature in the config file by setting 'ManualSettingSwitcherEnabled' to True.
You can optionally configure the script to advise when DClone walk status changes.
This is very handy for when you're playing on another region/game mode or playing another game entirely so you can be audibly warned on status changes without having to manually check a website.
This will display text warnings on screen for 5 minutes since last status change and will also perform a one off voice alarm advising you what region and game mode the status changed on.
Checks are performed each time the script refreshes on the main menu (IE, every 30 seconds).
Note that this check is run in a background job that takes 1-2 seconds to complete. As such manually refreshing the menu constantly (r) will prevent checks from occuring.
This feature is disabled by default.
If you want to enable it, simply add in the option(s) you want into DcloneAlarmList in config.xml.
You will only be alarmed for the game options you add into config. EG if you only want Hardcore Ladder notifications you would enter:
You can also optionally change the other configs for DClone Tracking and DClone Alarms, however I recommend leaving the default values here.
You can also adjust the volume of the alarms if they are too quiet or if it's so loud it's making you jump off your chair.
See the Script Config section for more info on each config.
Perform these steps if you've enabled the feature for remembering window layout and size.
Now whenever you launch the accounts they will open in the same positions with the same window sizes. Use the 'r' option within that menu to reset them if need be.
If you don't want your Diablo games to run like a slideshow, here are some tips. You'll of course need to adjust based on your hardware and setup.
My setup
Note that on my specs (5950x, RTX2080s (which has 8GB VRAM), 32GB RAM), I run my instances on the lowest graphics options possible.
DLSS is set to ultra performance. Framerate (FPS) caps for secondary accounts are around 50fps. For my primary account I set the FPS cap to 60fps.
With 3 instances (2 windows at approx 1280x780 resolution, 1 window (primary account) at 2556x1373 resolution, The CPU is barely used, Memory is about 85% utilised, VRAM is 80% utilised and GPU is about 85-90% (6800MB).
With 4 instances (an additional window at approx 1280x780), CPU is still fine (15%), Memory is maxed out, VRAM is 92%+ (7600MB+) and GPU is 95-100%. Different parts of the game can run pretty poorly and as such sometimes I reduce the secondary accounts FPS Cap to around 44 instead.
I've noted that with my hardware running 4 instances is generally not fun graphically due to performance stutters, FPS drops and increased chance of crashing. I'd argue that running 4 or more accounts is confusing and isn't fun logistically either but I digress.
Q: I would like to say "Thankyou". How do I do that?
A: Please pay my entire mortgage. Thanks in advance. Buy me a beer here https://www.buymeacoffee.com/shupershuff.
Or here https://github.com/sponsors/shupershuff.
Or D2JSP funny money.
Or your local animal charity.
Or even just a message to say thanks :)
Q: The script won't let me run it as it gives me security prompts about scripts being disabled or the current script being untrusted :(
A: See instructions above. The default script policy for Windows 10/11 devices is restricted. We can change this to remote signed. A full write up of the policies can be seen here.
Q: When Diablo opens it won't allow me to select an online character
A1: This will be due to your password or username being entered in incorrectly. Please note that multiple failed authentication requests can cause a temporary lockout from that realm (seems to be around 15-30mins).
A2: In some circumstances, Battlenet can also require a capcha code to be entered to verificaton. If in doubt, try logging in via the battlenet client and see if it prompts for captcha. It might take several hours for this to resolve itself (6 hours observed in issue #17).
A3: In some circumstances, for no real reason, you might randomly have issues with one or more of your accounts connecting with warnings about "Account locked for suspicious activity" after temporarily switching regions. This only happens when using parameter based authentication. Numerous people have seen this issue across different loaders and for people who launch the game from desktop shortcuts. I've discovered no pattern as to why this happens or how to resolve it. Workaround is to launch problematic accounts using Auth Tokens.
Q: I have reset one of my Battle.net account passwords, how do I update accounts.csv?
A: Open accounts.csv and clearout the password field. Either enter your new password into the csv file or leave it blank and the script will ask you next time you run it.
Q: When I run this I'm unable to use Push to Talk (PTT) in Discord.
A: As the script needs to run as administrator, this also means it starts the game with elevated rights. As such this can mess with Discord PTT. This is a known issue with Discord. To resolve this you can run Discord in Administrator mode.
I recommend that you find the Discord Shortcut or app, go into properties > Compatibility and check the box for "Run this program as administrator" so that it always runs as admin. :)
Q: A UAC prompt opens each time asking me to run as Admin. This is annoying. Can I disable this?
A: Yes, there are a couple ways to do this, see here: https://silicophilic.com/add-program-to-uac-exception/#Method_2_Run_Programs_With_Admin_Privileges_Without_UAC_Prompt
Q: Will this work if I've extracted game files with Casc viewer in an attempt to make the game load faster?
A: Yes, if you're one of the people that have done this, you can still run the game using this script. Make sure to specify "-direct -txt" in the CustomLaunchArguments column in Accounts.csv.
Q: Why does the script need to run as admin?
A: The script needs to run as admin in order to kill the "Check for Other instances" process handle and to be able to rename your D2r windows once launched. The script uses the names of these Windows to detect which accounts are currently active.
Q: I get 2FA/MFA Battlenet prompts on my screen but even though I approve, when the game loads it won't show online characters.
A1: Bad news here sorry, Diablo does not work with MFA enabled when launching the game from a shortcut with parameters. Blame Blizzard, their MFA solution overall isn't great either.
That said, it is possible to connect if you utilise the Auth Token method instead of Parameters. To setup AuthToken authentication, (see Auth Token steps in Setup Your Accounts).
Q: I have suggestions and/or issues with this, where do I post these?
A: Please use GitHub issues for any feedback. Thanks!
Q: If I've read this far through this long ass readme does that mean I can read good?
A: Yes, you read at least up to a Dr Seuss reading level. Well done you!
Q: I get prompts to enter captcha's on my accounts randomly. Why is this?
A: I'm not sure exactly why this happens but it does appear to happen more with newer accounts. Ensure you have logged into the battlenet client AND into your webbrowser with the account and approve any verifications/captchas needed. Do not share the account with other people. Do NOT use a VPN when signing into the account (whether it be via this script, bnet client or website).
Q: Will you implement a feature to skip intro videos when launching?
A: Could I? Yes. Will I? No as this requires modifying game files (video files really). Whilst the script can cater for mods you want to use, I don't want this script directly modifying any game files, even something as innocent as intro videos. If skipping intro is of interest to you, you can look at the introskip mod.
Q: I'm getting an error says "You have not been online in the last 30 days. Please start the game while online to check for any login agreements". A: As the error suggests, try logging in from the battle.net client. If issues persist, use Google as there are dozens of threads where people have had this issue due to other reasons (eg firewall).
Q: Is this Script against ToS?
A: Multiboxing itself is not against Blizzard TOS as per this Blizzard Rep and this Blizzard Article. However the only way of achieving this without additional physical computers or Virtual Machines is by killing the "Check for Other instances" handle.
Outside of killing this handle and changing the window title, there are absolutely no modifications to the game made by this script, it's simply an improved, alternative way to start the application. To be clear, this script in no way enhances or assists with actual game play and I would strongly advise against seeking/using any tools for automation. The script is essentially launching the game the same way you would if you had setup shortcuts to the game with parameters (account, region and password), launching that way and then killing the "Check for other instances" handle (as suggested in several guides). This script is a QoL tool to help consolidate your accounts to one simple launcher to simply open the game with the account(s) and region(s) you want.
So the real question is, regardless of this script, is using procexp or another method to kill the "check for other instances" handle against ToS? Stricly speaking yes and this topic has been broached in Blizzard forums many times without an official response either for or against. If you're reading this your real question is actually "Will I get banned for multiboxing by killing the 'check for other instances' handle?" which to that I'm confident the answer is no. If I wasn't confident, this script wouldn't exist and people wouldn't be using procexp/handle.exe to multibox through traditional methods. Given the widespread use of procexp/handle being used to multibox, this method (and therefore also this script), is considered safe.
This script can also be used for folk who have one account and want to track playtime details or simply want to be able to use an interface to launch different single player mods.
The script will generate a file called SetTextv2.exe if it doesn't exist.
This is used to rename the Game Windows so that you and the script can tell each instance apart.
To compile the .exe this requires DotNet4.0. If you don't have it the script will prompt you to download this from Microsoft.
A Windows Defender exception will also be automatically added for the directory this sits in, as at the time of writing (24.4.2023), Windows Defender considers it to be dodgy.
A submission has since been sent to Microsoft and submission has been cleared :)
I have since made a new version of SetText so that it can rename Windows based on process ID (instead of looking for any window matching Diablo II) to prevent any issues with folk who launch an instance via Battlenet as well as the script.
If you have a 3rd Party Anti-Virus product installed and it kicks up a fuss, you may need to manually add an exception to the .\SetText\ folder location.
Optional: If you don't trust me and want to build the .exe yourself you can do the following.
See this site for more information on what this does, this contains the original version and the updated version that I've made: https://stackoverflow.com/questions/39021975/changing-title-of-an-application-when-launching-from-command-prompt/39033389#39033389
You tell me. If there's something you want to see added or improved then let me know. Future updates may include:
Happy for you to make any modifications this script for your own needs providing:
Proudly made in NZ
Latest Version Downloads:
Release with the most downloads:
All Time Downloads:
Page views as of 2nd Oct 2024:
Tags for Google SEO (maybe): Multiboxing, Multiboxes, multibox, multi-box, multi-boxing, multi-launcher, boxer, launcher, Shuper, d2loader, d2rloader, script, diabloloader, loader, D2r, Diablo 2: Resurrected, Diablo II: Resurrected, uber, dclone, youtube, DiabloII, powershell, process explorer, procexp, windows, battle.net, warriv, d2r Multi, d2r launcher, d2r loader, alt, d2r multibox, chat Gem workinG as intended