Dolphin이란 에뮬레이터가 있습니다. 한때 시대를 풍미했던 그리고 전설의 판매량을 기록했던 닌텐도Wii의 에뮬레이터입니다.

오픈소스로 개발되고 있고 지금도 활발히 개발중입니다.

 

다만, 원 개발진들이 상당히 보수적이라 이에대한 Fork인 Ishiiruka란 변종버전도 함께 개발중입니다. 일종의 갈래죠. 

 

이 에뮬레이터는 상당한 성능과 재현성을 보여주고 있어서 많은 사람들이 애용중입니다.

 

다만, 게임기 특성상 Wii리모컨을 필요로 합니다. 그래서 이를 스마트폰으로 대체하는 UDPMote라는 것이 있었습니다. 단, 4.0버전 까지만요.

 

5.0부터는 UDPMote에 대한 개발이 발전이 없다고 없애버렸습니다. 하지만 Wiimote가 없는 사람들은 답이 없었습니다. 그래서 구버전인 4.0을 쓰거나 오픈소스라는 것에 착안하여 UDP소스코드를 다시 넣어서 돌리는 경우가 있습니다.

 

https://github.com/YellowAfterlife/Ishiiruka-but-with-UDPMote-again

 

YellowAfterlife/Ishiiruka-but-with-UDPMote-again

An adaptation of https://github.com/kevlahnota/Ishiiruka for the current version of Dolphin-Ishiiruka - YellowAfterlife/Ishiiruka-but-with-UDPMote-again

github.com

바로 이런 식으로 말이죠. 변종인 Ishiiruka에 UDPMote를 적용한 소스코드입니다. 그런데... 개발자분이 Windows만 신경쓰는 바람에 리눅스에서 빌드하는데 한참 고생했습니다.

 

우선 안드로이드 앱인 UDPMote는 https://drive.google.com/uc?export=download&id=0B6t1zFfzfaYNRHFyUzlaV3JVTk0

혹은

UDPMote_1.0.apk
0.15MB
UDPMote_1.01.apk
0.15MB

여기서 받을 수 있습니다. 사용법은 나중에 따로 찾기로 하고 지금은 리눅스에서 삽질한 내용을 기록하기 위함이니 이쪽을 먼저 하겠습니다.

 

 

우선 우분투 18.04 기준으로 CMake의 버전을 올렸어야 했습니다. 우분투18.04의 기본 CMake는 3.10인데 2020년 현재 최신 버전은 3.17입니다. 철지난 Python2가 아직도 메인이라면 그냥 쓰셔도 되지만 지금은 Python3시대죠. 

 

그래서 Python3를 우선 기본으로 바꿉니다. 터미널을 열고

 

update-alternatives --install /usr/bin/python python /usr/bin/python3 10

 

그러면 CMake의 버전이 이제 문제를 일으킵니다.

 

우선 기본 CMake를 삭제합니다.

 

sudo apt remove cmake

 

그리고https://cmake.org/download/

 

Download | CMake

Current development distribution Each night binaries are created as part of the testing process. Other than passing all of the tests in CMake, this version of CMake should not be expected to work in a production environment. It is being produced so that us

cmake.org

여기서 소스코드를 다운로드 받아서 설치해야 합니다.

cmake의 tar.gz를 다운로드 받아 압축을 풀고 압축푼곳으로 들어가 터미널에서

./configure

make

make install

 

만약 쉽게 삭제를 하고 싶으시다면 make install 대신 checkinstall을 쓰셔도 됩니다. 그러면 deb파일로 설치를 하기 때문에 apt remove cmake로 삭제가 가능합니다.

 

이제 드디어 Dolphin의 빌드를 시작해봅시다. 우선은 git이 필요하겠군요.

그냥 Dolphin에서 필요한 패키지를 다 설치합시다.

 

https://wiki.dolphin-emu.org/index.php?title=Building_Dolphin_on_Linux#16.04_LTS

 

Building Dolphin on Linux - Dolphin Emulator Wiki

Note Outdated: This has not been updated since July 2019 an no longer aligns with Dolphin's current dependencies. Users running Linux distros have to build Dolphin from source. Dolphin is compatible with x86-64 and AArch64 Linux distributions. This is a gu

wiki.dolphin-emu.org

여기에 필요한 것들이 써있군요. 그런데 16.04? 알게뭔가요. 그냥 설치합시다.

대신 CMake는 아까 위에서 설치했으니 빼고 개발버전은 WX가 같이 소스코드에 있으니 이걸 쓰랍니다.

 

그러면 필요한 패키지를 설치하는 명령어는

