GLBasic - das neue Hochleistungs-BASIC für die Spiele-Entwicklung

  GLBasic-Logo


Ein Artikel von
Gernot Frisch, Dream Design (Autor) und
Thomas Antoni (Redaktionelle Bearbeitung und Interview)
Februar 2004


Inhalt


Vorwort von Thomas Antoni

Seltsamerweise gibt es nur wenige deutsche Compilerschmieden. Bezüglich BASIC sind mir nur GFA-Basic (www.gfasoft.gfa.net) und das alte BusinessBasic (von Nixdorf) bekannt. Doch jetzt ist mit GLBasic eine neue Windows-basierte BASIC-Sprache auf dem Markt erschienen. GLBasic stammt von dem deutschen Unternehmen Dream Design und hat das Zeug dazu, eine beliebte Aufsteigersprache für QBasic- Fans zu werden, die sich mit der Entwicklung von 2D- und 3D-Spielen befassen.

GLBasic ist die ideale Programmiersprache für die Spieleprogrammierung. Sie hat einfache Befehle für 3D-Grafik, Netzwerk, Joystick und Medienwiedergabe.Der Compiler erstellt aus dem Quellcode kleine, schnelle EXE-Programme. Die benutzten Medien-Resourcen können in ein geschützes Archiv komprimiert werden mit nur einer Zeile Änderung am Quellcode.

Und fast das Beste an GLBasic ist der Preis. Die nur wenig eingeschränkte kostenlose Freewareversion reicht für den ersten Einstieg vollkommen aus. Sie steht auf www.glbasic.com zum Herunterladen bereit und kann eigenständig lauffähige EXE-Dateien erzeigen. Die 2D-Vollversion gibt es zum Taschengeldpreis von 30,- EUR. Wer zur 3D-Version aufsteigen will, erhält das günstige Upgrade-Paket für nur 40,- EUR. Die Entwicklungsumgebung (SDK) umfasst Editor, Compiler, Zeichensatz- Generator, 3D Objektkonverter, eine ausführliche deutsche Online-Hilfe mit Einsteiger-Lernkurs und weitere Werkzeuge.

Ich habe GLBasic ausprobiert und muss sagen: Es hat mich umgehauen!

Ich freue mich, Ihnen als eine der ersten Webseiten GLBasic in einem Gastartikel des Entwicklers Gernot Frisch präsentieren zun können. Ich bedanke mich bei Gernot für den hochinterssanten Artikel und für das Interview, das er mir gewährt hat. Sie können es im Anschluss an den Artikel hier lesen.

zurück zum Inhalt

Ein BASIC für Spiele - Die Idee

Wir sind ein kleines Entwicklerteam, das auf dem Amiga500 Spiele unter BlitzBasic und AMOS geschrieben hat. Als abzusehen war, dass die Zukunft im PC liegt, trennten wir uns schweren Herzens von unserer "Freundin" und fingen an, Spiele am PC zu programmieren. Damals noch mit QBasic, eine sehr gute Programmiersprache, die leider von Microsoft keine Windows-Unterstützung erhielt. Aufgrund dieser Limitierung haben wir uns nach vergleichbaren Produkten für Windows umgesehen und fanden keine Alternative. VisualBasic war für Spiele damals ungeeignet. So beschlossen wir, C++ zu lernen. Zunächst haben wir das DirectX SDK und einen Visual C++ 5.0 Compiler installiert. Dann versuchten wir, die Beispielprogramme zu compilieren. Da wir von C++ keine Ahnung hatten, dauerte es wirklich lange, bis wir irgend etwas zum Laufen gebracht haben.

Hieraus entstand die Idee, eine BASIC-Programmiersprache speziell für Spiele zu entwickeln.

zurück zum Inhalt

DiNGS - Die erste Vorab-Version

