Der Entwickler des Spiels VVVVVV zu Ehren seines Jahrzehnts machte den Quellcode offen


Heute ist der 10. Jahrestag der Veröffentlichung von VVVVVV!

Obwohl das Spiel wahrscheinlich morgen, genau genommen, erst am 11. Januar 2010 um 15:00 Uhr MEZ zur Verfügung stand, nachdem ich jeden Fehler, den ich gefunden hatte , in letzter Minute behoben, Baugruppen erstellt und versucht hatte, alles langsam über ein extrem unzuverlässiges Internet auf den Server hochzuladen eine Verbindung, die ständig brach. Aber ich lebe immer mit dem Motto " morgen ist es nicht gekommen, bis du aufgewacht bist ", also denke ich über das tatsächliche Erscheinungsdatum am 10. Januar <3 nach

Oh mein Gott, zehn Jahre.

VVVVVV war für mich ein so wichtiges Spiel, dass ich gar nicht weiß, wo ich anfangen soll. Ich wollte dieses Datum irgendwie auf eine besondere Art markieren, also enthülle ich heute den Quellcode des Spiels!

[VVVVVV Quellcode auf Github]

Das Repository enthält zwei Versionen - die Desktop-Version , die von Simon Roth 2011 nach C ++ portiert wurde , und die spätere, die von Ethan Lee aktualisiert und unterstützt wurde , sowie die in Actionscript für Adobe AIR geschriebene mobile Version, die auf der ursprünglichen Flash-Version des Spiels v1.0 basiert .

Ich möchte mich ganz herzlich bei Ethan Lee bedanken, der mir sehr geholfen hat, unter anderem bei der Vorbereitung des Repositorys für die Community und der Organisation der Ankündigung auf AGDQ (Hallo, Speedrunner!)! Vielen Dank Ethan!


Ein kurzer Überblick über den Quellcode


Hier ist es logisch, die Frage zu stellen: "Was ist im VVVVVV-Quellcode interessant?" .

Ich denke schon ein kurzer Blick auf den Quellcode, man kann schnell verstehen, dass das Spiel VVVVVV technisch nicht sehr durchdacht ist! Selbst nach den Maßstäben autodidaktischer Entwickler ist der Code ziemlich chaotisch.

Potenziell interessante Hinweise / Erklärungen, warum alles genau so aussieht, wie es ist:

  • Die C ++ - Version enthält eine Reihe seltsamer Dinge, die nur dann logisch werden, wenn Sie sich daran erinnern, dass das Spiel zuerst auf einem Flash erstellt und dann direkt mit all seinen Fehlern portiert wurde. Wahrscheinlich ist es meine schlechteste Programmiergewohnheit , temporäre Variablen wie i, j und k als Member jeder Klasse zu deklarieren, damit sie nicht in Funktionen deklariert werden müssen (was aus einem langweiligen Grund langweilig ist). Dies führte zum Auftreten mehrerer böser und schwer zu fangender Insekten, gelinde gesagt. Insbesondere haben einige Funktionen zum Berechnen von Entitätskollisionen eine gemeinsame Variable i . Daher sind Endlosschleifen möglich.
  • Wenn Sie nach Spieletexten suchen, befinden sich die meisten (aber nicht alle) in den Klassen Scripts.cpp und TerminalScripts.cpp . Im Wesentlichen laden diese Funktionen Daten in einen sehr einfachen Skript-Parser, der die Cutscene-Logik steuert. Eine witzige Tatsache: Vor vielen Jahren haben Modder dieses " interne Scripting " rückentwickelt , um erstaunliche Dinge mit hausgemachten Levels zu machen, deren Existenz ich mir nicht einmal vorstellen konnte.
  • Irgendwann im Entwicklungsprozess entschied ich, dass es eine gute Angewohnheit ist, den Code in Eingaben, Logik und Rendering zu unterteilen, und nahm es mir zu Herzen. Der Hauptteil des kritischen Codes des Spiels besteht aus drei Dateien - input.ccp , logic.cpp und titlerender.cpp . Jeder Status des Spiels ist in diese drei Dateien unter Funktionsnamen wie Teleporterrender und Towerlogic gepackt . Es gibt eine Reihe von Copy-Paste.
  • Alle Ebenen sind in den riesigen Arrays fest codiert, die in meinem eigenen Datei-Editor generiert wurden, der die Ebenen in den Quellcode exportiert, aus dem ich sie lesen kann. So habe ich 2009 bei der Erstellung eines Flash-Spiels gearbeitet - der Zugriff auf externe Datenressourcen war eine schwierige Aufgabe, daher war es zu dieser Zeit logischer, sie im Spiel selbst zu kompilieren. Alle wirklich großen Dateien (z. B. Spacestation2.cpp, Finalclass.cpp usw.) wurden auf diese Weise erstellt. Der Vollständigkeit halber habe ich den Editor-Code hier hochgeladen, aber um ehrlich zu sein, trifft er derzeit nicht besonders zu (zum Kompilieren sind Allegro und Mingw erforderlich). Um das Schema der letzten Level zu ändern, habe ich ein ähnliches Tool geschrieben!
  • Als ich den Code schrieb, verstand ich nicht wirklich, wie statische Klassen funktionieren und warum ihre Verwendung eine gute Idee ist. Es scheint, dass ich irgendwo gelesen habe, dass statische Klassen und globale Variablen in Flash BAD sind, also habe ich versucht, sie vollständig zu vermeiden. Was ist das ergebnis Buchstäblich jede Funktion im Spiel übergibt die folgenden Argumente: "Grafik & DWGFX, Spiel & Spiel, Mapclass & Map, Entityclass & OBJ, UtilityClass & Help" .
  • Tatsächlich gibt es in VVVVVV keine temporären Objekte, und während der ersten Initialisierung des Spiels werden alle Entity-Arrays (und die meisten anderen Daten-Arrays) mit Hunderten von leeren Entities gefüllt. Das liegt daran, dass ich irgendwo gelesen habe, dass das Löschen von Objekten in einem Blitz ein seltsames Bremsen verursacht, weil der Garbage Collector hereinkommt und alles verlangsamt, und dies ist bis zu einem gewissen Grad wahr. Bis vor kurzem habe ich diese seltsame Angewohnheit in neuen Projekten beibehalten - in Dicey Dungeons habe ich sie endgültig aufgegeben.
  • Und noch etwas: Zusammen mit dem Cutscene-Parser hatte ich eine andere Möglichkeit, die Spiellogik während der Passage zu steuern - eine monolithische Finite-State-Maschine, die am Ende des Projekts völlig außer Kontrolle geriet! Es befindet sich in Game :: updatestate , und ich empfehle, es zu lesen, auch wenn Sie keinen anderen Code lesen möchten. Er verwaltet Aspekte wie das Auslösen komplexer Zwischensequenzen, die Zeitpunkte, an denen Teleporter Teleports senden, das Timing für die Fertigstellung der Animation und viele andere Dinge, die ich schnell ins Spiel bringen wollte. Die Bundesstaaten sind nummeriert und der größte ist 4099 (es gibt nicht verwendete Nummern). Bei der Entwicklung des Spiels stand neben mir ein Notizblock, in den die wichtigsten Zahlen geschrieben waren: Nummer 1.000 startete die Auswahl des „glänzenden Schmuckstücks“, Nummer 3.040 startete die Vollendung eines bestimmten Levels, Nummer 3.500 startete das Spielende. Dieses blöde System verursachte in 50,2 Sekunden in der Kategorie any% ein grandioses Speedran-Spiel .

