Subversion Repositories Kolibri OS

Rev

Rev 6060 | Rev 6509 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6060 Rev 6081
1
;
1
;
2
; áâàãªâãàë ¨ ä㭪樨 ¤«ï à¨á®¢ ­¨ï 3d ®¡ê¥ªâ®¢
2
; áâàãªâãàë ¨ ä㭪樨 ¤«ï à¨á®¢ ­¨ï 3d ®¡ê¥ªâ®¢
3
;
3
;
4
 
4
 
5
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
5
offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc'
6
 
6
 
7
struct obj_3d
7
struct obj_3d
8
	poi_data dd ? ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
8
	poi_data dd ? ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
9
	poi_count dd ? ;ª®««¨ç¥á⢮ ¢¥à設
9
	poi_count dd ? ;ª®««¨ç¥á⢮ ¢¥à設
10
	tri_data dd ? ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
10
	tri_data dd ? ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
11
	tri_count dd ? ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
11
	tri_count dd ? ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
12
	normals_poi_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª â®çª ¬
12
	normals_poi_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª â®çª ¬
13
	normals_poi_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª â®çª ¬
13
	normals_poi_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª â®çª ¬
14
	normals_tri_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª £à ­ï¬
14
	normals_tri_data dd ? ;¤ ­­ë¥ ­®à¬ «¥© ª £à ­ï¬
15
	normals_tri_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª £à ­ï¬
15
	normals_tri_count dd ? ;ª®««¨ç¥á⢮ ­®à¬ «¥© ª £à ­ï¬
16
	x_max dd ?
16
	x_max dd ?
17
	x_min dd ?
17
	x_min dd ?
18
	x_centr dd ?
18
	x_centr dd ?
19
	x_scale dd ?
19
	x_scale dd ?
20
	y_max dd ?
20
	y_max dd ?
21
	y_min dd ?
21
	y_min dd ?
22
	y_centr dd ?
22
	y_centr dd ?
23
	y_scale dd ?
23
	y_scale dd ?
24
	z_max dd ?
24
	z_max dd ?
25
	z_min dd ?
25
	z_min dd ?
26
	z_centr dd ?
26
	z_centr dd ?
27
	z_scale dd ?
27
	z_scale dd ?
28
ends
28
ends
29
 
29
 
30
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
30
offs_obj_poi_data equ 0 ;㪠§ â¥«ì ­  ª®®à¤¨­ âë ¢¥à設
31
offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥à設
31
offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥à設
32
offs_obj_tri_data equ 8 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
32
offs_obj_tri_data equ 8 ;㪠§ â¥«ì ­  ¤ ­­ë¥ âà¥ã£®«ì­¨ª®¢
33
offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
33
offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì­¨ª®¢
34
offs_obj_normals_poi_data equ 16
34
offs_obj_normals_poi_data equ 16
35
offs_obj_normals_poi_count equ 20
35
offs_obj_normals_poi_count equ 20
36
offs_obj_normals_tri_data equ 24
36
offs_obj_normals_tri_data equ 24
37
offs_obj_normals_tri_count equ 28
37
offs_obj_normals_tri_count equ 28
38
offs_obj_x_max equ 32
38
offs_obj_x_max equ 32
39
offs_obj_x_min equ 36
39
offs_obj_x_min equ 36
40
offs_obj_x_centr equ 40
40
offs_obj_x_centr equ 40
41
offs_obj_x_scale equ 44
41
offs_obj_x_scale equ 44
42
offs_obj_y_max equ 48
42
offs_obj_y_max equ 48
43
offs_obj_y_min equ 52
43
offs_obj_y_min equ 52
44
offs_obj_y_centr equ 56
44
offs_obj_y_centr equ 56
45
offs_obj_y_scale equ 60
45
offs_obj_y_scale equ 60
46
offs_obj_z_max equ 64
46
offs_obj_z_max equ 64
47
offs_obj_z_min equ 68
47
offs_obj_z_min equ 68
48
offs_obj_z_centr equ 72
48
offs_obj_z_centr equ 72
49
offs_obj_z_scale equ 76
49
offs_obj_z_scale equ 76
-
 
50
 
-
 
51
struct material
-
 
52
	name dd ?
-
 
53
	col_ambient dd ? ;梥⠬ â¥à¨ « 
-
 
54
	col_diffuse dd ?
-
 
55
	col_specular dd ?
-
 
56
ends
-
 
57
 
-
 
58
offs_mat_name equ 0
-
 
59
offs_mat_col_ambient equ 4
-
 
60
offs_mat_col_diffuse equ 8
50
 
61
offs_mat_col_specular equ 12
51
 
62
 
52
bit_vertexes equ 0
63
bit_vertexes equ 0
53
bit_faces equ 1
64
bit_faces equ 1
54
bit_faces_fill equ 2
65
bit_faces_fill equ 2
55
bit_light equ 3
66
bit_light equ 3
56
 
67
 
57
ini_name db 'info3ds.ini',0
68
ini_name db 'info3ds.ini',0
58
ini_sec_w3d db 'Window 3d',0
69
ini_sec_w3d db 'Window 3d',0
59
key_dv  db 'draw_vertices',0
70
key_dv  db 'draw_vertices',0
60
key_df  db 'draw_faces',0
71
key_df  db 'draw_faces',0
61
key_dff db 'draw_faces_fill',0
72
key_dff db 'draw_faces_fill',0
62
key_dl  db 'draw_light',0
73
key_dl  db 'draw_light',0
63
key_ox  db 'col_ox',0
74
key_ox  db 'col_ox',0
64
key_oy  db 'col_oy',0
75
key_oy  db 'col_oy',0
65
key_oz  db 'col_oz',0
76
key_oz  db 'col_oz',0
66
key_bk  db 'col_bkgnd',0
77
key_bk  db 'col_bkgnd',0
67
key_vert db 'col_vertices',0
78
key_vert db 'col_vertices',0
68
key_face db 'col_faces',0
79
key_face db 'col_faces',0
69
key_select db 'col_select',0
80
key_select db 'col_select',0
70
 
81
 
71
 
82
 
72
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
83
rad_c dd 150 ;¤«ï ¢ëç¨á«¥­¨ï à ¤¨ãá 
-
 
84
 
-
 
85
align 4
-
 
86
proc hex_in_str, buf:dword,val:dword,zif:dword
-
 
87
pushad
-
 
88
	mov edi,dword[buf]
-
 
89
	mov ecx,dword[zif]
-
 
90
	add edi,ecx
-
 
91
	dec edi
-
 
92
	mov ebx,dword[val]
-
 
93
 
-
 
94
	.cycle:
-
 
95
		mov al,bl
-
 
96
		and al,0xf
-
 
97
		cmp al,10
-
 
98
		jl @f
-
 
99
			add al,'a'-'0'-10
-
 
100
		@@:
-
 
101
		add al,'0'
-
 
102
		mov byte[edi],al
-
 
103
		dec edi
-
 
104
		shr ebx,4
-
 
105
	loop .cycle
-
 
106
popad
-
 
107
	ret
73
 
108
endp
74
 
109
 
75
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
110
;ãáâ ­®¢ª  ¢á¥å ®á­®¢­ëå ¯¥à¥¬¥­­ëå ¯® 㬮«ç ­¨î
76
align 4
111
align 4
77
proc obj_clear_param uses edi, o_data:dword
112
proc obj_clear_param uses edi, o_data:dword
78
	mov edi,[o_data]
113
	mov edi,[o_data]
79
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
114
	;®¡­ã«¥­¨¥ 㪠§ â¥«¥© ­  ¤ ­­ë¥ ®¡ê¥ªâ®¢
