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

 

Ergebnis 1 bis 5 von 5
  1. Beiträge anzeigen #1 Zitieren
    Adventurer
    Registriert seit
    Oct 2017
    Beiträge
    61
     
    yukoz ist offline

    [bug] NavigationMap.xnav - limit to adding Nav_Zone and Nav_Path

    As I understand it, there is a limit to adding Nav_Zone and Nav_Path in Gothic 3.
    When I try to add more Nav_Zone and Nav_Path to Gothic 3, the game freezes and crashes.
    Is there a way to avoid this restriction?

    NavigationMap.xnav

  2. Beiträge anzeigen #2 Zitieren
    Moderator Avatar von George
    Registriert seit
    Sep 2010
    Beiträge
    678
     
    George ist offline
    Zitat Zitat von yukoz Beitrag anzeigen
    As I understand it, there is a limit to adding Nav_Zone and Nav_Path in Gothic 3.
    When I try to add more Nav_Zone and Nav_Path to Gothic 3, the game freezes and crashes.
    Is there a way to avoid this restriction?

    NavigationMap.xnav
    You are correct, there is such a restriction/bug in the game. But you are lucky, because I fixed that bug a long time ago, during my work for the Community Story Project.

    Here is my post from the internal CSP forum which describes the cause of the error:
    Ja ihr habt richtig gehört, ich habe den Bug gefunden und ihn auch beseitigen können.
    Der Fehler war nicht im NavigationMap Code, sondern auf viel abstrakterer Ebene.

    Es ist eine eigentlich ganz triviale Sache, es wurde an der falschen Stelle gespart, und zwar bei der Verweis-Zählvariable der Stringklasse. Diese wird intern zur Resourcenverwaltung verwendet, d.h. wenn ein neue Instanz dieses Strings erstellt wird, wird sie um eins erhöht, wenn eine Instanz zerstört wird, wird sie um eins erniedrigt. Wenn sie auf 0 fällt, wird der Basisstring freigegeben, und der von ihm belegte Speicher kann nun wieder für andere Sachen verwendet werden.

    Sie ist vom Typ unsigned short, welcher Zahlen im Bereich von 0 bis 65535 speichern kann.

    Beim Einlesen der NavigationMap wurden soviele Strings mit dem Inhalt gCNavZone_PS erstellt, dass der Verweiszähler den Maximalwert seines Wertebereichs überschritten hat. D.h. wenn der Verweiszähler auf 65535 steht und um eins erhöht wird, steht er anschließend wieder auf 0.

    Nach dem Einlesen wurde einige der gCNavZone_PS String Instanzen wieder zerstört, aber nicht alle. Aufgrund des Bereichsüberlaufs, erreichte der Zähler trotzdem den Wert 0, was dafür sorgte, dass der Basisstring freigegeben wurde.

    Instanzen eines Strings sind auf den Basisstring angewiesen, und funktionieren ohne diesen nicht richtig. Ich denke ihr könnt euch vorstellen, dass es nicht gut für die Stabilität des Systems ist, wenn die Instanzen eines Strings auf ihren Basisstring zugreifen, aber die Stelle im Speicher, an der er sich befinden sollte, inzwischen für etwas ganz anderes verwendet wird.

    In diesem Fall sorgte es dafür, dass der NavigationMap Code nicht mehr korrekt auf die NavZonen zugreifen konnte, und infolge dessen einen Guru verursachte.


    Nun zur Lösung des Problems...
    Naheliegend ist es den Typ des Verweiszählers auf unsigned int (Wertebereich von 0 bis 4294967295) zu ändern.
    Problem ist nur, dass der Verweiszähler an vielen Stellen im Code manipuliert/abgefragt wird, das zu ändern ist ein Riesenaufwand.
    Da ich keine andere Möglichkeit gesehen habe, habe ich mich trotzdem dran gemacht, und war dann letztendlich auch erfolgreich...
    Since there now seems to be a demand for this fix outside of the CSP, I'll make the effort to extract it from my CSP specific changes and release it separately.
    I should be able to get to this the next few days.

  3. Beiträge anzeigen #3 Zitieren
    Adventurer
    Registriert seit
    Oct 2017
    Beiträge
    61
     
    yukoz ist offline
    Zitat Zitat von George Beitrag anzeigen
    Since there now seems to be a demand for this fix outside of the CSP, I'll make the effort to extract it from my CSP specific changes and release it separately.
    I should be able to get to this the next few days.
    Thank you. Maybe it will be a good idea to cooperate with @Zandr and create another version of Unofficial Update Pack which will be contain all fixes and improvements from CSP.

  4. Beiträge anzeigen #4 Zitieren
    Moderator Avatar von George
    Registriert seit
    Sep 2010
    Beiträge
    678
     
    George ist offline
    Zitat Zitat von yukoz Beitrag anzeigen
    Thank you.
    Here you go
    Angehängte Dateien

  5. Beiträge anzeigen #5 Zitieren
    Adventurer
    Registriert seit
    Oct 2017
    Beiträge
    61
     
    yukoz ist offline
    Zitat Zitat von George Beitrag anzeigen
    Here you go
    Thank you.

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