Selbbstgebaute INSEL

  • 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

  • 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.

  • 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.

  • Hey, das ist ja der Wahnsinn, was du da programmiert hast! Muss ich ausprobieren, sobald ich Zeit habe. Hoffentlich funktioniert das auch für 2070.


    Gleitkommazahlen? Ganzzahlen mit Vorzeichen? Noch nie davon gehört! Tut mir leid, dass ich die daher nicht erkannt habe ;)


    Super, dass jetzt jemand dabei ist, der was von Programmieren versteht. Ich werde mit Hilfe deines Programms und deiner Erkenntnisse ein wenig weiterforschen, wie sich die Verhältnisse in 2070 fortsetzen, damit könnte man dein Programm ja erweitern. Aber eine Frage: Dein Programm erstellt sowohl den GOP-Manager als auch die Elemente, die für die Gestaltung verantwortlich sind, oder?


    Nach dem selben Prinzip müsste das doch eigentlich auch mit den Texturen funktionieren, wie du bereits gesagt hast. Ich fände es ganz gut, wenn man die Transparenz der Texturen ebenfalls mit dem Programm einlesen könnte, zum Beispiel so, dass man in den Ordner mehrere Dateien einfügen kann - wie heightmapinput.bmp und mehrere texturxxxinput.bmp (mit xxx für die Texturguid; die Reihenfolge der Texturen wird ja in der groundtextures.xml bestimmt, auch wenn es zunächst den Anschein hat, die Reihenfolge in der isd wäre ausschlaggebend) - und eine Datei, die isd, ausgegeben wird.

  • 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.

  • Hallo Da_Chrissi,


    tolle Arbeit :super Jetzt muss ich nur noch lernen, die Insel richtig zu malen. Das mit der Verteilung der Graustufen bzw welche Graustufe ich für was nehmen muss, habe ich noch nicht kapiert :uag


    Folgendes ist mir aufgefallen, als ich deine Output.isd mit drkohler's inseleditor.exe geöffnet habe:
    In der Output.isd ist unter Chunks der Wert "0" enthalten (Bild 1).
    In der Referenzinsel n_m22.isd ist der Wert "64" zu finden (Bild 2).
    Bei den max. Höhenprofilen gibt es enorme Unterschiede.


    Können für die CoastBuildinglines, die Bereiche, die nicht Texture 4 = Cliff sind, herangezogen werden (Bild 3)?


    LG Günter

  • 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.

  • klasse Insel! :super


    sind die Palmblätter denn dick genug, daß man ein Haus samt Strassenanbindung plazieren kann?
    Sonst wäre das ja "nur" eine sinnlose Spielerei, aber wenn man die Insel tatsächlich richtig bebauen kann...innen Häuser, aussen Versorgung z.B....

    Lebe jeden Tag, als wäre es Dein letzter

  • Ja und nein; an einigen Stellen sind sie dick genug. Werde das wohl noch ein wenig hochskalieren, ist nicht viel Aufwand. Wie man sieht, ist die Küstenlinie auch noch ein wenig steil... war einfach auf die Schnelle in Da_Chrissis Editor geworfen ;)

  • Ja, nur die Stelle, wo der Kontor ist :D Ist der Kontor einmal gesetzt, kann man den Rest dennoch mit Hafenmeistereien erschließen und bebauen. Die CoastBuildingLines braucht das Spiel nur, um dem Schiff anzuzeigen, wo es den ersten Kontor bauen kann.

  • Hallo ihr lieben!!
    erstmal entschuldigt, das so lange nichts mehr von mir kam!!
    Privat und Beruflich hat sich vieles verändert.


    aber es ist schön mal wieder hier zu schreiben!


    Und einen wunder schönen gruß an den günther!! :Blume :Blume dank seiner unermütlichen geduld hab zumindest ich meine inseln erschaffen!!


    leute es ist ja der Hammer was ihr da zu stande gebracht habt:-)
    Vor 1,5 Jahren ca wurde mir gesagt es ist nicht möglich eine eigene insel zu kreiren!! und jetzt habt ihr einen editor gebastelt!!!!!!
    Danke dafür!!!
    und bei diesem anflug von euforie, muss ich einfach mal eine runde ausgeben :coffee :tea :tea :coffee


    also "prost" :prost


    ist es möglich die bodentexturen auch zu ändern?

  • Nun, nach dem es um den Editor still geworden war, hab ich mich auch wieder anderen Projekten zugewand...


    @ nothing_in:


    Du kannst die Bodentextur doch ändern im Editor? :hää (Die Grundtextur allerdings nicht. Sicherheitshalber, nicht, weil ich euch den umgang mit dem Editor nicht zu traue, sondern weil es in allen Anno-Inseln so ist.)

  • Servus an alle.


    Also ich hatte eine neue Insel zum Test angefangen.
    So habe ich bis jetzt noch nie mit den Texturen gefasst.


    Also die Frage, für den Test, hatte ich eine 256x256 Insel erstellt unter dem Island Creator (diesen hatte mir ohne Textur eine neue Insel Erstellt.)
    (Anno 1503 von 64x64 auf 256x256) und Für die HeightMap hatte ich diese unter Excel in Hex code erstellt (anno 1503 dezimal code zu Anno Hex code 1404).
    So bitte schauen sie mein screenshoot ann.
    hier wenn ich die Datei lade. Sowie kein Textur Belegt ist, und sowie ich gelesen haben, dass ihr, unter dem Hexeditor einiegen Kopiert haben.


    Für mir einfach zu machen, benötige ich am Anfang nur 2 Texturen.
    Meer + Land.


    Kann man also Textur Index 0 aus eine Datei Nord Klima insel 208x208 kopieren und benutzen, in meine Datei 256x256?
    Denn für den moment, möchte ich nur um der Insel Kontor in meinem Editor Sehen, so dass ich dann die weitere Texturen anlegen kann!


    Und unter Dr. Kohler Editor, hier, komme ich nicht, an die Texturen, denn die zwei PNG datei habe ich schon erstellt.
    So wird die Insel Form natürlich angezeigt, aber ich komme nicht ann die Texturen.


    Danke für alle hilfe.