De PlayStation 4 is inmiddels bijna dertien jaar oud en mag daarmee al bijna een retroconsole heten. Ondanks de leeftijd kunnen gebruikers nog altijd online gamen op de PS4, maar het is een kwestie van tijd voordat Sony die functie schrapt. Om dat voor te zijn, bouwen de ontwikkelaars van shadPS4 een online component voor de emulator: shadNet.
ShadPS4 is een emulator voor de PlayStation 4, een programma waarmee gebruikers spellen van een console op andere hardware kunnen spelen. Met shadNet moeten gebruikers van shadPS4 uiteindelijk met elkaar online kunnen gamen, net zoals op PlayStation Network. Dat is de toekomstvisie. Op dit moment werkt shadNet in een klein aantal games, zegt hoofdontwikkelaar George Moralis tegen Tweakers. "Maar zelfs als je een lobby kunt maken, kun je niet met elkaar spelen, omdat peer-to-peerverbindingen nog niet beschikbaar zijn." Het uploaden van highscores werkt wel in een aantal games, waaronder Sonic Mania, We Are Doomed en Dragon Ball Xenoverse 2. Het ontwikkelteam wil dit later voor meer games ondersteunen.
Moeizaam proces
ShadNet is dus nog volop in ontwikkeling: begin juli kwam versie 0.0.10 beschikbaar op GitHub. En zelfs als peer-to-peerverbindingen mogelijk zijn, is het werk nog lang niet gedaan. Dat komt doordat de meeste games hun eigen api gebruiken, vertelt Moralis. "Er zijn wel wat overeenkomsten tussen games, bijvoorbeeld als ze allebei Unreal Engine of Unity gebruiken, maar zelfs die zijn niet helemaal gestandaardiseerd. Daarom reverse-engineeren we de games om te achterhalen wat ze naar de servers sturen en wat ze verwachten terug te krijgen. Dat is een moeizaam proces en we verwachten niet dat het snel klaar zal zijn."
Zelfs als het project helemaal af is, zal het lang niet alle functies ondersteunen die PlayStation Network biedt. "ShadNet is geen directe vervanger voor PSN. Het biedt zoveel functies die we niet gaan ondersteunen. Het zal waarschijnlijk geen betaalde dienst vervangen, omdat we daar de middelen noch de wil voor hebben." ShadNet is puur bedoeld om shadPS4-spelers met elkaar te laten spelen, terwijl PlayStation Network bijvoorbeeld ook cloudsaves en spelen op afstand via PS Remote Play ondersteunt.
Gebaseerd op een werkend model
ShadNet is gebaseerd op RPCN, waarmee gebruikers van de PS3-emulator RPCS3 online kunnen spelen. "De meeste library's voor de PS3 komen overeen met die van de PS4, dus in plaats van een nieuwe te schrijven, hebben we besloten om ons te baseren op een al werkend en getest model", verklaart Moralis.
De RPCN-ontwikkelaars kozen voor de programmeertaal Rust, maar voor shadNet zetten de ontwikkelaars zo'n 92 procent van de code om naar C++. Een erg spannende reden heeft dat niet, zegt Moralis: "De code is herschreven in C++, omdat ik niet zo vertrouwd ben met Rust. Sommige delen van de code lijken echter wel op elkaar. Er zijn natuurlijk verschillen, maar daar werken we aan."
Zo gebruiken beide projecten onder meer SQLite voor het serverbeheer. Dat is geen apart programma, maar een kant-en-klare library die ontwikkelaars in hun software kunnen integreren. Beide programma's gebruiken ook Protocol Buffers, kortweg Protobuf. Dat is een bestandsformaat dat data heel efficiënt kan opslaan. In tegenstelling tot bijvoorbeeld JSON en XML is het niet door mensen leesbaar. Daardoor is Protobuf-data veel kleiner en sneller te verwerken dan formaten die wel door mensen leesbaar zijn.
Een praktische keuze
Het project leunt flink op het Qt6-framework. Die keuze is vooral praktisch: shadNet gebruikt verschillende Qt-modules om de online functies relatief makkelijk aan de praat te krijgen. Zo regelt de module Network de netwerkcommunicatie, beheert SQL de gegevens in de SQL-database en zorgt Concurrent ervoor dat de server taken tegelijkertijd en los van elkaar kan uitvoeren. Door die module kan de server bijvoorbeeld spelers aan elkaar koppelen door matchmakingverzoeken gelijktijdig te verwerken.
Qt heeft als nadeel dat het een vrij groot framework is, maar volgens Moralis was het door de functies toch de beste keuze. "Het bevat alle benodigde componenten om het werkend te krijgen en is bovendien overdraagbaar tussen Windows- en Linux-systemen. Ja, het is misschien wat zwaarder, maar we hoefden ons in ieder geval geen zorgen te maken over overdraagbaarheidsproblemen."
De matchmaking van shadNet werkt alleen met een account, dat gebruikers kunnen aanmaken op de website van het project. De private server heeft een eigen SQLite-database. Daarin staan onder meer de accountgegevens, sessietokens en vriendenrelaties tussen spelers.
Voor de matchmaking stuurt de shadPS4-emulator een UDP-pakket naar een server op poort 31314. De emulator gebruikt die poort voor matchmaking en STUN, oftewel Session Traversal Utilities for NAT. STUN vertelt een client van welk publiek IP-adres en poortnummer netwerkpakketten binnenkomen. Die deelt de client daarna met de matchmakingserver, zodat deze een peer-to-peerverbinding met andere spelers kan opzetten.
De ontwikkelaars hebben verschillende library's van de PS4, zoals Np_score en Np_matching2, gereverse-engineerd en omgeleid naar shadNet. Np_score houdt onder meer leaderboards en highscores bij.
Np_matching2 zorgt ervoor dat spelers daadwerkelijk met elkaar kunnen spelen. De module maakt onder meer lobby's aan, laat spelers toe en verwijdert de lobby als de spelers eenmaal klaar zijn met spelen. Voor de peer-to-peerverbindingen tussen de emulators implementeert shadPS4 de Windows Sockets-api op Windows en de ingebouwde netwerkbibliotheken op Linux.
Risico's
shadNet niet gebruiken.
ShadNet kan het PS4-protocol niet gebruiken, omdat dit versleuteld is. "Het is ook auteursrechtelijk beschermd. We gebruiken nu een tweezijdig protocol dat is geïnspireerd op RPCN. Op die manier kunnen shadPS4 en shadNet met elkaar communiceren", zegt Moralis. Daardoor is het volgens de ontwikkelaar alleen niet mogelijk voor shadNet om verbinding te maken met een 'echte' PS4.
Omdat shadNet niet direct het auteursrechtelijk beschermde PS4-protocol gebruikt, zou het risico op copyrightclaims van Sony kleiner moeten zijn. Toch denkt Moralis dat ook shadNet risico loopt op DMCA-claims. "Het nabootsen van een auteursrechtelijk beschermd product kent altijd risico's."
Maar waarom zou je dan die moeite doen om deze infrastructuur op te zetten? Zoals bij veel van dit soort projecten wil Moralis games speelbaar houden, zelfs als uitgevers ze hebben opgegeven: "Gezien de leeftijd van de PS4 verwacht ik dat de meeste diensten in de nabije toekomst zullen worden stopgezet. We zijn vooral geïnteresseerd in gamepreservatie, vooral voor games die niet meer werken omdat hun online diensten zijn stopgezet."
Redactie: Imre Himmelbauer • Eindredactie: Monique van den Boomen
/i/2008259900.png?f=imagenormal)
/u/472627/crop5c83fe498b36e_cropped.png?f=community)
/u/1628686/crop6829be8d68f0f.png?f=community)
/u/647921/crop6a5496e2139a2_cropped.png?f=community)
:strip_icc():strip_exif()/u/464574/crop5ef5b118724ae_cropped.jpeg?f=community)
/u/2173836/crop670edc9ca7631.png?f=community)
:strip_icc():strip_exif()/u/975117/crop5c6bfb95c6af5_cropped.jpeg?f=community)
:strip_icc():strip_exif()/u/635291/crop65b14977e5ca7_cropped.jpg?f=community)
/u/78932/Jewel3GoT.png?f=community)
:strip_exif()/u/120394/talic.gif?f=community)
/u/533588/crop5c477836e5227_cropped.png?f=community)