Danke euch beiden!
Den alten Thread zur Rivaner Warenschau hatte ich tatsächlich nicht auf dem Schirm. Umso schöner, dass Crystal die zusätzlichen Waren und die 20 % schon damals empirisch so sauber ermittelt hatte.
Dass man den Tsa bei einem normalen Spieldurchlauf kaum zu Gesicht bekommt, ist natürlich etwas schade. Da steckt offenbar mehr Mechanik drin, als die meisten Spieler jemals mitbekommen.
Vielleicht ist das auch der Grund, weshalb die Texte zur Warenschau nicht mehr vollständig in Textboxen umgesetzt und illustriert wurden. Wahrscheinlich dürfte das im normalen Spielverlauf kaum sinnvoll testbar gewesen sein, liegt der Tsa so weit außerhalb der üblichen Spielzeit, dass die Warenschau beinahe schon den Charakter eines Easter Eggs bekommt.
Wie man das Zeitverstreichen stattdessen sinnvoller in die Geschichte hätte einbauen können, sodass man solche späteren Ereignisse auch bei einem normalen Spieldurchlauf erlebt, ist mir allerdings gerade noch nicht ganz klar. Hat da jemand Ideen?
Wie die Händlerpreise gerundet werden
Ich habe mir inzwischen auch die Rundung der Händlerpreise genauer angesehen.
Die folgenden Regeln wurden empirisch aus den im Spiel vorkommenden Preisen abgeleitet und durch Gegenproben bestätigt. Sie stammen ausdrücklich nicht aus einem Reverse Engineering der eigentlichen Berechnungsroutine.
Dadurch bleiben einzelne Grenzfälle offen, wenn im Spiel schlicht kein geeigneter Preis vorkommt, mit dem man sie testen könnte. Bei der Heller-Rundung lässt sich beispielsweise der beobachtete Übergang sehr gut eingrenzen, aber nicht mit letzter Sicherheit sagen, an welcher internen Zahl genau die Routine zwischen Auf- und Abrunden wechselt.
Grundprinzip
Zunächst wird der Grundpreis eines Gegenstands mit dem Preisaufschlag beziehungsweise Rabatt des Händlers verrechnet. Anschließend wird dieser berechnete Preis gerundet.
Dabei bleibt die ursprüngliche Münzeinheit des Gegenstands erhalten. Ein Preis in Hellern bleibt also ein Hellerpreis, ein Preis in Silbertaler ein Silberpreis und ein Preis in Dukaten ein Dukatenpreis.
Die folgenden Rundungsregeln beziehen sich zunächst auf den Verkauf durch den Händler, also auf die Preise, zu denen der Spieler Waren beim Händler kauft.
Nach bisherigem Teststand gelten folgende Regeln:
Beim Einkauf durch den Händler, also wenn der Spieler Waren an den Händler verkauft, wird zunächst Itemgrundpreis × Händlerpreisniveau × 0,5 berechnet. Der Händler zahlt also grundsätzlich nur die Hälfte des entsprechenden Händlerpreises.
Anders als beim Verkauf durch den Händler gibt es dabei keine besondere Rundungsgrenze bei kleinen Hellerbeträgen. Der berechnete Wert wird grundsätzlich abgerundet, mindestens jedoch auf 1 der jeweiligen Münzeinheit.
Einige Beispiele beim Kauf beim Händler
Der gerundete Händlerpreis ist danach verbindlich
Interessant ist, dass die Rundung nicht nur für die Anzeige verwendet wird.
Bei einem größeren Einkauf beziehungsweise Warenkorb, beim Feilschen und auch beim Verkauf über den GGST-Verteiler wird mit den bereits einzeln ermittelten und gerundeten Händlerpreisen weitergerechnet.
Der ungerundete Zwischenwert aus Grundpreis × Preisniveau spielt danach keine Rolle mehr.
Was beim Händler als Preis angeschrieben steht, bildet also auch die Grundlage für die weiteren Berechnungen.
Feilschen
Beim Feilschen wird die Summe der Händlerpreise zunächst in Heller umgerechnet und der ausgehandelte Rabatt beziehungsweise Aufschlag darauf angewendet.
Dabei unterscheidet sich die Rundung je nach Richtung des Handels:
Wird ein Gegenstand in die GGST-Ablage gelegt, erhält man die Hälfte seines gerundeten Händlerpreises zurück.
Dafür wird der Preis in Heller umgerechnet, halbiert und anschließend abgerundet.
Beispiel: 3 H Händlerpreis ergeben 1 H Rücknahmepreis.
Noch eine kleine Korrektur zu Pergors Aufstellung zum Schwert des Artherion
Pergors damalige Werte für das Schwert des Artherion passen bis auf zwei Ausnahmen zu diesen Rundungsregeln.
Die beiden abweichenden Angaben bei Gorm Doldrecht und Yeto Orbegast habe ich deshalb noch einmal direkt im Spiel überprüft.
Der tatsächliche Preis über den Gegenstandsverteiler beträgt bei beiden:
Als Nächstes: Übernachtungspreise
Als Nächstes schaue ich mir die Übernachtungspreise noch einmal genauer an. Pergor hatte die Preise der Rivaner Herbergen bereits hier zusammengestellt:
https://www.crystals-dsa-foren.de/showth...hp?tid=416
Interessanterweise lassen sich die Suitepreise offenbar tatsächlich direkt aus einer weiteren Spalte der LOC_QUAL.DAT ableiten. Für Schlafsaal (immer 5H) und Einzelzimmer scheint die Berechnung dagegen anders zu funktionieren.
Auch bei den Speisen gibt es noch eine Unstimmigkeit: Am Ufergraben und Blauer Kvill besitzen nach meinen bisherigen Erkenntnissen dasselbe Preisniveau, Pergors gemessene Essenspreise unterscheiden sich jedoch. Das möchte ich mir deshalb ebenfalls noch einmal genauer ansehen und berichten, sobald ich die Berechnung nachvollziehen kann.
Den alten Thread zur Rivaner Warenschau hatte ich tatsächlich nicht auf dem Schirm. Umso schöner, dass Crystal die zusätzlichen Waren und die 20 % schon damals empirisch so sauber ermittelt hatte.
Dass man den Tsa bei einem normalen Spieldurchlauf kaum zu Gesicht bekommt, ist natürlich etwas schade. Da steckt offenbar mehr Mechanik drin, als die meisten Spieler jemals mitbekommen.
Vielleicht ist das auch der Grund, weshalb die Texte zur Warenschau nicht mehr vollständig in Textboxen umgesetzt und illustriert wurden. Wahrscheinlich dürfte das im normalen Spielverlauf kaum sinnvoll testbar gewesen sein, liegt der Tsa so weit außerhalb der üblichen Spielzeit, dass die Warenschau beinahe schon den Charakter eines Easter Eggs bekommt.
Wie man das Zeitverstreichen stattdessen sinnvoller in die Geschichte hätte einbauen können, sodass man solche späteren Ereignisse auch bei einem normalen Spieldurchlauf erlebt, ist mir allerdings gerade noch nicht ganz klar. Hat da jemand Ideen?
Wie die Händlerpreise gerundet werden
Ich habe mir inzwischen auch die Rundung der Händlerpreise genauer angesehen.
Die folgenden Regeln wurden empirisch aus den im Spiel vorkommenden Preisen abgeleitet und durch Gegenproben bestätigt. Sie stammen ausdrücklich nicht aus einem Reverse Engineering der eigentlichen Berechnungsroutine.
Dadurch bleiben einzelne Grenzfälle offen, wenn im Spiel schlicht kein geeigneter Preis vorkommt, mit dem man sie testen könnte. Bei der Heller-Rundung lässt sich beispielsweise der beobachtete Übergang sehr gut eingrenzen, aber nicht mit letzter Sicherheit sagen, an welcher internen Zahl genau die Routine zwischen Auf- und Abrunden wechselt.
Grundprinzip
Zunächst wird der Grundpreis eines Gegenstands mit dem Preisaufschlag beziehungsweise Rabatt des Händlers verrechnet. Anschließend wird dieser berechnete Preis gerundet.
Dabei bleibt die ursprüngliche Münzeinheit des Gegenstands erhalten. Ein Preis in Hellern bleibt also ein Hellerpreis, ein Preis in Silbertaler ein Silberpreis und ein Preis in Dukaten ein Dukatenpreis.
Die folgenden Rundungsregeln beziehen sich zunächst auf den Verkauf durch den Händler, also auf die Preise, zu denen der Spieler Waren beim Händler kauft.
Nach bisherigem Teststand gelten folgende Regeln:
- Heller: Bei kleinen Beträgen wird auf den nächsten vollen Heller aufgerundet. Ab dem beobachteten Grenzbereich um 6 H wird dagegen auf volle Heller abgerundet.
- Silbertaler: Liegt das Ergebnis unter 1 S, wird auf 1 S aufgerundet. Ab 1 S werden Nachkommastellen abgeschnitten.
- Dukaten: Liegt das Ergebnis unter 1 D, wird auf 1 D aufgerundet. Ab 1 D werden Nachkommastellen abgeschnitten.
Beim Einkauf durch den Händler, also wenn der Spieler Waren an den Händler verkauft, wird zunächst Itemgrundpreis × Händlerpreisniveau × 0,5 berechnet. Der Händler zahlt also grundsätzlich nur die Hälfte des entsprechenden Händlerpreises.
Anders als beim Verkauf durch den Händler gibt es dabei keine besondere Rundungsgrenze bei kleinen Hellerbeträgen. Der berechnete Wert wird grundsätzlich abgerundet, mindestens jedoch auf 1 der jeweiligen Münzeinheit.
Einige Beispiele beim Kauf beim Händler
- 5,8 H ergeben 6 H
- 6,8 H ergeben 6 H
- 10 H bleiben 10 H und werden nicht zu 1 S umgewandelt
- 0,2 S ergeben 1 S
- 0,7 S ergeben 1 S
- 8,7 S ergeben 8 S
- 0,8 D ergeben 1 D
- 9,87 D ergeben 9 D
- Ein rechnerischer Gegenwert von 9 D 8 S 7 H wird bei einem in Dukaten geführten Preis als 9 D angezeigt
- 999 D bleiben selbstverständlich 999 D
Der gerundete Händlerpreis ist danach verbindlich
Interessant ist, dass die Rundung nicht nur für die Anzeige verwendet wird.
Bei einem größeren Einkauf beziehungsweise Warenkorb, beim Feilschen und auch beim Verkauf über den GGST-Verteiler wird mit den bereits einzeln ermittelten und gerundeten Händlerpreisen weitergerechnet.
Der ungerundete Zwischenwert aus Grundpreis × Preisniveau spielt danach keine Rolle mehr.
Was beim Händler als Preis angeschrieben steht, bildet also auch die Grundlage für die weiteren Berechnungen.
Feilschen
Beim Feilschen wird die Summe der Händlerpreise zunächst in Heller umgerechnet und der ausgehandelte Rabatt beziehungsweise Aufschlag darauf angewendet.
Dabei unterscheidet sich die Rundung je nach Richtung des Handels:
- Beim Kauf wird der errechnete Preis auf den nächsten vollen Heller aufgerundet.
- Beim Verkauf wird der errechnete Preis auf den nächsten vollen Heller abgerundet.
- Effektiv werden höchstens 30% Preisänderung berücksichtigt, auch wenn die Textausgabe beim Feilschen einen höheren Wert meldet.
- Bei sehr hohen Beträgen existiert außerdem der bereits an anderer Stelle im Programmcode nachvollzogene Überlauffehler. Entscheidend ist dabei nicht eine feste 1000-Dukaten-Grenze des Warenwerts, sondern der errechnete Feilschbetrag: Erreicht dieser 0x8000 Heller = 327 D 6 S 8 H, wird er durch eine fehlerhafte Vorzeichenerweiterung falsch interpretiert. Bei ausgeschöpften 30% tritt der Fehler daher bei einem Warenwert von ungefähr 1092 D auf. Dieser Fehler ist bereits bekannt und wurde hier ausführlicher untersucht: https://crystals-dsa-foren.de/showthread...#pid171672
Wird ein Gegenstand in die GGST-Ablage gelegt, erhält man die Hälfte seines gerundeten Händlerpreises zurück.
Dafür wird der Preis in Heller umgerechnet, halbiert und anschließend abgerundet.
Beispiel: 3 H Händlerpreis ergeben 1 H Rücknahmepreis.
Noch eine kleine Korrektur zu Pergors Aufstellung zum Schwert des Artherion
Pergors damalige Werte für das Schwert des Artherion passen bis auf zwei Ausnahmen zu diesen Rundungsregeln.
Die beiden abweichenden Angaben bei Gorm Doldrecht und Yeto Orbegast habe ich deshalb noch einmal direkt im Spiel überprüft.
Der tatsächliche Preis über den Gegenstandsverteiler beträgt bei beiden:
- Gorm Doldrecht: 46 D 5 S
- Yeto Orbegast: 46 D 5 S
Als Nächstes: Übernachtungspreise
Als Nächstes schaue ich mir die Übernachtungspreise noch einmal genauer an. Pergor hatte die Preise der Rivaner Herbergen bereits hier zusammengestellt:
https://www.crystals-dsa-foren.de/showth...hp?tid=416
Interessanterweise lassen sich die Suitepreise offenbar tatsächlich direkt aus einer weiteren Spalte der LOC_QUAL.DAT ableiten. Für Schlafsaal (immer 5H) und Einzelzimmer scheint die Berechnung dagegen anders zu funktionieren.
Auch bei den Speisen gibt es noch eine Unstimmigkeit: Am Ufergraben und Blauer Kvill besitzen nach meinen bisherigen Erkenntnissen dasselbe Preisniveau, Pergors gemessene Essenspreise unterscheiden sich jedoch. Das möchte ich mir deshalb ebenfalls noch einmal genauer ansehen und berichten, sobald ich die Berechnung nachvollziehen kann.

