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 3 von 34 « Erste 12345671014 ... Letzte »
Ergebnis 41 bis 60 von 668
  1. Beiträge anzeigen #41 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von ZeroLord Beitrag anzeigen
    auch möchte ich meinen dank ausprechen an deine super arbeit. ich finde die ninjapatches heben die modfähigkeit von gothic meiner meinung nach auf ein neues level. finde wirklich das diese methode der modbarkeit mehr aufmerksamkeit verdient. deshalb wünsche weiteres gutes gelingen un immer weiter so
    Danke! So mittlerweile ergeben sich ja schon ein paar mehr Ideen (und deren Umsetzung) für Patches.


    Zitat Zitat von ZeroLord Beitrag anzeigen
    cool danke. ist es möglich die werte per hexeditor oä anzupassen ?
    meine zu glauben das uriziel auch waffenshaden hatte der aber jetzt nicht existent ist.
    Wie gesagt kannst du das im Spiel über die Konsole mit edit focus.
    Die Werte sind allerdings exakt aus dem Original übernommen. Mich hat es auch etwas gewundert, dass Urziel scheinbar nur Magie- und Feuerschaden macht.


    Zitat Zitat von ZeroLord Beitrag anzeigen
    noch ne andere frage ist durch die ninja patches es technisch auch möglich
    objecte in der welt zu verändern zb der inhalt won truhen ?
    Ja, das geht problemlos. Das geht aber an der Idee von Ninja etwas vorbei, da Truhen oder andere Objekte in der Welt Mod-spezifisch sind und in anderen Mods höchstwahrscheinlich nicht existieren. Patches sollen das Spiel patchen, unabhängig von der derzeitigen Mod. Alle Eingriffe in Storyelemente sollten daher nach wie vor traditionell als Mod erstellt werden.
    Geändert von mud-freak (15.01.2021 um 11:33 Uhr)

  2. Beiträge anzeigen #42 Zitieren
    Waldläufer Avatar von SnowySchoko
    Registriert seit
    Sep 2015
    Ort
    Deutschland - Berlin
    Beiträge
    195
     
    SnowySchoko ist offline
    Ich frage mich warum noch niemand auf die Idee gekommen ist

    Eines DER wahrscheinlich sinnvollsten Features die man (hoffentlich) via "Ninja" realisieren kann, wäre es doch das Lebensmittel Prozentual Heilen.
    Das ginge dann wahrscheinlich nicht für alle Lebensmittel da Modifikationen ja gerne auch mal neue hinzufügen oder alte ersetzen, doch für gebratenes Fleisch würde mir das schon reichen ^^

    Leider bin ich was Gothic Modding angeht ein Nichtskönner deswegen würde ich dies gerne an interessierte Könner weitergeben.

    Desweiteren wäre meine Frage ob man so Bugfixes implementieren kann?
    Zum Beispiel das verdoppeln von Steintafeln oder ähnliches.

    //Vielleicht werde ich diesen Post von mal zu mal modifizieren mit neuen Ideen, wie Zocker01

    EDIT:

    Kaum zeit vergangen ein zwei Videos gesehen und schon duzten neue Ideen xD

    - Zum einen wäre schön wenn man das verbesserte Brat/Koch System zur Verfügung stellt. Also dass man 1, 5, 10 oder alle Fleisch keulen braten kann.
    - Dann ein System wie in TES Oblivion und KO das man warten kann.
    - Dann ein Monster counter (Fand ich für meinen Teil immer extrem Interessant).
    - Zudem fand ich zum Beispiel aus der Modifikation "Legend of Ahssûn" das System extrem interessant und logisch, das man durch das nutzten einer Waffe den Umgang damit verbessert.
    - Wie aus der Modifikation "Xeres' Rückkehr" die Auto speicher Funktion
    - sowie der Erfahrungspunkte Balken
    - Zudem fände ich es schön wenn man sowie in "The Returning 2" die neuen Idle Animationen dazu bekommt, für den Helden und andere NPC´s evtl. auch.
    Geändert von SnowySchoko (12.09.2018 um 00:48 Uhr) Grund: Neues

  3. Beiträge anzeigen #43 Zitieren
    Kämpfer Avatar von ZeroLord
    Registriert seit
    Mar 2012
    Ort
    Ignadon
    Beiträge
    312
     
    ZeroLord ist offline
    hier einige vorschläge meinerseits: manaregeneration für g1 wär cool auch eine g1 version vom sprint mod wär toll und nicht zu vergessen health regen für g1 und auch g2
    🎵 ... Kampfkraft und Wendigkeit sind die Vorraussetzung für jeden Kämpfer ... 🎶

  4. Beiträge anzeigen #44 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    Hi. can u add other features like change color npc due to attitude or chest color like in g3?

  5. Beiträge anzeigen #45 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von pawbuj Beitrag anzeigen
    Hi. can u add other features like change color npc due to attitude or chest color like in g3?
    Yes, that is easily possible.
    Did you want to know if it is possible or are you asking me to do it?

  6. Beiträge anzeigen #46 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    thanks. I try do by myself. In case of any problem I will contact you.
    Geändert von pawbuj (21.09.2018 um 12:08 Uhr)

  7. Beiträge anzeigen #47 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von pawbuj Beitrag anzeigen
    thanks. I try do by myself. In case of any problem I will contact you.
    Great! Don't hesitate to post any intermediate progress and/or questions. I am happy to help.

  8. Beiträge anzeigen #48 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    Great! Don't hesitate to post any intermediate progress and/or questions. I am happy to help.

    Pls see below my trial with init.

    Seems I am doing something wrong cause not works.

    Gothic 1

    Code:
    const string NINJA_G1Patch_VERSION = "1.0";
    
    
    //======================================== 
    // Farbhandling 
    //======================================== 
    /* r      : Roter Farbanteil (0..255) 
     * g      : Grüner Farbanteil (0..255) 
     * b      : Blauer Farbanteil (0..255) 
     * a      : Alpha (0 = unsichtbar, 0..255) 
     * return : Fertiger zColor */ 
    func int RGBAToZColor(var int r, var int g, var int b, var int a) {
        if(!a){if(!b){if(!g){if(!r){return 1;};};};};
        return ((r&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_RED)
              |((g&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_GREEN)
              |((b&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_BLUE)
              |((a&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_ALPHA);
    };
    
    const int zCView_SetFontColor_offset = 7339392;    //6FFD80 thiscall(zCColor) 
    var int zamkniety;
    var int chest_value;
    func void Status_Chest()
    {
       var oCNpc her; her = Hlp_GetNpc(hero);
       var oCMobContainer chest; chest = _^(her.focus_vob);
       var oCMobDoor Door; Door = _^(her.focus_vob);  
       var oCMobLockable chest2;chest2 = _^(her.focus_vob);
       //var oCItem quest_item;quest_item = _^(her.focus_vob);
       //var oCMobInter patelnia; patelnia = _^(her.focus_vob);//_oCMobInter_conditionFunc
        var int col; var int ptr;
       
          if !(Hlp_Is_oCMobContainer(her.focus_vob) || Hlp_Is_oCMobDoor(her.focus_vob)){ return; };
          if !her.focus_vob { return; };
       
       if Hlp_Is_oCMobContainer(her.focus_vob)
       {       
            if (chest._oCMobLockable_bitfield & oCMobLockable_bitfield_locked)
            {
             zamkniety = 1;
             //chest._oCMobLockable_bitfield = oCMobLockable_bitfield_autoOpen;//otwiera chest !
             col = RGBAToZColor(255,0,0,255); //czerwony
             //************************************************************************************************
             /*
                 if (Hlp_Is_oCMobLockable(her.focus_vob)) 
                 && (STR_Len(chest2.pickLockStr) > 0)
                 && (zamkniety == 1)
                 {
                 //chest2._oCMobInter_conditionFunc = "NEED_SKILL"; // You probably need to use all caps
                 //Print("skrzynia zamknięta!");
                 };
                 */
            //**************************************************************************************************     
            }
            else
            {
             col = RGBAToZColor(255,180,0,255); //Orange
             if (zamkniety == 1)   
             {
                zamkniety = 0; 
                //Print("skrzynia otwarta!");     
                };
            };                       
            MEM_AssignContentInst (Chest,her.focus_vob);
            //MEM_AssignInst (Chest,her.focus_vob);
            if (chest.containList_next > 0)
            && (zamkniety == 0)//jeżeli zawartośc skrzyni jest większa od 0
            {         
            col = RGBAToZColor(255,180,0,255); //Orange
            //
            //chest_value = ConcatStrings ("Wartość skrzyni : ",(InttoString (chest.containList_next)));
            //PrintS (InttoString (chest_value);
            printchestxp ();
            }
            else if (chest.containList_next == 0)
            && (zamkniety == 0)//jeżeli zawartośc skrzyni jest pusta
               {
             col = RGBAToZColor(255,255,255,255); //white  
            };   
       }
       else if Hlp_Is_oCMobDoor(her.focus_vob)
       {
          if (Door._oCMobLockable_bitfield & oCMobLockable_bitfield_locked)
          {
                //chest._oCMobLockable_bitfield = oCMobLockable_bitfield_autoOpen;
                col = RGBAToZColor(255,0,0,255); //Orange zły
                zamkniety = 1;
                //Print("drzwi zamknięta!");   
          }
          else
          {
          col = RGBAToZColor(255,255,255,255);
                if (zamkniety == 1)   
                {
                //Print("drzwi otwarta!");   
               
                zamkniety = 0;       
                };   
          }; 
             
       };
        ptr = MEM_Alloc(4);
        MEM_WriteInt(ptr, col);
        CALL_IntParam(ptr);
        CALL__thiscall(MEM_ReadInt(screen_offset), zCView_SetFontColor_offset);
        MEM_Free(ptr); 
           
    };     
    
    func void SetChoiceBoxScale ()
    {
        var int ptr; ptr = MEM_ReadInt(MEMINT_oCInformationManager_Address+28);
        
        MEM_WriteInt (ptr+64, STR_ToInt (MEM_GetGothOpt ("VIDEO", "zVidResFullscreenY"))); 
        Print_GetScreenSize(); //Pobiera rozdzielczość ekranu      
    };
    
    func void UpdateStatus_FocusName() { 
    //const int zCView_SetFontColor_offset = 7339392;    //6FFD80 thiscall(zCColor) 
    
        var int col; 
        var int att; 
        //var int Trade_WEAPON_Mul;
        var oCNpc her; her = Hlp_GetNpc(hero); 
            if (Hlp_Is_oCNpc(her.focus_vob)) { 
                    var oCNpc  oth; oth = MEM_PtrToInst(her.focus_vob); 
                    att =  oth.attitude; //edit było pierwotnie
                    //att = Npc_GetAttitude (oth,hero);                
                        
                    if ( (!Npc_IsDead (oth))&&
                    ((Npc_IsInRoutine(oth, ZS_GUIDEPC) == TRUE)
                    ||(Npc_IsInRoutine(oth, ZS_FOLLOWPC) == TRUE)
                    ||(Npc_IsInRoutine(oth, ZS_FOLLOWMODE) == TRUE)) )
                    &&(STR_ToInt(MEM_GetModOpt("UPDATE_PACK", "ColoredNames_enabled")))                    
                    {
                    col = RGBAToZColor(128,255,255,255);  // niebieski partymemebr
                    }
                    else if 
                    (!Npc_IsDead (oth))                              
                    &&((att == ATT_FRIENDLY) || (oth.npctype == NPCTYPE_FRIEND)) 
                    && (!((self.id > 1357)&&(self.id < 1371)))//szaleni nowicjusze              
                    {      
                       col = RGBAToZColor(0,255,0,255); //zielony to przyjaciel  
                                               
                    } 
                    else if ( (!Npc_IsDead (oth))&&(att == ATT_ANGRY) 
                         {
                             
                            col = RGBAToZColor(255,180,0,255); //Orange zły
                    } 
                    else if ( (!Npc_IsDead (oth))
                    && (att == ATT_HOSTILE))
                    || ((self.id > 1357)&&(self.id < 1371))//szaleni nowicjusze
                   { 
                            col = Focusnames_Color_Hostile();
                            //col = RGBAToZColor(255,0,128,255); //czerwony wróg 
                    } 
                    else if(att == ATT_NEUTRAL) 
                    { 
                     col = RGBAToZColor(255,255,255,255); //Weiß 
                      }; 
                  
            } 
            else 
            { 
                    col = RGBAToZColor(255,255,255,255); //Weiß 
            };         
         
        var int ptr; ptr = MEM_Alloc(4); 
        MEM_WriteInt(ptr, col); 
        CALL_IntParam(ptr); 
        CALL__thiscall(MEM_ReadInt(screen_offset), zCView_SetFontColor_offset); 
        MEM_Free(ptr);  
           
         Status_Chest();    
         SetChoiceBoxScale();   
    };
    
    
     /*
     * Ensure that all necessary LeGo packages will be loaded without breaking already loaded LeGo packages
     *
     * Caution: When re-using this function elsewhere, it is important to rename it to prevent clashes!
     * Each ninja patch that needs it, has to have their own function with a unique name. Otherwise they cannot be stacked.
     */
    func void Ninja_G1Patch_MergeLeGoFlags(var int flags) {
        const int isInitialized = 0; // Once per session
        var   int isLoaded;          // Once per game save
    
        // Check if LeGo is already used and initialized by the underlying mod
        const int MOD_USES_LEGO = -1;
        if (MOD_USES_LEGO == -1) {
            MOD_USES_LEGO = _LeGo_Init; // Yes/No
        };
    
        // Only perform the merging of flags if LeGo is initialized by the underlying mod
        if (MOD_USES_LEGO) {
            // Already initialized packages
            var int currentFlags; currentFlags = _LeGo_Flags;
    
            // Find necessary packages that have not been initialized yet
            LeGo_InitFlags(flags);
            var int missingFlags; missingFlags = _LeGo_Flags & ~currentFlags;
    
            // Reset the loading indicator
            _LeGo_Loaded = isLoaded;
    
            // Re-initialize LeGo, but only with the remaining flags (so that nothing is done twice)
            if (!isInitialized) {
                LeGo_InitGamestart(missingFlags);
            };
            LeGo_InitAlways(missingFlags);
    
            _LeGo_Loaded = 1;
    
            // Finally update _LeGo_Flags (only for reference)
            LeGo_InitFlags(currentFlags | flags);
        } else {
            // Otherwise (LeGo is not used by the underlying mod), initialize it here
            LeGo_Init(flags);
        };
    
        // Set the indicators
        isInitialized = 1;
        isLoaded = 1;
    };
    
    
    /*
     * Init-function called by Ninja
     */
    func void Ninja_G1Patch_Init() {
        // This function is useful to ensure correct LeGo initialization without breaking the mod
        Ninja_G1Patch_MergeLeGoFlags(G1Patch_LEGO_FLAGS);
    
        // Initialize GFA
        HookEngineF(oCGame__UpdateStatus, 8, UpdateStatus_FocusName);
    };
    Geändert von pawbuj (22.09.2018 um 20:37 Uhr)

  9. Beiträge anzeigen #49 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von pawbuj Beitrag anzeigen
    Seems I am doing something wrong cause not works.
    You'll need to be more specific then this. Is it crashing? Is there an error? Is there no change in the game?

    From your code it looks like you are missing the constant G1Patch_LEGO_FLAGS. If it is not defined elsewhere and you have not received an error, Ninja is not parsing your scripts. How did you set it up?

  10. Beiträge anzeigen #50 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    You'll need to be more specific then this. Is it crashing? Is there an error? Is there no change in the game?

    From your code it looks like you are missing the constant G1Patch_LEGO_FLAGS. If it is not defined elsewhere and you have not received an error, Ninja is not parsing your scripts. How did you set it up?
    The problem is I do not see any changes. No errors, no crashes.

    My script of changes is OK, I have tested many times. I do some error with creating a vdf package or/and implementing with ur code..

    Could u look into file attached please?

    https://www.sendspace.com/file/bbbwat
    Geändert von pawbuj (23.09.2018 um 18:26 Uhr)

  11. Beiträge anzeigen #51 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von pawbuj Beitrag anzeigen
    The problem is I do not see any changes. No errors, no crashes.

    My script of changes is OK, I have tested many times. I do some error with creating a vdf package or/and implementing with ur code..

    Could u look into file attached please?

    https://www.sendspace.com/file/bbbwat
    Please have a look at the first and second post of this forum thread again. There is a detailed description/graph of the file tree within the VDF.
    Some of the files you have in the "Ninja" subdirectory have to be in the base directory.

    The name of the VDF has to match the patch name, i.e. "Ninja_G1PATCH.vdf".

    Some issues with the files:
    • The constant that I mentioned above is still missing.

    • Some of the LeGo-files have to be renamed:
      Code:
      __BUTTONS_NINJA_WORKAROUND.D  ->  __BUTTONS_NINJA_G1PATCH.D
      __VIEW_NINJA_WORKAROUND.D     ->  __VIEW_NINJA_G1PATCH.D
      The contents of the file HEADER.SRC has to be adjusted accordingly (lines 27 and 34).

    • You should remove the comment
      Code:
      // Initialize GFA
      in line 236 of NINJA_G1PATCH_INITCONTENT.D. This is very misleading.

  12. Beiträge anzeigen #52 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    Thank you for review but I can not fix one point. Rest is fixed.

    "The constant that I mentioned above is still missing."

    How to define that? just place above my code const int G1Patch_LEGO_FLAGS = 1; ?

    I can not find similar constant in other Ninja examples/
    Geändert von pawbuj (23.09.2018 um 19:28 Uhr)

  13. Beiträge anzeigen #53 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    That constant should hold the LeGo flags that you need to use your script.

    It is equivalent to the usual LeGo initialization:
    Code:
    LeGo_Init(/* ... */);
    Here it is important that you only use the packages that you really need.

  14. Beiträge anzeigen #54 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    That constant should hold the LeGo flags that you need to use your script.

    It is equivalent to the usual LeGo initialization:
    Code:
    LeGo_Init(/* ... */);
    Here it is important that you only use the packages that you really need.
    fOUND IT.

    I get errors like missing ";" so we are in good way.

    Thanks @Szapp

  15. Beiträge anzeigen #55 Zitieren
    Kämpfer Avatar von ZeroLord
    Registriert seit
    Mar 2012
    Ort
    Ignadon
    Beiträge
    312
     
    ZeroLord ist offline
    hätte noch einen vorschlag für ein ninja patch. ein patch der den hero 2hwaffen die 1h animationen nutzen lässt, ambesten per ingame toggle.
    marvin zeitanzeige ohne marvin modus.
    und falls möglich das händler nach dem ersten öffen des warenmenüs nicht gleich die besten waffen ausrüsten sondern bei ihren standard waffen bleiben.
    und falls möglich für g1 das dort das zaubercasting wie in g2 funktioniert, also ohne dauerdrücken etc.

    ps: acho übrigens im startpost fehlt noch eine verlinkung zum ninjypatch von benjaminfoo für den g2 sprintmod, nur der vollständigkeit halber.
    🎵 ... Kampfkraft und Wendigkeit sind die Vorraussetzung für jeden Kämpfer ... 🎶

  16. Beiträge anzeigen #56 Zitieren
    Ehrengarde Avatar von VaNaDiN
    Registriert seit
    Jul 2005
    Ort
    Rheine
    Beiträge
    2.612
     
    VaNaDiN ist offline
    Die Idee mittels eines Ninja Patches Heil-/ Manatränke und ggf. gebratenes Fleisch prozentual Leben regenerieren zu lassen finde ich super, das fehlt mir in einigen Mods doch sehr.

    Ich hätte da noch eine Frage zum "freien Zielen" und zwar habe ich das mit der Minimodbalance ausprobeirt (installation über Spine) und das Fadenkreuz sieht nie so aus wie in den Videos... Das freie Zielen "funktioniert" zwar, aber es sieht halt völlig anders aus und scheint mir in dessen Funktionalität eingeschränkt zu sein?

    Edit: Ein weiteres cooles Feature wäre ein Ninjapatch, der die Golemherzen aus Gothic1 wieder einfügt
    Geändert von VaNaDiN (10.10.2018 um 10:07 Uhr)

  17. Beiträge anzeigen #57 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zitat Zitat von VaNaDiN Beitrag anzeigen
    Ich hätte da noch eine Frage zum "freien Zielen" und zwar habe ich das mit der Minimodbalance ausprobeirt (installation über Spine) und das Fadenkreuz sieht nie so aus wie in den Videos... Das freie Zielen "funktioniert" zwar, aber es sieht halt völlig anders aus und scheint mir in dessen Funktionalität eingeschränkt zu sein?
    Das habe ich mal im entsprechenden Thread beantwortet.

  18. Beiträge anzeigen #58 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Ninja ist jetzt ein Jahr alt

    Am Moddertreffen stelle ich Ninja 2.0 vor. Dieses ist leichter zu handhaben und sichert bessere Kompatibilität. Danach überschwemme ich euch mit einem Haufen von spannenden neuen Patches, die nur darauf warten veröffentlicht zu werden.

  19. #59 Zitieren
    benjaminfoo
    Gast
     
    Wie die Zeit vergeht - freue mich schon auf Version 2.0 des Projekts (und die Patches)!

  20. Beiträge anzeigen #60 Zitieren
    Serima Avatar von Fisk2033
    Registriert seit
    Dec 2010
    Ort
    Dresden
    Beiträge
    5.797
     
    Fisk2033 ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    Ninja ist jetzt ein Jahr alt

    Am Moddertreffen stelle ich Ninja 2.0 vor. Dieses ist leichter zu handhaben und sichert bessere Kompatibilität. Danach überschwemme ich euch mit einem Haufen von spannenden neuen Patches, die nur darauf warten veröffentlicht zu werden.
    Glückwunsch zum Jubiläum.

Seite 3 von 34 « Erste 12345671014 ... 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