Archiv für die Kategorie ‘Artworks’

Donnerstag, 16. Februar 2012

Hallo. Heute gibt es mal wieder etwas eher Privates: Es ist interessant, mit welchen Mitteln man seinen PC beschleunigen kann. Der beste Trick besteht natürlich darin, sich einfach einen neuen zu kaufen. Das mache ich normalerweise auch alle drei Jahre. Mein aktueller PC läuft nun im vierten Jahr und er gefällt mir so gut, dass ich mir noch keinen neuen zulegen möchte. Ich kann bisher auch noch alles problemlos zocken, einschließlich Battlefield 3. Das wäre auch gelacht, wenn nicht, denn mit zwei 3-GHz-Kernen, 4 Gig RAM und einer GTX 260 mit zusätzlichen 800 MB steht man auch heute noch ganz gut im Strumpf. Klar, vier oder mehr Kerne sind noch geiler und eine 560 Ti geht einfach viel derber ab; und mehr RAM ist immer geiler. Und ich merke natürlich schon, dass ich nicht mehr die krasseste Grafik einstellen kann; und hin und wieder ruckelt es doch — was aber weniger an der Grafikkarte selbst liegt. Zum Beispiel hat Battlefield 3 die Eigenschaft, fast ständig Unmengen an Stuff nachzuladen (zumindest bei mir). Das führt dann häufig zu einem unflüssigen Spielgeschehen. Das ist schon sehr frustrierend, wenn man über’n Haufen geballert wird, bevor man den eigentlichen Feind überhaupt zu Gesicht bekommt. Oder man möchte nur kurz um die Ecke luken und genau in dem kritischen Moment, als man gerade seine komplette Blöße preisgibt, fängt die Festplatte an zu bollern und man weiß schon, dass man das nicht überstehen wird. Kennt ihr das auch?

Dann kommen jetzt die Tricks ins Spiel, mit denen man doch noch einiges mehr herausholen kann, ohne dreckig zu übertackten oder solche Späße. Ich habe einfach mal meinen PC ausgestaubsaugt und insbesondere die Lüfter vom Staub befreit. Sagenhaft, womit der PC einem diese Aktion dankt: weniger Abstürze, weniger Hänger, geschmeidigere Performance. Ich meine, dieser “Trick” ist nicht neu und eigentlich kennt ihn jeder. Aber mal im Ernst: Wann macht man das denn tatsächlich mal?

Der nächste Trick, der dann gegebenenfalls vielleicht doch etwas Geld kostet, besteht darin, Festplattenspeicher-lastige Spiele und vor allem die Auslagerungsdatei nicht auf klassischen Festplatten (Hard Disk Drives, HDD), sondern auf Solid State Drives (SSD) laufen zu lassen. Zack! Im Fall von Battlefield 3 bedeutet das für mich beispielsweise, dass, erstens, das Spiel nur einige wenige Sekunden braucht, um zu laden, und, zweitens, ich im eigentlichen Spielgeschehen nahezu keine Hänger mehr habe, weil wieder irgendetwas nachgeladen werden muss, was bei Battlefield 3 (zumindest bei mir) fast ununterbrochen geschieht. Die Menge, die nachgeladen werden muss, hat sich jetzt natürlich nicht geändert; aber ich bekomme einfach nichts mehr davon mit. Ich bin begeistert! Wenn ich jetzt einmal abgeknallt werde, liegt es an meiner Unfähigkeit und nicht daran, dass wieder mal im denkbar ungünstigsten Moment eine Unmenge an Stuff nachgeladen wird. So macht das Zocken Spaß!

Die hier aufgelisteten “Tricks” erheben keinen Anspruch auf Vollständigkeit. Nein, nein. Sie stellen nur die Maßnahmen dar, die ich erfolgreich und zufrieden angewendet habe, um mir ein nahezu frustfreies Battlefield-3-Zocken zu ermöglichen. Tschau.

Geburtstag

