Script- und Tutorial-Sammlung (RPG-Maker)

Script- und Tutorial-Sammlung (RPG-Maker)

Habe mich heute mal drangesetzt und ein wenig gescriptet, größtenteils Sachen die das Makern vereinfachen sollen oder mit denen man ohne viel knobeln zu nem vernünftigem Ergebnis kommt das sich auch für nette Spielereien und Effekte eignet.

Hier mal ein Script:

|>----------------------------------------<|

Das Anzeigen von Pictures in der Mapmitte

Klingt eigentlich einfach, oder? Einfach die Koordinaten auf (160|120) setzen und fertig. Bei Maps die größer als 20x15 Tiles sind klappt das aber nicht mehr, da die die Pics dann zwar in der Mitte des Fensters angezeigt werden, aber nicht auf der Mitte der Map. Vor allem bei Lichteffekten ist so was manchmal sehr ärgerlich.
Die vermutlich einfachste Lösung: In die Mitte der Map wird ein Event gesetzt, dessen X- und Y-Koordinaten zur Pic-Anzeige genommen werden. Manchmal verschiebt sich das Pic trotzdem noch, dann muss man meist einfach + oder - 8 rechnen.
Wer (wie ich .___.) zu faul dazu ist, bei jeder Map im Maker erst die Mitte zu suchen (zumal das oft gar nicht so genau möglich ist) und dann auch noch rumzuprobieren, dem könnte das hier weiterhelfen:

1.)
Erstellt ein Event auf dem untersten, rechten Feld auf eurer Map.

2.)
Nun speichert die ganz normalen X- und Y-Koordinaten (nicht die Scene-Koordinaten) in Variablen und addiert jeweils 1.
Grund: Da das erste Tile im Maker die Position (0|0) hat, kommt es zu Verschiebungen. Die Map, die eigentlich 20 Tiles breit ist wird somit auf 14 herabgesetzt, was sich aber nur beim rechnen bemerkbar macht. Der Maker startet eben bei 0 statt bei 1. Durch das addieren der 1 können wir jetzt die einzelnen Pixel genau berechnen und die Position der Pictures besser abschätzen.

3.) Nun werden beide Variablen mit 16 multipliziert.
Grund: Ein Tile besteht aus 16x16 Pixeln.
Da die Picture-Befehle mit Pixeln arbeiten, rechnen wir also bloß die Tiles in eben diese um.


4.) Zum Schluss werden die beiden Variablen jetzt noch durch 2 geteilt.
Grund: Bislang haben die beiden Variablen den äußersten Pixel der Map angegeben. Da wir ja aber das Pic in der Mitte der Map haben wollen, brauchen wir nur die hälfte der Pixel, darum teilen wir durch 2.

Dahinter setzt ihr jetzt den ClearTimer- / DeleteEvent-Befehl und stellt es als parallelen Prozess ein. Jetzt könnt ihr dieses Event auf jede Map kopieren, solange es immer in der untersten rechten Ecke ist gibt es euch immer die exakte Mitte an und ihr spart euch bei etwa 200 Maps etwa 199 mal das setzen der Koordinaten für die Bildmitte. ^^

Hier noch mal als Code:
Paralleler Prozess
<>ChangeVariable[0001:Mitte X]=thisEvent X-Pos.
<>ChangeVariable[0001:Mitte X]+1
<>ChangeVariable[0001:Mitte X]*16
<>ChangeVariable[0001:Mitte X]/2
<>ChangeVariable[0002:Mitte Y]=thisEvent Y-Pos.
<>ChangeVariable[0002:Mitte Y]+1
<>ChangeVariable[0002:Mitte Y]*16
<>ChangeVariable[0002:Mitte Y]/2


|>----------------------------------------<|


Ich hätte auch noch ein Script zur Berechnung von Entfernungen zwischen dem Helden und Events, bei Interesse einfach melden. Allerdings stammt das Script zu 90% von Grandy. .___.
Das Teil verwendet den Satz des Pythagoras, ist etwas kompliziert da der Maker keine Brüche, etc. kennt, daher wüsste ich erst mal gerne ob jemand Verwendung dafür hat.


