WinDurango banner

WinDurango

18 devlogs
89h 42m 32s

An Xbox One translation layer project rewrite Im helping with. Currently the re-write can only run Minecraft LCE 1.2.0.0, but the pre-rewrite could run the latest version of Minecraft LCE, Sonic Mania and some others. This is still a Work in Progr…

An Xbox One translation layer project rewrite Im helping with. Currently the re-write can only run Minecraft LCE 1.2.0.0, but the pre-rewrite could run the latest version of Minecraft LCE, Sonic Mania and some others. This is still a Work in Progress.

Demo Repository

Loading README...

CT5

Shipped this project!

Hours: 89.71
Cookies: 🍪 1966
Multiplier: 21.92 cookies/hr

I was able to help build an Xbox One Emulator that can run Minecraft Legacy Console Edition, mainly working on winrt. Writing the idls for winrt was very repetitive and kinda boring to do, but it turned out well.

CT5

So I was able to use Ghidra to reverse engineer the XAudio2_9.dll to implement sound, and I was able to figure out the basic exported funcs to implement. The first approach I used was the native XAudio headers but I think that conflicted with mine so it doesn’t work. So now Im implementing my own version, but somehow MSS doesn’t like my dll even though nothing has failed and it hasn’t called any of my stubbed functions.

Attachment
Attachment
0
CT5

I genuinly can’t tell you how much time I wasted in ghidra to figure out why Minecraft was crashing, but I just copied the XAudio2_9.dll from the EmbeddedXvd folder and now it works. Now, all I need to do is add gamepad support and get it working with 1.61. From Ghidra, the only useful info I was able to gather was that Minecraft LCE uses the Miles Sound System, also called MSS from RAD Game Tools.

Attachment
Attachment
0
CT5

I was able to fix the storage error that caused some errors since it would interrupt the whole thread. I was also able to add Async functions for it so that you can co_await them. The only issue is that now, Im getting this error. Im not exactly sure if its something I broke, or just another error.

Attachment
0
CT5

Ok, so its been a month, but I was able to get it working with some help. Now Im just facing issues with some Platform COM exception. Im not sure what its about yet, but ill have a look at that later. Im getting some errors on Windows.Data.JsonObject as well, but that can be easily fixed.

Attachment
0
CT5

I was able to use some winmd’s to get the runtime classes needed for Microsoft.Xbox.Services. It took a long time for me to translate all the runtime classes from DotPeek to midl3 and I had to convert all the Int GUIDs to Hex GUIDs using a simple JS Script that converted all the numbers to hex values.

Attachment
Attachment
0
CT5

Ok, so now I need to add Windows.Xbox.Networking.SecureDeviceAssociationTemplate. Anyway, so I was able to add Windows.Xbox.Multiplayer.Party and fix the AddRef error I had because I had an incorrect vtable. I also added more stuff to Windows.Xbox.ApplicationModel.idl.

Attachment
Attachment
0
CT5

I was able to add Windows.Xbox.Storage.idl and make an xbox notification thing from imgui. After D3D11x is done, ill merge and implement the xb ui funcs. I also created ConnectedStorage so that it would work with multiple users. Anyway, I was also working on the Xbox Guide UI, so hopefully Ill finish it tomorrow.

Attachment
0
CT5

I was finally able to get to the D3D11x part in Minecraft so I don’t need to do anymore idl stuff for now at least. I was able to get the GUIDs from the era.vbi using vbidump and regspy.

Attachment
0
CT5

Implementing Windows.Xbox.Management.Deployment was pretty easy and repetitive. I had a linker issue where it would complain about the winrt Event Handler, which I was able to fix by adding #include <winrt/Windows.Foundation.h>. The Deployment idl looks interesting because of the licencing stuff inside it

Attachment
0
CT5

Today I was able to make implementations for Windows.Xbox.System.idl and Windows.Xbox.Input.idl. There were a few weird cpp compiler errors that I was able to fix. One of them required me to add winrt::event<winrt::Windows::Foundation::EventHandler<winrt::Windows::Xbox::Input::ControllerAddedEventArgs>> Controller::e_ControllerAdded{}; for static winrt::event’s. Most of the functionality is Stubbed but Ill test it with minecraft later.

Attachment
0
CT5

It took me a long time to write the idl for Windows.Xbox.Input and I had a few issues with midl. The docs weren’t really useful for writing in midl3. midl also didn’t have compiler errors for events so I spent a while looking for the issue only to realise that I added a { get; } for an event. Anyway, I think there is still a lot I havent done in the Input idl but it should be fine for now.

Attachment
0
CT5

Im still working on reversing Windows.Xbox.System.idl using Unity PDBs and resym. This tool helps a lot with reverse engineering. Ive commented out a lot of the functions because they rely on other runtimeclasses which I havent implemented yet.

Attachment
0
CT5

I was able to implement GameTransportControls and fix the logging issue that prevented it from logging to the file. It took me a long time to figure out what was wrong with the winrt cmake file bc it keep on erroring out with not being able to find “windows.prop”. I was able to fix it by removing some cmake code which was supposed to install cppwinrt.

Attachment
0
CT5

I was able to get Logging working today with Spdlog as well as fixing File and Directory and making the Initialise function in WinDurango.cpp in WinDurango.Common. I was also able to get the Demo working.

Attachment
0
CT5

I was able to finish WinRTDirectory and WinRTFile. It was difficult to find proper documentation online on how to read files, but I was able to use this MS documentation to figure it out. After that, I was able to test it in WinDurango.Testing and it had a few bugs which I was able to fix.

Attachment
0
CT5

So since we are doing a rewrite, I started working on the Testing project and the WinRT implementation of File and Directory which allows you to access and read files and dirs without having to worry about sandboxing. There will also be a Native implementation of File and Directory which is for linux. The testing project was really hard since it is incredibly difficult to build UWP WinRT apps on cmake. So I just used visual studio instead.

Attachment
0
CT5

I was able to get Sonic Mania to work the day before. Sonic Mania used some stubbed functions and DMACreateContextX which was part of the issue. It still gives me a Reconnect Controller Issue whenever I press a button.

Attachment
0