This page will install multiple Mupen64Plus components and plugins, as well as a command-line frontend as a bare necessity. If you do not wish to install a graphical frontend, this page will provide all the parts of Mupen64Plus you will need.
This may take a while to build. Feel free to do something else while this is building.
Download (HTTP): https://github.com/mupen64plus/
FreeType2, GLU-9.0.3, libpng, OpenGL (libglvnd or Mesa; only the normal installation is required for either), SDL2, and Vulkan-Loader
hicolor-icon-theme,
libsamplerate, minizip from zlib-1.3.1 (for
.zip
extraction support), NASM,
opencv,
SDL2_net-2.2.0, and Speex
First create a list of files to be downloaded:
cat > m64plus-list << "EOF"
mupen64plus-core/releases/download/2.6.0/mupen64plus-core-src-2.6.0.tar.gz
mupen64plus-input-sdl/releases/download/2.6.0/mupen64plus-input-sdl-src-2.6.0.tar.gz
mupen64plus-audio-sdl/releases/download/2.6.0/mupen64plus-audio-sdl-src-2.6.0.tar.gz
mupen64plus-rsp-hle/releases/download/2.6.0/mupen64plus-rsp-hle-src-2.6.0.tar.gz
mupen64plus-video-rice/releases/download/2.6.0/mupen64plus-video-rice-src-2.6.0.tar.gz
mupen64plus-ui-console/releases/download/2.6.0/mupen64plus-ui-console-src-2.6.0.tar.gz
EOF
To download the needed files using Wget, use the following commands:
mkdir m64plus && cd m64plus && grep -v '^#' ../m64plus-list | wget -i- -c \ -B https://github.com/mupen64plus/ && wget https://github.com/gonetz/GLideN64/archive/575f3814e47851b7f86bdb61829b6abac11a38be.tar.gz \ -O GLideN64-575f3814e47851b7f86bdb61829b6abac11a38be.tar.gz
When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:
Run the entire script as the root user (not recommended).
Use the sudo command from the sudo package.
Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.
One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.
as_root() { if [ $EUID = 0 ]; then $* elif [ -x /usr/bin/sudo ]; then sudo $* else su -c \\"$*\\" fi } export -f as_root
Next, start a subshell that will exit on error:
bash -e
Install all the packages by running the following commands:
for package in $(grep -v '^#' ../m64plus-list) do package=$(basename "$package") packagedir=${package%.tar.?z*} echo "Building $packagedir" tar -xf $package pushd "$packagedir"/projects/unix make PREFIX=/usr NETPLAY=1 all as_root make PREFIX=/usr install popd rm -rf $packagedir as_root /sbin/ldconfig done tar -xf GLideN64-575f3814e47851b7f86bdb61829b6abac11a38be.tar.gz pushd GLideN64-575f3814e47851b7f86bdb61829b6abac11a38be/projects/cmake cmake -D CMAKE_INSTALL_PREFIX=/usr \ -D GL_PROFILE=On \ -D MUPENPLUSAPI=On \ -D USE_SYSTEM_LIBS=On \ -G Ninja ../../src ninja as_root ninja install as_root /sbin/ldconfig popd
Finally, exit the shell that was started earlier:
exit
NETPLAY=1
: This enables
netplay support which allows you to play with other people online.
Omit this if you have not installed SDL2_net-2.2.0.
-D GL_PROFILE=On
: This
turns on the OpenGL profiling in the GLideN64 plugin.
-D MUPENPLUSAPI=On
: This
parameter forces the build system to build the Mupen64Plus version of the GLideN64 plugin.
-D USE_SYSTEM_LIBS=On
: This
parameter forces the build system to use the system-installed
dependencies of the GLideN64
plugin.
From this point, you have a couple of options on how to interact with Mupen64Plus. You can either use mupen64plus, which is the Mupen64Plus command-line frontend, or you can use a graphical frontend such as mupen64plus-ui-python. Graphical frontends generally have many bells and whistles on top of being more user friendly. There are also Mupen64Plus launchers, which instead of using the system-installed Mupen64Plus components, they use their own in-house components/forks. A good launcher is RMG, well-known for being easy to use and set up, but has more and harsher dependencies. The mupen64plus application can work just as well, however. The rest of this section will cover the mupen64plus program.
You can choose which plugins to use, and there are various plugin
types. Generally, the plugin name you will pass will be
mupen64plus-
in <TYPE>
-<NAME>
mupen64plus-
. <TYPE>
-<NAME>
.so<TYPE>
can either be
audio
, input
, rsp
, or
video
.
For audio
, pass --audio mupen64plus-audio-
.
<NAME>
For input
, pass --input mupen64plus-input-
.
<NAME>
For rsp
, pass --rsp mupen64plus-rsp-
.
<NAME>
For video
, pass --gfx mupen64plus-video-
.
<NAME>
You can find the list of installed plugins in “Contents”.
After passing the plugins you want once, the program will make those plugins the default and will be used for every run of the program after that. It is recommended to pass what you want to the program on the first run, quit out of the program, configure the plugins, then start emulating the ROMs you wish.
If you plan to only use mupen64plus, the command-line
Mupen64Plus frontend, you will
have to configure the options manually. You can generate a
default configuration file from simply running mupen64plus once. It will stack
all the default configuation files from /usr/share/mupen64plus
into ~/.config/mupen64plus/mupen64plus.cfg
. It will
automatically stack configuration files from the plugins it
chooses if you have not passed which plugins you want to use to
mupen64plus. If you
want to use a different plugin, pass the plugin name to the
command, then the program will dump the new defaults to the
configuration file if the plugin section is not already there.
Mapping your controller is the most difficult part but becomes a
lot easier if you use jstest-sdl-710687. First, connect your
controller and invoke jstest-sdl
-l
. You should see a controller listed, perhaps multiple
entries. In the case that there are two entries for one
controller, and one of them at the end says (IMU)
, you will want to choose the
controller that doesn't list (IMU)
at the end of the name. Each
listing will have a joystick number. If you only have one
controller connected, it should be 0
. Once you have decided which JS number
you are going to test, run jstest-sdl -t
. You should be
brought up to a screen with axis, buttons, hats, and balls
listings, and depending on the quality of the sticks, the axis
listings may already be moving slightly.
<JS>
Now go ahead and edit ~/.config/mupen64plus/mupen64plus.cfg
in the
[Input-SDL-Control1]
section
for the first controller. Ensure mode
is equal to 0
so that you can bind the mappings
properly. Now edit each field to that which matches your
controller's input scheme that appears in jstest-sdl. Once you feel
confident in the mappings, save the file and test the inputs by
running a ROM. If all went well, the mappings should work. You
may have to edit the deadzones, but hopefully the default should
work for you.
If you aim to use a graphical frontend, the manual configuration will hopefully not be necessary. Most graphical frontends will handle the configuration for you through the GUI.