[Bug] Frage an die Experten: Leben totgesagte wirklich länger?

Autar

Senior Member
Registriert
28.01.2008
Beiträge
188
Hallo das ist kompliziert, aber ich glaube auch relativ witzig.

Bisher konnte ich alle Bugs in meiner Installation selbst beheben, aber jetzt habe ich einen Fall wo ich an meine Grenzen stoße.

Ich habe während des Besuchs von TDDs Riatavin korrumpierte Speicherstände. Im grunde habe ich das selbe Problem was Karin in diesem Tread beschreibt: https://kerzenburg.baldurs-gate.eu/showthread.php?t=41032

Bevor ich angefangen habe zu Suchen hatte ich bereits mit dem Area CRE checker (http://www.shsforums.net/topic/48614-area-cre-checker/)
DD7000.ARE nach den .CREs gecheckt und das Testprogramm hat mir alle gespawnt ohne Probleme.

Als ich dann Karins Tread gelesen habe habe viel mir folgendes auf:

Alle Speicherstände nach Riatavin sind Korrumpiert, die vorher gehen (leider liegt der nächste lange zurück). So beschreibt es Karin auch in ihrem Tread.

Nun mein Gedanke ist folgender, könnte es sich nicht hier um unseren guten alten Beregost-Crash handeln? Ich meine es führt genau zu dem selben Ergebnis und Riatavin ist im Grunde doch eine Kopie von Beregost. Damals war das Problem - wenn ich mich recht erinnere in der .ARE.

Vielleicht irre ich mich aber auch, deshalb die Frage, kann da was dran sein, oder ist das Blödsinn?
 

White Agnus

Senior Member
Registriert
05.09.2008
Beiträge
5.088
Hmm, das Beregost Problem könnte es tatsächlich sein, probier doch einfach mal den Beregost Crash Fixer. ;)
 

Autar

Senior Member
Registriert
28.01.2008
Beiträge
188
Hi, danke für die Antwort :)

Daran hatte ich bereits gedacht, hab es nun auch getestet, das Problem ist das der in der .SAV wohl die AR3300 (Beregost in BG1) (AR6700 in BGT) prüft und fixt, während In TDD das Gebiet in der DD3300 ist.

Ich habe mir nochmal diesen Tread durchgelesen: http://www.shsforums.net/topic/44746-beregost-crashes-solved/

Den code könnte man vermutlich abändern, dass man die DD3300 einsetzt und somit TDD fixen. (RoT habe ich gegenwärtig nicht installiert aber hat, wenn ich mich recht erinnere auch das Gebiet).

Damit wäre das Problem eventuell für künftige installationen gefixt.

Aber um das zu testen - und mir viele Stunden Spielzeit zu retten - wäre es ideal erstmal zu bestätigen ob es wirchlich daran liegt.

Der Code von Ascension64 funktioniert aber nur für Spielstände die vor dem betreten von Beregost stammen, weil das Spiel das Gebiet bei betreten in die .SAV speichert.

Nun fallen mir 2 Möglichkeiten ein:

1. die brutalere wäre den code von Ascension64 - wie oben beschrieben - abgeändert auf meine installation anzuwenden dann die gefixte DD3300 in meine .SAV zu packen (ich bin kein Experte, aber in NI eine .SAV nehmen und "decompress" dann in der ".000" des saves in meinem BG2 Verzeichnis die DD3300.ARE mit der korregierten aus dem ovverride ersetzen und wieder mit NI "compress").

Allerdings, weiss ich nicht, ob ich durch das ersetzen der .ARE ich mir sonst was in meinem Spielstand kaputt mache.

2. Die Alternative wäre ob man den fix nicht auch in NI durchführen kann, aber da ich kein Modder bin, hätte ich gerne eine Bestätigung ob das so richtig wäre:

Wenn ich in NI die 4 in dem screenshot markierten Werte ändere:

http://fs1.directupload.net/images/150202/gs4bpd9t.png

Bzw die ersten 3 weil der vierte keine neuen Werte hat, also zB das 243 in 233 und das 326 in 302; Würde es dann dem code von Scension entsprechen?
 

Taimon

Infinity Engineer
Registriert
25.11.2001
Beiträge
1.501
Ich würde eher die zweite Möglichkeit in Betracht ziehen.
Die ARE-Datei im Spielstand hat zusätzliche Objekte und andere Daten, die beim Überschreiben einfach verlorengehen würden.

Allerdings: Mach' zuerst ein Backup deines Spielstandes! NI hat früher Probleme gehabt, beim Speichern von Änderungen an Objekten. (Die Datei wurde nicht wieder in der korrekten Reihenfolge zusammengebaut.)
Ich weiß nicht, wie das aktuell aussieht. Wahrscheinlich würde ich die Werte sogar nur mit einem Hex-Editor modifizieren. (Also NI nur zum Entpacken bzw. Packen nutzen und die Änderungen außerhalb machen. Aber du kannst es ja trotzdem erst einmal mit NI ausprobieren.)
 

