Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 40
  1. Beiträge anzeigen #1 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline

    [WIP][Tool] Parsiphae


    Parsiphae ist ein kleines Command-Line-Tool, das Daedalus-Skripte auf Syntaxfehler überprüft. Es soll das Scripten beschleunigen, indem man einfache Syntaxfehler erkennen und beheben kann, ohne für jeden einzelnen Fehler extra Gothic starten zu müssen. Außerdem ist es sehr schnell: Im laufenden Betrieb (d.h. kein Kaltstart) braucht es unter einer Sekunde für die bereinigten Skripte + Ikarus/LeGo, ca. 2.5 Sekunden für die Velaya-Skripte und ca. 4.5 Sekunden für die Skripte von Xeres Rückkehr. Pro Datei wird maximal ein Fehler gefunden: Dann wird das Parsen dieser Datei abgebrochen. Ansonsten fängt man sich schnell merkwürdige Fehlerkaskaden ein, wie sie der Spacer gerne mit sich bringt.


    Parsiphae ist noch in der WIP-Phase, ich würde mich daher freuen, wenn ihr es verwendet um eure Skripte zu checken! Insbesondere falls es über Code meckert, den Gothic akzeptiert, würde ich mich auch über eine Rückmeldung freuen, um dieses Tool zu verbessern.

    Download | Sourcecode


    Wie verwende ich Parsiphae?
    Momentan unterstützt Parsiphae zwei Eingabeparameter: --src und --input. Man kann nur eines der beiden Flags verwenden. Bei --src wird der Pfad zu der Gothic.src erwartet, bei --input der Pfad zu irgendeiner .d-Datei (siehe auch: --help). Auch wenn Parsiphae bereits schnell ist, geht es so noch schneller: Die Datei, die gerade bearbeitet wird, kann üblicherweise in wenigen Hundertstelsekunden geparst werden und so sofort Feedback liefern, ob man noch grobe Fehler im Skript hat.


    Welche Skripte unterstützt Parsiphae?
    Hoffentlich alle. Getestet wurden Ikarus/LeGo, die Original-Scripte sowie einige größere und kleinere Modifikationen. Ich habe Wert darauf gelegt, den Gothic-Parser möglichst originalgetreu nachzubilden, (leider) mit all seinen Eigenheiten. Die einzige Ausnahme sind Zuweisungen als Ausdruck, z.B. if (a = b) {}. Das scheint es in den Originalskripten aber nicht zu geben und ist sowieso ein Bug, weil es den Stack kaputt macht.

    Welche Fehler kann Parsiphae (noch) nicht finden?
    Parsiphae überprüft momentan nur die Syntax der Skripte. Das heißt Fehler wie "Unknown Identifier" oder "Redefined Identifier" werden nicht gefunden. Auch zu viele oder zu wenige Funktionsparameter können nicht erkannt werden. Es gibt noch kein Typechecking, d.h. für Parsiphae sieht "hallo"+7 wie ganz normales Daedalus aus.

    Woran wird noch gearbeitet?
    Insgesamt gibt es 5 Schritte, die Parsiphae unterstützen soll:
    1. Parsing
    2. Symbol collection
    3. Typechecking
    4. Linking
    5. Code generation

    Wir ihr seht, gibt es noch viel zu tun.

    Welche Vorteile bringt Parsiphae gegenüber Gothic mit?
    Momentan ist es nur wesentlich schneller als Gothic im Skripte parsen, kann dafür aber natürlich viele andere Sachen noch nicht. Das wird sich hoffentlich bald ändern, aber bis dahin möchte ich nichts versprechen.
    Geändert von Lehona (25.07.2018 um 19:13 Uhr)

  2. Beiträge anzeigen #2 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    hi! Schönes Projekt.

    Wenn Ich einen offensichtlichen Fehler in Story_Global.d einbaue
    Code:
    var int a;
    ;;;
    var int b;
    wird er gefunden wenn ich nur die .d Datei parse. Wenn ich die Gothic.src parse wird er nicht gefunden:
    F:\passiv\dirtySwampEditFolderGitSynched\DirtySwamp\GothicII+Modkit\_work\data\S
    cripts\Content>parsiphae.exe --input story/story_globals.d
    Error in file "story/story_globals.d" in line 1556: Error in declaration
    parsing took 0.023 seconds

    F:\passiv\dirtySwampEditFolderGitSynched\DirtySwamp\GothicII+Modkit\_work\data\S
    cripts\Content>parsiphae.exe --src gothic.src
    No syntax errors detected!
    parsing took 0.028 seconds
    Story_Globals.d ist in der Gothic.src angegeben.
    Fehler im Programm? oder Fehler zwischen Stuhllehne und Monitor?

    edit:
    liegt daran das ich die .exe direkt im content Ordner liegen hatte.

    Eine Ebene weiter Oben geht er die gothic.src durch. Da werden 2 Stellen gefunden die der Gothic parser frisst:
    F:\passiv\dirtySwampEditFolderGitSynched\DirtySwamp\GothicII+Modkit\_work\data\S
    cripts>parsiphae.exe -s content/gothic.src
    Error in file "content\\mud_freak\\06_blockAllPlayerInput.d" in line 46: Error i
    n function call
    Error in file "content\\STORY\\B_Story\\B_GetLearnCostTalent.d" in line 429: Err
    or during variable declaration
    parsing took 2.948 seconds
    06_blockAllPlayerInput.d Auszug (Bösewicht: Doppelblockkommentar in einer Zeile?):
    Code:
    func void blockInGameMenus(var int on) {
        const int set = 0;
        if (set == on) {
            return;
        };
    
        const int oCGame__HandleEvent_G1 = 6680288; //0x65EEE0
        const int oCGame__HandleEvent_G2 = 7324016; //0x6FC170
        var int addr; addr = MEMINT_SwitchG1G2(oCGame__HandleEvent_G1, oCGame__HandleEvent_G2);
    
        if (on) {
            ReplaceEngineFuncF(addr, 1, Hook_ReturnFalse);
        } else {
            RemoveHookF(addr, 5, Hook_ReturnFalse);
            if (!IsHooked(addr)) {
                MEM_WriteInt(addr, MEMINT_SwitchG1G2(/*0xA164*/ 41316, /*0x8568FF6A*/ 2238250858)); // das hier(ohne diesen Kommentar) ist Zeile 46
            };
        };
    
        set = on;
    };

    B_GetLearnCostTalent.d Auszug (Stringvariable wird deklariert, Name beginnt mit einer Ziffer):
    Code:
    func int learn1hSkill(var int skill) {
    	var string 1hSkillText; // Zeile 429
    	1hSkillText = ConcatStrings ("Lerne: Einhand Stufe ", IntToString (skill));
    	decreaseLearnPoints(B_GetLearnCostWeaponSkill(NPC_TALENT_1H, skill));
    	PrintScreen_Ext (1hSkillText, -1, -1, FONT_SCREEN, 2);
    	B_RaiseFightTalent (hero, NPC_TALENT_1H, B_GetRaiseAmountOfWeaponSkill(NPC_TALENT_1H, skill));
    	onehandedSkillLevel = skill;
    
    
    	[...]
    };
    Geändert von Cryp18Struct (25.07.2018 um 01:54 Uhr)

  3. Beiträge anzeigen #3 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Danke für das Feedback. Das Pfad-Problem schaue ich mir an, meine Konstruktion um an die Dateipfade ranzukommen ist etwas wackelig.

    In der blockInGameMenus() ist tatsächlich nicht der Kommentar der Böse - der wird brav ignoriert - aber die Int-Konstante: Die ist nämlich (knapp) größer als 231-1 und sorgt für einen Overflow. Das sorgt dann beim Umwandeln von String -> Int für einen Fehler (bzw. die Umwandlung wird nicht akzeptiert). Da muss ich wohl einen größeren Datentyp verwenden und erst danach mit Overflow zu 32bit casten

    In der learn1hSkill() hast du den Fehler quasi erkannt, mir war nicht bewusst, dass Identifier auch mit Ziffern anfangen können (und ich halte das auch eher für merkwürdig). Hab ich jetzt erlaubt und nur reine Zahlenfolgen als Identifier verboten.

    Das Update kommt dann morgen irgendwann, mit dem Pfade-Fix.

  4. Beiträge anzeigen #4 Zitieren
    Knight Commander Avatar von Neconspictor
    Registriert seit
    Jan 2009
    Beiträge
    2.749
     
    Neconspictor ist offline
    Parsiphae sieht interessant aus. Damit kann man sich das nervige und zeitfressende zSPY INFO-Logging sparen, wenn man eigentlich nur mal den Code checken will. Ich werd's auf alle Fälle mal austesten

  5. Beiträge anzeigen #5 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Parsiphae 0.2.2
    • --src kommt jetzt auch mit Pfaden auf der selben Ebene zurecht (d.h. parsiphae.exe --src Gothic.src funktioniert)
    • Parsiphae akzeptiert jetzt auch zu große Integer
    • Identifier können auch mit einer Zahl beginnen


    Wenn ich die .exe bzw. .zip runterlade, erkennt Windows Defender die als Virus (Trojan:Script/Cloxer.D!cl), das scheint aber ein False Positive zu sein: VirusTotal

    Wer sicher gehen möchte, kann das Programm auch selber kompilieren, mit installierter Rust-Toolchain braucht es dazu nur cargo build --release.

  6. Beiträge anzeigen #6 Zitieren
    Ritter Avatar von Degenerated
    Registriert seit
    Aug 2014
    Beiträge
    1.982
     
    Degenerated ist offline
    Sieht sehr interessant aus!

    Da du ja auch Code-Generation auf der Liste hast, wäre unterwegs auch möglich den AST auszugeben?

    Ich schreibe übrigens ab und an immer mal wieder an einem Daedalus-Decompiler in Rust. Wäre nur nicht immer die Zeit so knapp

  7. Beiträge anzeigen #7 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Degenerated Beitrag anzeigen
    Sieht sehr interessant aus!

    Da du ja auch Code-Generation auf der Liste hast, wäre unterwegs auch möglich den AST auszugeben?

    Ich schreibe übrigens ab und an immer mal wieder an einem Daedalus-Decompiler in Rust. Wäre nur nicht immer die Zeit so knapp
    Ja, das macht das ganze aber wesentlich langsamer :P

    Ich füge nachher mal ein Flag ein, um den AST auszugeben. Alternativ kannst du auch in der processor.rs einfach die Zeile 23 auf
    Code:
    Ok(ref ast) => println!("{:#?}", ast),
    ändern, du scheinst die Rust-Toolchain ja installiert zu haben. Dann wird bei Single-File-Input der AST ausgegeben haben (und bei --src müsstest du irgendwo einen Fehler einfügen, dann wird von allen Dateien der AST ausgegeben. Aber dann dauert es locker 10-20x so lange, selbst wenn man nach NUL schreibt).


    Tell me about it, ich hab mich vor meiner Bachelorarbeit gedrückt und die Hälfte meines Urlaubs verbraucht um Parsiphae halbwegs release-fertig zu machen. Jetzt ist aber zwangsläufig mal wieder die Uni dran, bevor ich damit weiter mache

    Edit: Mal ein Beispiel, wie das dann aussieht:

    input.txt
    Code:
    func int foo(var int bar, var int baz) {
        var int local, local2; local2 = 17;
        /* Block-Comment */
    
        3+6*2<<2 || 1;
    
        return min(local2, 0);
    };
    AST:
    Code:
    AST {
        declarations: [
            Func(
                Function {
                    name: Identifier {
                        name: foo
                    },
                    typ: Identifier {
                        name: int
                    },
                    params: [
                        VarDeclaration {
                            typ: Identifier {
                                name: int
                            },
                            name: Identifier {
                                name: bar
                            },
                            array_size: None
                        },
                        VarDeclaration {
                            typ: Identifier {
                                name: int
                            },
                            name: Identifier {
                                name: baz
                            },
                            array_size: None
                        }
                    ],
                    body: [
                        VarDeclarations(
                            [
                                VarDeclaration {
                                    typ: Identifier {
                                        name: int
                                    },
                                    name: Identifier {
                                        name: local
                                    },
                                    array_size: None
                                },
                                VarDeclaration {
                                    typ: Identifier {
                                        name: int
                                    },
                                    name: Identifier {
                                        name: local2
                                    },
                                    array_size: None
                                }
                            ]
                        ),
                        Ass(
                            Assignment {
                                var: VarAccess:  local2,
                                op: Eq,
                                exp: Int(
                                    17
                                )
                            }
                        ),
                        Exp(
                            Binary(
                                BinaryExpression {
                                    op: Or,
                                    left: Binary(
                                        BinaryExpression {
                                            op: Plus,
                                            left: Int(
                                                3
                                            ),
                                            right: Binary(
                                                BinaryExpression {
                                                    op: Multiply,
                                                    left: Int(
                                                        6
                                                    ),
                                                    right: Binary(
                                                        BinaryExpression {
                                                            op: LSL,
                                                            left: Int(
                                                                2
                                                            ),
                                                            right: Int(
                                                                2
                                                            )
                                                        }
                                                    )
                                                }
                                            )
                                        }
                                    ),
                                    right: Int(
                                        1
                                    )
                                }
                            )
                        ),
                        ReturnStatement(
                            Some(
                                Call(
                                    Call {
                                        func: Identifier {
                                            name: min
                                        },
                                        params: [
                                            Identifier(
                                                VarAccess:  local2
                                            ),
                                            Int(
                                                0
                                            )
                                        ]
                                    }
                                )
                            )
                        )
                    ]
                }
            )
        ]
    }
    Ich denke es sollte klar sein, dass diese Repräsentation nicht stable ist.
    Geändert von Lehona (26.07.2018 um 20:23 Uhr)

  8. Beiträge anzeigen #8 Zitieren
    Veteran
    Registriert seit
    Jan 2012
    Beiträge
    681
     
    Frank-95 ist offline
    That is a very nice tool, thank you lehona! I will try it as soon as I start scripting again

  9. Homepage besuchen Beiträge anzeigen #9 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
     
    Dada ist offline
    Hallöchen
    Ich habe Parsiphae auch mal durchlaufen lassen und ich muss sagen: Fix ist es wirklich
    Leider scheint der Parser noch nicht mit... wie nennt man das?... verketteten Funktionen zurecht zu kommen.

    Folgende Zeile wird mit einem "Missing Semicolon" bemängelt:

    Code:
    var int returnStateR; returnStateR = MEM_KeyState(MEM_GetKey("keyRest"));
    Ich vermute, das liegt an MEM_GetKey(), da das normalerweise ja eine eigene Funktion ist.

  10. Beiträge anzeigen #10 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Ne, lag am Namen der Variable: Parsiphae hat (fälschlicherweise) versucht, das als Return-Statement zu parsen. Ist schon behoben, dafür gibt es jetzt 3 Keywords (var, if, return) die nicht als Bezeichner verwendet werden können.

  11. Homepage besuchen Beiträge anzeigen #11 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
     
    Dada ist offline
    Okay, das heißt also, um das Problem zu umgehen, müsste ich die Variable "nur" umbenennen? Entschuldige meine Langsamkeit, die Hitze macht mir zu schaffen

    Edit: Vielleicht einmal mal ausprobieren... Gut, so funktioniert's also
    Edit2: Sehr schön, 2.35 Sekunden. Das ist ordentlich
    Geändert von Dada (28.07.2018 um 17:37 Uhr)

  12. Homepage besuchen Beiträge anzeigen #12 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Coole Sache. Wie ist die Lizenz?
    Sowas hab ich für Spine schon lange gesucht. Ideal wäre natürlich, wenn am Ende wirklich eine dat rauspurzeln würde, aber selbst so schon extrem hilfreich Und steht ja auf der ToDo-Liste

  13. Beiträge anzeigen #13 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Bonne6 Beitrag anzeigen
    Coole Sache. Wie ist die Lizenz?
    Sowas hab ich für Spine schon lange gesucht. Ideal wäre natürlich, wenn am Ende wirklich eine dat rauspurzeln würde, aber selbst so schon extrem hilfreich Und steht ja auf der ToDo-Liste
    Guter Gedanke, hab jetzt die MIT-Lizenz hinzugefügt. Du kannst Parsiphae natürlich gerne in Spine einbauen - brauchst du da irgendwelche Schnittstellen oder reicht es dir, den Output zu parsen?


    .dat kommt, irgendwann...

  14. Homepage besuchen Beiträge anzeigen #14 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Guter Gedanke, hab jetzt die MIT-Lizenz hinzugefügt. Du kannst Parsiphae natürlich gerne in Spine einbauen - brauchst du da irgendwelche Schnittstellen oder reicht es dir, den Output zu parsen?


    .dat kommt, irgendwann...
    Muss es mir noch genau anschauen. Ich denk die exe eingebunden (also im Ordner rumliegen) macht grad am meisten Sinn, dann kann man das einfach updaten, ohne Spine updaten zu müssen.

    Output parsen sollte auch gut passen, sieht ja gut lesbar und einheitlich aus.

    Evtl. wären Fehler odes ganz praktisch? Würde die später Die Suche vielleicht einfacher machen.
    Und hast du vor auch potenzielle Fehlerquellen wenigstens als Warning auszugeben? Zb sowas wie Ai_Output mit nicht leerem Untertitel, was ja dann in der AI Queue landet, aber nicht angezeigt wird.

    EDIT: Was ich an Parsiphae auch praktisch finde, ist, dass man jetzt viel einfacher automatisierte Tests machen kann, ob Scripts kompilieren. Lässt sich vermutlich auch für Linux kompilieren, oder?
    Geändert von Bonne6 (29.07.2018 um 21:27 Uhr)

  15. Beiträge anzeigen #15 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Bonne6 Beitrag anzeigen
    Muss es mir noch genau anschauen. Ich denk die exe eingebunden (also im Ordner rumliegen) macht grad am meisten Sinn, dann kann man das einfach updaten, ohne Spine updaten zu müssen.

    Output parsen sollte auch gut passen, sieht ja gut lesbar und einheitlich aus.

    Evtl. wären Fehler odes ganz praktisch? Würde die später Die Suche vielleicht einfacher machen.
    Und hast du vor auch potenzielle Fehlerquellen wenigstens als Warning auszugeben? Zb sowas wie Ai_Output mit nicht leerem Untertitel, was ja dann in der AI Queue landet, aber nicht angezeigt wird.

    EDIT: Was ich an Parsiphae auch praktisch finde, ist, dass man jetzt viel einfacher automatisierte Tests machen kann, ob Scripts kompilieren. Lässt sich vermutlich auch für Linux kompilieren, oder?
    Warnings würde ich schon ausgeben (gibt ja genug legales Daedalus, was ein Warning verdient hat), allerdings sind Untertitel Kommentare/Whitespace und werden überhaupt nicht erfasst von Parsiphae.
    Insgesamt hab ich mir noch nicht so viel Gedanken darüber gemacht, ich denke das ich da ein Konzept finde, sobald ich ein wenig mehr daran gearbeitet habe.

    Ich benutze nichts Windows-spezifisches in dem Code, ich muss also eigentlich nur ein anderes Host-Triple auswählen beim Kompilieren. Ich kann mich nachher mal am Cross-Compilen versuchen und sonst werf ich mein Linux an.
    Wie kommt's, dass du 'n Linux-Build brauchst? Für CI?

  16. Homepage besuchen Beiträge anzeigen #16 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Warnings würde ich schon ausgeben (gibt ja genug legales Daedalus, was ein Warning verdient hat), allerdings sind Untertitel Kommentare/Whitespace und werden überhaupt nicht erfasst von Parsiphae.
    Insgesamt hab ich mir noch nicht so viel Gedanken darüber gemacht, ich denke das ich da ein Konzept finde, sobald ich ein wenig mehr daran gearbeitet habe.
    Okay, war nur so ein Gedanke. Hatte irgendwo mal eine Liste angefangen mit potenziellen Fehlerquellen, wäre es sicher längerfristig wert ein paar Checks für einzubauen.

    Zitat Zitat von Lehona
    Ich benutze nichts Windows-spezifisches in dem Code, ich muss also eigentlich nur ein anderes Host-Triple auswählen beim Kompilieren. Ich kann mich nachher mal am Cross-Compilen versuchen und sonst werf ich mein Linux an.
    Wie kommt's, dass du 'n Linux-Build brauchst? Für CI?
    Ja, genau, mein CI-Server läuft unter Linux. Wobei ich zumindest für die öffentlichen Projekte auf GitHub auch AppVeyor nehmen könnte, dann kann ich's auch unter Windows testen

  17. Beiträge anzeigen #17 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Bonne6 Beitrag anzeigen
    Okay, war nur so ein Gedanke. Hatte irgendwo mal eine Liste angefangen mit potenziellen Fehlerquellen, wäre es sicher längerfristig wert ein paar Checks für einzubauen.
    Hui, hast du die noch? Klingt nützlich.


    Zitat Zitat von Bonne6 Beitrag anzeigen
    Ja, genau, mein CI-Server läuft unter Linux. Wobei ich zumindest für die öffentlichen Projekte auf GitHub auch AppVeyor nehmen könnte, dann kann ich's auch unter Windows testen
    Wie gesagt, sollte kein Problem sein. Vermutlich muss ich nur die SRC-Logik anpassen und da Windows auch / als Pfad-Trenner schluckt, muss ich vermutlich nichtmal was plattformspezifisches einbauen.

  18. Beiträge anzeigen #18 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Habs auch mal über meine Skripte laufen lassen.
    Funktioniert super. Danke fürs Tool.

    Parsed 1095 files
    No syntax errors detected!
    parsing took 1.456 seconds

  19. Beiträge anzeigen #19 Zitieren
    Local Hero Avatar von Mark56
    Registriert seit
    Sep 2010
    Beiträge
    254
     
    Mark56 ist offline
    Build under Mac, but doesnt seem to work.

    Code:
    ./target/debug/parsiphae --src "/Users/marekk/Dropbox/scripts/Content/Gothic.src"
    Parsed 0 files
    No syntax errors detected!
    parsing took 0.025 seconds
    Did some debug, directory separator difference causes that.. Did PR fixing that.
    Geändert von Mark56 (09.08.2018 um 15:55 Uhr)

  20. Beiträge anzeigen #20 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Thank you for submitting a PR. This should probably fix the problems on Linux as well (I'll test it later).

    P.S.: Build as --release, otherwise it takes ages to parse the scripts.

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide