my configurations for n64 in orangepi 3b
-
I have made some modifications to the emulator script and to the profiles found in "emulators" within the configurations folder. I have managed to have "Rice" and "Glide64" available with frameskip and the possibility of toggling that option depending on the games that need it or not.
/home/orangepi/RetroPie-Setup/scriptmodules/emulators/mupen64plus.sh:
#!/usr/bin/env bash # This file is part of The RetroPie Project # # The RetroPie Project is the legal property of its developers, whose names are # too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source. # # See the LICENSE.md file at the top-level directory of this distribution and # at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md # rp_module_id="mupen64plus" rp_module_desc="N64 emulator MUPEN64Plus" rp_module_help="ROM Extensions: .z64 .n64 .v64\n\nCopy your N64 roms to $romdir/n64" rp_module_licence="GPL2 https://raw.githubusercontent.com/mupen64plus/mupen64plus-core/master/LICENSES" rp_module_repo=":_pkg_info_mupen64plus" rp_module_section="main" rp_module_flags="sdl2" function depends_mupen64plus() { local depends=(cmake libsamplerate0-dev libspeexdsp-dev libsdl2-dev libpng-dev libfreetype6-dev fonts-freefont-ttf libboost-filesystem-dev) isPlatform "rpi" && depends+=(libraspberrypi-bin libraspberrypi-dev) isPlatform "mesa" && depends+=(libgles2-mesa-dev) isPlatform "gl" && depends+=(libglew-dev libglu1-mesa-dev) isPlatform "x86" && depends+=(nasm) isPlatform "vero4k" && depends+=(vero3-userland-dev-osmc) # was a vero4k only line - I think it's not needed or can use a smaller subset of boost isPlatform "osmc" && depends+=(libboost-all-dev) getDepends "${depends[@]}" } function _get_repos_mupen64plus() { local repos=( 'mupen64plus mupen64plus-core master' 'mupen64plus mupen64plus-ui-console master' 'mupen64plus mupen64plus-audio-sdl master' 'mupen64plus mupen64plus-input-sdl master' 'mupen64plus mupen64plus-rsp-hle master' ) if isPlatform "videocore" && isPlatform "32bit"; then repos+=('gizmo98 mupen64plus-audio-omx master') fi if isPlatform "gles"; then ! isPlatform "rpi" && repos+=('mupen64plus mupen64plus-video-glide64mk2 master') ! isPlatform "rpi" && repos+=('mupen64plus mupen64plus-video-rice master') if isPlatform "32bit"; then repos+=('ricrpi mupen64plus-video-gles2rice pandora-backport') repos+=('ricrpi mupen64plus-video-gles2n64 master') fi fi if isPlatform "gl"; then repos+=( 'mupen64plus mupen64plus-video-glide64mk2 master' 'mupen64plus mupen64plus-video-rice master' 'mupen64plus mupen64plus-rsp-cxd4 master' 'mupen64plus mupen64plus-rsp-z64 master' ) fi local commit="" # GLideN64 now requires cmake 3.9 so use an older commit as a workaround for systems with older cmake (pre buster). # Test using "apt-cache madison" as this code could be called when cmake isn't yet installed but correct version # is available - eg via update check with builder module which removes dependencies after building. # Multiple versions may be available, so grab the versions via cut, sort by version, take the latest from the top # and pipe to xargs to strip whitespace local cmake_ver=$(apt-cache madison cmake | cut -d\| -f2 | sort --version-sort | head -1 | xargs) if compareVersions "$cmake_ver" lt 3.9; then commit="8a9d52b41b33d853445f0779dd2b9f5ec4ecdda8" fi repos+=("gonetz GLideN64 master 5bbf55df8c61ab86b5e41a97906bc99ce9b00a36") local repo for repo in "${repos[@]}"; do echo "$repo" done } function _pkg_info_mupen64plus() { local mode="$1" local repo case "$mode" in get) local hashes=() local hash local date local newest_date while read repo; do repo=($repo) date=$(git -C "$md_build/${repo[1]}" log -1 --format=%aI) hash="$(git -C "$md_build/${repo[1]}" log -1 --format=%H)" hashes+=("$hash") if rp_dateIsNewer "$newest_date" "$date"; then newest_date="$date" fi done < <(_get_repos_mupen64plus) # store an md5sum of the various last commit hashes to be used to check for changes local hash="$(echo "${hashes[@]}" | md5sum | cut -d" " -f1)" echo "local pkg_repo_date=\"$newest_date\"" echo "local pkg_repo_extra=\"$hash\"" ;; newer) local hashes=() local hash while read repo; do repo=($repo) # if we have any repos set to a specific git hash (eg GLideN64 then we use that) otherwise check if [[ -n "${repo[3]}" ]]; then hash="${repo[3]}" else if ! hash="$(rp_getRemoteRepoHash git https://github.com/${repo[0]}/${repo[1]} ${repo[2]})"; then __ERRMSGS+=("$hash") return 3 fi fi hashes+=("$hash") done < <(_get_repos_mupen64plus) # store an md5sum of the various last commit hashes to be used to check for changes local hash="$(echo "${hashes[@]}" | md5sum | cut -d" " -f1)" if [[ "$hash" != "$pkg_repo_extra" ]]; then return 0 fi return 1 ;; check) local ret=0 while read repo; do repo=($repo) out=$(rp_getRemoteRepoHash git https://github.com/${repo[0]}/${repo[1]} ${repo[2]}) if [[ -z "$out" ]]; then printMsgs "console" "$id repository failed - https://github.com/${repo[0]}/${repo[1]} ${repo[2]}" ret=1 fi done < <(_get_repos_mupen64plus) return "$ret" ;; esac } function sources_mupen64plus() { local commit local repo while read repo; do repo=($repo) gitPullOrClone "$md_build/${repo[1]}" https://github.com/${repo[0]}/${repo[1]} ${repo[2]} ${repo[3]} done < <(_get_repos_mupen64plus) if isPlatform "videocore"; then # workaround for shader cache crash issue on Raspbian stretch. See: https://github.com/gonetz/GLideN64/issues/1665 applyPatch "$md_data/0001-GLideN64-use-emplace.patch" fi local config_version=$(grep -oP '(?<=CONFIG_VERSION_CURRENT ).+?(?=U)' GLideN64/src/Config.h) echo "$config_version" > "$md_build/GLideN64_config_version.ini" } function build_mupen64plus() { rpSwap on 2048 local dir local params=() for dir in *; do if [[ -f "$dir/projects/unix/Makefile" ]]; then params=() isPlatform "rpi1" && params+=("VFP=1" "VFP_HARD=1") isPlatform "videocore" [[ "$dir" == "mupen64plus-audio-omx" ]] && params+=("VC=1") if isPlatform "mesa" isPlatform "mali" isPlatform "armbian"; then params+=("USE_GLES=1") fi isPlatform "neon" && params+=("NEON=1") isPlatform "x11" && params+=("USE_FRAMESKIPPER=1") isPlatform "x86" && params+=("SSE=SSE2") isPlatform "armv6" && params+=("HOST_CPU=armv6") isPlatform "armv7" && params+=("HOST_CPU=armv7") isPlatform "aarch64" && params+=("HOST_CPU=aarch64") isPlatform "armbian" && params+=("USE_FRAMESKIPPER=1") [[ "$dir" == "mupen64plus-ui-console" ]] && params+=("COREDIR=$md_inst/lib/" "PLUGINDIR=$md_inst/lib/mupen64plus/") make -C "$dir/projects/unix" "${params[@]}" clean # temporarily disable distcc due to segfaults with cross compiler and lto DISTCC_HOSTS="" make -C "$dir/projects/unix" all "${params[@]}" OPTFLAGS="$CFLAGS -O3 -flto" fi done # build GLideN64 "$md_build/GLideN64/src/getRevision.sh" pushd "$md_build/GLideN64/projects/cmake" params=("-DMUPENPLUSAPI=On" "-DVEC4_OPT=On" "-DUSE_SYSTEM_LIBS=On") isPlatform "neon" && params+=("-DNEON_OPT=On") isPlatform "mesa" && params+=("-DMESA=On" "-DEGL=On") isPlatform "vero4k" && params+=("-DVERO4K=On") isPlatform "armv8" && params+=("-DCRC_ARMV8=On") isPlatform "mali" && params+=("-DVERO4K=On" "-DCRC_OPT=On" "-DEGL=On") isPlatform "x86" && params+=("-DCRC_OPT=On") cmake "${params[@]}" ../../src/ make popd rpSwap off md_ret_require=( 'mupen64plus-ui-console/projects/unix/mupen64plus' 'mupen64plus-core/projects/unix/libmupen64plus.so.2.0.0' 'mupen64plus-audio-sdl/projects/unix/mupen64plus-audio-sdl.so' 'mupen64plus-input-sdl/projects/unix/mupen64plus-input-sdl.so' 'mupen64plus-rsp-hle/projects/unix/mupen64plus-rsp-hle.so' 'GLideN64/projects/cmake/plugin/Release/mupen64plus-video-GLideN64.so' ) if isPlatform "videocore" && ! isPlatform " 64bit"; then md_ret_require+=('mupen64plus-audio-omx/projects/unix/mupen64plus-audio-omx.so') fi if isPlatform "gles"; then ! isPlatform "rpi" && md_ret_require+=('mupen64plus-video-glide64mk2/projects/unix/mupen64plus-video-glide64mk2.so') ! isPlatform "rpi" && md_ret_require+=('mupen64plus-video-rice/projects/unix/mupen64plus-video-rice.so') if isPlatform "32bit"; then md_ret_require+=('mupen64plus-video-gles2rice/projects/unix/mupen64plus-video-rice.so') md_ret_require+=('mupen64plus-video-gles2n64/projects/unix/mupen64plus-video-n64.so') fi fi if isPlatform "gl"; then md_ret_require+=( 'mupen64plus-video-glide64mk2/projects/unix/mupen64plus-video-glide64mk2.so' 'mupen64plus-rsp-z64/projects/unix/mupen64plus-rsp-z64.so' ) if isPlatform "x86"; then md_ret_require+=('mupen64plus-rsp-cxd4/projects/unix/mupen64plus-rsp-cxd4-sse2.so') else md_ret_require+=('mupen64plus-rsp-cxd4/projects/unix/mupen64plus-rsp-cxd4.so') fi fi } function install_mupen64plus() { for source in *; do if [[ -f "$source/projects/unix/Makefile" ]]; then # optflags is needed due to the fact the core seems to rebuild 2 files and relink during install stage most likely due to a buggy makefile local params=() isPlatform "videocore" [[ "$dir" == "mupen64plus-audio-omx" ]] && params+=("VC=1") if isPlatform "mesa" isPlatform "mali" isPlatform "armbian"; then params+=("USE_GLES=1") fi isPlatform "neon" && params+=("NEON=1") isPlatform "x11" && params+=("OSD=1" "PIE=1") René, [7/11/23 20:51] isPlatform "x86" && params+=("SSE=SSE2") isPlatform "armv6" && params+=("HOST_CPU=armv6") isPlatform "armv7" && params+=("HOST_CPU=armv7") isPlatform "aarch64" && params+=("HOST_CPU=aarch64") isPlatform "x86" && params+=("SSE=SSE2") isPlatform "armbian" && params+=("USE_FRAMESKIPPER=1") make -C "$source/projects/unix" PREFIX="$md_inst" OPTFLAGS="$CFLAGS -O3 -flto" "${params[@]}" install fi done cp "$md_build/GLideN64/ini/GLideN64.custom.ini" "$md_inst/share/mupen64plus/" cp "$md_build/GLideN64/projects/cmake/plugin/Release/mupen64plus-video-GLideN64.so" "$md_inst/lib/mupen64plus/" cp "$md_build/GLideN64_config_version.ini" "$md_inst/share/mupen64plus/" # remove default InputAutoConfig.ini. inputconfigscript writes a clean file rm -f "$md_inst/share/mupen64plus/InputAutoCfg.ini" } function configure_mupen64plus() { local res local resolutions=("320x240" "640x480") isPlatform "kms" && res="%XRES%x%YRES%" if isPlatform "rpi"; then # kms needs to run at full screen as it doesn't benefit from our SDL scaling hint if isPlatform "mesa"; then addEmulator 0 "${md_id}-GLideN64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM% $res 0 --set Video-GLideN64[UseNativeResolutionFactor]\=1" addEmulator 0 "${md_id}-GLideN64-highres" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM% $res 0 --set Video-GLideN64[UseNativeResolutionFactor]\=2" addEmulator 0 "${md_id}-gles2n64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-n64 %ROM%" if isPlatform "32bit"; then addEmulator 0 "${md_id}-gles2rice" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-rice %ROM% $res" fi else for res in "${resolutions[@]}"; do local name="" local nativeResFactor=1 if [[ "$res" == "640x480" ]]; then name="-highres" nativeResFactor=2 fi addEmulator 0 "${md_id}-GLideN64$name" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM% $res 0 --set Video-GLideN64[UseNativeResolutionFactor]\=$nativeResFactor" addEmulator 0 "${md_id}-gles2rice$name" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-rice %ROM% $res" done addEmulator 1 "${md_id}-auto" "n64" "$md_inst/bin/mupen64plus.sh AUTO %ROM%" fi addEmulator 0 "${md_id}-gles2n64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-n64 %ROM%" elif isPlatform "mali"; then addEmulator 1 "${md_id}-gles2n64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-n64 %ROM%" addEmulator 0 "${md_id}-GLideN64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM%" addEmulator 0 "${md_id}-glide64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM%" addEmulator 0 "${md_id}-gles2rice" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-rice %ROM%" addEmulator 0 "${md_id}-auto" "n64" "$md_inst/bin/mupen64plus.sh AUTO %ROM%" else addEmulator 0 "${md_id}-GLideN64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM% $res" addEmulator 1 "${md_id}-glide64" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% $res" addEmulator 0 "${md_id}-rice" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-rice %ROM% $res" if isPlatform "x86"; then ! isPlatform "kms" && res="640x480" addEmulator 0 "${md_id}-GLideN64-LLE" "n64" "$md_inst/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM% $res mupen64plus-rsp-cxd4-sse2" fi fi addSystem "n64" mkRomDir "n64" moveConfigDir "$home/.local/share/mupen64plus" "$md_conf_root/n64/mupen64plus" [[ "$md_mode" == "remove" ]] && return René, [7/11/23 20:51] # copy hotkey remapping start script cp "$md_data/mupen64plus.sh" "$md_inst/bin/" chmod +x "$md_inst/bin/mupen64plus.sh" mkUserDir "$md_conf_root/n64/" # Copy config files cp -v "$md_inst/share/mupen64plus/"{*.ini,font.ttf} "$md_conf_root/n64/" isPlatform "rpi" && cp -v "$md_inst/share/mupen64plus/"*.conf "$md_conf_root/n64/" local config="$md_conf_root/n64/mupen64plus.cfg" local cmd="$md_inst/bin/mupen64plus --configdir $md_conf_root/n64 --datadir $md_conf_root/n64" # if the user has an existing mupen64plus config we back it up, generate a new configuration # copy that to rp-dist and put the original config back again. We then make any ini changes # on the rp-dist file. This preserves any user configs from modification and allows us to have # a default config for reference if [[ -f "$config" ]]; then mv "$config" "$config.user" su "$user" -c "$cmd" mv "$config" "$config.rp-dist" mv "$config.user" "$config" config+=".rp-dist" else su "$user" -c "$cmd" fi # RPI main/GLideN64 settings if isPlatform "rpi"; then iniConfig " = " "" "$config" # VSync is mandatory for good performance on KMS if isPlatform "kms"; then if ! grep -q "\[Video-General\]" "$config"; then echo "[Video-General]" >> "$config" fi iniSet "VerticalSync" "True" fi # Create GlideN64 section in .cfg if ! grep -q "\[Video-GLideN64\]" "$config"; then echo "[Video-GLideN64]" >> "$config" fi # Settings version. Don't touch it. iniSet "configVersion" "17" # Bilinear filtering mode (0=N64 3point, 1=standard) iniSet "bilinearMode" "1" iniSet "EnableFBEmulation" "True" # Use native res iniSet "UseNativeResolutionFactor" "1" # Enable legacy blending iniSet "EnableLegacyBlending" "True" # Enable Threaded GL calls iniSet "ThreadedVideo" "True" # Swap frame buffers On buffer update (most performant) iniSet "BufferSwapMode" "2" # Disable hybrid upscaling filter (needs better GPU) iniSet "EnableHybridFilter" "False" # Use fast but less accurate shaders. Can help with low-end GPUs. iniSet "EnableInaccurateTextureCoordinates" "True" if isPlatform "videocore"; then # Disable gles2n64 autores feature and use dispmanx upscaling iniConfig "=" "" "$md_conf_root/n64/gles2n64.conf" iniSet "auto resolution" "0" setAutoConf mupen64plus_audio 1 setAutoConf mupen64plus_compatibility_check 1 elif isPlatform "mesa"; then setAutoConf mupen64plus_audio 0 setAutoConf mupen64plus_compatibility_check 0 fi else addAutoConf mupen64plus_audio 0 addAutoConf mupen64plus_compatibility_check 0 fi addAutoConf mupen64plus_hotkeys 1 addAutoConf mupen64plus_texture_packs 1 chown -R $user:$user "$md_conf_root/n64" }
/opt/retropie/configs/n64/emulators.cfg:
mupen64plus-GLideN64 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-GLideN64 %ROM% " mupen64plus-glide64 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% " default = "mupen64plus-rice" lr-mupen64plus = "/opt/retropie/emulators/retroarch/bin/retroarch -L /opt/retropie/libretrocores/lr-mupen64plus/mupen64plus_libretro.so --config /opt/retropie/configs/n64/retroarch.cfg %ROM%" mupen64plus-glide64mk2-noframeskip = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% 1920x1080 0 --set Video-Glide64mk2[autoframeskip]\=True --set Video-Glide64mk2[maxframeskip]\=0" mupen64plus-glide64mk2-frameskip-1 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% 1920x1080 0 --set Video-Glide64mk2[autoframeskip]\=False --set Video-Glide64mk2[maxframeskip]\=1" mupen64plus-glide64mk2-frameskip-2 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% 1920x1080 0 --set Video-Glide64mk2[autoframeskip]\=False --set Video-Glide64mk2[maxframeskip]\=2" mupen64plus-glide64mk2-frameskip-3 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% 1920x1080 0 --set Video-Glide64mk2[autoframeskip]\=False --set Video-Glide64mk2[maxframeskip]\=3" mupen64plus-glide64mk2-frameskip-4 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% 1920x1080 0 --set Video-Glide64mk2[autoframeskip]\=False --set Video-Glide64mk2[maxframeskip]\=4" mupen64plus-glide64mk2-frameskip-5 = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-glide64mk2 %ROM% 1920x1080 0 --set Video-Glide64mk2[autoframeskip]\=False --set Video-Glide64mk2[maxframeskip]\=5" mupen64plus-rice = "/opt/retropie/emulators/mupen64plus/bin/mupen64plus.sh mupen64plus-video-rice %ROM% "
I hope it helps you, I don't have much knowledge, but I manage to get what eventually comes to me as an idea.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.