Freitag, 27. November 2009

Heute ist ein ganz besonderer Tag, denn Elsa und Cyber haben wieder beide Geburtstag. Cyber spricht ja nicht gerne über sein Alter, aber Elsa wird heute 30. Ein kluger Kopf mit entsprechenden Hintergrundinformationen kann somit auch auf Cybers Alter schließen.

Sehr viel über die beiden zu berichten gibt es darüberhinaus leider nicht, außer natürlich, dass beide enorm auf viele teure Geburtstagsgeschenke abfahren, das ist ganz klar. Aber das wissen ja eh alle.

Mein Geschenk an Elsa und Cyber ist ein Materialeigenschafteneditor. Dieser ist dazu da, um Texturen verschiedener Art mit Farben und Shadern zu kombinieren und diese Kombinationen als “Materialen” zu speichern. Die über den Materialeigenschafteneditor gepflegten Materialien können dann verwendet werden, um sie einzelnen Objekten in der Spielwelt zuzuweisen. Die Texturen der Materialien nehmen dabei verschiedene Rollen ein, z.B. gibt es eine Textur, die die eigentlichen Pixelinformationen des jeweils darzustellenden Objekts enthält. Weitere, optionale Texturen enthalten Informationen über die Oberflächenbeschaffenheit (z.B. in welcher Richtung das Licht reflektiert wird). Die Texturen werden dann mit spezifizierten Farben gemischt, um generische Texturen individuell wiederverwenden zu können. Über die Auswahl einer konkreten Shader-Combo wird angegeben, in welcher Art und Weise die Textur- und Farbinformationen dann letztlich zur Darstellung kombiniert werden.

Es ist mir etwas peinlich, denn der Materialeigenschafteneditor ist noch gar nicht ganz fertig. Aber das merken Elsa und Cyber heute sowieso nicht, hahaha. Also hab ich noch ein wenig Zeit. Aber hier ist ein erster Screenshot:

World-Editor: Erster Screenshot

Freitag, 06. November 2009

Heute gibt es den ersten Screenshot vom World-Editor zu sehen. Besonders umfangreich ist das Werkzeugarsenal des World-Editors bisher noch nicht. Aber das wird es erstens bald sein und zweitens kann man bereits “Blöcke” platzieren, auf denen Cyber dann später rumlaufen und -springen wird, sowie von der Undo/Redo-Funktionalität Gebrauch machen:

Im Screenshot mag der Inhalt des World-Editors noch recht langweilig aussehen. Das liegt daran, dass die “Welt” im World-Editor auf Basis ganz simpler Techniken visualisiert wird und das bislang noch ohne individuelle Texturen der Blöcke. Erstens, weil es wenig sinnvoll ist, den World-Editor mit raffinierten Rendering-Techniken auszustatten, weil, zweitens, durch die schlichte Darstellung der Überblick erhalten bleibt und so der Anwender nicht durch ein völlig überladenes Grafikgeballer in den Wahnsinn getrieben wird. Schließlich müssen die “Welten” ja wie auf einem Reißbrett regelrecht konstruiert werden. Hübsch aussehen müssen sie erst später, wenn Cyber sich in ihnen rumtreiben wird. Dann werden sie mit anderen Techniken und ausgefeilten Raffinessen dargestellt. Das sieht dann richtig geil aus — hoffentlich! Yeah, Baby!

Projektstatistik 10/2009

Samstag, 31. Oktober 2009

Im September hatte ich leider wieder nicht allzu viel Zeit, daher gab es auch keine entsprechende Projektstatistik. Ich habe lediglich hier und da ein paar Bugs beseitigt, wenn ich mal ne halbe Stunde oder so Zeit hatte.

Aber da ich mich diesen Monat nicht so viel um meine Freundin kümmern musste, hatte ich viel Zeit, mich meinem besonderen Kumpel Cyber zu widmen. Dafür muss ich halt wieder näxten Monat dran glauben. Vielleicht kann ich sie aber mit Schmick und Schmunke abspeisen. ;)