80
	mov dword[edi+offs_obj_poi_data],0
115
	mov dword[edi+offs_obj_poi_data],0
81
	mov dword[edi+offs_obj_poi_count],0
116
	mov dword[edi+offs_obj_poi_count],0
82
	mov dword[edi+offs_obj_tri_data],0
117
	mov dword[edi+offs_obj_tri_data],0
83
	mov dword[edi+offs_obj_tri_count],0
118
	mov dword[edi+offs_obj_tri_count],0
84
	mov dword[edi+offs_obj_normals_tri_count],0
119
	mov dword[edi+offs_obj_normals_tri_count],0
85
	mov dword[edi+offs_obj_normals_poi_count],0
120
	mov dword[edi+offs_obj_normals_poi_count],0
86
	cmp dword[edi+offs_obj_normals_tri_data],0
121
	cmp dword[edi+offs_obj_normals_tri_data],0
87
	je @f
122
	je @f
88
		stdcall mem.Free,[edi+offs_obj_normals_tri_data]
123
		stdcall mem.Free,[edi+offs_obj_normals_tri_data]
89
		mov dword[edi+offs_obj_normals_tri_data],0
124
		mov dword[edi+offs_obj_normals_tri_data],0
90
	@@:
125
	@@:
91
	cmp dword[edi+offs_obj_normals_poi_data],0
126
	cmp dword[edi+offs_obj_normals_poi_data],0
92
	je @f
127
	je @f
93
		stdcall mem.Free,[edi+offs_obj_normals_poi_data]
128
		stdcall mem.Free,[edi+offs_obj_normals_poi_data]
94
		mov dword[edi+offs_obj_normals_poi_data],0
129
		mov dword[edi+offs_obj_normals_poi_data],0
95
	@@:
130
	@@:
96
	ret
131
	ret
97
endp
132
endp
98
 
133
 
99
;¯®¨áª ¤ ­­ëå
134
;¯®¨áª ¤ ­­ëå
100
;input:
135
;input:
101
;eax - ⥪ã騩 㧥«
136
;eax - ⥪ã騩 㧥«
102
;output:
137
;output:
103
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
138
;eax - áâàãªâãà  â¥ªã饣® 㧫  (¨«¨ 0 ¯à¨ ­¥ã¤ ç¥)
104
align 4
139
align 4
105
proc found_block_data uses ebx ecx edx, tlist:dword
140
proc found_block_data uses ebx ecx edx, tlist:dword
106
	mov edx,[tlist]
141
	mov edx,[tlist]
107
	mov ecx,eax
142
	mov ecx,eax
108
	stdcall [tl_node_poi_get_info], edx,0
143
	stdcall [tl_node_poi_get_info], edx,0
109
	@@:
144
	@@:
110
		mov ebx,eax
145
		mov ebx,eax
111
		stdcall [tl_node_poi_get_data], edx,ebx
146
		stdcall [tl_node_poi_get_data], edx,ebx
112
		cmp eax,ecx
147
		cmp eax,ecx
113
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
148
		je @f ;¥á«¨ ¯®¯ «¨ ­  ¢ë¡à ­­ë© 㧥«
114
		stdcall [tl_node_poi_get_next_info], edx,ebx
149
		stdcall [tl_node_poi_get_next_info], edx,ebx
115
		cmp eax,0
150
		cmp eax,0
116
		jne @b
151
		jne @b
117
		jmp .end
152
		jmp .end
118
	@@:
153
	@@:
119
		mov eax,ebx
154
		mov eax,ebx
120
	.end:
155
	.end:
121
	ret
156
	ret
122
endp
157
endp
123
 
158
 
124
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
159
;ãáâ ­®¢ª  à §¬¥à®¢ ®¡ê¥ªâ 
125
align 4
160
align 4
126
proc obj_set_sizes uses eax ebx esi edi, o_data:dword
161
proc obj_set_sizes uses eax ebx esi edi, o_data:dword
127
	mov edi,[o_data]
162
	mov edi,[o_data]
128
	cmp dword[edi+offs_obj_poi_count],0
163
	cmp dword[edi+offs_obj_poi_count],0
129
	je .end
164
	je .end
130
		finit
165
		finit
131
		mov eax,[edi+offs_obj_poi_data]
166
		mov eax,[edi+offs_obj_poi_data]
132
		mov ebx,dword[eax]
167
		mov ebx,dword[eax]
133
		mov [edi+offs_obj_x_min],ebx
168
		mov [edi+offs_obj_x_min],ebx
134
		mov [edi+offs_obj_x_max],ebx
169
		mov [edi+offs_obj_x_max],ebx
135
		mov ebx,dword[eax+4]
170
		mov ebx,dword[eax+4]
136
		mov [edi+offs_obj_y_min],ebx
171
		mov [edi+offs_obj_y_min],ebx
137
		mov [edi+offs_obj_y_max],ebx
172
		mov [edi+offs_obj_y_max],ebx
138
		mov ebx,dword[eax+8]
173
		mov ebx,dword[eax+8]
139
		mov [edi+offs_obj_z_min],ebx
174
		mov [edi+offs_obj_z_min],ebx
140
		mov [edi+offs_obj_z_max],ebx
175
		mov [edi+offs_obj_z_max],ebx
141
 
176
 
142
	mov ebx,[edi+offs_obj_poi_data]
177
	mov ebx,[edi+offs_obj_poi_data]
143
	mov esi,[edi+offs_obj_poi_count]
178
	mov esi,[edi+offs_obj_poi_count]
144
align 4
179
align 4
145
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
180
	.cycle_0: ;à ¡®â  á ª®®à¤¨­ â®© x
146
		fld dword[ebx]
181
		fld dword[ebx]
147
		fld dword[edi+offs_obj_x_min]
182
		fld dword[edi+offs_obj_x_min]
148
		fcomp
183
		fcomp
149
		fstsw ax
184
		fstsw ax
150
		sahf
185
		sahf
151
		jb @f
186
		jb @f
152
			mov eax,[ebx]
187
			mov eax,[ebx]
153
			mov [edi+offs_obj_x_min],eax
188
			mov [edi+offs_obj_x_min],eax
154
			ffree st0
189
			ffree st0
155
			fincstp
190
			fincstp
156
			jmp .next_x
191
			jmp .next_x
157
		@@:
192
		@@:
158
		fld dword[edi+offs_obj_x_max]
193
		fld dword[edi+offs_obj_x_max]
159
		fcompp
194
		fcompp
160
		fstsw ax
195
		fstsw ax
161
		sahf
196
		sahf
162
		ja .next_x
197
		ja .next_x
163
			mov eax,[ebx]
198
			mov eax,[ebx]
164
			mov [edi+offs_obj_x_max],eax
199
			mov [edi+offs_obj_x_max],eax
165
		.next_x:
200
		.next_x:
166
 
201
 
167
		add ebx,12
202
		add ebx,12
168
		dec esi
203
		dec esi
169
		jnz .cycle_0
204
		jnz .cycle_0
170
 
205
 
171
		fld1
206
		fld1
172
		fld dword[edi+offs_obj_x_max]
207
		fld dword[edi+offs_obj_x_max]
173
		fsub dword[edi+offs_obj_x_min]
208
		fsub dword[edi+offs_obj_x_min]
174
		fst dword[edi+offs_obj_x_centr]
209
		fst dword[edi+offs_obj_x_centr]
175
		fdivp ;1/size.x
210
		fdivp ;1/size.x
176
		fstp dword[edi+offs_obj_x_scale]
211
		fstp dword[edi+offs_obj_x_scale]
177
 
212
 
178
		fld dword[edi+offs_obj_x_centr]
