Rev 485 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 485 | Rev 5098 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; 3D 3D TEXTURED ENGINE |
2 | ; 3D 3D TEXTURED ENGINE |
3 | ; : ¢«îè¨ ¢£¥¨© AUTOR: Pavlushin Evgeni |
3 | ; : ¢«îè¨ ¢£¥¨© AUTOR: Pavlushin Evgeni |
4 | ; |
4 | ; |
5 | ; ®¬¯¨«¨àã¥âáï á ¯®¬®éìî FASM áᥬ¡«¥à ¤«ï MenuetOS |
5 | ; ®¬¯¨«¨àã¥âáï á ¯®¬®éìî FASM áᥬ¡«¥à ¤«ï MenuetOS |
6 | ; Compile with FASM assembler for MenuetOS |
6 | ; Compile with FASM assembler for MenuetOS |
7 | ; |
7 | ; |
8 | ; 20.11.04 Fast point calc & triangle draw |
8 | ; 20.11.04 Fast point calc & triangle draw |
9 | ; Little matrix no (trangle massive) |
9 | ; Little matrix no (trangle massive) |
10 | ; Fast triangle, del triangle out of screen |
10 | ; Fast triangle, del triangle out of screen |
11 | ; 16.12.04 Fast triangle with MMX |
11 | ; 16.12.04 Fast triangle with MMX |
12 | ; 20.12.04 Out triangle fatal bug's deleted, "black zones" deleted |
12 | ; 20.12.04 Out triangle fatal bug's deleted, "black zones" deleted |
13 | ; Matrix move support |
13 | ; Matrix move support |
14 | ; 24.12.04 Fast keyboard scanning |
14 | ; 24.12.04 Fast keyboard scanning |
15 | ; Z-ground level map work |
15 | ; Z-ground level map work |
16 | ; Texture draw correction deleted "black zones" |
16 | ; Texture draw correction deleted "black zones" |
17 | ; 04.01.05 Moveing texture |
17 | ; 04.01.05 Moveing texture |
18 | ; 05.01.05 Water dynamic texture |
18 | ; 05.01.05 Water dynamic texture |
19 | ; 06.01.05 Texture pack (many textures in one file) |
19 | ; 06.01.05 Texture pack (many textures in one file) |
20 | ; 07.01.05 Z-sorting |
20 | ; 07.01.05 Z-sorting |
21 | ; 08.01.05 Triangle good clipping calculating (speed up) |
21 | ; 08.01.05 Triangle good clipping calculating (speed up) |
22 | ; 4 byte Z-sorting, more dynamic of water |
22 | ; 4 byte Z-sorting, more dynamic of water |
23 | ; 09.01.05 Texture map from 256 color bmp file |
23 | ; 09.01.05 Texture map from 256 color bmp file |
24 | ; Pixel Z-buffer, good speed! |
24 | ; Pixel Z-buffer, good speed! |
25 | ; 21.01.05 Models buffer add. |
25 | ; 21.01.05 Models buffer add. |
26 | ; 25.01.05 Models buffer update, Add 2 new models. |
26 | ; 25.01.05 Models buffer update, Add 2 new models. |
27 | ; 29.01.05 Dynamic model array |
27 | ; 29.01.05 Dynamic model array |
28 | ; 01.02.05 1 picture MipMap calculation |
28 | ; 01.02.05 1 picture MipMap calculation |
29 | ; 04.02.05 All picture MipMap calculation, proc speed up. |
29 | ; 04.02.05 All picture MipMap calculation, proc speed up. |
30 | ; Simple Triangel MipMap chose. |
30 | ; Simple Triangel MipMap chose. |
31 | ; 05.02.05 Normal Triangel MipMap chose. |
31 | ; 05.02.05 Normal Triangel MipMap chose. |
32 | ; 12.02.05 Best QUALITY of Textured TRIANGEL! |
32 | ; 12.02.05 Best QUALITY of Textured TRIANGEL! |
33 | ; 13.02.05 add new models. All camera axis calculating |
33 | ; 13.02.05 add new models. All camera axis calculating |
34 | ; 16.02.05 Simple model turning |
34 | ; 16.02.05 Simple model turning |
35 | ; 17.02.05 Advanced model turning, model tmpoints massive deleted |
35 | ; 17.02.05 Advanced model turning, model tmpoints massive deleted |
36 | ; New map size 128, add new models. |
36 | ; New map size 128, add new models. |
37 | ; 25.02.05 Left side clipping bug deleted |
37 | ; 25.02.05 Left side clipping bug deleted |
38 | ; 26.02.05 Optimization of textured line algorythm |
38 | ; 26.02.05 Optimization of textured line algorythm |
39 | ; 24.04.05 Test pixel z-buffer it's work. Use new textri algorythm |
39 | ; 24.04.05 Test pixel z-buffer it's work. Use new textri algorythm |
40 | ; 30.04.05 Fast Y-clipping |
40 | ; 30.04.05 Fast Y-clipping |
41 | 41 | ||
42 | use32 |
42 | use32 |
43 | 43 | ||
44 | SCREEN_X equ 800 ;320 ;Screen size easy change |
44 | SCREEN_X equ 800 ;320 ;Screen size easy change |
45 | SCREEN_Y equ 600 ;200 |
45 | SCREEN_Y equ 600 ;200 |
46 | DSCREEN_X equ SCREEN_X-1 ;320 ;For triangle clipping |
46 | DSCREEN_X equ SCREEN_X-1 ;320 ;For triangle clipping |
47 | DSCREEN_Y equ SCREEN_Y-1 ;200 |
47 | DSCREEN_Y equ SCREEN_Y-1 ;200 |
48 | MATRIX_XSIZE equ 64;32;64;100 ;Ground matrix size |
48 | MATRIX_XSIZE equ 64;32;64;100 ;Ground matrix size |
49 | MATRIX_YSIZE equ 64;32;64;100 |
49 | MATRIX_YSIZE equ 64;32;64;100 |
50 | SECTOR_SIZE equ 100 ;Size of matrix sector |
50 | SECTOR_SIZE equ 100 ;Size of matrix sector |
51 | MAP_XSIZE equ 128 ;Rezolution of map file |
51 | MAP_XSIZE equ 128 ;Rezolution of map file |
52 | MAP_YSIZE equ 128 |
52 | MAP_YSIZE equ 128 |
53 | 53 | ||
54 | org 0x0 |
54 | org 0x0 |
55 | db 'MENUET01' ; 8 ¡ ©â ¨â¤¥ä¨ª â®à |
55 | db 'MENUET01' ; 8 ¡ ©â ¨â¤¥ä¨ª â®à |
56 | dd 0x01 ; ¢¥àá¨ï § £®«®¢ª |
56 | dd 0x01 ; ¢¥àá¨ï § £®«®¢ª |
57 | dd START ; ¤à¥áá ç « ª®¤ |
57 | dd START ; ¤à¥áá ç « ª®¤ |
58 | dd I_END ; à §¬¥à ¯à®£à ¬¬ë |
58 | dd I_END ; à §¬¥à ¯à®£à ¬¬ë |
59 | dd I_END+(SCREEN_X*SCREEN_Y*3+50000) ; à §¬¥à ¯ ¬ï⨠¤«ï ¯à®££à ¬¬ë |
59 | dd I_END+(SCREEN_X*SCREEN_Y*3+50000) ; à §¬¥à ¯ ¬ï⨠¤«ï ¯à®££à ¬¬ë |
60 | dd I_END+(SCREEN_X*SCREEN_Y*3+10000) ; esp |
60 | dd I_END+(SCREEN_X*SCREEN_Y*3+10000) ; esp |
61 | dd 0x0 , 0x0 ; I_Param , I_Icon |
61 | dd 0x0 , 0x0 ; I_Param , I_Icon |
62 | 62 | ||
63 | include 'lang.inc' |
63 | include 'lang.inc' |
64 | include '..\..\..\macros.inc' |
64 | include '..\..\..\macros.inc' |
65 | include 'ascgl.inc' |
65 | include 'ascgl.inc' |
66 | include 'ascl.inc' |
66 | include 'ascl.inc' |
67 | 67 | ||
68 | START: ; ç «® ¯à¨«®¦¥¨ï |
68 | START: ; ç «® ¯à¨«®¦¥¨ï |
69 | ; Draw window at first |
69 | ; Draw window at first |
70 | call draw_window |
70 | call draw_window |
71 | 71 | ||
72 | ; Decoding groud texture and ground level map |
72 | ; Decoding groud texture and ground level map |
73 | gif_hash_offset = gif_hash_area |
73 | gif_hash_offset = gif_hash_area |
74 | ;texture's |
74 | ;texture's |
75 | giftoimg texpack_gif,texpack_img-8 |
75 | giftoimg texpack_gif,texpack_img-8 |
76 | ;ground level map |
76 | ;ground level map |
77 | giftoimg gif_file_area5,glm_img_area |
77 | giftoimg gif_file_area5,glm_img_area |
78 | 78 | ||
79 | ;get 8bitmap from 256 colors bmp file |
79 | ;get 8bitmap from 256 colors bmp file |
80 | mov ebp,128;64 |
80 | mov ebp,128;64 |
81 | mov esi,0x043a+128*128-4;64*64-4 |
81 | mov esi,0x043a+128*128-4;64*64-4 |
82 | sub esi,128;64 |
82 | sub esi,128;64 |
83 | mov edi,0 |
83 | mov edi,0 |
84 | mov ecx,128;64 |
84 | mov ecx,128;64 |
85 | texmap_unp: |
85 | texmap_unp: |
86 | mov al,[bmp_texmap+esi] |
86 | mov al,[bmp_texmap+esi] |
87 | mov [img_area+edi],al |
87 | mov [img_area+edi],al |
88 | inc esi |
88 | inc esi |
89 | inc edi |
89 | inc edi |
90 | dec ecx |
90 | dec ecx |
91 | jnz texmap_unp |
91 | jnz texmap_unp |
92 | mov ecx,128;64 |
92 | mov ecx,128;64 |
93 | sub esi,256;128 |
93 | sub esi,256;128 |
94 | dec ebp |
94 | dec ebp |
95 | jnz texmap_unp |
95 | jnz texmap_unp |
96 | 96 | ||
97 | 97 | ||
98 | ;Unpack textures |
98 | ;Unpack textures |
99 | 99 | ||
100 | mov esi,texpack_img |
100 | mov esi,texpack_img |
101 | mov edi,texture_img |
101 | mov edi,texture_img |
102 | mov edx,16 |
102 | mov edx,16 |
103 | mov ecx,16 |
103 | mov ecx,16 |
104 | tpuckloop: |
104 | tpuckloop: |
105 | pushad |
105 | pushad |
106 | call unpuck |
106 | call unpuck |
107 | popad |
107 | popad |
108 | add esi,32*3 |
108 | add esi,32*3 |
109 | add edi,4095 |
109 | add edi,4095 |
110 | dec ecx |
110 | dec ecx |
111 | jnz tpuckloop |
111 | jnz tpuckloop |
112 | add esi,31*32*16*3 |
112 | add esi,31*32*16*3 |
113 | mov ecx,16 |
113 | mov ecx,16 |
114 | dec edx |
114 | dec edx |
115 | jnz tpuckloop |
115 | jnz tpuckloop |
116 | 116 | ||
117 | ; |
117 | ; |
118 | ; Unpuck one texture procendure |
118 | ; Unpuck one texture procendure |
119 | ; |
119 | ; |
120 | jmp skip_unpuck |
120 | jmp skip_unpuck |
121 | unpuck: |
121 | unpuck: |
122 | mov ecx,32 |
122 | mov ecx,32 |
123 | mov edx,32 |
123 | mov edx,32 |
124 | tunploop: |
124 | tunploop: |
125 | mov ax,[esi] |
125 | mov ax,[esi] |
126 | mov [edi],ax |
126 | mov [edi],ax |
127 | mov al,[esi+2] |
127 | mov al,[esi+2] |
128 | mov [edi+2],al |
128 | mov [edi+2],al |
129 | add esi,3 |
129 | add esi,3 |
130 | add edi,3 |
130 | add edi,3 |
131 | dec ecx |
131 | dec ecx |
132 | jnz tunploop |
132 | jnz tunploop |
133 | mov ecx,32 |
133 | mov ecx,32 |
134 | add esi,(32*16*3)-(32*3) |
134 | add esi,(32*16*3)-(32*3) |
135 | dec edx |
135 | dec edx |
136 | jnz tunploop |
136 | jnz tunploop |
137 | ret |
137 | ret |
138 | skip_unpuck: |
138 | skip_unpuck: |
139 | 139 | ||
140 | 140 | ||
141 | ;calculating all mipmaps |
141 | ;calculating all mipmaps |
142 | mov esi,texture_img |
142 | mov esi,texture_img |
143 | mov ecx,256 ;quantity of textures |
143 | mov ecx,256 ;quantity of textures |
144 | mmaploop: |
144 | mmaploop: |
145 | mov ebp,32 ;max mipmap texture |
145 | mov ebp,32 ;max mipmap texture |
146 | pusha |
146 | pusha |
147 | call texgen |
147 | call texgen |
148 | popa |
148 | popa |
149 | add esi,4095 ;next mipmap block |
149 | add esi,4095 ;next mipmap block |
150 | dec ecx |
150 | dec ecx |
151 | jnz mmaploop |
151 | jnz mmaploop |
152 | 152 | ||
153 | jmp skip_texgen |
153 | jmp skip_texgen |
154 | 154 | ||
155 | ;******************************** |
155 | ;******************************** |
156 | ; MIPMAP TEXTURE GENERATION |
156 | ; MIPMAP TEXTURE GENERATION |
157 | ; |
157 | ; |
158 | ; in put: |
158 | ; in put: |
159 | ; esi - offset to texture |
159 | ; esi - offset to texture |
160 | ; ebp - mipmap max size (32 for this sample) |
160 | ; ebp - mipmap max size (32 for this sample) |
161 | ;******************************** |
161 | ;******************************** |
162 | 162 | ||
163 | texgen: |
163 | texgen: |
164 | push esi |
164 | push esi |
165 | mov eax,ebp |
165 | mov eax,ebp |
166 | imul eax,ebp |
166 | imul eax,ebp |
167 | imul eax,3 |
167 | imul eax,3 |
168 | add eax,esi |
168 | add eax,esi |
169 | mov edi,eax |
169 | mov edi,eax |
170 | 170 | ||
171 | mov eax,ebp |
171 | mov eax,ebp |
172 | shr eax,1 |
172 | shr eax,1 |
173 | mov dh,al |
173 | mov dh,al |
174 | mov dl,al |
174 | mov dl,al |
175 | mov cl,dl |
175 | mov cl,dl |
176 | 176 | ||
177 | mov ecx,ebp |
177 | mov ecx,ebp |
178 | mov eax,ebp |
178 | mov eax,ebp |
179 | shl eax,1 |
179 | shl eax,1 |
180 | add ecx,eax |
180 | add ecx,eax |
181 | 181 | ||
182 | miploop: |
182 | miploop: |
183 | ; Red |
183 | ; Red |
184 | xor bx,bx ;for add |
184 | xor bx,bx ;for add |
185 | xor ax,ax ;for add |
185 | xor ax,ax ;for add |
186 | mov al,[esi+0] |
186 | mov al,[esi+0] |
187 | add bx,ax |
187 | add bx,ax |
188 | mov al,[esi+3+0] |
188 | mov al,[esi+3+0] |
189 | add bx,ax |
189 | add bx,ax |
190 | mov al,[esi+ecx+0] |
190 | mov al,[esi+ecx+0] |
191 | add bx,ax |
191 | add bx,ax |
192 | mov al,[esi+ecx+3+0] |
192 | mov al,[esi+ecx+3+0] |
193 | add bx,ax |
193 | add bx,ax |
194 | shr bx,2 ;/4 |
194 | shr bx,2 ;/4 |
195 | mov [edi+0],bl |
195 | mov [edi+0],bl |
196 | ;Green |
196 | ;Green |
197 | xor bx,bx ;for add |
197 | xor bx,bx ;for add |
198 | xor ax,ax ;for add |
198 | xor ax,ax ;for add |
199 | mov al,[esi+1] |
199 | mov al,[esi+1] |
200 | add bx,ax |
200 | add bx,ax |
201 | mov al,[esi+3+1] |
201 | mov al,[esi+3+1] |
202 | add bx,ax |
202 | add bx,ax |
203 | mov al,[esi+ecx+1] |
203 | mov al,[esi+ecx+1] |
204 | add bx,ax |
204 | add bx,ax |
205 | mov al,[esi+ecx+3+1] |
205 | mov al,[esi+ecx+3+1] |
206 | add bx,ax |
206 | add bx,ax |
207 | shr bx,2 ;/4 |
207 | shr bx,2 ;/4 |
208 | mov [edi+1],bl |
208 | mov [edi+1],bl |
209 | ;Blue |
209 | ;Blue |
210 | xor bx,bx ;for add |
210 | xor bx,bx ;for add |
211 | xor ax,ax ;for add |
211 | xor ax,ax ;for add |
212 | mov al,[esi+2] |
212 | mov al,[esi+2] |
213 | add bx,ax |
213 | add bx,ax |
214 | mov al,[esi+3+2] |
214 | mov al,[esi+3+2] |
215 | add bx,ax |
215 | add bx,ax |
216 | mov al,[esi+ecx+2] |
216 | mov al,[esi+ecx+2] |
217 | add bx,ax |
217 | add bx,ax |
218 | mov al,[esi+ecx+3+2] |
218 | mov al,[esi+ecx+3+2] |
219 | add bx,ax |
219 | add bx,ax |
220 | shr bx,2 ;/4 |
220 | shr bx,2 ;/4 |
221 | mov [edi+2],bl |
221 | mov [edi+2],bl |
222 | 222 | ||
223 | add esi,6 |
223 | add esi,6 |
224 | add edi,3 |
224 | add edi,3 |
225 | dec dl |
225 | dec dl |
226 | jnz miploop |
226 | jnz miploop |
227 | mov ax,bp |
227 | mov ax,bp |
228 | shr ax,1 |
228 | shr ax,1 |
229 | mov dl,al |
229 | mov dl,al |
230 | add esi,ecx |
230 | add esi,ecx |
231 | dec dh |
231 | dec dh |
232 | jnz miploop |
232 | jnz miploop |
233 | pop esi |
233 | pop esi |
234 | 234 | ||
235 | mov eax,ebp |
235 | mov eax,ebp |
236 | imul eax,ebp |
236 | imul eax,ebp |
237 | imul eax,3 |
237 | imul eax,3 |
238 | add esi,eax |
238 | add esi,eax |
239 | shr ebp,1 |
239 | shr ebp,1 |
240 | cmp ebp,1 |
240 | cmp ebp,1 |
241 | jne texgen |
241 | jne texgen |
242 | ret |
242 | ret |
243 | skip_texgen: |
243 | skip_texgen: |
244 | 244 | ||
245 | 245 | ||
246 | ;Copy dynamic water texture |
246 | ;Copy dynamic water texture |
247 | ; ???????????? |
247 | ; ???????????? |
248 | mov ecx,32*32*3 |
248 | mov ecx,32*32*3 |
249 | mov esi,texture_img+4095 ;32*32*3 |
249 | mov esi,texture_img+4095 ;32*32*3 |
250 | mov edi,texture_limg |
250 | mov edi,texture_limg |
251 | cld |
251 | cld |
252 | rep movsb |
252 | rep movsb |
253 | 253 | ||
254 | ; init sine wave for dynamic water texture |
254 | ; init sine wave for dynamic water texture |
255 | finit |
255 | finit |
256 | mov edi,sinwave |
256 | mov edi,sinwave |
257 | mov ecx,32;256 |
257 | mov ecx,32;256 |
258 | isv_loop: |
258 | isv_loop: |
259 | fld [angle] |
259 | fld [angle] |
260 | fld st |
260 | fld st |
261 | fsin |
261 | fsin |
262 | fmul [mul_wave] |
262 | fmul [mul_wave] |
263 | fistp word [edi] |
263 | fistp word [edi] |
264 | fadd [d_angle] |
264 | fadd [d_angle] |
265 | fstp [angle] |
265 | fstp [angle] |
266 | add edi,2 |
266 | add edi,2 |
267 | dec ecx |
267 | dec ecx |
268 | jnz isv_loop |
268 | jnz isv_loop |
269 | 269 | ||
270 | 270 | ||
271 | ;Initalize keyboard |
271 | ;Initalize keyboard |
272 | mov eax,66 |
272 | mov eax,66 |
273 | mov ebx,1 |
273 | mov ebx,1 |
274 | mov ecx,1 |
274 | mov ecx,1 |
275 | mcall |
275 | mcall |
276 | 276 | ||
277 | mov eax,26 |
277 | mov eax,26 |
278 | mov ebx,2 |
278 | mov ebx,2 |
279 | mov ecx,1 |
279 | mov ecx,1 |
280 | mov edx,keymap+100 |
280 | mov edx,keymap+100 |
281 | mcall |
281 | mcall |
282 | 282 | ||
283 | ;Build triangle matrix |
283 | ;Build triangle matrix |
284 | mov esi,points |
284 | mov esi,points |
285 | mov eax,-(MATRIX_XSIZE/2)*SECTOR_SIZE |
285 | mov eax,-(MATRIX_XSIZE/2)*SECTOR_SIZE |
286 | mov ebx,-(MATRIX_YSIZE/2)*SECTOR_SIZE |
286 | mov ebx,-(MATRIX_YSIZE/2)*SECTOR_SIZE |
287 | mov ebp,img_area+8 |
287 | mov ebp,img_area+8 |
288 | loomat: |
288 | loomat: |
289 | mov [esi],eax ;x-set |
289 | mov [esi],eax ;x-set |
290 | mov [esi+4],ebx ;y-set |
290 | mov [esi+4],ebx ;y-set |
291 | mov [esi+8],ecx ;z-set |
291 | mov [esi+8],ecx ;z-set |
292 | add ebp,3 |
292 | add ebp,3 |
293 | add esi,4*3 |
293 | add esi,4*3 |
294 | add eax,SECTOR_SIZE |
294 | add eax,SECTOR_SIZE |
295 | cmp eax,((MATRIX_YSIZE/2)+1)*SECTOR_SIZE |
295 | cmp eax,((MATRIX_YSIZE/2)+1)*SECTOR_SIZE |
296 | jnge loomat |
296 | jnge loomat |
297 | mov eax,-(MATRIX_YSIZE/2)*SECTOR_SIZE |
297 | mov eax,-(MATRIX_YSIZE/2)*SECTOR_SIZE |
298 | add ebx,SECTOR_SIZE |
298 | add ebx,SECTOR_SIZE |
299 | cmp ebx,((MATRIX_XSIZE/2)+1)*SECTOR_SIZE |
299 | cmp ebx,((MATRIX_XSIZE/2)+1)*SECTOR_SIZE |
300 | jnge loomat |
300 | jnge loomat |
301 | 301 | ||
302 | ; Create z-ground good algorythm not already yet (64x64 map) |
302 | ; Create z-ground good algorythm not already yet (64x64 map) |
303 | mov esi,glm_img_area+8 |
303 | mov esi,glm_img_area+8 |
304 | mov edi,ground_level_map |
304 | mov edi,ground_level_map |
305 | loox: |
305 | loox: |
306 | ; draw_courner_points |
306 | ; draw_courner_points |
307 | mov eax,[esi] |
307 | mov eax,[esi] |
308 | call get_z |
308 | call get_z |
309 | ; mov [edi],eax |
309 | ; mov [edi],eax |
310 | 310 | ||
311 | mov eax,[esi+((MATRIX_XSIZE-1)*4)] |
311 | mov eax,[esi+((MATRIX_XSIZE-1)*4)] |
312 | call get_z |
312 | call get_z |
313 | ; mov [edi+((MATRIX_XSIZE)*4)],eax |
313 | ; mov [edi+((MATRIX_XSIZE)*4)],eax |
314 | 314 | ||
315 | mov eax,[esi+(((MATRIX_XSIZE)*(MATRIX_YSIZE-1)+1)*4)] |
315 | mov eax,[esi+(((MATRIX_XSIZE)*(MATRIX_YSIZE-1)+1)*4)] |
316 | call get_z |
316 | call get_z |
317 | ; mov [edi+(((MATRIX_XSIZE+1)*(MATRIX_YSIZE)-0)*4)],eax |
317 | ; mov [edi+(((MATRIX_XSIZE+1)*(MATRIX_YSIZE)-0)*4)],eax |
318 | 318 | ||
319 | mov eax,[esi+(((MATRIX_XSIZE)*(MATRIX_YSIZE)-1)*4)] |
319 | mov eax,[esi+(((MATRIX_XSIZE)*(MATRIX_YSIZE)-1)*4)] |
320 | call get_z |
320 | call get_z |
321 | ; mov [edi+(((MATRIX_XSIZE+1)*(MATRIX_YSIZE+1)-1)*4)],eax |
321 | ; mov [edi+(((MATRIX_XSIZE+1)*(MATRIX_YSIZE+1)-1)*4)],eax |
322 | 322 | ||
323 | 323 | ||
324 | jmp skip_gz |
324 | jmp skip_gz |
325 | get_z: |
325 | get_z: |
326 | xor ebx,ebx |
326 | xor ebx,ebx |
327 | xor ecx,ecx |
327 | xor ecx,ecx |
328 | mov bl,al |
328 | mov bl,al |
329 | add ecx,ebx |
329 | add ecx,ebx |
330 | mov bl,ah |
330 | mov bl,ah |
331 | add ecx,ebx |
331 | add ecx,ebx |
332 | shr eax,16 |
332 | shr eax,16 |
333 | mov bl,al |
333 | mov bl,al |
334 | add ecx,ebx |
334 | add ecx,ebx |
335 | mov eax,ecx |
335 | mov eax,ecx |
336 | xor edx,edx |
336 | xor edx,edx |
337 | mov ebx,3 |
337 | mov ebx,3 |
338 | cdq |
338 | cdq |
339 | div ebx |
339 | div ebx |
340 | neg eax |
340 | neg eax |
341 | ret |
341 | ret |
342 | skip_gz: |
342 | skip_gz: |
343 | 343 | ||
344 | ; z-ground livel facking method (65x65 map) |
344 | ; z-ground livel facking method (65x65 map) |
345 | mov esi,glm_img_area+8 |
345 | mov esi,glm_img_area+8 |
346 | mov edi,ground_level_map |
346 | mov edi,ground_level_map |
347 | mov ebp,(MAP_XSIZE+1)*(MAP_YSIZE+1) |
347 | mov ebp,(MAP_XSIZE+1)*(MAP_YSIZE+1) |
348 | looglm: |
348 | looglm: |
349 | mov eax,[esi] |
349 | mov eax,[esi] |
350 | ; and eax,0x000000ff |
350 | ; and eax,0x000000ff |
351 | call get_z |
351 | call get_z |
352 | mov [edi],eax |
352 | mov [edi],eax |
353 | add esi,3 |
353 | add esi,3 |
354 | add edi,1 |
354 | add edi,1 |
355 | dec ebp |
355 | dec ebp |
356 | jnz looglm |
356 | jnz looglm |
357 | 357 | ||
358 | ;Fill model massive |
358 | ;Fill model massive |
359 | mov ecx,[model_mas_start] |
359 | mov ecx,[model_mas_start] |
360 | imul ecx,8 |
360 | imul ecx,8 |
361 | add ecx,4 |
361 | add ecx,4 |
362 | mov esi,model_mas_start |
362 | mov esi,model_mas_start |
363 | mov edi,model_mas |
363 | mov edi,model_mas |
364 | cld |
364 | cld |
365 | rep movsd |
365 | rep movsd |
366 | 366 | ||
367 | jmp skip_moddata |
367 | jmp skip_moddata |
368 | model_mas_start: |
368 | model_mas_start: |
369 | dd 12 ;quantity of models |
369 | dd 12 ;quantity of models |
370 | dd 0,0,-150,0,0,0,0,bunker |
370 | dd 0,0,-150,0,0,0,0,bunker |
371 | dd 60,-250,-190,0,0,64,0,tank |
371 | dd 60,-250,-190,0,0,64,0,tank |
372 | dd 0,180,-150,0,0,0,0,cannon |
372 | dd 0,180,-150,0,0,0,0,cannon |
373 | dd 0,480,-150,0,0,0,0,outpost |
373 | dd 0,480,-150,0,0,0,0,outpost |
374 | dd 260,60,-150,0,0,0,0,bunker |
374 | dd 260,60,-150,0,0,0,0,bunker |
375 | dd 60,260,-150,0,0,0,0,outpost |
375 | dd 60,260,-150,0,0,0,0,outpost |
376 | dd 210,410,-150,0,0,0,0,cannon |
376 | dd 210,410,-150,0,0,0,0,cannon |
377 | dd 160,260,-150,0,0,0,0,tree |
377 | dd 160,260,-150,0,0,0,0,tree |
378 | dd 100,-360,-150,0,0,192,0,gqfa |
378 | dd 100,-360,-150,0,0,192,0,gqfa |
379 | dd 10,580,-150,0,0,0,0,repear |
379 | dd 10,580,-150,0,0,0,0,repear |
380 | dd 460,160,-100,0,0,0,0,red_flag |
380 | dd 460,160,-100,0,0,0,0,red_flag |
381 | dd 60,360,-170,0,0,40,0,cannon |
381 | dd 60,360,-170,0,0,40,0,cannon |
382 | skip_moddata: |
382 | skip_moddata: |
383 | 383 | ||
384 | 384 | ||
385 | ;Main loop |
385 | ;Main loop |
386 | still: ; ®á®¢®© 横« |
386 | still: ; ®á®¢®© 横« |
387 | mov eax,11 ; ¯à®¢¥àª á®áâ®ï¨ï ®ª |
387 | mov eax,11 ; ¯à®¢¥àª á®áâ®ï¨ï ®ª |
388 | mcall |
388 | mcall |
389 | 389 | ||
390 | cmp eax,1 ; ®ª® ᤢ¨ã«¨ ¥£® 㦮 ¯¥à¥à¨á®¢ âì |
390 | cmp eax,1 ; ®ª® ᤢ¨ã«¨ ¥£® 㦮 ¯¥à¥à¨á®¢ âì |
391 | je red |
391 | je red |
392 | cmp eax,2 ; ¦ â ª« ¢¨è ª« ¢¨ âãॠ|
392 | cmp eax,2 ; ¦ â ª« ¢¨è ª« ¢¨ âãॠ|
393 | je key |
393 | je key |
394 | cmp eax,3 ; ¦ â ª®¯ª ¢ ®ª¥ |
394 | cmp eax,3 ; ¦ â ª®¯ª ¢ ®ª¥ |
395 | je button |
395 | je button |
396 | 396 | ||
397 | ; delay 10 |
397 | ; delay 10 |
398 | ; cmp [autorot],0 ;frize no fps show when autorot off |
398 | ; cmp [autorot],0 ;frize no fps show when autorot off |
399 | ; je still |
399 | ; je still |
400 | 400 | ||
401 | cycle: |
401 | cycle: |
402 | call clrscr ; clear screen buffer |
402 | call clrscr ; clear screen buffer |
403 | call clrzbuf ; clear z-buffer |
403 | call clrzbuf ; clear z-buffer |
404 | call render_scene ; calculating scene |
404 | call render_scene ; calculating scene |
405 | call dispimg ; show buffer |
405 | call dispimg ; show buffer |
406 | 406 | ||
407 | fps_show_frequency=0 |
407 | fps_show_frequency=0 |
408 | fps 10,10,cl_White,cl_Black |
408 | fps 10,10,cl_White,cl_Black |
409 | 409 | ||
410 | 410 | ||
411 | ;turn model on z-axis |
411 | ;turn model on z-axis |
412 | inc dword [model_mas+4*6] |
412 | inc dword [model_mas+4*6] |
413 | and dword [model_mas+4*6],011111111b |
413 | and dword [model_mas+4*6],011111111b |
414 | 414 | ||
415 | 415 | ||
416 | ; Sin wave dynamic texture for water |
416 | ; Sin wave dynamic texture for water |
417 | ; jmp ndt |
417 | ; jmp ndt |
418 | xor edi,edi |
418 | xor edi,edi |
419 | mov dx,32 |
419 | mov dx,32 |
420 | mov bp,word [sin_pos] |
420 | mov bp,word [sin_pos] |
421 | dp_ver: |
421 | dp_ver: |
422 | mov cx,32 ;320 |
422 | mov cx,32 ;320 |
423 | mov si,word [sin_pos] |
423 | mov si,word [sin_pos] |
424 | dp_hor: |
424 | dp_hor: |
425 | and ebp,0000ffffh |
425 | and ebp,0000ffffh |
426 | mov ax,word [sinwave+ebp] |
426 | mov ax,word [sinwave+ebp] |
427 | add ax,cx |
427 | add ax,cx |
428 | and ax,31 |
428 | and ax,31 |
429 | 429 | ||
430 | and esi,0000ffffh |
430 | and esi,0000ffffh |
431 | mov bx,word [sinwave+esi] |
431 | mov bx,word [sinwave+esi] |
432 | add bx,dx |
432 | add bx,dx |
433 | and bx,31 |
433 | and bx,31 |
434 | shl bx,5 |
434 | shl bx,5 |
435 | add bx,ax |
435 | add bx,ax |
436 | 436 | ||
437 | push bx |
437 | push bx |
438 | imul bx,3 |
438 | imul bx,3 |
439 | and ebx,0000ffffh |
439 | and ebx,0000ffffh |
440 | mov ax,[texture_limg+ebx] |
440 | mov ax,[texture_limg+ebx] |
441 | mov [texture_img2+edi],ax |
441 | mov [texture_img2+edi],ax |
442 | mov al,[texture_limg+ebx+2] |
442 | mov al,[texture_limg+ebx+2] |
443 | mov [texture_img2+edi+2],al |
443 | mov [texture_img2+edi+2],al |
444 | pop bx |
444 | pop bx |
445 | 445 | ||
446 | add edi,3 |
446 | add edi,3 |
447 | add si,2 |
447 | add si,2 |
448 | and si,63;511 |
448 | and si,63;511 |
449 | 449 | ||
450 | dec cx |
450 | dec cx |
451 | jnz dp_hor |
451 | jnz dp_hor |
452 | add bp,2 |
452 | add bp,2 |
453 | and bp,63;511 |
453 | and bp,63;511 |
454 | dec dx |
454 | dec dx |
455 | jnz dp_ver |
455 | jnz dp_ver |
456 | 456 | ||
457 | ; update sine position for next frame |
457 | ; update sine position for next frame |
458 | add word [sin_pos],2 |
458 | add word [sin_pos],2 |
459 | and word [sin_pos],63;511 |
459 | and word [sin_pos],63;511 |
460 | 460 | ||
461 | ;Move water texture |
461 | ;Move water texture |
462 | jmp ndt |
462 | jmp ndt |
463 | mov esi,texture_limg |
463 | mov esi,texture_limg |
464 | mov ecx,32*32-1 |
464 | mov ecx,32*32-1 |
465 | loodt: |
465 | loodt: |
466 | mov al,byte [esi] |
466 | mov al,byte [esi] |
467 | mov bl,byte [esi+1] |
467 | mov bl,byte [esi+1] |
468 | mov dl,byte [esi+2] |
468 | mov dl,byte [esi+2] |
469 | mov ah,byte [esi+3] |
469 | mov ah,byte [esi+3] |
470 | mov bh,byte [esi+4] |
470 | mov bh,byte [esi+4] |
471 | mov dh,byte [esi+5] |
471 | mov dh,byte [esi+5] |
472 | mov byte [esi],ah |
472 | mov byte [esi],ah |
473 | mov byte [esi+1],bh |
473 | mov byte [esi+1],bh |
474 | mov byte [esi+2],dh |
474 | mov byte [esi+2],dh |
475 | mov byte [esi+3],al |
475 | mov byte [esi+3],al |
476 | mov byte [esi+4],bl |
476 | mov byte [esi+4],bl |
477 | mov byte [esi+5],dl |
477 | mov byte [esi+5],dl |
478 | add esi,3 |
478 | add esi,3 |
479 | dec ecx |
479 | dec ecx |
480 | jnz loodt |
480 | jnz loodt |
481 | ndt: |
481 | ndt: |
482 | 482 | ||
483 | ;Creat mipmap pack for dynamic texture |
483 | ;Creat mipmap pack for dynamic texture |
484 | mov ebp,32 |
484 | mov ebp,32 |
485 | mov esi,texture_img+4095 |
485 | mov esi,texture_img+4095 |
486 | call texgen |
486 | call texgen |
487 | 487 | ||
488 | 488 | ||
489 | mov eax,4 ; function 4 : write text to window |
489 | mov eax,4 ; function 4 : write text to window |
490 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
490 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
491 | mov ecx,0x0000ff00 ; font 1 & color ( 0xF0RRGGBB ) |
491 | mov ecx,0x0000ff00 ; font 1 & color ( 0xF0RRGGBB ) |
492 | mov edx,keymap ; pointer to text beginning |
492 | mov edx,keymap ; pointer to text beginning |
493 | mov esi,100 ; text length |
493 | mov esi,100 ; text length |
494 | mcall |
494 | mcall |
495 | add edx,100 |
495 | add edx,100 |
496 | add ebx,10 |
496 | add ebx,10 |
497 | mov esi,60 ; text length |
497 | mov esi,60 ; text length |
498 | mov ecx,0x00dddddd ; font 1 & color ( 0xF0RRGGBB ) |
498 | mov ecx,0x00dddddd ; font 1 & color ( 0xF0RRGGBB ) |
499 | mcall |
499 | mcall |
500 | mov edx,usemap |
500 | mov edx,usemap |
501 | mov esi,60 ; text length |
501 | mov esi,60 ; text length |
502 | mov ecx,0x0000ff00 |
502 | mov ecx,0x0000ff00 |
503 | mcall |
503 | mcall |
504 | jmp rx |
504 | jmp rx |
505 | ;01234567890123456789012345678901234567890123456789 |
505 | ;01234567890123456789012345678901234567890123456789 |
506 | usemap db ' E wer u [] asd zxc ' |
506 | usemap db ' E wer u [] asd zxc ' |
507 | db ' ' |
507 | db ' ' |
508 | rx: |
508 | rx: |
509 | 509 | ||
510 | cmp byte [keymap+1],0 |
510 | cmp byte [keymap+1],0 |
511 | je n_esc |
511 | je n_esc |
512 | jmp exit |
512 | jmp exit |
513 | n_esc: |
513 | n_esc: |
514 | 514 | ||
515 | cmp byte [keymap+22],0 |
515 | cmp byte [keymap+22],0 |
516 | je n_u |
516 | je n_u |
517 | mov [Xangle],0 |
517 | mov [Xangle],0 |
518 | mov [Yangle],0 |
518 | mov [Yangle],0 |
519 | mov [Zangle],0 |
519 | mov [Zangle],0 |
520 | n_u: |
520 | n_u: |
521 | 521 | ||
522 | ; t,y - mipmap cntrol |
522 | ; t,y - mipmap cntrol |
523 | cmp byte [keymap+20],0 |
523 | cmp byte [keymap+20],0 |
524 | je n_t |
524 | je n_t |
525 | inc [mipzoom] |
525 | inc [mipzoom] |
526 | n_t: |
526 | n_t: |
527 | cmp byte [keymap+21],0 |
527 | cmp byte [keymap+21],0 |
528 | je n_y |
528 | je n_y |
529 | dec [mipzoom] |
529 | dec [mipzoom] |
530 | n_y: |
530 | n_y: |
531 | cmp byte [keymap+23],0 |
531 | cmp byte [keymap+23],0 |
532 | je n_i |
532 | je n_i |
533 | mov byte [keymap+23],0 ; reset key |
533 | mov byte [keymap+23],0 ; reset key |
534 | cmp [mipmapwork],1 |
534 | cmp [mipmapwork],1 |
535 | je i_1 |
535 | je i_1 |
536 | i_0: |
536 | i_0: |
537 | mov [mipmapwork],1 |
537 | mov [mipmapwork],1 |
538 | jmp n_i |
538 | jmp n_i |
539 | i_1: |
539 | i_1: |
540 | mov [mipmapwork],0 |
540 | mov [mipmapwork],0 |
541 | n_i: |
541 | n_i: |
542 | 542 | ||
543 | 543 | ||
544 | cmp byte [keymap+26],0 |
544 | cmp byte [keymap+26],0 |
545 | je n_lsk |
545 | je n_lsk |
546 | add [Xcam],1 |
546 | add [Xcam],1 |
547 | n_lsk: |
547 | n_lsk: |
548 | cmp byte [keymap+27],0 |
548 | cmp byte [keymap+27],0 |
549 | je n_rsk |
549 | je n_rsk |
550 | sub [Xcam],1 |
550 | sub [Xcam],1 |
551 | n_rsk: |
551 | n_rsk: |
552 | cmp byte [keymap+18],0 |
552 | cmp byte [keymap+18],0 |
553 | je n_e |
553 | je n_e |
554 | add [Yangle],1 |
554 | add [Yangle],1 |
555 | n_e: |
555 | n_e: |
556 | cmp byte [keymap+45],0 |
556 | cmp byte [keymap+45],0 |
557 | je n_x |
557 | je n_x |
558 | sub [Yangle],1 |
558 | sub [Yangle],1 |
559 | n_x: |
559 | n_x: |
560 | cmp byte [keymap+31],0 |
560 | cmp byte [keymap+31],0 |
561 | je n_s |
561 | je n_s |
562 | add [Xangle],1 |
562 | add [Xangle],1 |
563 | n_s: |
563 | n_s: |
564 | cmp byte [keymap+32],0 |
564 | cmp byte [keymap+32],0 |
565 | je n_d |
565 | je n_d |
566 | sub [Xangle],1 |
566 | sub [Xangle],1 |
567 | n_d: |
567 | n_d: |
568 | cmp byte [keymap+44],0 |
568 | cmp byte [keymap+44],0 |
569 | je n_z |
569 | je n_z |
570 | add [Zangle],1 |
570 | add [Zangle],1 |
571 | n_z: |
571 | n_z: |
572 | cmp byte [keymap+46],0 |
572 | cmp byte [keymap+46],0 |
573 | je n_c |
573 | je n_c |
574 | sub [Zangle],1 |
574 | sub [Zangle],1 |
575 | n_c: |
575 | n_c: |
576 | cmp byte [keymap+17],0 |
576 | cmp byte [keymap+17],0 |
577 | je n_w |
577 | je n_w |
578 | add [Zcam],25 ;250 |
578 | add [Zcam],25 ;250 |
579 | n_w: |
579 | n_w: |
580 | cmp byte [keymap+19],0 |
580 | cmp byte [keymap+19],0 |
581 | je n_r |
581 | je n_r |
582 | sub [Zcam],25 ;250 |
582 | sub [Zcam],25 ;250 |
583 | n_r: |
583 | n_r: |
584 | 584 | ||
585 | cmp byte [keymap+75],0 |
585 | cmp byte [keymap+75],0 |
586 | je n_lk |
586 | je n_lk |
587 | add [Zcamangle],1 |
587 | add [Zcamangle],1 |
588 | and [Zcamangle],011111111b |
588 | and [Zcamangle],011111111b |
589 | n_lk: |
589 | n_lk: |
590 | cmp byte [keymap+77],0 |
590 | cmp byte [keymap+77],0 |
591 | je n_rk |
591 | je n_rk |
592 | sub [Zcamangle],1 |
592 | sub [Zcamangle],1 |
593 | and [Zcamangle],011111111b |
593 | and [Zcamangle],011111111b |
594 | n_rk: |
594 | n_rk: |
595 | 595 | ||
596 | cmp byte [keymap+79],0 |
596 | cmp byte [keymap+79],0 |
597 | je n_num1 |
597 | je n_num1 |
598 | add [Xcamangle],1 |
598 | add [Xcamangle],1 |
599 | and [Xcamangle],011111111b |
599 | and [Xcamangle],011111111b |
600 | n_num1: |
600 | n_num1: |
601 | cmp byte [keymap+81],0 |
601 | cmp byte [keymap+81],0 |
602 | je n_num3 |
602 | je n_num3 |
603 | sub [Xcamangle],1 |
603 | sub [Xcamangle],1 |
604 | and [Xcamangle],011111111b |
604 | and [Xcamangle],011111111b |
605 | n_num3: |
605 | n_num3: |
606 | cmp byte [keymap+71],0 |
606 | cmp byte [keymap+71],0 |
607 | je n_num7 |
607 | je n_num7 |
608 | add [Ycamangle],1 |
608 | add [Ycamangle],1 |
609 | and [Ycamangle],011111111b |
609 | and [Ycamangle],011111111b |
610 | n_num7: |
610 | n_num7: |
611 | cmp byte [keymap+73],0 |
611 | cmp byte [keymap+73],0 |
612 | je n_num9 |
612 | je n_num9 |
613 | sub [Ycamangle],1 |
613 | sub [Ycamangle],1 |
614 | and [Ycamangle],011111111b |
614 | and [Ycamangle],011111111b |
615 | n_num9: |
615 | n_num9: |
616 | 616 | ||
617 | 617 | ||
618 | 618 | ||
619 | cmp byte [keymap+30],0 |
619 | cmp byte [keymap+30],0 |
620 | je n_a |
620 | je n_a |
621 | mov byte [keymap+30],0 ; reset key |
621 | mov byte [keymap+30],0 ; reset key |
622 | cmp [autorot],1 |
622 | cmp [autorot],1 |
623 | je a_1 |
623 | je a_1 |
624 | a_0: |
624 | a_0: |
625 | mov [autorot],1 |
625 | mov [autorot],1 |
626 | jmp n_a |
626 | jmp n_a |
627 | a_1: |
627 | a_1: |
628 | mov [autorot],0 |
628 | mov [autorot],0 |
629 | n_a: |
629 | n_a: |
630 | 630 | ||
631 | ; for camera |
631 | ; for camera |
632 | ; mov ebx,[Xcamangle] |
632 | ; mov ebx,[Xcamangle] |
633 | ; call GetSinCos |
633 | ; call GetSinCos |
634 | ; mov [Xcamsin],eax |
634 | ; mov [Xcamsin],eax |
635 | ; mov [Xcamcos],ebx |
635 | ; mov [Xcamcos],ebx |
636 | 636 | ||
637 | ; mov ebx,[Ycamangle] |
637 | ; mov ebx,[Ycamangle] |
638 | ; call GetSinCos |
638 | ; call GetSinCos |
639 | ; mov [Ycamsin],eax |
639 | ; mov [Ycamsin],eax |
640 | ; mov [Ycamcos],ebx |
640 | ; mov [Ycamcos],ebx |
641 | 641 | ||
642 | mov ebx,[Zcamangle] |
642 | mov ebx,[Zcamangle] |
643 | call GetSinCos |
643 | call GetSinCos |
644 | mov [Zcamsin],eax |
644 | mov [Zcamsin],eax |
645 | mov [Zcamcos],ebx |
645 | mov [Zcamcos],ebx |
646 | 646 | ||
647 | mov eax,[Zcamsin] |
647 | mov eax,[Zcamsin] |
648 | mov ebx,[Zcamcos] |
648 | mov ebx,[Zcamcos] |
649 | ; mov ecx,[Xcamsin] |
649 | ; mov ecx,[Xcamsin] |
650 | ; mov edx,[Xcamcos] |
650 | ; mov edx,[Xcamcos] |
651 | ; mov esi,[Ycamsin] |
651 | ; mov esi,[Ycamsin] |
652 | ; mov edi,[Ycamcos] |
652 | ; mov edi,[Ycamcos] |
653 | 653 | ||
654 | sar eax,4 |
654 | sar eax,4 |
655 | sar ebx,4 |
655 | sar ebx,4 |
656 | ; sar ecx,4 |
656 | ; sar ecx,4 |
657 | ; sar edx,4 |
657 | ; sar edx,4 |
658 | ; sar esi,4 |
658 | ; sar esi,4 |
659 | ; sar edi,4 |
659 | ; sar edi,4 |
660 | 660 | ||
661 | cmp byte [keymap+72],0 |
661 | cmp byte [keymap+72],0 |
662 | je n_uk |
662 | je n_uk |
663 | sub [Xcam],eax |
663 | sub [Xcam],eax |
664 | sub [Ycam],ebx |
664 | sub [Ycam],ebx |
665 | 665 | ||
666 | ; sub [Zcam],ecx |
666 | ; sub [Zcam],ecx |
667 | ; sub [Ycam],edx |
667 | ; sub [Ycam],edx |
668 | 668 | ||
669 | ; sub [Xcam],esi |
669 | ; sub [Xcam],esi |
670 | ; add [Zcam],edi |
670 | ; add [Zcam],edi |
671 | 671 | ||
672 | n_uk: |
672 | n_uk: |
673 | cmp byte [keymap+80],0 |
673 | cmp byte [keymap+80],0 |
674 | je n_dk |
674 | je n_dk |
675 | add [Xcam],eax |
675 | add [Xcam],eax |
676 | add [Ycam],ebx |
676 | add [Ycam],ebx |
677 | 677 | ||
678 | ; add [Zcam],ecx |
678 | ; add [Zcam],ecx |
679 | ; add [Ycam],edx |
679 | ; add [Ycam],edx |
680 | 680 | ||
681 | ; add [Xcam],esi |
681 | ; add [Xcam],esi |
682 | ; sub [Zcam],edi |
682 | ; sub [Zcam],edi |
683 | 683 | ||
684 | n_dk: |
684 | n_dk: |
685 | 685 | ||
686 | xor ebp,ebp |
686 | xor ebp,ebp |
687 | move_test: |
687 | move_test: |
688 | cmp [Xcam],-SECTOR_SIZE/2 |
688 | cmp [Xcam],-SECTOR_SIZE/2 |
689 | jnl ok1 |
689 | jnl ok1 |
690 | add [Xcam],SECTOR_SIZE |
690 | add [Xcam],SECTOR_SIZE |
691 | dec [Xmap] |
691 | dec [Xmap] |
692 | jmp move_test |
692 | jmp move_test |
693 | ok1: |
693 | ok1: |
694 | cmp [Xcam],SECTOR_SIZE/2 |
694 | cmp [Xcam],SECTOR_SIZE/2 |
695 | jng ok2 |
695 | jng ok2 |
696 | sub [Xcam],SECTOR_SIZE |
696 | sub [Xcam],SECTOR_SIZE |
697 | inc [Xmap] |
697 | inc [Xmap] |
698 | jmp ok1 |
698 | jmp ok1 |
699 | ok2: |
699 | ok2: |
700 | cmp [Ycam],-SECTOR_SIZE/2 |
700 | cmp [Ycam],-SECTOR_SIZE/2 |
701 | jnl ok3 |
701 | jnl ok3 |
702 | add [Ycam],SECTOR_SIZE |
702 | add [Ycam],SECTOR_SIZE |
703 | dec [Ymap] |
703 | dec [Ymap] |
704 | jmp ok2 |
704 | jmp ok2 |
705 | ok3: |
705 | ok3: |
706 | cmp [Ycam],SECTOR_SIZE/2 |
706 | cmp [Ycam],SECTOR_SIZE/2 |
707 | jng ok4 |
707 | jng ok4 |
708 | sub [Ycam],SECTOR_SIZE |
708 | sub [Ycam],SECTOR_SIZE |
709 | inc [Ymap] |
709 | inc [Ymap] |
710 | jmp ok3 |
710 | jmp ok3 |
711 | ok4: |
711 | ok4: |
712 | 712 | ||
713 | and [Xangle],011111111b |
713 | and [Xangle],011111111b |
714 | and [Yangle],011111111b |
714 | and [Yangle],011111111b |
715 | and [Zangle],011111111b |
715 | and [Zangle],011111111b |
716 | 716 | ||
717 | jmp still |
717 | jmp still |
718 | 718 | ||
719 | red: ; redraw |
719 | red: ; redraw |
720 | call draw_window |
720 | call draw_window |
721 | jmp still |
721 | jmp still |
722 | 722 | ||
723 | key: ; key |
723 | key: ; key |
724 | mov eax,2 ; just read it and ignore |
724 | mov eax,2 ; just read it and ignore |
725 | mcall |
725 | mcall |
726 | 726 | ||
727 | shr eax,8 |
727 | shr eax,8 |
728 | and eax,0xff |
728 | and eax,0xff |
729 | mov ah,al |
729 | mov ah,al |
730 | 730 | ||
731 | mov ebx,0 |
731 | mov ebx,0 |
732 | mov bl,ah |
732 | mov bl,ah |
733 | cmp bl,224 |
733 | cmp bl,224 |
734 | je noisa ; ignore Ext code |
734 | je noisa ; ignore Ext code |
735 | cmp bl,170 |
735 | cmp bl,170 |
736 | je noisa ; ignore Key Up code |
736 | je noisa ; ignore Key Up code |
737 | cmp bl,128 |
737 | cmp bl,128 |
738 | ja isa |
738 | ja isa |
739 | mov [keymap+ebx],byte 'X' ; set press marker to key id |
739 | mov [keymap+ebx],byte 'X' ; set press marker to key id |
740 | jmp noisa |
740 | jmp noisa |
741 | isa: |
741 | isa: |
742 | sub bl,128 |
742 | sub bl,128 |
743 | mov [keymap+ebx],byte 0 ; reset key marker |
743 | mov [keymap+ebx],byte 0 ; reset key marker |
744 | noisa: |
744 | noisa: |
745 | jmp n_a |
745 | jmp n_a |
746 | 746 | ||
747 | jmp still ; cycle |
747 | jmp still ; cycle |
748 | 748 | ||
749 | button: ; button |
749 | button: ; button |
750 | mov eax,17 ; get id |
750 | mov eax,17 ; get id |
751 | mcall |
751 | mcall |
752 | cmp ah,1 |
752 | cmp ah,1 |
753 | jz exit |
753 | jz exit |
754 | jmp cycle |
754 | jmp cycle |
755 | 755 | ||
756 | exit: |
756 | exit: |
757 | or eax,-1 |
757 | or eax,-1 |
758 | mcall |
758 | mcall |
759 | 759 | ||
760 | ; ********************************************* |
760 | ; ********************************************* |
761 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
761 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
762 | ; ********************************************* |
762 | ; ********************************************* |
763 | 763 | ||
764 | draw_window: |
764 | draw_window: |
765 | mov eax,12 ; function 12:tell os about windowdraw |
765 | mov eax,12 ; function 12:tell os about windowdraw |
766 | mov ebx,1 ; 1, start of draw |
766 | mov ebx,1 ; 1, start of draw |
767 | mcall |
767 | mcall |
768 | ; DRAW WINDOW |
768 | ; DRAW WINDOW |
769 | mov eax,0 ; function 0 : define and draw window |
769 | mov eax,0 ; function 0 : define and draw window |
770 | mov ebx,0*65536+SCREEN_X-1 ; [x start] *65536 + [x size] |
770 | mov ebx,0*65536+SCREEN_X-1 ; [x start] *65536 + [x size] |
771 | mov ecx,0*65536+SCREEN_Y-1 ; [y start] *65536 + [y size] |
771 | mov ecx,0*65536+SCREEN_Y-1 ; [y start] *65536 + [y size] |
772 | mov edx,0x03ffffff ; color of work area RRGGBB,8->color gl |
772 | mov edx,0x03ffffff ; color of work area RRGGBB,8->color gl |
773 | mov esi,0x005080d0 ; color of grab bar RRGGBB,8->color gl |
773 | mov esi,0x005080d0 ; color of grab bar RRGGBB,8->color gl |
774 | mov edi,0x005080d0 ; color of frames RRGGBB |
774 | mov edi,0x005080d0 ; color of frames RRGGBB |
775 | mcall |
775 | mcall |
776 | ; WINDOW LABEL |
776 | ; WINDOW LABEL |
777 | mov eax,4 ; function 4 : write text to window |
777 | mov eax,4 ; function 4 : write text to window |
778 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
778 | mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
779 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
779 | mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB ) |
780 | mov edx,labelt ; pointer to text beginning |
780 | mov edx,labelt ; pointer to text beginning |
781 | mov esi,labellen-labelt ; text length |
781 | mov esi,labellen-labelt ; text length |
782 | mcall |
782 | mcall |
783 | 783 | ||
784 | mov eax,12 |
784 | mov eax,12 |
785 | mov ebx,2 |
785 | mov ebx,2 |
786 | mcall |
786 | mcall |
787 | ret |
787 | ret |
788 | 788 | ||
789 | dispimg: |
789 | dispimg: |
790 | mov eax,7 |
790 | mov eax,7 |
791 | mov ebx,I_END ;zbuffer |
791 | mov ebx,I_END ;zbuffer |
792 | mov ecx,SCREEN_X*65536+SCREEN_Y |
792 | mov ecx,SCREEN_X*65536+SCREEN_Y |
793 | xor edx,edx ;0*65536+0 |
793 | xor edx,edx ;0*65536+0 |
794 | mcall |
794 | mcall |
795 | ; ret |
795 | ; ret |
796 | 796 | ||
797 | mov eax,8 |
797 | mov eax,8 |
798 | mov ebx,(SCREEN_X-30)*65536+20 |
798 | mov ebx,(SCREEN_X-30)*65536+20 |
799 | mov ecx,10*65536+20 |
799 | mov ecx,10*65536+20 |
800 | mov edx,1 |
800 | mov edx,1 |
801 | mov esi,0x0000aa00 |
801 | mov esi,0x0000aa00 |
802 | mcall |
802 | mcall |
803 | ret |
803 | ret |
804 | 804 | ||
805 | clrscr: ; clear screen buffer |
805 | clrscr: ; clear screen buffer |
806 | ; cld |
806 | ; cld |
807 | ; mov edi,I_END |
807 | ; mov edi,I_END |
808 | ; xor eax,eax |
808 | ; xor eax,eax |
809 | ; mov ecx,SCREEN_X*SCREEN_Y*3/4 |
809 | ; mov ecx,SCREEN_X*SCREEN_Y*3/4 |
810 | ; rep stosd |
810 | ; rep stosd |
811 | ; ret |
811 | ; ret |
812 | 812 | ||
813 | ; clear screen buffer with MMX technology +1,5 fps |
813 | ; clear screen buffer with MMX technology +1,5 fps |
814 | mov edi,I_END |
814 | mov edi,I_END |
815 | mov ecx,SCREEN_X*SCREEN_Y*3/32 |
815 | mov ecx,SCREEN_X*SCREEN_Y*3/32 |
816 | xor eax,eax |
816 | xor eax,eax |
817 | movd mm0,eax |
817 | movd mm0,eax |
818 | movd mm1,eax |
818 | movd mm1,eax |
819 | movd mm2,eax |
819 | movd mm2,eax |
820 | movd mm3,eax |
820 | movd mm3,eax |
821 | csloo: |
821 | csloo: |
822 | movq qword [edi],mm0 |
822 | movq qword [edi],mm0 |
823 | movq qword [edi+8],mm1 |
823 | movq qword [edi+8],mm1 |
824 | movq qword [edi+16],mm2 |
824 | movq qword [edi+16],mm2 |
825 | movq qword [edi+24],mm3 |
825 | movq qword [edi+24],mm3 |
826 | add edi,32 |
826 | add edi,32 |
827 | dec ecx |
827 | dec ecx |
828 | jnz csloo |
828 | jnz csloo |
829 | ret |
829 | ret |
830 | 830 | ||
831 | clrzbuf: ; clear zbuf |
831 | clrzbuf: ; clear zbuf |
832 | cld |
832 | cld |
833 | mov edi,zbuffer |
833 | mov edi,zbuffer |
834 | mov eax,-1 |
834 | mov eax,-1 |
835 | mov ecx,SCREEN_X*SCREEN_Y*3/4 |
835 | mov ecx,SCREEN_X*SCREEN_Y*3/4 |
836 | rep stosd |
836 | rep stosd |
837 | ret |
837 | ret |
838 | 838 | ||
839 | 839 | ||
840 | ; mov [@@atx1],dword 0xffffffff |
840 | ; mov [@@atx1],dword 0xffffffff |
841 | ; mov [@@aty1],dword 0xffffffff |
841 | ; mov [@@aty1],dword 0xffffffff |
842 | ; movq mm0,qword [@@atx1] |
842 | ; movq mm0,qword [@@atx1] |
843 | ; movq mm1,qword [@@atx1] |
843 | ; movq mm1,qword [@@atx1] |
844 | ; movq mm2,qword [@@atx1] |
844 | ; movq mm2,qword [@@atx1] |
845 | ; movq mm3,qword [@@atx1] |
845 | ; movq mm3,qword [@@atx1] |
846 | ;czbloo: |
846 | ;czbloo: |
847 | ; movq qword [edi],mm0 |
847 | ; movq qword [edi],mm0 |
848 | ; movq qword [edi+8],mm1 |
848 | ; movq qword [edi+8],mm1 |
849 | ; movq qword [edi+16],mm2 |
849 | ; movq qword [edi+16],mm2 |
850 | ; movq qword [edi+24],mm3 |
850 | ; movq qword [edi+24],mm3 |
851 | ; add edi,32 |
851 | ; add edi,32 |
852 | ; dec ecx |
852 | ; dec ecx |
853 | ; jnz czbloo |
853 | ; jnz czbloo |
854 | ret |
854 | ret |
855 | 855 | ||
856 | @@atx1: dd 0 |
856 | @@atx1: dd 0 |
857 | @@aty1: dd 0 |
857 | @@aty1: dd 0 |
858 | 858 | ||
859 | ;=========================================================================== |
859 | ;=========================================================================== |
860 | ; |
860 | ; |
861 | ; 3D-system example. Use the following formulas to rotate a point: |
861 | ; 3D-system example. Use the following formulas to rotate a point: |
862 | ; |
862 | ; |
863 | ; Rotate around x-axis |
863 | ; Rotate around x-axis |
864 | ; Y = Y * COS(xang) - Z * SIN(xang) / 256 |
864 | ; Y = Y * COS(xang) - Z * SIN(xang) / 256 |
865 | ; Z = Y * SIN(xang) + Z * COS(xang) / 256 |
865 | ; Z = Y * SIN(xang) + Z * COS(xang) / 256 |
866 | ; |
866 | ; |
867 | ; Rotate around y-axis |
867 | ; Rotate around y-axis |
868 | ; X = X * COS(yang) - Z * SIN(yang) / 256 |
868 | ; X = X * COS(yang) - Z * SIN(yang) / 256 |
869 | ; Z = X * SIN(yang) + Z * COS(yang) / 256 |
869 | ; Z = X * SIN(yang) + Z * COS(yang) / 256 |
870 | ; |
870 | ; |
871 | ; Rotate around z-axis |
871 | ; Rotate around z-axis |
872 | ; X = X * COS(zang) - Y * SIN(zang) / 256 |
872 | ; X = X * COS(zang) - Y * SIN(zang) / 256 |
873 | ; Y = X * SIN(zang) + Y * COS(zang) / 256 |
873 | ; Y = X * SIN(zang) + Y * COS(zang) / 256 |
874 | ; |
874 | ; |
875 | ; Divide by 256 coz we have multiplyd our sin values with 256 too. |
875 | ; Divide by 256 coz we have multiplyd our sin values with 256 too. |
876 | ; This example isn't too fast right now but it'll work just fine. |
876 | ; This example isn't too fast right now but it'll work just fine. |
877 | ; |
877 | ; |
878 | ;=========================================================================== |
878 | ;=========================================================================== |
879 | 879 | ||
880 | ;*************************************************************************** |
880 | ;*************************************************************************** |
881 | ; \\\ MAIN 3D LOOP /// |
881 | ; \\\ MAIN 3D LOOP /// |
882 | ; ****************** |
882 | ; ****************** |
883 | render_scene: |
883 | render_scene: |
884 | 884 | ||
885 | ;******************** |
885 | ;******************** |
886 | ; Turn matrix points |
886 | ; Turn matrix points |
887 | ;******************** |
887 | ;******************** |
888 | 888 | ||
889 | cmp [autorot],0 |
889 | cmp [autorot],0 |
890 | je no_autorot |
890 | je no_autorot |
891 | call UpdateAngles ; Calculate new angles |
891 | call UpdateAngles ; Calculate new angles |
892 | no_autorot: |
892 | no_autorot: |
893 | call SetRotation ; Find sine & cosine of those angles |
893 | call SetRotation ; Find sine & cosine of those angles |
894 | 894 | ||
895 | mov edi,tpoints |
895 | mov edi,tpoints |
896 | mov esi,points |
896 | mov esi,points |
897 | mov [mapoff],-1 ;-1 at start |
897 | mov [mapoff],-1 ;-1 at start |
898 | mov ebp,[Ymap] |
898 | mov ebp,[Ymap] |
899 | imul ebp,MAP_XSIZE+1 |
899 | imul ebp,MAP_XSIZE+1 |
900 | mov eax,[Xmap] |
900 | mov eax,[Xmap] |
901 | add ebp,eax |
901 | add ebp,eax |
902 | 902 | ||
903 | mov ecx,(MATRIX_XSIZE+1)*(MATRIX_YSIZE+1) |
903 | mov ecx,(MATRIX_XSIZE+1)*(MATRIX_YSIZE+1) |
904 | ShowLoop: |
904 | ShowLoop: |
905 | push ecx |
905 | push ecx |
906 | push esi |
906 | push esi |
907 | mov eax,[esi] |
907 | mov eax,[esi] |
908 | sub eax,[Xcam] |
908 | sub eax,[Xcam] |
909 | mov [X],eax |
909 | mov [X],eax |
910 | mov eax,[esi+4] |
910 | mov eax,[esi+4] |
911 | sub eax,[Ycam] |
911 | sub eax,[Ycam] |
912 | mov [Y],eax |
912 | mov [Y],eax |
913 | mov eax,[ebp+ground_level_map] ;color |
913 | mov eax,[ebp+ground_level_map] ;color |
914 | and eax,0x000000ff |
914 | and eax,0x000000ff |
915 | sub eax,[Zcam] |
915 | sub eax,[Zcam] |
916 | mov [Z],eax |
916 | mov [Z],eax |
917 | push ebp |
917 | push ebp |
918 | push edi |
918 | push edi |
919 | call TranslatePoint ; Rotates the point using above formulas |
919 | call TranslatePoint ; Rotates the point using above formulas |
920 | pop edi |
920 | pop edi |
921 | mov [edi],ebp ;x |
921 | mov [edi],ebp ;x |
922 | mov [edi+4],eax ;y |
922 | mov [edi+4],eax ;y |
923 | mov eax,[Z] ;z |
923 | mov eax,[Z] ;z |
924 | add eax,[Zoff] |
924 | add eax,[Zoff] |
925 | mov [edi+8],eax |
925 | mov [edi+8],eax |
926 | pop ebp |
926 | pop ebp |
927 | pop esi |
927 | pop esi |
928 | pop ecx |
928 | pop ecx |
929 | 929 | ||
930 | add esi,4*3 ;next in point |
930 | add esi,4*3 ;next in point |
931 | add edi,4*3 ;next out point |
931 | add edi,4*3 ;next out point |
932 | 932 | ||
933 | inc [mapoff] |
933 | inc [mapoff] |
934 | cmp [mapoff],MATRIX_XSIZE+1 |
934 | cmp [mapoff],MATRIX_XSIZE+1 |
935 | jne no_shift_glm |
935 | jne no_shift_glm |
936 | mov [mapoff],dword 0 |
936 | mov [mapoff],dword 0 |
937 | add ebp,(MAP_XSIZE-MATRIX_XSIZE) |
937 | add ebp,(MAP_XSIZE-MATRIX_XSIZE) |
938 | no_shift_glm: |
938 | no_shift_glm: |
939 | add ebp,1 |
939 | add ebp,1 |
940 | 940 | ||
941 | dec ecx |
941 | dec ecx |
942 | jnz ShowLoop |
942 | jnz ShowLoop |
943 | 943 | ||
944 | 944 | ||
945 | ; Show, how many polygons on screen. |
945 | ; Show, how many polygons on screen. |
946 | outcount [massize],50,10,cl_White,8*65536 |
946 | outcount [massize],50,10,cl_White,8*65536 |
947 | 947 | ||
948 | 948 | ||
949 | ;***************** |
949 | ;***************** |
950 | ; out triangles |
950 | ; out triangles |
951 | ;***************** |
951 | ;***************** |
952 | 952 | ||
953 | mov [mapoff],-1 ;-1 at start |
953 | mov [mapoff],-1 ;-1 at start |
954 | mov [massize],0 ;restet triangle massive counter |
954 | mov [massize],0 ;restet triangle massive counter |
955 | 955 | ||
956 | mov ebp,[Ymap] |
956 | mov ebp,[Ymap] |
957 | imul ebp,MAP_XSIZE;64;3*64 ;MAP_XSIZE |
957 | imul ebp,MAP_XSIZE;64;3*64 ;MAP_XSIZE |
958 | mov eax,[Xmap] |
958 | mov eax,[Xmap] |
959 | add ebp,eax |
959 | add ebp,eax |
960 | 960 | ||
961 | mov edi,tpoints |
961 | mov edi,tpoints |
962 | mov ecx,MATRIX_YSIZE ;64 |
962 | mov ecx,MATRIX_YSIZE ;64 |
963 | lootpy: |
963 | lootpy: |
964 | push ecx |
964 | push ecx |
965 | mov ecx,MATRIX_XSIZE ;64 |
965 | mov ecx,MATRIX_XSIZE ;64 |
966 | lootpx: |
966 | lootpx: |
967 | ;draw four angle (two triangles) |
967 | ;draw four angle (two triangles) |
968 | 968 | ||
969 | Z_MAX = 10 ;maximal z range for triangles |
969 | Z_MAX = 10 ;maximal z range for triangles |
970 | 970 | ||
971 | ; get texture offset at start |
971 | ; get texture offset at start |
972 | inc [mapoff] |
972 | inc [mapoff] |
973 | cmp [mapoff],MATRIX_XSIZE |
973 | cmp [mapoff],MATRIX_XSIZE |
974 | jne no_shift |
974 | jne no_shift |
975 | mov [mapoff],dword 0 |
975 | mov [mapoff],dword 0 |
976 | add ebp,(MAP_XSIZE-MATRIX_XSIZE) |
976 | add ebp,(MAP_XSIZE-MATRIX_XSIZE) |
977 | no_shift: |
977 | no_shift: |
978 | xor eax,eax |
978 | xor eax,eax |
979 | mov al,[ebp+img_area];+8] |
979 | mov al,[ebp+img_area];+8] |
980 | inc ebp |
980 | inc ebp |
981 | imul eax,4095;32*32*3 |
981 | imul eax,4095;32*32*3 |
982 | add eax,texture_img |
982 | add eax,texture_img |
983 | mov ebx,eax |
983 | mov ebx,eax |
984 | 984 | ||
985 | ;first triangle |
985 | ;first triangle |
986 | mov eax,[edi+8] ;z1 |
986 | mov eax,[edi+8] ;z1 |
987 | cmp eax,Z_MAX |
987 | cmp eax,Z_MAX |
988 | jl no_add1 |
988 | jl no_add1 |
989 | mov [@@tz1],eax |
989 | mov [@@tz1],eax |
990 | mov eax,[edi+8+12] ;z2 |
990 | mov eax,[edi+8+12] ;z2 |
991 | cmp eax,Z_MAX |
991 | cmp eax,Z_MAX |
992 | jl no_add1 |
992 | jl no_add1 |
993 | mov [@@tz2],eax |
993 | mov [@@tz2],eax |
994 | mov eax,[edi+8+(4*3*(MATRIX_XSIZE+2))] ;z3 |
994 | mov eax,[edi+8+(4*3*(MATRIX_XSIZE+2))] ;z3 |
995 | cmp eax,Z_MAX |
995 | cmp eax,Z_MAX |
996 | jl no_add1 |
996 | jl no_add1 |
997 | mov [@@tz3],eax |
997 | mov [@@tz3],eax |
998 | 998 | ||
999 | cmp dword [edi],SCREEN_X |
999 | cmp dword [edi],SCREEN_X |
1000 | ja p11 |
1000 | ja p11 |
1001 | cmp dword [edi+4],SCREEN_Y |
1001 | cmp dword [edi+4],SCREEN_Y |
1002 | jna yes_add1 |
1002 | jna yes_add1 |
1003 | p11: |
1003 | p11: |
1004 | cmp dword [edi+12],SCREEN_X |
1004 | cmp dword [edi+12],SCREEN_X |
1005 | ja p12 |
1005 | ja p12 |
1006 | cmp dword [edi+4+12],SCREEN_Y |
1006 | cmp dword [edi+4+12],SCREEN_Y |
1007 | jna yes_add1 |
1007 | jna yes_add1 |
1008 | p12: |
1008 | p12: |
1009 | cmp dword [edi+(4*3*(MATRIX_XSIZE+2))],SCREEN_X |
1009 | cmp dword [edi+(4*3*(MATRIX_XSIZE+2))],SCREEN_X |
1010 | ja p13 |
1010 | ja p13 |
1011 | cmp dword [edi+4+(4*3*(MATRIX_XSIZE+2))],SCREEN_Y |
1011 | cmp dword [edi+4+(4*3*(MATRIX_XSIZE+2))],SCREEN_Y |
1012 | jna yes_add1 |
1012 | jna yes_add1 |
1013 | p13: |
1013 | p13: |
1014 | jmp no_add1 |
1014 | jmp no_add1 |
1015 | yes_add1: |
1015 | yes_add1: |
1016 | 1016 | ||
1017 | movq mm0,qword [edi] ;x1 |
1017 | movq mm0,qword [edi] ;x1 |
1018 | movq mm1,qword [edi+12] ;x2 |
1018 | movq mm1,qword [edi+12] ;x2 |
1019 | movq mm2,qword [edi+(4*3*(MATRIX_XSIZE+2))] ;x3 |
1019 | movq mm2,qword [edi+(4*3*(MATRIX_XSIZE+2))] ;x3 |
1020 | movq qword [@@tx1],mm0 |
1020 | movq qword [@@tx1],mm0 |
1021 | movq qword [@@tx2],mm1 |
1021 | movq qword [@@tx2],mm1 |
1022 | movq qword [@@tx3],mm2 |
1022 | movq qword [@@tx3],mm2 |
1023 | 1023 | ||
1024 | mov eax,ebx;+1 shl 31;[ebp] |
1024 | mov eax,ebx;+1 shl 31;[ebp] |
1025 | mov [@@tex_off],eax ;0x0000ff00 |
1025 | mov [@@tex_off],eax ;0x0000ff00 |
1026 | inc [massize] |
1026 | inc [massize] |
1027 | pushad |
1027 | pushad |
1028 | mov [@@tex_x1],0 |
1028 | mov [@@tex_x1],0 |
1029 | mov [@@tex_y1],0 |
1029 | mov [@@tex_y1],0 |
1030 | mov [@@tex_x3],(32 shl 16) -1;128 |
1030 | mov [@@tex_x3],(32 shl 16) -1;128 |
1031 | mov [@@tex_y3],(32 shl 16) -1;128 |
1031 | mov [@@tex_y3],(32 shl 16) -1;128 |
1032 | mov [@@tex_x2],0 |
1032 | mov [@@tex_x2],0 |
1033 | mov [@@tex_y2],(32 shl 16) -1;128 |
1033 | mov [@@tex_y2],(32 shl 16) -1;128 |
1034 | call textured_triangle |
1034 | call textured_triangle |
1035 | popad |
1035 | popad |
1036 | 1036 | ||
1037 | no_add1: |
1037 | no_add1: |
1038 | 1038 | ||
1039 | 1039 | ||
1040 | 1040 | ||
1041 | ;second triangle |
1041 | ;second triangle |
1042 | mov eax,[edi+8] ;z1 |
1042 | mov eax,[edi+8] ;z1 |
1043 | cmp eax,Z_MAX |
1043 | cmp eax,Z_MAX |
1044 | jl no_add2 |
1044 | jl no_add2 |
1045 | mov [@@tz1],eax |
1045 | mov [@@tz1],eax |
1046 | mov eax,[edi+8+(4*3*(MATRIX_XSIZE+1))] ;z2 |
1046 | mov eax,[edi+8+(4*3*(MATRIX_XSIZE+1))] ;z2 |
1047 | cmp eax,Z_MAX |
1047 | cmp eax,Z_MAX |
1048 | jl no_add2 |
1048 | jl no_add2 |
1049 | mov [@@tz2],eax |
1049 | mov [@@tz2],eax |
1050 | mov eax,[edi+8+(4*3*(MATRIX_XSIZE+2))] ;z3 |
1050 | mov eax,[edi+8+(4*3*(MATRIX_XSIZE+2))] ;z3 |
1051 | cmp eax,Z_MAX |
1051 | cmp eax,Z_MAX |
1052 | jl no_add2 |
1052 | jl no_add2 |
1053 | mov [@@tz3],eax |
1053 | mov [@@tz3],eax |
1054 | 1054 | ||
1055 | cmp dword [edi],SCREEN_X |
1055 | cmp dword [edi],SCREEN_X |
1056 | ja p21 |
1056 | ja p21 |
1057 | cmp dword [edi+4],SCREEN_Y |
1057 | cmp dword [edi+4],SCREEN_Y |
1058 | jna yes_add2 |
1058 | jna yes_add2 |
1059 | p21: |
1059 | p21: |
1060 | cmp dword [edi+(4*3*(MATRIX_XSIZE+1))],SCREEN_X |
1060 | cmp dword [edi+(4*3*(MATRIX_XSIZE+1))],SCREEN_X |
1061 | ja p22 |
1061 | ja p22 |
1062 | cmp dword [edi+4+(4*3*(MATRIX_XSIZE+1))],SCREEN_Y |
1062 | cmp dword [edi+4+(4*3*(MATRIX_XSIZE+1))],SCREEN_Y |
1063 | jna yes_add2 |
1063 | jna yes_add2 |
1064 | p22: |
1064 | p22: |
1065 | cmp dword [edi+(4*3*(MATRIX_XSIZE+2))],SCREEN_X |
1065 | cmp dword [edi+(4*3*(MATRIX_XSIZE+2))],SCREEN_X |
1066 | ja p23 |
1066 | ja p23 |
1067 | cmp dword [edi+4+(4*3*(MATRIX_XSIZE+2))],SCREEN_Y |
1067 | cmp dword [edi+4+(4*3*(MATRIX_XSIZE+2))],SCREEN_Y |
1068 | jna yes_add2 |
1068 | jna yes_add2 |
1069 | p23: |
1069 | p23: |
1070 | jmp no_add2 |
1070 | jmp no_add2 |
1071 | yes_add2: |
1071 | yes_add2: |
1072 | 1072 | ||
1073 | movq mm0,qword [edi] ;x1 |
1073 | movq mm0,qword [edi] ;x1 |
1074 | movq mm1,qword [edi+(4*3*(MATRIX_XSIZE+1))] ;x2 |
1074 | movq mm1,qword [edi+(4*3*(MATRIX_XSIZE+1))] ;x2 |
1075 | movq mm2,qword [edi+(4*3*(MATRIX_XSIZE+2))] ;x3 |
1075 | movq mm2,qword [edi+(4*3*(MATRIX_XSIZE+2))] ;x3 |
1076 | movq qword [@@tx1],mm0 |
1076 | movq qword [@@tx1],mm0 |
1077 | movq qword [@@tx2],mm1 |
1077 | movq qword [@@tx2],mm1 |
1078 | movq qword [@@tx3],mm2 |
1078 | movq qword [@@tx3],mm2 |
1079 | 1079 | ||
1080 | 1080 | ||
1081 | mov eax,ebx |
1081 | mov eax,ebx |
1082 | mov [@@tex_off],eax ;0x0000ff00 |
1082 | mov [@@tex_off],eax ;0x0000ff00 |
1083 | inc [massize] |
1083 | inc [massize] |
1084 | ; add esi,4*10 |
1084 | ; add esi,4*10 |
1085 | 1085 | ||
1086 | pushad |
1086 | pushad |
1087 | mov [@@tex_x1],0 |
1087 | mov [@@tex_x1],0 |
1088 | mov [@@tex_y1],0 |
1088 | mov [@@tex_y1],0 |
1089 | mov [@@tex_x3],(32 shl 16) -1;128 |
1089 | mov [@@tex_x3],(32 shl 16) -1;128 |
1090 | mov [@@tex_y3],(32 shl 16) -1;128 |
1090 | mov [@@tex_y3],(32 shl 16) -1;128 |
1091 | mov [@@tex_x2],(32 shl 16) -1 |
1091 | mov [@@tex_x2],(32 shl 16) -1 |
1092 | mov [@@tex_y2],0 |
1092 | mov [@@tex_y2],0 |
1093 | call textured_triangle |
1093 | call textured_triangle |
1094 | popad |
1094 | popad |
1095 | 1095 | ||
1096 | 1096 | ||
1097 | no_add2: |
1097 | no_add2: |
1098 | 1098 | ||
1099 | add edi,4*3 ;next triangle |
1099 | add edi,4*3 ;next triangle |
1100 | dec ecx |
1100 | dec ecx |
1101 | jnz lootpx |
1101 | jnz lootpx |
1102 | add edi,4*3 ;next string |
1102 | add edi,4*3 ;next string |
1103 | pop ecx |
1103 | pop ecx |
1104 | dec ecx |
1104 | dec ecx |
1105 | jnz lootpy |
1105 | jnz lootpy |
1106 | 1106 | ||
1107 | ;********************************** |
1107 | ;********************************** |
1108 | ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
1108 | ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
1109 | ;********************************** |
1109 | ;********************************** |
1110 | ; For good models quality -5% speed |
1110 | ; For good models quality -5% speed |
1111 | ; call clrzbuf |
1111 | ; call clrzbuf |
1112 | 1112 | ||
1113 | jmp skip_modmas |
1113 | jmp skip_modmas |
1114 | mmcnt dd 0 ;counter of model read number |
1114 | mmcnt dd 0 ;counter of model read number |
1115 | modeloff dd 0 ;offset of model structure |
1115 | modeloff dd 0 ;offset of model structure |
1116 | modelmoff dd 0 ;offset in model mas |
1116 | modelmoff dd 0 ;offset in model mas |
1117 | modeltmpoff dd 0 ;tmpoints offset |
1117 | modeltmpoff dd 0 ;tmpoints offset |
1118 | ; massive of models |
1118 | ; massive of models |
1119 | ; format: X,Y,Z coordoinats,offset to model structure |
1119 | ; format: X,Y,Z coordoinats,offset to model structure |
1120 | 1120 | ||
1121 | skip_modmas: |
1121 | skip_modmas: |
1122 | 1122 | ||
1123 | ; Rendering models on map |
1123 | ; Rendering models on map |
1124 | 1124 | ||
1125 | mov eax,[model_mas] |
1125 | mov eax,[model_mas] |
1126 | mov [mmcnt],eax |
1126 | mov [mmcnt],eax |
1127 | 1127 | ||
1128 | ModelRenderLoop: |
1128 | ModelRenderLoop: |
1129 | 1129 | ||
1130 | mov ebx,[mmcnt] |
1130 | mov ebx,[mmcnt] |
1131 | dec ebx |
1131 | dec ebx |
1132 | imul ebx,4*8 |
1132 | imul ebx,4*8 |
1133 | add ebx,model_mas+4 |
1133 | add ebx,model_mas+4 |
1134 | mov ebp,ebx ;edi=model offset X,Y,Z,Xturn,Yturn,Zturn,zero,modeloff |
1134 | mov ebp,ebx ;edi=model offset X,Y,Z,Xturn,Yturn,Zturn,zero,modeloff |
1135 | 1135 | ||
1136 | mov ebx,[ebp+4*3];[Xangle] ; Grab angle |
1136 | mov ebx,[ebp+4*3];[Xangle] ; Grab angle |
1137 | call GetSinCos ; Get the sine&cosine |
1137 | call GetSinCos ; Get the sine&cosine |
1138 | mov [Xsin],eax ; Save sin |
1138 | mov [Xsin],eax ; Save sin |
1139 | mov [Xcos],ebx ; Save cos |
1139 | mov [Xcos],ebx ; Save cos |
1140 | mov ebx,[ebp+4*4];[Yangle] |
1140 | mov ebx,[ebp+4*4];[Yangle] |
1141 | call GetSinCos |
1141 | call GetSinCos |
1142 | mov [Ysin],eax |
1142 | mov [Ysin],eax |
1143 | mov [Ycos],ebx |
1143 | mov [Ycos],ebx |
1144 | mov ebx,[ebp+4*5];[Zangle] |
1144 | mov ebx,[ebp+4*5];[Zangle] |
1145 | call GetSinCos |
1145 | call GetSinCos |
1146 | mov [Zsin],eax |
1146 | mov [Zsin],eax |
1147 | mov [Zcos],ebx |
1147 | mov [Zcos],ebx |
1148 | 1148 | ||
1149 | mov ebx,[mmcnt] |
1149 | mov ebx,[mmcnt] |
1150 | imul ebx,4*8 |
1150 | imul ebx,4*8 |
1151 | add ebx,model_mas+4-4 |
1151 | add ebx,model_mas+4-4 |
1152 | mov eax,[ebx] |
1152 | mov eax,[ebx] |
1153 | 1153 | ||
1154 | mov [modeloff],eax |
1154 | mov [modeloff],eax |
1155 | sub ebx,4*7;3 |
1155 | sub ebx,4*7;3 |
1156 | mov [modelmoff],ebx |
1156 | mov [modelmoff],ebx |
1157 | 1157 | ||
1158 | mov edi,modelpoints |
1158 | mov edi,modelpoints |
1159 | mov esi,eax ;bunker+8 |
1159 | mov esi,eax ;bunker+8 |
1160 | add esi,8 |
1160 | add esi,8 |
1161 | mov ecx,[eax] ;[bunker] ;MODEL_POINTS |
1161 | mov ecx,[eax] ;[bunker] ;MODEL_POINTS |
1162 | 1162 | ||
1163 | TurnModelLoop: |
1163 | TurnModelLoop: |
1164 | push ecx |
1164 | push ecx |
1165 | push esi |
1165 | push esi |
1166 | mov eax,[esi] |
1166 | mov eax,[esi] |
1167 | mov [X],eax |
1167 | mov [X],eax |
1168 | mov eax,[esi+4] |
1168 | mov eax,[esi+4] |
1169 | mov [Y],eax |
1169 | mov [Y],eax |
1170 | mov eax,[esi+8] |
1170 | mov eax,[esi+8] |
1171 | mov [Z],eax |
1171 | mov [Z],eax |
1172 | push ebp |
1172 | push ebp |
1173 | push edi |
1173 | push edi |
1174 | 1174 | ||
1175 | ;RotatePoint |
1175 | ;RotatePoint |
1176 | 1176 | ||
1177 | mov esi,[Y] |
1177 | mov esi,[Y] |
1178 | mov ebx,[Xcos] |
1178 | mov ebx,[Xcos] |
1179 | mov edi,[Z] |
1179 | mov edi,[Z] |
1180 | mov ecx,[Xsin] |
1180 | mov ecx,[Xsin] |
1181 | call math |
1181 | call math |
1182 | mov [Y],esi |
1182 | mov [Y],esi |
1183 | mov [Z],edi |
1183 | mov [Z],edi |
1184 | mov esi,[X] |
1184 | mov esi,[X] |
1185 | mov ebx,[Ycos] |
1185 | mov ebx,[Ycos] |
1186 | mov ecx,[Ysin] |
1186 | mov ecx,[Ysin] |
1187 | call math |
1187 | call math |
1188 | mov [X],esi |
1188 | mov [X],esi |
1189 | mov [Z],edi |
1189 | mov [Z],edi |
1190 | mov ebx,[Zcos] |
1190 | mov ebx,[Zcos] |
1191 | mov edi,[Y] |
1191 | mov edi,[Y] |
1192 | mov ecx,[Zsin] |
1192 | mov ecx,[Zsin] |
1193 | call math |
1193 | call math |
1194 | mov [X],esi |
1194 | mov [X],esi |
1195 | mov [Y],edi |
1195 | mov [Y],edi |
1196 | 1196 | ||
1197 | pop edi |
1197 | pop edi |
1198 | 1198 | ||
1199 | mov eax,[X] |
1199 | mov eax,[X] |
1200 | mov [edi],eax |
1200 | mov [edi],eax |
1201 | mov eax,[Y] |
1201 | mov eax,[Y] |
1202 | mov [edi+4],eax |
1202 | mov [edi+4],eax |
1203 | 1203 | ||
1204 | mov eax,[Z] ;z |
1204 | mov eax,[Z] ;z |
1205 | ; add eax,[Zoff] |
1205 | ; add eax,[Zoff] |
1206 | mov [edi+8],eax |
1206 | mov [edi+8],eax |
1207 | pop ebp |
1207 | pop ebp |
1208 | pop esi |
1208 | pop esi |
1209 | pop ecx |
1209 | pop ecx |
1210 | 1210 | ||
1211 | add esi,4*3 ;next in point |
1211 | add esi,4*3 ;next in point |
1212 | add edi,4*3 ;next out point |
1212 | add edi,4*3 ;next out point |
1213 | 1213 | ||
1214 | dec ecx |
1214 | dec ecx |
1215 | jnz TurnModelLoop |
1215 | jnz TurnModelLoop |
1216 | 1216 | ||
1217 | modxxx: |
1217 | modxxx: |
1218 | 1218 | ||
1219 | 1219 | ||
1220 | ;Turn model off map |
1220 | ;Turn model off map |
1221 | 1221 | ||
1222 | call SetRotation |
1222 | call SetRotation |
1223 | 1223 | ||
1224 | mov ebx,[mmcnt] |
1224 | mov ebx,[mmcnt] |
1225 | imul ebx,4*8 |
1225 | imul ebx,4*8 |
1226 | add ebx,model_mas+4-4 |
1226 | add ebx,model_mas+4-4 |
1227 | mov eax,[ebx] |
1227 | mov eax,[ebx] |
1228 | 1228 | ||
1229 | mov [modeloff],eax |
1229 | mov [modeloff],eax |
1230 | sub ebx,4*7;3 |
1230 | sub ebx,4*7;3 |
1231 | mov [modelmoff],ebx |
1231 | mov [modelmoff],ebx |
1232 | 1232 | ||
1233 | mov edi,modelpoints |
1233 | mov edi,modelpoints |
1234 | mov ecx,[eax] ;[bunker] ;MODEL_POINTS |
1234 | mov ecx,[eax] ;[bunker] ;MODEL_POINTS |
1235 | 1235 | ||
1236 | ShowModelLoop: |
1236 | ShowModelLoop: |
1237 | push ecx |
1237 | push ecx |
1238 | mov eax,[edi] ;esi] |
1238 | mov eax,[edi] ;esi] |
1239 | 1239 | ||
1240 | mov ebx,[modelmoff] |
1240 | mov ebx,[modelmoff] |
1241 | sub eax,[ebx] ;[Xmod] |
1241 | sub eax,[ebx] ;[Xmod] |
1242 | 1242 | ||
1243 | sub eax,[Xcam] |
1243 | sub eax,[Xcam] |
1244 | mov ebx,[Xmap] |
1244 | mov ebx,[Xmap] |
1245 | imul ebx,SECTOR_SIZE |
1245 | imul ebx,SECTOR_SIZE |
1246 | sub eax,ebx |
1246 | sub eax,ebx |
1247 | mov [X],eax |
1247 | mov [X],eax |
1248 | mov eax,[edi+4] ;esi+4] |
1248 | mov eax,[edi+4] ;esi+4] |
1249 | 1249 | ||
1250 | mov ebx,[modelmoff] |
1250 | mov ebx,[modelmoff] |
1251 | sub eax,[ebx+4] ;[Ymod] |
1251 | sub eax,[ebx+4] ;[Ymod] |
1252 | 1252 | ||
1253 | sub eax,[Ycam] |
1253 | sub eax,[Ycam] |
1254 | mov ebx,[Ymap] |
1254 | mov ebx,[Ymap] |
1255 | imul ebx,SECTOR_SIZE |
1255 | imul ebx,SECTOR_SIZE |
1256 | sub eax,ebx |
1256 | sub eax,ebx |
1257 | mov [Y],eax |
1257 | mov [Y],eax |
1258 | mov eax,[edi+8];esi+8] |
1258 | mov eax,[edi+8];esi+8] |
1259 | 1259 | ||
1260 | mov ebx,[modelmoff] |
1260 | mov ebx,[modelmoff] |
1261 | sub eax,[ebx+8] ;[Zmod] |
1261 | sub eax,[ebx+8] ;[Zmod] |
1262 | 1262 | ||
1263 | sub eax,[Zcam] |
1263 | sub eax,[Zcam] |
1264 | mov [Z],eax |
1264 | mov [Z],eax |
1265 | push ebp |
1265 | push ebp |
1266 | push edi |
1266 | push edi |
1267 | call TranslatePoint ; Rotates the point using above formulas |
1267 | call TranslatePoint ; Rotates the point using above formulas |
1268 | pop edi |
1268 | pop edi |
1269 | mov [edi],ebp ;x |
1269 | mov [edi],ebp ;x |
1270 | mov [edi+4],eax ;y |
1270 | mov [edi+4],eax ;y |
1271 | mov eax,[Z] ;z |
1271 | mov eax,[Z] ;z |
1272 | add eax,[Zoff] |
1272 | add eax,[Zoff] |
1273 | mov [edi+8],eax |
1273 | mov [edi+8],eax |
1274 | pop ebp |
1274 | pop ebp |
1275 | pop ecx |
1275 | pop ecx |
1276 | 1276 | ||
1277 | add edi,4*3 ;next out point |
1277 | add edi,4*3 ;next out point |
1278 | 1278 | ||
1279 | dec ecx |
1279 | dec ecx |
1280 | jnz ShowModelLoop |
1280 | jnz ShowModelLoop |
1281 | 1281 | ||
1282 | 1282 | ||
1283 | ; add [model_mas+8],dword 3 |
1283 | ; add [model_mas+8],dword 3 |
1284 | 1284 | ||
1285 | 1285 | ||
1286 | 1286 | ||
1287 | mov esi,[massize] |
1287 | mov esi,[massize] |
1288 | imul esi,4*10 |
1288 | imul esi,4*10 |
1289 | 1289 | ||
1290 | mov eax,[modeloff] |
1290 | mov eax,[modeloff] |
1291 | mov ecx,[eax+4] ;MODEL_TRIANGELS |
1291 | mov ecx,[eax+4] ;MODEL_TRIANGELS |
1292 | 1292 | ||
1293 | ;calc tmpoints offset |
1293 | ;calc tmpoints offset |
1294 | mov edi,modelpoints |
1294 | mov edi,modelpoints |
1295 | mov [modeltmpoff],edi |
1295 | mov [modeltmpoff],edi |
1296 | 1296 | ||
1297 | ;calc postlink offset |
1297 | ;calc postlink offset |
1298 | mov edi,[eax] |
1298 | mov edi,[eax] |
1299 | imul edi,3*4;*2 ;X,Y,Z (3) points dd format (4) 2 masives (2) |
1299 | imul edi,3*4;*2 ;X,Y,Z (3) points dd format (4) 2 masives (2) |
1300 | add edi,eax |
1300 | add edi,eax |
1301 | add edi,8 ;skip dd points, dd triangels |
1301 | add edi,8 ;skip dd points, dd triangels |
1302 | msloo: |
1302 | msloo: |
1303 | 1303 | ||
1304 | mov ebx,[edi] |
1304 | mov ebx,[edi] |
1305 | imul ebx,4*3 |
1305 | imul ebx,4*3 |
1306 | add ebx,[modeltmpoff] ;tmpoints |
1306 | add ebx,[modeltmpoff] ;tmpoints |
1307 | mov eax,[ebx] |
1307 | mov eax,[ebx] |
1308 | mov [@@tx1],eax |
1308 | mov [@@tx1],eax |
1309 | mov eax,[ebx+4] |
1309 | mov eax,[ebx+4] |
1310 | mov [@@ty1],eax |
1310 | mov [@@ty1],eax |
1311 | mov eax,[ebx+8] |
1311 | mov eax,[ebx+8] |
1312 | mov [@@tz1],eax |
1312 | mov [@@tz1],eax |
1313 | 1313 | ||
1314 | mov ebx,[edi+4] |
1314 | mov ebx,[edi+4] |
1315 | imul ebx,4*3 |
1315 | imul ebx,4*3 |
1316 | add ebx,[modeltmpoff] ;tmpoints |
1316 | add ebx,[modeltmpoff] ;tmpoints |
1317 | mov eax,[ebx] |
1317 | mov eax,[ebx] |
1318 | mov [@@tx2],eax |
1318 | mov [@@tx2],eax |
1319 | mov eax,[ebx+4] |
1319 | mov eax,[ebx+4] |
1320 | mov [@@ty2],eax |
1320 | mov [@@ty2],eax |
1321 | mov eax,[ebx+8] |
1321 | mov eax,[ebx+8] |
1322 | mov [@@tz2],eax |
1322 | mov [@@tz2],eax |
1323 | 1323 | ||
1324 | mov ebx,[edi+8] |
1324 | mov ebx,[edi+8] |
1325 | imul ebx,4*3 |
1325 | imul ebx,4*3 |
1326 | add ebx,[modeltmpoff] ;tmpoints |
1326 | add ebx,[modeltmpoff] ;tmpoints |
1327 | mov eax,[ebx] |
1327 | mov eax,[ebx] |
1328 | mov [@@tx3],eax |
1328 | mov [@@tx3],eax |
1329 | mov eax,[ebx+4] |
1329 | mov eax,[ebx+4] |
1330 | mov [@@ty3],eax |
1330 | mov [@@ty3],eax |
1331 | mov eax,[ebx+8] |
1331 | mov eax,[ebx+8] |
1332 | mov [@@tz3],eax |
1332 | mov [@@tz3],eax |
1333 | 1333 | ||
1334 | 1334 | ||
1335 | cmp dword [@@tz1],Z_MAX |
1335 | cmp dword [@@tz1],Z_MAX |
1336 | jl no_add |
1336 | jl no_add |
1337 | cmp dword [@@tz2],Z_MAX |
1337 | cmp dword [@@tz2],Z_MAX |
1338 | jl no_add |
1338 | jl no_add |
1339 | cmp dword [@@tz3],Z_MAX |
1339 | cmp dword [@@tz3],Z_MAX |
1340 | jl no_add |
1340 | jl no_add |
1341 | cmp dword [@@tx1],SCREEN_X |
1341 | cmp dword [@@tx1],SCREEN_X |
1342 | ja pm1 |
1342 | ja pm1 |
1343 | cmp dword [@@ty1],SCREEN_Y |
1343 | cmp dword [@@ty1],SCREEN_Y |
1344 | jna yes_madd |
1344 | jna yes_madd |
1345 | pm1: |
1345 | pm1: |
1346 | cmp dword [@@tx2],SCREEN_X |
1346 | cmp dword [@@tx2],SCREEN_X |
1347 | ja pm2 |
1347 | ja pm2 |
1348 | cmp dword [@@ty2],SCREEN_Y |
1348 | cmp dword [@@ty2],SCREEN_Y |
1349 | jna yes_madd |
1349 | jna yes_madd |
1350 | pm2: |
1350 | pm2: |
1351 | cmp dword [@@tx3],SCREEN_X |
1351 | cmp dword [@@tx3],SCREEN_X |
1352 | ja pm3 |
1352 | ja pm3 |
1353 | cmp dword [@@ty3],SCREEN_Y |
1353 | cmp dword [@@ty3],SCREEN_Y |
1354 | jna yes_madd |
1354 | jna yes_madd |
1355 | pm3: |
1355 | pm3: |
1356 | jmp no_add |
1356 | jmp no_add |
1357 | yes_madd: |
1357 | yes_madd: |
1358 | 1358 | ||
1359 | 1359 | ||
1360 | 1360 | ||
1361 | 1361 | ||
1362 | mov ebx,[edi+12] |
1362 | mov ebx,[edi+12] |
1363 | dec ebx |
1363 | dec ebx |
1364 | js ttex |
1364 | js ttex |
1365 | mov eax,1 shl 31 |
1365 | mov eax,1 shl 31 |
1366 | jmp posit |
1366 | jmp posit |
1367 | ttex: |
1367 | ttex: |
1368 | add ebx,2 |
1368 | add ebx,2 |
1369 | mov eax,0 |
1369 | mov eax,0 |
1370 | neg ebx |
1370 | neg ebx |
1371 | posit: |
1371 | posit: |
1372 | imul ebx,4095;32*32*3 |
1372 | imul ebx,4095;32*32*3 |
1373 | add ebx,texture_img |
1373 | add ebx,texture_img |
1374 | mov [@@tex_off],ebx |
1374 | mov [@@tex_off],ebx |
1375 | 1375 | ||
1376 | pushad |
1376 | pushad |
1377 | mov [@@tex_x1],0 |
1377 | mov [@@tex_x1],0 |
1378 | mov [@@tex_y1],0 |
1378 | mov [@@tex_y1],0 |
1379 | mov [@@tex_x3],(32 shl 16) -1;128 |
1379 | mov [@@tex_x3],(32 shl 16) -1;128 |
1380 | mov [@@tex_y3],(32 shl 16) -1;128 |
1380 | mov [@@tex_y3],(32 shl 16) -1;128 |
1381 | cmp eax,0 |
1381 | cmp eax,0 |
1382 | je nez |
1382 | je nez |
1383 | mov [@@tex_x2],0 |
1383 | mov [@@tex_x2],0 |
1384 | mov [@@tex_y2],(32 shl 16) -1 |
1384 | mov [@@tex_y2],(32 shl 16) -1 |
1385 | jmp isz |
1385 | jmp isz |
1386 | nez: |
1386 | nez: |
1387 | mov [@@tex_x2],(32 shl 16) -1 |
1387 | mov [@@tex_x2],(32 shl 16) -1 |
1388 | mov [@@tex_y2],0 |
1388 | mov [@@tex_y2],0 |
1389 | isz: |
1389 | isz: |
1390 | call textured_triangle |
1390 | call textured_triangle |
1391 | popad |
1391 | popad |
1392 | 1392 | ||
1393 | ; mov [esi+8+24+4],eax |
1393 | ; mov [esi+8+24+4],eax |
1394 | ; add esi,4*10 |
1394 | ; add esi,4*10 |
1395 | inc [massize] |
1395 | inc [massize] |
1396 | no_add: |
1396 | no_add: |
1397 | add edi,4*4; *9 |
1397 | add edi,4*4; *9 |
1398 | dec ecx |
1398 | dec ecx |
1399 | jnz msloo |
1399 | jnz msloo |
1400 | 1400 | ||
1401 | dec [mmcnt] |
1401 | dec [mmcnt] |
1402 | jnz ModelRenderLoop |
1402 | jnz ModelRenderLoop |
1403 | 1403 | ||
1404 | 1404 | ||
1405 | jmp skip_mdata |
1405 | jmp skip_mdata |
1406 | 1406 | ||
1407 | bunker: |
1407 | bunker: |
1408 | dd 8 ;model points |
1408 | dd 8 ;model points |
1409 | dd 10 ;model triagels |
1409 | dd 10 ;model triagels |
1410 | ;mpoints: |
1410 | ;mpoints: |
1411 | dd -105,-105,0, -105,105,0, 105,105,0, 105,-105,0 |
1411 | dd -105,-105,0, -105,105,0, 105,105,0, 105,-105,0 |
1412 | dd -70,-70,-50, -70,70,-50, 70,70,-50, 70,-70,-50 |
1412 | dd -70,-70,-50, -70,70,-50, 70,70,-50, 70,-70,-50 |
1413 | 1413 | ||
1414 | ; 4-------7 Points structure |
1414 | ; 4-------7 Points structure |
1415 | ; |\0---3/| |
1415 | ; |\0---3/| |
1416 | ; | | | | |
1416 | ; | | | | |
1417 | ; | | | | |
1417 | ; | | | | |
1418 | ; |/1---2\| |
1418 | ; |/1---2\| |
1419 | ; 5-------6 |
1419 | ; 5-------6 |
1420 | 1420 | ||
1421 | ;pointslink: |
1421 | ;pointslink: |
1422 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1422 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1423 | dd 4,0,1, -5, 4,5,1, 5 ;left side |
1423 | dd 4,0,1, -5, 4,5,1, 5 ;left side |
1424 | dd 6,2,3, -5, 6,7,3, 5 ;right side |
1424 | dd 6,2,3, -5, 6,7,3, 5 ;right side |
1425 | dd 4,0,3, -5, 4,7,3, 5 ;up side |
1425 | dd 4,0,3, -5, 4,7,3, 5 ;up side |
1426 | dd 5,1,2, -5, 5,6,2, 5 ;down side |
1426 | dd 5,1,2, -5, 5,6,2, 5 ;down side |
1427 | dd 4,5,6, -6, 4,7,6, 6 ;far side |
1427 | dd 4,5,6, -6, 4,7,6, 6 ;far side |
1428 | 1428 | ||
1429 | ;model 2 outpost |
1429 | ;model 2 outpost |
1430 | outpost: |
1430 | outpost: |
1431 | dd 8 ;model points |
1431 | dd 8 ;model points |
1432 | dd 10 ;model triagels |
1432 | dd 10 ;model triagels |
1433 | ;mpoints: |
1433 | ;mpoints: |
1434 | dd -45,-45,0, -45,45,0, 45,45,0, 45,-45,0 |
1434 | dd -45,-45,0, -45,45,0, 45,45,0, 45,-45,0 |
1435 | dd -30,-30,-20, -30,30,-20, 30,30,-20, 30,-30,-20 |
1435 | dd -30,-30,-20, -30,30,-20, 30,30,-20, 30,-30,-20 |
1436 | ;pointslink: |
1436 | ;pointslink: |
1437 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1437 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1438 | dd 4,0,1, -8, 4,5,1, 8 ;left side |
1438 | dd 4,0,1, -8, 4,5,1, 8 ;left side |
1439 | dd 6,2,3, -8, 6,7,3, 8 ;right side |
1439 | dd 6,2,3, -8, 6,7,3, 8 ;right side |
1440 | dd 4,0,3, -8, 4,7,3, 8 ;up side |
1440 | dd 4,0,3, -8, 4,7,3, 8 ;up side |
1441 | dd 5,1,2, -8, 5,6,2, 8 ;down side |
1441 | dd 5,1,2, -8, 5,6,2, 8 ;down side |
1442 | dd 4,5,6, -7, 4,7,6, 7 ;near side |
1442 | dd 4,5,6, -7, 4,7,6, 7 ;near side |
1443 | 1443 | ||
1444 | ;model 3 cannon |
1444 | ;model 3 cannon |
1445 | cannon: |
1445 | cannon: |
1446 | dd 12 ;model points |
1446 | dd 12 ;model points |
1447 | dd 12 ;model triagels |
1447 | dd 12 ;model triagels |
1448 | ;mpoints: |
1448 | ;mpoints: |
1449 | dd -10,-20,0, -10,20,0, 10,20,0, 10,-20,0 |
1449 | dd -10,-20,0, -10,20,0, 10,20,0, 10,-20,0 |
1450 | dd -10,-10,-15, -10,10,-15, 10,10,-15, 10,-10,-15 |
1450 | dd -10,-10,-15, -10,10,-15, 10,10,-15, 10,-10,-15 |
1451 | dd -2,15,-8, 2,15,-8, -2,45,-8, 2,45,-8 |
1451 | dd -2,15,-8, 2,15,-8, -2,45,-8, 2,45,-8 |
1452 | ;pointslink: |
1452 | ;pointslink: |
1453 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1453 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1454 | dd 4,0,1, -10, 4,5,1, 10 ;left side |
1454 | dd 4,0,1, -10, 4,5,1, 10 ;left side |
1455 | dd 6,2,3, -10, 6,7,3, 10 ;right side |
1455 | dd 6,2,3, -10, 6,7,3, 10 ;right side |
1456 | dd 4,0,3, -10, 4,7,3, 10 ;up side |
1456 | dd 4,0,3, -10, 4,7,3, 10 ;up side |
1457 | dd 5,1,2, -10, 5,6,2, 10 ;down side |
1457 | dd 5,1,2, -10, 5,6,2, 10 ;down side |
1458 | dd 4,5,6, -11, 4,7,6, 11 ;near side |
1458 | dd 4,5,6, -11, 4,7,6, 11 ;near side |
1459 | dd 8,9,10,-10, 9,10,11,10 ;cannon 1 |
1459 | dd 8,9,10,-10, 9,10,11,10 ;cannon 1 |
1460 | 1460 | ||
1461 | ;model 4 red flag |
1461 | ;model 4 red flag |
1462 | red_flag: |
1462 | red_flag: |
1463 | dd 12 ;model points |
1463 | dd 12 ;model points |
1464 | dd 6*2 ;model triagels |
1464 | dd 6*2 ;model triagels |
1465 | ;mpoints: |
1465 | ;mpoints: |
1466 | dd -1,-1,0, -1,1,0, 1,1,0, 1,-1,0 |
1466 | dd -1,-1,0, -1,1,0, 1,1,0, 1,-1,0 |
1467 | dd -1,-1,-30, -1,1,-30, 1,1,-30, 1,-1,-30 |
1467 | dd -1,-1,-30, -1,1,-30, 1,1,-30, 1,-1,-30 |
1468 | dd 1,1,-30, 10,1,-30, 10,1,-20, 1,1,-20 |
1468 | dd 1,1,-30, 10,1,-30, 10,1,-20, 1,1,-20 |
1469 | ;pointslink: |
1469 | ;pointslink: |
1470 | dd 4,0,1, -10, 4,5,1, 15 ;left side |
1470 | dd 4,0,1, -10, 4,5,1, 15 ;left side |
1471 | dd 6,2,3, -10, 6,7,3, 15 ;right side |
1471 | dd 6,2,3, -10, 6,7,3, 15 ;right side |
1472 | dd 4,0,3, -10, 4,7,3, 15 ;up side |
1472 | dd 4,0,3, -10, 4,7,3, 15 ;up side |
1473 | dd 5,1,2, -10, 5,6,2, 15 ;down side |
1473 | dd 5,1,2, -10, 5,6,2, 15 ;down side |
1474 | dd 4,5,6, -10, 4,7,6, 15 ;near side |
1474 | dd 4,5,6, -10, 4,7,6, 15 ;near side |
1475 | dd 8,11,10,-49, 8,9,10,49 ;flag |
1475 | dd 8,11,10,-49, 8,9,10,49 ;flag |
1476 | 1476 | ||
1477 | repear: |
1477 | repear: |
1478 | dd 8 ;model points |
1478 | dd 8 ;model points |
1479 | dd 10 ;model triagels |
1479 | dd 10 ;model triagels |
1480 | ;mpoints: |
1480 | ;mpoints: |
1481 | dd -45,-45,0, -45,45,0, 45,45,0, 45,-45,0 |
1481 | dd -45,-45,0, -45,45,0, 45,45,0, 45,-45,0 |
1482 | dd -30,-30,-20, -30,30,-20, 30,30,-20, 30,-30,-20 |
1482 | dd -30,-30,-20, -30,30,-20, 30,30,-20, 30,-30,-20 |
1483 | ;pointslink: |
1483 | ;pointslink: |
1484 | dd 4,0,1, -5, 4,5,1, 5 ;left side |
1484 | dd 4,0,1, -5, 4,5,1, 5 ;left side |
1485 | dd 6,2,3, -5, 6,7,3, 5 ;right side |
1485 | dd 6,2,3, -5, 6,7,3, 5 ;right side |
1486 | dd 4,0,3, -5, 4,7,3, 5 ;up side |
1486 | dd 4,0,3, -5, 4,7,3, 5 ;up side |
1487 | dd 5,1,2, -5, 5,6,2, 5 ;down side |
1487 | dd 5,1,2, -5, 5,6,2, 5 ;down side |
1488 | dd 4,5,6, -3, 4,7,6, 3 ;far side |
1488 | dd 4,5,6, -3, 4,7,6, 3 ;far side |
1489 | 1489 | ||
1490 | ;model 5 tree (elka) |
1490 | ;model 5 tree (elka) |
1491 | tree: |
1491 | tree: |
1492 | dd 16 ;model points |
1492 | dd 16 ;model points |
1493 | dd 8*2 ;model triagels |
1493 | dd 8*2 ;model triagels |
1494 | ;mpoints: |
1494 | ;mpoints: |
1495 | dd -2,-2,0, -2,2,0, 2,2,0, 2,-2,0 |
1495 | dd -2,-2,0, -2,2,0, 2,2,0, 2,-2,0 |
1496 | dd -1,-1,-8, -1,1,-8, 1,1,-8, 1,-1,-8 |
1496 | dd -1,-1,-8, -1,1,-8, 1,1,-8, 1,-1,-8 |
1497 | dd -10,-10,-8, -10,10,-8, 10,10,-8, 10,-10,-8 |
1497 | dd -10,-10,-8, -10,10,-8, 10,10,-8, 10,-10,-8 |
1498 | dd -1,-1,-40, -1,1,-40, 1,1,-40, 1,-1,-40 |
1498 | dd -1,-1,-40, -1,1,-40, 1,1,-40, 1,-1,-40 |
1499 | ;pointslink: |
1499 | ;pointslink: |
1500 | dd 4,0,1, -16, 4,5,1, 16 ;left side |
1500 | dd 4,0,1, -16, 4,5,1, 16 ;left side |
1501 | dd 6,2,3, -16, 6,7,3, 16 ;right side |
1501 | dd 6,2,3, -16, 6,7,3, 16 ;right side |
1502 | dd 4,0,3, -16, 4,7,3, 16 ;up side |
1502 | dd 4,0,3, -16, 4,7,3, 16 ;up side |
1503 | dd 5,1,2, -16, 5,6,2, 16 ;down side |
1503 | dd 5,1,2, -16, 5,6,2, 16 ;down side |
1504 | 1504 | ||
1505 | dd 12,8,9, -14, 12,13,9, 14 ;left side |
1505 | dd 12,8,9, -14, 12,13,9, 14 ;left side |
1506 | dd 14,10,11, -14, 14,15,11, 14 ;right side |
1506 | dd 14,10,11, -14, 14,15,11, 14 ;right side |
1507 | dd 12,8,11, -14, 12,15,11, 14 ;up side |
1507 | dd 12,8,11, -14, 12,15,11, 14 ;up side |
1508 | dd 13,9,10, -14, 13,14,10, 14 ;down side |
1508 | dd 13,9,10, -14, 13,14,10, 14 ;down side |
1509 | 1509 | ||
1510 | ;model tank |
1510 | ;model tank |
1511 | tank: |
1511 | tank: |
1512 | dd 20 ;model points |
1512 | dd 20 ;model points |
1513 | dd 12+10 ;model triagels |
1513 | dd 12+10 ;model triagels |
1514 | ;mpoints: |
1514 | ;mpoints: |
1515 | dd -10,-20,-10, -10,20,-10, 10,20,-10, 10,-20,-10 |
1515 | dd -10,-20,-10, -10,20,-10, 10,20,-10, 10,-20,-10 |
1516 | dd -10,-10,-20, -10,10,-20, 10,10,-20, 10,-10,-20 |
1516 | dd -10,-10,-20, -10,10,-20, 10,10,-20, 10,-10,-20 |
1517 | dd -2,15,-15, 2,15,-15, -2,45,-15, 2,45,-15 |
1517 | dd -2,15,-15, 2,15,-15, -2,45,-15, 2,45,-15 |
1518 | 1518 | ||
1519 | dd -20,-20,0, -20,20,0, 20,20,0, 20,-20,0 |
1519 | dd -20,-20,0, -20,20,0, 20,20,0, 20,-20,0 |
1520 | dd -20,-30,-10, -20,30,-10, 20,30,-10, 20,-30,-10 |
1520 | dd -20,-30,-10, -20,30,-10, 20,30,-10, 20,-30,-10 |
1521 | 1521 | ||
1522 | ;pointslink: |
1522 | ;pointslink: |
1523 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1523 | ;dd 0,1,2, -3, 0,3,2, 3 ;far side |
1524 | dd 4,0,1, -10, 4,5,1, 10 ;left side |
1524 | dd 4,0,1, -10, 4,5,1, 10 ;left side |
1525 | dd 6,2,3, -10, 6,7,3, 10 ;right side |
1525 | dd 6,2,3, -10, 6,7,3, 10 ;right side |
1526 | dd 4,0,3, -10, 4,7,3, 10 ;up side |
1526 | dd 4,0,3, -10, 4,7,3, 10 ;up side |
1527 | dd 5,1,2, -10, 5,6,2, 10 ;down side |
1527 | dd 5,1,2, -10, 5,6,2, 10 ;down side |
1528 | dd 4,5,6, -11, 4,7,6, 11 ;near side |
1528 | dd 4,5,6, -11, 4,7,6, 11 ;near side |
1529 | dd 8,9,10,-10, 9,10,11,10 ;cannon 1 |
1529 | dd 8,9,10,-10, 9,10,11,10 ;cannon 1 |
1530 | 1530 | ||
1531 | dd 16,12,13, -11, 16,17,13, 11 ;left side |
1531 | dd 16,12,13, -11, 16,17,13, 11 ;left side |
1532 | dd 18,14,15, -11, 18,19,15, 11 ;right side |
1532 | dd 18,14,15, -11, 18,19,15, 11 ;right side |
1533 | dd 16,12,15, -11, 16,19,15, 11 ;up side |
1533 | dd 16,12,15, -11, 16,19,15, 11 ;up side |
1534 | dd 17,13,14, -11, 17,18,14, 11 ;down side |
1534 | dd 17,13,14, -11, 17,18,14, 11 ;down side |
1535 | dd 16,17,18, -11, 16,19,18, 11 ;near side |
1535 | dd 16,17,18, -11, 16,19,18, 11 ;near side |
1536 | 1536 | ||
1537 | ;Test model |
1537 | ;Test model |
1538 | gqfa: ;Good quality four angle |
1538 | gqfa: ;Good quality four angle |
1539 | dd 5 ;model points |
1539 | dd 5 ;model points |
1540 | dd 4 ;model triagels |
1540 | dd 4 ;model triagels |
1541 | ;mpoints: |
1541 | ;mpoints: |
1542 | ;dd -45,-145,0, -45,145,0, 45,45,0, 45,-45,0 |
1542 | ;dd -45,-145,0, -45,145,0, 45,45,0, 45,-45,0 |
1543 | dd -0,-105,0, -0,105,0, 45,45,0, 45,-45,0 |
1543 | dd -0,-105,0, -0,105,0, 45,45,0, 45,-45,0 |
1544 | dd 30,0,0 |
1544 | dd 30,0,0 |
1545 | ;pointslink: |
1545 | ;pointslink: |
1546 | dd 1,4,0, 50 ;left side |
1546 | dd 1,4,0, 50 ;left side |
1547 | dd 1,4,2, 51 ;right side |
1547 | dd 1,4,2, 51 ;right side |
1548 | dd 3,4,2, -50 ;up side |
1548 | dd 3,4,2, -50 ;up side |
1549 | dd 3,4,0, -51 ;down side |
1549 | dd 3,4,0, -51 ;down side |
1550 | 1550 | ||
1551 | skip_mdata: |
1551 | skip_mdata: |
1552 | 1552 | ||
1553 | ;*************** |
1553 | ;*************** |
1554 | ; Add new models |
1554 | ; Add new models |
1555 | ;*************** |
1555 | ;*************** |
1556 | ; jmp no_addmodel |
1556 | ; jmp no_addmodel |
1557 | 1557 | ||
1558 | random 20,eax |
1558 | random 20,eax |
1559 | sub eax,10 |
1559 | sub eax,10 |
1560 | imul eax,SECTOR_SIZE |
1560 | imul eax,SECTOR_SIZE |
1561 | add eax,SECTOR_SIZE/2 |
1561 | add eax,SECTOR_SIZE/2 |
1562 | mov [temp1],eax |
1562 | mov [temp1],eax |
1563 | random 20,eax |
1563 | random 20,eax |
1564 | sub eax,10 |
1564 | sub eax,10 |
1565 | imul eax,SECTOR_SIZE |
1565 | imul eax,SECTOR_SIZE |
1566 | add eax,SECTOR_SIZE/2 |
1566 | add eax,SECTOR_SIZE/2 |
1567 | mov [temp2],eax |
1567 | mov [temp2],eax |
1568 | 1568 | ||
1569 | mov eax,dword [model_mas] |
1569 | mov eax,dword [model_mas] |
1570 | cmp eax,40;00 |
1570 | cmp eax,40;00 |
1571 | jae no_addmodel |
1571 | jae no_addmodel |
1572 | imul eax,4*8; |
1572 | imul eax,4*8; |
1573 | add eax,4+model_mas |
1573 | add eax,4+model_mas |
1574 | inc dword [model_mas] |
1574 | inc dword [model_mas] |
1575 | mov ebx,[temp1] |
1575 | mov ebx,[temp1] |
1576 | mov [eax],ebx |
1576 | mov [eax],ebx |
1577 | mov ebx,[temp2] |
1577 | mov ebx,[temp2] |
1578 | mov [eax+4],ebx |
1578 | mov [eax+4],ebx |
1579 | mov [eax+8],dword -170 |
1579 | mov [eax+8],dword -170 |
1580 | mov ebx,0 |
1580 | mov ebx,0 |
1581 | mov [eax+12],ebx |
1581 | mov [eax+12],ebx |
1582 | mov [eax+16],ebx |
1582 | mov [eax+16],ebx |
1583 | mov [eax+20],ebx |
1583 | mov [eax+20],ebx |
1584 | mov ebx,tree;red_flag |
1584 | mov ebx,tree;red_flag |
1585 | mov [eax+28],ebx |
1585 | mov [eax+28],ebx |
1586 | jmp skip_mdata ;use for auto filling at start |
1586 | jmp skip_mdata ;use for auto filling at start |
1587 | no_addmodel: |
1587 | no_addmodel: |
1588 | 1588 | ||
1589 | ret |
1589 | ret |
1590 | 1590 | ||
1591 | 1591 | ||
1592 | UpdateAngles: |
1592 | UpdateAngles: |
1593 | ; Calculates new x,y,z angles |
1593 | ; Calculates new x,y,z angles |
1594 | ; to autorotate around |
1594 | ; to autorotate around |
1595 | 1595 | ||
1596 | mov eax,[Xangle] ; Load current angles |
1596 | mov eax,[Xangle] ; Load current angles |
1597 | mov ebx,[Yangle] |
1597 | mov ebx,[Yangle] |
1598 | mov ecx,[Zangle] |
1598 | mov ecx,[Zangle] |
1599 | 1599 | ||
1600 | add eax,[DeltaX] ; Add velocity |
1600 | add eax,[DeltaX] ; Add velocity |
1601 | and eax,011111111b ; Range from 0..255 |
1601 | and eax,011111111b ; Range from 0..255 |
1602 | mov [Xangle],eax ; Update X |
1602 | mov [Xangle],eax ; Update X |
1603 | add ebx,[DeltaY] ; Add velocity |
1603 | add ebx,[DeltaY] ; Add velocity |
1604 | and ebx,011111111b ; Range from 0..255 |
1604 | and ebx,011111111b ; Range from 0..255 |
1605 | mov [Yangle],ebx ; Update Y |
1605 | mov [Yangle],ebx ; Update Y |
1606 | add ecx,[DeltaZ] ; Add velocity |
1606 | add ecx,[DeltaZ] ; Add velocity |
1607 | and ecx,011111111b ; Range from 0..255 |
1607 | and ecx,011111111b ; Range from 0..255 |
1608 | mov [Zangle],ecx ; Update Z |
1608 | mov [Zangle],ecx ; Update Z |
1609 | ret |
1609 | ret |
1610 | 1610 | ||
1611 | GetSinCos: |
1611 | GetSinCos: |
1612 | ; Needed : bx=angle (0..255) |
1612 | ; Needed : bx=angle (0..255) |
1613 | ; Returns: ax=Sin bx=Cos |
1613 | ; Returns: ax=Sin bx=Cos |
1614 | push ebx ; Save angle (use as pointer) |
1614 | push ebx ; Save angle (use as pointer) |
1615 | shl ebx,2 ; Grab a word so bx=bx*2 |
1615 | shl ebx,2 ; Grab a word so bx=bx*2 |
1616 | mov eax,[SinCos + ebx] ; Get sine |
1616 | mov eax,[SinCos + ebx] ; Get sine |
1617 | pop ebx ; Restore pointer into bx |
1617 | pop ebx ; Restore pointer into bx |
1618 | push eax ; Save sine on stack |
1618 | push eax ; Save sine on stack |
1619 | add ebx,64 ; Add 64 to get cosine |
1619 | add ebx,64 ; Add 64 to get cosine |
1620 | and ebx,11111111b ; Range from 0..255 |
1620 | and ebx,11111111b ; Range from 0..255 |
1621 | shl ebx,2 ; *2 coz it's a word |
1621 | shl ebx,2 ; *2 coz it's a word |
1622 | mov eax,[SinCos + ebx] ; Get cosine |
1622 | mov eax,[SinCos + ebx] ; Get cosine |
1623 | mov ebx,eax ; Save it bx=Cos |
1623 | mov ebx,eax ; Save it bx=Cos |
1624 | pop eax ; Restore ax=Sin |
1624 | pop eax ; Restore ax=Sin |
1625 | ret |
1625 | ret |
1626 | 1626 | ||
1627 | ; Get sin & cos of x,y,z angle |
1627 | ; Get sin & cos of x,y,z angle |
1628 | SetRotation: |
1628 | SetRotation: |
1629 | mov ebx,[Xangle] ; Grab angle |
1629 | mov ebx,[Xangle] ; Grab angle |
1630 | call GetSinCos ; Get the sine&cosine |
1630 | call GetSinCos ; Get the sine&cosine |
1631 | mov [Xsin],eax ; Save sin |
1631 | mov [Xsin],eax ; Save sin |
1632 | mov [Xcos],ebx ; Save cos |
1632 | mov [Xcos],ebx ; Save cos |
1633 | 1633 | ||
1634 | mov ebx,[Yangle] |
1634 | mov ebx,[Yangle] |
1635 | call GetSinCos |
1635 | call GetSinCos |
1636 | mov [Ysin],eax |
1636 | mov [Ysin],eax |
1637 | mov [Ycos],ebx |
1637 | mov [Ycos],ebx |
1638 | 1638 | ||
1639 | mov ebx,[Zangle] |
1639 | mov ebx,[Zangle] |
1640 | call GetSinCos |
1640 | call GetSinCos |
1641 | mov [Zsin],eax |
1641 | mov [Zsin],eax |
1642 | mov [Zcos],ebx |
1642 | mov [Zcos],ebx |
1643 | ; for camera |
1643 | ; for camera |
1644 | mov ebx,[Xcamangle] |
1644 | mov ebx,[Xcamangle] |
1645 | call GetSinCos |
1645 | call GetSinCos |
1646 | mov [Xcamsin],eax |
1646 | mov [Xcamsin],eax |
1647 | mov [Xcamcos],ebx |
1647 | mov [Xcamcos],ebx |
1648 | 1648 | ||
1649 | mov ebx,[Ycamangle] |
1649 | mov ebx,[Ycamangle] |
1650 | call GetSinCos |
1650 | call GetSinCos |
1651 | mov [Ycamsin],eax |
1651 | mov [Ycamsin],eax |
1652 | mov [Ycamcos],ebx |
1652 | mov [Ycamcos],ebx |
1653 | 1653 | ||
1654 | mov ebx,[Zcamangle] |
1654 | mov ebx,[Zcamangle] |
1655 | call GetSinCos |
1655 | call GetSinCos |
1656 | mov [Zcamsin],eax |
1656 | mov [Zcamsin],eax |
1657 | mov [Zcamcos],ebx |
1657 | mov [Zcamcos],ebx |
1658 | 1658 | ||
1659 | ret |
1659 | ret |
1660 | 1660 | ||
1661 | TranslatePoint: ; Rotates the point around x,y,z |
1661 | TranslatePoint: ; Rotates the point around x,y,z |
1662 | ; Gets original x,y,z values |
1662 | ; Gets original x,y,z values |
1663 | ; This can be done elsewhere |
1663 | ; This can be done elsewhere |
1664 | 1664 | ||
1665 | mov esi,[X] |
1665 | mov esi,[X] |
1666 | mov edi,[Y] |
1666 | mov edi,[Y] |
1667 | mov ebx,[Zcamcos] |
1667 | mov ebx,[Zcamcos] |
1668 | mov ecx,[Zcamsin] |
1668 | mov ecx,[Zcamsin] |
1669 | call math |
1669 | call math |
1670 | mov [X],esi |
1670 | mov [X],esi |
1671 | mov [Y],edi |
1671 | mov [Y],edi |
1672 | 1672 | ||
1673 | mov esi,[Y] |
1673 | mov esi,[Y] |
1674 | mov edi,[Z] |
1674 | mov edi,[Z] |
1675 | mov ebx,[Xcamcos] |
1675 | mov ebx,[Xcamcos] |
1676 | mov ecx,[Xcamsin] |
1676 | mov ecx,[Xcamsin] |
1677 | call math |
1677 | call math |
1678 | mov [Y],esi |
1678 | mov [Y],esi |
1679 | mov [Z],edi |
1679 | mov [Z],edi |
1680 | 1680 | ||
1681 | mov esi,[X] |
1681 | mov esi,[X] |
1682 | mov edi,[Z] |
1682 | mov edi,[Z] |
1683 | mov ebx,[Ycamcos] |
1683 | mov ebx,[Ycamcos] |
1684 | mov ecx,[Ycamsin] |
1684 | mov ecx,[Ycamsin] |
1685 | call math |
1685 | call math |
1686 | mov [X],esi |
1686 | mov [X],esi |
1687 | mov [Z],edi |
1687 | mov [Z],edi |
1688 | 1688 | ||
1689 | mov esi,[Y] |
1689 | mov esi,[Y] |
1690 | mov ebx,[Xcos] |
1690 | mov ebx,[Xcos] |
1691 | mov edi,[Z] |
1691 | mov edi,[Z] |
1692 | mov ecx,[Xsin] |
1692 | mov ecx,[Xsin] |
1693 | call math |
1693 | call math |
1694 | mov [Y],esi |
1694 | mov [Y],esi |
1695 | mov [Z],edi |
1695 | mov [Z],edi |
1696 | mov esi,[X] |
1696 | mov esi,[X] |
1697 | mov ebx,[Ycos] |
1697 | mov ebx,[Ycos] |
1698 | mov ecx,[Ysin] |
1698 | mov ecx,[Ysin] |
1699 | call math |
1699 | call math |
1700 | mov [X],esi |
1700 | mov [X],esi |
1701 | mov [Z],edi |
1701 | mov [Z],edi |
1702 | mov ebx,[Zcos] |
1702 | mov ebx,[Zcos] |
1703 | mov edi,[Y] |
1703 | mov edi,[Y] |
1704 | mov ecx,[Zsin] |
1704 | mov ecx,[Zsin] |
1705 | call math |
1705 | call math |
1706 | 1706 | ||
1707 | ;************* |
1707 | ;************* |
1708 | ; ShowPoint |
1708 | ; ShowPoint |
1709 | ;************* |
1709 | ;************* |
1710 | 1710 | ||
1711 | ; Calculates screenposition and |
1711 | ; Calculates screenposition and |
1712 | ; plots the point on the screen |
1712 | ; plots the point on the screen |
1713 | mov eax,[Xoff] ; Xoff*X / Z+Zoff = screen x |
1713 | mov eax,[Xoff] ; Xoff*X / Z+Zoff = screen x |
1714 | mov ecx,esi |
1714 | mov ecx,esi |
1715 | imul ecx |
1715 | imul ecx |
1716 | 1716 | ||
1717 | mov ebx,[Z] |
1717 | mov ebx,[Z] |
1718 | add ebx,[Zoff] ; Distance |
1718 | add ebx,[Zoff] ; Distance |
1719 | 1719 | ||
1720 | cmp ebx,0 |
1720 | cmp ebx,0 |
1721 | je notout |
1721 | je notout |
1722 | idiv ebx |
1722 | idiv ebx |
1723 | add eax,[Mx] ; Center on screen |
1723 | add eax,[Mx] ; Center on screen |
1724 | mov ebp,eax ;ebp =Xp |
1724 | mov ebp,eax ;ebp =Xp |
1725 | 1725 | ||
1726 | mov eax,[Yoff] ; Yoff*Y / Z+Zoff = screen y |
1726 | mov eax,[Yoff] ; Yoff*Y / Z+Zoff = screen y |
1727 | mov ecx,edi |
1727 | mov ecx,edi |
1728 | imul ecx |
1728 | imul ecx |
1729 | 1729 | ||
1730 | cmp ebx,0 |
1730 | cmp ebx,0 |
1731 | je notout |
1731 | je notout |
1732 | idiv ebx ;eax =Yp |
1732 | idiv ebx ;eax =Yp |
1733 | add eax,[My] ; Center on screen |
1733 | add eax,[My] ; Center on screen |
1734 | 1734 | ||
1735 | notout: |
1735 | notout: |
1736 | ret |
1736 | ret |
1737 | 1737 | ||
1738 | math: |
1738 | math: |
1739 | mov eax,esi |
1739 | mov eax,esi |
1740 | imul ebx ; ax = X * Cos(zang) |
1740 | imul ebx ; ax = X * Cos(zang) |
1741 | mov ebp,eax |
1741 | mov ebp,eax |
1742 | mov eax,edi |
1742 | mov eax,edi |
1743 | imul ecx ; ax = Y * Sin(zang) |
1743 | imul ecx ; ax = Y * Sin(zang) |
1744 | sub ebp,eax ; bp = X * Cos(zang) - Y * Sin(zang) |
1744 | sub ebp,eax ; bp = X * Cos(zang) - Y * Sin(zang) |
1745 | sar ebp,8 ; bp = X * Cos(zang) - Y * Sin(zang) / 256 |
1745 | sar ebp,8 ; bp = X * Cos(zang) - Y * Sin(zang) / 256 |
1746 | 1746 | ||
1747 | mov eax,esi |
1747 | mov eax,esi |
1748 | mov esi,ebp |
1748 | mov esi,ebp |
1749 | imul ecx ; ax = X * Sin(zang) |
1749 | imul ecx ; ax = X * Sin(zang) |
1750 | mov ebp,eax |
1750 | mov ebp,eax |
1751 | mov eax,edi |
1751 | mov eax,edi |
1752 | imul ebx ; ax = Y * Cos(zang) |
1752 | imul ebx ; ax = Y * Cos(zang) |
1753 | add ebp,eax ; bp = X * SIN(zang) + Y * COS(zang) |
1753 | add ebp,eax ; bp = X * SIN(zang) + Y * COS(zang) |
1754 | sar ebp,8 ; bp = X * SIN(zang) + Y * COS(zang) / 256 |
1754 | sar ebp,8 ; bp = X * SIN(zang) + Y * COS(zang) / 256 |
1755 | mov edi,ebp |
1755 | mov edi,ebp |
1756 | ret |
1756 | ret |
1757 | 1757 | ||
1758 | SinCos: |
1758 | SinCos: |
1759 | dd 0,6,13,19,25,31,38,44,50,56 |
1759 | dd 0,6,13,19,25,31,38,44,50,56 |
1760 | dd 62,68,74,80,86,92,98,104,109,115 |
1760 | dd 62,68,74,80,86,92,98,104,109,115 |
1761 | dd 121,126,132,137,142,147,152,157,162,167 |
1761 | dd 121,126,132,137,142,147,152,157,162,167 |
1762 | dd 172,177,181,185,190,194,198,202,206,209 |
1762 | dd 172,177,181,185,190,194,198,202,206,209 |
1763 | dd 213,216,220,223,226,229,231,234,237,239 |
1763 | dd 213,216,220,223,226,229,231,234,237,239 |
1764 | dd 241,243,245,247,248,250,251,252,253,254 |
1764 | dd 241,243,245,247,248,250,251,252,253,254 |
1765 | dd 255,255,256,256,256,256,256,255,255,254 |
1765 | dd 255,255,256,256,256,256,256,255,255,254 |
1766 | dd 253,252,251,250,248,247,245,243,241,239 |
1766 | dd 253,252,251,250,248,247,245,243,241,239 |
1767 | dd 237,234,231,229,226,223,220,216,213,209 |
1767 | dd 237,234,231,229,226,223,220,216,213,209 |
1768 | dd 206,202,198,194,190,185,181,177,172,167 |
1768 | dd 206,202,198,194,190,185,181,177,172,167 |
1769 | dd 162,157,152,147,142,137,132,126,121,115 |
1769 | dd 162,157,152,147,142,137,132,126,121,115 |
1770 | dd 109,104,98,92,86,80,74,68,62,56 |
1770 | dd 109,104,98,92,86,80,74,68,62,56 |
1771 | dd 50,44,38,31,25,19,13,6,0,-6 |
1771 | dd 50,44,38,31,25,19,13,6,0,-6 |
1772 | dd -13,-19,-25,-31,-38,-44,-50,-56,-62,-68 |
1772 | dd -13,-19,-25,-31,-38,-44,-50,-56,-62,-68 |
1773 | dd -74,-80,-86,-92,-98,-104,-109,-115,-121,-126 |
1773 | dd -74,-80,-86,-92,-98,-104,-109,-115,-121,-126 |
1774 | dd -132,-137,-142,-147,-152,-157,-162,-167,-172,-177 |
1774 | dd -132,-137,-142,-147,-152,-157,-162,-167,-172,-177 |
1775 | dd -181,-185,-190,-194,-198,-202,-206,-209,-213,-216 |
1775 | dd -181,-185,-190,-194,-198,-202,-206,-209,-213,-216 |
1776 | dd -220,-223,-226,-229,-231,-234,-237,-239,-241,-243 |
1776 | dd -220,-223,-226,-229,-231,-234,-237,-239,-241,-243 |
1777 | dd -245,-247,-248,-250,-251,-252,-253,-254,-255,-255 |
1777 | dd -245,-247,-248,-250,-251,-252,-253,-254,-255,-255 |
1778 | dd -256,-256,-256,-256,-256,-255,-255,-254,-253,-252 |
1778 | dd -256,-256,-256,-256,-256,-255,-255,-254,-253,-252 |
1779 | dd -251,-250,-248,-247,-245,-243,-241,-239,-237,-234 |
1779 | dd -251,-250,-248,-247,-245,-243,-241,-239,-237,-234 |
1780 | dd -231,-229,-226,-223,-220,-216,-213,-209,-206,-202 |
1780 | dd -231,-229,-226,-223,-220,-216,-213,-209,-206,-202 |
1781 | dd -198,-194,-190,-185,-181,-177,-172,-167,-162,-157 |
1781 | dd -198,-194,-190,-185,-181,-177,-172,-167,-162,-157 |
1782 | dd -152,-147,-142,-137,-132,-126,-121,-115,-109,-104 |
1782 | dd -152,-147,-142,-137,-132,-126,-121,-115,-109,-104 |
1783 | dd -98,-92,-86,-80,-74,-68,-62,-56,-50,-44 |
1783 | dd -98,-92,-86,-80,-74,-68,-62,-56,-50,-44 |
1784 | dd -38,-31,-25,-19,-13,-6 |
1784 | dd -38,-31,-25,-19,-13,-6 |
1785 | 1785 | ||
1786 | mipzoom dd 0 |
1786 | mipzoom dd 0 |
1787 | mipmapwork dd 0 |
1787 | mipmapwork dd 0 |
1788 | temp1 dd 0 |
1788 | temp1 dd 0 |
1789 | temp2 dd 0 |
1789 | temp2 dd 0 |
1790 | 1790 | ||
1791 | ; 4.24.2005 Textured triangle algorythm |
1791 | ; 4.24.2005 Textured triangle algorythm |
1792 | ; created by Pavlushin Evgeni waptap[at]mail.ru |
1792 | ; created by Pavlushin Evgeni waptap[at]mail.ru |
1793 | ; on base tex3 from Mikolaj Felix mfelix@polbox.com |
1793 | ; on base tex3 from Mikolaj Felix mfelix@polbox.com |
1794 | 1794 | ||
1795 | align 512 |
1795 | align 512 |
1796 | @@tx1 dd 0 ;equ [bp+4] |
1796 | @@tx1 dd 0 ;equ [bp+4] |
1797 | @@ty1 dd 0 ;equ [bp+6] |
1797 | @@ty1 dd 0 ;equ [bp+6] |
1798 | align 512 |
1798 | align 512 |
1799 | @@tx2 dd 0 ;equ [bp+8] |
1799 | @@tx2 dd 0 ;equ [bp+8] |
1800 | @@ty2 dd 0 ;equ [bp+10] |
1800 | @@ty2 dd 0 ;equ [bp+10] |
1801 | align 512 |
1801 | align 512 |
1802 | @@tx3 dd 0 ;equ [bp+12] |
1802 | @@tx3 dd 0 ;equ [bp+12] |
1803 | @@ty3 dd 0 ;equ [bp+14] |
1803 | @@ty3 dd 0 ;equ [bp+14] |
1804 | 1804 | ||
1805 | @@tz1 dd 0 |
1805 | @@tz1 dd 0 |
1806 | @@tz2 dd 0 |
1806 | @@tz2 dd 0 |
1807 | @@tz3 dd 0 |
1807 | @@tz3 dd 0 |
1808 | 1808 | ||
1809 | @@z_dy12 dd 0 |
1809 | @@z_dy12 dd 0 |
1810 | @@z_dy13 dd 0 |
1810 | @@z_dy13 dd 0 |
1811 | @@z_dy23 dd 0 |
1811 | @@z_dy23 dd 0 |
1812 | 1812 | ||
1813 | @@tex_off dd 0 ;equ [bp+16] |
1813 | @@tex_off dd 0 ;equ [bp+16] |
1814 | @@tex_x1 dd 0 ;equ [bp+18] |
1814 | @@tex_x1 dd 0 ;equ [bp+18] |
1815 | @@tex_y1 dd 0 ;equ [bp+20] |
1815 | @@tex_y1 dd 0 ;equ [bp+20] |
1816 | @@tex_x2 dd 0 ;equ [bp+22] |
1816 | @@tex_x2 dd 0 ;equ [bp+22] |
1817 | @@tex_y2 dd 0 ;equ [bp+24] |
1817 | @@tex_y2 dd 0 ;equ [bp+24] |
1818 | @@tex_x3 dd 0 ;equ [bp+26] |
1818 | @@tex_x3 dd 0 ;equ [bp+26] |
1819 | @@tex_y3 dd 0 ;equ [bp+28] |
1819 | @@tex_y3 dd 0 ;equ [bp+28] |
1820 | 1820 | ||
1821 | @@dx12 dd 0 ;equ [bp-2] |
1821 | @@dx12 dd 0 ;equ [bp-2] |
1822 | @@dx13 dd 0 ;equ [bp-4] |
1822 | @@dx13 dd 0 ;equ [bp-4] |
1823 | @@dx23 dd 0 ;equ [bp-6] |
1823 | @@dx23 dd 0 ;equ [bp-6] |
1824 | 1824 | ||
1825 | @@tex_dx12 dd 0 ;equ [bp-8] |
1825 | @@tex_dx12 dd 0 ;equ [bp-8] |
1826 | @@tex_dy12 dd 0 ;equ [bp-10] |
1826 | @@tex_dy12 dd 0 ;equ [bp-10] |
1827 | @@tex_dx13 dd 0 ;equ [bp-12] |
1827 | @@tex_dx13 dd 0 ;equ [bp-12] |
1828 | @@tex_dy13 dd 0 ;equ [bp-14] |
1828 | @@tex_dy13 dd 0 ;equ [bp-14] |
1829 | @@tex_dx23 dd 0 ;equ [bp-16] |
1829 | @@tex_dx23 dd 0 ;equ [bp-16] |
1830 | @@tex_dy23 dd 0 ;equ [bp-18] |
1830 | @@tex_dy23 dd 0 ;equ [bp-18] |
1831 | 1831 | ||
1832 | @@scan_x1 dd 0 |
1832 | @@scan_x1 dd 0 |
1833 | @@scan_y1 dd 0 |
1833 | @@scan_y1 dd 0 |
1834 | @@scan_x2 dd 0 |
1834 | @@scan_x2 dd 0 |
1835 | @@scan_y2 dd 0 |
1835 | @@scan_y2 dd 0 |
1836 | 1836 | ||
1837 | @@scan_z1 dd 0 |
1837 | @@scan_z1 dd 0 |
1838 | @@scan_z2 dd 0 |
1838 | @@scan_z2 dd 0 |
1839 | 1839 | ||
1840 | SHIFT=16 |
1840 | SHIFT=16 |
1841 | 1841 | ||
1842 | textured_triangle: |
1842 | textured_triangle: |
1843 | 1843 | ||
1844 | mov eax,[@@ty1] |
1844 | mov eax,[@@ty1] |
1845 | cmp eax,[@@ty3] |
1845 | cmp eax,[@@ty3] |
1846 | jle tt_check1 |
1846 | jle tt_check1 |
1847 | 1847 | ||
1848 | xchg eax,[@@ty3] |
1848 | xchg eax,[@@ty3] |
1849 | mov [@@ty1],eax |
1849 | mov [@@ty1],eax |
1850 | 1850 | ||
1851 | mov eax,[@@tx1] |
1851 | mov eax,[@@tx1] |
1852 | xchg eax,[@@tx3] |
1852 | xchg eax,[@@tx3] |
1853 | mov [@@tx1],eax |
1853 | mov [@@tx1],eax |
1854 | 1854 | ||
1855 | mov eax,[@@tz1] |
1855 | mov eax,[@@tz1] |
1856 | xchg eax,[@@tz3] |
1856 | xchg eax,[@@tz3] |
1857 | mov [@@tz1],eax |
1857 | mov [@@tz1],eax |
1858 | 1858 | ||
1859 | mov eax,[@@tex_y1] |
1859 | mov eax,[@@tex_y1] |
1860 | xchg eax,[@@tex_y3] |
1860 | xchg eax,[@@tex_y3] |
1861 | mov [@@tex_y1],eax |
1861 | mov [@@tex_y1],eax |
1862 | 1862 | ||
1863 | mov eax,[@@tex_x1] |
1863 | mov eax,[@@tex_x1] |
1864 | xchg eax,[@@tex_x3] |
1864 | xchg eax,[@@tex_x3] |
1865 | mov [@@tex_x1],eax |
1865 | mov [@@tex_x1],eax |
1866 | tt_check1: |
1866 | tt_check1: |
1867 | mov eax,[@@ty2] |
1867 | mov eax,[@@ty2] |
1868 | cmp eax,[@@ty3] |
1868 | cmp eax,[@@ty3] |
1869 | jle tt_check2 |
1869 | jle tt_check2 |
1870 | 1870 | ||
1871 | xchg eax,[@@ty3] |
1871 | xchg eax,[@@ty3] |
1872 | mov [@@ty2],eax |
1872 | mov [@@ty2],eax |
1873 | 1873 | ||
1874 | mov eax,[@@tx2] |
1874 | mov eax,[@@tx2] |
1875 | xchg eax,[@@tx3] |
1875 | xchg eax,[@@tx3] |
1876 | mov [@@tx2],eax |
1876 | mov [@@tx2],eax |
1877 | 1877 | ||
1878 | mov eax,[@@tz2] |
1878 | mov eax,[@@tz2] |
1879 | xchg eax,[@@tz3] |
1879 | xchg eax,[@@tz3] |
1880 | mov [@@tz2],eax |
1880 | mov [@@tz2],eax |
1881 | 1881 | ||
1882 | mov eax,[@@tex_y2] |
1882 | mov eax,[@@tex_y2] |
1883 | xchg eax,[@@tex_y3] |
1883 | xchg eax,[@@tex_y3] |
1884 | mov [@@tex_y2],eax |
1884 | mov [@@tex_y2],eax |
1885 | 1885 | ||
1886 | mov eax,[@@tex_x2] |
1886 | mov eax,[@@tex_x2] |
1887 | xchg eax,[@@tex_x3] |
1887 | xchg eax,[@@tex_x3] |
1888 | mov [@@tex_x2],eax |
1888 | mov [@@tex_x2],eax |
1889 | tt_check2: |
1889 | tt_check2: |
1890 | mov eax,[@@ty1] |
1890 | mov eax,[@@ty1] |
1891 | cmp eax,[@@ty2] |
1891 | cmp eax,[@@ty2] |
1892 | jle tt_check3 |
1892 | jle tt_check3 |
1893 | 1893 | ||
1894 | xchg eax,[@@ty2] |
1894 | xchg eax,[@@ty2] |
1895 | mov [@@ty1],eax |
1895 | mov [@@ty1],eax |
1896 | 1896 | ||
1897 | mov eax,[@@tx1] |
1897 | mov eax,[@@tx1] |
1898 | xchg eax,[@@tx2] |
1898 | xchg eax,[@@tx2] |
1899 | mov [@@tx1],eax |
1899 | mov [@@tx1],eax |
1900 | 1900 | ||
1901 | mov eax,[@@tz1] |
1901 | mov eax,[@@tz1] |
1902 | xchg eax,[@@tz2] |
1902 | xchg eax,[@@tz2] |
1903 | mov [@@tz1],eax |
1903 | mov [@@tz1],eax |
1904 | 1904 | ||
1905 | mov eax,[@@tex_y1] |
1905 | mov eax,[@@tex_y1] |
1906 | xchg eax,[@@tex_y2] |
1906 | xchg eax,[@@tex_y2] |
1907 | mov [@@tex_y1],eax |
1907 | mov [@@tex_y1],eax |
1908 | 1908 | ||
1909 | mov eax,[@@tex_x1] |
1909 | mov eax,[@@tex_x1] |
1910 | xchg eax,[@@tex_x2] |
1910 | xchg eax,[@@tex_x2] |
1911 | mov [@@tex_x1],eax |
1911 | mov [@@tex_x1],eax |
1912 | tt_check3: |
1912 | tt_check3: |
1913 | 1913 | ||
1914 | mov ebx,[@@ty2] |
1914 | mov ebx,[@@ty2] |
1915 | sub ebx,[@@ty1] |
1915 | sub ebx,[@@ty1] |
1916 | jnz tt_dx12_make |
1916 | jnz tt_dx12_make |
1917 | 1917 | ||
1918 | mov [@@dx12],0 |
1918 | mov [@@dx12],0 |
1919 | mov [@@tex_dx12],0 |
1919 | mov [@@tex_dx12],0 |
1920 | mov [@@tex_dy12],0 |
1920 | mov [@@tex_dy12],0 |
1921 | mov [@@z_dy12],0 |
1921 | mov [@@z_dy12],0 |
1922 | jmp tt_dx12_done |
1922 | jmp tt_dx12_done |
1923 | tt_dx12_make: |
1923 | tt_dx12_make: |
1924 | mov eax,[@@tx2] |
1924 | mov eax,[@@tx2] |
1925 | sub eax,[@@tx1] |
1925 | sub eax,[@@tx1] |
1926 | shl eax,SHIFT |
1926 | shl eax,SHIFT |
1927 | cdq |
1927 | cdq |
1928 | idiv ebx |
1928 | idiv ebx |
1929 | mov [@@dx12],eax ; dx12 = (x2-x1)/(y2-y1) |
1929 | mov [@@dx12],eax ; dx12 = (x2-x1)/(y2-y1) |
1930 | 1930 | ||
1931 | mov eax,[@@tex_x2] |
1931 | mov eax,[@@tex_x2] |
1932 | sub eax,[@@tex_x1] |
1932 | sub eax,[@@tex_x1] |
1933 | cdq |
1933 | cdq |
1934 | idiv ebx |
1934 | idiv ebx |
1935 | mov [@@tex_dx12],eax ; tex_dx12 = (tex_x2-tex_x1)/(y2-y1) |
1935 | mov [@@tex_dx12],eax ; tex_dx12 = (tex_x2-tex_x1)/(y2-y1) |
1936 | 1936 | ||
1937 | mov eax,[@@tex_y2] |
1937 | mov eax,[@@tex_y2] |
1938 | sub eax,[@@tex_y1] |
1938 | sub eax,[@@tex_y1] |
1939 | cdq |
1939 | cdq |
1940 | idiv ebx |
1940 | idiv ebx |
1941 | mov [@@tex_dy12],eax ; tex_dy12 = (tex_y2-tex_y1)/(y2-y1) |
1941 | mov [@@tex_dy12],eax ; tex_dy12 = (tex_y2-tex_y1)/(y2-y1) |
1942 | 1942 | ||
1943 | mov eax,[@@tz2] |
1943 | mov eax,[@@tz2] |
1944 | sub eax,[@@tz1] |
1944 | sub eax,[@@tz1] |
1945 | shl eax,SHIFT |
1945 | shl eax,SHIFT |
1946 | cdq |
1946 | cdq |
1947 | idiv ebx |
1947 | idiv ebx |
1948 | mov [@@z_dy12],eax |
1948 | mov [@@z_dy12],eax |
1949 | 1949 | ||
1950 | tt_dx12_done: |
1950 | tt_dx12_done: |
1951 | 1951 | ||
1952 | mov ebx,[@@ty3] |
1952 | mov ebx,[@@ty3] |
1953 | sub ebx,[@@ty1] |
1953 | sub ebx,[@@ty1] |
1954 | jnz tt_dx13_make |
1954 | jnz tt_dx13_make |
1955 | 1955 | ||
1956 | mov [@@dx13],0 |
1956 | mov [@@dx13],0 |
1957 | mov [@@tex_dx13],0 |
1957 | mov [@@tex_dx13],0 |
1958 | mov [@@tex_dy13],0 |
1958 | mov [@@tex_dy13],0 |
1959 | mov [@@z_dy13],0 |
1959 | mov [@@z_dy13],0 |
1960 | jmp tt_dx13_done |
1960 | jmp tt_dx13_done |
1961 | tt_dx13_make: |
1961 | tt_dx13_make: |
1962 | mov eax,[@@tx3] |
1962 | mov eax,[@@tx3] |
1963 | sub eax,[@@tx1] |
1963 | sub eax,[@@tx1] |
1964 | shl eax,SHIFT |
1964 | shl eax,SHIFT |
1965 | cdq |
1965 | cdq |
1966 | idiv ebx |
1966 | idiv ebx |
1967 | mov [@@dx13],eax ; dx13 = (x3-x1)/(y3-y1) |
1967 | mov [@@dx13],eax ; dx13 = (x3-x1)/(y3-y1) |
1968 | 1968 | ||
1969 | mov eax,[@@tex_x3] |
1969 | mov eax,[@@tex_x3] |
1970 | sub eax,[@@tex_x1] |
1970 | sub eax,[@@tex_x1] |
1971 | cdq |
1971 | cdq |
1972 | idiv ebx |
1972 | idiv ebx |
1973 | mov [@@tex_dx13],eax ; tex_dx13 = (tex_x3-tex_x1)/(y3-y1) |
1973 | mov [@@tex_dx13],eax ; tex_dx13 = (tex_x3-tex_x1)/(y3-y1) |
1974 | 1974 | ||
1975 | mov eax,[@@tex_y3] |
1975 | mov eax,[@@tex_y3] |
1976 | sub eax,[@@tex_y1] |
1976 | sub eax,[@@tex_y1] |
1977 | cdq |
1977 | cdq |
1978 | idiv ebx |
1978 | idiv ebx |
1979 | mov [@@tex_dy13],eax ; tex_dy13 = (tex_y3-tex_x1)/(y3-y1) |
1979 | mov [@@tex_dy13],eax ; tex_dy13 = (tex_y3-tex_x1)/(y3-y1) |
1980 | 1980 | ||
1981 | mov eax,[@@tz3] |
1981 | mov eax,[@@tz3] |
1982 | sub eax,[@@tz1] |
1982 | sub eax,[@@tz1] |
1983 | shl eax,SHIFT |
1983 | shl eax,SHIFT |
1984 | cdq |
1984 | cdq |
1985 | idiv ebx |
1985 | idiv ebx |
1986 | mov [@@z_dy13],eax |
1986 | mov [@@z_dy13],eax |
1987 | tt_dx13_done: |
1987 | tt_dx13_done: |
1988 | 1988 | ||
1989 | mov ebx,[@@ty3] |
1989 | mov ebx,[@@ty3] |
1990 | sub ebx,[@@ty2] |
1990 | sub ebx,[@@ty2] |
1991 | jnz tt_dx23_make |
1991 | jnz tt_dx23_make |
1992 | 1992 | ||
1993 | mov [@@dx23],0 |
1993 | mov [@@dx23],0 |
1994 | mov [@@tex_dx23],0 |
1994 | mov [@@tex_dx23],0 |
1995 | mov [@@tex_dy23],0 |
1995 | mov [@@tex_dy23],0 |
1996 | mov [@@z_dy23],0 |
1996 | mov [@@z_dy23],0 |
1997 | jmp tt_dx23_done |
1997 | jmp tt_dx23_done |
1998 | tt_dx23_make: |
1998 | tt_dx23_make: |
1999 | mov eax,[@@tx3] |
1999 | mov eax,[@@tx3] |
2000 | sub eax,[@@tx2] |
2000 | sub eax,[@@tx2] |
2001 | shl eax,SHIFT |
2001 | shl eax,SHIFT |
2002 | cdq |
2002 | cdq |
2003 | idiv ebx |
2003 | idiv ebx |
2004 | mov [@@dx23],eax ; dx23 = (x3-x2)/(y3-y2) |
2004 | mov [@@dx23],eax ; dx23 = (x3-x2)/(y3-y2) |
2005 | 2005 | ||
2006 | mov eax,[@@tex_x3] |
2006 | mov eax,[@@tex_x3] |
2007 | sub eax,[@@tex_x2] |
2007 | sub eax,[@@tex_x2] |
2008 | cdq |
2008 | cdq |
2009 | idiv ebx |
2009 | idiv ebx |
2010 | mov [@@tex_dx23],eax ; tex_dx23 = (tex_x3-tex_x2)/(y3-y2) |
2010 | mov [@@tex_dx23],eax ; tex_dx23 = (tex_x3-tex_x2)/(y3-y2) |
2011 | 2011 | ||
2012 | mov eax,[@@tex_y3] |
2012 | mov eax,[@@tex_y3] |
2013 | sub eax,[@@tex_y2] |
2013 | sub eax,[@@tex_y2] |
2014 | cdq |
2014 | cdq |
2015 | idiv ebx |
2015 | idiv ebx |
2016 | mov [@@tex_dy23],eax ; tex_dy23 = (tex_y3-tex_y2)/(y3-y2) |
2016 | mov [@@tex_dy23],eax ; tex_dy23 = (tex_y3-tex_y2)/(y3-y2) |
2017 | 2017 | ||
2018 | mov eax,[@@tz3] |
2018 | mov eax,[@@tz3] |
2019 | sub eax,[@@tz2] |
2019 | sub eax,[@@tz2] |
2020 | shl eax,SHIFT |
2020 | shl eax,SHIFT |
2021 | cdq |
2021 | cdq |
2022 | idiv ebx |
2022 | idiv ebx |
2023 | mov [@@z_dy23],eax |
2023 | mov [@@z_dy23],eax |
2024 | tt_dx23_done: |
2024 | tt_dx23_done: |
2025 | 2025 | ||
2026 | 2026 | ||
2027 | mov eax,[@@tx1] |
2027 | mov eax,[@@tx1] |
2028 | shl eax,SHIFT |
2028 | shl eax,SHIFT |
2029 | mov ebx,eax |
2029 | mov ebx,eax |
2030 | mov ecx,[@@ty1] |
2030 | mov ecx,[@@ty1] |
2031 | 2031 | ||
2032 | mov edx,[@@tz1] |
2032 | mov edx,[@@tz1] |
2033 | shl edx,SHIFT |
2033 | shl edx,SHIFT |
2034 | mov [@@scan_z1],edx |
2034 | mov [@@scan_z1],edx |
2035 | mov [@@scan_z2],edx |
2035 | mov [@@scan_z2],edx |
2036 | 2036 | ||
2037 | mov edx,[@@tex_x1] |
2037 | mov edx,[@@tex_x1] |
2038 | mov [@@scan_x1],edx |
2038 | mov [@@scan_x1],edx |
2039 | mov [@@scan_x2],edx |
2039 | mov [@@scan_x2],edx |
2040 | mov edx,[@@tex_y1] |
2040 | mov edx,[@@tex_y1] |
2041 | mov [@@scan_y1],edx |
2041 | mov [@@scan_y1],edx |
2042 | mov [@@scan_y2],edx |
2042 | mov [@@scan_y2],edx |
2043 | 2043 | ||
2044 | ; **************** |
2044 | ; **************** |
2045 | mov edx,[@@ty1] ;skip equals |
2045 | mov edx,[@@ty1] ;skip equals |
2046 | cmp [@@ty2],edx |
2046 | cmp [@@ty2],edx |
2047 | je tt_loop1_end |
2047 | je tt_loop1_end |
2048 | 2048 | ||
2049 | mov ebp,[@@ty1] |
2049 | mov ebp,[@@ty1] |
2050 | cmp ebp,0 |
2050 | cmp ebp,0 |
2051 | jg no_up_clip |
2051 | jg no_up_clip |
2052 | neg ebp |
2052 | neg ebp |
2053 | mov edx,[@@ty2] |
2053 | mov edx,[@@ty2] |
2054 | cmp edx,0 |
2054 | cmp edx,0 |
2055 | jg no_sbx |
2055 | jg no_sbx |
2056 | neg edx |
2056 | neg edx |
2057 | sub ebp,edx |
2057 | sub ebp,edx |
2058 | no_sbx: |
2058 | no_sbx: |
2059 | 2059 | ||
2060 | mov edx,[@@tex_dx13] |
2060 | mov edx,[@@tex_dx13] |
2061 | imul edx,ebp |
2061 | imul edx,ebp |
2062 | add [@@scan_x1],edx |
2062 | add [@@scan_x1],edx |
2063 | mov edx,[@@tex_dx12] |
2063 | mov edx,[@@tex_dx12] |
2064 | imul edx,ebp |
2064 | imul edx,ebp |
2065 | add [@@scan_x2],edx |
2065 | add [@@scan_x2],edx |
2066 | mov edx,[@@tex_dy13] |
2066 | mov edx,[@@tex_dy13] |
2067 | imul edx,ebp |
2067 | imul edx,ebp |
2068 | add [@@scan_y1],edx |
2068 | add [@@scan_y1],edx |
2069 | mov edx,[@@tex_dy12] |
2069 | mov edx,[@@tex_dy12] |
2070 | imul edx,ebp |
2070 | imul edx,ebp |
2071 | add [@@scan_y2],edx |
2071 | add [@@scan_y2],edx |
2072 | 2072 | ||
2073 | mov edx,[@@z_dy13] |
2073 | mov edx,[@@z_dy13] |
2074 | imul edx,ebp |
2074 | imul edx,ebp |
2075 | add [@@scan_z1],edx |
2075 | add [@@scan_z1],edx |
2076 | mov edx,[@@z_dy12] |
2076 | mov edx,[@@z_dy12] |
2077 | imul edx,ebp |
2077 | imul edx,ebp |
2078 | add [@@scan_z2],edx |
2078 | add [@@scan_z2],edx |
2079 | 2079 | ||
2080 | mov edx,[@@dx13] |
2080 | mov edx,[@@dx13] |
2081 | imul edx,ebp |
2081 | imul edx,ebp |
2082 | add eax,edx |
2082 | add eax,edx |
2083 | mov edx,[@@dx12] |
2083 | mov edx,[@@dx12] |
2084 | imul edx,ebp |
2084 | imul edx,ebp |
2085 | add ebx,edx |
2085 | add ebx,edx |
2086 | add ecx,ebp |
2086 | add ecx,ebp |
2087 | no_up_clip: |
2087 | no_up_clip: |
2088 | 2088 | ||
2089 | cmp [@@ty2],0 |
2089 | cmp [@@ty2],0 |
2090 | jl tt_loop1_end |
2090 | jl tt_loop1_end |
2091 | 2091 | ||
2092 | tt_loop1: |
2092 | tt_loop1: |
2093 | cmp ecx,SCREEN_Y |
2093 | cmp ecx,SCREEN_Y |
2094 | jge tt_loop2_end |
2094 | jge tt_loop2_end |
2095 | 2095 | ||
2096 | pushad |
2096 | pushad |
2097 | mov edx,[@@scan_y2] |
2097 | mov edx,[@@scan_y2] |
2098 | mov [@@tex_ly2],edx ;push dx |
2098 | mov [@@tex_ly2],edx ;push dx |
2099 | mov edx,[@@scan_x2] |
2099 | mov edx,[@@scan_x2] |
2100 | mov [@@tex_lx2],edx ;push dx |
2100 | mov [@@tex_lx2],edx ;push dx |
2101 | mov edx,[@@scan_y1] |
2101 | mov edx,[@@scan_y1] |
2102 | mov [@@tex_ly1],edx ;push dx |
2102 | mov [@@tex_ly1],edx ;push dx |
2103 | mov edx,[@@scan_x1] |
2103 | mov edx,[@@scan_x1] |
2104 | mov [@@tex_lx1],edx ;push dx |
2104 | mov [@@tex_lx1],edx ;push dx |
2105 | 2105 | ||
2106 | mov edx,[@@scan_z1] |
2106 | mov edx,[@@scan_z1] |
2107 | mov [@@lz1],edx |
2107 | mov [@@lz1],edx |
2108 | mov edx,[@@scan_z2] |
2108 | mov edx,[@@scan_z2] |
2109 | mov [@@lz2],edx |
2109 | mov [@@lz2],edx |
2110 | 2110 | ||
2111 | mov [@@ly],ecx ;push cx |
2111 | mov [@@ly],ecx ;push cx |
2112 | mov edx,ebx |
2112 | mov edx,ebx |
2113 | sar edx,SHIFT |
2113 | sar edx,SHIFT |
2114 | mov [@@lx2],edx ;push dx |
2114 | mov [@@lx2],edx ;push dx |
2115 | mov edx,eax |
2115 | mov edx,eax |
2116 | sar edx,SHIFT |
2116 | sar edx,SHIFT |
2117 | mov [@@lx1],edx ; push dx |
2117 | mov [@@lx1],edx ; push dx |
2118 | call textured_horizontal_line |
2118 | call textured_horizontal_line |
2119 | popad |
2119 | popad |
2120 | 2120 | ||
2121 | mov edx,[@@tex_dx13] |
2121 | mov edx,[@@tex_dx13] |
2122 | add [@@scan_x1],edx |
2122 | add [@@scan_x1],edx |
2123 | mov edx,[@@tex_dx12] |
2123 | mov edx,[@@tex_dx12] |
2124 | add [@@scan_x2],edx |
2124 | add [@@scan_x2],edx |
2125 | mov edx,[@@tex_dy13] |
2125 | mov edx,[@@tex_dy13] |
2126 | add [@@scan_y1],edx |
2126 | add [@@scan_y1],edx |
2127 | mov edx,[@@tex_dy12] |
2127 | mov edx,[@@tex_dy12] |
2128 | add [@@scan_y2],edx |
2128 | add [@@scan_y2],edx |
2129 | 2129 | ||
2130 | mov edx,[@@z_dy13] |
2130 | mov edx,[@@z_dy13] |
2131 | add [@@scan_z1],edx |
2131 | add [@@scan_z1],edx |
2132 | mov edx,[@@z_dy12] |
2132 | mov edx,[@@z_dy12] |
2133 | add [@@scan_z2],edx |
2133 | add [@@scan_z2],edx |
2134 | 2134 | ||
2135 | add eax,[@@dx13] |
2135 | add eax,[@@dx13] |
2136 | add ebx,[@@dx12] |
2136 | add ebx,[@@dx12] |
2137 | inc ecx |
2137 | inc ecx |
2138 | cmp ecx,[@@ty2] |
2138 | cmp ecx,[@@ty2] |
2139 | jl tt_loop1 |
2139 | jl tt_loop1 |
2140 | 2140 | ||
2141 | tt_loop1_end: |
2141 | tt_loop1_end: |
2142 | 2142 | ||
2143 | mov ebx,[@@tx2] |
2143 | mov ebx,[@@tx2] |
2144 | shl ebx,SHIFT |
2144 | shl ebx,SHIFT |
2145 | mov ecx,[@@ty2] |
2145 | mov ecx,[@@ty2] |
2146 | 2146 | ||
2147 | mov edx,[@@tz2] |
2147 | mov edx,[@@tz2] |
2148 | shl edx,SHIFT |
2148 | shl edx,SHIFT |
2149 | mov [@@scan_z2],edx |
2149 | mov [@@scan_z2],edx |
2150 | 2150 | ||
2151 | mov edx,[@@tex_x2] |
2151 | mov edx,[@@tex_x2] |
2152 | mov [@@scan_x2],edx |
2152 | mov [@@scan_x2],edx |
2153 | mov edx,[@@tex_y2] |
2153 | mov edx,[@@tex_y2] |
2154 | mov [@@scan_y2],edx |
2154 | mov [@@scan_y2],edx |
2155 | 2155 | ||
2156 | mov ebp,[@@ty2] |
2156 | mov ebp,[@@ty2] |
2157 | cmp ebp,0 |
2157 | cmp ebp,0 |
2158 | jg no_down_clip |
2158 | jg no_down_clip |
2159 | neg ebp |
2159 | neg ebp |
2160 | dec ebp |
2160 | dec ebp |
2161 | 2161 | ||
2162 | mov edx,[@@tex_dx13] |
2162 | mov edx,[@@tex_dx13] |
2163 | imul edx,ebp |
2163 | imul edx,ebp |
2164 | add [@@scan_x1],edx |
2164 | add [@@scan_x1],edx |
2165 | mov edx,[@@tex_dx23] |
2165 | mov edx,[@@tex_dx23] |
2166 | imul edx,ebp |
2166 | imul edx,ebp |
2167 | add [@@scan_x2],edx |
2167 | add [@@scan_x2],edx |
2168 | mov edx,[@@tex_dy13] |
2168 | mov edx,[@@tex_dy13] |
2169 | imul edx,ebp |
2169 | imul edx,ebp |
2170 | add [@@scan_y1],edx |
2170 | add [@@scan_y1],edx |
2171 | mov edx,[@@tex_dy23] |
2171 | mov edx,[@@tex_dy23] |
2172 | imul edx,ebp |
2172 | imul edx,ebp |
2173 | add [@@scan_y2],edx |
2173 | add [@@scan_y2],edx |
2174 | 2174 | ||
2175 | mov edx,[@@z_dy13] |
2175 | mov edx,[@@z_dy13] |
2176 | imul edx,ebp |
2176 | imul edx,ebp |
2177 | add [@@scan_z1],edx |
2177 | add [@@scan_z1],edx |
2178 | mov edx,[@@z_dy23] |
2178 | mov edx,[@@z_dy23] |
2179 | imul edx,ebp |
2179 | imul edx,ebp |
2180 | add [@@scan_z2],edx |
2180 | add [@@scan_z2],edx |
2181 | 2181 | ||
2182 | mov edx,[@@dx13] |
2182 | mov edx,[@@dx13] |
2183 | imul edx,ebp |
2183 | imul edx,ebp |
2184 | add eax,edx |
2184 | add eax,edx |
2185 | mov edx,[@@dx23] |
2185 | mov edx,[@@dx23] |
2186 | imul edx,ebp |
2186 | imul edx,ebp |
2187 | add ebx,edx |
2187 | add ebx,edx |
2188 | add ecx,ebp |
2188 | add ecx,ebp |
2189 | no_down_clip: |
2189 | no_down_clip: |
2190 | 2190 | ||
2191 | tt_loop2: |
2191 | tt_loop2: |
2192 | cmp ecx,SCREEN_Y |
2192 | cmp ecx,SCREEN_Y |
2193 | jge tt_loop2_end |
2193 | jge tt_loop2_end |
2194 | 2194 | ||
2195 | pushad |
2195 | pushad |
2196 | mov edx,[@@scan_y2] |
2196 | mov edx,[@@scan_y2] |
2197 | mov [@@tex_ly2],edx ;push dx |
2197 | mov [@@tex_ly2],edx ;push dx |
2198 | mov edx,[@@scan_x2] |
2198 | mov edx,[@@scan_x2] |
2199 | mov [@@tex_lx2],edx ;push dx |
2199 | mov [@@tex_lx2],edx ;push dx |
2200 | mov edx,[@@scan_y1] |
2200 | mov edx,[@@scan_y1] |
2201 | mov [@@tex_ly1],edx ;push dx |
2201 | mov [@@tex_ly1],edx ;push dx |
2202 | mov edx,[@@scan_x1] |
2202 | mov edx,[@@scan_x1] |
2203 | mov [@@tex_lx1],edx ;push dx |
2203 | mov [@@tex_lx1],edx ;push dx |
2204 | 2204 | ||
2205 | mov edx,[@@scan_z1] |
2205 | mov edx,[@@scan_z1] |
2206 | mov [@@lz1],edx |
2206 | mov [@@lz1],edx |
2207 | mov edx,[@@scan_z2] |
2207 | mov edx,[@@scan_z2] |
2208 | mov [@@lz2],edx |
2208 | mov [@@lz2],edx |
2209 | 2209 | ||
2210 | mov [@@ly],ecx ;push cx |
2210 | mov [@@ly],ecx ;push cx |
2211 | mov edx,ebx |
2211 | mov edx,ebx |
2212 | sar edx,SHIFT |
2212 | sar edx,SHIFT |
2213 | mov [@@lx2],edx ;push dx |
2213 | mov [@@lx2],edx ;push dx |
2214 | mov edx,eax |
2214 | mov edx,eax |
2215 | sar edx,SHIFT |
2215 | sar edx,SHIFT |
2216 | mov [@@lx1],edx ; push dx |
2216 | mov [@@lx1],edx ; push dx |
2217 | call textured_horizontal_line |
2217 | call textured_horizontal_line |
2218 | popad |
2218 | popad |
2219 | 2219 | ||
2220 | mov edx,[@@tex_dx13] |
2220 | mov edx,[@@tex_dx13] |
2221 | add [@@scan_x1],edx |
2221 | add [@@scan_x1],edx |
2222 | mov edx,[@@tex_dx23] |
2222 | mov edx,[@@tex_dx23] |
2223 | add [@@scan_x2],edx |
2223 | add [@@scan_x2],edx |
2224 | mov edx,[@@tex_dy13] |
2224 | mov edx,[@@tex_dy13] |
2225 | add [@@scan_y1],edx |
2225 | add [@@scan_y1],edx |
2226 | mov edx,[@@tex_dy23] |
2226 | mov edx,[@@tex_dy23] |
2227 | add [@@scan_y2],edx |
2227 | add [@@scan_y2],edx |
2228 | 2228 | ||
2229 | mov edx,[@@z_dy13] |
2229 | mov edx,[@@z_dy13] |
2230 | add [@@scan_z1],edx |
2230 | add [@@scan_z1],edx |
2231 | mov edx,[@@z_dy23] |
2231 | mov edx,[@@z_dy23] |
2232 | add [@@scan_z2],edx |
2232 | add [@@scan_z2],edx |
2233 | 2233 | ||
2234 | add eax,[@@dx13] |
2234 | add eax,[@@dx13] |
2235 | add ebx,[@@dx23] |
2235 | add ebx,[@@dx23] |
2236 | inc ecx |
2236 | inc ecx |
2237 | cmp ecx,[@@ty3] |
2237 | cmp ecx,[@@ty3] |
2238 | jl tt_loop2 |
2238 | jl tt_loop2 |
2239 | 2239 | ||
2240 | tt_loop2_end: |
2240 | tt_loop2_end: |
2241 | ret |
2241 | ret |
2242 | 2242 | ||
2243 | align 512 |
2243 | align 512 |
2244 | @@lx1 dd 0 |
2244 | @@lx1 dd 0 |
2245 | align 512 |
2245 | align 512 |
2246 | @@lx2 dd 0 |
2246 | @@lx2 dd 0 |
2247 | align 512 |
2247 | align 512 |
2248 | @@ly dd 0 |
2248 | @@ly dd 0 |
2249 | 2249 | ||
2250 | @@lz1 dd 0 |
2250 | @@lz1 dd 0 |
2251 | @@lz2 dd 0 |
2251 | @@lz2 dd 0 |
2252 | @@z_dx dd 0 |
2252 | @@z_dx dd 0 |
2253 | 2253 | ||
2254 | align 512 |
2254 | align 512 |
2255 | @@tex_loff dd 0 ;equ [bp+10] |
2255 | @@tex_loff dd 0 ;equ [bp+10] |
2256 | @@tex_lx1 dd 0 ;equ [bp+12] |
2256 | @@tex_lx1 dd 0 ;equ [bp+12] |
2257 | @@tex_ly1 dd 0 ;equ [bp+14] |
2257 | @@tex_ly1 dd 0 ;equ [bp+14] |
2258 | @@tex_lx2 dd 0 ;equ [bp+16] |
2258 | @@tex_lx2 dd 0 ;equ [bp+16] |
2259 | @@tex_ly2 dd 0 ;equ [bp+18] |
2259 | @@tex_ly2 dd 0 ;equ [bp+18] |
2260 | 2260 | ||
2261 | align 512 |
2261 | align 512 |
2262 | @@tex_ldx dd 0 ;equ [bp-2] |
2262 | @@tex_ldx dd 0 ;equ [bp-2] |
2263 | @@tex_ldy dd 0 ;equ [bp-4] |
2263 | @@tex_ldy dd 0 ;equ [bp-4] |
2264 | 2264 | ||
2265 | align 1024 |
2265 | align 1024 |
2266 | textured_horizontal_line: |
2266 | textured_horizontal_line: |
2267 | 2267 | ||
2268 | mov eax,[@@lx1] |
2268 | mov eax,[@@lx1] |
2269 | cmp eax,[@@lx2] |
2269 | cmp eax,[@@lx2] |
2270 | je thl_quit |
2270 | je thl_quit |
2271 | jl thl_ok |
2271 | jl thl_ok |
2272 | 2272 | ||
2273 | xchg eax,[@@lx2] |
2273 | xchg eax,[@@lx2] |
2274 | mov [@@lx1],eax |
2274 | mov [@@lx1],eax |
2275 | 2275 | ||
2276 | mov eax,[@@lz1] |
2276 | mov eax,[@@lz1] |
2277 | xchg eax,[@@lz2] |
2277 | xchg eax,[@@lz2] |
2278 | mov [@@lz1],eax |
2278 | mov [@@lz1],eax |
2279 | 2279 | ||
2280 | mov eax,[@@tex_lx1] |
2280 | mov eax,[@@tex_lx1] |
2281 | xchg eax,[@@tex_lx2] |
2281 | xchg eax,[@@tex_lx2] |
2282 | mov [@@tex_lx1],eax |
2282 | mov [@@tex_lx1],eax |
2283 | 2283 | ||
2284 | mov eax,[@@tex_ly1] |
2284 | mov eax,[@@tex_ly1] |
2285 | xchg eax,[@@tex_ly2] |
2285 | xchg eax,[@@tex_ly2] |
2286 | mov [@@tex_ly1],eax |
2286 | mov [@@tex_ly1],eax |
2287 | 2287 | ||
2288 | thl_ok: |
2288 | thl_ok: |
2289 | 2289 | ||
2290 | cmp [@@lx2],0 |
2290 | cmp [@@lx2],0 |
2291 | jle thl_quit |
2291 | jle thl_quit |
2292 | mov eax,SCREEN_X |
2292 | mov eax,SCREEN_X |
2293 | cmp [@@lx1],eax |
2293 | cmp [@@lx1],eax |
2294 | jge thl_quit |
2294 | jge thl_quit |
2295 | 2295 | ||
2296 | mov ecx,[@@lx2] |
2296 | mov ecx,[@@lx2] |
2297 | sub ecx,[@@lx1] |
2297 | sub ecx,[@@lx1] |
2298 | 2298 | ||
2299 | ; Uneversal method |
2299 | ; Uneversal method |
2300 | mov edi,[@@ly] |
2300 | mov edi,[@@ly] |
2301 | mov eax,SCREEN_X ;di = ly*320+lx1 |
2301 | mov eax,SCREEN_X ;di = ly*320+lx1 |
2302 | imul edi |
2302 | imul edi |
2303 | add eax,[@@lx1] |
2303 | add eax,[@@lx1] |
2304 | imul eax,3 |
2304 | imul eax,3 |
2305 | mov edi,eax |
2305 | mov edi,eax |
2306 | add edi,I_END |
2306 | add edi,I_END |
2307 | 2307 | ||
2308 | ;Right side clipping |
2308 | ;Right side clipping |
2309 | mov eax,SCREEN_X |
2309 | mov eax,SCREEN_X |
2310 | cmp [@@lx2],eax |
2310 | cmp [@@lx2],eax |
2311 | jnge x1ok |
2311 | jnge x1ok |
2312 | mov edx,SCREEN_X |
2312 | mov edx,SCREEN_X |
2313 | dec edx |
2313 | dec edx |
2314 | sub edx,[@@lx1] |
2314 | sub edx,[@@lx1] |
2315 | cmp edx,0 |
2315 | cmp edx,0 |
2316 | jle thl_quit |
2316 | jle thl_quit |
2317 | mov ecx,edx |
2317 | mov ecx,edx |
2318 | x1ok: |
2318 | x1ok: |
2319 | 2319 | ||
2320 | ;Left side clipping |
2320 | ;Left side clipping |
2321 | cmp [@@lx1],0 |
2321 | cmp [@@lx1],0 |
2322 | jg x2ok |
2322 | jg x2ok |
2323 | mov ecx,[@@lx2] ;cmp lx2 screen x if above cut (for future) |
2323 | mov ecx,[@@lx2] ;cmp lx2 screen x if above cut (for future) |
2324 | mov edi,[@@ly] |
2324 | mov edi,[@@ly] |
2325 | mov eax,SCREEN_X |
2325 | mov eax,SCREEN_X |
2326 | imul edi,eax |
2326 | imul edi,eax |
2327 | imul edi,3 |
2327 | imul edi,3 |
2328 | add edi,I_END |
2328 | add edi,I_END |
2329 | x2ok: |
2329 | x2ok: |
2330 | 2330 | ||
2331 | mov ebx,[@@lx2] |
2331 | mov ebx,[@@lx2] |
2332 | sub ebx,[@@lx1] |
2332 | sub ebx,[@@lx1] |
2333 | 2333 | ||
2334 | mov eax,[@@tex_lx2] |
2334 | mov eax,[@@tex_lx2] |
2335 | sub eax,[@@tex_lx1] |
2335 | sub eax,[@@tex_lx1] |
2336 | cdq |
2336 | cdq |
2337 | idiv ebx |
2337 | idiv ebx |
2338 | mov [@@tex_ldx],eax ; tex_dx = (tex_x2-tex_x1)/(x2-x1) |
2338 | mov [@@tex_ldx],eax ; tex_dx = (tex_x2-tex_x1)/(x2-x1) |
2339 | 2339 | ||
2340 | mov eax,[@@tex_ly2] |
2340 | mov eax,[@@tex_ly2] |
2341 | sub eax,[@@tex_ly1] |
2341 | sub eax,[@@tex_ly1] |
2342 | cdq |
2342 | cdq |
2343 | idiv ebx |
2343 | idiv ebx |
2344 | mov [@@tex_ldy],eax ; tex_dy = (tex_y2-tex_y1)/(x2-x1) |
2344 | mov [@@tex_ldy],eax ; tex_dy = (tex_y2-tex_y1)/(x2-x1) |
2345 | 2345 | ||
2346 | mov eax,[@@lz2] |
2346 | mov eax,[@@lz2] |
2347 | sub eax,[@@lz1] |
2347 | sub eax,[@@lz1] |
2348 | cdq |
2348 | cdq |
2349 | idiv ebx |
2349 | idiv ebx |
2350 | mov [@@z_dx],eax ; tex_dx = (tex_x2-tex_x1)/(x2-x1) |
2350 | mov [@@z_dx],eax ; tex_dx = (tex_x2-tex_x1)/(x2-x1) |
2351 | 2351 | ||
2352 | ; Left clipping post correction |
2352 | ; Left clipping post correction |
2353 | cmp [@@lx1],0 |
2353 | cmp [@@lx1],0 |
2354 | jg no_lcpc |
2354 | jg no_lcpc |
2355 | mov eax,[@@lx1] |
2355 | mov eax,[@@lx1] |
2356 | neg eax |
2356 | neg eax |
2357 | mov ebp,[@@tex_ldx] |
2357 | mov ebp,[@@tex_ldx] |
2358 | imul ebp,eax |
2358 | imul ebp,eax |
2359 | add [@@tex_lx1],ebp |
2359 | add [@@tex_lx1],ebp |
2360 | mov ebp,[@@tex_ldy] |
2360 | mov ebp,[@@tex_ldy] |
2361 | imul ebp,eax |
2361 | imul ebp,eax |
2362 | add [@@tex_ly1],ebp |
2362 | add [@@tex_ly1],ebp |
2363 | mov ebp,[@@z_dx] |
2363 | mov ebp,[@@z_dx] |
2364 | imul ebp,eax |
2364 | imul ebp,eax |
2365 | add [@@lz1],ebp |
2365 | add [@@lz1],ebp |
2366 | no_lcpc: |
2366 | no_lcpc: |
2367 | 2367 | ||
2368 | inc ecx ;for equal correction |
2368 | inc ecx ;for equal correction |
2369 | mov edx,[@@tex_lx1] |
2369 | mov edx,[@@tex_lx1] |
2370 | mov ebx,[@@tex_ly1] |
2370 | mov ebx,[@@tex_ly1] |
2371 | mov esi,[@@lz1] |
2371 | mov esi,[@@lz1] |
2372 | 2372 | ||
2373 | thl_loop: |
2373 | thl_loop: |
2374 | mov ebp,esi |
2374 | mov ebp,esi |
2375 | shr ebp,SHIFT |
2375 | shr ebp,SHIFT |
2376 | mov eax,dword [edi-I_END+zbuffer] |
2376 | mov eax,dword [edi-I_END+zbuffer] |
2377 | cmp ax,bp |
2377 | cmp ax,bp |
2378 | jb no_set |
2378 | jb no_set |
2379 | mov [edi-I_END+zbuffer],bp |
2379 | mov [edi-I_END+zbuffer],bp |
2380 | 2380 | ||
2381 | mov eax,edx |
2381 | mov eax,edx |
2382 | ; and eax,0x0fff0000 |
2382 | ; and eax,0x0fff0000 |
2383 | ror ebx,16 |
2383 | ror ebx,16 |
2384 | mov ax,bx |
2384 | mov ax,bx |
2385 | ror ebx,16 |
2385 | ror ebx,16 |
2386 | shl ax,11 ; 8 for 256*256, 9 for 128*128 ... |
2386 | shl ax,11 ; 8 for 256*256, 9 for 128*128 ... |
2387 | shr eax,11 |
2387 | shr eax,11 |
2388 | lea eax,[eax*2+eax] ; equ imul eax,3 |
2388 | lea eax,[eax*2+eax] ; equ imul eax,3 |
2389 | add eax,[@@tex_off] |
2389 | add eax,[@@tex_off] |
2390 | mov ebp,eax |
2390 | mov ebp,eax |
2391 | 2391 | ||
2392 | mov ax,word [ebp] |
2392 | mov ax,word [ebp] |
2393 | mov [edi],ax |
2393 | mov [edi],ax |
2394 | mov al,byte [ebp+2] |
2394 | mov al,byte [ebp+2] |
2395 | mov [edi+2],al |
2395 | mov [edi+2],al |
2396 | 2396 | ||
2397 | no_set: |
2397 | no_set: |
2398 | add edi,3 |
2398 | add edi,3 |
2399 | 2399 | ||
2400 | add esi,[@@z_dx] |
2400 | add esi,[@@z_dx] |
2401 | add edx,[@@tex_ldx] |
2401 | add edx,[@@tex_ldx] |
2402 | add ebx,[@@tex_ldy] |
2402 | add ebx,[@@tex_ldy] |
2403 | dec ecx |
2403 | dec ecx |
2404 | jnz thl_loop |
2404 | jnz thl_loop |
2405 | thl_quit: |
2405 | thl_quit: |
2406 | ret |
2406 | ret |
2407 | 2407 | ||
2408 | 2408 | ||
2409 | @@rgb dd 0 |
2409 | @@rgb dd 0 |
2410 | @@rgbax dw 0 |
2410 | @@rgbax dw 0 |
2411 | @@rgbbl db 0 |
2411 | @@rgbbl db 0 |
2412 | 2412 | ||
2413 | ; === DATA === |
2413 | ; === DATA === |
2414 | 2414 | ||
2415 | d_angle dd 0.19634954 ;pi/16 |
2415 | d_angle dd 0.19634954 ;pi/16 |
2416 | angle dd 0.0 |
2416 | angle dd 0.0 |
2417 | mul_wave dd 1.5 |
2417 | mul_wave dd 1.5 |
2418 | 2418 | ||
2419 | sin_pos dw 0 |
2419 | sin_pos dw 0 |
2420 | sinwave rw 256 |
2420 | sinwave rw 256 |
2421 | 2421 | ||
2422 | Xmap dd 0 |
2422 | Xmap dd 0 |
2423 | Ymap dd 0 |
2423 | Ymap dd 0 |
2424 | mapoff dd 0 |
2424 | mapoff dd 0 |
2425 | 2425 | ||
2426 | Xcam dd 0 |
2426 | Xcam dd 0 |
2427 | Ycam dd 0 |
2427 | Ycam dd 0 |
2428 | Zcam dd -400 |
2428 | Zcam dd -400 |
2429 | 2429 | ||
2430 | Xcamangle dd 0 |
2430 | Xcamangle dd 0 |
2431 | Ycamangle dd 0 |
2431 | Ycamangle dd 0 |
2432 | Zcamangle dd 0 |
2432 | Zcamangle dd 0 |
2433 | 2433 | ||
2434 | Xcamsin dd 0 |
2434 | Xcamsin dd 0 |
2435 | Xcamcos dd 0 |
2435 | Xcamcos dd 0 |
2436 | Ycamsin dd 0 |
2436 | Ycamsin dd 0 |
2437 | Ycamcos dd 0 |
2437 | Ycamcos dd 0 |
2438 | Zcamsin dd 0 |
2438 | Zcamsin dd 0 |
2439 | Zcamcos dd 0 |
2439 | Zcamcos dd 0 |
2440 | 2440 | ||
2441 | X dd ? ; X,Y,Z variable for formula |
2441 | X dd ? ; X,Y,Z variable for formula |
2442 | Y dd ? |
2442 | Y dd ? |
2443 | Z dd ? |
2443 | Z dd ? |
2444 | 2444 | ||
2445 | Xp dd ? |
2445 | Xp dd ? |
2446 | Yp dd ? |
2446 | Yp dd ? |
2447 | 2447 | ||
2448 | Xangle dd 0 ; Angle to rotate around x |
2448 | Xangle dd 0 ; Angle to rotate around x |
2449 | Yangle dd 0 |
2449 | Yangle dd 0 |
2450 | Zangle dd 0 |
2450 | Zangle dd 0 |
2451 | 2451 | ||
2452 | DeltaX dd 1 ; x,y,z rotation angle |
2452 | DeltaX dd 1 ; x,y,z rotation angle |
2453 | DeltaY dd 1 |
2453 | DeltaY dd 1 |
2454 | DeltaZ dd 1 |
2454 | DeltaZ dd 1 |
2455 | 2455 | ||
2456 | Xoff dd 256 ; x-cord |
2456 | Xoff dd 256 ; x-cord |
2457 | Yoff dd 256 ; y-cord |
2457 | Yoff dd 256 ; y-cord |
2458 | Zoff dd 0;800 ; Distance from viewer |
2458 | Zoff dd 0;800 ; Distance from viewer |
2459 | 2459 | ||
2460 | Xsin dd ? ; Sine and cosine of angle to rotate around |
2460 | Xsin dd ? ; Sine and cosine of angle to rotate around |
2461 | Xcos dd ? |
2461 | Xcos dd ? |
2462 | Ysin dd ? |
2462 | Ysin dd ? |
2463 | Ycos dd ? |
2463 | Ycos dd ? |
2464 | Zsin dd ? |
2464 | Zsin dd ? |
2465 | Zcos dd ? |
2465 | Zcos dd ? |
2466 | 2466 | ||
2467 | Mx dd SCREEN_X/2 ; Center of the screen |
2467 | Mx dd SCREEN_X/2 ; Center of the screen |
2468 | My dd SCREEN_Y/2 |
2468 | My dd SCREEN_Y/2 |
2469 | 2469 | ||
2470 | autorot db 0 ;Auto rotation flag |
2470 | autorot db 0 ;Auto rotation flag |
2471 | massize dd 0 ;Size of triangle massive |
2471 | massize dd 0 ;Size of triangle massive |
2472 | id dd 0 |
2472 | id dd 0 |
2473 | temp dd 0 |
2473 | temp dd 0 |
2474 | 2474 | ||
2475 | ; DATA AREA |
2475 | ; DATA AREA |
2476 | labelt: |
2476 | labelt: |
2477 | db '3D TEXTURED ENGINE' |
2477 | db '3D TEXTURED ENGINE' |
2478 | labellen: |
2478 | labellen: |
2479 | 2479 | ||
2480 | 2480 | ||
2481 | ;Texture pusck 32*32 256 |
2481 | ;Texture pusck 32*32 256 |
2482 | texpack_gif: |
2482 | texpack_gif: |
2483 | file 'TEXPACK.gif' |
2483 | file 'texpack.gif' |
2484 | rb 50 |
2484 | rb 50 |
2485 | 2485 | ||
2486 | ;Ground texture |
2486 | ;Ground texture |
2487 | bmp_texmap: |
2487 | bmp_texmap: |
2488 | file 'TEXMAP.bmp' |
2488 | file 'texmap.bmp' |
2489 | rb 50 |
2489 | rb 50 |
2490 | 2490 | ||
2491 | 2491 | ||
2492 | ; Ground livel map |
2492 | ; Ground livel map |
2493 | gif_file_area5: |
2493 | gif_file_area5: |
2494 | file 'MAP.gif' ;level map |
2494 | file 'map.gif' ;level map |
2495 | rb 50 |
2495 | rb 50 |
2496 | 2496 | ||
2497 | rb 8 |
2497 | rb 8 |
2498 | texture_limg: |
2498 | texture_limg: |
2499 | rb 4095 |
2499 | rb 4095 |
2500 | texture_img: |
2500 | texture_img: |
2501 | rb 4095 |
2501 | rb 4095 |
2502 | texture_img2: |
2502 | texture_img2: |
2503 | rb 4095 |
2503 | rb 4095 |
2504 | 2504 | ||
2505 | rb (4095)*16*16 |
2505 | rb (4095)*16*16 |
2506 | 2506 | ||
2507 | img_area: |
2507 | img_area: |
2508 | rb 128*128*3+8 |
2508 | rb 128*128*3+8 |
2509 | 2509 | ||
2510 | glm_img_area: |
2510 | glm_img_area: |
2511 | rb (MAP_XSIZE+1)*(MAP_YSIZE+1)*3+8 |
2511 | rb (MAP_XSIZE+1)*(MAP_YSIZE+1)*3+8 |
2512 | 2512 | ||
2513 | rb 8 |
2513 | rb 8 |
2514 | 2514 | ||
2515 | texpack_img: |
2515 | texpack_img: |
2516 | rb 512*512*3+8 |
2516 | rb 512*512*3+8 |
2517 | 2517 | ||
2518 | keymap: |
2518 | keymap: |
2519 | rb 1000 |
2519 | rb 1000 |
2520 | 2520 | ||
2521 | model_mas: |
2521 | model_mas: |
2522 | rb 4+8*100 |
2522 | rb 4+8*100 |
2523 | 2523 | ||
2524 | ; Hash area for decoding GIF |
2524 | ; Hash area for decoding GIF |
2525 | gif_hash_area: |
2525 | gif_hash_area: |
2526 | rd 4096+1 |
2526 | rd 4096+1 |
2527 | 2527 | ||
2528 | MAX_MODEL_POINTS = 100 |
2528 | MAX_MODEL_POINTS = 100 |
2529 | modelpoints: |
2529 | modelpoints: |
2530 | rb MAX_MODEL_POINTS*3*4 |
2530 | rb MAX_MODEL_POINTS*3*4 |
2531 | 2531 | ||
2532 | ; Matrix points massive |
2532 | ; Matrix points massive |
2533 | points: |
2533 | points: |
2534 | ; Massive of turn matrix points |
2534 | ; Massive of turn matrix points |
2535 | tpoints=points+((MATRIX_XSIZE+1)*(MATRIX_YSIZE+1)*3*4) |
2535 | tpoints=points+((MATRIX_XSIZE+1)*(MATRIX_YSIZE+1)*3*4) |
2536 | ; Ground level map massive |
2536 | ; Ground level map massive |
2537 | ground_level_map=tpoints+((MATRIX_XSIZE+1)*(MATRIX_YSIZE+1)*3*4) |
2537 | ground_level_map=tpoints+((MATRIX_XSIZE+1)*(MATRIX_YSIZE+1)*3*4) |
2538 | ; zbuffer |
2538 | ; zbuffer |
2539 | zbuffer=ground_level_map+((MAP_XSIZE+1)*(MAP_YSIZE+1)*4) |
2539 | zbuffer=ground_level_map+((MAP_XSIZE+1)*(MAP_YSIZE+1)*4) |
2540 | I_END=zbuffer+(SCREEN_X*SCREEN_Y)*3 |
2540 | I_END=zbuffer+(SCREEN_X*SCREEN_Y)*3 |