Beiträge von Judekw

    Ich habe nun ausreichend getestet und denke, die Geländemodellierung weitestgehend verstanden zu haben. Alle meine Beobachtungen und Tests wurden in 2070 gemacht. Ob sie 1 zu 1 auf 1404 übertragbar sind, kann ich nicht gewährleisten. Die zu Grunde liegende Mechanik sollte jedoch ähnlich sein.



    Also dann: Öffnet man eines der 17x17-Elemente, welches für die Geländedarstellung des entsprechenden Quadrats verantwortlich ist, begegnet man einem Farbwirrwarr, das zunächst für große Fragezeichen sorgt; so leicht ist kein System zu erkennen, dass bestimmten Farben bestimmte Geländehöhen zuweist.



    Tatsächlich scheint die Kombination der Farbkanäle ausschlaggebend zu sein. Dabei gibt es wohl eine Reihenfolge; die stärkste Auswirkung hat der Rotkanal, ihm untergeordnet ist der Grünkanal; ob diesem der Blaukanal untergeordnet ist, ist schwer zu sagen. Sollte dem so sein, ist die Auswirkung so gering, dass sie im Spiel nicht mehr sichtbar ist. Ich habe testweise den Blaukanal komplett entfernt, ohne eine sichtbare Änderung des Geländes festzustellen; wenn überhaupt modelliert er das Gelände nur in vernachlässigbarem Maße.


    Wie kann ich nun mein Gelände verändern? Ausschlaggebend ist die Farbe, die ich mische und an die gewünschte Koordinate setze. Wie bereits gesagt schauen wir uns zunächst den Rotkanal an. Für unsere Zwecke müssen wir ihn in zwei Hälften "teilen"; 0-127 und 128-255.
    0-127 ist für die Gestaltung des Geländes über dem Nullpunkt, also dem Meeresspiegel, verantwortlich, 128-255 für die Gestaltung des Geländes unter dem Nullpunkt. Dabei ist zu beachten, dass 0 und 128 (als Rotwert) genau die selbe Geländehöhe haben. Die "Reihenfolge" unserer Werte sieht also so aus: 255 (Maximale Geländetiefe) bis 128 (Nullpunkt), gleichwertig mit 0 (ebenfalls Nullpunkt), weiter bis 127 (Maximale Geländehöhe).
    Tatsächlich wird man die Werte 255 oder 127 nie gebrauchen. Der Wert 67 hebt das Gelände bereits auf eine Höhe, die selbst bei weitestem Rauszoomen nicht mehr ins Bild passt (es sei denn man hat Änderungen in der engine.ini gemacht, um weiter rauszoomen zu können).
    Für uns relevant sind die Rotwerte 194-128 und 0-66. 194 entspricht ungefähr der Höhe des Geländes am Meeresboden in 2070 (dem Meeresboden zwischen Inseln, nicht dem der Unterwasserinseln). Zur Modellierung der Küstenbereiche sind desweiteren die Werte 193, 192 und 191 anzuwenden. Dabei entspricht 191 nur noch einem Abstand von 0,5 Tile (also einem halben Feld) zum Nullpunkt; die Werte 190-129 sind demnach alle innerhalb dieses engen Bereiches von 0,5 Tile bis 128=Nullpunkt.
    Überirdisch verhält es sich ähnlich; Nullniveau ist bei Rotwert 0 (wer hätte es gedacht!), von 1-62 ist alles innerhalb des darüberliegenden halben Tiles, Rotwert 63 ist exakt 0,5 Tile. Weitere nutzbare Rotwerte sind 64, 65 und 66. 67 ist wie erwähnt bereits zu hoch.
    Was die Sache erschwert, ist der parabolische/hyperbolische (bin mit den Begriffen nicht so fit) Charakter der "Kurve"; Während die Werte 190-62 alle in dem 1 Tile um den Nullpunkt liegen, entspricht 194 etwa 20 Tile Tiefe (geschätzt) und 66 analog dazu 20 Tile Höhe. Die Abstände zwischen den Rotwerten sind also nicht äquidistant; 193 hat zum Beispiel nur noch eine Tiefe von geschätzt 5 Tile.
    Wie überbrücke ich nun diesen Abstand von 15 Tile, wenn ich nicht nur steile Wände oder Klippen haben möchte? Hier kommt der Grünkanal ins Spiel, der etwas einfacher funktioniert. Die Werte 0-255 ermöglichen Abstufungen zwischen zwei nebeneinander liegenden Rotwerten (z.B. 194 und 193). Auch hier sind die Abstände nicht linear; hätte ich beispielweise R194 G0 B0, R193 G128 B0 und R193 G0 B0 als Farben an nebeneinander liegenden Koordinaten, wäre die Höhe der mittleren Koordinate nicht exakt auf der Hälfte zwischen den anderen beiden Höhen. Ein zweites Beispiel: Ich habe R64 G0 B0 und R65 G0 B0; mögliche Zwischenwerte wären R64 G100 B0 oder R64 G140 B0; bei dem Grünkanal muss man eben nicht auf die Halbierung achten.


    Ich vermute, dass der Blaukanal nochmal auf dieselbe Weise abstufen kann, also zum Beispiel zwischen R64 G100 B0 und R64 G101 B0 als R64 G100 B50. Wie gesagt, ich würde den Blaukanal vernachlässigen, da der Effekt im Spiel nicht mehr wahrnehmbar ist.


    Ideal wäre es, eine Funktion herzuleiten, in die man die gewünschte Höhe eingibt (in Tile oder als 4096, wie das oft in den Spieldateien ist) und die den benötigten Farbwert ausgibt (oder umgekehrt). Wie ich mit der Gauss-Funktion aus 3 Punkten eine Parabel herleite, weiß ich, es handelt sich nur nicht um eine Parabel, sondern um irgendwas anderes absonderliches :rofl


    Bei der Geländegestaltung muss man also aufs Auge vertrauen. Die beiden einzigen sicheren Verbindungen zwischen Farbe und exakter Höhe sind R0 G0 B0 (bzw. R128 G0 B0) für Nullniveau und R63 G51 B51 für Bauniveau, was exakt 0,7 Tile entspricht bzw. 2867 (2867/4096=0,69999...).


    Das sind also die Erkenntnisse zur Geländegestaltung. Wie man seine Grafikprogramme nutzt, um die gewünschten Ergebnisse zu erzielen, bleibt jedem selbst überlassen. Mit dem beschriebenen Wissen lässt sich aber alles anstellen, was die Entwickler auch konnten, nur eben zeitaufwendiger.
    Transparenz der Texturen, wie gesagt, weiter direkt im Code bearbeiten.
    Die Farbzusammenhänge des GOP-Managers schaue ich mir als Nächstes an; zwar kann man jetzt schon neu gestaltete Inseln erstellen, indem man unwegsames Gelände noch komplett blockt; darin Wege und Baufläche zu schaffen, wäre ja aber noch toller :)


    Ich werde das ganze Prozedere abschließend nochmal von A bis Z zusammenfassen. Einige Seiten zuvor ist ja aber schon mal erklärt, wie man den Code in die Grafikdateien bekommt, daher verzichte ich nun auf eine Wiederholung.



    Liebe Grüße, Judekw

    So viel kann ich schon mal sagen: Den Farbcode für die Geländedarstellung habe ich beinahe entschlüsselt. Den Blaukanal kann ich noch nicht richtig zuordnen; habe ihn versuchsweise mal gelöscht und nur mit Rot und Grün das Gelände dargestellt - funktioniert problemlos. Was genau der Blaukanal nun bewirkt, ist mir daher noch nicht klar.



    Kopfzerbrechen bereitet mir eher die Darstellung des GOP-Managers. Wie ich da die verschiedenen Höhen errechne, erschließt sich mir noch nicht ganz.

    Ja klar, das Tut möchte ich nach wie vor machen. Bin aber selber noch am rumexperimentieren.



    Zu den Texturen: Die Transparenz der Textur wird an jeder Koordinate durch ein Byte (also 8 Bit) bestimmt. Soweit ich das in meinen Grafikprogrammen sehen kann, ist es jedoch nicht möglich, eine Abbildung als 8-Bitmap zu speichern; weitergehende Kenntnisse habe ich dazu nämlich auch nicht.
    Ich würde empfehlen, den CDATA-Code der Texturen nach wie vor per Hand im Hex-Editor zu editieren. Das ist verhältnismäßig einfach, da die Werte da nicht scheinbar kryptisch wie bei den Geländehöhen sind; 00 entspricht vollständiger Transparenz, die Textur ist an der Stelle nicht zu sehen, FF entspricht keiner Transparenz, also ist die Textur komplett da. Alle Werte dazwischen sind entsprechend möglich, 0-255 im Hexadezimalsystem.
    Meiner Meinung nach wäre hier das Hin- und Herkopieren des Codes zwischen .isd und Abbildung aufwändiger, als die Änderungen direkt im Code vorzunehmen :)

    Aber wenn sie es Benrath nennen, hätte man eine höhere Detailtreue erwarten können :)


    Dennoch schöne Idee, ich bin da auch gerne. Da ist immer das "Sommerfest der Kunstgeschichte" meines Instituts :)

    Hmm, na so richtig wie Benrath sieht das dann doch nicht aus :D


    Der Kunsthistoriker in mir findet das auch zeitlich etwas deplatziert, aber nun gut :D

    Heyho,


    Sorry, dass das mit dem Tutorial noch nicht geklappt hat. Schaue mir selbst gleich noch ein paar Inseln an und dann schreib ich ein kleines. Die Zahlen/Farben werden sich von 2070 zu 1404 allerdings unterscheiden, funktioniert in 1404 aber vermutlich analog.

    Tutorial gibt's frühestens morgen abend, hab noch ne Prüfung, für die ich lernen muss :/


    Für Texturen habe ich gerade nicht im Kopf, wieviele Zeichen da eine Koordinate beechreiben. Wenn es zwei sind, sind das 2 Bytegruppen, also muss die Bitmap auch 16 Bit sein; sind es 4 Zeichen, dann 32 Bit.

    WIR. WAREN. SO. DUMM.


    Warum? Ganz einfach. Die heißen Heightmaps, weil es Heightmaps sind :wand Folglich kann man den Code auch als Grafik darstellen.


    Was du da unten siehst, sind zum Ersten die grafische Darstellung des GOP-Managers und zum zweiten die grafische Darstellung des 3. Elements (und dann, um es hier hochzuladen, vergrößert). Wie du dir sicher denken kannst, hat das erste Bild die Auflösung, die den Feldern der Insel entsprechen, nämlich 240x240, das zweite selbstverständlich 17x17.



    Was ist jetzt so toll daran? Wenn man aus dem Code eine Bilddatei zaubern kann, GEHT DAS AUCH UMGEKEHRT!!! Und zwar relativ einfach:


    Ich erkläre es an meinem Beispiel: Ich wusste, dass meine Insel 240x240 Kästchen groß ist; der Code des GOP-Managers beschreibt diese 240x240 Kästchen, dabei werden für jedes Kästchen 2 Bytegruppen reserviert. Erstellst du nun eine Bitmap mit genau der Auflösung und speicherst sie als 16 Bit, X1 R5 G5 B5, ab (das geht z.B. unter GIMP, aber auch mit sonst fast jedem Bildbearbeitungsprogramm), hast du eine 115338 Byte lange Datei. Fällt dir was auf? Der GOP-Manager beansprucht genau 115200 Byte (240x240x2). Öffnest du nun die Bilddatei mit dem Hex-Editor, kannst du die 115200 hinteren Byte ersetzen (die ersten 138 sind einleitend bei einer 16 Bitmap). Speicherst du nun, sieht deine Bilddatei fortan so bunt aus wie da unten.
    Umgekehrt geht das genauso; du öffnest die Bitmap, kopierst die letzten 115200 Byte der Insel (das ist natürlich bei anderen Inselgrößen weniger oder mehr; daran muss sich auch die Bildgröße orientieren) wieder in den GOP-Manager... und fertig.




    Für die Heightmap des einzelnen Inselelements geht das genauso, nur dass die Bitmap immer 17x17 groß sein muss und als 32 Bit, X8 R8 G8 B8, gespeichert werden muss.


    Vorbei ist damit die Zeit des lästigen Code-Editierens. AB JETZT DARFST DU MALEN!



    Edit: leider kann man die Bilder hier nicht sehen, sind natürlich als Bitmap hochgeladen, vielleicht liegt es daran :)

    Dateien

    • Unbenannt3.bmp

      (115,34 kB, 169 Mal heruntergeladen, zuletzt: )
    • Unbenannt.bmp

      (65,67 kB, 119 Mal heruntergeladen, zuletzt: )

    Super, danke für die Erklärung, jetzt habe ich es verstanden :super :Blume


    Werde Freitag dann mal an meiner ersten "eigenen" Insel arbeiten, vorher habe ich noch 3 Prüfungen zu schreiben :/



    Ach übrigens: Wenn du im World-Editor deine Inseln aus vielen kleinen Quadraten zusammensetzen möchtest, solltest du folgendes bedenken: Jede der Inseln muss dann neu besiedelt werden und hat ein eigenes Warenlager; auch Einflussbereiche von Gebäuden enden am Inselrand. Das ist vielleicht doch nicht die ideale Lösung!

    Hey,


    leider wird mir ein solches Archiv nicht viel bringen, in 2070 sind die Höhen anders; aber für 1404 super!


    Allerdings habe ich in den Spieldateien eine quadratische Insel aus der Entwicklungsphase gefunden, die leicht zu analysieren sein wird, sodass ich mir ebenfalls ein solches Archiv erstellen kann :)


    Was du allerdings wissen könntest: Wenn ich erhöhtes Gelände haben möchte, auf dem auch Gebäude platziert werden können sollen, worauf muss ich da achten? Ist da im GOP-Manager ein anderer Eintrag nötig, als bei flachem, ebenerdigem Gelände? Darf mein Gelände auch wellig sein oder brauche ich da eine flache Fläche der Größe des Gebäudes (das frag ich, weil ich es auch cool fände, an leicht ansteigenden Hügelhängen zu bauen)? Ich weiß, dass das Aussehen des Geländes jeweils in den einzelnen Elementen geregelt ist und die "Baugenehmigung" im GOP-Manager; wenn ich aber nicht möchte, dass mein Gebäude im Gelände verschwindet (wie das auf deinem Bild mit dem Marktplatz war), sondern dem Geländeverlauf folgt, brauche ich dann auch im GOP-Manager verschiedene Höhen (die Frage ist, wo bestimmt wird, auch welcher Höhe das Gebäude gerendert wird)? Das ist das einzige, wo ich noch nicht durchblicke, alles andere habe ich verstanden.



    Edit: Die Inselwand ist vielversprechend, wie ist denn dort zum Beispiel die Bebauung möglich? Überall oder nur in den schmalen Abschnitten mit dem geraden Boden?


    Jetzt wo du schon eine ganze Menge der Höhen identfiziert hast, bräuchten wir "nur" jemanden, der Heightmaps in Hex-Code umwandeln könnte. Du würdest die Höhen für 1404 beisteuern, ich für 2070 und Voila: Man könnte aus den Grafikdateien sowohl den Code für den GOP-Manager, die einzelnen Elemente und die Texturen berechnen, man bräuchte nur die verschiedenen Zeichnungen.

    Aber ich hab das doch in 2070 gemacht, nicht in 1404! Da sind doch sowohl die Texturen, als auch die dazugehörigen Nummern unterschiedlich! Klar kann ich dir sagen, welche ich auf entsprechender Insel verändert (also ersetzt) habe (nämlich 29, 52, 70, 71, 72, 83, die zwei anderen habe ich gerade nicht im Kopf), das bringt dir nur Null Komma Nichts; vor allem, da die nun neuen Texturen von mir hinzugefügt worden sind und vorher gar nicht in 2070 existierten... Ich verstehe nicht, inwiefern du denkst, dass ich dir dabei helfen kann!?! Mit 1404 hat das doch gar nichts am Hut :hää :coffee

    Bei mir gehts auch weiter: http://fs2.directupload.net/images/150209/cfw35juz.jpg


    Die erste Südinsel in einem regulären Endlosspiel in 2070! Das weitere Abstimmen der Texturen und der Naturobjekte habe ich natürlich noch vor mir...


    Ach übrigens, ich muss etwas korrigieren, was ich zuvor gesagt habe. Die Reihenfolge der Bodentexturen wird von der SplatID jeder Textur in der groundtextures.xml bestimmt. Je höher die ID, desto weiter oben die Textur. Wenn du da etwas änderst, solltest du darauf achten, dass keine ID doppelt vergeben ist :)

    @Günter: Gibt es denn in 1404 nicht ohnehin schon eine unsichtbare Straße? Nämlich die, die unter den Brücken verläuft. Zumindest in 2070 ist eine solche unsichtbare Straße, bzw die Asset dafür, vorhanden. Check doch mal, ob das in 1404 auch der Fall ist, dann müsstest du auf keine der anderen Straßen verzichten ;)

    Soricida war schneller!


    Genau so musst du es machen: Wie Soricida erklärt hat, die Funktion öffnen. Dann in die erste Maske, die Suchmaske, den zu verändernden Teil eingeben, z.B. <TextureIndex>10</>. In die zweite Maske das eingeben, was rauskommen soll, z.B. <TextureIndex>12</>.
    Ich empfehle dringend, das auch in der Form "<TextureIndex>hier die GUID</>" zu machen. Wenn du nur "10" zu "12" ändern würdest, würdest du vermutlich versehentlich auch an anderen Stellen die 10en zu 12en ändern, und das will man ja nicht ;)

    Öhm das ist ne Sache von 5 Minuten? Benutze doch einfach die Ersetzen-Funktion eines Text-Editors. Beispiel: <TextureIndex>10</> (beispielsweise Gras) ersetzen durch <TextureIndex>12</> (beispielsweise Sand). Die tatsächlichen Nummern findest du in der groundtextures.xml.



    An den CDATA-Code der Texturen musst du gar nicht dran, der regelt nur die Transparenz an jeder Koordinate, nicht die Textur selbst.

    Hey,


    Aaaaalso: Das ist eigentlich ganz einfach. Für dieses Bild habe ich die Texturen in der groundtextures.xml unter data/config/engine geändert, sodass sich die ganze Spielwelt in südliches Klima verwandelt - im laufenden Spiel!
    Das ist natürlich nur ein Trick, soll so selbstverständlich nicht bleiben; ich möchte ja ein Savegame haben, wo mehrere Klimazonen nebeneinander existieren.


    Du kannst aber in der .isd-Datei deiner Insel einfach die GUIDs der bestehenden Texturen zu den GUIDs der von dir gewünschten Texturen ändern. Die GUID steht immmer hinter <TextureIndex>, bei <TextureIndex>0</> ist die GUID der Textur also 0. Mithilfe der groundtextures.xml kannst du herausfinden, welche GUID zu welcher Textur gehört (die sind in 1404 sicher anders verteilt als in 2070). Dann musst du die GUIDs in der .isd-Datei lediglich noch ändern und fertig.


    Das machst du für deinen Nordkontinent aber besser selber, könnte doch nicht kontrollieren, ob meine Änderungen einen Effekt haben :)

    Ja, ich denke, da werde ich rumprobieren müssen, was Schrägen, Anstiege und Plateaus angeht. Ich stelle mir nämlich leicht hügelige Inseln vor, auf denen dann auch die Gebäude und Straßen dem Anstieg folgen, sodass man in der "Skyline" ein wenig Höhenunterschiede hat.
    Wie ist es in 1404 bei deinen Inseln? Erscheinen Gebäude da nur komplett, wenn der Untergrund gerade ist, oder verschwinden die immer im Gelände wie auf dem Bild der Marktplatz?


    Für's Erste möchte ich ohnehin nur Inseln weiterer Klimazonen hinzufügen, da es in 2070 ja leider nur Nordinseln gibt. Damit habe ich auch schon experimentiert; das Ändern von Textur- und Objekt-GUIDs in den .isd-Dateien reicht da völlig aus :) Throwback: Ungewohnte Hitze auf dem S.P.I.R.I.T.-Gelände

    Hey, danke für deine Übersicht!


    Einiges hatte ich mir zwischenzeitlich schon angelesen und durchprobiert, dennoch ist deine Zusammenfassung sehr hilfreich!


    Leider scheint in 2070 einiges anders aufgebaut zu sein. Die Struktur der .isd-Dateien ist zwar gleich, die entsprechenden Werte für die Höhen sind aber unterschiedlich; beispielsweise gibt es keine Höhe für Wasser, da ja das Wasser in 2070 durch eine Physik-Engine berechnet wird. Stattdessen muss man auch das Gelände unter Wasser sculpten, da man das dank Unterwasser-Welt ja auch komplett sehen kann. Die Grenze des Wassers ist dort also nicht ganz so klar ersichtlich.


    Was sich mir aber nicht erschließt: Du sagst, dass die "Große Map", also was in der Heightmap des GOP-Managers steht, die Befahr- bzw. Bebaubarkeit regelt, aber nicht das Aussehen. Aber warum unterscheiden sich die Byte-Gruppen dann so sehr? Müssten da nicht eigentlich 3 Byte-Gruppen reichen, nämlich für Wasser, bebaubares Land und nicht bebaubares Land?
    Ich habe testweise eine quadratische Insel für 2070 erstellt mit dem IslandCreator; in der dazugehörigen .isd-Datei wird bei entsprechender "Großen Map" nur zwischen befahrbarem Wasser und bebaubarem Land unterschieden. Das sah dann so aus, dass ich in der Mitte des Codes ein Quadrat aus den Byte-Gruppen für Land hatte; an den Küsten hingegen hatte ich nicht so ein Kauderwelsch :D


    Bei den einzelnen Feldern hilft sicher nur ausprobieren. Ein höherer Wert der 4-Byte-Gruppe ist nämlich leider nicht gleichbedeutend mit höherem Gelände :/


    Zu dem Code der Texturen: Eine Byte-Gruppe beschreibt jeweils die Transparenz der entsprechenden Textur an der Koordinate. 00 steht für total transparent, also Textur an der Stelle nicht existent, bis FF, also untransparent und komplett da. In den Beispielcodes war der höchste Wert jedoch nur 99; das entspricht einer Transparenz von ca 40%.
    Welche Textur oben und unten ist, ist schwer zu sagen. Ich denke mal die Reihenfolge in dem Element macht's: Grundtextur 0 als Erstes und damit ganz unten, dann vermutlich Stein, Sand, Gras usw.


    Leider kann man in 2070 nicht so ausführlich testen wie bei 1404, da man keine eigenen Szenarien mit einem WE erstellen kann. Inseln in bestehenden Savegames zu ändern führt, habe ich vorher bereits mal getestet, zum CtD, selbst wenn man nur die GUID einer Textur ändert.
    Vielleicht muss ich zum Testen eines der bestehenden Szenarien in 2070 ersetzen; wie das geht, weiß ich allerdings auch noch nicht, nur, dass es geht. Zumindest weiß ich, wie man die Inseln später fürs Endlosspiel freischaltet, das ist ja schon mal was!


    Liebe Grüße, Judekw

    Hey, vielen Dank!


    Zum Anschauen der Inseln empfiehlt sich das sicher. Aber was ich nicht verstehe: Warum gibt es in dem Programm einen Editor-Reiter? Zumindest bei mir funktioniert da keine der Funktionen, obwohl doch extra eine Beschreibung, wie ich zB Punkte oder Polygone hinzufüge, vorhanden ist.


    Funktioniert das nur bei mir nicht oder hat drkohler den Editor damals einfach nicht vollendet? Wenn man Information auslesen kann, müsste man die theoretisch ja auch wieder in eine Datei einbringen können. Leider verstehe ich vom Programmieren selber nicht viel. Werde es daher analog zu Eurem Vorgehen manuell machen müssen. 2070-Inseln liest der Editor ohnehin nicht korrekt, leider.