sudo apt install pkg-config git libao-dev libasound2-dev libavcodec-dev libavformat-dev libbluetooth-dev libenet-dev libgtk2.0-dev liblzo2-dev libminiupnpc-dev libopenal-dev libpulse-dev libreadline-dev libsfml-dev libsoil-dev libsoundtouch-dev libswscale-dev libusb-1.0-0-dev libxext-dev libxrandr-dev portaudio19-dev zlib1g-dev libudev-dev libevdev-dev "libpolarssl-dev|libmbedtls-dev" libcurl4-openssl-dev libegl1-mesa-dev libpng-dev qtbase5-private-dev

이거겠군요.

 

그리고 Wine과 각종 패키지 충돌을 경험한 뒤에 sudp apt -f 로 다시 잡았습니다. 에라이...

PPA사용할 때는 역시 패키지 충돌을 조심해야 합니다. 

 

이제 git으로 소스코드를 다운로드 받습니다.

git clone github.com/YellowAfterlife/Ishiiruka-but-with-UDPMote-again.git

 

그리고 Readme.md를 보니 

mkdir build

cd build

cmake ..

make

make install

 

이렇게 하라는군요.

 

그대로 합시다. 당연히 에러납니다.

xlocale.h가 없다네요.

locale.h를 xlocale.h로 링크 겁시다.

 

ln -s /usr/include/locale.h /usr/include/xlocale.h

 

이번에는 UDP관련 라이브러리가 없답니다. 소스코드를 보니 개발자가 Windows용으로만 수정해서 CMakeList에는 해당 파일이 없습니다.

Source/Core/Core/CMakeList.txt를 열어서 