Autar

Senior Member
Registriert
28.01.2008
Beiträge
188
Die Abänderung mit NI hat in der Tat nicht funktioniert. Die gute Nahricht ist aber wenn ich die DD3300.ARE komplett aus dem .SAV lösche lädt der Spielstand. Also liegt es vermutlich wirklich an der Sache.

Ich habe die Datei mit NI entpackt und habe mir sie in einem Hex-Editor angeschaut aber ich verstehe da nur Bahnhof.

Ohne zu viel bitten zu wollen, nur wenn es wie ich denke wenige Minuten in anspruch nimmt, kann jemand versuchen die Änderungen mit einem Hexeditor vorzunehmen?

http://www.fastshare.org/download/DD3300.ARE

Hier nochmal der Code von dem was geändert werden könnte:

Code:
BACKUP ~BeregostFix~

AUTHOR ~Asc64~

BEGIN ~BeregostFix~

//AR3300, FW3300, AR6700 (BG1, BGTutu, BGT)
COPY_EXISTING ~AR6700.ARE~ ~override~
  READ_LONG 0xA4 nDoors
  READ_LONG 0xA8 offDoors
  READ_LONG 0x7C offPoints
  READ_LONG 0x80 nPoints

  SET i = 0

  FOR (i = 0; i < nDoors; i += 1) BEGIN
    READ_ASCII ( %offDoors% + %i% * 0xC8 + 0x20 ) DoorId
    PATCH_IF ( "%DoorId%" STRING_EQUAL "DOOR3304" ) BEGIN
      READ_LONG ( %offDoors% + %i% * 0xC8 + 0x48 ) idxPointsImpededOpen
      READ_SHORT ( %offDoors% + %i% * 0xC8 + 0x4C ) nPointsImpededOpen

      SET j = 0
      FOR (j = %idxPointsImpededOpen%; j < %idxPointsImpededOpen% + %nPointsImpededOpen%; j += 1) BEGIN
        READ_SHORT ( %offPoints% + %j% * 0x4) x
        READ_SHORT ( %offPoints% + %j% * 0x4 + 0x2) y

        PATCH_IF ( x = 243 && y = 326 ) BEGIN
          WRITE_SHORT ( %offPoints% + %j% * 0x4) 233
          WRITE_SHORT ( %offPoints% + %j% * 0x4 + 0x2) 302
        END

        PATCH_IF ( x = 243 && y = 327 ) BEGIN
          WRITE_SHORT ( %offPoints% + %j% * 0x4) 233
          WRITE_SHORT ( %offPoints% + %j% * 0x4 + 0x2) 304
        END

        PATCH_IF ( x = 242 && y = 325 ) BEGIN
          WRITE_SHORT ( %offPoints% + %j% * 0x4) 232
          WRITE_SHORT ( %offPoints% + %j% * 0x4 + 0x2) 304
        END

        PATCH_IF ( x = 233 && y = 303 ) BEGIN
        END

      END
    END
  END

Ich weiss ja nichtmal ob das hilft also bitte nur wenn es wirklich nicht zuviel Mühe macht, sonst werde ich schon einen Weg finden jetzt wo immerhin der Spielstand lädt ;)
 
Zuletzt bearbeitet:

Autar

Senior Member
Registriert
28.01.2008
Beiträge
188
Nein, klappt leider auch nicht. Danke dennoch für den Versuch.
Aber da das Löschen des Gebiets geklappt hat, konnte ich mir das Gebiet zurechtcheaten. Also ich hab das hingekriegt, woran es wirklich lag, weiss ich nicht, TDD scheint nicht mehr wirklich supported zu sein, also keine Ahnung ob es Sinn macht das da zu posten...
 

White Agnus

Senior Member
Registriert
05.09.2008
Beiträge
5.088
Hmm, hab mal den Beregost Crash Fixer neu kompiliert (sodass er auch auf DD3300 greift): http://www.whiteagnus.de/downloads/RiatavinCrashFixerTest.zip

Die Texte sind alle noch auf den normalen Beregost Crash Fixer ausgelegt (werd ich noch abändern falls gewünscht)

Der Beregost Fix von Ascension64 kann auch ganz einfach abgeändert werden, einfach

Code:
COPY_EXISTING ~AR6700.ARE~ ~override~

durch

Code:
COPY_EXISTING ~DD3300.ARE~ ~override~

ersetzen und zumindestens kamen bei mir keine Abstürze mehr... (natürlich darf man Riatavin noch nicht besucht haben...)
 
Oben