Beiträge von Da_Chrissi

    So ganz verstanden hab ich den Zusammenhang zwischen den beiden Heightmaps nicht.
    Die Form des Geländes ist ok, aber der Baubereich ist etwas suboptimal (siehe Bild) :D
    Ich bin jetzt erstmal damit beschäftigt die Inseln vom Spiel nochmal genauer zu analysieren.


    Warum er keine Chunks sieht habe ich nicht rausgefunden, könnte aber evtl. mit dem Baubereich zusammenhängen.
    Das die maximale Höhe deutlich größer ist liegt daran, dass auf den fertigen Inseln alle Berge eigene Objekte (wie Bäume oder Ressourcen) sind. Die Heightmap darunter ist nur ein flacher Hügel. So bekommt man viel eckigere Felsen hin, ohne die Auflösung der Heightmap aufzublähen. Wie hoch es am Ende wirklich ist hängt vom verwendeten Grauton ab.

    Ich habe leider keine Möglichkeit das für Anno 2070 zu testen, prinzipiell sollte es aber das gleiche sein.


    Das Programm erstellt eine komplette .isd Datei, dabei ist aber nur das nötigste ausgefüllt. Das heißt es wird im GOP Manager die Heightmap und der PathBlockerLayer eingetragen und bei <Terrain> die <ChunkMap> mit Werten befüllt. Sämtliche Deko-Elemente(Flüsse, Naturobjekte etc) lasse ich momentan weg. Das ärgste was im Moment fehlt sind die Coast Building Lines, aber da brauch ich wohl noch etwas bis ich die verstanden hab. Die automatisch zu erzeugen ist glaub ich auch nicht so ganz einfach.


    Ein Fehler ist mir gerade noch aufgefallen: Ich habe vergessen das Programm am Ende zu pausieren, das heißt das Fenster geht sofort zu wenns fertig ist. Eigendlich sollte es offenbleiben, damit man eine Rückmeldung über den Erfolg bekommt :uag
    Das ist in der aktuellsten Version behoben.

    Ja, es funktionert :)
    Im moment kann ich damit ausschließlich die Heightmap bearbeiten. Das Ergebnis wird in eine neue .isd Datei geschrieben. Die restlichen Eigenschaften muss man dann per Hand editieren.


    Der Source Code ist auf Github zu haben: https://github.com/DaChrissi/Anno1404_Island_Editor, Download ist hier zu finden.
    Dort werd ich das Program in Zukunft (hoffentlich)regelmäßig updaten.


    Zur Verwendung: Mit der Bildbearbeitungssoftware eurer Wahl ein neues Bitmap-Bild anlegen. Die Größe muss ein vielfaches von 16 sein.
    Das Bild sollte in Grautönen bemalt werden(aber es reicht auch der Rotkanal :D). Wenn man Gimp o.a. benutzt kann man am Ende einen Weichzeichenfilter drüberlaufen lassen, damit die Übergänge abgerundet werden. Mit der Stärke muss man da etwas rumexperimentieren.
    Dadurch das Graustufen verwendet werden sind die Werte für alle drei Farbkanäle gleich. Ein Wert von 47 entspricht der normalen Bauhöhe.
    Wichtig ist, dass man keinen Alphakanal abspeichert, sonst kann die Software das Bild nicht lesen. Am besten mit 24 bit pro Pixel (R8 G8 B8) speichern.


    Um die Inseldatei zu erzeugen einfach das Bild als input.bmp im gleichen Ordner wie das Programm speichern und das Programm ausführen. Das Ergebnis steht dann in output.isd


    Ich hab mich an einer Insel versucht, das Ergebnis ist unten zu sehen. Mit etwas mehr Zeit und künstlerischem Geschick als ich lassen sich damit hoffentlich ganz ansehnliche Sachen malen.


    Im Moment ist wirklich alles außer der Heightmap fix im code. Mehrere Texturen muss man händisch einfügen. Einen Vorteil hat die xml-artige struktur der Dateien: sämtliche "Whitespaces" (Leerzeichen, Tabs, Zeilenumbrüche) werden vom Spiel ignoriert. Das Program fügt Tabs und Zeilenumbrüche ein damit die Datei in einem Texteditor übersichtlicher aussieht.


    Nächste Schritte sind wohl Texturen und CoastBuildingLines, damit man auch ein Kontor hinstellen kann. Die Texturen könnte man höhenabhängig machen: alles unterm Wasserspiegel wird Unterwassertextur, alles um die Bauhöhe rum wird Gras, dazwischen Strand.
    Alternativ liest man für jede Textur ein extra Bild ein, das die Deckkraft angibt. Ich weiß nicht was besser ist, aber ich tendiere dazu erstmal das erste einzubauen. Bei den CoastBuildingLines hab ich noch keine Idee, wie man sie automatisch erzeugen könnte.

    Ich glaube das Format der Heightmaps verstanden zu haben:


    Die große besteht aus 2 byte langen Ganzzahlen mit Vorzeichen.
    Die 17*17 Quadrate bestehen aus 4 byte langen Gleitkommazahlen .


    Dabei steht in der großen 1024 mal der Wert aus den kleinen Quadraten. Zum Beispiel: Meeresboden ist bei -4096 in der großen, -4 in der kleinen. Bauhöhe ist bei 716 in der großen, 0,7 in der kleinen. So weit ich's verstanden hab bestimmt die große Map die Höhe auf der Gebäude platziert werden und die kleine die Form des Geländes. Da scheints noch mehr Einschränkungen zu geben, aber damit hab ich mich nicht so genauer beschäftigt.


    Ein Wert von 100 auf der kleinen Map ist gerade noch in der weitesten Kamera zu sehen. Die höchsten Berge sind irgendwo zwischen 10 und 15. Ich hab ein Bild angehängt, auf dem die Höhen zu sehen sind. Links ist 5, die mitte ist 10, rechts ist 15.


    Zur Umrechnung gibt es teilweise tools im Netz (hier für Ganzzahlen(ohne Vorzeichen), hier für Gleitkommazahlen), allerdings ist das nicht das Optimum, wenn man z.B. einen schönen Übergang möchte. Außerdem muss man dabei beachten, dass die Zahlen verdreht in den Dateien liegen: Bauhöhe ist CC 02, allerdings muss man 02 CC im Umrechner eingeben, um die korrekte Antwort, 716, zu bekommen. Genauso ists mit den Gleitkommazahlen, 30 33 33 3F aus der Datei wird zu 3F 33 33 30.


    Ich werd versuchen ein Programm zu schreiben, das ein Bild in Graustufen einliest, und daraus eine Inseldatei mit ausgefüllten Heightmaps erzeugt. Damit sind maximal 256 Abstufungen möglich, da ist die Frage was ist die maximale höhe, die man realistischerweise verwenden wird? Mit allem höher als 15 stößt man in der nahen Kamera zusammen. Man könnte zwar ein Plateu auf der Höhe 100 erstellen, aber das dann nur aus der fernen Kamera zu bebauen stell ich mir schlimm vor. Mein Vorschlag wäre ein Bereich von -4 (Meeresboden) bis ~20, damit hat man eine Abstufung von ca 0,1.

    Echt toll was ihr da gebastelt habt!
    Mich hat über Ostern Anno wieder in seinen ban gezogen, irgendwie bin ich da über das ganze Thema Inseleditor gestoplert, und jetzt lässts mich nicht mehr los.


    Ich denke bei der interpretierung der heightmaps von Judekw ist ein Fehler: es handelt sich m.E. um 2 byte integerzahlen. Bei dem Tool hier sind auch einige Textdateien zur erklärung dabei, unter anderen wird das Format der .isd Dateien erklärt. Dort wird von short-ints bei der heightmap gesprochen, was 2 byte pro Wert entspricht. Hier wird also einfach die Höhe für einen Punkt in 2 byte (ich vermute vorzeichenbehaftet) kodiert.


    Ich kann das nur anhand von Anno 1404 überprüfen, aber nach einem Blick in die Dateien klingt das plausibel. Das würde erklären, warum der Blaukanal so wenig einfluss hat und warum die Werte nicht linear angeordnet sind.


    Im Moment hab ich nicht genug Zeit, aber am Wochenende werd ich mir das nochmal genauer anschauen.


    Gruß,
    Christian