Decompilatie N64-game Perfect Dark is 'vrijwel klaar', wat ports mogelijk maakt

Een decompilatieproject dat zich richt op de Nintendo 64-game Perfect Dark is vrijwel klaar. De ontwikkelaar heeft de game nagebootst in de programmeertaal C en wanneer die door dezelfde compiler gehaald wordt die voor de N64-game gebruikt is, ontstaat dezelfde output.

Een belangrijk element bij dit soort projecten is dat alleen de code van de game wordt nagebootst. Als dit werk volledig is afgerond, dan heeft de ontwikkelaar een versie van de game gemaakt die, door de openbaarheid van zijn broncode, makkelijk geport, gepatcht en gemod kan worden. Spelers moeten bij zo'n port nog wel zelf een rom van de originele Perfect Dark aanleveren. Het project kan daar dan assets als textures en geluidsbestanden uit halen om te gebruiken bij het draaien van de game.

Dat het project klaar is, betekent niet dat de game meteen speelbaar is. The Legend of Zelda: Ocarina of Time, eveneens voor de Nintendo 64, kreeg dezelfde behandeling. Een kleine vier maanden nadat de decompilatie van de game klaar was, kwam er een pc-port. Zo'n pc-port zou met de decompilatie ook voor Perfect Dark kunnen verschijnen.

Dat het werk 'vrijwel klaar' is en niet volledig klaar, is volgens Ryan Dwyer, de ontwikkelaar achter het project, niet zo'n punt. Donderdag voegde hij aan de readme van het project toe: "De ntsc-1.0- en ntsc-final-versies zijn volledig gedecompileerd, maar een handvol functies zijn nog niet byte-matching ondanks dat ze functioneel hetzelfde zijn. De statuspagina toont ze nog niet als 100 procent af omdat die alleen overeenkomende functies telt."

Naast Perfect Dark en Ocarina of Time is er ook een decompilatieproject van Super Mario 64. Dat leidde bijvoorbeeld tot een pc-port van die game met raytracing. De Zelda-decompilatoren werken overigens ook aan een Majora's Mask-decompilatie, die voor zo'n 70 procent af is. Dergelijke projecten trachten de illegaliteit te vermijden doordat ze niet de code van Nintendo verspreiden, maar zelf geschreven, functioneel identieke code. Vooralsnog worden dit soort projecten niet offline gehaald, ook niet enkele jaren na dato.

Uit de oude doos: de eerste missie van Perfect Dark (2000)

Door Mark Hendrikman

Redacteur

17-10-2022 • 16:00

44

Reacties (44)

Sorteer op:

Weergave:

