midoshouse / ootr-multiworld

An alternative implementation of multiworld for the Ocarina of Time randomizer
https://midos.house/mw
MIT License
9 stars 1 forks source link

EverDrive support #23

Open fenhl opened 1 year ago

fenhl commented 1 year ago

Some models of the EverDrive-64, such as the EverDrive-64 X7, have a USB port that can be used for communication between the game running on the EverDrive and a connected PC. This could in theory be used to add multiworld support for EverDrive by having the randomizer implement a protocol similar to the one the Mido's House Multiworld app uses to communicate with the BizHawk and Project64 plugins, with some adjustments required to accomodate the idiosyncracies of the USB interface and since the EverDrive loses its state when resetting the console (e.g. savewarping).

I've tried prototyping this and detecting whether an EverDrive is present works. However, reading data does not. The latest attempt can be found at https://github.com/fenhl/OoT-Randomizer/compare/dev-fenhl...everdrive. Resources used for this implementation:

fenhl commented 1 year ago

Thanks to fenhl/OoT-Randomizer#14, reading and writing data works now. The next steps are to finish designing the USB communication protocol (I've written a first draft) and implement it as a PR for the randomizer.

fenhl commented 1 year ago

I've posted my current draft of the USB communication protocol at https://github.com/OoTRandomizer/OoT-Randomizer/issues/2042.

fenhl commented 1 year ago

This is now in progress on the everdrive branch. Current progress:

fenhl commented 10 months ago

The everdrive branch has now been merged into main. EverDrive support can be enabled by setting the runtime environment variable MHMW_EVERDRIVE to a non-empty value. Connecting to the EverDrive via USB is not yet implemented.

fenhl commented 6 months ago

This is now available as of version 15.2.0. See the release notes for caveats. Leaving this open until it lands on the main Dev branch of the randomizer, as there is still more work to do before a pull request can be opened.