Ich sammle inzwischen mir ziemlich viele Scripte an, die ich im Laufe der Zeit immer wieder brauchte oder kompliziert sind/waren und speichere sie mir in einem extra Ordner. Nun, da der Ordner ziemlich voll geworden ist und es einige Scripte in die Kategorie "auf jeden Fall veröffentlichen" geschafft haben, will ich diesem mal nachkommen.
Aber vorerst:
• Hierbei handelt es sich um Scripte, die eine gewisse GML-Verständnis erfordern.
• Alle Scripte sind für den Game Maker 6.1 geschrieben, dass sie auch (bei korrekter Anwendung) auf anderen Versionen laufen, kann ich nicht garantieren.
• Einige Scripts benötigen die registrierte/Pro-Version des Game Makers.
• Manche Skripte sollte man, um verstehen zu können, was sie bewirken, einfach mal ausprobieren.
• Der Einfachheit halber sind alle Scripte hier als Text verfügbar und können kopiert werden.
(Bei Bedarf pack' ich alle Scripte in eine .gm6 Datei zum mergen.)
Erstmal genug zu den ganzen Voraussetzungen und Infos.
Jetzt kommt, was ihr alle so sehnsüchtig erwartet habt!
cb_move(x,y,speed,fric)
Beschleunigt das Objekt in Richtung Zielposition.
Spoiler anzeigen
cb_move2(x,y,speed,min)
Bewegt das Objekt zur Zielposition. Die Geschwindigkeit entspricht der Distanz/Schrittgröße.
Spoiler anzeigen
cb_platform()
Einfaches Platform Script, optimiert und komprimiert bis zum "geht nicht mehr".
Spoiler anzeigen
string_get(str,sep,ind)
Einfaches Script zum Trennen von einem String, der durch ein oder mehrere (gleiche) Zeichen aufgeteilt ist.
Spoiler anzeigen
string_split(str,trenn,list) (reg/pro only)
Teilt einen String an einem bestimmten Trennzeichen auf und fügt die einzelnen Substrings einer Liste hinzu.
Spoiler anzeigen
ds_list_foreach(list,script,arg0,arg1,...) (reg/pro only)
Führt für jeden Eintrag in der Liste einen Script aus.
Spoiler anzeigen
cb_valchange(val1,val2,speed,min)
Gibt eine Zahl zurück, die näher an val2 liegt (ähnlich wie cb_move2()).
Spoiler anzeigen
ds_list_create_files(dir,ext) (reg/pro only)
Erstellt eine Liste, füllt diese mit den Namen aller Dateien mit einer bestimmten Endung und gibt sie zurück.
Spoiler anzeigen
draw_line_aa(x1,y1,x2,y2)
Zeichnet ein Linie mit Antialiasing. Benutzt den Wu-Algorithmus.
Spoiler anzeigen
draw_rectangle_texture(x,y,width,height,border,texture,rotation,centered) (reg/pro only)
Zeichnet ein Rechteck mit bestimmter Größe, Textur und Randbreite an der Position.
Spoiler anzeigen
EDIT: strings_get in string_get umbenannt. string_split und draw_rectangle_texture hingefügt.
EDIT2: string_get aktualisiert (ihr könnt euch nicht vorstellen, wie alt das jetzt schon ist ...), ds_list_foreach und draw_line_aa hinzugefügt.
Viel Spaß und Erfolg mit den Scripts,
Gruß, euer kopierjunge
Aber vorerst:
• Hierbei handelt es sich um Scripte, die eine gewisse GML-Verständnis erfordern.
• Alle Scripte sind für den Game Maker 6.1 geschrieben, dass sie auch (bei korrekter Anwendung) auf anderen Versionen laufen, kann ich nicht garantieren.
• Einige Scripts benötigen die registrierte/Pro-Version des Game Makers.
• Manche Skripte sollte man, um verstehen zu können, was sie bewirken, einfach mal ausprobieren.
• Der Einfachheit halber sind alle Scripte hier als Text verfügbar und können kopiert werden.
(Bei Bedarf pack' ich alle Scripte in eine .gm6 Datei zum mergen.)
Erstmal genug zu den ganzen Voraussetzungen und Infos.
Jetzt kommt, was ihr alle so sehnsüchtig erwartet habt!


Beschleunigt das Objekt in Richtung Zielposition.
x/y: Dort soll das Objekt hinbewegt werden.
speed: Geschwindigkeitsmodifier (Standart: 1).
fric: Reibungskraft (Standart: 0.2).
speed und fric sind optional und müssen nicht angegeben werden.
Beispiel:
Script:
speed: Geschwindigkeitsmodifier (Standart: 1).
fric: Reibungskraft (Standart: 0.2).
speed und fric sind optional und müssen nicht angegeben werden.
Beispiel:
Script:

Bewegt das Objekt zur Zielposition. Die Geschwindigkeit entspricht der Distanz/Schrittgröße.
x/y: Dort soll das Objekt hinbewegt werden.
speed: Schrittgröße (2 = halbe Schritte, 4 = viertel Schritte).
min: Mindestschrittgröße.
Beispiel:
Script:
speed: Schrittgröße (2 = halbe Schritte, 4 = viertel Schritte).
min: Mindestschrittgröße.
Beispiel:
Script:

Einfaches Platform Script, optimiert und komprimiert bis zum "geht nicht mehr".
Veränderungen selbst im Script vornehmen.
Bei Fragen zum Script bitte
PN an mich!
Script:
Alles anzeigen
Bei Fragen zum Script bitte

Script:
GML-Quellcode
- acc = 0.3;
- fric = 0.1;
- jump = 5.5;
- maxspd = 4;
- // Keyboard
- if (keyboard_check(vk_left)) {hspd -= acc;}
- if (keyboard_check(vk_right)) {hspd += acc;}
- if !(keyboard_check(vk_left) xor keyboard_check(vk_right))
- {hspd *= 0.9;} else {
- if (keyboard_check(vk_left) and hspd>0) {hspd *= 1-fric;}
- if (keyboard_check(vk_right) and hspd<0) {hspd *= 1-fric;}
- }
- hspd = max(-maxspd,min(maxspd,hspd));
- if (!keyboard_check(vk_up) and vspd<0) {vspd *= 1-fric;}
- if (place_meeting(x,y+1,objBlock) and keyboard_check_pressed(vk_up)) {vspd = -jump;}
- // Collision & Move
- if (place_meeting(x,y+1,objBlock)) {
- grav = 0;
- if (vspd > 0) {
- move_contact_solid(270,vspd);
- vspd = 0;
- }
- } else {grav = 0.2;}
- vspd += grav;
- vspd = min(10,vspd);
- if (hspd != 0) {
- if (place_meeting(x+hspd,y,objBlock)) {
- if (hspd >= 0) {dir = 0;} else {dir = 180;}
- move_contact_solid(dir,abs(hspd));
- } else {x += hspd;}
- }
- if (vspd != 0) {
- if (place_meeting(x,y+vspd,objBlock)) {
- if (vspd >= 0) {dir = 270;} else {dir = 90;}
- move_contact_solid(dir,abs(vspd));
- } else {y += vspd;}
- }
- if (place_meeting(x+sign(hspd),y,objBlock)) {hspd = 0;}

Einfaches Script zum Trennen von einem String, der durch ein oder mehrere (gleiche) Zeichen aufgeteilt ist.
str: String, der mehrere Substrings enthält..
sep: ..getrennt durch dieses Zeichen.
ind: Welcher Substring zurückgegeben werden soll (Beginnt bei 0).
Beispiel:
Script:
Alles anzeigen
sep: ..getrennt durch dieses Zeichen.
ind: Welcher Substring zurückgegeben werden soll (Beginnt bei 0).
Beispiel:
Script:
GML-Quellcode
- var str,sep,ind,rep,count,pos,len;
- str = argument0;
- sep = argument1;
- ind = argument2;
- rep = "¦";
- count = string_count(sep,str);
- if (ind>count) { return ""; }
- if (ind>=1) {
- repeat (ind-1) {
- str = string_replace(str,sep,rep);
- } pos = string_pos(sep,str)+1;
- } else { pos = 1; }
- if (ind<count) {
- if (ind!=0) { str = string_replace(str,sep,rep); }
- len = string_pos(sep,str)-pos;
- } else { len = string_length(str)-pos+1; }
- return string_copy(str,pos,len);

Teilt einen String an einem bestimmten Trennzeichen auf und fügt die einzelnen Substrings einer Liste hinzu.
str: String, der mehrere Substrings enthält..
trenn: ..getrennt durch dieses Zeichen.
list: Die Liste.
Beispiel:
Script:
Alles anzeigen
trenn: ..getrennt durch dieses Zeichen.
list: Die Liste.
Beispiel:
Script:
GML-Quellcode
- var str,split,list,pos,line;
- str = argument0;
- split = argument1;
- list = argument2;
- if (string_count(split,str)==0) {ds_list_add(list,str);}
- else {
- do {
- pos = string_pos(split,str);
- line = string_copy(str,0,pos-1);
- ds_list_add(list,line);
- str = string_replace(str,line+split,"");
- } until (string_count(split,str)==0);
- ds_list_add(list,str);
- }
- return list;

Führt für jeden Eintrag in der Liste einen Script aus.
list: Die Liste.
script: Der Script.
argX: Zusätzliche Argumente.
Beispiel:
Script:
script: Der Script.
argX: Zusätzliche Argumente.
Beispiel:
Script:
GML-Quellcode

Gibt eine Zahl zurück, die näher an val2 liegt (ähnlich wie cb_move2()).
var1: Momentane Zahl.
val2: Zielzahl.
speed: Schrittgröße (2 = halbe Schritte, 4 = viertel Schritte).
min: Mindestschrittgröße.
Beispiel:
Script:
val2: Zielzahl.
speed: Schrittgröße (2 = halbe Schritte, 4 = viertel Schritte).
min: Mindestschrittgröße.
Beispiel:
Script:

Erstellt eine Liste, füllt diese mit den Namen aller Dateien mit einer bestimmten Endung und gibt sie zurück.
dir: Verzeichnis.
ext: Dateiendung.
Beispiel:
Script:
Alles anzeigen
ext: Dateiendung.
Beispiel:
Script:
GML-Quellcode
- _files_path = argument0;
- _files_ext = argument1;
- _files_list = ds_list_create();
- _file = file_find_first(_files_path+"*"+_files_ext,0);
- if (_file != "") {
- ds_list_add(_files_list,_file);
- while (1) {
- _file = file_find_next();
- if (_file = "") {break;}
- else {ds_list_add(_files_list,_file);}
- }
- }
- file_find_close();
- return _files_list;

Zeichnet ein Linie mit Antialiasing. Benutzt den Wu-Algorithmus.
Beispiel:
Script:
Alles anzeigen
Script:
GML-Quellcode
- var grad,xd,yd,length,xm,ym,
- xgap,ygap,xend,yend,xf,yf,
- xx,yy,ix1,ix2,iy1,iy2,c1,c2,
- alpha,temp;
- x1 = argument0;
- y1 = argument1;
- x2 = argument2;
- y2 = argument3;
- alpha = draw_get_alpha();
- xd = (x2-x1);
- yd = (y2-y1);
- if (xd==0||yd==0||abs(xd)==abs(yd)) {
- draw_line(x1,y1,x2,y2); exit;
- }
- if (abs(xd) > abs(yd)) {
- if (x1 > x2) {
- temp = x1; x1 = x2; x2 = temp;
- temp = y1; y1 = y2; y2 = temp;
- }
- grad = yd/xd;
- // End Point 1
- xend = round(x1);
- yend = y1+grad*(xend-x1);
- xgap = 1-frac(x1+.5);
- ix1 = xend;
- iy1 = floor(yend);
- c1 = (1-frac(yend))*xgap*alpha;
- c2 = frac(yend)*xgap*alpha;
- draw_set_alpha(c1); draw_point(ix1,iy1);
- draw_set_alpha(c2); draw_point(ix1,iy1+1);
- yf = yend+grad;
- // End Point 2
- xend = round(x2);
- yend = y2+grad*(xend-x2);
- xgap = 1-frac(x2-.5);
- ix2 = xend;
- iy2 = floor(yend);
- c1 = (1-frac(yend))*xgap*alpha;
- c2 = frac(yend)*xgap*alpha;
- draw_set_alpha(c1); draw_point(ix2,iy2);
- draw_set_alpha(c2); draw_point(ix2,iy2+1);
- // Main Loop
- for (xx=ix1+1;xx<ix2;xx+=1) {
- c1 = (1-frac(yf))*alpha;
- c2 = frac(yf)*alpha;
- draw_set_alpha(c1); draw_point(xx,floor(yf));
- draw_set_alpha(c2); draw_point(xx,floor(yf)+1);
- yf += grad;
- }
- } else {
- if (y1 > y2) {
- temp = y1; y1 = y2; y2 = temp;
- temp = x1; x1 = x2; x2 = temp;
- }
- grad = xd/yd;
- // End Point 1
- yend = round(y1);
- xend = x1+grad*(yend-y1);
- ygap = 1-frac(y1+.5);
- iy1 = yend;
- ix1 = floor(xend);
- c1 = (1-frac(xend))*ygap*alpha;
- c2 = frac(xend)*ygap*alpha;
- draw_set_alpha(c1); draw_point(ix1,iy1);
- draw_set_alpha(c2); draw_point(ix1,iy1+1);
- xf = xend+grad;
- // End Point 2
- yend = round(y2);
- xend = x2+grad*(yend-y2);
- ygap = 1-frac(y2-.5);
- iy2 = yend;
- ix2 = floor(xend);
- c1 = (1-frac(xend))*ygap*alpha;
- c2 = frac(xend)*ygap*alpha;
- draw_set_alpha(c1); draw_point(ix2,iy2);
- draw_set_alpha(c2); draw_point(ix2+1,iy2);
- // Main Loop
- for (yy=iy1+1;yy<iy2;yy+=1) {
- c1 = (1-frac(xf))*alpha;
- c2 = frac(xf)*alpha;
- draw_set_alpha(c1); draw_point(floor(xf),yy);
- draw_set_alpha(c2); draw_point(floor(xf)+1,yy);
- xf += grad;
- }
- }
- draw_set_alpha(alpha);

Zeichnet ein Rechteck mit bestimmter Größe, Textur und Randbreite an der Position.
x/y: Position.
width/height: Größe.
border: Randbreite (0=kein Rand).
texture: Textur.
rotation: Richtung.
centered: Mittig ausgerichtet?
Beispiel:
Script:
Alles anzeigen
width/height: Größe.
border: Randbreite (0=kein Rand).
texture: Textur.
rotation: Richtung.
centered: Mittig ausgerichtet?
Beispiel:
Script:
GML-Quellcode
- var x1,y1,x2,y2,border,rot;
- xx = argument0;
- yy = argument1;
- width = argument2;
- height = argument3;
- border = argument4;
- rot = argument6;
- if (argument7) {
- xx -= lengthdir_x(width/2,rot)+lengthdir_x(height/2,rot-90);
- yy -= lengthdir_y(width/2,rot)+lengthdir_y(height/2,rot-90);
- }
- if (border==0) {
- draw_primitive_begin_texture(pr_trianglefan,argument5);
- draw_vertex_texture(xx+lengthdir_x(width/2,rot)+lengthdir_x(height/2,rot-90),
- yy+lengthdir_y(width/2,rot)+lengthdir_y(height/2,rot-90),0.5,0.5);
- draw_vertex_texture(xx,yy,0,0);
- draw_vertex_texture(xx+lengthdir_x(width,rot),yy+lengthdir_y(width,rot),1,0);
- draw_vertex_texture(xx+lengthdir_x(width,rot)+lengthdir_x(height,rot-90),
- yy+lengthdir_y(width,rot)+lengthdir_y(height,rot-90),1,1);
- draw_vertex_texture(xx+lengthdir_x(height,rot-90),yy+lengthdir_y(height,rot-90),0,1);
- draw_vertex_texture(xx,yy,0,0);
- } else {
- draw_primitive_begin_texture(pr_trianglestrip,argument5);
- draw_vertex_texture(xx,yy,0,0);
- draw_vertex_texture(xx+lengthdir_x(border,rot-45),yy+lengthdir_y(border,rot-45),0,0);
- draw_vertex_texture(xx+lengthdir_x(width,rot),yy+lengthdir_y(width,rot),1,0);
- draw_vertex_texture(xx+lengthdir_x(width,rot)+lengthdir_x(border,rot-135),
- yy+lengthdir_y(width,rot)+lengthdir_y(border,rot-135),1,0);
- draw_vertex_texture(xx+lengthdir_x(width,rot)+lengthdir_x(height,rot-90),
- yy+lengthdir_y(width,rot)+lengthdir_y(height,rot-90),1,1);
- draw_vertex_texture(xx+lengthdir_x(width,rot)+lengthdir_x(height,rot-90)+lengthdir_x(border,rot+135),
- yy+lengthdir_y(width,rot)+lengthdir_y(height,rot-90)+lengthdir_y(border,rot+135),1,1);
- draw_vertex_texture(xx+lengthdir_x(height,rot-90),yy+lengthdir_y(height,rot-90),0,1);
- draw_vertex_texture(xx+lengthdir_x(height,rot-90)+lengthdir_x(border,rot+45),
- yy+lengthdir_y(height,rot-90)+lengthdir_y(border,rot+45),0,1);
- draw_vertex_texture(xx,yy,0,0);
- draw_vertex_texture(xx+lengthdir_x(border,rot-45),yy+lengthdir_y(border,rot-45),0,0);
- }
- draw_primitive_end();
EDIT: strings_get in string_get umbenannt. string_split und draw_rectangle_texture hingefügt.
EDIT2: string_get aktualisiert (ihr könnt euch nicht vorstellen, wie alt das jetzt schon ist ...), ds_list_foreach und draw_line_aa hinzugefügt.
Viel Spaß und Erfolg mit den Scripts,
Gruß, euer kopierjunge

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von copyboy ()