Hier ist die aktuelle Tabelle:

Zeilen gesamt Nur Code Nur Kommentare Code mit Kommentaren Leerzeilen Nicht-Leerzeilen
126.601 54.118 39.421 3.651 29.411 97.190
100 % 43 % 31 % 3 % 23 % 77 %

(Zur vorigen Tabelle geht es hier.)

Hui, da hat sich jetzt doch so einiges getan seit August: Ca. 3.000 Codezeilen sind hinzugekommen. Das ist nicht schlecht, finde ich. Die Debug-Konsole ist fertig und mit dem World-Editor bin ich auch bereits angefangen. Ein aktueller Screenshot der geöffneten Debug-Konsole ist hier zu sehen:

Der World-Editor wird natürlich raffiniert sein und auch so Sachen wie Undo/Redo-Funktionalität unterstützen. So ein System muss volles Rohr ausgeklügelt und von vorne bis hinten durchgeplant sein, sonst fliegt einem alles um die Ohren. Der World-Editor wird also ein sehr großer Brocken, den ich zu bewältigen habe. Hier gehe ich aber Schritt für Schritt vor: Zunächst wird man nur einzelne “Blöcke” platzieren können, auf denen Cyber herumlaufen und -springen können soll. Dann kommen Items (einsammelbare Gegenstände) hinzu. Später auch noch Monster und geskriptete Ereignisse (basierend auf Ernie-Script). Das Ganze muss dann noch mit Grafik hinterlegt werden können, was auch keine einfache Sache sein wird. Puh, aber ich freue mich!

Neues Optikboom-Shirt bestellbar

Mittwoch, 16. September 2009

Hallo Freunde! Ab sofort könnt ihr euch das neue Optikboom-Shirt mit folgendem Motiv bestellen. Dabei handelt es sich um einen Scherz, den ich mir erlaubt habe, indem ich Cyber teilweise als Wireframe-Modell dargestellt habe. Das Motiv trägt daher den Namen C-1000 mit Anlehnung an den Terminator T-1000, weil der teilweise ja “ähnlich” aussieht. Jedoch mit C für Cyber. Aber schaut selbst:

Yeah, das ist geil! Folgt hierfür folgendem Link:

cyber-e-razor.spreadshirt.de.

Es besteht auch die Möglichkeit, auf Anfrage individuelle Kombinationen aus T-Shirt-Typ und Motiv zusammenstellen zu lassen. Diese Kreationen tauchen dann unter der Kategorie “Individualshirts” auf. Einfach nachfragen.

Cyber lernt laufen

Freitag, 24. Juli 2009

Juhu, heute gibt es ein neues Video plus einen neuen Download. Denn Cyber hat endlich laufen gelernt. Das bedeutet, dass ich nun ein Animationssystem für die 3D-Modelle gebaut habe. Zum Testen habe ich mich an einer kleinen Animation von Cyber versucht, wie er läuft — und zwar sehr easy und entspannt und überaus cool, wie alle finden. Diese Animation basiert komplett auf ganzrationalen sowie trigonometrischen Funktionen. Üblicherweise werden solche Animationen zwar durch Key-Frames realisiert: Das konkrete Aussehen des 3D-Modells wird für bestimmte Zeitpunkte der Animation durch Drehen und Verschieben der einzelnen Joints (Gelenke des “Skeletts” im 3D-Modell) modelliert. Das Aussehen der dazwischen liegenden Zeitpunkte wird dann per Interpolation berechnet. Diesen Key-Frame-basierten Ansatz wird mein Animationssystem später vielleicht auch noch unterstützen. Aber bislang werden die Rotationen und Verschiebungen der Joints durch Funktionen abgebildet (Stichwort Forward Kinematics). Die Resultate sehen so nämlich zumindest zum Teil viel schöner aus als die einer (linearen) Interpolation. Zieht euch die erste Testanimation rein:

