Auch heute noch entwickeln die Leute immer noch neue Spiele für alte Konsolen. Wir nennen sie
Homebrew . Manchmal ist dies eine Möglichkeit, den Kindheitstraum zu verwirklichen, ein Spiel für die Konsole zu erstellen, auf der das Kind gespielt hat. Darüber hinaus ist es aber auch eine interessante Aufgabe für jeden Designer oder Spieleentwickler: Retro-Iron hatte viele Einschränkungen, die die Kreativität der Autoren herausforderten. In den 90er Jahren waren diese Einschränkungen für professionelle Entwickler bekannt. Wenn wir heute fortschrittlichere Tools haben, ist die Erstellung von Spielen für solche Maschinen wesentlich erschwinglicher geworden.
Letztes Jahr habe ich einen Artikel über das
Erstellen eines Spiels für Game Boy geschrieben . Heute werde ich meine Erfahrungen mit der Entwicklung von drei Spielen für die SEGA Mega Drive / Genesis-Heimkonsole teilen. Dank moderner leistungsstarker Tools ist dies wahrscheinlich die einfachste Maschine, um ein Homebrew-Spiel zu entwickeln. Zum Beispiel habe ich es sogar geschafft, ein
(sehr einfaches) Spiel in nur 60 Minuten zu erstellen, und es läuft tatsächlich auf der Konsole!
Die Spiele
Letztes Jahr, um den 30. Jahrestag der Veröffentlichung von Genesis / Mega Drive zu feiern, habe ich ein Spiel namens
30 Years of Nintendon't erstellt . Wie der Name schon sagt, ist dies eine Hommage an die besten Spiele der Konsole und das aggressive Marketing, das SEGA zu dieser Zeit verwendete (zum Beispiel der Slogan
„Genesis does what Nintendon't“).In diesem Spiel kontrollieren wir den SEGA-Evangelisten, der die Spieler überzeugen muss, ihre NES und SNES zu vergessen, weil Genesis bessere Spiele hat! Das Spiel wurde am 30. Geburtstag der Konsole kostenlos online veröffentlicht. Sie können es hier spielen:
https://drludos.itch.io/30-years-of-nintendontSeitdem habe ich auch zwei (kleine) Arcade-Spiele für die Konsole erstellt:
"Ein Ei brechen""MeteoRain"Alle diese 3 Spiele werden auf einer von Cote Gamers herausgegebenen Kassette verkauft:
http://cotegamers.com/shop/en/genesis-mega-drive/43-test.htmlEs kommt in einer schönen Plastikbox, wie echte Vintage-Spiele, und mit einem Satz Postkarten.
Kann ich Unity, Unreal Engine oder Godot verwenden?
Entschuldigung, aber diese Engines können Spiele nicht nach SEGA Mega Drive / Genesis exportieren (vielleicht vorerst?). Aber keine Sorge, es gibt ein anderes Tool, das genauso nützlich ist wie diese beliebten modernen Motoren und gleichzeitig speziell für Mega Drive / Genesis entwickelt wurde:
SGDK . Dies ist ein Framework, mit dem Sie Code für diesen Computer in C schreiben können. Es ist viel einfacher und schneller als das Erlernen der Assemblersprache, die in den 90er Jahren erforderlich war. Das ist aber noch nicht alles. SGDK verfügt auch über Tools zur Vereinfachung der Erstellung von Grafiken und Sounds. Sie können Grafiken in Ihrem bevorzugten 2D-Grafikeditor
(von Photoshop zu GIMP oder Asesprite) erstellen. Diese werden automatisch konvertiert, wenn Sie Hardwareeinschränkungen einhalten (mehr dazu weiter unten). Gleiches gilt für Sound: Sie können Soundeffekte in WAV-Dateien erstellen und verschiedene Tracker für Musik verwenden. Eine letzte Sache: SGDK verfügt über eine leistungsstarke „Sprite Engine“, die die meisten technischen Aufgaben der Anzeige von bewegten Bildern auf dem Bildschirm vereinfacht. Aber wie "einfach" ist das in der Realität? In dem Artikel werde ich über meine eigenen Arbeitserfahrungen sprechen.
Die Strahlbearbeitung erscheint in der Szene
Wie jeder Programmierer alter Systeme Ihnen sagen wird, wird die Leistung des Spiels beeinträchtigt, wenn Sie ein Programm in C anstelle von Assembler schreiben. Und das ist die Wahrheit. Die Kosten in verschiedenen Retro-Konsolen sind jedoch sehr unterschiedlich. Sie hängen von der verwendeten CPU sowie von der Effizienz moderner Compiler ab, die Code für solche Vintage-Prozessoren erstellen. Glücklicherweise verwendet Mega Drive / Genesis den Motorola 68000-Prozessor, der sich gut für die Funktionen der Sprache C eignet, insbesondere im Vergleich zu anderen CPUs, beispielsweise der 65816 SNES-Konsole. Obwohl SNES-CPUs an sich leistungsstark sind, ist es schwierig, die Ausführung von in C geschriebenen Programmen mit ausreichender Geschwindigkeit zu erzwingen. Das heißt, wenn es um die Entwicklung von C Homebrew geht, ist „Blast Processing“ kein Marketing-Mythos, sondern Realität!
Wie schnell kann C-Code ausgeführt werden?
Hier ist ein Beispiel aus persönlicher Erfahrung - ein animiertes GIF meines MeteoRain-Spiels, in dem sich Sprites mit 45 Meteoriten ohne Verzögerung mit einer Frequenz von 60 fps bewegen:
Hier ist ein weiteres Beispiel für eine Explosion aus Break An Egg, die aus 40 Partikeln besteht, die sich mit einer Frequenz von 60 fps bewegen:
Wenn Sie die alten Spiele als Beispiel nehmen, dann ist Contra Hard Corps ein gutes Beispiel für die Leistung von Mega Drive / Genesis-CPUs. Obwohl das Spiel eher in Assembler als in C entwickelt wurde
(immerhin in den 90er Jahren) , konnten Entwickler mit großer Rechenleistung viele Sprites über den Bildschirm bewegen und eingängige Bosse mit Tonnen beweglicher Teile und massiven Explosionen erstellen.
Zum Vergleich: Contra III auf SNES war durch die CPU-Leistung begrenzt. Statt den Haufen Sprites zu verschieben, verwendete Konami einzigartige Grafikeffekte, die zum Beispiel nur der SNES-Videochip für den Transparenzeffekt nutzen konnte.
Obwohl beide Spiele gleichermaßen interessant sind, heben sie die technischen Unterschiede zwischen SNES und Mega Drive / Genesis perfekt hervor. Weitere Informationen darüber, wie Konami die einzelnen Spiele unter der entsprechenden Konsole erstellt hat, finden Sie im Artikel
„Making of Contra III und Hard Corps“ von
Retro Gamer No. 176 .
Grafische Einschränkungen
Da die Rechenleistung kein Problem darstellt, ist der Hauptengpass der Genesis / Mega Drive-Konsole für Homebrew-Entwickler zu einer seiner Grafikbeschränkungen geworden. Und genauer gesagt, eine begrenzte Anzahl von Farben, die von ihr angezeigt werden. Obwohl die Konsole im Allgemeinen 512 eindeutige Farben generieren kann, dürfen gleichzeitig nicht mehr als 64 Farben auf dem Bildschirm angezeigt werden.
Hoppla! Zum Vergleich: SNES konnte aus einer Palette von 32768 eindeutigen Farben 256 Farben gleichzeitig anzeigen. Das heißt, Grafiker brauchten großes Talent, damit SEGA-Spiele so gut aussehen wie die Konsolen der Wettbewerber. Und in vielen Fällen ist es ihnen gelungen. Trotz der Farbbeschränkungen sehen viele alte Mega Drive / Genesis-Spiele wunderschön aus, zum Beispiel
Comix Zone, die Geschichte von Thor, Streets of Rage II, Ranger-X, Gunstar Heroes, Sonic 1-2-3 usw.Comix Zone (1995)Aber in anderen Fällen sahen Mega Drive / Genesis-Spiele im Vergleich zu den SNES-Versionen ziemlich langweilig aus. Eines der bekanntesten Beispiele ist Street Fighter II, bei dem die Farbbeschränkungen der Konsole sehr auffällig sind:
Die optimale Verwendung begrenzter Paletten
(4 Paletten mit 16 Farben für Genesis im Vergleich zu 16 Paletten mit 16 Farben für SNES) war eine große Herausforderung für Entwickler, die normalerweise nur sehr wenig Zeit hatten, um Projekte abzuschließen. Heute können talentierte Mitglieder der SEGA-Community einige Spiele modifizieren, um die Verwendung von Farben zu optimieren. Zum Beispiel tut
Gabrielle Piron Wunder mit Spielen wie Castlevania Blood Lines, Golden Axe, Outrun oder dem bereits erwähnten Street Fighter II:
(Oben ist die Farbpalette des Originals, unten ist ein modifizierter Gabriel)In diesem Sinne können Sie mit Ihrem bevorzugten Grafikeditor Bilder erstellen. Seien Sie jedoch bei der Auswahl der Farben sehr vorsichtig! Wenn Sie nicht mit der 512-Farben-Palette übereinstimmen, die im Gerät angezeigt wird, ist dies kein Problem: SGDK konvertiert das Bild automatisch in die Mega Drive / Genesis-Palette. Aber wenn es um die Gesamtzahl der verwendeten und auf dem Bildschirm angezeigten Farben geht, müssen Sie es selbst tun!
Objekte bewegen
Um etwas auf dem Bildschirm anzuzeigen, müssen Sie die Grafikdaten vom ROM in den Video-RAM kopieren. Die GPU hat keinen direkten Zugriff auf Daten im ROM, kann jedoch Daten aus dem RAM lesen. Daher müssen Sie regelmäßig neue Daten aus dem ROM in den RAM kopieren, damit sich der Hintergrund oder die Animation von Sprites ändert. Und die Gesamtzahl der Video-RAM (VRAM) ist begrenzt: nur 64 KB. Verglichen mit der Größe von Gaming-ROMs (von 512 KB bis 8 MB) ist dies recht gering.
Engpass Nr. 1: VRAM-Übertragung
Wenn Sie ein sehr kleines Spiel mit einer kleinen Anzahl grafischer Elemente erstellen, können Sie diese beim Spielstart einfach ein für alle Mal in den Speicher laden. Die meisten Spiele müssen jedoch Grafiken in VRAM regelmäßig aktualisieren, um verschiedene Animationen zu demonstrieren. Und normalerweise verursacht es viele Probleme!
Die Menge der Grafikdaten, die in jedem Frame (d. H. 60 Mal pro Sekunde) vom ROM zum VRAM übertragen werden kann, ist begrenzt. Genauer gesagt sind dies 7524 Bytes pro Frame, d. H. Ungefähr 7 KB. Wenn Sie wie in Street Fighter II große animierte Sprites und animierte Hintergründe anzeigen müssen, wirkt sich diese Einschränkung ständig aus. Und das ist nur das erste Problem.
Engpass Nr. 2: Einschränkungen für Sprites
Bei 8/16-Bit-Konsolen besteht eine weitere Schwierigkeit in der Gesamtanzahl der Sprites, die das Gerät anzeigen kann. Normalerweise gibt es zwei Einschränkungen: eine für die Gesamtzahl der Sprites auf dem Bildschirm, die andere für die Gesamtzahl der Sprites in einer horizontalen Reihe. Bei 8-Bit-Konsolen wie NES und Master-System sind diese Einschränkungen sehr streng: Es dürfen nicht mehr als 8 Sprites pro horizontaler Linie vorhanden sein, und die Gesamtzahl sollte 64 Sprites nicht überschreiten. Bedeutet dies, dass wir 64 Mal Sonic oder Mario auf dem Bildschirm anzeigen können? Nein, ich meine "Hardware-Sprites", die kleiner sind als das, was normalerweise als Sprite bezeichnet wird. Hier ist ein Beispiel von Super Mario Bros für NES, bei dem mehrere 8 x 8 Pixel Hardware-Sprites erforderlich sind, um ein einzelnes Mario-Sprite anzuzeigen.
(Quelle: https://nesdoug.com/2018/09/05/06-sprites/ )Bei 16-Bit-Konsolen sind die Einschränkungen für Sprites geringfügig verringert. Mega Drive / Genesis kann bis zu 80 Hardware-Sprites anzeigen. Ein separates Hardware-Sprite kann jedoch eine Größe von bis zu 32 x 32 (zuvor nur 8 x 8 Pixel) haben. Hier sind einige Beispiele für das Schneiden von "Hardware-Sprites" auf Mega Drive / Genesis. Haben Sie bemerkt, dass Sonic nur aus zwei Hardware-Sprites besteht, während Mario auf NES 8 Sprites benötigt?
(Quelle: https://www.patreon.com/posts/new-resource-and-26847248 )Engpass Nr. 3: Sprite-Prioritäten
Als ob das nicht kompliziert genug wäre, hat Mega Drive / Genesis eine weitere Besonderheit: eine Sprite-Kette. Wenn Sie zwei Sprites anwenden, sollte die Konsole herausfinden, welche übereinander angezeigt werden sollen. Im Mastersystem und in den meisten Nintendo-Konsolen
(NES, Game Boy, SNES) wurden Sprites in einer großen Tabelle festgelegt, und ihre Reihenfolge in der Tabelle wurde zum Festlegen der Anzeigepriorität verwendet. Natürlich ist dies ein ziemlich schwieriges Tool, da Sie diese große Tabelle ständig neu definieren müssen, um die Priorität von Sprites zu ändern.
Bei Mega Drive / Genesis verwendete SEGA ein flexibleres und einfacheres System. Wie bei anderen Konsolen haben alle Sprites eine Indexnummer in einer großen Tabelle, sie wird jedoch nicht zum Festlegen der Priorität des Sprites verwendet. Stattdessen speichert jedes Sprite einen Link zum nächsten anzuzeigenden Sprite. Letztendlich erstellt die Konsole eine Kette von Sprites, beginnend mit Sprite 0. Jedes Sprite weiß nur, was danach kommt. Dies erleichtert das Ändern der Sprite-Prioritäten erheblich, ohne alle Sprites in einer großen "Sprite-Link-Tabelle" anzuordnen. Aber ehrlich gesagt, obwohl ein solches System einfacher zu bedienen ist, ist es immer noch ärgerlich, ein Spiel mit häufig wechselnden Sprite-Prioritäten zu erstellen, zum Beispiel in Beat'em Up.
Der einfache Weg: SGDK Sprite Engine
Das Anzeigen von sich bewegenden Sprites und scrollenden Hintergründen unter Berücksichtigung all dieser Engpässe ist eine ziemliche Herausforderung. Alle Entwickler der 90er kämpften damit und viele Homebrew-Entwickler tun dies auch weiterhin. Zum Beispiel veröffentlichte Matt Phillips das großartige
Tanglewood- Spiel 2018, erstellte es jedoch mit den Tools der 90er Jahre. Er programmierte das Spiel in Assemblersprache und verwendete das offizielle Hardware Development Kit, das vor etwa 30 Jahren entwickelt wurde. Seinerseits war es eine bewusste Entscheidung, die Technik der Entwicklung eines Vintage-Spiels voll auszuprobieren.
(Quelle: https://www.gamasutra.com/view/news/325040/New_game_classic_hardware_Developing_Tanglewood_on_a_Sega_devkit.php )Aber für Menschen, die nicht so erfahren und geduldig sind wie Matt, können moderne Tools die Anzahl der Probleme reduzieren, die durch technische Hardwareeinschränkungen entstehen. Wir haben bereits erwähnt, dass C normalerweise einfacher ist als Assembler. Es ist auch erwähnenswert, dass die Verwendung eines hochpräzisen Mega Drive / Genesis-Emulators wie
Blast'em in Kombination mit dem Everdrive Flash Cart zum Testen der realen Ausrüstung die Entwicklung des Spiels im Vergleich zur Entwicklung mit alten Hardware-Emulatoren in Kombination mit einer Reihe von DOS-Tools fast schmerzlos macht. Aber auch hier ist SGDK das Hauptgeschenk unserer Zeit.
Nehmen Sie das Spiel auf einer SD-Karte auf, legen Sie es in Mega Everdrive ein und testen Sie das Spiel auf echter Hardware!SGDK verfügt unter anderem über eine leistungsstarke "Sprite Engine", die dem Entwickler das Leben erheblich erleichtert. Dies ist eine Reihe von Funktionen zum Verarbeiten der Anzeige von Sprites, ähnlich wie dies in modernen Frameworks geschieht. Erstens müssen Sie sich keine Gedanken mehr über die Anzahl der Hardware-Sprites machen, die für jeden Frame der Animation erforderlich sind: SGDK erledigt dies automatisch. Außerdem müssen Sie bei der Arbeit mit Sprite-Prioritäten die Kette der Sprites nicht manuell festlegen, da SGDK dies mit dem einfachen Wert "Sprite-Priorität" vornimmt, der wie in jedem modernen Framework für jedes Sprite festgelegt werden kann. Eine letzte Sache: SGDK verarbeitet auch alle Übertragungen im VRAM automatisch! Ja, Sie haben richtig verstanden, dank der Sprite Engine müssen Sie sich überhaupt nicht mehr um VRAM kümmern! Sie können SGDK einfach anweisen, die
"Animation von X Sprite Y" anzuzeigen, und sie erledigt die gesamte technisch schwierige Arbeit für Sie. Wenn Sie jemals manuell mit diesen Dingen arbeiten mussten, scheint es magisch - alles ist einfach und klar!
Allein die Sprite Engine des SGDK-Frameworks macht Mega Drive / Genesis zur einfachsten Retro-Konsole für die Spieleentwicklung, insbesondere wenn Sie Erfahrung mit Game Frameworks auf modernen Plattformen haben. SGDK ist kostenlos und Open Source, aber wenn Sie seinem Autor Stefan Dallongevil bei der Weiterentwicklung der Retro-Magie helfen möchten, können Sie dies auf Patreon tun:
https://www.patreon.com/SGDK/Ton
Der Sound auf Retro-Hardware ist auch ein echter Test für sich und jede Konsole ist in dieser Hinsicht einzigartig. Mega Drive / Genesis verfügt für diese Aufgabe über einen separaten Z80-Prozessor, der direkt an Audiogeräte angeschlossen ist. Das heißt, um Sound und Musik für die Konsole zu erstellen, müssen Sie zunächst einen „Audiotreiber“ schreiben: ein Programm für den Z80-Prozessor. In den 90er Jahren entwickelte jedes Spielstudio einen eigenen Audiotreiber und passte ihn für jedes Spiel an. Gegen Ende des Konsolenlebens erschienen standardisierte Treiber, beispielsweise das GEMS von Sega of America, das
von westlichen Entwicklern in
etwa hundert Spielen verwendet wurde.Das Erstellen eines guten Sounds für 8/16-Bit-Konsolen ist nicht nur eine Frage der musikalischen, sondern auch der Programmierkenntnisse! Einige Spiele mit guter Musik oder Soundeffekten wurden von einem schlechten Audiotreiber beschädigt. Das bekannteste Beispiel ist Street Fighter II. Der Audiotreiber in diesem Spiel leidet an Fehlern, die alle Sprachbeispiele verzerren. Viele Jahre später hat Stefan Dallongewil
( SGDK-
Autor und anerkannter Zauberer) diesen Audiotreiber rückentwickelt und seine Fehler behoben. Infolgedessen können Sie jetzt Street Fighter II mit dem kristallklaren Schrei „Hadoken!“ Spielen. Hier ist ein Video, in dem Sie den Unterschied hören können:
Aber kommen wir zurück zur Homebrew-Entwicklung und der geliebten SGDK. Er kann Audiotreiber auswählen, die den Anforderungen seines Spiels entsprechen. Es gibt beispielsweise einen PCM-Treiber, mit dem Sie jeweils einen Soundeffekt in sehr hoher Qualität abspielen können
(z. B. Sprachbeispiele) . Es gibt aber auch einen XGM-Treiber, der gleichzeitig einen Musiktitel + 4 Soundeffekte abspielen kann. Das Beste ist, dass Sie während des Spiels zwischen den Audiotreibern wechseln können. Beispielsweise werden in 30 Jahre Nintendon't Sprachbeispiele auf dem Begrüßungsbildschirm und am Ende des Spiels vom PCM-Treiber für eine hohe Qualität abgespielt. Aber während des Spiels musste ich mehrere Soundeffekte gleichzeitig spielen, also habe ich den XGM-Treiber verwendet.
Die Ressourcen selbst können mit modernen Tools erstellt werden. Wie bereits erwähnt, können Sie für Soundeffekte einfach .wav-Dateien verwenden, die automatisch in das gewünschte Format konvertiert werden. Das Standardwerkzeug für Musik ist
Deflemask - ein Tracker, mit dem Musik für die Soundausrüstung verschiedener 8/16-Bit-Konsolen erstellt werden kann. Ich habe nicht viel Erfahrung mit dem Erstellen von Musik, da die in meinen Spielen verwendeten Kompositionen von talentierten Chiptune-Künstlern geschrieben wurden: Minerscale (Break An Egg) und Warlord (MeteoRain). Beide verwendeten Deflemask und exportierten ihre Kreationen in das VGM-Format, das SGDK für die Verwendung mit eigenen Audiotreibern konvertieren kann.
In 60 Minuten ein Spiel für Mega Drive / Genesis erstellen? Herausforderung angenommen!
Game Jams sind eine hervorragende Möglichkeit, um Ihr Spieldesign und Ihre Fähigkeiten in der Spieleentwicklung anzuwenden: Wie gut können Sie ein Spiel in einer begrenzten Zeit (normalerweise 48 oder 72 Stunden) von Grund auf neu erstellen?
In Bezug auf die Zeit ist der härteste Jam
0h Game Jam . Wie der Name schon sagt, findet es jedes Jahr während des Übergangs zur Winterzeit statt. Sie beginnen das Spiel um 02:00 Uhr, in der Nacht der Uhr. Nachdem Sie 60 Minuten gearbeitet haben, geben Sie das Spiel online in dem Moment frei, in dem die Uhr von 03:00 bis 02:00 zurückkehrt. Letztes Jahr habe ich mich entschlossen, an diesem Jam teilzunehmen. Nachdem ich gerade 30 Jahre Nintendon't abgeschlossen habe, habe ich einige Erfahrungen bei der Entwicklung eines Spiels für Mega Drive / Genesis gesammelt und mich von der Einfachheit von SGDK inspirieren lassen. Aber kann SGDK so einfach sein, dass ich in nur 60 Minuten ein 16-Bit-Homebrew erstellen kann?
Hier ist die Antwort :
60 Minuten ArbeitSeien wir ehrlich, das Ergebnis ist absolut nicht beeindruckend. Die Balance des Spiels ist furchtbar und es gibt einen großen Fehler im Zufallsgenerator, weshalb das Spiel nach dem fünften Ei unpassierbar wird. Außerdem gibt es kein Hintergrundbild, keinen Ton usw. - Mega Drive/Genesis, 60 , . , , !
, , . ,
.
30 Years of Nintendon't , — MeteoRain.
!homebrew indie
Obwohl Homebrew normalerweise eine Nische für Amateure ist (wie ich), sind einige Konsolen immer noch eine recht kommerzielle Plattform für Indie-Studios. Ein gutes Beispiel dafür sind zwei kürzlich veröffentlichte Spiele. Einerseits wurde Tanglewood wie in den 90er Jahren im Assembler vollständig entwickelt, was das Endergebnis noch eindrucksvoller machte. Andererseits wurde die ebenso beeindruckende Xeno-Krise mit SGDK entwickelt und nutzte den Komfort und die Einfachheit moderner Werkzeuge voll aus.Wirrwarr (2018)Xeno Crisis (2019 ), -, Mega Drive/Genesis?
, SGDK, :
https://github.com/Stephane-D/SGDKAbschließend
, SEGA Mega Drive/Genesis . , Cote Gamers:
http://cotegamers.com/shop/en/genesis-mega-drive/43-test.html(.. ROM-), - :
http://drludos.itch.io/,
Patreon . freeware, . Patreon, - , ( ).