View previous topic :: View next topic |
Author |
Message |
Marix Forum-Nutzer
Joined: 30 May 2001 Posts: 1017
Location: Germany
|
Posted: 29.03.2016, 14:30 Post subject: Die Erklärung für das „Levels don't match“-Problem |
|
|
Hi,
Jetzt habe selbst ich als alter Descentforum-Hase mal einen Topic bei dem mir völlig unklar wo ich den hinpacken soll, also landet er mal hier im vermischten.
Vor kurzem wurde der Code der Engine von Serious Sam veröffentlicht, und Icculus, einer der Leute die damals bei Loki gearbeitet haben, twittert recht aktiv über alles Mögliche was ihm auffällt während er den Code des Linuxcodes jetzt da wieder integriert. Dabei postete er auch eine Checksummenroutine, worauf ich mal nachgefragt habe, ob das auch das D3-Problem wäre, und bekam darauf die Erklärung serviert, wieso das bei D3 nicht funktioniert: https://twitter.com/icculus/status/714466925871505409.
Hier meine grobe Übersetzung: D3 prüft ob die Level auf den verschiedenen Rechnern übereinstimmen nicht anhand der eigentlichen Leveldatei auf der Platte, sondern erst nachdem das Level beim Laden verarbeitet wurde. Hier sind allerdings Fließkommazahlen beteiligt, und das rechnen mit Fließkommazahlen ist aufgrund der beschränkten Genaugkeit mit der Rechner arbeiten nicht so richtig deterministisch. Das hat zurvolge, dass verschiedene Builds zu verschiedenen Ergebnissen kommen. Das trifft nicht nur Linux vs. Mac vs. Windows, sondern z.B. auch Debug vs. Release-Builds, oder Builds die mit verschiedenen Versionen des gleichen Compilers gemacht wurden.
Wie schön häufiger behauptet gibt es dafür auch einen Fix der aber leider erst in 1.5 steckt. Ob der jemals kommt…
Hilft uns zwar alles nichts, aber trotzdem cool mal zu wissen, was da falsch gemacht wurde.
_________________ „Der einzige Weg, die Grenzen des Möglichen zu finden, ist ein klein wenig über diese hinaus in das Unmögliche vorzustoßen.“
--Arthur C. Clarke |
|
Back to top |
|
|
D.Cent Forum-Nutzer
Joined: 05 Mar 2006 Posts: 508
Location: Stuttgart
|
Posted: 29.03.2016, 22:41 Post subject: |
|
|
Es gibt doch schon lange einen "endgültigen" Fix
Es ist ein Patch, der das D3-Binary unter Linux so patcht, dass die FPU (Floating Point Unit) die gleiche Genauigkeit wie unter Windows verwendet.
Das Ganze ist hier zu finden: http://descentbb.net/viewtopic.php?f=1&t=9855&start=60
Last edited by D.Cent on 29.03.2016, 22:58; edited 1 time in total |
|
Back to top |
|
|
Marix Forum-Nutzer
Joined: 30 May 2001 Posts: 1017
Location: Germany
|
Posted: 30.03.2016, 13:03 Post subject: |
|
|
Gut zu wissen. Aber es ist ja wohl nicht nur ein problem korrekt eingestellter Genauigkeiten. Wenn ein Compiler die Operationen anders sortiert kommen andere Werte raus bei Floating Point. Spannende frage ob man den originalen Compiler auf einem aktuellen System überhaupt noch zum laufen bekommt. Ansonsten dürfte es unmöglich sein aus den Quellen nochmal ein kompatibles Binary zu erzeugen, außer man geht halt wieder auf antike Win98-Systeme.
_________________ „Der einzige Weg, die Grenzen des Möglichen zu finden, ist ein klein wenig über diese hinaus in das Unmögliche vorzustoßen.“
--Arthur C. Clarke |
|
Back to top |
|
|
D.Cent Forum-Nutzer
Joined: 05 Mar 2006 Posts: 508
Location: Stuttgart
|
Posted: 30.03.2016, 13:32 Post subject: |
|
|
Als ich XInstaReap geschrieben habe, konnte ich das Windows-Binary mit MSVC6 unter WINE erstellen (eingestellt auf Windows XP). Auf originalem Windows habe ich es noch nicht probiert, aber ich vermute, dass dieser alte Compiler im Kompatibilitätsmodus wohl funktionieren würde. Ein komplettes Binary zu erzeugen, wäre aber vermutlich weitaus schwieriger, da alle Libraries und Includes ebenfalls auf dem alten Stand von 1999 sein müssten.
|
|
Back to top |
|
|
Marix Forum-Nutzer
Joined: 30 May 2001 Posts: 1017
Location: Germany
|
Posted: 31.03.2016, 13:10 Post subject: |
|
|
Das kompilieren von Mods ist eigenltich auch nicht das Problem. Diese müssen ja nur die korrekte ABI aufweisen. Von daher kann man die auch mit aktuellen Compilern übersetzen, dieser muss nur das ABI kompatibel erstellen, was sich aber normallerweise einstellen lässt.
Ein korrekter Code für die Prüfsumme würde selbst mit aktuellisierten Includes das gleiche Ergebnis liefern. Das Level ist ja das gleiche. Das Problem ist, das mit einem Floating-Point-Code selbst wenn alles auf dem alten Stand ist, ein aktuellerer Compiler wenig Chancen hätte kompatiblen Code zu erzeugen. Man muss wirklich den gleichen nehmen, und die gleichen Optionen.
_________________ „Der einzige Weg, die Grenzen des Möglichen zu finden, ist ein klein wenig über diese hinaus in das Unmögliche vorzustoßen.“
--Arthur C. Clarke |
|
Back to top |
|
|
Sanwa5000 Forum-Nutzer
Joined: 29 Dec 2002 Posts: 186
Location: Braunschweig
|
Posted: 04.04.2016, 00:18 Post subject: |
|
|
Ist die Kommunikation der Clients verschlüsselt? Sonst könnte man ja hier einen einfachen Proxy bauen, der die Zahlen mal eben "ebnet".
_________________ Deep World - www.syberflex.de - Descent 1/2 Remake |
|
Back to top |
|
|
Do_Checkor Administrator
Joined: 19 Nov 2000 Posts: 7770
Location: Oldenburg (Oldb.)
|
Posted: 04.04.2016, 19:01 Post subject: |
|
|
Kurze Frage aus den Hinterreihen:
Wurde das hier übersehen / nicht verstanden:
D.Cent wrote: | Es gibt doch schon lange einen "endgültigen" Fix
Es ist ein Patch, der das D3-Binary unter Linux so patcht, dass die FPU (Floating Point Unit) die gleiche Genauigkeit wie unter Windows verwendet.
Das Ganze ist hier zu finden: http://descentbb.net/viewtopic.php?f=1&t=9855&start=60 |
oder hab ich einfach nur das Problem nicht verstanden?
|
|
Back to top |
|
|
Floyd Forum-Orakel
Joined: 20 Mar 2001 Posts: 2912
Location: Dresden, Germany
|
Posted: 04.04.2016, 20:39 Post subject: |
|
|
Der Patch ist zu einfach. Der Weg ist das Ziel
|
|
Back to top |
|
|
|