Get the Flash Player to see the wordTube Media Player.

Cyber ist jawohl die coolste Sau, oder?

Als nächstes werde ich wohl kleinere “Baustellen” der Engine ausbessern und noch eine auf Ernie-Script-basierende Debugging-Konsole  einbauen, wie man sie sonst eher von Ego-Shootern kennt. (Der Begriff Engine gefällt mir ja eigentlich nicht. Aber wie will man das sonst nennen? Framework? Ist doch auch kacke, zumal es ja mehr als “nur” ein Framework ist. Naja, egal.) Aber so eine Konsole ist überaus nützlich. Sie enthält zum Beispiel auch sämtliche Einträge, die in die Log-Datei geschrieben werden. Wie dem auch sei — dann ist der allgemeine Teil auch hoffentlich bald abgeschlossen, so dass ich mit den ersten “Cyber-spezifischen Features” anfangen kann. Bor, da liegt aber auch noch ein ordentlicher Batzen vor mir, sage ich euch! Schubidu.

Shader- und Rendering-System (II/II)

Freitag, 19. Juni 2009

Na endlich, es ist soweit: Der zweite Teil über Shader- und Rendering-System ist fertig. Das hat nun aber wirklich lange auf sich warten lassen. Das lag vor allem daran, dass ich noch ein paar Probleme mit dem finalen Comic-Shader hatte. Zum Einen wollte ich zusätzlich zur Beleuchtung noch Schatteneffekte einbauen, aber das sieht bisher nicht wirklich toll aus. Insofern habe ich es jetzt doch erstmal rausgelassen. Zum Anderen werden beim Mischen der verschiedenen Material- und Beleuchtungsfarben auch die Alphawerte entsprechend gemischt. Das führte dazu, dass unter bestimmten Umständen der Alphawert gewisse Pixel transparent erscheinen ließ. Ein solches Resultat könnt ihr im folgenden Screenshot sehen:

Fehler in Shader

Um dem Problem entgegenzuwirken, muss entweder das “Alpha-Blending” komplett abgeschalten werden. Das führt jedoch dazu, dass keine transparenten Gegenstände mehr angezeigt werden können, bzw. solche Gegenstände würden halt einfach nicht transparent sondern komplett opak dargestellt (opak ist das Gegenteil von transparent). Oder aber im Shader wird der Fall abgefangen, dass sich die gemischten Farbinformationen auf die Alphawerte auswirken. Das kann jedoch — je nach Hardware — enorme Leistungseinbußen bedeuten. Dennoch ist die zweite Alternative die “bessere”, erlaubt sie schließlich weiterhin den Einsatz von transparenten Gegenständen.

Ein entsprechendes korrektes Resultat sieht dann ungefähr so aus:

Comic-Style-Shader

Ist doch schon recht hübsch, oder? Damit ihr euch ein noch besseres Bild machen könnt, gibt es noch eine kleine Anwendung zum Runterladen, bei der ihr euch das Cyber-Modell und den Comic-Style-Shader auf eurem eigenen Rechner reinziehen könnt. Falls es Probleme bei der Darstellung geben sollte, sagt mir bitte Bescheid. Aber ihr solltet die Minimalvoraussetzungen bezüglich Hard- und Software beachten:

  • 3D-beschleunigte Grafikkarte mit Shader-Modell 2.0
  • DirectX 9.0c

Aber entsprechende Fehlermeldungen bei Nichtvorhandensein der Voraussetzungen sollten in jenem Fall in der Log-Datei “logger.html” zu finden sein, die beim Starten der Anwendung erzeugt wird.

