Mapsystem GBA Pokémon Dokumentation

  • Vorwort


    Da ich das ganze Zeug vom Aufbau der Map etc. mir angeguckt habe,
    habe ich mir gedacht, dass ich das hier veröffentliche, weil viele Anfänger mit den Maps Probleme haben.
    Vielleicht bleibt bei den Anfängern ein paar Sachen hängen und können dieses Wissen nutzen.


    An sich wird das eine kleine Übersicht, da es nicht viel zu diesem Thema zu sagen gibt, aber es wird alle nötige erklärt,
    was man braucht um eine eigene Struktur zu schreiben.


    Inhaltsverzeichnis


    0.Hintergrundwissen
    1.Mapbank-Header
    2.Mapbank
    3.Map-Header
    4.Mapfooter-Table
    5.Mapfooter
    6.Maps
    6.1.Map Tile Daten Struktur
    6.2.Map Gehdaten Struktur
    7.Events
    7.1.Eventmenge
    8.Anbindungen
    9.Wilde Pokémon Header
    9.1. Wilde Pokémon Daten


    0.Hintergrundwissen


    Byte = 8 Bits
    Hword(Halfword) = 2 Bytes
    Word = 4 Bytes


    Words und Hwords werden ins ROM LE Encoded (Little Endian = Byteverkehrt).
    Das heißt, dass der Pointer 0x08010203 ins ROM als 0x03020108 geschrieben wird.


    Ein Pointer ist immer ein Word groß, also 4 Bytes.


    1.Mapbank-Header


    Im Mapbank-Header befinden sich Pointer die auf die jeweilige Mapbank zeigen.


    Aufbau:


    2.Mapbank


    Die Mapbank beinhaltet Pointer zum Mapheader der jeweiligen Map.
    Wenn man also zwei Maps in der Bank hat, dann würde in der Mapbank zwei
    Pointer auf den jeweiligen Mapheader der Map zeigen.


    Aufbau:


    3.Map-Header


    Der Map-Header befindet sich in jeder Map gleich am Anfang, er ist also der Kopf der Map.
    In ihm werden sämtliche Einstellungen der Map getroffen.


    Aufbau:


    Das einzige was ich vielleicht noch erwähnen sollte ist, dass der Map Index für den richtigen Mapfooter ist.
    Also sprich in der Mapfooter-Table ist der erste Mapfooter die 1 und die würde man dann im ersten Map-Header bei Map-Index eintragen.


    4.Mapfooter-Table


    In der Mapfooter-Table werden alle Mapfooter gesammelt und werden nummeriert ab 1 aufsteigend.
    Diese Reihenfolge wird als Map Index bezeichnet der im Mapheader steht.


    Aufbau:


    5.Mapfooter


    Der Mapfooter ist das Ende der Map und beinhaltet unter
    anderem auch den Pointer auf die Map.


    Aufbau:


    Hierzu muss ich denke ich nicht viel hinzufügen, außer dass die Randbreite und Randhöhe nur in Feuerrot/Blattgrün gibt.
    In Smaragd/Rubin/Saphir wäre schon nach dem Pointer zum Tileset Teil 2 Schluss.


    6.Map


    Der Aufbau zeigt nur wie es in Pokémon gemacht wird, aber lässt sich, wenn man
    sich das selbst schreibt, individuell einrichten.


    Aufbau:


    Die Tile-Daten, also die Map als "Grafik" wird in Bits gecoded, sowie auch die Geh-Daten.


    6.1.Map Tile Daten Struktur


    Jetzt erkläre ich wie das Prinzip der Map Daten im Hintergrund des Mapeditors funktioniert, wenn ihr mit dem Tileset eure
    Maps erstellt mit einem GBA Pokémon Mapeditor (z.B. Advance Map).


    Die Map Tile Daten lassen sich schwer in Worte fassen, deshalb habe ich
    daraus einen Pseudo Code gemacht der wie folgt heißt:



    Der Tile Index n startet immer wieder bei 0 und zählt dann herauf bis er bei 255 angekommen ist,
    danach wird bei 0 wieder angefangen zu zählen.
    Dies ist noch für die Struktur der Gehdaten sehr wichtig,
    also merkt euch das gut.


    Mehr gibt es denke ich nicht dazu zu sagen, aber wenn ihr Fragen habt oder
    mit dem Pseudo Code nicht klar kommt, dann stellt die Fragen einfach.


    6.2.Map Gehdaten Struktur


    Jetzt komme ich zu den Gehdaten, die aber sehr mit den Map Tile Daten verzweigt sind.
    Hierzu werde ich auch wieder ein Pseudo Code zur Erläuterung benutzen:



    Der Gehdaten Wert x berechnet sich immer aus dem Gehdaten Index m mal 4 + den n-ten Zähldurchlauf bis 255.
    Wenn der Tile Index n den Wert 255 erreicht hat starte der Index wieder bei 0 und der Zähler zählt den Durchlauf.


    Hier wieder auch, wenn ihr jegliche Fragen zu diesem Thema habt, dann stellt diese Fragen,
    denn ihr lest ja das Tutorial, weil ihr etwas lernen wollt.


    Dies wäre auch schon alles zu den Geheimnissen der beiden Strukturen.
    Mit diesem Prinzip müsste man eigentlich einen einfachen Mapeditor zusammenbauen können,
    der in der Lage ist mit dem Mapsystem von GBA Pokémon Spielen zu arbeiten.


    7.Events


    Die Events sind der Hauptkern des Spielgeschehens.


    Aufbau:


    7.1.Eventmenge


    Die Eventmenge beinhaltet die Menge der Events auf der Map und die
    Pointer zum jeweiligen Eventtyp der Map.


    Aufbau:


    8.Anbindungen


    Eine Anbindung verbindet zwei Maps miteinander, damit es einen flüssigen Übergang gibt
    z.b. von einer Route zu einer Stadt.


    Aufbau:


    9.Wilde Pokémon Header


    In dem Header werden die Typen der Habitats der Pokémon auf einer Map bestimmt.


    Aufbau:


    9.1. Wilde Pokémon Daten


    In den Daten wird bestimmt was für Pokémon auf welchem Level auftauchen.


    Aufbau:


    Nachwort


    Gut, ich würde das ganze hier viel mehr als eine Art Aufzeichnung
    bezeichnen, da ich nur Daten hier erkläre.


    Ich hoffe es hat euch irgendwie geholfen zu verstehen wie das ganze in AM funktioniert
    und ihr damit etwas anfangen könnt.
    Ich werde höchstwahrscheinlich die Funktionsweise eines Tilesets etc. noch hinzufügen zu diesem Tutorial.


    Im Anhang gibt es noch die Offsets, damit ihr die Tables umpointen könnt ^^
    Wenn Fragen sind oder ihr Feedback loswerden wollt postet es hier.


    Mfg
    HunterxPokemon

  • Top :D
    Wobei es mit dem Obscurity-Design sehr schlecht Zu lesen ist..


    -SoulK3

    ------------------------------------------------------------------------------------
    ~ ~ ~ SoulK3 ~ ~ ~


    :thumbsup: Wer Rechtschreibfehler findet darf sie gerne Behalten :thumbsup:


    Drei Menschen können ein Geheimnis bewahren.
    Wenn Zwei von ihnen Tot sind.
    :evil:
    ------------------------------------------------------------------------------------

  • Du solltest noch nachtragen, dass die Randbreite und die Randhöhe im Mapfooter exklusiv für Pokémon Feuerrote und Blattgrüne Edition sind, womit in Rubin, Saphir und Smaragd beim Pointer zum Tileset 2 Schluss ist. ;)


    Zu den Events: Bei Personen und Warps ist der Byte nach den Koordinaten nicht unbekannt. Dieser Byte legt die Ansprechebene fest.


    00 = Immer
    01 = Gehdaten 0x4 (Surfer)
    03 = Gehdaten 0xC
    04 = Gehdaten 0x10 und Gehdaten 0x3C (Brücke)
    05 = Gehdaten 0x14


    Tipp: Wäre auch schlau, wenn man sich diese Felder auch so in seiner AdvanceMap-Ini einträgt.


    Wenn in Rubin, Saphir und Smaragd bei einer Person die Bildnummer 60 ist, dann steht die Sichtweite für die Pflanzen-ID. Da kannst du gleich auf mein Tutorial verlinken.
    Du könntest auch noch die verschiedenen Signpost-Typen einzeln erklären, also versteckte Items und Geheimbasis.

  • Ich würde dich noch bitten die Überschriften wie das Inhaltsverzeichnis anzupassen, beide sind sowohl in Obscurity als auch LSD Blackout fast unlesbar, weil schwarz.
    Ansonsten schön, dass wir sowas auch mal haben, und uns nicht immer nur voll auf AM verlassen müssen.


    ~Sturmvogel


    Let the old ways live and prosper in the hearts of our young


  • So, ich habe jetzt nach längerer Zeit mein Tutorial mal überarbeitet, da ich im Moment mehr Zeit habe
    um solche Sachen zu überarbeiten ^^


    Im Grunde genommen habe ich bei den Events die Parameter ein wenig angepasst und
    habe bei dem Punkt 6 Maps das Prinzip der Maps erklärt, also wie das Prinzip der
    Map Erstellung in den Pokémon GBA Versionen aussieht.


    Und ich habe die Farbe von den Überschriften und der Inhaltsangabe geändert wie gewünscht wurde.


    Damit müsste man dann auch in der Lage sein einen einfachen Mapeditor für GBA Pokémon Spiele zu basteln, wenn man denn auch schon Vorkenntnisse in der Programmierung von solcher Software hat.


    Bei Fragen oder einem Feedback an mich könnt ihr gerne hier schreiben.



    Na dann, viel Spaß beim lesen und in naher Zukunft bringe ich
    vielleicht noch ein paar Updates zu der Dokumentation hier mit, aber bis dahin erst einmal ciao ^^


    // HunterxPokemon