213
		fld dword[edi+offs_obj_x_centr]
179
		fld1
214
		fld1
180
		fld1
215
		fld1
181
		faddp
216
		faddp
182
		fdivp ;centr.x = size.x/2
217
		fdivp ;centr.x = size.x/2
183
		fadd dword[edi+offs_obj_x_min]
218
		fadd dword[edi+offs_obj_x_min]
184
		fchs
219
		fchs
185
		fstp dword[edi+offs_obj_x_centr]
220
		fstp dword[edi+offs_obj_x_centr]
186
 
221
 
187
	mov ebx,[edi+offs_obj_poi_data]
222
	mov ebx,[edi+offs_obj_poi_data]
188
	mov esi,[edi+offs_obj_poi_count]
223
	mov esi,[edi+offs_obj_poi_count]
189
align 4
224
align 4
190
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
225
	.cycle_1: ;à ¡®â  á ª®®à¤¨­ â®© y
191
		fld dword[ebx+4]
226
		fld dword[ebx+4]
192
		fld dword[edi+offs_obj_y_min]
227
		fld dword[edi+offs_obj_y_min]
193
		fcomp
228
		fcomp
194
		fstsw ax
229
		fstsw ax
195
		sahf
230
		sahf
196
		jb @f
231
		jb @f
197
			mov eax,[ebx+4]
232
			mov eax,[ebx+4]
198
			mov [edi+offs_obj_y_min],eax
233
			mov [edi+offs_obj_y_min],eax
199
			ffree st0
234
			ffree st0
200
			fincstp
235
			fincstp
201
			jmp .next_y
236
			jmp .next_y
202
		@@:
237
		@@:
203
		fld dword[edi+offs_obj_y_max]
238
		fld dword[edi+offs_obj_y_max]
204
		fcompp
239
		fcompp
205
		fstsw ax
240
		fstsw ax
206
		sahf
241
		sahf
207
		ja .next_y
242
		ja .next_y
208
			mov eax,[ebx+4]
243
			mov eax,[ebx+4]
209
			mov [edi+offs_obj_y_max],eax
244
			mov [edi+offs_obj_y_max],eax
210
		.next_y:
245
		.next_y:
211
 
246
 
212
		add ebx,12
247
		add ebx,12
213
		dec esi
248
		dec esi
214
		jnz .cycle_1
249
		jnz .cycle_1
215
 
250
 
216
		fld1
251
		fld1
217
		fld dword[edi+offs_obj_y_max]
252
		fld dword[edi+offs_obj_y_max]
218
		fsub dword[edi+offs_obj_y_min]
253
		fsub dword[edi+offs_obj_y_min]
219
		fst dword[edi+offs_obj_y_centr]
254
		fst dword[edi+offs_obj_y_centr]
220
		fdivp ;1/size.y
255
		fdivp ;1/size.y
221
		fstp dword[edi+offs_obj_y_scale]
256
		fstp dword[edi+offs_obj_y_scale]
222
 
257
 
223
		fld dword[edi+offs_obj_y_centr]
258
		fld dword[edi+offs_obj_y_centr]
224
		fld1
259
		fld1
225
		fld1
260
		fld1
226
		faddp
261
		faddp
227
		fdivp ;centr.y = size.y/2
262
		fdivp ;centr.y = size.y/2
228
		fadd dword[edi+offs_obj_y_min]
263
		fadd dword[edi+offs_obj_y_min]
229
		fchs
264
		fchs
230
		fstp dword[edi+offs_obj_y_centr]
265
		fstp dword[edi+offs_obj_y_centr]
231
 
266
 
232
	mov ebx,[edi+offs_obj_poi_data]
267
	mov ebx,[edi+offs_obj_poi_data]
233
	mov esi,[edi+offs_obj_poi_count]
268
	mov esi,[edi+offs_obj_poi_count]
234
align 4
269
align 4
235
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
270
	.cycle_2: ;à ¡®â  á ª®®à¤¨­ â®© z
236
		fld dword[ebx+8]
271
		fld dword[ebx+8]
237
		fld dword[edi+offs_obj_z_min]
272
		fld dword[edi+offs_obj_z_min]
238
		fcomp
273
		fcomp
239
		fstsw ax
274
		fstsw ax
240
		sahf
275
		sahf
241
		jb @f
276
		jb @f
242
			mov eax,[ebx+8]
277
			mov eax,[ebx+8]
243
			mov [edi+offs_obj_z_min],eax
278
			mov [edi+offs_obj_z_min],eax
244
			ffree st0
279
			ffree st0
245
			fincstp
280
			fincstp
246
			jmp .next_z
281
			jmp .next_z
247
		@@:
282
		@@:
248
		fld dword[edi+offs_obj_z_max]
283
		fld dword[edi+offs_obj_z_max]
249
		fcompp
284
		fcompp
250
		fstsw ax
285
		fstsw ax
251
		sahf
286
		sahf
252
		ja .next_z
287
		ja .next_z
253
			mov eax,[ebx+8]
288
			mov eax,[ebx+8]
254
			mov [edi+offs_obj_z_max],eax
289
			mov [edi+offs_obj_z_max],eax
255
		.next_z:
290
		.next_z:
256
 
291
 
257
		add ebx,12
292
		add ebx,12
258
		dec esi
293
		dec esi
259
		jnz .cycle_2
294
		jnz .cycle_2
260
 
295
 
261
		fld1
296
		fld1
262
		fld dword[edi+offs_obj_z_max]
297
		fld dword[edi+offs_obj_z_max]
263
		fsub dword[edi+offs_obj_z_min]
298
		fsub dword[edi+offs_obj_z_min]
264
		fst dword[edi+offs_obj_z_centr]
299
		fst dword[edi+offs_obj_z_centr]
265
		fdivp ;1/size.z
300
		fdivp ;1/size.z
266
		fstp dword[edi+offs_obj_z_scale]
301
		fstp dword[edi+offs_obj_z_scale]
267
 
302
 
268
		fld dword[edi+offs_obj_z_centr]
303
		fld dword[edi+offs_obj_z_centr]
269
		fld1
304
		fld1
270
		fld1
305
		fld1
271
		faddp
306
		faddp
272
		fdivp ;centr.z = size.z/2
307
		fdivp ;centr.z = size.z/2
273
		fadd dword[edi+offs_obj_z_min]
308
		fadd dword[edi+offs_obj_z_min]
274
		fchs
309
		fchs
275
		fstp dword[edi+offs_obj_z_centr]
310
		fstp dword[edi+offs_obj_z_centr]
276
 
311
 
277
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
312
		;­ å®¤¨¬ à ¤¨ãá ¤«ï áä¥àë
278
		fld dword[edi+offs_obj_x_max]
313
		fld dword[edi+offs_obj_x_max]
279
		fsub dword[edi+offs_obj_x_min]
314
		fsub dword[edi+offs_obj_x_min]
280
		fld dword[edi+offs_obj_y_max]
315
		fld dword[edi+offs_obj_y_max]
281
		fsub dword[edi+offs_obj_y_min]
316
		fsub dword[edi+offs_obj_y_min]
282
		faddp
317
		faddp
283
		fild dword[rad_c]
318
		fild dword[rad_c]
284
		fdivp ;radius=(size.x+size.y)/rad_c
319
		fdivp ;radius=(size.x+size.y)/rad_c
285
		fstp dword[sph_radius]
320
		fstp dword[sph_radius]
286
 
321
 
287
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
322
	;¤¥« ¥¬ ®¤¨­ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ­¥ ­ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥­¨ï
288
	fld dword[edi+offs_obj_y_scale]
323
	fld dword[edi+offs_obj_y_scale]