Tja, so viele Worte habe ich jetzt ja eigentlich gar nicht zu den technischen Aspekten von Shader- und Rendering-System verloren. Aber Screenshots und Downloads sollten für die meisten von euch ohnehin viel interessanter sein, denke ich. Darüber hinaus habe ich im ersten Teil ja bereits den technischen Aufbau erläutert. Hinzugekommen ist jetzt hauptsächlich noch der Szenegraph, der die komplette darzustellende Szene in kleine “Knoten” zerlegt, um diese Knoten nach Geometrie- und Materialeigenschaften sortieren zu können. Dadurch werden die einzelnen 3D-Modelle größtenteils zerpflückt. Das macht aber nix, denn im fertigen Bild ist das nicht zu sehen. Aber durch das Zerpflücken der 3D-Modelle und Sortieren der so erzeugten Knoten nach ihren Geometrie- und Materialeigenschaften werden Zustandswechsel der Grafikhardware minimiert. Diese Zustandswechsel sind nämlich maßgeblich von eben diesen Eigenschaften abhängig. Dieser durchaus gängige Ansatz  der Minimierung von Zustandswechsel der Grafikhardware bringt dann derbste Leistungsvorteile mit sich.

Merchandizing-Shop endlich online

Montag, 18. Mai 2009

Na endlich! Ab sofort könnt ihr euch extrem geile T-Shirts mit Cyber-E-Razor-Motiven online bestellen. Der Verdienst fließt direkt in die Entwicklung des Jump-and-Run-Games ein. Weil Tamer nämlich sagt, das erzeugt Druck! Es gibt drei Kategorien: In der Basic-Line werden die schon sehr oft gesehenen T-Shirts mit eingescannten Cyber- und Elsa-Posen zu finden sein. Die zweite Kategorie — Bug-Shirts — beinhaltet Shirts mit coolen Motiven, die durch Bugs zufällig entstanden. Die dritte Kategorie ist einfach Optikboom. Sau geil!

Shader- und Rendering-System (I/II)

Montag, 30. März 2009

Puh! Das war was! Das Rendering-System ist nun auch fast fertig. Da es in letzter Zeit nicht allzu viel zu zeigen gab, möchte ich nun das Shader- und insbesondere das Rendering-System etwas genauer vorstellen. Schließlich habe ich mich ja genau damit in der letzten Zeit befasst. Damit der Rahmen hier nicht gesprengt wird und ich nicht alles Pulver auf einmal verschieße, mache ich mehrere Teile. Dieses ist der erste Teil. Ganz fertig ist das Rendering-System ja auch — wie gesagt — noch nicht, insofern ist eine Aufteilung ja ganz sinnvoll.

Struktur und Funktionalität des Rendering-Systems, was auf Teile des Shader-Systems zurückgreift, möchte ich anhand einer kleinen Grafik erklären:

Rendering-System

Kern des Rendering-Systems bilden Chain, Effect und Pass. Generell gibt es pro darzustellender Szene ein Chain-Objekt, dass die “Kette” an Effekten (Effect-Objekten) repräsentiert, die letztlich das Bild sukzessiv aufbauen. Ein Effekt kann dabei wiederum aus mehreren Pass-Objekten zusammengesetzt sein. Für einen Cel-Shading-Effekt (Cel = Contour Enhancing Lines) werden beispielsweise vielleicht drei Durchgänge (Passes) benötigt, was ich gleich noch genauer erläutern und anhand von Screenshots verdeutlichen werde. Pro Chain- und Effect-Objekt werden verschiedene Render-Targets zur Verfügung gestellt. Schließlich soll ja im Falle von mehreren Effekten bzw. mehreren Durchgängen eines Effekts nicht direkt in den Bildschirmspeicher, sondern in weiterverwertbare Render-Targets in Form von Texturen gezeichnet werden. Diese Render-Targets werden also entsprechend von den Chain- und Effect-Objekten verwaltet und den Pass-Objekten zur Verfügung gestellt. Ein Pass-Objekt greift dann auf ein Paar von Pixel- und Vertex-Shadern zurück (Shader-Combo), um die Geometrie der Szene letztlich zu transformieren und als Farb- und Tiefeninformationen in die Render-Targets zu zeichnen. Welche Eigenschaften der Geometrie zum Zeichnen mit auf den Weg gegeben werden, ist in der Vertex-Declaration gespeichert.

