Neue Flug-Positionen und Healing-Places für hinzufügen


  • Heyho, Leute! :D

    Wie ich euch schon im letzten Tutorial erwähnte,

    veröffentliche ich nun das Tut für FeuerRot!


    Äh lol 123. Beitrag :D xD


    Ich hoffe, dass auch dieses Tutorial auf viel Interesse stößt!

    Ich bitte euch sehr darum, mir Feedback zu geben, egal ob euch das Tut gefallen hat oder nicht, solange die Rückmeldung produktiv ist!

    Dasselbe Tutorial für SM/??S/R??

    Vorwort


    Herzlichen Dank, dass ihr hier bei meinem Tutorial vorbeischaut!

    In diesem Tutorial steckt viel Arbeit, da die Offsets in US-Roms total anders sind als in einer EUR-Rom!

    Zudem musste ich das Ganze noch übersichtlich gestalten und habe das Ganze noch ausgeschmücktz mit wichtigen Details!

    Deshalb ist es mir ein großes Anliegen, dass ihr dieses Tutorial NICHT verbreitet, ohne meinen Namen anzugeben!


    Warnung!!

    Dieses Tutorial wurde bisher nur (von mir) an einer BPRD und einer BPRE-Rom ausgetestet!

    Jedoch ist nicht sicher, ob es auch an einer BPED oder BPEE Rom funktionieren wird!


    Credits brauche ich keine, denn ich war noch nie fame und werde es auch nie sein [IMG:http://forum.wii-homebrew.com/wcf/images/smilies/assi.png]

    Jedoch wäre es trotzdem recht schön, wenn i-wo mein Name in den Credits stehen würde! [IMG:http://forum.wii-homebrew.com/wcf/images/smilies/blush.png]


    Noch eine kleine Vorwarunung, falls ihr mit dem HxD arbeitet:

    Unten wird die Anzahl markierter Bytes nicht in Dez sondern in Hex!


    Na dann...

    Let's go!!!


    Schritt 1: Limiting-Bytes verändern

    Wie schon im Tutorial zu Smaragd, müssen wir auch hier als erstes die beiden Limiting-Bytes suchen und um 1 (oder mehr?) erweitern!

    Erweitert es zunächst nur um 1, um in die ganze Sache reinzukommen, denn wie ihr wisst:

    Es ist noch kein Meister vom Himmel gefallen Glaub' ich zumindest


    Genug dumm rummgeschrieben!


    Öffnet zunächst euren Hexeditor (ich empfehle den HxD, da er benötigte Funktionen anbietet) und sucht nach folgendem String:


    Code
    1. 08320133[13]2BEED9002010BC02BC0847

    [13] = Anzahl Flug-Positionen - 1 ist (in Hex)


    Addiert zu dieser Zahl um die Anzahl Flug-Positionen, die ihr hinzufügen wollt (In Hex!!!)


    ----->Speichern


    Nun geht es weiter mit dem zweiten Limiting-Byte!


    Sucht dafür folgenden String:


    Code
    1. B5002808D0[14]2806D8C0000149401803E00000

    [14] ist die Anzahl von Flug-Positionen!


    Erhöht diese Zahl um genauso viel wie das erste Limiting-Byte!


    ----->Speichern


    Zur Kontrolle: Das erste Limiting-Byte + 1 = Das zwete Limiting-Byte!


    Da die Flug-Position-Table, die Healingplace-Table und die Personen-ID-Table nacheinander folgen (zu diesen 3 Dingen kommen wir später), müssen diese Tables alle Repointet werden!


    Schritt 2: Healingplace-Table repointen

    Healingplaces sind die Orte, an denen man spawnt, wenn man in Ohnmacht gefallen ist.


    Die Healingplace-Table ist folgendermaßen aufgebaut:

    Code
    1. [Map-Bank][00][Map-Nr.][00]

    Das erste Healingplace befindet sich im unteren Stockwerk des eigenen Hauses, wo man von der Mutter geheilt wird.

    Somit:

    Code
    1. 04000000

    Dieser String kommt aber in der FR-Rom sehr oft vor, deshalb suchen wir nach dem ersten und nach dem zweiten Healingplace zusammen!

    Code
    1. 0400000005000400

    Sucht diesen String mit dem Hex-Editor und ihr werdet auf ein einziges Ergebnis stoßen.


    Merkt euch das Offset (und schreibt es am besten irgendwo auf!)

    Markiert nun vom Ergebnis her 80 Bytes (natürlich müsst ihr das Ergebnis selbst auch markieren) und kopiert das Ganze und ersetzt diese 80 Bytes (optional) durch FF-Bytes, um Platz zu sparen.

    Sucht nach einem Offset, das genügend Platz hat (also über 80 Bytes) und DURCH 4 TEILBAR IST (mit 0, 4, 8 oder C endet)!

    Für jedes Healing-Place, das ihr hinzufügen wollt, braucht ihr 4 FF-Bytes mehr!


    Wenn ihr nun ein Offset gefunden habt, das obenstehende Anforderungen erfüllt, markiert ihr da 80 Bytes und fügt die kopierte Table ein!


    Als nächstes werden die Pointer geändert!


    Sucht nach dem Pointer des eben gemerkten Offset (das Offset der Healing-Place-Table!)


    Falls ihr nicht wisst, wie Pointer aufgebaut sind, solltet ihr mal bei Tutti's Scriptdatenbank vorbeischauen!

    Es ist ganz leicht!


    Ihr werdet diesen Pointer 2 Mal finden!

    Ersetzt beide durch den Pointer eurer neuen Healing-Place-Table!


    ----->Speichern


    Schritt 3: Personen-ID-Table repointen

    Sucht als erstes nach folgendem String:

    Code
    1. 0101030101010101010201010101010101010101

    Ihr findet nur ein einziges Ergebnis!

    Merkt euch nun das Offset des gefundenen Strings!

    Kopiert diese 20 Bytes, die ihr soeben gesucht habt!


    Sucht ein Offset mit 20 FF-Bytes, das durch 4 teilbar ist (mit 0, 4, 8 oder C endet)

    Für jedes neue Healing-Place braucht ihr ein FF-Byte mehr!


    Sucht nun nach dem Pointer zu dem soeben gemerktem Offset und ersetzt es durch den Pointer zum Offset, an dem ihr die Person-ID-Table eingefügt habt!


    Schritt 4: Flug-Position-Table repointen


    Flugpositionen sind die Orte, an denen man Hinfliegen kann (wer hätte DAS gedacht!?)

    Hier noch der Aufbau der Flug-Position-Table:

    Code
    1. [Map-Bank][Map-Nr.][X-Koordinaten][00][Y-Koordinaten][00][00][00]


    Die erste Flug-Position ist in Alabastia vor dem Haus.

    Somit suchen wir nach diesem String:

    Code
    1. 0300060008000000

    Merkt euch wieder mal das Offset, auf dem ihr landet. (und merkt euch!!! Das ist das Offset zur "reinen" Flug-Position-Table)

    Geht von da aus 8 Bytes zurück.

    Was ihr da findet, sieht zwar nicht so wirklich nach Flug-Position-Table aus, aber es gehört ebenfalls dazu!

    Merkt euch also auch dieses Offset (und merkt euch: Das sind die Random-Bytes)


    Kopiert nun diese 168 Bytes und fügt sie in einem Offset ein, das genügend freie Bytes hat und durch 4 teilbar ist (mit 0, 4, 8 oder C endet!)


    Nun sucht ihr folgenden String:

    Code
    1. 07 E0 00 00 XX XX XX XX 08 32 01 33

    X ersetzt ihr durch den Pointer zur "reinen" Flug-Position-Table, das ihr euch (weiter oben) merken musstet

    Ersetzt den Pointer der "reinen" Fugposition-Table durch den Pointer zum neuen Offset, das ihr euch ausgesucht habt!

    Sucht als nächstes folgendes:

    Code
    1. 03 E0 00 00 XX XX XX XX 00 20 02 BC 08 47 00 00

    X ersetzt ihr durch den Pointer zu den Random-Bytes, die ihr euch merken musstet

    Ihr findet 2 Ergebnisse!

    Nun ersetzt ihr beide Pointer durch die Pointer zu euren neuen Random-Bytes!


    Schritt 5: Eine (oder mehrere) Flug-Position(-en) und Healingplace(s) hinzufügen

    Nun fügt ihr zu euren neuen Table neue Daten hinzu!


    Navigiert euch über den Hex-Editor zur neuen Personen-ID-Table und fügt die Personen-Nr. (In Hex) der Person, die euch heilen soll (bzw. im Pokémon-Center hinter dem Tresen stehen soll) hinzu, OHNE DAZWISCHEN EIN BYTE FREIZULASSEN!


    Diese Person(-Nr.) wird von mir ab jetzt Person-Nr. X genannt


    Geht zur Healingplace-Table und fügt da nach folgendem Schema neue Daten hinzu:

    Code
    1. [Map-Bank][00][Map-Nr.][00]

    Map-Bank und Map-Nr. macht ihr natürlich die von dem Haus oder Map, auf der ihr spawnen sollt!



    Mit dem Ändern des Limiting-Bytes haben wir aber nicht nur das Hinzufügen eines (oder mehrerer) neuen Healing-Places ermöglicht, sondern auch das Hinzufügen einer (oder mehrerer) Flug-Position(en).


    Geht nun an's Ende eurer neuen Flug-Position-Table und schreibt OHNE EIN BYTE DAZWISCHEN FREI ZU LASSEN nach folgendem Schema Daten für eine neue Flug-Position:

    Code
    1. [Map-Bank][Map-Nr.][X-Koordinaten][00][Y-Koordinaten][00][00][00]


    ----->Speicher


    Öffnet nun Advance Map !!1.92!!


    Geht zur Map, auf der ihr die neue Flug-Position haben wolltet, et voilà: Eure Flug-Position ist da!

    Auf der Map selbst könnt ihr die Flug-Position frei verschieben, aber nicht auf andere Map-Banken oder Map-Nummern!

    Falls ihr es doch macht, passiert folgendes:

    Angenommen, ich mache die Flugposition auf Muster City und verschiebe die Flug-Position nach New York City, so fliege ich, wenn ich bei der Auswahl FLIEGEN auf der Karte auf Muster City drücke nach New York City!

    Wie sich das ändern lässt, kommt später!

    Schritt 6: Slot anpassen/hinzufügen

    Öffnet nun den Weltkarten-Editor und klickt auf Alabastia!

    Es wird eine meldung kommen, die ihr aber einfach ignoriert!


    Unten in der Mitte hat es Zwei Boxen mit der Überschrift "Infos Flug-Position:"


    Das sehen wir uns nun ein Bisschen genauer an!


    [IMG:http://img.romhackersworld.eu/3475.png]


    Den ersten Slot können wir nun also in der kleinen Box unten in der Mitte sehen!


    Um die Slot-Table zu suchen, müsst ihr also nach 030001 suchen!

    Da dieser String aber sehr oft existiert, hängen wir noch den zweiten Slot an (Vertania City)


    Wir suchen also:


    Code
    1. 030001030102

    Nun sollte man ein einziges Ergebnis finden.


    Hier habt ihr alle auf der Weltkarte sichtbaren Maps auf einen Blick

    Sucht jetzt also (mit dem AUGE, NICHT mit der SuFu) nach eurer Map, auf die eure neue Flug-Positon ist nach folgendem Schema:

    Code
    1. [Map-Bank][Map-Nr.][00]

    Sobald ihr das gefunden habt, ersetzt ihr die 00 durch den nächsten freien Slot!

    Habt ihr noch keine einzige Flug-Position hinzugefügt, so ersetzt die 00 durch eine 15.

    Ist das das 2. Mal, dann durch eine 16 usw.


    Schritt 7: Bedingung zum Aktivieren der Flug-Position setzen

    Geht wieder zum Weltkarteneditor und drückt auf "Routinen ändern"!

    Klickt auf die Stelle auf der Weltkarte, auf der eure Map mit der neuen Flug-Position ist.


    In der Box neben der Überschrift "Flug-/Anzeige-Flag:" schreibt ihr nun eine Nummer einer Flag rein, die FREI ist!!!


    Next Step!


    Schritt 8: Flug-Position Aktivieren

    Um diese Flug-Position zu aktivieren braucht ihr nur einen Script auszulösen, die folgende Zeile beinhaltet:

    Code
    1. setworldmapflag 0x{Flag, die ihr ausgewählt habt}

    Nun ist sie unter FLIEGEN anwählbar!


    Schritt 9: Healingplace aktivieren

    Um beim nächsten Mal bei eurem neuen Pokémon-Center, oder was auch immer ihr baut zu landen, müsst ihr einen Script auslösen, der diese Zeile beinhaltet

    Code
    1. sethealingplace 0x15

    Und falls es schon euer 2. neues Healingplace ist, dann nehmt ihr natürlich 0x16

    Das 3. --> 17 usw.


    Nachwort

    Yo, Leute

    Ihr habt's geschafft!

    Ich hoffe sehr, dass ich euch helfen konnte und ihr alles verstanden habt!

    Sollten Fragen da sein, schreibt einen Beitrag zu diesem Thread, damit ich die Frage für alle beantworten kann!

    Ich bitte euch sehr um FeedBack, denn nur so weiss ich, ob euch das Tutorial auch zusagt!

    Kriterien sind auch erwünscht, falls ich noch am Style was ändern muss, oder ich etwas umschreiben muss.

    Herzlichen Dank, dass ihr hier vorbeigeschaut habt!


    MfG


    manuth



    Benutzte Programme, Dateien etc. für das Tutorial:



  • Danke noch mal für das HAmmer tut,
    Aber vieleicht würdest du BEsser und mehr bewetung Bekommen wen Du beide In ein thread machst,
    Du hast es echt schön geschrieben, und es funktionierd vielen vielen dank dafür.






    *hust*meld dich bei skype*hust*

    Casper schrieb:


    "...Man sagt am Ende wird alles gut.
    Und wenn es nicht gut ist, kann es auch nicht das Ende sein.
    Am Ende wird alles gut und ist es nicht gut, ist es verdammt nochmal nicht das Ende - NEIN"

  • ...das script wird einfach von oben nach unten ausgeführt also ist es, sofern es keine Schleifen oder Abzweigungen im Script hat, egal!
    Am besten, du siehst dir ein paar Tutorials zum Scripten an!


    Herzlichen Dank für deine Antwort ^^


    MfG


    Manu


    Entschuldige, dass das Tutorial so ein verwirrendes aussehen hat, ich werde als bald als möglich das Tut auf meinem Server re-uppen!

  • setzt es am besten in den ersten block deines scriptes.
    da kanst du nich großartig viel falsch machen.

    Casper schrieb:


    "...Man sagt am Ende wird alles gut.
    Und wenn es nicht gut ist, kann es auch nicht das Ende sein.
    Am Ende wird alles gut und ist es nicht gut, ist es verdammt nochmal nicht das Ende - NEIN"

  • Wenn ich nur neue healingplaces einfügen möchte ist das setzen(verändern) der limiting bytes notwendig?
    Soweit ich das richtig verstanden haben sollte geht es dabei ja nur um die anzahl der Flugpositionen?


    Dass ich um das repointen usw. nicht drum herum komme ist mir schon klar.

  • Wie im Tutorial zu sehen ist gibt es insgesamt zwei verschiedene Stellen, an denen die Anzahl von Flug-Positionen/Healingplaces festgelegt sind.
    Also wird wahrscheinlich das eine für Flug-Positionen und das andere für Healingplaces gedacht sein.


    Da ich keine Ahnung habe, welches von beiden was limitiert, rate ich dir, einfach beides zu erhöhen.


    MfG
    Manu

  • Vorab mein Problem: mein neuer healing point wird scheinbar nicht ausgelesen.


    Habe nun beide Limiting-Bytes um jeweils 1 erhöht. dH das erste auf 14 und das zweite auf 15.
    Auch die Tables habe ich repointet und deren pointer ersetzt,
    sowie einen weiteren healingpoint im schema [mapbank]00[map]00 angefuegt.


    Habe nun in der Map auch ein world-map script das sethealingplace 0x15 ausführt.
    wenn ich nun das pokemon center aufsuche meine pokemon heilen lasse und im anschluss mein team ich sage mal wipen lasse wird das bild schwarz und das spiel bleibt stehen.
    alle anderen healingpoints funktionieren aber wie gewohnt.
    Zum besseren verständniss habe ich auch die healingpoints flugpositionen etc. an den alten offsets gelöscht (bzw mit FF bytes aufgefuellt.)




    EDIT: Habe das ganze nun nochmal gemacht:
    habe jetzt geschafft dass der screen nicht schwarz bleibt jedoch komme ich stattdessen in das pokemoncenter auf island 6
    welches der healingplace 0x14 ist. dem tutorial entnehme ich dass es sich dabei um das problem handelt dass auf der map kein platz ist.
    Wie ist das mit "Platz" gemeint? Geht es da um die Geh-Daten?
    die map ist ein 1:1 copy pasted pokemon center in der map-bank 45 map.nr.1.

    eingefügt ergibt es dann ja den hex-wert 2D000100

    was ich leider auch nicht weis ist welche angegebenen utensilien im pokemon center gegeben sein müssen da der link zu dem bild nicht mehr funktioniert.
    kann natürlich sein dass es auch daran liegt dass ich was rausgenommen habe bzw ein warp/entity nicht erstellt habe.