diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 0000000000..c24ef128b8
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,48 @@
+# This is a basic workflow to help you get started with Actions
+
+name: Linux CI
+
+# Controls when the action will run. Triggers the workflow on push or pull request
+# events but only for the master branch
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build"
+ build:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v2
+ # Setup CMake
+ - name: Setup CMake
+ uses: Symbitic/install-cmake@v0.1.1
+ with:
+ platform: linux
+ # Submoudle
+ - name: Checkout Submodles
+ run: git submodule update --init --recursive
+ # Setup Packages
+ - name: Setup Packages
+ run: sudo apt update && sudo apt upgrade && sudo apt install curl ffmpeg git libao-dev libasound-dev libavcodec-dev libavformat-dev libbluetooth-dev libevdev-dev libgtk2.0-dev libhidapi-dev libmbedtls-dev libminiupnpc-dev libopenal-dev libpangocairo-1.0-0 libpulse-dev libsfml-dev libswscale-dev libudev-dev libusb-1.0-0-dev libxrandr-dev qt5-default qtbase5-private-dev
+ # Run CMake
+ - name: Run CMake
+ run: mkdir build && cd build && cmake .. -G Ninja -DLINUX_LOCAL_DEV=true
+ # Build Project
+ - name: Run Make
+ run: cd build && ninja -j4
+ # Configure Dolphin
+ - name: Configure Dolphin
+ run: cd build && cp -r ../Data/Sys/ Binaries/ && cp -r ../Data/User/ Binaries/ && cp -r ../Data/dolphin-emu.png Binaries/ && touch Binaries/portable.txt
+ # Upload Artifact
+ - name: Upload Build Artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: DolphinMPN-Linux
+ path: /home/runner/work/dolphin-mpn-advanced-src/dolphin-mpn-advanced-src/build/Binaries/
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
new file mode 100644
index 0000000000..8e49b1319e
--- /dev/null
+++ b/.github/workflows/macos.yml
@@ -0,0 +1,51 @@
+# This is a basic workflow to help you get started with Actions
+
+name: macOS CI
+
+# Controls when the action will run. Triggers the workflow on push or pull request
+# events but only for the master branch
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build"
+ build:
+ # The type of runner that the job will run on
+ runs-on: macos-latest
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v2
+ # Setup CMake
+ - name: Setup CMake
+ uses: Symbitic/install-cmake@v0.1.1
+ with:
+ platform: mac
+ # Setup Packages
+ - name: Setup Packages
+ run: brew install qt5 pkgconfig
+ # Use Static ZSTD
+ - name: Remove ZSTD
+ run: brew uninstall zstd curl php --force --ignore-dependencies
+ # Submoudle
+ - name: Checkout Submodles
+ run: git submodule update --init --recursive
+ # Run CMake
+ - name: Run CMake
+ run: mkdir -p build && cd build && cmake .. -G Ninja -DCMAKE_CXX_FLAGS="-Xclang -fcolor-diagnostics" -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)
+ # Build Project
+ - name: Run Ninja
+ run: cd build && ninja -j4
+ # Configure Dolphin
+ - name: Configure Dolphin
+ run: cd build && cp -r ../Data/Sys/ Binaries/ && cp -r ../Data/User/ Binaries/ && cp -r ../Data/dolphin-emu.png Binaries/ && touch Binaries/portable.txt
+ # Upload Artifact
+ - name: Upload Build Artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: DolphinMPN-macOS
+ path: /Users/runner/work/dolphin-mpn-advanced-src/dolphin-mpn-advanced-src/build/Binaries/
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index 7242192251..5f458879d7 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -31,10 +31,10 @@ jobs:
vs-version: '16.6.2'
# Run MSBuild
- name: Build Solution
- run: msbuild "D:\a\dolphin-mpn-src\dolphin-mpn-src\Source\dolphin-emu.sln" /verbosity:minimal /property:Configuration=Release /property:Platform=x64
+ run: msbuild "D:\a\dolphin-mpn-advanced-src\dolphin-mpn-advanced-src\Source\dolphin-emu.sln" /verbosity:minimal /property:Configuration=Release /property:Platform=x64
# Upload Artifact
- name: Upload Build Artifact
uses: actions/upload-artifact@v2
with:
name: DolphinMPN-win32
- path: D:\a\dolphin-mpn-src\dolphin-mpn-src\Binary\x64
+ path: D:\a\dolphin-mpn-advanced-src\dolphin-mpn-advanced-src\Binary\x64
\ No newline at end of file
diff --git a/Data/dolphin-emu.png b/Data/dolphin-emu.png
index c9d5b6836a..2ae36a4903 100644
Binary files a/Data/dolphin-emu.png and b/Data/dolphin-emu.png differ
diff --git a/Readme.md b/Readme.md
index 80f0f1424f..1f1d3c3578 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,252 +1,50 @@
-# Dolphin - A GameCube and Wii Emulator
+# Dolphin MPN
-[Homepage](https://dolphin-emu.org/) | [Project Site](https://github.com/dolphin-emu/dolphin) | [Buildbot](https://dolphin.ci) | [Forums](https://forums.dolphin-emu.org/) | [Wiki](https://wiki.dolphin-emu.org/) | [Issue Tracker](https://bugs.dolphin-emu.org/projects/emulator/issues) | [Coding Style](https://github.com/dolphin-emu/dolphin/blob/master/Contributing.md) | [Transifex Page](https://www.transifex.com/projects/p/dolphin-emu/)
+Dolphin MPN is an emulator for running GameCube and Wii games on Windows, macOS, and Linux
-Dolphin is an emulator for running GameCube and Wii games on Windows,
-Linux, macOS, and recent Android devices. It's licensed under the terms
-of the GNU General Public License, version 2 or later (GPLv2+).
-Please read the [FAQ](https://dolphin-emu.org/docs/faq/) before using Dolphin.
+## Info
+This emulator bundled a modified version of Dolphin
-## System Requirements
+## Installation
+(note: ROMs will need to be downloaded separately)
-### Desktop
+## Compiling
-* OS
- * Windows (7 SP1 or higher).
- * Linux.
- * macOS (10.13 High Sierra or higher).
- * Unix-like systems other than Linux are not officially supported but might work.
-* Processor
- * A CPU with SSE2 support.
- * A modern CPU (3 GHz and Dual Core, not older than 2008) is highly recommended.
-* Graphics
- * A reasonably modern graphics card (Direct3D 11.1 / OpenGL 3.3).
- * A graphics card that supports Direct3D 11.1 / OpenGL 4.4 is recommended.
+Windows:
+1) Install [Git](https://gitforwindows.org/) and [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/) (community is fine) if you haven't already
+1) Clone the Git Repo `git clone https://github.com/MarioPartyNetplay/dolphin-mpn --recursive`
+2) Open the **Source/dolphin-emu.sln** project in Visual Studio 2019
+3) Set Build Path to **Release** -> **x64**
+4) Click Build
+5: Open Dolphin
+**Dolphin is Located at Binaries/x64/**
-### Android
+Linux:
+1) Open Terminal
+2) Install Required Packages:
+ **Ubuntu** `sudo apt install curl ffmpeg git libao-dev libasound-dev libavcodec-dev libavformat-dev libbluetooth-dev libevdev-dev libgtk2.0-dev libhidapi-dev libmbedtls-dev libminiupnpc-dev libopenal-dev libpangocairo-1.0-0 libpulse-dev libsfml-dev libswscale-dev libudev-dev libusb-1.0-0-dev libxrandr-dev qt5-default qtbase5-private-dev`
+3) Clone the Git Repo: `git clone https://github.com/MarioPartyNetplay/dolphin-mpn`
+4) Enter the Cloned Repo: `cd dolphin-mpn`
+5) Make the Build Directory: `mkdir build && cd build`
+6) Setup CMake: `cmake .. -G Ninja -DLINUX_LOCAL_DEV=true`
+7) Build Dolphin `ninja`
+8) Copy Important Files `cp -r ../Data/Sys/ Binaries/ && cp -r ../Data/User/ Binaries/ && cp -r ../Data/dolphin-emu.png Binaries/ && touch Binaries/portable.txt`
+9) Run Dolphin
+**Dolphin is Located at build/Binaries/dolphin-emu**
-* OS
- * Android (5.0 Lollipop or higher).
-* Processor
- * A processor with support for 64-bit applications (either ARMv8 or x86-64).
-* Graphics
- * A graphics processor that supports OpenGL ES 3.0 or higher. Performance varies heavily with [driver quality](https://dolphin-emu.org/blog/2013/09/26/dolphin-emulator-and-opengl-drivers-hall-fameshame/).
- * A graphics processor that supports standard desktop OpenGL features is recommended for best performance.
+macOS:
+1) Install [Xcode Command Line Tools](https://developer.apple.com/xcode/features/) & [Brew](https://brew.sh/) if you havent
+2) Open a Terminal
+3) Install Brew: `brew install cmake qt5 ninja pkgconfig git`
+4) Clone the Git Repo: `git clone https://github.com/MarioPartyNetplay/dolphin-mpn`
+5) Enter the Cloned Repo: `cd dolphin-mpn`
+6) Make the Build Directory: `mkdir -p build && cd build`
+7) Setup CMake: `cmake .. -G Ninja -DCMAKE_CXX_FLAGS="-Xclang -fcolor-diagnostics" -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)`
+8) Build Dolphin: `ninja`
+9) Copy Important Files: `cp -r ../Data/Sys/ Binaries/ && cp -r ../Data/User/ Binaries/ && cp -r ../Data/dolphin-emu.png Binaries/ && touch Binaries/portable.txt`
+10) Run Dolphin
+**Dolphin is Located at build/Binaries/dolphin-emu**
-Dolphin can only be installed on devices that satisfy the above requirements. Attempting to install on an unsupported device will fail and display an error message.
-
-## Building for Windows
-
-Use the solution file `Source/dolphin-emu.sln` to build Dolphin on Windows.
-Visual Studio 2022 17.0 or later is a hard requirement. Other compilers might be
-able to build Dolphin on Windows but have not been tested and are not
-recommended to be used. Git and Windows 11 SDK must be installed when building.
-
-Make sure to pull submodules before building:
-```sh
-git submodule update --init
-```
-
-The "Release" solution configuration includes performance optimizations for the best user experience but complicates debugging Dolphin.
-The "Debug" solution configuration is significantly slower, more verbose and less permissive but makes debugging Dolphin easier.
-
-An installer can be created by using the `Installer.nsi` script in the
-Installer directory. This will require the Nullsoft Scriptable Install System
-(NSIS) to be installed. Creating an installer is not necessary to run Dolphin
-since the Binary directory contains a working Dolphin distribution.
-
-## Building for Linux and macOS
-
-Dolphin requires [CMake](https://cmake.org/) for systems other than Windows. Many libraries are
-bundled with Dolphin and used if they're not installed on your system. CMake
-will inform you if a bundled library is used or if you need to install any
-missing packages yourself.
-
-Make sure to pull submodules before building:
-```sh
-git submodule update --init
-```
-
-### macOS Build Steps:
-
-A binary supporting a single architecture can be built using the following steps:
-
-1. `mkdir build`
-2. `cd build`
-3. `cmake ..`
-4. `make`
-
-An application bundle will be created in `./Binaries`.
-
-A script is also provided to build universal binaries supporting both x64 and ARM in the same
-application bundle using the following steps:
-
-1. `mkdir build`
-2. `cd build`
-3. `python ../BuildMacOSUniversalBinary.py`
-4. Universal binaries will be available in the `universal` folder
-
-Doing this is more complex as it requires installation of library dependencies for both x64 and ARM (or universal library
-equivalents) and may require specifying additional arguments to point to relevant library locations.
-Execute BuildMacOSUniversalBinary.py --help for more details.
-
-### Linux Global Build Steps:
-
-To install to your system.
-
-1. `mkdir build`
-2. `cd build`
-3. `cmake ..`
-4. `make`
-5. `sudo make install`
-
-### Linux Local Build Steps:
-
-Useful for development as root access is not required.
-
-1. `mkdir Build`
-2. `cd Build`
-3. `cmake .. -DLINUX_LOCAL_DEV=true`
-4. `make`
-5. `ln -s ../../Data/Sys Binaries/`
-
-### Linux Portable Build Steps:
-
-Can be stored on external storage and used on different Linux systems.
-Or useful for having multiple distinct Dolphin setups for testing/development/TAS.
-
-1. `mkdir Build`
-2. `cd Build`
-3. `cmake .. -DLINUX_LOCAL_DEV=true`
-4. `make`
-5. `cp -r ../Data/Sys/ Binaries/`
-6. `touch Binaries/portable.txt`
-
-## Building for Android
-
-These instructions assume familiarity with Android development. If you do not have an
-Android dev environment set up, see [AndroidSetup.md](AndroidSetup.md).
-
-Make sure to pull submodules before building:
-```sh
-git submodule update --init
-```
-
-If using Android Studio, import the Gradle project located in `./Source/Android`.
-
-Android apps are compiled using a build system called Gradle. Dolphin's native component,
-however, is compiled using CMake. The Gradle script will attempt to run a CMake build
-automatically while building the Java code.
-
-## Uninstalling
-
-When Dolphin has been installed with the NSIS installer, you can uninstall
-Dolphin like any other Windows application.
-
-Linux users can run `cat install_manifest.txt | xargs -d '\n' rm` as root from the build directory
-to uninstall Dolphin from their system.
-
-macOS users can simply delete Dolphin.app to uninstall it.
-
-Additionally, you'll want to remove the global user directory (see below to
-see where it's stored) if you don't plan to reinstall Dolphin.
-
-## Command Line Usage
-
-`Usage: Dolphin [-h] [-d] [-l] [-e ] [-b] [-v ] [-a ]`
-
-* -h, --help Show this help message
-* -d, --debugger Show the debugger pane and additional View menu options
-* -l, --logger Open the logger
-* -e, --exec= Load the specified file (DOL,ELF,WAD,GCM,ISO)
-* -b, --batch Exit Dolphin with emulator
-* -v, --video_backend= Specify a video backend
-* -a, --audio_emulation= Low level (LLE) or high level (HLE) audio
-
-Available DSP emulation engines are HLE (High Level Emulation) and
-LLE (Low Level Emulation). HLE is faster but less accurate whereas
-LLE is slower but close to perfect. Note that LLE has two submodes (Interpreter and Recompiler)
-but they cannot be selected from the command line.
-
-Available video backends are "D3D" and "D3D12" (they are only available on Windows), "OGL", and "Vulkan".
-There's also "Null", which will not render anything, and
-"Software Renderer", which uses the CPU for rendering and
-is intended for debugging purposes only.
-
-## Sys Files
-
-* `wiitdb.txt`: Wii title database from [GameTDB](https://www.gametdb.com/)
-* `totaldb.dsy`: Database of symbols (for devs only)
-* `GC/font_western.bin`: font dumps
-* `GC/font_japanese.bin`: font dumps
-* `GC/dsp_coef.bin`: DSP dumps
-* `GC/dsp_rom.bin`: DSP dumps
-* `Wii/clientca.pem`: Wii network certificate
-* `Wii/clientcakey.pem`: Wii network certificate key
-* `Wii/rootca.pem`: Wii network certificate issuer / CA
-
-The DSP dumps included with Dolphin have been written from scratch and do not
-contain any copyrighted material. They should work for most purposes, however
-some games implement copy protection by checksumming the dumps. You will need
-to dump the DSP files from a console and replace the default dumps if you want
-to fix those issues.
-
-Wii network certificates must be extracted from a Wii IOS. A guide for that can be found [here](https://wiki.dolphin-emu.org/index.php?title=Wii_Network_Guide).
-
-## Folder Structure
-
-These folders are installed read-only and should not be changed:
-
-* `GameSettings`: per-game default settings database
-* `GC`: DSP and font dumps
-* `Shaders`: post-processing shaders
-* `Themes`: icon themes for GUI
-* `Resources`: icons that are theme-agnostic
-* `Wii`: default Wii NAND contents
-
-## Packaging and udev
-
-The Data folder contains a udev rule file for the official GameCube controller
-adapter and the Mayflash DolphinBar. Package maintainers can use that file in their packages for Dolphin.
-Users compiling Dolphin on Linux can also just copy the file to their udev
-rules folder.
-
-## User Folder Structure
-
-A number of user writeable directories are created for caching purposes or for
-allowing the user to edit their contents. On macOS and Linux these folders are
-stored in `~/Library/Application Support/Dolphin/` and `~/.dolphin-emu`
-respectively, but can be overwritten by setting the environment variable
-`DOLPHIN_EMU_USERPATH`. On Windows the user directory is stored in the `My Documents`
-folder by default, but there are various way to override this behavior:
-
-* Creating a file called `portable.txt` next to the Dolphin executable will
- store the user directory in a local directory called "User" next to the
- Dolphin executable.
-* If the registry string value `LocalUserConfig` exists in
- `HKEY_CURRENT_USER/Software/Dolphin Emulator` and has the value **1**,
- Dolphin will always start in portable mode.
-* If the registry string value `UserConfigPath` exists in
- `HKEY_CURRENT_USER/Software/Dolphin Emulator`, the user folders will be
- stored in the directory given by that string. The other two methods will be
- prioritized over this setting.
-
-List of user folders:
-
-* `Cache`: used to cache the ISO list
-* `Config`: configuration files
-* `Dump`: anything dumped from Dolphin
-* `GameConfig`: additional settings to be applied per-game
-* `GC`: memory cards and system BIOS
-* `Load`: custom textures
-* `Logs`: logs, if enabled
-* `ScreenShots`: screenshots taken via Dolphin
-* `StateSaves`: save states
-* `Wii`: Wii NAND contents
-
-## Custom Textures
-
-Custom textures have to be placed in the user directory under
-`Load/Textures/[GameID]/`. You can find the Game ID by right-clicking a game
-in the ISO list and selecting "ISO Properties".
+### License
+Dolphin MPN is licensed under the [GNU General Public License v2.0](license.txt)
diff --git a/Source/Core/Common/GLideN64.custom.ini b/Source/Core/Common/GLideN64.custom.ini
new file mode 100644
index 0000000000..60de1e524b
--- /dev/null
+++ b/Source/Core/Common/GLideN64.custom.ini
@@ -0,0 +1,318 @@
+; Custom game settings
+[General]
+version=13
+
+[TWINE]
+Good_Name=007 - The World Is Not Enough (E)(U)
+frameBufferEmulation\N64DepthCompare=1
+
+[40%20WINKS]
+Good_Name=40 Winks (E) (M3) (Prototype)
+graphics2D\enableNativeResTexrects=1
+
+[BIOFREAKS]
+Good_Name=Bio F.R.E.A.K.S. (E)(U)
+frameBufferEmulation\copyToRDRAM=1
+
+[BioHazard%20II]
+frameBufferEmulation\copyFromRDRAM=1
+frameBufferEmulation\copyToRDRAM=0
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[52150A67]
+Good_Name=Bokujou Monogatari 2 (J)
+frameBufferEmulation\N64DepthCompare=1
+
+[67000C2B]
+Good_Name=Eikou no Saint Andrews (J)
+frameBufferEmulation\forceDepthBufferClear=1
+
+[CAL%20SPEED]
+frameBufferEmulation\bufferSwapMode=1
+
+[CASTLEVANIA2]
+Good_Name=Castlevania - Legacy Of Darkness (E)(U)
+frameBufferEmulation\copyToRDRAM=1
+
+[DMPJ]
+Good_Name=Mario Artist Paint Studio (J) (64DD)
+frameBufferEmulation\copyAuxToRDRAM=1
+frameBufferEmulation\copyFromRDRAM=1
+frameBufferEmulation\nativeResFactor=1
+generalEmulation\rdramImageDitheringMode=0
+
+[DMTJ]
+Good_Name=Mario Artist Talent Studio (J) (64DD)
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[DINO%20PLANET]
+frameBufferEmulation\copyToRDRAM=1
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[DONKEY%20KONG%2064]
+Good_Name=Donkey Kong 64 (E)(J)(U)
+frameBufferEmulation\copyDepthToRDRAM=1
+frameBufferEmulation\N64DepthCompare=0
+
+[DR.MARIO%2064]
+Good_Name=Dr. Mario 64 (U)
+frameBufferEmulation\fbInfoDisabled=0
+frameBufferEmulation\copyFromRDRAM=1
+frameBufferEmulation\copyToRDRAM=0
+
+[EXTREME_G]
+Good_Name=Extreme-G (E)
+frameBufferEmulation\N64DepthCompare=1
+
+[EXTREME-G]
+Good_Name=Extreme-G (J)
+frameBufferEmulation\N64DepthCompare=1
+
+[EXTREMEG]
+Good_Name=Extreme-G (U)
+frameBufferEmulation\N64DepthCompare=1
+
+[EXTREME%20G%202]
+Good_Name=Extreme-G XG2 (E) (U)
+frameBufferEmulation\N64DepthCompare=1
+
+[208E05CD]
+Good_Name=Extreme-G XG2 (J)
+frameBufferEmulation\N64DepthCompare=1
+
+[F1%20POLE%20POSITION%2064]
+Good_Name=F-1 Pole Position 64 (E)(U)
+frameBufferEmulation\copyToRDRAM=1
+
+[FLAPPYBIRD64]
+Good_Name=FlappyBird64
+frameBufferEmulation\fbInfoDisabled=0
+frameBufferEmulation\copyFromRDRAM=1
+frameBufferEmulation\copyToRDRAM=0
+
+[GOEMON2%20DERODERO]
+Good_Name=Ganbare Goemon - Dero Dero Douchuu Obake Tenkomori (J)
+graphics2D\enableNativeResTexrects=1
+
+[GOEMONS%20GREAT%20ADV]
+Good_Name=Goemons Great Adventure (U)
+graphics2D\enableNativeResTexrects=1
+
+[HARVESTMOON64]
+Good_Name=Harvest Moon 64 (U)
+frameBufferEmulation\N64DepthCompare=1
+
+[5CFA0A2E]
+Good_Name=Heiwa Pachinko World 64 (J)
+frameBufferEmulation\copyToRDRAM=1
+
+[HEXEN]
+Good_Name=Hexen (E)(F)(G)(J)(U)
+frameBufferEmulation\copyToRDRAM=1
+
+[HUMAN%20GRAND%20PRIX]
+frameBufferEmulation\copyToRDRAM=1
+
+[I%20S%20S%2064]
+Good_Name=International Superstar Soccer 64 (E) (U)
+frameBufferEmulation\N64DepthCompare=1
+
+[JET%20FORCE%20GEMINI]
+Good_Name=Jet Force Gemini (E)(U)
+frameBufferEmulation\fbInfoDisabled=0
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[J%20F%20G%20DISPLAY]
+; See Jet Force Gemini for notes
+Good_Name=Jet Force Gemini Kiosk Demo (U)
+frameBufferEmulation\fbInfoDisabled=0
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[J%20WORLD%20SOCCER3]
+frameBufferEmulation\N64DepthCompare=1
+
+[301E07CC]
+Good_Name=Mahjong Master (J)
+frameBufferEmulation\N64DepthCompare=1
+
+[DMGJ]
+Good_Name=Mario Artist Polygon Studio (J)
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[KEN%20GRIFFEY%20SLUGFEST]
+Good_Name=Ken Griffey Jr.'s Slugfest
+frameBufferEmulation\fbInfoDisabled=0
+
+[KIRBY64]
+Good_Name=Kirby 64 - The Crystal Shards (E)(J)(U)
+graphics2D\enableNativeResTexrects=1
+
+[MARIOGOLF64]
+Good_Name=Mario Golf (E)(J)(U)
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[MARIOKART64]
+Good_Name=Mario Kart 64 (E)(J)(U)
+graphics2D\enableNativeResTexrects=1
+graphics2D\enableTexCoordBounds=1
+
+[MARIO%20STORY]
+Good_Name=Mario Story (J)
+frameBufferEmulation\copyToRDRAM=1
+
+[MEGA%20MAN%2064]
+Good_Name=Mega Man 64 (U)
+graphics2D\correctTexrectCoords=2
+
+[MEGAMAN%2064]
+Good_Name=Mega Man 64 (Proto)
+graphics2D\correctTexrectCoords=2
+
+[MLB%20FEATURING%20K%20G%20JR]
+Good_Name=Major League Baseball Featuring Ken Griffey Jr.
+frameBufferEmulation\fbInfoDisabled=0
+
+[MYSTICAL%20NINJA2%20SG]
+Good_Name=Mystical Ninja 2 Starring Goemon (E)
+graphics2D\enableNativeResTexrects=1
+
+[NASCAR%202000]
+Good_Name=NASCAR 2000 (U)
+frameBufferEmulation\copyToRDRAM=1
+
+[NASCAR%2099]
+Good_Name=NASCAR 99 (U)
+frameBufferEmulation\copyToRDRAM=1
+
+[NUD-DMPJ-JPN_convert]
+Good_Name=Mario Paint Studio (cart hack)
+frameBufferEmulation\copyFromRDRAM=1
+
+[NUD-DMTJ-JPN_convert]
+Good_Name=Mario Artist Talent Studio (cart hack)
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[OGREBATTLE64]
+Good_Name=Ogre Battle 64 - Person of Lordly Caliber (U)
+graphics2D\enableTexCoordBounds=1
+
+[OLYMPIC%20HOCKEY]
+frameBufferEmulation\bufferSwapMode=1
+
+[PAPER%20MARIO]
+Good_Name=Paper Mario (E)(U)
+frameBufferEmulation\copyToRDRAM=1
+graphics2D\enableTexCoordBounds=1
+
+[PENNY%20RACERS]
+Good_Name=Penny Racers (E)(U)
+frameBufferEmulation\copyToRDRAM=0
+
+[PERFECT%20STRIKER]
+Good_Name=Jikkyou J.League Perfect Striker (J)
+frameBufferEmulation\N64DepthCompare=1
+
+[POKEMON%20SNAP]
+Good_Name=Pokemon Snap (U)
+generalEmulation\rdramImageDitheringMode=1
+frameBufferEmulation\copyAuxToRDRAM=1
+frameBufferEmulation\copyToRDRAM=1
+frameBufferEmulation\fbInfoDisabled=0
+
+[POKEMON%20STADIUM]
+Good_Name=Pokemon Stadium (U)
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[POKEMON%20STADIUM%202]
+Good_Name=Pokemon Stadium 2 (E)(F)(G)(I)(J)(S)(U)
+frameBufferEmulation\copyToRDRAM=0
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[POKEMON%20STADIUM%20G%26S]
+Good_Name=Pokemon Stadium Kin Gin (J)
+frameBufferEmulation\copyToRDRAM=0
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[PUZZLE%20LEAGUE%20N64]
+Good_Name=Pokemon Puzzle League (E)(F)(G)(U)
+texture\enableHalosRemoval=1
+
+[RAT%20ATTACK]
+Good_Name=Rat Attack
+frameBufferEmulation\fbInfoDisabled=0
+
+[RESIDENT%20EVIL%20II]
+frameBufferEmulation\copyFromRDRAM=1
+frameBufferEmulation\copyToRDRAM=0
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[ROCKMAN%20DASH]
+Good_Name=Rockman Dash - Hagane no Boukenshin (J)
+graphics2D\correctTexrectCoords=2
+
+[RUSH%202]
+frameBufferEmulation\bufferSwapMode=1
+graphics2D\correctTexrectCoords=2
+
+[SAN%20FRANCISCO%20RUSH]
+Good_Name=San Francisco Rush Extreme Racing (U)
+frameBufferEmulation\bufferSwapMode=1
+graphics2D\enableNativeResTexrects=2
+
+[S.F.RUSH]
+Good_Name=San Francisco Rush Extreme Racing (E)
+frameBufferEmulation\bufferSwapMode=1
+graphics2D\enableNativeResTexrects=2
+
+[S.F.%20RUSH]
+Good_Name=San Francisco Rush Extreme Racing (U)
+frameBufferEmulation\bufferSwapMode=1
+graphics2D\enableNativeResTexrects=2
+
+[SHADOWMAN]
+Good_Name=Shadow Man (B)(E)(F)(G)(U)
+frameBufferEmulation\copyDepthToRDRAM=0
+
+[SPACE%20INVADERS]
+Good_Name=Space Invaders (U)
+frameBufferEmulation\copyToRDRAM=0
+
+[STAR%20TWINS]
+; See Jet Force Gemini for notes
+Good_Name=Star Twins (J)
+frameBufferEmulation\fbInfoDisabled=0
+frameBufferEmulation\copyAuxToRDRAM=1
+
+[TEST]
+Good_Name=Mario Artist Paint Studio (J) (1999-02-11 Prototype) (64DD)
+frameBufferEmulation\copyAuxToRDRAM=1
+frameBufferEmulation\copyFromRDRAM=1
+generalEmulation\rdramImageDitheringMode=0
+
+[TETRISPHERE]
+Good_Name=Tetrisphere (U)
+generalEmulation\correctTexrectCoords=2
+
+[TIGGER%27S%20HONEY%20HUNT]
+Good_Name=Tiggers Honey Hunt (E)(U)
+frameBufferEmulation\N64DepthCompare=1
+
+[TONIC%20TROUBLE]
+Good_Name=Tonic Trouble (E)(U)
+frameBufferEmulation\copyToRDRAM=1
+
+[TG%20RALLY%202]
+frameBufferEmulation\copyToRDRAM=1
+
+[TOP%20GEAR%20RALLY%202]
+frameBufferEmulation\copyToRDRAM=1
+
+[TUROK_DINOSAUR_HUNTE]
+Good_Name=Turok - Dinosaur Hunter (E)(G)(U)(J)
+frameBufferEmulation\copyDepthToRDRAM=1
+
+[W.G.%203DHOCKEY]
+frameBufferEmulation\bufferSwapMode=1
+
+[MARIOPARTY3]
+frameBufferEmulation\N64DepthCompare=1
\ No newline at end of file
diff --git a/Source/Core/Core/CMakeLists.txt b/Source/Core/Core/CMakeLists.txt
index 4063e01562..f2f3df019b 100644
--- a/Source/Core/Core/CMakeLists.txt
+++ b/Source/Core/Core/CMakeLists.txt
@@ -404,6 +404,10 @@ add_library(core
IOS/WFS/WFSSRV.h
LibusbUtils.cpp
LibusbUtils.h
+ MarioPartyNetplay/Discord.cpp
+ MarioPartyNetplay/Discord.h
+ MarioPartyNetplay/Gamestate.cpp
+ MarioPartyNetplay/Gamestate.h
MemTools.cpp
MemTools.h
Movie.cpp
diff --git a/Source/Core/DolphinQt/DolphinQt.vcxproj b/Source/Core/DolphinQt/DolphinQt.vcxproj
index 0659189f9e..e675395aa2 100644
--- a/Source/Core/DolphinQt/DolphinQt.vcxproj
+++ b/Source/Core/DolphinQt/DolphinQt.vcxproj
@@ -17,6 +17,12 @@
+
+ Dolphin-MPN
+
+
+ Dolphin-MPN
+
@@ -401,7 +407,7 @@
-
+
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
index 321f9501d4..29f010940e 100644
--- a/Source/Core/DolphinQt/MainWindow.cpp
+++ b/Source/Core/DolphinQt/MainWindow.cpp
@@ -944,6 +944,110 @@ bool MainWindow::RequestStop()
return true;
}
+bool MainWindow::RequestStopNetplay()
+{
+ if (!Core::IsRunning())
+ {
+ Core::QueueHostJob([this] { OnStopComplete(); }, true);
+ return true;
+ }
+
+ const bool rendered_widget_was_active =
+ m_render_widget->isActiveWindow() && !m_render_widget->isFullScreen();
+ QWidget* confirm_parent = (!m_rendering_to_main && rendered_widget_was_active) ?
+ m_render_widget :
+ static_cast(this);
+ const bool was_cursor_locked = m_render_widget->IsCursorLocked();
+
+ if (!m_render_widget->isFullScreen())
+ m_render_widget_geometry = m_render_widget->saveGeometry();
+ else
+ FullScreen();
+
+ if (Config::Get(Config::MAIN_CONFIRM_ON_STOP))
+ {
+ if (std::exchange(m_stop_confirm_showing, true))
+ return true;
+
+ Common::ScopeGuard confirm_lock([this] { m_stop_confirm_showing = false; });
+
+ const Core::State state = Core::GetState();
+
+ // Only pause the game, if NetPlay is not running
+ bool pause = !Settings::Instance().GetNetPlayClient();
+
+ if (pause)
+ Core::SetState(Core::State::Paused);
+
+ if (rendered_widget_was_active)
+ {
+ // We have to do this before creating the message box, otherwise we might receive the window
+ // activation event before we know we need to lock the cursor again.
+ m_render_widget->SetCursorLockedOnNextActivation(was_cursor_locked);
+ }
+
+ // This is to avoid any "race conditions" between the "Window Activate" message and the
+ // message box returning, which could break cursor locking depending on the order
+ m_render_widget->SetWaitingForMessageBox(true);
+ auto confirm = ModalMessageBox::question(
+ confirm_parent, tr("Quitter!"),
+ m_stop_requested ? tr("A user closed down their game from the netplay lobby. "
+ "This could the Netplay session has ended due to someone ragequitting! "
+ "Do you want to stop the current emulation?") :
+ tr("A user closed down their game from the netplay lobby. "
+ "This could the Netplay session has ended due to someone ragequitting"
+ "Do you want to stop the current emulation?"),
+ QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton, Qt::ApplicationModal);
+
+ // If a user confirmed stopping the emulation, we do not capture the cursor again,
+ // even if the render widget will stay alive for a while.
+ // If a used rejected stopping the emulation, we instead capture the cursor again,
+ // and let them continue playing as if nothing had happened
+ // (assuming cursor locking is on).
+ if (confirm != QMessageBox::Yes)
+ {
+ m_render_widget->SetWaitingForMessageBox(false);
+
+ if (pause)
+ Core::SetState(state);
+
+ return false;
+ }
+ else
+ {
+ m_render_widget->SetCursorLockedOnNextActivation(false);
+ // This needs to be after SetCursorLockedOnNextActivation(false) as it depends on it
+ m_render_widget->SetWaitingForMessageBox(false);
+ }
+ }
+
+ OnStopRecording();
+ // TODO: Add Debugger shutdown
+
+ if (!m_stop_requested && UICommon::TriggerSTMPowerEvent())
+ {
+ m_stop_requested = true;
+
+ // Unpause because gracefully shutting down needs the game to actually request a shutdown.
+ // TODO: Do not unpause in debug mode to allow debugging until the complete shutdown.
+ if (Core::GetState() == Core::State::Paused)
+ Core::SetState(Core::State::Running);
+
+ // Tell NetPlay about the power event
+ if (NetPlay::IsNetPlayRunning())
+ NetPlay::SendPowerButtonEvent();
+
+ return true;
+ }
+
+ ForceStop();
+#ifdef Q_OS_WIN
+ // Allow windows to idle or turn off display again
+ SetThreadExecutionState(ES_CONTINUOUS);
+#endif
+ return true;
+}
+
void MainWindow::ForceStop()
{
Core::Stop();
@@ -1392,7 +1496,7 @@ void MainWindow::NetPlayInit()
m_netplay_discord = new DiscordHandler(this);
#endif
- connect(m_netplay_dialog, &NetPlayDialog::Stop, this, &MainWindow::RequestStop);
+ connect(m_netplay_dialog, &NetPlayDialog::Stop, this, &MainWindow::RequestStopNetplay);
connect(m_netplay_dialog, &NetPlayDialog::rejected, this, &MainWindow::NetPlayQuit);
connect(m_netplay_setup_dialog, &NetPlaySetupDialog::Join, this, &MainWindow::NetPlayJoin);
connect(m_netplay_setup_dialog, &NetPlaySetupDialog::Host, this, &MainWindow::NetPlayHost);
diff --git a/Source/Core/DolphinQt/MainWindow.h b/Source/Core/DolphinQt/MainWindow.h
index 6e53f2df10..d81b25baa3 100644
--- a/Source/Core/DolphinQt/MainWindow.h
+++ b/Source/Core/DolphinQt/MainWindow.h
@@ -87,6 +87,7 @@ private:
// May ask for confirmation. Returns whether or not it actually stopped.
bool RequestStop();
+ bool RequestStopNetplay();
void ForceStop();
void Reset();
void FrameAdvance();
diff --git a/Source/Core/DolphinQt/NetPlay/NetPlaySetupDialog.cpp b/Source/Core/DolphinQt/NetPlay/NetPlaySetupDialog.cpp
index d0af4c0e1c..2c718cc517 100644
--- a/Source/Core/DolphinQt/NetPlay/NetPlaySetupDialog.cpp
+++ b/Source/Core/DolphinQt/NetPlay/NetPlaySetupDialog.cpp
@@ -507,12 +507,11 @@ void NetPlaySetupDialog::UpdateListBrowser()
});
auto* hor_header = m_table_widget->horizontalHeader();
-
+ hor_header->setSectionResizeMode(0, QHeaderView::Stretch);
hor_header->setSectionResizeMode(0, QHeaderView::Stretch);
hor_header->setSectionResizeMode(1, QHeaderView::Stretch);
- hor_header->setSectionResizeMode(2, QHeaderView::Stretch);
+ hor_header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
hor_header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
- hor_header->setSectionResizeMode(4, QHeaderView::ResizeToContents);
hor_header->setHighlightSections(false);
m_table_widget->setRowCount(session_count);
@@ -531,10 +530,10 @@ void NetPlaySetupDialog::UpdateListBrowser()
for (const auto& item : {name, game_id, player_count, in_game})
item->setFlags(enabled ? Qt::ItemIsEnabled | Qt::ItemIsSelectable : Qt::NoItemFlags);
- m_table_widget->setItem(i, 1, name);
- m_table_widget->setItem(i, 2, game_id);
- m_table_widget->setItem(i, 3, player_count);
- m_table_widget->setItem(i, 4, in_game);
+ m_table_widget->setItem(i, 0, name);
+ m_table_widget->setItem(i, 1, game_id);
+ m_table_widget->setItem(i, 2, player_count);
+ m_table_widget->setItem(i, 3, in_game);
}