Um das noch ein bisschen zu verdeutlichen, kommt jetzt mein Cel-Shading-Beispiel:

Cyber E-Razor ist ja eine Comicfigur. Eine Comicfigur wird natürlich in gewissem Comicstil gezeichnet. So mit schwarzer Umrandung und wenigen (aber dafür umso markanteren) Farbabstufungen und so. Im Folgenden geht es darum, wie ich an diese schwarzen Konturlinien komme. Das endgültige Resultat zeige ich ein andermal. Im Moment geht es nur um die Konturlinien. Zur Extraktion der gewünschten Linien verfolge ich einen Ansatz von Mitchell et al., “Real-Time Image-Space Outlining for Non-Photorealistic Rendering”, den ich natürlich meinen Bedürfnissen angepasst habe. Dabei werden die Konturlinien aus drei “Informationen” der darzustellenden Objekte zusammengestellt: Die Farbe, der Normalenvektor (die Ausrichtung der Objektoberfläche) und die Tiefe (die Entfernung zur Kamera). Dafür wird die gesamte Szene erstmal in zwei Texturen gezeichnet: Eine soll die Farben enthalten. Die andere soll die Normalenvektoren in den drei Farbkanälen Rot, Grün und Blau sowie die Tiefenwerte im Alphakanal enthalten. Mit der zweiten Textur schlagen wir also zwei Fliegen auf einen Streich. Wie diese Texturen dann aussehen, ist in folgenden zwei Screenshots zu sehen:

Color-Map

Normal-Depth-Map

Ich habe zwar extra eine Perspektive gewählt, bei der Cyber seine heftige Gun Richtung Kamera streckt, damit die Tiefeninformationen möglichst stark zur Geltung kommen. Der rechte Screenshot ist aber trotzdem nicht so ganz aussagekräftig, daher hier noch mal zwei Screenshots, die die Normalenvektoren und die Tiefeninformationen getrennt voneinander beinhalten:

Normal-Map

Depth-Map

Sau geil! Die Normalenvektoren werden ja in den Rot-, Grün- und Blaukanälen der Textur gespeichert, insofern sieht Cyber auf dem linken Screenshot derbe bunt aus. Die XYZ-Komponenten der Normalenvektoren werden hierfür einfach als RGB-Farbwerte in die Textur geschrieben. Das passt ja ganz gut, sind ja schließlich jeweils drei Werte, XYZ oder halt RGB. Daher wird man aus der gegebenen Perspektive auch niemals die Farbe Blau sehen, weil die blauen Pixel alle in die andere Richtung “zeigen”, von der Kamera weg. Im rechten Screenshot sind die Tiefeninformationen gespeichert, je heller desto größer die Entfernung zur Kamera. Diese Informationen waren im oberen rechten Screenshot ja im Alphakanal der Textur gespeichert. Dort erscheinen die Farben daher etwas dunkler, weil sie wegen der “Transparenz des Alphakanals” mit dem schwarzen Hintergrund gemischt werden. Auch hier gilt wieder: je “heller” desto größer die Entfernung zur Kamera, wobei “hell” einen höheren Alphawert und demnach geringere Transparenz bedeutet.

Ballert man das alles nun zusammen und lässt noch einen weiteren entsprechenden Shader drüber laufen, kommt etwas Schönes bei raus. Nämlich Folgendes: Aus den drei Informationen, Farbe, Normalenvektor und Tiefe, bauen wir uns nun die Konturlinien. Und zwar soll an jeder Pixelposition des resultierenden Bildes eine Konturlinie gezeichnet werden, wenn die drei gegebenen Informationen relativ stark von den jeweiligen Werten benachbarter Pixel abweichen. Das bedeutet also:

  • Weicht die Farbe stark von den Farben benachbarter Pixel ab: Konturlinie zeichnen.
  • Hat der Normalenvektor einen weitaus anderen Winkel als die Normalenvektoren benachbarter Pixel: Konturlinie zeichnen.
  • Ist der Tiefenwert heftig näher an oder weiter entfernt von der Kamera als die Tiefenwerte benachbarter Pixel: Konturlinie zeichnen.
  • Ansonsten: Keine Konturlinie zeichnen.

