Virtualized Magic: The Gathering Online and Arena — or, How to Get Your Cardboard Crack When All You Have is a MacBook.

Erik Nygren
13 min readMar 24, 2020

--

It’s Friday, late afternoon. You’ve finished your work for the week and you’re about to kickstart the weekend right with some fresh cardboard, so you head for your local FNM for some well deserved QT with your inner Planeswalker. Not anymore you’re not! COVID is here, and while the rest of your peers are booting up MTG Online or Arena on their gaming rigs, you’re stuck on your Mac laptop and are regretting your decision to wait for WotC to figure out how to compile Unity on MacOS¹. Fortunately, all is not lost and theres a solution — it’s time to go fully virtual by gaming “in the cloud”.

In this post I’m going to give you a quick tour of how to setup a virtual Microsoft server on AWS (Amazon Web Services), and connect to it remotely using Parsec, where I work for a living. When you’re done, you’ll be able to connect to a virtual PC capable of running MTGO/Arena (or any other game), which you’ll rent by the hour. It’s not free, but it beats shelling out for a full rig. For cost breakdown, read through to the end.

TL;DR

This is what we’ll do.

  • Set up AWS credentials and launch a virtual machine.
  • Log in to the machine with Microsoft Remote Desktop to setup Parsec.
  • Run James’ nifty setup script to sort out the machine.
  • Install MTGO and Arena.
  • Draaaaaaft!

