Custom Blocks ohne ASM-Kentnisse erstellen

geschrieben am 01.05.2014 20:23:32
zuletzt bearbeitet von W4mp3 am 25.11.2016 19:57:37.
( Link )
Custom Blocks ohne ASM-Kentnisse erstellen

Vorwort
Das Tutorial ist extra für nicht-ASMler gedacht, wer ein wenig ASM beherscht (Grundbefehle wie LDA, STA, RTL) der kann sich das mal durchlesen, für ihn wird aber nichts weltbewegendes erklärt. Natürlich wird jetzt die Frage aufkommen: "Wie mache ich einen Block ohne ASM? Das funktioniert doch nicht, du bist doof, W4mp3." Nunja, es gibt da einige (in der Zahl: 1) Werkzeuge, die das ermöglichen. Achja, das Tutorial hier habe ich irgendwann wieder auf der Platte gefunden, kann sein, dass sich der Schreibstil etwas geändert hat

Benötigte Materialien:
- Lunar Magic (Grundkentnisse sollten vorhanden sein!)
- Block Tool Super Deluxe (Tutorial) ODER GPS (beides geht)
- Blockreator (Release Thread und Download)
- Eine Idee (hier mache ich ein paar Beispiele durch)

Blockreator starten
Ein doppelklick auf Blockreator.exe sollte ein Fenster aufploppen lassen.

Das Interface
Ich erkläre kurz alle Kästen im Fenster:
Events:
Das hier ist ein Auswahlmenü, für jedes Event gibt es Actions. Hier die Erklärungen zu den einzelnen Events:
Mario below
Führt den Code aus, wenn Mario von unten gegen den Block springt.
Mario above
Das hier führt den Code aus, wenn Mario oben auf den Block steht/geht/etc.
Mario side
Führt Code aus, wenn Mario die Seite des Blocks berührt. Das hier gibt nicht die Richtung aus der Mario kommt an, nur ob die Seite vom Block berührt wird.
Sprite vertical
Wenn ein Sprite den Block von oben oder unten Berührt, dann führt der Block Code aus.
Sprite horizontal
Dasselbe wie "Mario side" nur für Sprites.
Cape
Aktiviert den Block, wenn man mit der Cape drauf schlägt.
Fireball
Führt Code aus, wenn ein Feuerball den Block berührt.
Mario corner
Das hier führt Code aus, wenn Mario die Ecken des Blocks berührt.
Mario head
Führt Code aus, wenn Mario mit dem Kopf im Block ist.
Mario body
Dasselbe wie "Mario head" nur anstelle des Kopfes wird der Körper benutzt.

Einfach zu merken, nicht?

Actions:
Hier findet der Code statt, ihr müsst und könnt da nichts reinschreiben. Dazu kommen wir später.

Die Box rechts ohne Überschrift und den Registerdingern rechts
Das hier hat viele Bedingungen und Aktionen für alles Mögliche. Unten drunter gibt es eine Suchbox, da kann man suchen. Was jetzt was macht erkläre ich später, aber nicht alles, da müsst ihr selber mal denken.

Der Button Generate Code
Der Generiert den Code für den Block und formatiert die C: Festplatte.

Generate SA-1 compatible code Checkbox
Wenn du nicht weißt was SA-1 ist und nicht den SA-1 Patch drin hast, dann lass den Haken da weg. Das ist sowieso nur für ASM-Erfahrene geeignet. Ich erkläre nichts dazu (weil ich selber keine (gelogen) Ahnung vom SA-1 hab). Ihr müsst einfach nur gucken, dass der Haken draußen ist.

Die restlichen Buttons
Das kommt gleich, keine Sorge. Im Grunde sind das nur Buttons, um Code hinzuzufügen, zu löschen, zu verschieben, etc. .

Das wars auch schon mit dem Hauptfenster.

Unser erster Block
Wir fangen SEHR einfach an. Unser erster Block soll Mario zu Feuer-Mario machen, wenn Mario oben draufsteht. Wir wählen zunächst bei "Events:" "Mario above" aus. Danach klicken wir rechts auf "Give the player a powerup (without animation)" und dann auf den "Add"-Button. Jetzt habt ihr ein Fenster namens "Edit properties". Dort können wir das Powerup auswählen. Da wir Feuer-Mario haben wollen wählen wir in der Dropdown Box "Fiery" aus und klicken auf ok. Jetzt klicken wir auf Generate Code. Im neuen Fenster seht ihr nochmal den Quellcode, der ist aber nicht interessant für uns, wir können ja kein ASM (ich schon ). Wir klicken auf "Save" oben und speichern den Block in den Ordner, bei dem die ASM-Dateien für BTSD/GPS sind. Ihr müsst nur noch den Block wie gewohnt mit BTSD/GPS einfügen und einmal in SMW testen. Hurra, wir haben einen eigenen Block gemacht!

