Deltarune (Chapter 5) 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_surface_pos_fixed(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
13
{
14
    draw_surface_pos_fixed_col(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, 16777215, arg10);
15
}
16
17
function draw_sprite_pos_fixed_col(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)
18
{
19
    var texture = sprite_get_texture(arg0, arg1);
20
    var uvs = sprite_get_uvs(arg0, arg1);
21
    var ax = arg4 - arg8;
22
    var ay = arg5 - arg9;
23
    var bx = arg2 - arg6;
24
    var by = arg3 - arg7;
25
    var can = (ax * by) - (ay * bx);
26
    if (can != 0)
27
    {
28
        var cx = arg8 - arg6;
29
        var cy = arg9 - arg7;
30
        var s = ((ax * cy) - (ay * cx)) / can;
31
        if (s > 0 && s < 1)
32
        {
33
            var t = ((bx * cy) - (by * cx)) / can;
34
            if (t > 0 && t < 1)
35
            {
36
                var q4 = 1 / (1 - t);
37
                var q3 = 1 / (1 - s);
38
                var q2 = 1 / t;
39
                var q1 = 1 / s;
40
                var v_buffer = vertex_create_buffer();
41
                vertex_begin(v_buffer, global.format_perspective);
42
                vertex_colour(v_buffer, arg10, arg11);
43
                vertex_position(v_buffer, arg2, arg3);
44
                vertex_normal(v_buffer, q1 * uvs[0], q1 * uvs[1], q1);
45
                vertex_colour(v_buffer, arg10, arg11);
46
                vertex_position(v_buffer, arg4, arg5);
47
                vertex_normal(v_buffer, q2 * uvs[2], q2 * uvs[1], q2);
48
                vertex_colour(v_buffer, arg10, arg11);
49
                vertex_position(v_buffer, arg8, arg9);
50
                vertex_normal(v_buffer, q4 * uvs[0], q4 * uvs[3], q4);
51
                vertex_colour(v_buffer, arg10, arg11);
52
                vertex_position(v_buffer, arg6, arg7);
53
                vertex_normal(v_buffer, q3 * uvs[2], q3 * uvs[3], q3);
54
                vertex_end(v_buffer);
55
                shader_replace_simple_set_hook(15);
56
                vertex_submit(v_buffer, pr_trianglestrip, texture);
57
                shader_replace_simple_reset_hook();
58
                vertex_delete_buffer(v_buffer);
59
            }
60
        }
61
    }
62
}
63
64
function draw_surface_pos_fixed_col(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)
65
{
66
    var texture = surface_get_texture(arg0);
67
    var ax = arg4 - arg8;
68
    var ay = arg5 - arg9;
69
    var bx = arg2 - arg6;
70
    var by = arg3 - arg7;
71
    var can = (ax * by) - (ay * bx);
72
    if (can != 0)
73
    {
74
        var cx = arg8 - arg6;
75
        var cy = arg9 - arg7;
76
        var s = ((ax * cy) - (ay * cx)) / can;
77
        if (s > 0 && s < 1)
78
        {
79
            var t = ((bx * cy) - (by * cx)) / can;
80
            if (t > 0 && t < 1)
81
            {
82
                var q4 = 1 / (1 - t);
83
                var q3 = 1 / (1 - s);
84
                var q2 = 1 / t;
85
                var q1 = 1 / s;
86
                var v_buffer = vertex_create_buffer();
87
                vertex_begin(v_buffer, global.format_perspective);
88
                vertex_colour(v_buffer, arg10, arg11);
89
                vertex_position(v_buffer, arg2, arg3);
90
                vertex_normal(v_buffer, q1 * 0, q1 * 0, q1);
91
                vertex_colour(v_buffer, arg10, arg11);
92
                vertex_position(v_buffer, arg4, arg5);
93
                vertex_normal(v_buffer, q2 * 1, q2 * 0, q2);
94
                vertex_colour(v_buffer, arg10, arg11);
95
                vertex_position(v_buffer, arg8, arg9);
96
                vertex_normal(v_buffer, q4 * 0, q4 * 1, q4);
97
                vertex_colour(v_buffer, arg10, arg11);
98
                vertex_position(v_buffer, arg6, arg7);
99
                vertex_normal(v_buffer, q3 * 1, q3 * 1, q3);
100
                vertex_end(v_buffer);
101
                shader_replace_simple_set_hook(15);
102
                vertex_submit(v_buffer, pr_trianglestrip, texture);
103
                shader_replace_simple_reset_hook();
104
                vertex_delete_buffer(v_buffer);
105
            }
106
        }
107
    }
108
}