Deltarune (Chapter 3) script viewer

← back to main script listing

gml_GlobalScript_scr_draw_sprite_pos_fixed

(view raw script w/o annotations or w/e)
1
vertex_format_begin();
2
vertex_format_add_colour();
3
vertex_format_add_position();
4
vertex_format_add_normal();
5
global.format_perspective = vertex_format_end();
6
7
function draw_sprite_pos_fixed(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
8
{
9
    draw_sprite_pos_fixed_col(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, 16777215, arg10);
10
}
11
12
function draw_sprite_pos_fixed_col(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)
13
{
14
    var texture = sprite_get_texture(arg0, arg1);
15
    var uvs = sprite_get_uvs(arg0, arg1);
16
    var ax = arg4 - arg8;
17
    var ay = arg5 - arg9;
18
    var bx = arg2 - arg6;
19
    var by = arg3 - arg7;
20
    var can = (ax * by) - (ay * bx);
21
    if (can != 0)
22
    {
23
        var cx = arg8 - arg6;
24
        var cy = arg9 - arg7;
25
        var s = ((ax * cy) - (ay * cx)) / can;
26
        if (s > 0 && s < 1)
27
        {
28
            var t = ((bx * cy) - (by * cx)) / can;
29
            if (t > 0 && t < 1)
30
            {
31
                var q4 = 1 / (1 - t);
32
                var q3 = 1 / (1 - s);
33
                var q2 = 1 / t;
34
                var q1 = 1 / s;
35
                var v_buffer = vertex_create_buffer();
36
                vertex_begin(v_buffer, global.format_perspective);
37
                vertex_colour(v_buffer, arg10, arg11);
38
                vertex_position(v_buffer, arg2, arg3);
39
                vertex_normal(v_buffer, q1 * uvs[0], q1 * uvs[1], q1);
40
                vertex_colour(v_buffer, arg10, arg11);
41
                vertex_position(v_buffer, arg4, arg5);
42
                vertex_normal(v_buffer, q2 * uvs[2], q2 * uvs[1], q2);
43
                vertex_colour(v_buffer, arg10, arg11);
44
                vertex_position(v_buffer, arg8, arg9);
45
                vertex_normal(v_buffer, q4 * uvs[0], q4 * uvs[3], q4);
46
                vertex_colour(v_buffer, arg10, arg11);
47
                vertex_position(v_buffer, arg6, arg7);
48
                vertex_normal(v_buffer, q3 * uvs[2], q3 * uvs[3], q3);
49
                vertex_end(v_buffer);
50
                shader_set(sh_perspective);
51
                vertex_submit(v_buffer, pr_trianglestrip, texture);
52
                shader_reset();
53
                vertex_delete_buffer(v_buffer);
54
            }
55
        }
56
    }
57
}
58
59
function draw_surface_pos_fixed(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
60
{
61
    var texture = surface_get_texture(arg0);
62
    var ax = arg4 - arg8;
63
    var ay = arg5 - arg9;
64
    var bx = arg2 - arg6;
65
    var by = arg3 - arg7;
66
    var can = (ax * by) - (ay * bx);
67
    if (can != 0)
68
    {
69
        var cx = arg8 - arg6;
70
        var cy = arg9 - arg7;
71
        var s = ((ax * cy) - (ay * cx)) / can;
72
        if (s > 0 && s < 1)
73
        {
74
            var t = ((bx * cy) - (by * cx)) / can;
75
            if (t > 0 && t < 1)
76
            {
77
                var q4 = 1 / (1 - t);
78
                var q3 = 1 / (1 - s);
79
                var q2 = 1 / t;
80
                var q1 = 1 / s;
81
                var v_buffer = vertex_create_buffer();
82
                vertex_begin(v_buffer, global.format_perspective);
83
                vertex_colour(v_buffer, c_white, arg10);
84
                vertex_position(v_buffer, arg2, arg3);
85
                vertex_normal(v_buffer, q1 * 0, q1 * 0, q1);
86
                vertex_colour(v_buffer, c_white, arg10);
87
                vertex_position(v_buffer, arg4, arg5);
88
                vertex_normal(v_buffer, q2 * 1, q2 * 0, q2);
89
                vertex_colour(v_buffer, c_white, arg10);
90
                vertex_position(v_buffer, arg8, arg9);
91
                vertex_normal(v_buffer, q4 * 0, q4 * 1, q4);
92
                vertex_colour(v_buffer, c_white, arg10);
93
                vertex_position(v_buffer, arg6, arg7);
94
                vertex_normal(v_buffer, q3 * 1, q3 * 1, q3);
95
                vertex_end(v_buffer);
96
                shader_set(sh_perspective);
97
                vertex_submit(v_buffer, pr_trianglestrip, texture);
98
                shader_reset();
99
                vertex_delete_buffer(v_buffer);
100
            }
101
        }
102
    }
103
}