Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

26.10.2015, 21:42

ASL - Arma Scripting Language (Compiler)

ASL ist kein Spiel, hat jedoch mit Arma 3 (Sandbox Militärsimulator) zu tun.

In Arma 3 ist es möglich über Scripte (die Sprache heißt SQF) Szenarien und neue Funktionalitäten zu bauen. Dies umfasst z.B. das Ausrüsten der Spieler, Interaktion mit KI, Steuerung von KI und noch viel viel mehr. Es gibt sehr große Community Projekte die aus Arma eine deutlich realistischere/spannendere Erfahrung machen.

SQF ist schon alt (mindestens Arma 2 ~10 Jahre?) und nicht besonders gut. Heißt konkret eine inkonsistente Syntax, überflüssige Schlüsselwörter und Zeichen (z.B. Semikolon) und unkomfortabel. Hier mal ein Beispiel für Kontrollstrukturen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
a = 1;
b = 2;

if (a < b) then {
    [1, 2, 3] buildinFunktion ["param0", "param1"];
}; // das ; ist Pflicht!

while {true} do { // ja hier stehen wirklich {} für die Bedingung
    // ...
};

eineFunktion = {
    x = _this select 0; // erster Funktionsparameter (Zugriff auf Array über "select")
    y = _this select 0; // zweiter Funktionsparameter

    return x+y;
};

var ergebnis = [4, 4] call eineFunktion;


ASL soll dieses "Problem" lösen und dem Mod Entwickler einiges an Ärger ersparen. Vor allem Fehlende ; sind ärgerlich, da man die Fehler erst im Spiel bekommt. Der Compiler wandelt dabei ASL Dateien in SQF Dateien um. Das Beispiel von oben sieht in ASL so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var a = 1; // klar machen, dass hier eine Variable deklariert wird
var b = 2;

if a < b {
    buildinFunktion(1, 2, 3)("param0", "param1"); // zumindest näher an üblichen Funktionsaufrufen
}

while true {
    // ...
}

func eineFunktion(x, y) {
    return x+y;
}

var ergebnis = eineFunktion(4, 4);

var array = [1, 2, 3]; // unter SQF sehr ähnlich
var i = array[1]; // = 2, kein select!


Hier ein Video zur Nutzung unter Windows:



ASL wurde vollständig als Recursive Decent Parser in Go implementiert und ist hier für Linux und Windows auf GitHub verfügbar. Dort findet ihr auch eine bessere Beschreibung der Sprache (Englisch). Viel Spaß beim ausprobieren (wenn ihr Arma spielt) :) Feedback immer erwünscht.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

27.10.2015, 08:13

ASL wurde vollständig als Recursive Decent Parser in Go


Wie bist du denn auf die abgefahrene Idee gekommen, das in Go zu implementieren (rein interessenhalber)?

Ansonten aber eine gute Idee! Allerdings wird Formatierung des generierten Code zumindest halbwegs lesbar wichtig sein, sonst wirds mit fehlern finden schwierig ;)

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

27.10.2015, 08:52

Es lässt sich noch in "schön" ausgeben: asl -pretty in out
Das fügt schon mal an entsprechende Stellen Zeilenumbrüche ein. Einrückung ist für die Zukunft schon geplant.

Go habe ich genommen weil ich die Sprache super finde und mal was neues ausprobieren wollte. Als RDP einfach weil ich wusste was ich da mache und das Ding für diese Projekt vollkommen ausreicht :)
Ein cooles Feature von Go, Goroutines, habe ich noch nicht eingesetzt. Soll aber später zum concurrent compiling von allen Source Dateien verwendet werden.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

28.10.2015, 13:49

DayZ ist eine Mod für Arma 2 und nutzt auch SQF (oder SQS hieß es damals glaube ich, aber sehr ähnlich).
Das DayZ Standalone baut auch auf Arma 2 auf und die Entwickler nutzen (wahrscheinlich, mein Eindruck) viel SQF für Features.

Schon komisch, dass sie selbst so gut mit dieser schrecklichen Syntax leben können :D

Ich habe übrigens schon einiges an Input von der Arma Community bekommen. Das wird was richtig feines wenn ich/wir alles eingebaut haben :)

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

07.11.2015, 17:04