Nachdem wir ein erstes Spiel in C/C++ geschrieben hatten (Wumbo's Adventure), machten wir uns an die Arbeit, ein Game Basic zu entwickeln. Das Ganze sollte sehr einfach sein. Wir hatten zunächst auch die Idee die Befehle "zwirbeln, pinseln, quäken" zu verwenden, wobei auch der Name der Sprache entstand: "Dings". Die erste Version bestand aus einem Notepad-Editor und einem Präcompiler, der P-Code erzeugte. Dann wurde die Sprache interpretiert. Aus dieser Zeit gibt es noch die 2 Beispiel- Programme DiNGSDash und DiNGSnic: Es war schaurig langsam und sehr intolerant was die Syntax anbelangte. Der Kerngedanke aber bestand schon: So wenig Befehle wie möglich, so einfach wie nur denkbar.

zurück zum Inhalt

DiNGS Game Basic - Das erste Release

Es stellte sich heraus, dass der GCC C++ Compiler einen enormen Geschwindigkeitszuwachs bringen konnte, und so wurde der Präcompiler umgeschrieben, damit er eine kleine Engine mit C++ Code versorgen konnte. Das Programm wurde nachher mit dem GCC compiliert und war sehr schnell. Damals gab es schon weitere GameBasic Varianten von anderen Herstellern. Doch DiNGS war definitiv schneller. Es wurde bereits in der ersten Version auf OpenGL umgestellt, so dass alle Spiele auch unter Windows NT 4.0 liefen. DiNGS Game Basic verkaufte sich relativ gut und ich habe einige nette kleine Spiele zugesandt bekommen, die damit geschrieben wurden. Jedoch war die Sprache immer noch ziemlich limitert und der Präcompiler war für größere Dateien zu langsam.

zurück zum Inhalt

GLBasic - Die Weiterentwicklung

Wegen der Präcompilergeschwindigkeit musste ich eine andere Lösung finden. Mittlerweile war ich ein Profi in C++ und habe den neuen Compiler von null an mit SPIRIT (http://spirit.sf.net) geschrieben. Damit konnte ich viel detailliertere Fehlermeldungen ausgeben. Auch ist der Compiler viel fehlertoleranter. Der Editor wurde zu 80% neu geschrieben und kann nun viel schneller mit großen Dateien arbeiten. Der Compiler kann mehrere Quellcodedateien verarbeiten. GLBasic wurde um eine vollständige 3D Engine erweitert mit Animationen, dynamisch erstellbaren Objekten, die man auch speichern kann, Kollisionsabfrage, Beleuchtungen und zu guter Letzt auch Bump- Mapping. Die Netzwerkfunktionalität wurde vollständig überarbeitet.

Die GLBasic-Entwicklungsumgebung

Die GLBasic-Entwicklungsumgebung


Und das Sahnehäubchen: Wir haben die komplette Engine auch unter Linux zum Laufen gebracht. Das Kompilieren unter Linux ist noch etwas spartanisch. Wer aber seinen Quellcode einsendet, bekommt kostenlos eine Linuxversion davon. Ferner wurden Algorithmen zur Pfad-Suche eingebunden, so dass man mit nur einem Befehl vollständige Weg-Kosten optimierte Routenberechnungen in Echtzeit erhält. Man kann ganze Ordner in komprimierte, verschlüsselte Archive umwandeln und deren Inhalt ohne Änderung am Quellcode verwenden. Das SDK (Software Development Kit) wurde um viele Zusatztools erweitert und bietet somit alles was der Hobby- Spieleprogrammierer braucht. Der Kerngedanke wurde trotz der immer komplexer werdenden Funktionen wie Dot3BumpMapping weiter beibehalten: So wenig (Befehle) wie nötig, so einfach wie möglich.

zurück zum Inhalt

Und wie geht's weiter?

Wir haben gerade ein Web-Forum für GLBasic einrichtet, da sich die Idee mit dem FTP-Tool nicht bewährte. GLBasic wird auch in Zukunft weiterentwickelt und verbessert. Wir haben bereits viele Ideen wie X-Plattforming, Web-Game-Server, Physik-Engine und vieles mehr. Immer wenn wir ein neues Thema angehen, dauert es oft nur wenige Wochen, bis ein neues Konzept steht.

zurück zum Inhalt

Die GLBasic-Demoversion

Die Demoversion von GLBasic und einige aussagekräftige mit GLBasic erstellte Demo-Programme können von www.GLBasic.com heruntergeladen werden (ca. 9 MB). Die Demo- Version beinhaltet den vollen Umfang der 2D-Version und ist zeitlich unbegrenzt verwendbar. Sie kann EXE-Dateien erzeugen und hat die folgenden Funktionseinschränkungen:
  • In erstellten Spielen erscheint oben links auf dem Bildschirm ein kleines Wasserzeichen mit dem Schriftzug "Demo".
  • Eine einmal gestartete Musik schaltet sich nach 30 sec ab.

S-Zero - ein mit GLBasic programmiertes Spiel

S-Zero - ein mit GLBasic programmiertes Spiel


zurück zum Inhalt

GLBasic kaufen

Die Vollversion von GLBasic gibt es in 2 Varianten:
  • GLBasic SDK lite - die 2D Vollversion für 30,-EUR
  • GLBasic SDK premium - beinhaltet zusätzlich die Funktionen "3D" und "NET" (Multiplayer, Internet) - Preis: 80,-EUR; Upgrade von SDK lite 40,- EUR.

zurück zum Inhalt

Die Features

Allgemeines
  • Besonders einfache Programiersprache - Vergleichsprogramme stehen auf www.glbasic.com zur Verfügung
  • Gleitkomma- und Ganzzahlen
  • Dynamische Felder
  • Verwenden komprimierter, geschützer Resourcen - Ohne Änderung am Code!
  • Felder als Parameter
  • Dynamische Felder
  • Pfad-Such Algorithmen: Nur ein Befehl
  • Echte 24-Bit-RGB-Farben
  • Zeichnen von Punkten, Linien und Vierecken
2D-Grafikfunktionen
  • Sprites bewegen, animieren und transparent oder mit Schatten anzeigen - das alles ist blitzschnell mit nur wenigen Befehlen programmierbar
  • Grafikobjekte rotieren, skalieren und überblenden
  • Einfaches Erstellen von Zeichnungen (Polygone, Linien, Rechtecke, Punkte)
  • Polygonale Sprites
  • Alpha Blending für alles
3D-Grafikfunktionen
  • Vollständige 3D Engine
  • Butterweiche 3D Animationen
  • Laden, Speichern, Drehen, Texturieren und Beleuchten von benutzerdefinierten 3D-Objekten
  • Arbeitet mit MD2 (QuakeII) und 3DS (3D Studio Max) Modellen
  • Automatische Licht-Normalenberechnung
  • Alpha Blending
  • Kollisionen
  • Light Mapping
  • Echtes Lighting
  • Und das alles ist einfach zu verwenden. Die notwendige Mathematik ist bereits eingebaut. Man braucht sich als Programmierer nicht darum zu kümmern.
Multimedia
  • Videos abspielen mit nur einem Befehl (.AVI, .MPG, ...)
  • Soundeffekte und Musik abspielen mit wenigen Befehlen (.MP3, .WAV, .MIDI, ...)
Netzwerk
  • Server-Client-Netwerke
  • Peer-to-Peer-Netzwerke
  • LAN-Spiele lassen sich mit wenigen, mächtigen Befehlen programmieren
  • Netzwerkspieler können sich gegenseitig Nachrichten zusenden.
  • Internet Verbindungen
Geräte
  • Joystick
  • Maus
  • Tastatur
Compiler
  • 100% echt kompilierte Executables
  • Keine Laufzeitbibliotheken (DLLs) - nicht einmal temporär!
  • Kleine EXE-Größe ab ca. 250 KB ohne Zusätzliche Runtime-Library
  • Schnelle Ausführung. Jetzt vergleichen !
  • Schnelles Übersetzen
  • Komplett neu geschrieben
Entwicklungsumgebung
  • Windows Standard Benutzeroberfläche
  • Syntax Formatierung + farbiges Hervorheben
  • Schnellhilfe in der Statuszeile
  • Komplette, voll integrierte, interaktive Hilfe als .CHM-Datei
  • Viele Tutorials für Anfänger und Profis
  • Debug-Funktionalität
  • Kommandozeilenparameter spezifizerbar zum Debuggen
  • Integrierte Werkzeuge (siehe Werkzeuge)
  • Browser für Funktionen und eingebundene Dateien
  • Unterstützt mehrere Dateien je Projekt
  • Projekt-Assistenten
Werkzeuge
  • Zeichensatz-Generator
  • Setup-Assistent
  • Zip-Werkzeug
  • Webforum
  • und vieles, vieles mehr!

zurück zum Inhalt

Interview mit Gernot Frisch

Aus dem Blickwinkel eines QBasic-Programierers habe ich Gernot Frisch sofort nach dem 'Reinschuppern in GLBasic mit einer Vielzahl von Fragen bombardiert, die er geduldig und ausführlich beantwortet hat. Ich habe die Fragen und Antworten hier zu einem kleinen Interview zusammenfasst:

Thomas: Gernot, Kannst Du den QBasic-Kids kurz erklären, was P-Code und ein Präcompiler ist? Ich weiß es zwar, aber die meisten der 11- bis 17-jährigen Besucher meiner Seite vermutlich nicht.
Gernot: Klar. P-Code ist eine Art "virtueller Maschinencode". Die Maschine jedoch ist nicht, wie beim echten Maschinencode, der Prozessor, sondern ein Programm, das sozusagen einen gedachten "Superprozessor" emuliert. Ein Präcompiler wandelt eine Hochsprache (also z.B. BASIC) in eine andere Hochsprache von niedrigerer Stufe (z.B. C/C++/ASM).

Thomas: Kannst Du ein paar Worte zur Programmiersprache SPIRIT sagen, mit der ihr GLBasic programmiert habt?
Gernot: SPIRIT ist eine vollständig objektorientierte Bibliothek, mir der man Parser schreiben kann. Das ist jetzt ein bisschen ab vom Thema. Prinzipiell erstellt man in einer gemeinsamen Sprache eine Gramatikdefinition und erhält dann Quellcodestückchen die auf bestimmte Regeln passen.

Thomas: Erläutere bitte die "Workbench" der IDE noch ein wenig genauer, also das Editierfeld, den SUB/FUNCTION-Browser, das Statusfeld, die Multifensterunterstützung usw.
Gernot: Die IDE hat links einen Texteditor mit Syntax Highlighting. Erkannte Schlüsselworte, auch die Namen von selbstgeschriebene Funktionen, werden automatisch GROSS geschrieben. Rechts davon gibt es ein Fenster mit einer Auswahlliste zum bequemen Navigieren aller Funktionen, SUBs und Sprungmarken. Dahinter ein Web-Forum und einen Dateimanager. GLBasic kann mehrere Dateien in einem Projekt compilieren. Dabei darf es nur in einer Datei Quellcode ohne Funktions- oder SUB-Kopf geben. Dieser Code defniniert den Einstiegspunkt.

Thomas: Kann sich eine GLBasic-Anweisung über mehrere Zeilen erstrecken?
Gernot: Noch nicht. Ich frage mich, warum mir das noch nicht eingefallen ist.

Thomas: Welche DEBUG-Funktionen gibt es?
Gernot: Da sind wir gerade am Basteln. Derzeit wird bei einem Fehler nur die Fehlerwarnung und die Zeilennummer ausgegeben, bzw. es springt der Cursor an die Fehlerstelle.

Thomas: Was ist die kleinste Größe einer kompilierten EXE-Datei, z.B. für ein "Hello World" Programm?
Gernot: Tipp, tipp, tipp. Ratter, ratter.... 248kB.

Thomas: Welche Systemanforderungen stellt GLBasic?
Gernot: Eine Grafikarte mit OpenGL-Hardwareunterstützung. Zur Zeit ist das Problem in der Regel nicht die Karte sondern der Treiber, da Microsoft keine Hardwarebeschleunigung für OpenGL mitliefert.

Thomas: Wie steht's mit der Einbindung von Sound (Effekte, Musik, WAV, MIDI, MP3 usw.) oder ist das auch mit OpenGL abgedeckt?
Gernot: Nein, unter Windows verwenden wir dazu DirectX in einer Version die auch bei NT4.0 verfügbar ist. Damit laufen alle Spiele zu 100% auf allen 32-Bit- Windows Betriebssystemen. Unter Linux verwenden wir SDL (www.libsdl.org)

Thomas: Inwieweit werden Multiplayer-Spiele unterstützt?
Gernot: Die Protokolle TCP/IP (also LAN+Internet), IPX (sehr alt, verwendet wohl keiner mehr) sowie die serielle Schnittstelle und direkte Modemverbindung werden unterstützt.

Thomas: Inwieweit werden Highscore-Listen unterstützt?
Gernot: Noch kann man keine Internet/FTP Verbindungen für Upload/Download nutzen. Das Feature wird aber sicher bald gefragt und implementiert sein.

Thomas: Wie ereichst Du die Multiplattformfähigkeit für Windows und Linux? Wird das schon durch die OpenGL-Schnittstelle sichergestellt oder gibt es noch andere Tricks? Muss man den Quellcode für Linux anpassen?
Gernot: Nein, wir haben tatsächlich den kompletten Ein-und Ausgabekern mit Hilfe von SDL nochmals schreiben müssen. OpenGL ist jedoch plattformunabhängig und somit war der größte Teil schon vorhanden.

Thomas: Sind Truetype-Schriften verwendbar und einbettbar?
Gernot: Es wird ein Font-Programm mitgeliefert, das aus TrueType Fonts Bitmaps generiert. Für schnelle Schriften muss man immer TrueType Fonts in Bitmaps umwandeln. Dann doch lieber so, dass der Benutzer nachher noch die Farben o.ä. ändern kann.

Thomas: Was für Dateibearbeitungsbefehle und Dateitypen gibt es? QuickBasic kennt ja bekanntermaßen sequentielle, random, binary und ISAM-Dateien.
Gernot: GETFILE und PUTFILE. Jedoch nur ASCII Dateien sind bisher möglich. Die Werte können ähnlich einer Datenbank einfach an bestimmte Zeilen eingefügt oder gelesen werden. Ein interner, intelligenter Puffer beschleunigt die Dateizugriffe.

Thomas: Wie weit geht die Ähnlichkeit mit QBasic? Lassen sich QBasic-Programme leicht nach GLBasic portieren?
Gernot: Das Hauptproblem sind die Felder. Unter GLBasic spricht man ein Feld über die eckigen[] Klammern an und bei QBasic sind es die runden (). Kommentare werden durch // statt durch ' markiert, REM gibt es jedoch auch. Einen Befehl schließt man mit ; statt : ab aber meistens hat man kaum mehrere Befehle in einer Zeile. Ich habe sehr gute Erfahrungen gemacht was das Konvertieren älterer Programme angeht.

Thomas: Ist GLBasic für Aufsteiger von QBasic und für totale Programmiereinsteiger geeignet?
Gernot: Definitiv ja. Die Grundidee ist ja die "einfachste Programmiersprache der Welt" zu schaffen und somit sind Anfänger und Umsteiger die große Zielgruppe.

Thomas: Es gibt auf Deiner Seite einen Benchmark-Test als Download. Kannst Du ein paar Angaben zur Differenzierung von GLBasic im Vergleich zu Blitz Basic, PureBasic, DarkBasic, C++ und Delphi machen?
Gernot: Ich möchte hier nicht zu viel sagen, da ich schwer objektiv andere Programmierspachen vergleichen kann. Kurz ein paar Anmerkungen:
  • BlitzBasic kommt mir ein wenig wie ein "Wrapper" für C++ und DirectX vor.
  • DarkBasic(pro) fehlt es etwas am geradlinigen Konzept. Die Geschwindigkeit muss man selbst beurteilen.
  • C++ ist eine gigatische Sprache - wenn man sie beherrscht. Ich schreibe meine Spiele trotzdem in GLBasic, weil's einfach schneller geht.
Über die anderen Sprachen kann ich leider nichts sagen.

Thomas: Ist GLBasic auch für die Programmierung von allgemeinen Anwendungen, Tools und Datenbanken mit Windows-ähnlicher Oberfläche geeignet? D.h. wird die Programmierung von Dialogboxen, Fenstern, Menüs usw. unterstützt, z.B. durch einen Formular-Editor? Oder ist das geplant?
Gernot: Nein.

Thomas: Du sagst, dass GLBasic ideal für Hobby-Spieleprogrammierer ist. Wo liegen die Grenzen von GLBasic. Was würden Profis vermissen?
Gernot: Derzeit gibt es keine Strukturen und Klassen. Und keine echten Zeiger, obwohl Felder per Referenz übergeben werden. Die 3D Funktionalität von GLBasic ist ein "Mädchen für alles" und könnte für das eine oder andere Spiel schon noch optimiert werden. Ich denke aber, dass die Geschwindigkeit von GLBasic bereits sehr gut ist.

Thomas: Welche Mathefunktionen gibt es?
Gernot: Sin, cos, tan, asin... pow, sqr, integer (Nachkommastellen abschneiden) und alles was man daraus machen kann.

Thomas: Welche Datenformate gibt es? Wie steht's mit Feldern und Strukturen (anwenderdefinierten Feldern)?
Gernot: Felder bis max. 8 Dimensionen für Nummern und Zeichenketten. Dynamische Alloziierung (Speicherplatz- Reservierung). Folgendes Progamm ist korrekt:
   DIM a[2][2]
       a[1][2]=2
   DIM a[3]
       a[2]=2
   DIM a[0] // Speicher wieder freigeben
Thomas: Wie sieht es mit dem Support aus?
Gernot: Wir haben ein Web-Forum für alle Benutzer (auch ohne Registrierung). Und meine Mailbox ist für wichtige Fragen immer offen.

Thomas: Wie groß ist die GLBasic-Community?
Gernot: Nun, GLBasic gibt es erst seit wenigen Monaten und ich habe kaum Werbung dafür gemacht. Derzeit habe ich etwa 10 Versionen verkauft.

Thomas: Gibt es ein gedrucktes Handbuch sowie Tutorials und Bücher zu GLBasic?
Gernot: Man kann die Online-Hilfe ausdrucken und hat dann quasi einen GLBasic- Lernkurs kombiniert mit einem kompletten Referenzhandbuch.

Thomas: Das stimmt. Ich habe mir gerade das Einsteigertutorial angeschaut und ich muss sagen: Es ist richtig gut! Daher gibt es hier gleich einen Screenshot davon:

Das GLBasic-Einsteiger-Tutorial in der Onlinehilfe

Das GLBasic-Einsteiger-Tutorial in der Onlinehilfe


Thomas: Gibt es auch eine englische Bedienoberfläche? Strebst Du den weltweiten Vertrieb an?
Gernot: Ja, beides ja.

Thomas: Gibt es eine boxed Version von GLBasic oder strebst Du die an?
Gernot: Noch nicht. Wenn ich das mache, dann nur in Deutschland, weil weltweit die Postkosten sehr hoch sind.

Thomas: Wer programmiert noch an GLBasic. Wie groß ist euer Entwicklerteam? Du redest mal von "ich" und mal von "wir".
Gernot: Ja, wir snd zu dritt. Jeder macht das, was er gerade für richtig hält.

Thomas: Wie alt bist Du, wo wohnst Du, was machst Du hauptberuflich und was für private Hobbies hast Du?
Gernot: Ich werde nächsten Freitag 29, wohne in der Nähe von Ingolstadt/Donau und arbeite als Softwareentwickler für Bauingenieursoftware. Privat bin ich mit meiner Familie zusammen wann immer ich Zeit finde.

Thomas: Vielen Dank Gernot für das sehr aufschlussreiche Interview. Ich drücke Dir beide Daumen, dass GLBasic ein durchschlagender Erfolg wird. Verdient hat es das jedenfalls!

zurück zum Inhalt





[zur Startseite http://www.antonis.de]       [zur framelosen Startseite]