Start (// Finish)

We’ll use a few services and programs to get it all working. So you’re going to start by:

The Cloud(blazer)

“The cloud” is where we’ll begin, it is the least straightforward part. AWS is the service you’ll use to host your virtual machine, i.e. a machine that runs on hardware owned and managed by Amazon, but which otherwise acts like a regular computer to you. I won’t go into AWS in depth (it is what I spend my days working with), just guide you through the bare necessities. Their full pricing is here, the instance you’re creating will cost around $.75/hour (more on this later), and I’ll close the article with the costs of my first weekend playing. There are alternatives, but for that you’ll have to turn elsewhere.

For the actual signup, I haven’t done it in many years and didn’t re-do it for this article, so you’re on your own there. It may or may not prompt you to create your Access Credential (not your password, the Access Key ID and Secret Access Key). If it does, take note of the key and secret value(don’t share them with anyone). Otherwise fear not, we’ll get them in the next step.

Once you’ve logged in, you’ll see the console:

You won’t have the same Recently visited services (for obvious reasons), but I’ve highlighted EC2, Elastic Compute Cloud, which is AWS’ name for cloud machines, along with some other sections where we’ll be heading next.

Access Credential

If you already have these, all the better, you can skip this step. We’re not going to do anything tricky with these, so don’t be afraid, AWS just requires uses them to accept the Nvidia terms of service when you setup the graphics card (I know…). If you already have them, good, otherwise, take a look at the menu My Security Credentials under your name in the top right.

Here, hit Create Access Credential (not pictured) and take note of both values, the key and the secret. You don’t need to save these anywhere, just keep them visible or copied — we‘ll only need them in one part of the process later.

(One With) The Machine

Next up, we’re going to start the machine. Go to the Services tab on the top left, and click EC2 (Elastic Compute Cloud). It will look like this:

The first thing to note is the region on the top right, in my case N. Virginia. AWS has several data centers where the actual physical hardware you’re running on will live. Your latency will be affected by how far away you are from that location, so pick a region that’s close to you². However, there is a small chance the instance type we’ll be using (g4dn.xlarge) isn’t available in the center you pick, in which case you’ll have to switch. As I’m writing this, coverage is pretty comprehensive and is detailed by AWS here.

On the EC2 dashboard, you’ll see a view like this, except you won’t have a machine (yet). To start off, click — you guessed it — Launch Instance.

You won’t actually need the DNS or IP, Connect will take care of that, but that’s where they are displayed once the machine has started. Note that if you restart the machine, they change.

Wizard(‘s Retort)

AWS has a good setup wizard for launching your machine, so we’ll breeze through it here with some pictures.

First step is to find the current Microsoft Server version we’ll be using, i.e which AMI (Amazon Machine Image). You can see mine in the picture above, but they update them constantly so don’t worry about finding the same exact ID. Just search for Microsoft 2019 in the AWS Marketplace tab on the left and you’ll find the one you need. If you want a different base language than English, they’ve got that too.

Next, choose the instance type g4dn.xlarge. The g is for graphics, and 4 is the latest version (cheaper and better).

Don’t get tricked by the blue button that says Review and Launch, we’ll have to run through the setup step by step.

On the next step, Instance Details, you can leave the default settings. If a VPC isn’t created for you, use the create new VPC and create new Subnet options in the menu to have AWS do it for you, and set the Auto-assign Public IP to Enable.

For storage, you’ll see a setup this:

The bottom device you can’t change, it lives with the instance when it’s turned on and acts as a cache to speed up your file system access. The top device is where you’ll store the operating system and your programs, so adjust it depending to your needs. 30GB is the minimum, and Windows takes up most of that. If you’re running just MTGO/A, you might be fine leaving it at 30, but if you allocate too little you’ll have to recreate this all from scratch. For myself I set the disk at 100GB, which costs costs $10/month and leaves plenty of space for other games. You can easily cut this in half if this cost is a concern, but fair warning: running the machine will cost much more. Note that instances only cost money when they’re running, but storage you pay for the lifetime of the instance.

Next you’ll add a name. Use the Name tag (case sensitive) to make it show up nicely in the AWS console. This is the eriks-cloud-computer from before, but the name won’t matter as you’ll set the name displayed in Parsec separately.

Finally, we’ll need to configure a Security Group. This is like a firewall, it controls what traffic is allowed in and out.

The wizard will create a default one for you, which will be almost good enough for us. Cut out SSH, and use the drop down menu under Source to limit access to just your IP. We’ll only use RDP for the initial setup. After Parsec is running, you can connect from anywhere without using any more rules³.

Now, you’re finally ready to click Review and Launch! You’ll get a preview, and AWS will prompt you to create a Key Pair. Follow their instructions, and save the resulting file somewhere. You need this to get the Windows Administrator password and connect to the instance. Like before, this is a one-time thing, but if you ever need the administrator password after setup, you’ll want this file handy.

With this done, you’ll be dropped back to the EC2 dashboard, which should look similar to mine from before. You’ll need to wait a few minutes for the instance to get setup, so while you do that, download Microsoft Remote Desktop if you didn’t already.

Once your machine says it’s running, hit the connect button. AWS will stop you if it’s too soon, but eventually it will show you a dialogue like this one:

Click Get Password, and use their file picker to upload the Key Pair file you made earlier, copy the password you get in return. Download the remote desktop file and open it, which will open the Microsoft Remote Desktop automatically and when prompted, paste the password. Presto, you’re in!

(Helm of the) Host

If you didn’t previously, download Parsec and signup for an account. It’s free, so you didn’t go through all this hassle just to get suckered into paying for something else. To avoid confusion since you’re running Parsec on your Windows cloud machine and your Mac, I’ll be referring to the Windows machine as the server, and the Mac as the client, since you’re connecting from Mac to Windows (both run the same program, but right now Parsec only hosts on Windows).

(Just the) Windows

Now that you’re connected to Windows, start by disabling the enhanced security, which is nothing but an annoyance. Follow these instructions.

The rest is a breeze, thanks to my colleague James, who’s set up a super nifty all-in-one cloud machine setup script which will guide you through all of the setup. If you see him in Discord give him a high five, he did it all in his free time! In Internet Explorer, go to https://github.com/jamesstringerparsec/Parsec-Cloud-Preparation-Tool (don’t worry, the tool will install Chrome), and follow the instructions. If you’ve never used Windows before (good for you), this is where you’ll be wanting to be clicking:

Be sure to read the instructions from James’ script carefully as it runs through (the text in red), and don’t close the window until you’ve run the follow up steps to enable Auto Logon (you’ll need the Administrator password again), Setup Auto Shutdown (AWS does not stop your computer for you, so this is not something you want to forget about), the ParsecServiceManager.exe and finally the GPU Updater. Run the GPU Updater last, since it will restart the server and after that you can just use Parsec. This is the step is where be prompted for your AWS key and secret, which you’ll recall was the very first step we did when setting up AWS. Not the Key Pair, the Access Credential (confusing, I know).

Since the GPU restarts your machine, you’ll be booted from your Windows remote desktop session, which is just as well since we won’t need it anymore. Go to the Parsec client on your Mac, and when the GPU update finishes (takes a few minutes), you’ll see something like your machine in Parsec:

Your name will be something auto-generated by AWS. You can change it using the gear icon on the host after you’ve connected, so for now hit connect and you’ll be back on your server. If you run into connection issues, check the support page or the #support channel in Discord.

(Phyrexian) Arena

Finally, all is set up! You’re ready to install Magic and start drafting. I won’t cover that here, it’s straightforward, just find their downloaders online. There’s one gotcha. When I first launched Arena I got a black screen. You could hit Alt + Tab to go back to your desktop, but there was no way to get the program to run.

After some searching, I found these instructions online, in particular the section by reposted by Sagittargo#60794. It seemed very sketchy, but despite my 0% confidence that gofile.io wasn’t some sort of scam, it worked flawlessly! The bug might have been fixed by now, but I’m reposting those comments here in case you run into the same issue.

Brian#76407 commented · March 20, 2020 21:52 · Flag as inappropriate

I downloaded AkSoundEngine.dll from this link http://73.gs/u/Zam5N.zip (originally posted https://forums.mtgarena.com/forums/threads/62720/comments/394561)

Copied it into C:\Program Files (x86)\Wizards of the Coast\MTGA\MTGA_Data\Plugins and it started working.

[…]

skirge2000#97349 commented · March 15, 2020 02:23
I tried everything but only this worked in the end. Try downloading AkSoundEngine.dll from the following link https://gofile.io/?c=bK9tCg and replace it in the plugins folder of mtg arena.
Pastree#94615 comentado · March 19, 2020 04:21 ·
Thank you Skirge! For those less than computer savvy, I found the plugins in Program Files -> Wizards of the Coast -> MTGA -> MTGA_data.

(Ultimate) Price

That’s all folks! You’ve now got an easy way to turn on a virtual PC to connect and play magic on. It won’t be free, but it will do the job. You have to log into AWS to start and stop it, and use Parsec to connect. So, how much will it cost, is it worth the trouble? Here’s what my first three days look like in the AWS Cost Explorer.

As you can see, the service is hardly free. For context, I’ll estimate that this represent me setting up and then playing for about 8 hours on March 21st, another 6 hours on the 22nd and an hour “lunch time mtg” with my colleague, along with some starts and stops to screenshot for this article. AWS’ pricing model is by full hour, which is why you’ll see costs go down relative to the number of hours I play in a row. That is to say, if you start the machine for ten minutes, and then stop it, you’re still charged the full hour. Also note that although the cost is dominated by the price of the machine, the bandwidth isn’t free, so with storage the total is closer to $1 per hour rather than the listed machine price.

All in all, although costs are higher than for the many cloud services you’re used to, the cost is still far lower than investing in standalone machine. It is also much quicker to set up (and is much easier to carry around = ). It’s slightly more cost-efficient if you game in extended sittings once in a while, which suits me well. I estimate that my costs will end around $100 for the first month, $50 for the second once the novelty has worn off, and that I’ll be back drafting in person by the third month. And if we’re still quarantined by then, I imagine there’ll be other things to worry about.

Terminate

We’re now done with the setup, and things should be running smoothly. You should take this opportunity to delete the Access Credential we created at the beginning since it’s nothing but a security risk, and uninstall Microsoft Remote Desktop. You can delete the Key Pair too if you plan on just recreating the machine if you ever need the Administrator password again.

When you want to stop using your machine forever, delete it by terminating in the AWS EC2 console. Remember that AWS will always charge for volumes, so if you stop using it, it’s not something you want to forget about. Moreover, although you setup the “idle shutdown” using the script, you should always Shutdown your machine from the Windows menu or stop in AWS console. You don’t want the machine sitting idle and costing you money.

(Sphinx of the) Final Word

Congratulations, you’re now a cloud developer! Thank you for reading, I hope you found it helpful. I wish you the best of luck with the setup, with MTG and with life during COVID in general. You might catch me on MTGO and Arena as _nygren, and at Hi-De-Ho Comics in Santa Monica or Twenty Sided Store in NYC. And if you’re hosting a draft in west LA once we’re back to normal, hit a brother up! I’ll probably draft Grixis nonsense and exclaim “mistakes were made!” when I get a fifth pick Swords to Ploughshares.

Four apathies on three lands before the pilgrim!? I know bot drafting leave something to be desired, but jeez, good beats opponent. (In retrospect, yes, the turn one mystic repeal was a mistake).

[1]: It’s not hard, my colleague Skippy maintains our Unity plugin across Windows, Linux and Mac, and I’d estimate that’s about 5% of his total workload.

[2]: For MTG, latency is a non-issue. As an example, I live in Los Angeles and run my virtual machine in Virginia, and my only issue is the speed (or if you want to be specific, the jitter) of my local internet provider. The average latency different from the CA datacenter to the VA one is around 50ms, which you’ll never notice. Speed of light, it’s fast!

[3]: There is a chance you’re behind a “double NAT”, which will prevent Parsec from negotiating the connection and will result in a 6023. If this happens to you, follow this guide, and add a security group rule under the UDP protocol for port 8000-8020.

[4]: If you’re having issues with never getting prompted, it’s most likely because your Security Group settings from earlier are incorrect, so go over those again. You can edit them from your dashboard in a menu on the left side without recreating your machine.

[5]: I know they renamed it some years back, but to quote Al Pacino in the guise of Lt. Col. Frank Slade: “He might be [Edge] to you son, but when you’ve known him as long as I have…”

--

--