So Version 1.1.0 wurde released!
Changelog gibt es jetzt auf GitHub.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

15.11.2015, 15:35

Inzwischen bin ich bei 1.1.1 und ein Community Mitglied hat eine GUI gebaut :)
Einfach auf GitHub downloaden. Die Syntax hat sich teilweise geändert, z.B. unterstütze ich jetzt vordefinierte Parameter:

Quellcode

1
2
3
4
5
func addiere(a = 1, b = 2) {
    return a+b;
}

addiere(); // = 3


Und die Syntax für foreach sieht jetzt so aus:

Quellcode

1
2
3
foreach unit => allUnits {
    // ...
}

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

15.01.2016, 17:33

Ein paar Änderungen in 1.2.0:

Concurrent compiling. Ich hab das sehr tolle Feature von Go benutzt um die Quelldateien "gleichzeitig" (konkurierend) zu compilieren. Auch wenn das bei ein paar Dateien quasi nicht messbar ist, hat es den netten Nebeneffekt, dass ich die panics die ich als Fehlerhinweis benutze vernünftig anzeigen kann. Statt einem hässlichen Stacktrace mit "Fehler in Zeile so und so" bekommt man nur noch den Fehlerhinweis. Und das je Datei, es wird nicht mehr gestoppt wenn in nur einer Datei ein Fehler auftritt.

Außerdem konnte ich mit Hilfe von "supportInfo" eine Liste aller Arma Befehle erstellen mit einigen Informationen. Dabei z.B. ob eine Funktion keine, auf einer Seite (unary) oder auf beiden Seiten (binary) Parameter erwartet. Dementsprechend konnte ich die Syntax verbessern:

Quellcode

1
2
hint()("Hallo"); // alt, gibt Hallo im Spiel aus
hint("Hallo"); // neu, viel schicker

Zudem kann ich damit prüfen ob eine Funktion mit dem Namen deklariert werden kann. Also folgendes gibt jetzt einen Fehler:

Quellcode

1
func hint() { /* ... */ } // case ist egal

Changelog: https://github.com/DeKugelschieber/asl/b…er/CHANGELOG.md

Warum ist das jetzt für euch interessant?

Naja, vielleicht seit ihr einfach neugierig oder interessiert euch auch für Arma. Außerdem kann ich jedem Go als Sprache empfehlen. In einem anderen Projekt (CRM Plattform mit Webclient und REST Schnittstelle) setze ich es auch ein, einfach der Hammer.
Damit hat Google für mich fast die perfekte Sprache geschaffen :D
Nebenbei teste ich auch noch wie gut sich Spiele (trotz GC) in Go schreiben lassen: https://github.com/DeKugelschieber/gogeline

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

8

15.01.2016, 18:19

Cooled Projekt! Ich warte auch noch auf eine Gelegenheit mal Go fuer ein Projekt zu verwenden. Ich kenne einige Leute die die Sprache lieben.

Ich verstehe nicht wieso selbst professionelle Spieleentwickler oft deren eigenen Sprachen entwickeln wenn es so viele, verdammt gute Sprachen gibt die man einbetten kann. Oder warum man sich dann nicht wenigstens an der ueblichen Java/C-stil Syntax orientiert statt was komisches eigenes zu entwickeln wie {} statt () fuer while.

Definitiv nen cooles Projekt!

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

15.01.2016, 19:07

Ich verstehe nicht wieso selbst professionelle Spieleentwickler oft deren eigenen Sprachen entwickeln wenn es so viele, verdammt gute Sprachen gibt die man einbetten kann. Oder warum man sich dann nicht wenigstens an der ueblichen Java/C-stil Syntax orientiert statt was komisches eigenes zu entwickeln wie {} statt () fuer while.

An dem Abend davor haben die wohl ne Flasche Korn getrunken. Ich verstehs auch nicht... Vor allem hatten sie angekündigt auf Java zu wechseln, es nur dann gelassen weil sie nicht genug Ressourcen haben. Im Grunde basiert Arma 3 auch geschätzt 80% auf der Codebasis von Arma 2, was definitiv kein Kompliment ist :P Dass es so ist sieht man z.B. in den Alpha Videos von vor 3 Jahren.

Werbeanzeige