Joah, evtl. poste ich nachher noch ein Script zur Anzeige des Geldes der Party im Zelda-Stil. Also auch mit Runterzählen und so wenn man Geld ausgibt oder bekommt, bin aber im Moment etwas KO. xD

Hoffe es nützt jemandem was! ^^
Das Anzeigen von Geld in Form von Pictures im Zelda-Stil

Errm, joar. Hier mal das Script zur Anzeige des Geldes der Party, die Geld-Funktion des Makers wird allerdings hierbei vollkommen abgelöst.
Sprich: ohne Zusatzscript ist die Geldanzeige im Standart-Menü unnütz, eignet sich daher imho besser für eigene Menüs.
Außerdem verwendet dieses Script die verschiedenen Geldbörsen aus Zelda, ob ihr das jetzt auch so macht oder nicht müsst ihr wissen. .___.

Das hier lässt sich sehr schlecht erklären (zumindest für mich), daher poste ich den Code und erkläre nur die Switches, Variablen sowie die groben Funktionen der Scriptteile.

1.)
Als erstes legt ihr diese Switches an:
|>----------------------------------------<|
[0002:Rubin-Anzeige]
Schaltet die Anzeige ein, wodurch die Zahlen aktualisiert werden.
|>----------------------------------------<|
[0003:Rubin-Berechnung]
Schaltet die Berechnung ein, welche in einem separaten CommonEvent untergebracht ist.
|>----------------------------------------<|



2.)
Und nun diese Variablen:
|>----------------------------------------<|
[0002:R-Gesamt]
Wie viele Rubine besitzt der Spieler?
|>----------------------------------------<|
[0003:R-Tausender]
Die Tausenderstelle der Rubine.
|>----------------------------------------<|
[0004:R-Hunderter]
Die Hunderterstelle der Rubine.
|>----------------------------------------<|
[0005:R-Zehner]
Die Zehnerstelle der Rubine.
|>----------------------------------------<|
[0006:R-Einer]
Die Einerstelle der Rubine.
|>----------------------------------------<|
[0007:R-Geldbörse]
Welche Geldbörse hat der Spieler?
|>----------------------------------------<|
[0008:R-Maximum]
Je nach Geldbörse: Wie viele Rubine kann der Spieler maximal tragen?
|>----------------------------------------<|
[0009:R-Prüfer]
Prüft ob die Berechnung abgeschlossen / korrekt ist.
|>----------------------------------------<|
[0010:R-Zähler]
Rechnet rauf / runter (immer +1 oder -1 ^^)
|>----------------------------------------<|
[0011:R-Änderung]
Wie viele Rubine erhält / verliert der Spieler?
|>----------------------------------------<|



3.)
Und zu guter letzt diese zwei CommonEvents:

|>----------------------------------------<|
"Rubin-Anzeige"
-> ParallelProcess
-> Startbedingung: Switch[0002:Rubin-Anzeige] ist AN
Zeigt die Rubine per Pictures an und aktualisiert die Anzeige.
|>----------------------------------------<|
"Rubin-Berechnung"
-> ParallelProcess
-> Startbedingung: Switch[0003:Rubin-Berechnung] ist AN
Berechnet wie viele Rubine der Spieler hat und ruft die Anzeige auf. ^^
|>----------------------------------------<|



4.)
Jetzt kommt das erste CommonEvent, "Rubin-Anzeige", dran. Ich poste erstmal den Code und erkläre dann.


<>ChangeVariable[0003:R-Tausender]=Variable[0002:R-Gesamt]
<>ChangeVariable[0004:R-Hunderter]=Variable[0002:R-Gesamt]
<>ChangeVariable[0004:R-Hunderter] Mod 1000
<>ChangeVariable[0005:R-Zehner]=Variable[0002:R-Gesamt]
<>ChangeVariable[0005:R-Zehner] Mod 100
<>ChangeVariable[0006:R-Einer]=Variable[0002:R-Gesamt]
<>ChangeVariable[0006:R-Einer] Mod 10