289
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
324
	fdiv dword[ratio] ;¯à¨¢¥¤¥­¨¥ ¬ áèâ ¡  ¯® ®á¨ y ãç¨â뢠ï çâ® ¯® ¢ëá®â¥ íªà ­ ¬¥­ìè¥
290
	fcomp dword[edi+offs_obj_x_scale]
325
	fcomp dword[edi+offs_obj_x_scale]
291
	fstsw ax
326
	fstsw ax
292
	sahf
327
	sahf
293
	jb @f
328
	jb @f
294
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
329
		;ᦠ⨥ ¬ áèâ ¡  ¯® y
295
		fld dword[edi+offs_obj_x_scale]
330
		fld dword[edi+offs_obj_x_scale]
296
		fmul dword[ratio]
331
		fmul dword[ratio]
297
		fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
332
		fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x
298
		jmp .end
333
		jmp .end
299
	@@:
334
	@@:
300
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
335
		;ᦠ⨥ ¬ áèâ ¡  ¯® x >...<
301
		fld	dword[edi+offs_obj_x_scale]
336
		fld	dword[edi+offs_obj_x_scale]
302
		fdiv dword[ratio]
337
		fdiv dword[ratio]
303
		fstp dword[edi+offs_obj_x_scale]
338
		fstp dword[edi+offs_obj_x_scale]
304
	.end:
339
	.end:
305
	ret
340
	ret
306
endp
341
endp
307
 
342
 
308
;ãáâ ­®¢ª  ­®à¬ «¥© ¤«ï £à ­¥©
343
;ãáâ ­®¢ª  ­®à¬ «¥© ¤«ï £à ­¥©
309
align 4
344
align 4
310
proc obj_set_normals, o_data:dword
345
proc obj_set_normals, o_data:dword
311
locals
346
locals
312
	tbl1 rd 9 ;ebp-72
347
	tbl1 rd 9 ;ebp-72
313
	tbl2 rd 9 ;ebp-36
348
	tbl2 rd 9 ;ebp-36
314
endl
349
endl
315
pushad
350
pushad
316
	mov ecx,[o_data]
351
	mov ecx,[o_data]
317
	cmp dword[ecx+offs_obj_poi_count],0
352
	cmp dword[ecx+offs_obj_poi_count],0
318
	je .end
353
	je .end
319
		mov eax,[ecx+offs_obj_tri_count]
354
		mov eax,[ecx+offs_obj_tri_count]
320
		mov [ecx+offs_obj_normals_tri_count],eax ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­®à¬ «ì
355
		mov [ecx+offs_obj_normals_tri_count],eax ;­  ª ¦¤ë© âà¥ã£®«ì­¨ª 1 ­®à¬ «ì
321
		cmp eax,0
356
		cmp eax,0
322
		je .end
357
		je .end
323
		finit
358
		finit
324
		imul eax,12
359
		imul eax,12
325
		stdcall mem.Alloc, eax
360
		stdcall mem.Alloc, eax
326
		mov [ecx+offs_obj_normals_tri_data],eax
361
		mov [ecx+offs_obj_normals_tri_data],eax
327
 
362
 
328
		mov edx,[ecx+offs_obj_tri_data]
363
		mov edx,[ecx+offs_obj_tri_data]
329
		mov ebx,[ecx+offs_obj_tri_count]
364
		mov ebx,[ecx+offs_obj_tri_count]
330
		mov ecx,[ecx+offs_obj_poi_data]
365
		mov ecx,[ecx+offs_obj_poi_data]
331
align 4
366
align 4
332
		@@:
367
		@@:
333
			mov edi,ebp
368
			mov edi,ebp
334
			sub edi,36 ;tbl2
369
			sub edi,36 ;tbl2
335
			movzx esi,word[edx] ;1-ï ¢¥à設 
370
			movzx esi,word[edx] ;1-ï ¢¥à設 
336
			imul esi,12
371
			imul esi,12
337
			add esi,ecx
372
			add esi,ecx
338
			movsd
373
			movsd
339
			movsd
374
			movsd
340
			movsd
375
			movsd
341
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
376
			movzx esi,word[edx+2] ;2-ï ¢¥à設 
342
			imul esi,12
377
			imul esi,12
343
			add esi,ecx
378
			add esi,ecx
344
			movsd
379
			movsd
345
			movsd
380
			movsd
346
			movsd
381
			movsd
347
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
382
			movzx esi,word[edx+4] ;3-ï ¢¥à設 
348
			imul esi,12
383
			imul esi,12
349
			add esi,ecx
384
			add esi,ecx
350
			movsd
385
			movsd
351
			movsd
386
			movsd
352
			movsd
387
			movsd
353
 
388
 
354
			mov esi,ebp
389
			mov esi,ebp
355
			sub esi,72 ;tbl1
390
			sub esi,72 ;tbl1
356
			sub edi,36 ;tbl2
391
			sub edi,36 ;tbl2
357
			;v1 <-> v2
392
			;v1 <-> v2
358
			fld dword[edi+12]
393
			fld dword[edi+12]
359
			fsub dword[edi]
394
			fsub dword[edi]
360
			fstp dword[esi] ;(x1-x2)
395
			fstp dword[esi] ;(x1-x2)
361
			fld dword[edi+16]
396
			fld dword[edi+16]
362
			fsub dword[edi+4]
397
			fsub dword[edi+4]
363
			fstp dword[esi+4] ;(y1-y2)
398
			fstp dword[esi+4] ;(y1-y2)
364
			fld dword[edi+20]
399
			fld dword[edi+20]
365
			fsub dword[edi+8]
400
			fsub dword[edi+8]
366
			fstp dword[esi+8] ;(z1-z2)
401
			fstp dword[esi+8] ;(z1-z2)
367
			;v2 <-> v3
402
			;v2 <-> v3
368
			fld dword[edi+24]
403
			fld dword[edi+24]
369
			fsub dword[edi+12]
404
			fsub dword[edi+12]
370
			fstp dword[esi+12] ;(x2-x3)
405
			fstp dword[esi+12] ;(x2-x3)
371
			fld dword[edi+28]
406
			fld dword[edi+28]
372
			fsub dword[edi+16]
407
			fsub dword[edi+16]
373
			fstp dword[esi+16] ;(y2-y3)
408
			fstp dword[esi+16] ;(y2-y3)
374
			fld dword[edi+32]
409
			fld dword[edi+32]
375
			fsub dword[edi+20]
410
			fsub dword[edi+20]
376
			fstp dword[esi+20] ;(z2-z3)
411
			fstp dword[esi+20] ;(z2-z3)
377
			;v3 <-> v1
412
			;v3 <-> v1
378
			fld dword[edi]
413
			fld dword[edi]
379
			fsub dword[edi+24]
414
			fsub dword[edi+24]
380
			fstp dword[esi+24] ;(x3-x1)
415
			fstp dword[esi+24] ;(x3-x1)
381
			fld dword[edi+4]
416
			fld dword[edi+4]
382
			fsub dword[edi+28]
417
			fsub dword[edi+28]
383
			fstp dword[esi+28] ;(y3-y1)
418
			fstp dword[esi+28] ;(y3-y1)
384
			fld dword[edi+8]
419
			fld dword[edi+8]
385
			fsub dword[edi+32]
420
			fsub dword[edi+32]
386
			fstp dword[esi+32] ;(z3-z1)
421
			fstp dword[esi+32] ;(z3-z1)
387
 
422
 
388
			;a1,a2,a3
423
			;a1,a2,a3
389
			fld dword[esi+4]
424
			fld dword[esi+4]
390
			fmul dword[esi+8]
425
			fmul dword[esi+8]
391
			fstp dword[edi] ;a1=(y1-y2)*(z1-z2)
