Undertale Yellow script viewer

← back to main script listing

gml_GlobalScript_d3d_model_draw

(view raw script w/o annotations or w/e)
1
function d3d_model_draw(arg0, arg1, arg2, arg3, arg4)
2
{
3
    var m = arg0;
4
    var tex = arg4;
5
    var vertsize = 36;
6
    var vertuvoffset = 28;
7
    if (tex != -1 && tex != m[UnknownEnum.Value_9])
8
    {
9
        var texuvs = texture_get_uvs(tex);
10
        var uspan = texuvs[2] - texuvs[0];
11
        var vspan = texuvs[3] - texuvs[1];
12
        var ubase = texuvs[0];
13
        var vbase = texuvs[1];
14
        if (m[UnknownEnum.Value_0] != undefined && m[UnknownEnum.Value_3] != undefined)
15
        {
16
            var numverts = buffer_tell(m[UnknownEnum.Value_3]) / 8;
17
            buffer_seek(m[UnknownEnum.Value_3], buffer_seek_start, 0);
18
            var __uvpos = vertuvoffset;
19
            var __src = m[UnknownEnum.Value_3];
20
            var __dest = m[UnknownEnum.Value_0];
21
            for (var __i = 0; __i < numverts; __i++)
22
            {
23
                var __u = buffer_read(__src, buffer_f32);
24
                var __v = buffer_read(__src, buffer_f32);
25
                __u = (__u * uspan) + ubase;
26
                __v = (__v * vspan) + vbase;
27
                buffer_poke(__dest, __uvpos, buffer_f32, __u);
28
                buffer_poke(__dest, __uvpos + 4, buffer_f32, __v);
29
                __uvpos += vertsize;
30
            }
31
        }
32
        if (m[UnknownEnum.Value_1] != undefined && m[UnknownEnum.Value_4] != undefined)
33
        {
34
            var numverts = buffer_tell(m[UnknownEnum.Value_4]) / 8;
35
            buffer_seek(m[UnknownEnum.Value_4], buffer_seek_start, 0);
36
            var __uvpos = vertuvoffset;
37
            var __src = m[UnknownEnum.Value_4];
38
            var __dest = m[UnknownEnum.Value_1];
39
            for (var __i = 0; __i < numverts; __i++)
40
            {
41
                var __u = buffer_read(__src, buffer_f32);
42
                var __v = buffer_read(__src, buffer_f32);
43
                __u = (__u * uspan) + ubase;
44
                __v = (__v * vspan) + vbase;
45
                buffer_poke(__dest, __uvpos, buffer_f32, __u);
46
                buffer_poke(__dest, __uvpos + 4, buffer_f32, __v);
47
                __uvpos += vertsize;
48
            }
49
        }
50
        if (m[UnknownEnum.Value_2] != undefined && m[UnknownEnum.Value_5] != undefined)
51
        {
52
            var numverts = buffer_tell(m[UnknownEnum.Value_5]) / 8;
53
            buffer_seek(m[UnknownEnum.Value_5], buffer_seek_start, 0);
54
            var __uvpos = vertuvoffset;
55
            var __src = m[UnknownEnum.Value_5];
56
            var __dest = m[UnknownEnum.Value_2];
57
            for (var __i = 0; __i < numverts; __i++)
58
            {
59
                var __u = buffer_read(__src, buffer_f32);
60
                var __v = buffer_read(__src, buffer_f32);
61
                __u = (__u * uspan) + ubase;
62
                __v = (__v * vspan) + vbase;
63
                buffer_poke(__dest, __uvpos, buffer_f32, __u);
64
                buffer_poke(__dest, __uvpos + 4, buffer_f32, __v);
65
                __uvpos += vertsize;
66
            }
67
        }
68
        array_set(m, UnknownEnum.Value_9, tex);
69
        if (m[UnknownEnum.Value_6] != undefined)
70
        {
71
            vertex_delete_buffer(m[UnknownEnum.Value_6]);
72
            array_set(m, UnknownEnum.Value_6, undefined);
73
        }
74
        if (m[UnknownEnum.Value_7] != undefined)
75
        {
76
            vertex_delete_buffer(m[UnknownEnum.Value_7]);
77
            array_set(m, UnknownEnum.Value_7, undefined);
78
        }
79
        if (m[UnknownEnum.Value_8] != undefined)
80
        {
81
            vertex_delete_buffer(m[UnknownEnum.Value_8]);
82
            array_set(m, UnknownEnum.Value_8, undefined);
83
        }
84
    }
85
    var currColour = draw_get_colour() | ((draw_get_alpha() * 255) << 24);
86
    if (currColour != m[UnknownEnum.Value_10] && (m[UnknownEnum.Value_13] > 0 || m[UnknownEnum.Value_14] > 0 || m[UnknownEnum.Value_15] > 0))
87
    {
88
        var __numPointCols = m[UnknownEnum.Value_13];
89
        var __numLineCols = m[UnknownEnum.Value_14];
90
        var __numTriCols = m[UnknownEnum.Value_15];
91
        if (m[UnknownEnum.Value_0] != undefined)
92
        {
93
            var __offsets = m[UnknownEnum.Value_16];
94
            var __dest = m[UnknownEnum.Value_0];
95
            for (var __i = 0; __i < __numPointCols; __i++)
96
                buffer_poke(__dest, __offsets[__i], buffer_u32, currColour);
97
        }
98
        if (m[UnknownEnum.Value_1] != undefined)
99
        {
100
            var __offsets = m[UnknownEnum.Value_17];
101
            var __dest = m[UnknownEnum.Value_1];
102
            for (var __i = 0; __i < __numLineCols; __i++)
103
                buffer_poke(__dest, __offsets[__i], buffer_u32, currColour);
104
        }
105
        if (m[UnknownEnum.Value_2] != undefined)
106
        {
107
            var __offsets = m[UnknownEnum.Value_18];
108
            var __dest = m[UnknownEnum.Value_2];
109
            for (var __i = 0; __i < __numTriCols; __i++)
110
                buffer_poke(__dest, __offsets[__i], buffer_u32, currColour);
111
        }
112
        if (m[UnknownEnum.Value_6] != undefined)
113
        {
114
            vertex_delete_buffer(m[UnknownEnum.Value_6]);
115
            array_set(m, UnknownEnum.Value_6, undefined);
116
        }
117
        if (m[UnknownEnum.Value_7] != undefined)
118
        {
119
            vertex_delete_buffer(m[UnknownEnum.Value_7]);
120
            array_set(m, UnknownEnum.Value_7, undefined);
121
        }
122
        if (m[UnknownEnum.Value_8] != undefined)
123
        {
124
            vertex_delete_buffer(m[UnknownEnum.Value_8]);
125
            array_set(m, UnknownEnum.Value_8, undefined);
126
        }
127
        array_set(m, UnknownEnum.Value_10, currColour);
128
    }
129
    var mW = matrix_get(2);
130
    var mT = matrix_build(arg1, arg2, arg3, 0, 0, 0, 1, 1, 1);
131
    var mNew = matrix_multiply(mT, mW);
132
    matrix_set(2, mNew);
133
    var __oldrep = gpu_get_texrepeat();
134
    gpu_set_texrepeat(true);
135
    if (m[UnknownEnum.Value_2] != undefined)
136
    {
137
        if (m[UnknownEnum.Value_8] == undefined)
138
        {
139
            array_set(m, UnknownEnum.Value_8, vertex_create_buffer_from_buffer(m[UnknownEnum.Value_2], global.__d3dPrimVF));
140
            vertex_freeze(m[UnknownEnum.Value_8]);
141
        }
142
        vertex_submit(m[UnknownEnum.Value_8], pr_trianglelist, arg4);
143
    }
144
    if (m[UnknownEnum.Value_1] != undefined)
145
    {
146
        if (m[UnknownEnum.Value_7] == undefined)
147
        {
148
            array_set(m, UnknownEnum.Value_7, vertex_create_buffer_from_buffer(m[UnknownEnum.Value_1], global.__d3dPrimVF));
149
            vertex_freeze(m[UnknownEnum.Value_7]);
150
        }
151
        vertex_submit(m[UnknownEnum.Value_7], pr_linelist, arg4);
152
    }
153
    if (m[UnknownEnum.Value_0] != undefined)
154
    {
155
        if (m[UnknownEnum.Value_6] == undefined)
156
        {
157
            array_set(m, UnknownEnum.Value_6, vertex_create_buffer_from_buffer(m[UnknownEnum.Value_0], global.__d3dPrimVF));
158
            vertex_freeze(m[UnknownEnum.Value_6]);
159
        }
160
        vertex_submit(m[UnknownEnum.Value_6], pr_pointlist, arg4);
161
    }
162
    matrix_set(2, mW);
163
    gpu_set_texrepeat(__oldrep);
164
}
165
166
enum UnknownEnum
167
{
168
    Value_0,
169
    Value_1,
170
    Value_2,
171
    Value_3,
172
    Value_4,
173
    Value_5,
174
    Value_6,
175
    Value_7,
176
    Value_8,
177
    Value_9,
178
    Value_10,
179
    Value_13 = 13,
180
    Value_14,
181
    Value_15,
182
    Value_16,
183
    Value_17,
184
    Value_18
185
}