De ntsc-1.0- en ntsc-final-versies zijn volledig gedecompileerd
uhh, decompilatie en daarvan code maken is dus gewoon illegaal, dat is geen reverse engineering, je gebruikt immers de originele code die je eigenlijk 1 op 1 overtypt (maar dan dus wat duidelijker maakt dan wat de decompile heeft opgeleverd). Reverse engineering die helemaal is gebaseerd op vergelijkbare werking en waarbij dus niet de directe 'code' is gebruikt is alleen legaal, en dat lijkt hier, zoals ik het artikel lees, niet het geval.
Omdat je van de naar C gedecompileerde versie verduidelijkt hebt wat betreft naamgevingen maakt het dus gewoon illegaal.
De code die uit een decompiler komt rollen is niet per definitie dezelfde code als de code die gecompileerd is om bij de binary uit te komen.
Maar hoe zit dat met bin —> Dec C —> Nieuwe bin. Geeft dat dezelfde output?
Dat hangt natuurlijk af van de (optimize) compile flags. E.g. je kan in assemble iets typen dat 1+2 uitrekent, terwijl de C compiler er gelijk 3 van maakt. (als je de waarde ergens verderop gebruikt)
Hangt ook af van gebruikte compilers. De compiler waarmee de oorspronkelijke binary is gemaakt heeft waarschijnlijk niks met de decompiler te maken. En waarschijnlijk ook niet met de compiler die je vervolgens gebruikt om de ge-decompileerde code mee te compileren.
Nee dat klopt, maar de kans dat je daarna daarvan weer een bit voor bit identieke binary kunt compileren is ook erg onaannemelijk, dus kun je stellen dat de decompile blijkbaar dezelfde code oplevert.
maar de kans dat je daarna daarvan weer een bit voor bit identieke binary kunt compileren is ook erg onaannemelijk
Maar het doel is helemaal niet om een identieke binary te maken. Het doel is om een port te maken.
Maar dat is in dit geval dus wel, en wat het doel is maakt niet uit of deze manier van decompileren en daarvan de code maken dus illegaal is. Dit is geen echte reverse engineering, dit is gewoon 'originele' code extraheren, en dat is illegaal (als je er geen toestemming voor hebt van de rechthebbende).
Dit is geen echte reverse engineering
Definieer 'echte'. Wat is hier niet 'echt' aan?
dit is gewoon 'originele' code extraheren
Dat kan helemaal niet. Je kunt bij zulke grote projecten nooit de originele code terugkrijgen die heeft geleidt tot de binary. En aangezien ze binaries voor andere platforms willen is dat ook niet zo belangrijk.
Je kunt met decompileren wel de 'originele' code extraheren, ja het is dan niet met dezelfde benamingen, maar de werking is 100% identiek, en rekeninghoudend bij decompileren met eventuele compiler optimalisaties kun je relatief gezien dezelfde code terughalen op hooguit een switch/if statement variatie na (waar bv in de originele code switch/select case gebruikt is maar na decompilatie het losse if statements zijn, of juist andersom). Als je die gedecompileerde code daarna alleen maar de benamingen gaat verduidelijken (zoals in dit geval schijnbaar het geval is), dan is dat dus niet legaal. Zelf helemaal van scratch de werking van het spel nabouwen zonder de originele binaries te decompileren en zo code te jatten is echte reverse engineering en die vorm is dus wel gewoon legaal, zolang je de originele assets niet meelevert.
Je kunt met decompileren wel de 'originele' code extraheren,
In beperkte gevallen kan dat inderdaad.
Maar makkelijk en geautomatiseerd kan dat vrijwel niet.
Ik bedoel, kijk nou naar het bericht. De decompilatie is 'vrijwel klaar'. Dat impliceert dat het een lastig proces is en dat het veel terugvalt op handwerk en inzichten van personen en niet een triviale actie is.
Hiermee wil ik terugkomen op jouw opmerking een paar posts terug dat de gedecompileerde code wel identiek moet zijn omdat het anders niet dezelfde binary oplevert. Dat is helemaal niet zo. Je kunt in een taal als C verschillende stukken code hebben die toch dezeflde assembly opleveren. Bij een vertaling terug zul je dan moeten gokken welke C code gebruikt is om de binary te genereren. En dan heb ik het nog niet over de invloeden van de originele assembler en linker, verschillende optimalisaties, etc.
Zelf helemaal van scratch de werking van het spel nabouwen zonder de originele binaries te decompileren en zo code te jatten is echte reverse engineering en die vorm is dus wel gewoon legaal...
Je spreekt jezelf hier tegen. Je stelt dat clean room reverse engineering de 'echte' reverse engineering is maar vervolgens noem je het een 'vorm' van reverse engineering waarmee je impliceert dat er meer vormen van reverse engineering zijn...
Of die andere vormen illegaal zijn doe ik geen uitspraak over. Dat verschilt per land en per geval.
Jammer dat er niet in wordt gegaan op de technische aspecten van deze decompile. Van binary naar assembly is niet zo moeilijk maar om daar leesbare C code van te maken is stuk lastiger. Gebeurt dat ook automatisch of is dit (voor groot deel) handwerk?

Daarnaast vind ik de term "de game nagebootst in de programmeertaal C" beetje ongelukkig gekozen. "(Terug) vertaald naar C" dekt de lading stuk beter als je het mij vraagt.
De code hoeft denk ik niet noodzakelijk "leesbaar" te zijn. Het doel lijkt een bak C-code die byte-exact hetzelfde resultaat geeft als je het door de compiler haalt als de oorspronkelijke binary. Vervolgens heb je iets wat je naar andere platforms kunt compileren. Tenzij je functionele aanpassingen wilt doen is het niet nodig dat die code ook heel erg leesbaar is.
Voor mods maar ook voor ports lijkt me dat je toch graag leesbare C code hebt.

