GMLscripts.com

Discuss and collaborate on GML scripts
Invert

You are not logged in.

#1 Script Submission » Ackermann function » 2016-04-08 16:34:37

AnastasiaDunbar
Replies: 1

Functional:

Expand///ackermann(m,n)
//Source: https://rosettacode.org/wiki/Ackermann_function#GML
var m = argument0, n = argument1;
if(m=0) {
    return (n+1)
} else if(n == 0) {
    return (ackermann(m-1,1))
} else {
    return (ackermann(m-1,ackermann(m,n-1)))
}

Imperative:

Expand///ackermann(m,n)
//Source: http://stackoverflow.com/a/1095538/4538129
var m = argument0, n = argument1;
var s = ds_stack_create();
ds_stack_push(s,m);
while (ds_stack_size(s)>0) {
   m = ds_stack_pop(s)
   if (m == 0) {
      n++
   } else if (n == 0) {
      ds_stack_push(s,m-1)
      n=1
   } else {
      ds_stack_push(s,m-1)
      ds_stack_push(s,m)
      n--
   }
}
return n

pls don't kill me xot

#2 Script Submission » Quadrangle (with 5 options) » 2016-04-03 01:45:38

AnastasiaDunbar
Replies: 0
Expand///quadrangle(tl_x,tl_y,tr_x,tr_y,bl_x,bl_y,br_x,br_y,mode)
//Mode 0 = Lines
//Mode 1 = Filled
//Mode 2 = X
//Mode 3 = Triangles
//Mode 4 = Triangles (Reversed)
var tl_x=argument0,tl_y=argument1,tr_x=argument2,tr_y=argument3,bl_x=argument4,bl_y=argument5,br_x=argument6,br_y=argument7,m=argument8;
if(is_string(m)){string_lower(m);switch(m){
case"line":m=0;break;
case"x":m=2;break;
case"fill":m=1;break;
}}
if(m=0){
//1---2
//|   |
//4---3
draw_line(tl_x,tl_y,tr_x,tr_y) //1 to 2
draw_line(tr_x,tr_y,br_x,br_y) //2 to 3
draw_line(br_x,br_y,bl_x,bl_y) //3 to 4
draw_line(bl_x,bl_y,tl_x,tl_y) //4 to 1
}else if(m=1){
draw_triangle(tl_x,tl_y,bl_x,bl_y,br_x,br_y,false)
draw_triangle(tl_x,tl_y,tr_x,tr_y,br_x,br_y,false)
}else if(m=2){
//1-2
//|X|
//4-3
draw_line(tl_x,tl_y,tr_x,tr_y) //1 to 2
draw_line(tr_x,tr_y,br_x,br_y) //2 to 3
draw_line(br_x,br_y,bl_x,bl_y) //3 to 4
draw_line(bl_x,bl_y,tl_x,tl_y) //4 to 1
draw_line(tl_x,tl_y,br_x,br_y) //1 to 3
draw_line(tr_x,tr_y,bl_x,bl_y) //2 to 4
}else if(m=3){
//1-2
// \|
//  3
draw_triangle(tl_x,tl_y,tr_x,tr_y,br_x,br_y,true)
//1 
//|\
//2-3
draw_triangle(tl_x,tl_y,bl_x,bl_y,br_x,br_y,true)
}else if(m=4){
//1-2
//|/
//3
draw_triangle(tl_x,tl_y,tr_x,tr_y,bl_x,bl_y,true)
//  1
// /|
//3-2
draw_triangle(tr_x,tr_y,br_x,br_y,bl_x,bl_y,true)
}

#3 Re: Script Submission » leftpad() » 2016-04-03 01:04:23

Expand///leftpad(string,length,char)
var str = string(argument0), num = argument1, char = string(argument2);
var loops = num-string_length(str) //It changes in loop.
for (var i=0;i<loops;i++) {
    str = string_char_at(char,(((loops-i)-1)%string_length(char))+1)+str;
}
return str

leftpad("Test",15,"ABCD") → "ABCDABCDABCTest"

#4 Re: Script Submission » ds_list_count_value() » 2016-04-02 23:39:43

Expand///ds_list_count_value(id,value)
var a = 0, b = ds_list_size(argument0)
for (var i = 0; i < b; i++) {
    if argument0[| i] = argument1 { a++ }
}
return a;