426
			fstp dword[edi] ;a1=(y1-y2)*(z1-z2)
392
			fld dword[esi+16]
427
			fld dword[esi+16]
393
			fmul dword[esi+20]
428
			fmul dword[esi+20]
394
			fstp dword[edi+4] ;a2=(y2-y3)*(z2-z3)
429
			fstp dword[edi+4] ;a2=(y2-y3)*(z2-z3)
395
			fld dword[esi+28]
430
			fld dword[esi+28]
396
			fmul dword[esi+32]
431
			fmul dword[esi+32]
397
			fstp dword[edi+8] ;a3=(y3-y1)*(z3-z1)
432
			fstp dword[edi+8] ;a3=(y3-y1)*(z3-z1)
398
			;b1,b2,b3
433
			;b1,b2,b3
399
			fld dword[esi]
434
			fld dword[esi]
400
			fmul dword[esi+8]
435
			fmul dword[esi+8]
401
			fstp dword[edi+12] ;b1=(x1-x2)*(z1-z2)
436
			fstp dword[edi+12] ;b1=(x1-x2)*(z1-z2)
402
			fld dword[esi+12]
437
			fld dword[esi+12]
403
			fmul dword[esi+20]
438
			fmul dword[esi+20]
404
			fstp dword[edi+16] ;b2=(x2-x3)*(z2-z3)
439
			fstp dword[edi+16] ;b2=(x2-x3)*(z2-z3)
405
			fld dword[esi+24]
440
			fld dword[esi+24]
406
			fmul dword[esi+32]
441
			fmul dword[esi+32]
407
			fstp dword[edi+20] ;b3=(x3-x1)*(z3-z1)
442
			fstp dword[edi+20] ;b3=(x3-x1)*(z3-z1)
408
			;c1,á2,á3
443
			;c1,á2,á3
409
			fld dword[esi]
444
			fld dword[esi]
410
			fmul dword[esi+4]
445
			fmul dword[esi+4]
411
			fstp dword[edi+24] ;c1=(x1-x2)*(y1-y2)
446
			fstp dword[edi+24] ;c1=(x1-x2)*(y1-y2)
412
			fld dword[esi+12]
447
			fld dword[esi+12]
413
			fmul dword[esi+16]
448
			fmul dword[esi+16]
414
			fstp dword[edi+28] ;c2=(x2-x3)*(y2-y3)
449
			fstp dword[edi+28] ;c2=(x2-x3)*(y2-y3)
415
			fld dword[esi+24]
450
			fld dword[esi+24]
416
			fmul dword[esi+28]
451
			fmul dword[esi+28]
417
			fstp dword[edi+32] ;c3=(x3-x1)*(y3-y1)
452
			fstp dword[edi+32] ;c3=(x3-x1)*(y3-y1)
418
			
453
			
419
			fld dword[edi]
454
			fld dword[edi]
420
			fadd dword[edi+4]
455
			fadd dword[edi+4]
421
			fadd dword[edi+8]
456
			fadd dword[edi+8]
422
			fstp dword[eax] ;set normal.a
457
			fstp dword[eax] ;set normal.a
423
			fld dword[edi+12]
458
			fld dword[edi+12]
424
			fadd dword[edi+16]
459
			fadd dword[edi+16]
425
			fadd dword[edi+20]
460
			fadd dword[edi+20]
426
			fstp dword[eax+4] ;set normal.b
461
			fstp dword[eax+4] ;set normal.b
427
			fld dword[edi+24]
462
			fld dword[edi+24]
428
			fadd dword[edi+28]
463
			fadd dword[edi+28]
429
			fadd dword[edi+32]
464
			fadd dword[edi+32]
430
			fstp dword[eax+8] ;set normal.c
465
			fstp dword[eax+8] ;set normal.c
431
			
466
			
432
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
467
			add edx,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
433
			add eax,12
468
			add eax,12
434
			dec ebx
469
			dec ebx
435
			jnz @b
470
			jnz @b
436
	.end:
471
	.end:
437
popad
472
popad
438
	ret
473
	ret
439
endp
474
endp
440
 
475
 
441
;­ áâனª  áâàãªâãàë 3d ®¡ê¥ªâ 
476
;­ áâனª  áâàãªâãàë 3d ®¡ê¥ªâ 
442
align 4
477
align 4
443
proc obj_init, o_data:dword
478
proc obj_init, o_data:dword
444
	pushad
479
	pushad
445
	mov edi,[o_data]
480
	mov edi,[o_data]
446
	stdcall obj_clear_param, edi
481
	stdcall obj_clear_param, edi
447
	stdcall [tl_node_get_data],tree1
482
	stdcall [tl_node_get_data],tree1
448
	xor edx,edx
483
	xor edx,edx
449
	cmp eax,0
484
	cmp eax,0
450
	je .no_points
485
	je .no_points
451
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
486
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
452
		add ebx,[open_file_data]
487
		add ebx,[open_file_data]
453
		xor ecx,ecx
488
		xor ecx,ecx
454
		cmp word[ebx],CHUNK_OBJBLOCK
489
		cmp word[ebx],CHUNK_OBJBLOCK
455
		jne @f
490
		jne @f
456
			mov ecx,ebx
491
			mov ecx,ebx
457
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
492
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
458
			push eax edi
493
			push eax edi
459
				mov edi,ebx
494
				mov edi,ebx
460
				add edi,6
495
				add edi,6
461
				cld
496
				cld
462
				xor al,al
497
				xor al,al
463
				repne scasb ;¯à®¯ã᪠¨¬¥­¨ ®¡ê¥ªâ 
498
				repne scasb ;¯à®¯ã᪠¨¬¥­¨ ®¡ê¥ªâ 
464
				mov ebx,edi
499
				mov ebx,edi
465
			pop edi eax
500
			pop edi eax
466
		@@:
501
		@@:
467
		cmp word[ebx],CHUNK_TRIMESH
502
		cmp word[ebx],CHUNK_TRIMESH
468
		jne @f
503
		jne @f
469
			mov ecx,ebx
504
			mov ecx,ebx
470
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
505
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
471
			add ebx,6
506
			add ebx,6
472
		@@:
507
		@@:
473
		cmp word[ebx],CHUNK_VERTLIST
508
		cmp word[ebx],CHUNK_VERTLIST
474
		jne .no_points
509
		jne .no_points
475
			mov esi,ebx
510
			mov esi,ebx
476
			movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
511
			movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª
477
			add ebx,8
512
			add ebx,8
478
			mov [edi+offs_obj_poi_data],ebx
513
			mov [edi+offs_obj_poi_data],ebx
479
			mov [edi+offs_obj_poi_count],edx
514
			mov [edi+offs_obj_poi_count],edx
480
 
515
 
481
			.cycle_0: ;横« ¤«ï ¯®¨áª  âà¥ã£®«ì­¨ª®¢
516
			.cycle_0: ;横« ¤«ï ¯®¨áª  âà¥ã£®«ì­¨ª®¢
482
				add esi,dword[esi+2]
517
				add esi,dword[esi+2]
483
				cmp word[esi],CHUNK_FACELIST
518
				cmp word[esi],CHUNK_FACELIST
484
				je @f
519
				je @f
485
					cmp ecx,esi
520
					cmp ecx,esi
486
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
521
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
487
					jmp .end_points ;¥á«¨ ­¥ ­ è«¨ âà¥ã£®«ì­¨ª¨
522
					jmp .end_points ;¥á«¨ ­¥ ­ è«¨ âà¥ã£®«ì­¨ª¨
488
			@@:
523
			@@:
489
			;¥á«¨ ­ è«¨ âà¥ã£®«ì­¨ª¨