Maar inderdaad. Als alleen het compileren op andere systeem je doel is, is super lelijke C geen probleem.
De code hoeft denk ik niet noodzakelijk "leesbaar" te zijn. Het doel lijkt een bak C-code die byte-exact hetzelfde resultaat geeft als je het door de compiler haalt als de oorspronkelijke binary
Als je het voor andere platforms wilt compileren dan moet het noodzakelijkwijze leesbaar zijn omdat je een hoop zooi zult moeten afvangen i.v.m. hardwareverschillen.
. Vervolgens heb je iets wat je naar andere platforms kunt compileren.
Dat is dus niet zomaar zo. Je moet daar nog veel voor verbouwen en dan is het handig als die code op zn minst enigzins leesbaar is.
Fantastische game! Vroeger nog veel meer gespeeld dan Goldeneye 007 van dezelfde studio Rare. Met de laptop gun tegen de muur of plafond en 2x DLX .357 in de handen op de map Felicity (ja idd, de Facility van Goldeneye) was het echt lachen geblazen met 3 vrienden in splitscreen. Soms dropte de framerate zo hard dat het net leek of er laserstralen ipv kogels uit de guns kwamen. Ahhh the good ol' days...

Laat maar komen die PC poort. Hopelijk blijft het dan niet alleen bij nostalgische gevoelens.
Er komt ook een nieuw deel aan, mocht je dat nog niet weten.
Heel herkenbaar dit. Vier man achter de N64 en dan het liefst complex, one hit kills met radar rechtsboven aan. En maar fraggen :Y) :Y)
Volgens mij kan je deze met wat omwegen al op pc spelen (xbox versie)
De trend van decompilatie is echt ontzettend tof. Het maakt games porten en modificeren zo veel gemakkelijker. Games die nu "gevangen" zitten op een console kunnen compleet tot leven gewekt worden, en indien het goed gebeurt zonder auteursrechtenschending. Ook de Jak trilogie op de PS2 begint een heel eind te komen (OpenGOAL), en speelt zo goed als native op PC nu. Beste ervaring die je ooit met dat spel gaat hebben, veel beter dan met emulatie mogelijk is.
Ik zal nooit begrijpen waarom de mensen achter zo'n oude game niet alles weggeven op een gegeven moment. Gewoon omdat het leuk is.
Hmm 🤔... De originele code vrijgeven zou deze fans ontzettend veel tijd besparen. Ik denk helaas dat er teveel copyright zit tussen zowel Nintendo, Rare en weet ik veel welke third-parties. Bij deze game waren ook meer dan 200 mensen betrokken denk ik. Dit legaal te doen lijkt me net zoveel werk met een onzekerdere uitkomst.
Wordt gewoon nog geld mee verdient hoor, zie alle remakes en rereleases op bijvoorbeeld de Nintendo Switch, ding kan NES, SNES en N64 emuleren. Incl controllers en al kun je ervoor kopen.
Het maakt games porten en modificeren zo veel gemakkelijker
Ja, maar dat is dus na het helse decompilatie werk. Het is wat dat betreft helaas verre van een go-to aanpak voor het verversen van oude games.