Like this?

#5 Script Submission » leftpad() » 2016-04-02 23:36:23

AnastasiaDunbar
Replies: 1
Expand///leftpad(string,length,char)
var str = string(argument0), num = argument1, char = string(argument2);
var loops = num-string_length(str) //It changes in loop.
for (var i=0;i<loops;i++) {
    str = char+str;
}
return str

leftpad("Test",10,"p") → "ppppppTest"
It's a joke.

#6 Re: Script Submission » Avoid dividing by zero. » 2016-01-27 19:33:30

Alternative

Expand///divide(a,b)
var a = argument0, b = argument1, mins = 0.00001;
if (abs(b) < mins) {
    return 0
} else {
    return a/b
}

#7 Re: Script Submission » sign_opposite() » 2016-01-10 11:55:42

But there isn't well opposite of zero? Is it infinite?

#8 Re: Script Submission » sign_opposite() » 2016-01-08 06:29:20

What about this?

Expand///sign_opposite(val1,val2)
return sign(argument0) != sign(argument1);

#9 Script Submission » ds_list_get_list() » 2016-01-06 14:46:42

AnastasiaDunbar
Replies: 1
Expand///ds_list_get_list(id)
var list = ds_list_create();
ds_list_copy(list,argument0);
return list;

The script is for avoiding a list being affected with a variable with its list.
For example, if my code looks like this:

Expand//Create event
list = ds_list_create();
array = 0;

//Step event
for (var i = 0; i < 4; i++) {
    ds_list_add(list,"foo");
    array[i] = list;
}

//Draw event
for (var i = 0; i < array_length_1d(array); i++) {
    var str = "";
    for (var k = 0; k < ds_list_size(array[i]); k++) {
        str += ds_list_find_value(array[i],k);
    }
    draw_text(0,i*20,str);
}

It displays:

Expandfoofoofoofoo
foofoofoofoo
foofoofoofoo
foofoofoofoo

Instead of:

Expandfoo
foofoo
foofoofoo
foofoofoofoo

Fix step event by:

Expandfor (var i = 0; i < 4; i++) {
    ds_list_add(list,"foo");
    array[i] = ds_list_get_list(list);
}

Don't forget to destroy the lists.

#10 Script Submission » ds_list_count_value() » 2016-01-06 14:12:21

AnastasiaDunbar
Replies: 2
Expand///ds_list_count_value(id,value)
var a = 0;
for (var i = 0; i < ds_list_size(argument0); i++) {
    if argument0[| i] = argument1 { a++ }
}
return a;

Simple function.

#11 Script Submission » Avoid dividing by zero. » 2015-12-24 00:47:13

AnastasiaDunbar
Replies: 1
Expand///divide(a,b)
var a = argument0, b = argument1;
var mins = 0.0001;
return (a/max(abs(b),mins))*sign(b)

If you wanna avoid divide by zero error.

#12 Script Submission » string_replace_all_insensitive() » 2015-12-22 20:24:42

AnastasiaDunbar
Replies: 0

Basically case-insensitive replacement.

Expand///string_replace_all_insensitive(str,substr,newstr)
//Variable str should we use.
//Variable in is for case insensitive.
var str = argument0, substr = string_lower(argument1), newstr = argument2;
var a = 0, out = "", lowstr = string_lower(str);
for (var i = 0; i < string_length(str); i++) { //For each character in string.
    if (string_char_at(lowstr,a+1) = string_char_at(substr,1)) { //If the character is same as substring.
        var b = 0;
        for (var j = 0; j < string_length(substr); j++) {
            if (string_char_at(lowstr,a+j+1) = string_char_at(substr,j+1)) {
                b++ //Add to b.
            }
        }
        if b = string_length(substr) {
            out += newstr //Add new string.
            a += string_length(substr)-1
        } else {
            out += string_char_at(str,a+1) //Add original character.
        }
    } else {
        out += string_char_at(str,a+1) //Add original character.
    }
    a++
}
return out;

string_replace_all_insensitive("Hello world. Toma Tomat tomato TOMATO-TomatoTomato Tomato tOmATo","tomato","banana")
becomes "Hello world. Toma Tomat banana banana-bananabanana banana banana"

Board footer

Powered by FluxBB