524
			;¥á«¨ ­ è«¨ âà¥ã£®«ì­¨ª¨
490
			movzx edx,word[esi+6]
525
			movzx edx,word[esi+6]
491
			mov [edi+offs_obj_tri_count],edx
526
			mov [edi+offs_obj_tri_count],edx
492
			add esi,8 ;2+4+2 (chunk+size+count)
527
			add esi,8 ;2+4+2 (chunk+size+count)
493
			mov [edi+offs_obj_tri_data],esi
528
			mov [edi+offs_obj_tri_data],esi
494
		.end_points:
529
		.end_points:
495
 
530
 
496
		stdcall obj_set_sizes, edi
531
		stdcall obj_set_sizes, edi
497
		stdcall obj_set_normals, edi
532
		stdcall obj_set_normals, edi
498
if version_edit eq 0
533
if version_edit eq 0
499
		stdcall draw_3d, edi
534
		stdcall draw_3d, edi
500
end if
535
end if
501
	.no_points:
536
	.no_points:
502
	popad
537
	popad
503
	ret
538
	ret
504
endp
539
endp
-
 
540
 
-
 
541
;­ áâனª  ¬ â¥à¨ « 
-
 
542
align 4
-
 
543
proc mat_init, m_data:dword
-
 
544
	pushad
-
 
545
	mov edi,[m_data]
-
 
546
 
-
 
547
	;... clear edi ...
-
 
548
	mov dword[edi+offs_mat_name],0
-
 
549
	mov dword[edi+offs_mat_col_ambient],0
-
 
550
	mov dword[edi+offs_mat_col_diffuse],0
-
 
551
	mov dword[edi+offs_mat_col_specular],0
-
 
552
 
-
 
553
	stdcall [tl_node_get_data],tree1
-
 
554
	xor edx,edx
-
 
555
	cmp eax,0
-
 
556
	je .no_material
-
 
557
		mov ebx,[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
-
 
558
		add ebx,[open_file_data]
-
 
559
		xor ecx,ecx
-
 
560
		cmp word[ebx],CHUNK_MATERIAL
-
 
561
		jne .no_material
-
 
562
			mov ecx,ebx
-
 
563
			add ecx,dword[ecx+2] ;£à ­¨æ  ¡«®ª 
-
 
564
			add ebx,6
-
 
565
		cmp word[ebx],CHUNK_MATNAME
-
 
566
		jne .no_material
-
 
567
			;*** (0) ***
-
 
568
			mov esi,ebx
-
 
569
			add ebx,6
-
 
570
			mov [edi+offs_mat_name],ebx
-
 
571
			sub ebx,6
-
 
572
			;*** (1) ***
-
 
573
			.cycle_0: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
-
 
574
				add esi,dword[esi+2]
-
 
575
				cmp word[esi],0xa010
-
 
576
				je @f
-
 
577
					cmp ecx,esi
-
 
578
					jg .cycle_0 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
-
 
579
					jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
580
			@@:
-
 
581
			;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
582
			add esi,6
-
 
583
			cmp word[esi],0x0011
-
 
584
			jne .end_material
-
 
585
				add esi,6
-
 
586
				mov dl,byte[esi]
-
 
587
				mov [edi+offs_mat_col_ambient+2],dl
-
 
588
				mov dx,word[esi+1]
-
 
589
				ror dx,8
-
 
590
				mov [edi+offs_mat_col_ambient],dx
-
 
591
			;*** (2) ***
-
 
592
			mov esi,ebx
-
 
593
			.cycle_1: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
-
 
594
				add esi,dword[esi+2]
-
 
595
				cmp word[esi],0xa020
-
 
596
				je @f
-
 
597
					cmp ecx,esi
-
 
598
					jg .cycle_1 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
-
 
599
					jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
600
			@@:
-
 
601
			;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
602
			add esi,6
-
 
603
			cmp word[esi],0x0011
-
 
604
			jne .end_material
-
 
605
				add esi,6
-
 
606
				mov dl,byte[esi]
-
 
607
				mov [edi+offs_mat_col_diffuse+2],dl
-
 
608
				mov dx,word[esi+1]
-
 
609
				ror dx,8
-
 
610
				mov [edi+offs_mat_col_diffuse],dx
-
 
611
			;*** (3) ***
-
 
612
			mov esi,ebx
-
 
613
			.cycle_2: ;横« ¤«ï ¯®¨áª  æ¢¥â  ¬ â¥à¨ « 
-
 
614
				add esi,dword[esi+2]
-
 
615
				cmp word[esi],0xa030
-
 
616
				je @f
-
 
617
					cmp ecx,esi
-
 
618
					jg .cycle_2 ;¯®ª  ­¥ ¤®á⨣­ãâ  £à­¨æ  áâ à襣® ¡«®ª 
-
 
619
					jmp .end_material ;¥á«¨ ­¥ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
620
			@@:
-
 
621
			;¥á«¨ ­ è«¨ 梥⠬ â¥à¨ « 
-
 
622
			add esi,6
-
 
623
			cmp word[esi],0x0011
-
 
624
			jne .end_material
-
 
625
				add esi,6
-
 
626
				mov dl,byte[esi]
-
 
627
				mov [edi+offs_mat_col_specular+2],dl
-
 
628
				mov dx,word[esi+1]
-
 
629
				ror dx,8
-
 
630
				mov [edi+offs_mat_col_specular],dx
-
 
631
 
-
 
632
			.end_material:
-
 
633
	.no_material:
-
 
634
	popad
-
 
635
	ret
-
 
636
endp
-
 
637
 
-
 
638
align 4
-
 
639
proc buf_draw_beg uses eax, buf:dword
-
 
640
	mov eax,[buf]
-
 
641
	stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à
-
 
642
	stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff
-
 
643
	stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff
-
 
644
	cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦­  ®è¨¡ª  ä ©« 
-
 
645
	jne @f
-
 
646
		stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000
-
 
647
	@@:
-
 
648
	ret
-
 
649
endp
-
 
650
 
-
 
651
;à¨á®¢ ­¨¥ ¬ â¥à¨ « 
-
 
652
align 4
-
 
653
proc draw_material uses edi, m_data:dword
-
 
654
	mov edi,[m_data]
-
 
655
	stdcall buf_draw_beg, buf_ogl
-
 
656
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff
-
 
657
 
-
 
658
	stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « 
-
 
659
	stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â
-
 
660
	stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§­ë© æ¢¥â
-
 
661
	stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ì­ë© 梥â
-
 
662
 
-
 
663
	stdcall [buf2d_draw], buf_ogl
-
 
664
	ret
-
 
665
endp
-
 
666
 
-
 
667
align 4
-
 
668
proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword
-
 
669
	mov eax,[c_x]
-
 
670
	mov ebx,[c_y]
-
 
671
	; ¯àאַ㣮«ì­¨ª
-
 
672
	inc ebx
-
 
673
	stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color]
-
 
674
	dec ebx
-
 
675
	stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0
-
 
676
	; ¯®¤¯¨á¨
-
 
677
	add eax,33
-
 
678
	stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0
-
 
679
	add ebx,10
-
 
680
	stdcall hex_in_str, buffer,[color],6
-
 
681
	mov byte[buffer+6],0
-
 
682
	stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0
-
 
683
	ret
-
 
684
endp
505
 
685
 
506
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
686
;à¨á®¢ ­¨¥ â®ç¥ª ¢ 3d
507
align 4
687
align 4
508
proc draw_3d uses eax ebx ecx edi, o_data:dword
688
proc draw_3d uses eax ebx ecx edi, o_data:dword
509
	mov edi,[o_data]
689
	mov edi,[o_data]