Ik vraag mij af of een aangepaste IP wetgeving dit makkelijker zou kunnen maken, dat na X jaar de binaire code gewoon publiek-domein wordt. Een uitgever kun je niet praktisch dwingen om broncode te bewaren en/of vrij te geven na die tijd, dat lijkt mij onbegonnen werk.
Een uitgever kun je niet praktisch dwingen om broncode te bewaren en/of vrij te geven na die tijd, dat lijkt mij onbegonnen werk.
Dat lijkt me eigenlijk wel gewoon een prima idee en met oog op de culturele waarde misschien wel de enige oplossing om te voorkomen dat waardevolle geschiedenis verloren gaat. We eisen binnenkort van hardware fabrikanten dat ze tig jaren reserveonderdelen beschikbaar stellen, updates uitbrengen en handboeken voor reparaties publiceren etc. Dat is allemaal veel ingewikkelder, ingrijpender en duurder dan dat je de broncode moet bewaren en na 10 jaar moet vrijgeven. Dat is toch verhoudingsgewijs kinderlijk eenvoudig.
Maar gedecompileerde binary wat dus voor mensen vaak onleesbare code oplevert ivm dat er geen duidelijke benamingen zijn omzetten naar identieke code waarbij je dus alleen de onduidelijke benamingen hebt aangepast, naar iets dat je wel begrijpt, valt niet onder de legale manier van reverse engineering, immer gebruik je nog steeds de originele code. Enige reverse engineering die legaal is, is de werking na bouwen zonder dat je de originele code zelf 1 op 1 gebruikt, wat dus altijd ook een compleet andere binary zal opleveren.
Dat het kan en leuk is, is een ander verhaal, maar deze versies zijn op zichzelf gewoon illegaal.
Het verspreiden van het gecopyrighte materiaal is illegaal. Als je een decompiler uitbrengt, en gebruikers zelf hun eigen kopie van het spel laat aanleveren (of dat nu een zelf gedumpte kopie is of een illegale download lijkt mij het verschil maken) is daar volgens mij niks illegaals aan. Normaal gesproken wordt er op basis van wat je ziet in de decompiler nieuwe code geschreven die hetzelfde doet, maar niet hetzelfde is. Dat is volgens mij ook niet illegaal. Ik denk niet dat projecten als OpenTTD, OpenRCT2, en OpenGOAL ook zo lang op sites als GitHub zouden blijven staan als dat wel het geval was.
Hier lijkt het te gaan om een decompile naar C code, waarna dus de benamingen allemaal hernoemt zijn naar 'begrijpbare' namen ipv bv x1, x2, x3, etc. In dat geval is de originele code 1 op 1 gebruikt waardoor het niet onder de Reverse Engineering definitie valt waarbij het wel legaal is, ofwel zonder de originele code te zien het spel nabouwen zodat het overweg kan met de bestaande assets en hetzelfde speelt. Dit zal dan ook nooit een identieke binary opleveren.
De pokemon games hebben dit jaren terug ook al 'gekregen'. Wel tof om zo wat te rommelen in de source code. Features inbouwen, alle pokemon beschikbaar maken. Starters aanpassen etc. Puur omdat het kan. Is wel allemaal assembly.
Pokémon Kaizo ROMhacks zijn zeer interessant om filmpjes van te zien. Vooral als het gaat over mensen die daar hardcore Nuzlockes in doen.
De code die je linkt is Generatie 1 van Pokemon. Emerald is bijvoorbeeld ook gecompileerd, maar is oorspronkelijk in C geschreven en daarmee de decompilatie ook.
Tof om te zien dat steeds meer spellen OpenTTD achteraan gaan, de grootvader van de rewrites :).
OpenRCT2 is ook zo'n geweldig voorbeeld: Rollercoaster Tycoon 2 op moderne computers, hoge kwaliteit, en nu zelfs met extra achtbaantypes, etc.! Oh, en met co-operatieve multiplayer!
Laten we OpenLoco ook niet vergeten ;)
Mooi project voor een van de meer vergeten Chris Sawyer spellen. Gewoon Transport Tycoon maar met de interface van RCT!
Ik weet niet of dat hetzelfde is eigenlijk. Zijn deze ports op zo'n zelfde manier gereverse-engineered en zijn ze daarmee ook compleet vrij van legal problems? Het liefste zie ik dit soort games in distro repositories verschijnen maar daarvoor moet het geen licentie problemen krijgen.
Jammer dat de raytrace versie van de super mario port niet meer te zien is via de youtube link in de oude artikel. Was er wel benieuwd naar.
Nu snap ik waarom mensen een RTX 4090 nodig hebben - om Mario 64 uit 1996 te spelen 🤣
Nu nog Pilotwings 64 ! Dat zou ZO VET zijn in 16:9 zonder een emu op pc, maar gewoon net zoals Mario64 afgelopen jaar....
Niet wat je zocht en ik denk niet in 16:9 maar https://www.youtube.com/watch?v=BnNAxTfiTCM kan je wel op de Switch spelen maar werkt nog niet helemaal goed.
Dit zijn leuke projecten. Zo speel ik ook met veel plezier de port van Ocarina of Time. Naast betere graphics biedt die op gameplay-gebied ook talloze verbeteringen die het spelen veel aangenamer maken.
Ik zou best een remaster van deze game op Pc willen. Volgens mij heb ik dat al eens eerder gezegd en was er toen iemand die zei dat er ook een PC versie was... of komt... Hoe zat dat ook alweer?

Op dit item kan niet meer gereageerd worden.