Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

  • ITgenie98

    Rekrut

    You have to register first, to connect to this user.

321

[RMXP] Autotiles und ihre ID's

Rating:

by ITgenie98, Sunday, October 29th 2017, 8:19pm

Welcome back!

Wegen dem Maker X, musste ich mich auch mit den Autotiles beschäftigen und ihrer korrekter Darstellung,
und da fiel mir auf das ihre (binäres) Darstellungs-verfahren gar nicht in diesem Forum erläutert wurde!

Folglich: Marktlücke für mich und meinen Blog :3

========================================================================================================================
Anmerkung: ich habe keine Ahnung wie der Maker es genau macht, dies hier sind lediglich annahmen und Analysen aufgrund von Daten die der Maker ausspuckt!
Es kann auch anders gelöst worden sein, denn es führen ja bekanntlich mehrere Wege zum ziel.
========================================================================================================================

Nun fangen wir einfach mal bei 0 an: jedes Tile auf einer Map besitzt eine eindeutige ID.
Diese ID's teilen sich pro Tileset folgendermaßen auf:

0 - 47 = Frei
48 - 95 = Autotile 1
96 - 143 = Autotile 2
144 - 191 = Autotile 3
192 - 239 = Autotile 4
240 - 287 = Autotile 5
288 - 335 = Autotile 6
336 - 383 = Autotile 7
384 - ??? = Tileset

Wie uns auffällt besitzt jedes Autotile (und der freie platz) genau 48 ID's.
Die 48 am Anfang sind vollkommen frei, dienen dem Autotile-algorhytmus anscheinend für eine Saubere Berechnung, da ID=0 ja unser "Empty"-Tile ist.
Ganz genau hab ichs auch noch nicht herausgefunden aber das macht an dieser Stelle auch nichts da wir uns nun die Berechnung anschauen.

Welche Berechnung meine ich eigentlich? Nun die Berechnung die aus unserer Autotile-Grafik die späteren Tiles macht. Das macht der Maker nämlich aufgrund der ID's.

Als erstes muss der Maker herausbekommen welches Autotile überhaupt benutzt wird.
Dabei wird einfach

Source code

1
autotileNr = ID / 48
benutzt. Das Ergebnis ist dann unser Autotile.
Bei einem Ergebnis über 7 wird ganz normal das Tileset verwendet.

Der nächste schritt ist, das wir unsere ID normalisieren (nID), also so umrechnen das sie im bereich 0-47 liegt um alle 48 Tiles eines Autotiles anzusprechen.
Nutzen kann man dazu folgende Formel:

Source code

1
ID % 48 = nID
(%, oder auch Mod genannt gibt als Ergebnis den Rest der Division beider zahlen zurück)

Ein paar beispiele:

Source code

1
2
3
4
50 % 48 = 2
62 % 48 = 14
95 % 48 = 47
99 % 48 = 3
Klappt schon mal hervorragend!

Nun wird es kniffliger: für weitere berechnungen benötigen wir die zahlen im Binär-System (auch Dual-system ganannt).
Als kleines tool zum schnellen umrechnen nehme ich gerne Binary Hex Decimal Converter Calculator .

Wenn wir nun alle Binärzahlen den späteren Autotiles mal zuweisen erkennt man schnell sein Prinzip:

(Im folgenden zähle ich von links nach rechts, also nicht wundern!)

Die ersten beiden Bit (00, 01, 10) unserer nID Legen grundlegend den "Modus" fest.
00 => Nur ecken
01 => Kanten, auch mit ecken
10 => restliche formen

Sehen wir uns mal simpel die 1. Gruppe an (00 = Nur ecken):

Uns bleiben 4 bits übrig die in folgender Reihenfolge Auswirkungen haben:
- ecke unten links
- ecke unten rechts
- ecke oben rechts
- ecke oben links

Da wir bei einem bit entweder 0 oder 1 haben funktioniert das hier wie ein hebel: ist das bit gesetzt (also 1) ist die dazugehörige ecke existent.

Nun kommen wir zu Gruppe 2 (01 = Kanten die auch ecken besitzen)

Hier ist es ein wenig komplizierter:

Die ersten 2 bits legen die Position der Kante fest, die 2 übrigen die Sichtbarkeit der 2 verbleibenden ecken (hierfür siehe unten die Tabelle)

-> Kanten
00 = links
01 = oben
10 = rechts
11 = unten

Nun zur letzten Gruppe die ein wenig zusammengewürfelt ist (10 - restliche formen):

Für eine genaue Auflistung hierfür seht einfach in die Tabelle unten, ich notiere hier nur ganz grob die einzelnen formen:

- 2x parallele Kanten
- 2x Eck-kante links-oben
- 2x Eck-kante rechts-oben
- 2x Eck-kante rechts-unten
- 2x Eck-kante links-unten
- 4x "Sackgasse" oder U-Form
- 2x Punkt form (kein Unterschied zwischen beiden)

===========================================================
Tabellen screenshot

Bild

===========================================================
Ich hoffe euch hat der kleine einblick in die Technik hinter die Autotile-Generierung gefallen!

Mfg IT8

This article has been read 336 times.


Comments (1)

  • 1

    by Playm (Monday, October 30th 2017, 7:48pm)

    Sehr schöner Artikel! :3

    Leider die Zahlen nicht mit Ruby und .to_s(2) umgewandelt deswegen nur 4/5 Sternen. :-P Aber ansonsten top.

Blog navigation

Next article

RubyMediaFramework - Eine kleine Engine

by ITgenie98 (Thursday, March 1st 2018, 5:45pm)

Previous article

[EntwicklerBlog] UI Überlegungen

by ITgenie98 (Wednesday, October 25th 2017, 4:36pm)