510
if 0 ;debug
690
if 0 ;debug
511
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
691
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
512
	mov eax,[edi+offs_obj_poi_data]
692
	mov eax,[edi+offs_obj_poi_data]
513
	stdcall convert_int_to_str, txt_select_vert.count,16
693
	stdcall convert_int_to_str, txt_select_vert.count,16
514
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
694
	stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
515
	stdcall [kosglSwapBuffers]
695
	stdcall [kosglSwapBuffers]
516
	jmp .end_f
696
	jmp .end_f
517
end if
697
end if
518
	cmp dword[edi+offs_obj_poi_count],2
698
	cmp dword[edi+offs_obj_poi_count],2
519
	jl .end_f
699
	jl .end_f
520
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
700
	stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à æ¢¥â  ¨ £«ã¡¨­ë
521
	stdcall [glPushMatrix]
701
	stdcall [glPushMatrix]
522
	bt dword[draw_mode],bit_light
702
	bt dword[draw_mode],bit_light
523
	jnc @f
703
	jnc @f
524
		call SetLight
704
		call SetLight
525
		jmp .end_l
705
		jmp .end_l
526
	@@:
706
	@@:
527
		stdcall [glDisable],GL_LIGHTING
707
		stdcall [glDisable],GL_LIGHTING
528
	.end_l:
708
	.end_l:
529
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
709
	stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z
530
	stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale]
710
	stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale]
531
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
711
	stdcall [glScalef], 1.0,1.0,0.7 ;correct for z
532
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
712
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
533
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
713
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
534
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
714
	stdcall [glRotatef], [angle_x],1.0,0.0,0.0
535
	stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
715
	stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr]
536
 
716
 
537
	;à¨á®¢ ­¨¥ â®ç¥ª
717
	;à¨á®¢ ­¨¥ â®ç¥ª
538
	bt dword[draw_mode],bit_vertexes
718
	bt dword[draw_mode],bit_vertexes
539
	jnc .end_points
719
	jnc .end_points
540
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
720
		stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert]
541
		stdcall [glBegin],GL_POINTS
721
		stdcall [glBegin],GL_POINTS
542
		mov eax,[edi+offs_obj_poi_data]
722
		mov eax,[edi+offs_obj_poi_data]
543
		mov ebx,[edi+offs_obj_poi_count]
723
		mov ebx,[edi+offs_obj_poi_count]
544
		@@:
724
		@@:
545
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
725
			stdcall [glVertex3f], [eax],[eax+4],[eax+8]
546
			add eax,12
726
			add eax,12
547
			dec ebx
727
			dec ebx
548
			jnz @b
728
			jnz @b
549
		stdcall [glEnd]
729
		stdcall [glEnd]
550
	.end_points:
730
	.end_points:
551
 
731
 
552
if version_edit eq 1
732
if version_edit eq 1
553
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
733
	;à¨á®¢ ­¨¥  ªâ¨¢­®© â®çª¨
554
	stdcall [tl_node_get_data],tree3
734
	stdcall [tl_node_get_data],tree3
555
	cmp eax,0
735
	cmp eax,0
556
	je @f
736
	je @f
557
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
737
		;¢ë¤¥«¥­¨¥  ªâ¨¢­®© â®çª¨
558
		mov eax,[eax]
738
		mov eax,[eax]
559
 
739
 
560
		stdcall [glBegin],GL_LINES
740
		stdcall [glBegin],GL_LINES
561
		stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox]
741
		stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox]
562
		stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8]
742
		stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8]
563
		stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8]
743
		stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8]
564
		stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy]
744
		stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy]
565
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8]
745
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8]
566
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8]
746
		stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8]
567
		stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz]
747
		stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz]
568
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min]
748
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min]
569
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max]
749
		stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max]
570
		stdcall [glEnd]
750
		stdcall [glEnd]
571
 
751
 
572
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
752
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
573
		stdcall [glPushMatrix]
753
		stdcall [glPushMatrix]
574
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
754
			stdcall [glTranslatef], [eax],[eax+4],[eax+8]
575
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
755
			stdcall [gluSphere], [qObj], [sph_radius], 8,8
576
		stdcall [glPopMatrix]
756
		stdcall [glPopMatrix]
577
	@@:
757
	@@:
578
 
758
 
579
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
759
	;à¨á®¢ ­¨¥ ¢ë¤¥«¥­­ëå â®ç¥ª
580
	cmp dword[obj_poi_sel_c],0
760
	cmp dword[obj_poi_sel_c],0
581
	je .end_select
761
	je .end_select
582
		mov ecx,dword[obj_poi_sel_c]
762
		mov ecx,dword[obj_poi_sel_c]
583
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
763
		stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select]
584
		stdcall dword[tl_node_poi_get_info], tree3,0
764
		stdcall dword[tl_node_poi_get_info], tree3,0
585
		@@:
765
		@@:
586
			cmp eax,0
766
			cmp eax,0
587
			je .end_select
767
			je .end_select
588
			mov ebx,eax
768
			mov ebx,eax
589
			cmp word[ebx],ID_ICON_POINT_SEL
769
			cmp word[ebx],ID_ICON_POINT_SEL
590
			jne .next_sel
770
			jne .next_sel
591
			stdcall [tl_node_poi_get_data], tree3,ebx
771
			stdcall [tl_node_poi_get_data], tree3,ebx
592
			mov eax,[eax]
772
			mov eax,[eax]
593
			stdcall [glPushMatrix]
773
			stdcall [glPushMatrix]
594
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
774
				stdcall [glTranslatef], [eax],[eax+4],[eax+8]
595
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
775
				stdcall [gluSphere], [qObj], [sph_radius], 4,4
596
			stdcall [glPopMatrix]
776
			stdcall [glPopMatrix]
597
			dec ecx
777
			dec ecx
598
			jz .end_select
778
			jz .end_select
599
			.next_sel:
779
			.next_sel:
600
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
780
			stdcall dword[tl_node_poi_get_next_info], tree3,ebx
601
			jmp @b
781
			jmp @b
602
    .end_select:
782
    .end_select:
603
end if
783
end if
604
 
784
 
605
	;à¨á®¢ ­¨¥ £à ­¥©
785
	;à¨á®¢ ­¨¥ £à ­¥©
606
	bt dword[draw_mode],bit_faces
786
	bt dword[draw_mode],bit_faces
607
	jnc .end_triangles
787
	jnc .end_triangles
608
	cmp dword[edi+offs_obj_tri_count],0
788
	cmp dword[edi+offs_obj_tri_count],0
609
	je .end_triangles
789
	je .end_triangles
610
	cmp dword[edi+offs_obj_poi_count],0
790
	cmp dword[edi+offs_obj_poi_count],0
611
	je .end_triangles
791
	je .end_triangles
612
		bt dword[draw_mode],bit_faces_fill
792
		bt dword[draw_mode],bit_faces_fill
613
		jc @f
793
		jc @f
614
			push GL_LINE
794
			push GL_LINE
615
			jmp .end_0
795
			jmp .end_0
616
		@@:
796
		@@:
617
			push GL_FILL
797
			push GL_FILL
618
		.end_0:
798
		.end_0:
619
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
799
		stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥
620
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
800
		stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face]
621
		stdcall [glBegin],GL_TRIANGLES
801
		stdcall [glBegin],GL_TRIANGLES
622
		mov eax,[edi+offs_obj_tri_data]
802
		mov eax,[edi+offs_obj_tri_data]
623
		mov ecx,[edi+offs_obj_tri_count]
803
		mov ecx,[edi+offs_obj_tri_count]
624
		mov edx,[edi+offs_obj_normals_tri_data]
