Emulatorjs – granie w przeglądarce
Urodziłem się na początku lat 90., więc jak każdy dzieciak zawsze chciałem mieć GameBoya. Niestety nigdy mi się to nie udało, dlatego jak zwykle musiałem kombinować. Finał był taki, że niedługo później miałem komputer PC, na którym nauczyłem się jak odpalić emulator GameBoy Advance (w skrócie GBA) i wtedy moją ulubioną grą były Pokemony Red. W dzisiejszym wpisie pokażę jak na serwerze ODROID (działa to także na Raspberry Pi) uruchomić usługę, która pozwala emulować gry z wielu konsol „retro” i grać w nie poprzez przeglądarkę. Usługa ta nazywa się Emulatorjs.
Instalacja
Emulatorjs odpalimy oczywiście w Dockerze, ale najpierw standardowo stworzymy na serwerze wolumen na pliki kontenera:sudo mkdir -p /emulatorjs/{config,data}
Przechodzimy do utworzenia i uruchomienia kontenera:docker run -d \
--name=emulatorjs \
-e PUID=1000 \
-e PGID=1000 \
-p 90:3000 \
-p 91:80 \
-v /emulatorjs/config:/config \
-v /emulatorjs/data:/data \
--restart unless-stopped \
linuxserver/emulatorjs:latest
Kontener nazwaliśmy „emulatorjs”. Port 90 serwera przekierowujemy na port 3000 kontenera, jest to backend, czyli miejsce, w którym konfiguruje się wszystko i wgrywa się ROMy gier. Port 91 serwera przekierowujemy na port 80 kontenera, jest to frontend, który posłuży nam do grania. Po raz kolejny korzystamy z gotowego obrazu od linuxserver.io, dostępnego na Docker Hub.
Konfiguracja
Konfigurację rozpoczynamy od backendu. Przechodzimy do przeglądarki, wpisujemy w pasek adresu „192.168.88.7:90” i na start dostajemy komunikat, że najpierw musimy pobrać „default fileset”, więc naciskamy przycisk „Download”.

Zostaną pobrane wszystkie pliki niezbędne do prawidłowego działania frontendu. Są to głównie grafiki i filmy, ale także pliki konfiguracyjne w formacie „.json” dla konkretnych konsol. Cierpliwie czekamy do momentu wyświetlenia „Downloaded All Files”, następnie zamykamy okno czarnym kwadratem w prawym górnym rogu.

Następnie otrzymujemy komunikat „No roms found please add some to continue”, który oznacza, że nie mamy zainstalowanych żadnych ROMów gier. ROMami nazywa się obrazy gier, które zawierają wszystkie ich pliki. Pamiętacie kartridże do Pegazusa? To jest mniej więcej coś takiego tylko w wersji cyfrowej. No dobrze, ale skąd wziąć takie ROMy dla starych jak świat konsol?! Sam się trochę o to martwiłem, bo przyznam, że nie jestem zbytnio w temacie, ale okazuje się, że wystarczyło wpisać odpowiednią frazę w Google i już pierwszy link rozwiązał wszystkie moje problemy.

Wgrywanie gier
Jak pisałem we wstępie, moją ulubioną grą na GameBoya były Pokemony Red, więc to właśnie tą grę postaram się uruchomić na świeżo zainstalowanym emulatorze. W celu odszukania ROMu odwiedziłem wujka Google, wpisałem frazę „pokemon red rom gba” i już pierwszym linkiem była strona, z której pobrałem paczkę ZIP z ROMem w środku. Nie jest to pierwotna wersja, a jakiś remaster, ale to nawet lepiej. Paczkę należy rozpakować tak, aby uzyskać goły plik o rozszerzeniu „.gba”. Aby wgrać tak przygotowany ROM musimy przejść do zakładki „File Management” i z kolumny po lewej wybrać odpowiednią konsolę, którą w tym przypadku będzie „gba”. Otworzy nam się lista folderów, wchodzimy do „roms”, naciskamy prawy przycisk myszy, wybieramy „Upload”, wskazujemy na dysku pobrany wcześniej ROM i wgrywamy go do emulatora.

Następnie przechodzimy do zakładki „Rom Management” i w prostokącie podpisanym „gba”, w którym widnieje też napis „Roms: 1; Scaned: 0” naciskamy przycisk „Scan”. Po zakończeniu procesu otrzymamy komunikat:Scan exited with code: 0
hashing Pokemon - Fire Red Version (U) (V1.1).gba
To oznacza, że wszystko jest OK i możemy zamknąć to okno. Wybieramy z kolumny po lewej „gba” i zostajemy przeniesieni do nowego okna. Dodana przez nas gra powinna widnieć w sekcji „Identified Roms” i być zaznaczona na czerwono, co oznacza, że musimy dla niego pobrać niezbędne pliki. Naciskamy zatem przycisk „Download All Available Art”, czekamy na komunikat „Downloaded All Files” i dalej naciskamy przycisk „Add All Roms to Config”.

W backendzie to tyle pracy, możemy przejść do frontendu, czyli na stronę pod adresem „192.168.88.7:91”. Najpierw wybieramy konsolę, a potem grę i jazda, możemy grać!


Interfejs i sterowanie
Już ekrany powitalne wywołały u mnie łezkę wzruszenia… ah kiedyś to było! Trzeba przyznać, że Emulatorjs wygląda świetnie i działa rewelacyjnie dobrze. Zobaczcie sami:


Jeżeli chodzi o sterowanie to jakoś nie mogłem znaleźć żadnej dokumentacji na ten temat, dlatego pozostało sprawdzenie metodą prób i błędów, na ślepo. W Pokemonach na GBA udało mi się ustalić następujące funkcje dla klawiszy:Strzałki -> góra/dół/lewo/prawo
X -> przycisk A na konsoli
Z -> przycisk B na konsoli
H -> Twardy reset gry (uwaga, żeby przez przypadek tego nie nacisnąć przed zapisaniem, przydaje się gdy gra się zawiesi)
Enter -> Start
F1 -> Menu sterowania
F2 -> Save State (zapisanie stanu gry) - konieczne przed każdym wyjściem z gry
F3 -> Pokazuje licznik FPS
F4 -> Load State (przywrócenie stany gry) - konieczne po każdym powrocie do grania
F6 -> Zmiana slotu stanu gry na poprzedni
F7 -> Zmiana slotu stanu gry na następny
F8 -> Zrzut ekranu
F9 -> Wyłączenie/włączenie dźwięku
Co w przypadku, gdy gramy na urządzeniu dotykowym (np. iPadzie)? Wtedy na ekranie wyświetlają się lekko przezroczyste przyciski, które są niepodpisane, ale idzie się połapać, który jest do czego.
Jeżeli materiał zawarty w tym wpisie jest dla Ciebie wartościowy i masz ochotę wesprzeć moją pracę to zapraszam na mój profil na >Patronite<. Zachęcam także do odwiedzenia mojej strony >tomaszdunia.pl<. Możesz także zagadać do mnie na Twitterze >@theto3k<.
Poprzedni wpis:
yt-dlp – pobieranie filmów z YouTube
Następny wpis:
speedtest-cli – sprawdzenie prędkości internetu
Kategorie: Poradniki,Usługi - @ 2022-09-23 18:00
Tagi: docker, Emulatorjs, gameboy, gry, ODROID, port 90, port 91, RaspberryPi, retro