Sie wissen nicht, was Sie dazu sagen sollen? Ich war jung und es war für mich interessanter, etwas auf dem Bildschirm zu erstellen, als es richtig umzusetzen. Wahrscheinlich das Beste im VVVVVV-Quellcode - es ist ein Beweis dafür geworden, dass Sie etwas selbst erstellen können, auch wenn Sie kein sehr guter Programmierer sind.

Wenn ich nach all den Jahren zurückblicke, finde ich es sehr lustig, dass dies größtenteils ein mehrfaches Kopieren und Einfügen derselben Teile mit geänderten Werten war. Aus diesem Grund ist es zehn Jahre später fast unmöglich, den Code zu pflegen, aber während ich noch am umfangreichsten war, konnte ich sehr schnelle Iterationen durchführen und neue Elemente hinzufügen. In den letzten zehn Jahren habe ich bessere Gewohnheiten entwickelt und bin als Programmierer definitiv sehr gewachsen, aber jetzt scheint es, als würde ich aus diesem Grund langsamer arbeiten.


Jubiläumsüberraschungsparty!


Während ich mich auf die Veröffentlichung des Artikels vorbereitete, kündigte Sergio Kornaga zu Ehren des Jahrzehnts von VVVVVV einen Game Jam an!

10 Jahre VVVVVV eVVVVVVent!

Ich bin so glücklich darüber, haha, und ich liebe die prächtigen Zugwracks auf der Website, in denen regelmäßig Klik of the Month-Staus stattfanden, an denen ich zur Zeit der Entwicklung von VVVVVV ständig teilgenommen habe. Es scheint perfekt für diese Marmelade zu sein!

Ich bin sehr gespannt, was die Leute nach dem Ende des Staus finden werden, und ich werde einen großen Beitrag in meinem Blog verfassen, in dem der Stil alter Beiträge zu den Nutzerstufen VVVVVV zusammengefasst wird , die ich einmal geschrieben habe <3

Noch bevor ich den Quellcode für das Spiel veröffentlicht habe, habe ich in der Version 2014 von Make and Play ! Sie können es hier herunterladen ! Wenn Sie daran interessiert sind, Ebenen im VVVVVV-Editor zu erstellen, können Sie mit diesem Thema beginnen ! Viel glück



Ein bisschen Sentimentalität


Ich habe bereits darüber gesprochen, wie VVVVVV in mir wachruft - kurz vor dem ersten Jahrestag schrieb ich, was ich erlebt habe, als das Spiel herauskam und wie sein Erfolg mein Leben veränderte . Am fünften Jahrestag schrieb ich, dass VVVVVV für mich ein Projekt ist, das es nur einmal im Leben gibt und dem vorher oder nachher nichts genügt hat.

Zehn Jahre später geht es mir immer noch genauso. Ich bin unglaublich stolz VVVVVV und dankbar für alles. Ich möchte mich bei allen bedanken, die mir auf meinem Weg geholfen haben - Magnus für seinen unglaublichen Soundtrack, Ethan und Simon für all ihre Arbeiten, die das Spiel der Öffentlichkeit zugänglich gemacht haben, Bennett für die Namen der Räume, Stephen für die Unterstützung bei der Erstellung der Assembly für den Mac am Tag der Veröffentlichung. Dieses Spiel ist etwas Besonderes für mich, danke an alle, die es gespielt und mich zehn Jahre lang unterstützt haben. Das bedeutet mir sehr viel. <3

Source: https://habr.com/ru/post/de483518/


All Articles