804
		mov edx,[edi+offs_obj_normals_tri_data]
625
		@@:
805
		@@:
626
			;
806
			;
627
			bt dword[draw_mode],bit_light
807
			bt dword[draw_mode],bit_light
628
			jnc .norm
808
			jnc .norm
629
				;[obj_normals_tri_count]
809
				;[obj_normals_tri_count]
630
				stdcall [glNormal3fv], edx
810
				stdcall [glNormal3fv], edx
631
				add edx,12
811
				add edx,12
632
			.norm:
812
			.norm:
633
			;
813
			;
634
			movzx ebx,word[eax] ;1-ï ¢¥à設 
814
			movzx ebx,word[eax] ;1-ï ¢¥à設 
635
			imul ebx,12
815
			imul ebx,12
636
			add ebx,[edi+offs_obj_poi_data]
816
			add ebx,[edi+offs_obj_poi_data]
637
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
817
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
638
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
818
			movzx ebx,word[eax+2] ;2-ï ¢¥à設 
639
			imul ebx,12
819
			imul ebx,12
640
			add ebx,[edi+offs_obj_poi_data]
820
			add ebx,[edi+offs_obj_poi_data]
641
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
821
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
642
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
822
			movzx ebx,word[eax+4] ;3-ï ¢¥à設 
643
			imul ebx,12
823
			imul ebx,12
644
			add ebx,[edi+offs_obj_poi_data]
824
			add ebx,[edi+offs_obj_poi_data]
645
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
825
			stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8]
646
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
826
			add eax,8 ;à §¬¥à âà¥ã£®«ì­¨ª  = (3 ¢¥à設ë (¯® 2¡) + ᢮©á⢠ (2¡))
647
			dec ecx
827
			dec ecx
648
			jnz @b
828
			jnz @b
649
		stdcall [glEnd]
829
		stdcall [glEnd]
650
	.end_triangles:
830
	.end_triangles:
651
 
831
 
652
	stdcall [glPopMatrix]
832
	stdcall [glPopMatrix]
653
if version_edit eq 1
833
if version_edit eq 1
654
	cmp dword[obj_poi_sel_c],0
834
	cmp dword[obj_poi_sel_c],0
655
	je @f
835
	je @f
656
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
836
		stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select]
657
	@@:
837
	@@:
658
end if
838
end if
659
	stdcall [kosglSwapBuffers]
839
	stdcall [kosglSwapBuffers]
660
	.end_f:
840
	.end_f:
661
	ret
841
	ret
662
endp
842
endp
663
 
843
 
664
align 4
844
align 4
665
SetLight:
845
SetLight:
666
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
846
	stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
667
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
847
	stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
668
 
848
 
669
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
849
	stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
670
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
850
	stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
671
 
851
 
672
	stdcall [glEnable], GL_COLOR_MATERIAL
852
	stdcall [glEnable], GL_COLOR_MATERIAL
673
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
853
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
674
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
854
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
675
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
855
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
676
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
856
	stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
677
 
857
 
678
	stdcall [glEnable],GL_LIGHTING
858
	stdcall [glEnable],GL_LIGHTING
679
	stdcall [glEnable],GL_LIGHT0
859
	stdcall [glEnable],GL_LIGHT0
680
	ret
860
	ret
681
 
861
 
682
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
862
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ¢¥à設
683
align 4
863
align 4
684
mnu_vertexes_on:
864
mnu_vertexes_on:
685
	or dword[draw_mode], 1 shl bit_vertexes
865
	or dword[draw_mode], 1 shl bit_vertexes
686
	and dword[draw_mode], not (1 shl bit_faces) ;¢ëª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï £à ­¥© (çâ®-¡ë ­¥ ¬¥è «¨)
866
	and dword[draw_mode], not (1 shl bit_faces) ;¢ëª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï £à ­¥© (çâ®-¡ë ­¥ ¬¥è «¨)
687
	call update_obj
867
	call update_obj
688
	ret
868
	ret
689
 
869
 
690
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ª àª á­ëå £à ­¥©
870
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ª àª á­ëå £à ­¥©
691
align 4
871
align 4
692
mnu_edges_on:
872
mnu_edges_on:
693
	or dword[draw_mode], 1 shl bit_faces
873
	or dword[draw_mode], 1 shl bit_faces
694
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill))
874
	and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill))
695
	call update_obj
875
	call update_obj
696
	ret
876
	ret
697
 
877
 
698
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
878
;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ­¨ï ᯫ®è­ëå £à ­¥©
699
align 4
879
align 4
700
mnu_faces_on:
880
mnu_faces_on:
701
	or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
881
	or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill)
702
	and dword[draw_mode], not (1 shl bit_vertexes)
882
	and dword[draw_mode], not (1 shl bit_vertexes)
703
	call update_obj
883
	call update_obj
704
	ret
884
	ret
705
 
885
 
706
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
886
;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥­¨¥
707
align 4
887
align 4
708
mnu_light_on_off:
888
mnu_light_on_off:
709
	xor dword[draw_mode], 1 shl bit_light
889
	xor dword[draw_mode], 1 shl bit_light
710
	call update_obj
890
	call update_obj
711
	ret
891
	ret
712
 
892
 
713
align 4
893
align 4
714
mnu_reset_settings:
894
mnu_reset_settings:
715
	mov dword[angle_x],0.0
895
	mov dword[angle_x],0.0
716
	mov dword[angle_y],0.0
896
	mov dword[angle_y],0.0
717
	mov dword[angle_z],0.0
897
	mov dword[angle_z],0.0
718
	m2m dword[draw_mode],dword[def_dr_mode]
898
	m2m dword[draw_mode],dword[def_dr_mode]
719
	call update_obj
899
	call update_obj
720
	ret
900
	ret
721
 
901
 
722
if version_edit eq 1
902
if version_edit eq 1
723
 
903
 
724
align 4
904
align 4
725
update_obj:
905
update_obj:
726
	stdcall draw_3d, o3d
906
	stdcall draw_3d, o3d
727
	ret
907
	ret
728
 
908
 
729
else
909
else
730
 
910
 
731
align 4
911
align 4
732
update_obj:
912
update_obj:
733
push eax
913
push eax ebx
734
	stdcall [tl_node_get_data],tree1
914
	stdcall [tl_node_get_data],tree1
735
	cmp eax,0
915
	cmp eax,0
736
	je @f
916
	je @f
-
 
917
		mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
-
 
918
		add ebx,dword[open_file_data] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
-
 
919
		cmp word[ebx],CHUNK_OBJBLOCK
-
 
920
		jne @f
737
		add eax,14 ;14=list_offs_obj3d
921
			add eax,14 ;14=list_offs_obj3d
738
		stdcall draw_3d, eax
922
			stdcall draw_3d, eax
739
	@@:
923
	@@:
740
pop eax
924
pop ebx eax
741
	ret
925
	ret
742
 
926
 
743
end if
927
end if
744
 
928
 
745
align 4
929
align 4
746
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
930
draw_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ®¡ê¥ªâ 
747
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
931
def_dr_mode dd 0 ;०¨¬ à¨á®¢ ­¨ï ¯® 㬮«ç ­¨î
748
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
932
delt_size dd 3.0 ;¨§¬¥­¥­¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë
749
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
933
mouse_drag dd 0 ;०¨¬ ¯®¢®à®â  áæ¥­ë ®â ¯¥à¥¬¥é¥­¨¨ ªãàá®à  ¬ëè¨
750
mouse_x dd 0
934
mouse_x dd 0
751
mouse_y dd 0
935
mouse_y dd 0
752
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
936
sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥­¨ï  ªâ¨¢­®© â®çª¨
753
>
937
>