Das führt dann als Resultat zu richtig schönen Konturlinien, die so ziemlich alle Eigenschaften besitzen, wie man sie von Comicbildern erwartet:

Color-Map

Sehr schön! Gut zu erkennen ist, dass einige Linien dicker sind als andere. Welche das sind, ist noch nicht völlig optimal, aber tendenziell sieht das schon ganz gut aus: Die tatsächliche Umrandung der Figur ist weitestgehend dick gezeichnet, während die Linien “innerhalb” der Figur (hach, dafür gibt es doch auch einen Begriff?) meistens dünner erscheinen.

Wie gesagt: Bisher handelt es sich hier nur um die Konturlinien. Für das fertige Bild können noch Beleuchtung und Schatteneffekte oder sonst was Verwendung finden. Die Konturlinien werden dann zum Schluss quasi über das eigentliche Bild drübergelegt, um den Comicstil zu realisieren.

Hui, jetzt brennen mir aber wieder die Finger! — Als näxtes werde ich das Rendering-System noch um die Funktionalität eines so genannten Szenegraphen erweitern, der u.a. für eine geeignete Sortierung der darzustellenden Objekte zuständig ist. Dabei sollen die verschiedenen Geometrieeigenschaften gruppiert und somit der Rendering-Prozess beschleunigt werden. Wenn das soweit ist, kommt der zweite Teil zur Vorstellung von Shader- und Rendering-System. Dann wird es natürlich wieder neue Screenshots geben. Tschau!

“Write in C”

Freitag, 20. Februar 2009

Heute habe ich einen genialen Cover-Song von “Let it be” von den Beatles im Internet gefunden: “Write in C”. Ein junger Knabe singt und begleitet sich selbst am Klavier. Zieht es euch rein und genießt:

Get the Flash Player to see the wordTube Media Player.

(Link zum originalen YouTube-Video.)

Hach, ist das schön. Leider ist die tolle Performance des Knaben eine relativ kurze. Denn der Song geht eigentlich noch länger. Daher lest euch doch einfach den kompletten Text durch, wie ich ihn mir aus verschiedenen Quellen zusammengesucht habe. Wer den Text ursprünglich verfasst hat, konnte ich leider nicht herausfinden.

When I find my code in tons of trouble,
Friends and colleagues come to me,
Speaking words of wisdom:
“Write in C.”

And as the deadline fast approaches,
And bugs are all that I can see,
Somewhere, someone whispers:
“Write in C.”

Write in C, write in C,
Write in C, oh, write in C.
LOGO’s dead and buried,
Write in C.

I used to write a lot of FORTRAN,
For science it worked flawlessly.
Try using it for graphics!
Write in C.

And if you’ve just spent nearly 30 hours
Debugging some assembly,
Soon you will be glad to
Write in C.

Write in C, write in C,
Write in C, yeah, write in C.
Only wimps use BASIC.
Write in C.

Write in C, write in C,
Write in C, oh, write in C.
PASCAL won’t quite cut it.
Write in C.

Write in C, write in C,
Write in C, yeah, write in C.
Don’t even mention COBOL.
Write in C.

And when the screen is fuzzy,
And the editor is bugging me,
I’m sick of ones and zeroes.
Write in C.

A thousand people swear that T.P.
Seven is the one for me.
I hate the word PROCEDURE,
Write in C.

Write in C, write in C,
Write in C, oh, write in C.
PL1 is 80′s,
Write in C.

Write in C, write in C,
Write in C, yeah, write in C.
The government loves ADA,
Write in C.