Deltarune (Chapter 5) script viewer

← back to main script listing

gml_GlobalScript_scr_bitmask

(view raw script w/o annotations or w/e)
1
function scr_array_to_bitmask(arg0, arg1 = 1)
2
{
3
    var maxvalue = power(2, arg1) - 1;
4
    var newFlag = 0;
5
    var arrayLength = array_length(arg0);
6
    if (arrayLength > floor(18 / arg1))
7
        
scr_debug_print
scr_debug_print

function
scr_debug_print()
{ if (!
scr_debug())
exit; } function scr_debug_clear_all() { }
("Warning! values_to_bitmask: Array too long. Truncating to " + string(floor(18 / arg1)));
8
    for (var i = 0; i < min(arrayLength, floor(18 / arg1)); i++)
9
    {
10
        var value = arg0[i];
11
        if (value > maxvalue || value < 0 || floor(value) != value)
12
        {
13
            
scr_debug_print
scr_debug_print

function
scr_debug_print()
{ if (!
scr_debug())
exit; } function scr_debug_clear_all() { }
("Warning! values_to_bitmask: Value " + string(i) + "is too large, too small or not an integer.");
14
            value = clamp(floor(value), 0, maxvalue);
15
            
scr_debug_print
scr_debug_print

function
scr_debug_print()
{ if (!
scr_debug())
exit; } function scr_debug_clear_all() { }
("Fixed Value: " + string(value));
16
        }
17
        newFlag |= ((value & maxvalue) << (i * arg1));
18
    }
19
    return newFlag;
20
}
21
22
function scr_bitmask_to_array(arg0, arg1, arg2 = 1)
23
{
24
    var mask = power(2, arg2) - 1;
25
    var values = array_create(arg1);
26
    for (var i = 0; i < arg1; i++)
27
        values[i] = (arg0 >> (i * arg2)) & mask;
28
    return values;
29
}
30
31
function scr_set_bitmask_value(arg0, arg1, arg2, arg3 = 1)
32
{
33
    var maxvalue = power(2, arg3) - 1;
34
    if (arg2 > maxvalue || arg2 < 0 || floor(arg2) != arg2)
35
    {
36
        
scr_debug_print
scr_debug_print

function
scr_debug_print()
{ if (!
scr_debug())
exit; } function scr_debug_clear_all() { }
("Warning! scr_set_bitmask_value: Value " + string(arg2) + " is too large, too small or not an integer.");
37
        arg2 = clamp(floor(arg2), 0, maxvalue);
38
        
scr_debug_print
scr_debug_print

function
scr_debug_print()
{ if (!
scr_debug())
exit; } function scr_debug_clear_all() { }
("Fixed Value: " + string(arg2));
39
    }
40
    if (arg1 > (18 / arg3))
41
        
scr_debug_print
scr_debug_print

function
scr_debug_print()
{ if (!
scr_debug())
exit; } function scr_debug_clear_all() { }
("ERROR: WRITING OUT OF BITMASK BOUNDS");
42
    arg0 &= ~(maxvalue << (arg1 * arg3));
43
    arg0 |= ((arg2 & maxvalue) << (arg1 * arg3));
44
    return arg0;
45
}
46
47
function scr_get_bitmask_value(arg0, arg1, arg2 = 1)
48
{
49
    var maxvalue = power(2, arg2) - 1;
50
    return (arg0 >> (arg1 * arg2)) & maxvalue;
51
}