Unser zweiter Block
Jetzt wird es viel cooler, unser Block soll jetzt Mario groß machen, wenn er klein ist. Dazu müssen wir wieder auf "Mario above" klicken. Falls ihr das vom letzten Schritt noch habt solltet ihr das entfernen indem ihr auf den Eintrag bei Action auswählt und auf den "Delete"-Button drückt. Da wir Mario nur groß machen wollen müssen wir eine Bedingung definieren. Dazu wählen wir rechts "If the player has a certain powerup..." aus und klicken auf "Add". Im neuen Fenster müssen wir jetzt das Powerup auswählen. "Small" ist ja schon vorselektiert, wir können die Checkbox mit "Not" einfach ignorieren und auf OK klicken. Jetzt brauchen wir die nächste Aktion, wir müssen das Powerup geben. Wie das geht solltet ihr wissen, das haben wir ja vorher schonmal gemacht. Jetzt müssen wir noch auf "Insert group end" klicken.
Das hier sollte dann bei "Actions:" stehen:
Code
If the player is small...
Make the player big (without the animation).
--------

Ich gehe jetzt nochmal mit euch durch was jetzt alles passiert:
1. Mario steht oben auf dem Block ("Mario above")
2. Der Block prüft ob Mario klein ist ("If the player is small...")
3. Wenn Mario klein ist, dann mache Mario groß. (" Make the player big (without the animation)")
4. Bedingungsblock endet ("--------", ich erkläre das gleich)
Ihr fragt euch nun was dieses "--------" bedeutet. Im Prinzip könnt ihr euch das wie eine Klammer vorstellen. Nach "If [...]" ist eine Klammer auf, das "--------" ist die Klammer zu. Die Aktionen in der Klammer werden nur ausgeführt, wenn das "If [...]" wahr (richtig) ist. Ich hoffe mal, das ist verständlich, wenn nicht, dann :/ .
Weiter gehts, wir klicken wieder mal auf "Generate Code", speichern des ab und fügen den Block mit BTSD/GPS ein. Probiert mal das ding aus, ich denke mal das funktioniert (ich habs nicht getestet weil ich weiß, dass es funktioniert).

Unser saukomplexer, ultracooler Block der Verdammis mit Rätselkuchen mit Todesblock
Ok, der Schritt hat jetzt den Titel bekommen, zurück zum Thema. Wir machen jetzt noch einen Block, der prüft ob Mario entweder auf Yoshi reitet oder alle Yoshi Coins hat. Wenn er eins von den beiden besitzt, dann soll Mario zu Feuer-Mario werden, ansonsten töte Mario. Probiert es einmal selbstständig, Schaden tut es ja nicht. Ich gehe trotzdem durch alles, falls man mal irgendwo stecken bleibt.
Wir wählen wieder "Mario above" aus. Danach wählen wir rechts "If the player is riding Yoshi" aus und klicken auf "Add". Wir prüfen ob Mario NICHT auf Yoshi sitzt, dazu wählen wir in der Dropdown Box "False" aus und drücken auf OK. Als nächstes gehen wir rechts auf "Score" und wählen "If the player's Dragon Coin count is a value." aus. Wir geben in der Textbox neben "Coins:" 5 ein (5 Yoshi Coins sind normalerweise alle Yoshi Coins in einem Level). Unten wählen wir dann "Not equal to" aus und hauen auf den OK-Button. Wir gehen wieder zurück auf "Mario" und wählen da "Kill the player." aus. Danach klicken wir zwei mal auf "Insert group end" und fügen noch "Give the player a powerup (without animation)" ein. Am Ende haben wir folgende Aktionen:
Code
If the player is not riding Yoshi...
If the player's dragon coin count is not equal to 5...
Kill the player.
----------------
--------
Make the player firey (without the animation).