<>If Variable[0007:R-Geldbörse]=1
<>ChangeVariable[0008:R-Maximum]=300
<>ShowPicture[20]: Geldbörse1 (AAA|BBB)
:ELSE CASE
<>If Variable[0007:R-Geldbörse]=2
<>ChangeVariable[0008:R-Maximum]=600
<>ShowPicture[20]: Geldbörse2 (AAA|BBB)
:ELSE CASE
<>If Variable[0007:R-Geldbörse]=3
<>ChangeVariable[0008:R-Maximum]=1000
<>ShowPicture[20]: Geldbörse3 (AAA|BBB)
:ELSE CASE
<>If Variable[0007:R-Geldbörse]=4
<>ChangeVariable[0008:R-Maximum]=5000
<>ShowPicture[20]: Geldbörse4 (AAA|BBB)
:END CASE
:END CASE
:END CASE
:END CASE

<>If Variable[0003:R-Tausender]=>9000
<>ShowPicture[16]: 9 (CCC|DDD)
:ELSE CASE
...
<>If Variable[0003:R-Tausender=>1000
<>ShowPicture[16]: 1 (CCC|DDD)
:ELSE CASE
<>If Variable[0003:R-Tausender=>0
:END CASE
:END CASE
...
:END CASE

<>If Variable[0004:R-Hunderter]=>900
<>ShowPicture[17]: 9 (EEE|FFF)
:ELSE CASE
...
<>If Variable[0004:R-Hunderter=>100
<>ShowPicture[17]: 1 (EEE|FFF)
:ELSE CASE
<>If Variable[0004:R-Hunderter=>0
:END CASE
:END CASE
...
:END CASE

<>If Variable[0005:R-Zehner]=>90
<>ShowPicture[18]: 9 (GGG|HHH)
:ELSE CASE
...
<>If Variable[0005:R-Zehner=>10
<>ShowPicture[18]: 1 (GGG|HHH)
:ELSE CASE
<>If Variable[0005:R-Zehner=>0
:END CASE
:END CASE
...
:END CASE

<>If Variable[0006:R-Einer]=>9
<>ShowPicture[19]: 9 (III|JJJ)
:ELSE CASE
...
<>If Variable[0006:R-Einer=>1
<>ShowPicture[19]: 1 (III|JJJ)
:ELSE CASE
<>If Variable[0006:R-Einer=>0
:END CASE
:END CASE
...
:END CASE

<>Switch[0002:Rubin-Anzeige] OFF



Aaaarghs... Für das Scripten hab ich halb solang gebraucht wie jetzt für das abtippen - die zweite Hälfte die jetzt noch kommt beim Scripten mit inbegriffen... x___X

Erklärung: Ganz oben wird erst mal der Gesamtbetrag aufgesplittet damit man ihn besser abfragen kann. Danach wird anhand der Geldbörse des Helden bestimmt, wie viele Rubine er maximal bei sich tragen kann. Je nach Geldbörse wird außerdem ein Picture für diese angezeigt. (Die Koordinaten "AAA" bis "JJJ" sind übrigens nur Platzhalter... xD) Das Maximum wird aber erst in der Berechnung wichtig. Danach werden je nach Höhe der einzelnen Stellen die Zahlen-Pictures angezeigt.



4.)
Auf zum zweiten CommonEvent, der Berechnung. Die wird glücklicherweise etwas kürzer und enthält bei weitem weniger Abfragen... ;___;


<>ChangeVariable[0009:R-Prüfer]=Variable[0002:R-Gesamt]
<>ChangeVariable[0009:R-Prüfer] + Variable[0011:R-Änderung]

<>If Variable[0009:R-Prüfer] > Variable[0008:R-Maximum]
<>ChangeVariable[0009:R-Prüfer] = Variable[0008:R-Maximum]
:END CASE

<>If Variable[0009:R-Prüfer] < 0
<>Change Variable[0009:R-Prüfer] = 0
:END CASE

<>If Variable[0009:R-Prüfer] < Variable[0002:R-Gesamt]
<>ChangeVariable [0010:R-Zähler] = -1
:ELSE CASE
<>If Variable[0009:R-Prüfer] > Variable[0002:R-Gesamt]
<>ChangeVariable [0010:R-Zähler] = 1
:ELSE CASE
<>ChangeVariable [0010:R-Zähler] = 0
:END CASE
:END CASE

<>Label: 1

<>ChangeVariable[0002:R-Gesamt] + Variable[0010:R-Zähler]
<>ChangeSwitch [0002:Rubin-Anzeige] ON
<>If Variable[0002:R-Gesamt] =/= Variable[0009:R-Prüfer]
<>Wait: 0.0
<>Jump to Label: 1
:ELSE CASE
<>Jump to Label: 2
:END CASE

<>Label: 2
<>Change Switch[0003:Rubin-Berechnung] OFF



Fast geschafft!!!!11Eins XD

Erklärung: Zuerst wird ermittelt, wie viele Rubine der Spieler nach der Änderung besitzen wird. Das wird im Prüfer gespeichert. Dann wird abgefragt ob dieser Wert größer oder kleiner als der jetzige Besitz ist. Je nach dem wird eben jede Berechnungsrunde dann +1 oder -1 addiert. Außerdem wird noch geprüft, ob der Spieler nicht am Ende das Maximum überschreiten oder in den Minusbereich fallen würde.
Als nächstes wird dann einfach solange -1 oder +1 addiert, bis die tatsächliche Rubin-Menge genauso groß ist wie der Prüfer. Außerdem wird jedes Mal noch die Anzeige aktualisiert, damit sich da auch sichtbar was tut!
Am Ende wird die Berechnung für fertig erklärt und der Switch auf Aus gesetzt. ^^




5.)
Wie das ganze in einem Event jetzt anwenden?
Ganz einfach!

Wenn ihr dem Helden 9 Rubine geben wollt:

<>ChangeVariable[00011:R-Änderung] = 9
<>Change Switch[0003:Rubin-Berechnung] ON


Und wenn ihr ihm 9 Rubine abnehmen wollt:

<>ChangeVariable[00011:R-Änderung] = -9
<>Change Switch[0003:Rubin-Berechnung] ON


Fertig. ^^
Das schwierigste ist jetzt eigentlich nur noch die Koordinaten der Pictures richtig zu setzen.
Und hier das ganze in Aktion in ner Demo. ;-) (Standart-RTP wird benötigt, alle anderen Grafiken stehen zur freiehn Verfügung. ^^)
@BDraw:
Nett, hab sowas ähnliches selber mal gemacht, hatte aber die Nase voll von den ganzen Grafiken.

Zum Thema
Ich geb hier mal was ganz logisches hinzu.
Ganz einfach, wie man mit RGSS Switches aktviert, Variablenwerte verändert und Conditions erstellt. Manchmal ist sowas ganz nützlich besonders Conditions weil so RGSS-Befehle aufgerufen werden. (print, ...) Heute kommt der 1. Teil, das andere dauert zu lange, außerdem schreib ich morgen eine Arbeit.

Switches
Ganz easy, letzte Seite in der "Befehliste" dann open script.

Code um Switches zu AN zu schalten:
$game_switches[x] = true
$game_map.need_refresh = true


Code um Switches AUS zu schalten:
$game_switches[x] = false
$game_map.need_refresh = true


In "[]" wo auch x drinne steht muss natürlich die Nummer vom Switch rein um den es hier geht.

Ich hoffe dass dies leicht zu verstehen ist^^

Jetzt wie man den Wert von Variablen verändert, wie als würde man beim normalen Variablen verändern den Befehl "set" verwenden:-D

Also wieder "open script"

$game_variables[x] = xxxx
$game_map.need_refresh = true


Wie bei den Switches kommt in "[]" die Nummer von der Variable rein, und die "xxxx" müssen durch den Wert ersetzt werden auf den die Variable gesetzt werden soll.
Die anderen Befehle (+-/* und random) sag ich irgendwann mal noch.

Conditions werden mit dem Befehl "if" ausgeführt. Mehr dazu gibts wenn ich das nächste mal in diesem Thread bin, u.a. weitere befehle für RGSS bzw. Ruby.
Logge dich ein um einen Beitrag zu schreiben.