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 |
} |