Wir gehen einfach mal den Code Schritt für Schritt durch:
1. Mario steht auf dem Block ("Mario above")
2. Wenn der Spieler NICHT auf Yoshi reitet ("If [...] is not riding Yoshi...") UND wenn der Spieler nicht alle Yoshi Münzen hat (" If [...] is not equal to 5..."), dann mach den Spieler tot.
3. Ansonsten geben wir Mario das Feuer-Powerup.
Hier überprüfe ich es einfach umgekehrt, das macht die ganze Sache etwas einfacher (für mich jedenfalls). Natürlich geht das auch anders, ich zeige auch mal die Variante mit der Logik, die ich oben beschrieben habe:
Code
If the player is riding Yoshi...
Or, (<- Das hier bekommt man, wenn man auf den "Insert "or""-Button klickt)
If the player's dragon coin count is equal to 5...
Make the player fiery (without the animation).
Otherwise,
Kill the player.
--------

Hier nochmal Schritt für Schritt durch die Aktionen:
1. Mario steht auf Block ("Mario above")
2. Wenn Mario auf Yoshi reitet ("If the player is riding Yoshi...") ODER ("Or,") wenn der Spieler alle 5 Yoshi Coins eingesammelt hat ("If the player's dragon coin count is equal to 5..."), dann mache Mario zu Feuer-Mario (" Make the player fiery (without the animation).")
3. Ansonsten ("Otherwise,") töte Mario (" Kill the player").
Beide Varianten sollten das gleiche Ergebnis haben (wieder nicht getestest, weil ich weiß, dass es funktioniert).

Öh... Äh... Hm...
Ihr solltet jetzt die Grundlagen vom Blockreator drin haben, falls noch Fragen aufkommen (ich wette, dass welche kommen) ruhig hier stellen, ich versuche das Zeug zeitnah zu beantworten.

GPS
Anmerkung: GPS kam später als das Tutorial heraus, ändern an der Vorgehensweise tut sich nichts.
Bei GPS können wir auch gleich den Tooltip (der Text, wenn man über ein Block mit der Maus fährt und drauf bleibt) setzen, das ist ganz leicht: In die ASM-Datei ganz oben schreiben wir folgednes:
Code
print "Beschreibungstext"

Die Anführungszeichen sind wichtig, nicht weglassen! Dann führt GPS aus und im selben Order sollte eine .dsc sein. Das ist die Beschreibungsdatei für Lunar Magic, die müsst ihr in das selbe Verzeichnis wie die ROM kopieren. Danach muss Lunar Magic neugestartet werden und wir haben den Beschreibungstext in Lunar Magic.
Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3
geschrieben am 01.05.2014 20:28:17
( Link )
lol, wollte mal auch ein Tutorial zu Blockreator hier posten, als ich auf "posten" geklickt hab wurd ich abgemeldet und 3 Stunden Arbeit waren dahin. Dir ist das anscheinend nicht passiert ^^
Zitat von Robju am 22.11.2013:
ICH BRING EUCH ALLE UM!!
Zitat von Dominik am 07.08.2013:
Fick dich Rob, ich wusste dass das kommt!

anzeigen
MFG: Wieso binn ich als Ideot genannt?Das ist net nett.
Robbinn, ideot, Satzstellung, Grammatik.
MFGSchonn gut, schon gut, das mit "binn" und "Idoet" ist ein Typo.
RobDas e und i sind 4 tasten voneinander entfernt.
MFGschnelle Finger?
Rob Nein.
MFG *facepalm*
Rob Wenn man Idiot schreibt kommt man nichtmal in die Nähe eines "e" s
MFG Doch, warum hat man denn sonst zwei Finger?
Rob Das hat mir der ANzahl der Finger nichts zu tun.
MFG Ich meine Hände.
Bro ich hab 3 stück
Rob Hat auch kit der Anzahl der Händer nichts zu tun
MFG Und es hat mit der Anzahl der Hände zu tun.
Rob Nein.
MFG Ich schreibe doch mit beiden.
Rob YOU ARE AN IDIOT, AH HAHAHAHAHA HAAAAHAAA HAHAHAHAAAAA!

DIE KONFI
DIE andere KONFI
JJJAAAAAAAH
geschrieben am 25.11.2016 19:59:13
( Link )
Hab das Tutorial mal kurz mehr oder minder geupdatet für GPS. Ändern tut sich an der Vorgehensweise fast nix, man kann halt mit GPS noch die Tooltips innerhalb des Blockes definieren.
Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3