add_library(core 안 어딘가에 

UDPTLayer.cpp

 

이렇게 한줄을 적읍시다. 그리고 UDPTLayer.cpp라는 빈파일을 하나 만듭시다.

 

그리고

Source/Core/DolphinWX/CMakeLists.txt

여기에

UDPConfigDiag.cpp

한줄을 넣어줍니다.

 

그 다음에는 

Source/Common/InputCommon/CMakeList.txt를 열고

UDPWiimote.cpp

UDPWrapper.cpp

 

두줄을 추가합시다. 이제 다시 make!

 

이번에는 wx에서 에러가 납니다. 아니!!! 내장되어 있어서 문제 없다며!!!

빌드는 되는데 include에서 문제가 일어납니다.

 

소스 루트 위치에서

 

Externals/wxWidgets3/include/wx 를 /usr/local/include로 링크를 걸어버리면 해결됩니다.

ln -s $(pwd -P)/Externals/wxWidgets3/include/wx /usr/local/include

 

이제 또 에러가 납니다. setup.h를 못 찾는 답니다.

이건 

Externals/wxWidgets3/wx 여기 있네요. 아까 링크 건 곳으로 파일들을 다 링크 겁시다.

ln -s $(pwd -P)/Externals/wxWidgets3/wx/setup.h /usr/local/include/wx/setup.h

ln -s $(pwd -P)/Externals/wxWidgets3/wx/wxgtk.h /usr/local/include/wx/wxgtk.h

 

이번에는 100%찍고 에러가 납니다.

이젠 그만 보고 싶다

마음같아서는 포기하고 싶은데 wx관련해서 레퍼런스가 없는 것 같습니다! 즉, WX를 다시 빌드해야 할 것 같네요.

 

가만보니 WX쓰는 애들이 <wx/window.h>를 include를 하나도 안 했네요. FromDIP함수가 계속 걸리는데 이게 wxWidget3.1.0부터 만들어진거랍니다. 아무래도 소스 업데이트가 덜 된듯.

 

그래서 FromDIP함수 쓰는 것들 싹다

#include <wx/window.h>

한줄 추가해줬습니다.

 

이제 좀 돌아가려나...?

 

wxWidgets 3.1.0이 자꾸 링크가 안 되서 wxWidgets 3.1을 직접 시스템에 설치하기로 했습니다. CMake에 이어서 이쯤되면 거의 Arch나 Gentoo쓰는 느낌이네요.

 

https://www.wxwidgets.org/downloads/

 

Downloads - wxWidgets

Header Files 32-Bit (x86) Development Files Release DLLs 64-Bit (x86_64) Development Files Release DLLs

www.wxwidgets.org

여기에 가면 우분투용 패키지를 따로 제공하고 있습니다. 이것을 이용합시다

 

https://wiki.codelite.org/pmwiki.php/Main/WxWidgets31Binaries#to

 

CodeLite IDE | Main / WxWidgets31Binaries

wxWidgets 3.1 Packages and Repositories This page is for the latest development release, wx3.1.3. For the previous development release, wx3.1.2, see WxWidgets312Binaries. For the latest stable release, wx3.0.4, see WxWidgets30Binaries. The CodeLite package

wiki.codelite.org

sudo apt-key adv --fetch-keys https://repos.codelite.org/CodeLite.asc

sudo apt-add-repository 'deb https://repos.codelite.org/wx3.1.3/ubuntu/ bionic universe' 

이건 18.04를 기반으로 한것이니까 bionic 부분은 버전에 맞게 잘 수정해야 합니다.

 

그리고 

sudo apt-get install libwxbase3.1-0-unofficial3 \
                 libwxbase3.1unofficial3-dev \
                 libwxgtk3.1-0-unofficial3 \
                 libwxgtk3.1unofficial3-dev \
                 wx3.1-headers \
                 wx-common \
                 libwxgtk-media3.1-0-unofficial3 \
                 libwxgtk-media3.1unofficial3-dev \
                 libwxgtk-webview3.1-0-unofficial3 \
                 libwxgtk-webview3.1unofficial3-dev \
                 libwxbase3.1-0-unofficial3-dbg \
                 libwxgtk3.1-0-unofficial3-dbg \
                 libwxgtk-webview3.1-0-unofficial3-dbg \
                 libwxgtk-media3.1-0-unofficial3-dbg \
                 wx3.1-i18n \
                 wx3.1-examples

있는대로 다 설치해서 때려박습니다.

 

다시 build 폴더를 비운다음 cmake 부터 다시 합니다.

 

이번에는 WxUtils.cpp에 wxdisplay()가 없답니다. 자세히보니 wx/display.h를 include 안 했네요. (대체 이걸 어떻게 빌드하라고..)

 

Source/Core/DolphinWX/WxUtils.cpp에 한줄을 추가합시다

#include <wx/display.h>

 

이번에는 wxDisplay(0) 이렇게 써있는 부분이 모호하다고 합니다. 포럼을 찾아보니 unsigned int로 강제형변환 해주면 된다고 하네요.

https://github.com/FasterMelee/FasterMelee-installer/issues/58

 

Build on NixOS fails: `wxDisplay(int)` is ambiguous · Issue #58 · FasterMelee/FasterMelee-installer

The build fails at 100%. The problem seems to be here: FasterMelee-installer/FasterMelee-5.9/Ishiiruka/Source/Core/DolphinWX/WxUtils.cpp:156:32: error: call of overloaded ‘wxDisplay(int)’ is ambigu...

github.com

이런 부분이 2군데 있다 싹 찾아보자

이쯤되니 슬슬...빡치려는 찰나...

어? 빌드 다 됐답니다.

이것을 보기위해 얼마나 많은 삽질을 했던가...

아아.. 드디어 빌드 되었습니다. 

그리고 portable하게 만들기 위해서 build 폴더 안에서

cp -r ../Data/Sys/ Binaries/

touch Binaries/portable.txt

 

이렇게 하고 ishiikura를 실행하면 같은 폴더에 설정파일이 만들어져서 편리합니다.

아아... 드디어!!!! 삽질의 마지막을 봤습니다!!! Wx3.1을 설치하고 개삽질을 하고 드디어..뭔가 되는 순간???

 

응??? UDPMote가 작동을 안해??

 

그래서 포럼을 뒤져보니..누가 이미 수정해 놓았네요? 그것도 리눅스용으로??? (그것도 어제...)

https://forums.dolphin-emu.org/Thread-unofficial-udpmote-for-android?page=7

 

[Unofficial] UDPMote for android

 

forums.dolphin-emu.org

https://github.com/Oneirag/Ishiiruka-but-with-UDPMote-again

 

Oneirag/Ishiiruka-but-with-UDPMote-again

An adaptation of https://github.com/kevlahnota/Ishiiruka for the current version of Dolphin-Ishiiruka - Oneirag/Ishiiruka-but-with-UDPMote-again

github.com

 

야..야잇!!!!

 

내가한 2일간의 삽질은 뭐냐는 말이냐... 괜찮아요.. 괜찮아.. 그래도 나름 공부는 되었잖아요.... 젠장

 

구동 결과...

 

build/Binaries/User/Config/WiimoteNew.ini 파일의 내용을 다음과 같이 바꿉시다.

[Wiimote1]
Source = 1
UDP Wiimote/Port = 4434
UDP Wiimote/Enable = 1
UDP Wiimote/ShowMessageBox = 1
[Wiimote2]
Source = 0
[Wiimote3]
Source = 0
[Wiimote4]
Source = 0
[BalanceBoard]
Source = 0

 

만약 2P 3P를 원한다면 [Wiimote2]부분을

Source = 1
UDP Wiimote/Port = 4435
UDP Wiimote/Enable = 1
UDP Wiimote/ShowMessageBox = 1

 

이런식으로 바꿔주시면 됩니다. PC와 스마트폰은 같은 공유기에 연결되어야 합니다. 어차피 UDP통신이라 iptime 정도면 충분합니다.

Wii버전 팡야 해보는데 생각보다 재밌네요. 스마트폰을 직접 휘두르는 느낌도 들고 Wii가 괜히 많이 팔린게 아닌 것 같습니다. 캐주얼한 것은 최고네요. 그래픽이 안 좋은 것은 필터로 때울 수 있고요.

,