Subversion Repositories Kolibri OS

Rev

Rev 7280 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1245 hidnplayr 1
;init_envmap_cub2:
2
;        mov esi,envmap
3
;        mov edi,envmap_cub    ;take cubic env. map from
4
;        xor eax,eax           ;spherical env. map
5
;      @@:
6
;        add esi,eax
7
;        movsd
8
;        dec edi
9
;        dec esi
10
;        add esi,511*3
11
;        add eax,3
12
;        cmp eax,511*3
13
;        jl  @b
14
;ret
8014 leency 15
init_envmap_cub:         ; create 512x512 env map
1245 hidnplayr 16
.temp equ word [ebp-2]
8014 leency 17
         push     ebp
18
         mov      ebp,esp
19
         sub      esp,2
20
         mov      edi,envmap_cub
21
         fninit
1245 hidnplayr 22
 
8014 leency 23
         mov      cx,-256
1245 hidnplayr 24
    .ie_hor:
8014 leency 25
         mov      .temp,cx
26
         fild     .temp
27
         fabs
1245 hidnplayr 28
  ;      fmul     st,st0
29
  ;      fsqrt
8014 leency 30
         mov      .temp,255
31
         fisubr   .temp
32
         fmul     [env_const]
33
         fistp    .temp
34
         mov      ax,.temp
1245 hidnplayr 35
 
8014 leency 36
         or      ax,ax
37
         jge     .ie_ok1
38
         xor     ax,ax
39
         jmp     .ie_ok2
1245 hidnplayr 40
  .ie_ok1:
8014 leency 41
         cmp     ax,255
42
         jle     .ie_ok2
43
         mov     ax,255
1245 hidnplayr 44
  .ie_ok2:
8014 leency 45
         stosb
46
         stosb
47
         stosb
1245 hidnplayr 48
 
8014 leency 49
         inc     cx
50
         cmp     cx,256
51
         jne     .ie_hor
1245 hidnplayr 52
 
8014 leency 53
         mov     esp,ebp
54
         pop     ebp
1245 hidnplayr 55
ret
56
 
57
calc_one_col:
58
; procedure don't save registers !!!
59
; in -   st - dot_product
60
;        stack - other parameters
61
; out - eax - 0x00rrggbb
8014 leency 62
.dot_prd   equ dword[ebp+4]           ; dot product   - cos x  - not now
63
.min_col_r equ word[ebp+8]            ; minimum color - ambient
1245 hidnplayr 64
.min_col_g equ word[ebp+10]
65
.min_col_b equ word[ebp+12]
8014 leency 66
.max_col_r equ word[ebp+14]           ; maximum color - specular
1245 hidnplayr 67
.max_col_g equ word[ebp+16]
68
.max_col_b equ word[ebp+18]
8014 leency 69
.org_col_r equ word[ebp+20]           ; orginal color - diffuse
1245 hidnplayr 70
.org_col_g equ word[ebp+22]
71
.org_col_b equ word[ebp+24]
8014 leency 72
.n         equ word[ebp+26]           ; shines - not implemented
73
.temp      equ word[ebp-2]
1245 hidnplayr 74
.color_sum_r equ dword[ebp-6]
75
.color_sum_g equ dword[ebp-10]
76
.color_sum_b equ dword[ebp-14]
77
; color = ambient+cos(x)*diffuse+(cos(x)^n)*specular
8014 leency 78
         mov     ebp,esp
79
         sub     esp,14
1245 hidnplayr 80
 
8014 leency 81
         mov      ax,.min_col_r
82
         add      ax,.max_col_r
83
         add      ax,.org_col_r
84
         cwde
85
         mov      .color_sum_r,eax
1245 hidnplayr 86
 
8014 leency 87
         mov      ax,.min_col_g
88
         add      ax,.max_col_g
89
         add      ax,.org_col_g
90
         cwde
91
         mov      .color_sum_g,eax
1245 hidnplayr 92
 
8014 leency 93
         mov      ax,.min_col_b
94
         add      ax,.max_col_b
95
         add      ax,.org_col_b
96
         cwde
97
         mov      .color_sum_b,eax
1245 hidnplayr 98
 
99
 
100
;         fld     .dot_prd
101
       ;  fild    .n
102
       ;  fxch    st1
103
       ;  fabs
104
       ;  fyl2x                     ;
105
       ;  f2xm1
106
       ;  fld1
107
       ;  faddp        ; st =  dot_product ^ n
108
 
8014 leency 109
         fld     st            ; copy dot pr
110
         fmul    st,st0
111
         fmul    st,st0
112
         fmul    st,st0
113
         cmp     .n,255            ; .n = 255 -> spot light
114
         jne     @f
115
         fmul    st,st0
116
         fmul    st,st0
117
         fmul    st,st0
1245 hidnplayr 118
      @@:
8014 leency 119
         fld     st            ; st0=st1=dot_pr^n, st2=dot_pr
120
         fimul   .max_col_b
121
         fild    .org_col_b
122
         fmul    st,st3
123
         faddp                 ; st0=first piece of col, st1=dot_pr^n..
124
         fiadd   .min_col_b
125
         fimul   .max_col_b
126
         fidiv   .color_sum_b
127
         fistp   .temp
128
         movzx   eax,.temp
129
         shl     eax,16
1245 hidnplayr 130
 
8014 leency 131
         fld     st
132
         fimul   .max_col_g
133
         fild    .org_col_g
134
         fmul    st,st3
135
         faddp
136
         fiadd   .min_col_g
137
         fimul   .max_col_g
138
         fidiv   .color_sum_g
139
         fistp   .temp
140
         mov     ax,.temp
141
         mov     ah,al
142
         shl     eax,8
1245 hidnplayr 143
 
8014 leency 144
         fimul   .max_col_r
145
         fild    .org_col_r
146
         fmulp   st2,st
147
         faddp
148
         fiadd   .min_col_r
149
         fimul   .max_col_r
150
         fidiv   .color_sum_r
151
         fistp   .temp
152
         mov     ax,.temp          ;eax -  0xbbgg00rr
1245 hidnplayr 153
     ;   mov     ah,al
8014 leency 154
         ror     eax,16
155
         xchg    al,ah             ; eax - 0x00rrggbb
156
         mov     esp,ebp
1245 hidnplayr 157
ret 24
158
 
8014 leency 159
calc_bumpmap:            ; calculate random bumpmap
1245 hidnplayr 160
;--------------in edi _ pointer to TEX_X x TEX_Y bumpmap
161
 
8014 leency 162
         push    edi
1245 hidnplayr 163
 
8014 leency 164
         cmp     [bumps_flag],0
165
         je      .random_bump_map
166
         ; else bumps according to texture
167
         mov     esi,texmap
168
         mov     ecx,TEXTURE_SIZE
1245 hidnplayr 169
      @@:
8014 leency 170
         movzx   ax,byte[esi]
171
         movzx   bx,byte[esi+1]
172
         movzx   dx,byte[esi+2]
173
         add     ax,bx
174
         add     ax,dx
175
         cwd
176
         div     [i3]
177
         stosb
178
         add     esi,3
179
         loop    @b
180
         jmp     .blur_map
1245 hidnplayr 181
;         push    ecx
182
;         mov     eax,0x88888888
183
;         mov     ecx,16/4
184
;         rep     stosd
185
;         mov     eax,0xffffffff
186
;         mov     ecx,16/4
187
;         rep     stosd
188
;         pop     ecx
189
;         loop    @b
190
  .random_bump_map:
191
 
8014 leency 192
         mov     ecx,TEXTURE_SIZE
1245 hidnplayr 193
      @@:
8014 leency 194
         push    ecx
195
         xor     ecx,ecx
196
         mov     edx,255
197
         call    random
198
         stosb
199
         pop    ecx
200
         loop   @b
1245 hidnplayr 201
 
202
      .blur_map:
8014 leency 203
         pop    edi
204
         movzx  ecx,[bumps_deep_flag]
205
         inc    cx
1245 hidnplayr 206
      .blur:
8014 leency 207
         xor    esi,esi
208
         mov    edx,TEXTURE_SIZE
209
         xor    eax,eax
210
         xor    ebx,ebx
1245 hidnplayr 211
      @@:
8014 leency 212
         mov    ebp,esi
213
         dec    ebp
214
         and    ebp,TEXTURE_SIZE
215
         mov    al,byte[ebp+edi]
1245 hidnplayr 216
 
8014 leency 217
         mov    ebp,esi
218
         inc    ebp
219
         and    ebp,TEXTURE_SIZE
220
         mov    bl,byte[ebp+edi]
221
         add    eax,ebx
1245 hidnplayr 222
 
8014 leency 223
         mov    ebp,esi
224
         sub    ebp,TEX_X
225
         and    ebp,TEXTURE_SIZE
226
         mov    bl,byte[ebp+edi]
227
         add    eax,ebx
1245 hidnplayr 228
 
8014 leency 229
         mov    ebp,esi
230
         add    ebp,TEX_X
231
         and    ebp,TEXTURE_SIZE
232
         mov    bl,byte[ebp+edi]
233
         add    eax,ebx
1245 hidnplayr 234
 
8014 leency 235
         shr    eax,2
236
         mov    byte[esi+edi],al
1245 hidnplayr 237
 
8014 leency 238
         inc    esi
239
         dec    edx
240
         jnz    @b
1245 hidnplayr 241
 
8014 leency 242
         loop   .blur
1245 hidnplayr 243
ret
244
random:
245
;  in  - ecx - min
246
;        edx - max
247
;  out - eax - random number
8014 leency 248
         mov    bx,[rand_seed]
249
         add    bx,0x9248
250
         ror    bx,3
251
         mov    [rand_seed],bx
1245 hidnplayr 252
 
8014 leency 253
         mov    ax,dx
254
         sub    ax,cx
255
         mul    bx
256
         mov    ax,dx
257
         add    ax,cx
258
         cwde
1245 hidnplayr 259
ret
260
 
8014 leency 261
optimize_object1:        ; setting   point (0,0,0) in center of object
262
                         ; recalculate all coords , scale object,
263
                         ;the coords in <-1.0,1.0>
1245 hidnplayr 264
;in :  real_points - table filled of real float dd coordinates (x,y,z), end mark  dd -1
265
;                  _ global variable
266
;      points_count_var - dw integer variable with exactly points count
267
;                       - global variable
268
;      SIZE_X, SIZE_Y must be defined
269
 
270
.max   equ dword[ebp-4]
271
.min   equ dword[ebp-8]
272
.maxxx equ dword[ebp-12]
273
.center equ dword[ebp-16]
274
 
8014 leency 275
        mov     ebp,esp
276
        sub     esp,16
277
        fninit
278
        mov     .maxxx,0
279
        mov     ecx,3
280
        xor     ebx,ebx         ; ebx - x,y,z coord in real_points list
281
    .next_c:                    ; max/min/center x,y,z
282
        mov     edi,[points_ptr]      ; in real_point list minimum two points
283
        mov     edx,[points_count_var]
284
        fld     dword[edi+ebx]
285
        fst     .max
286
        fstp    .min
287
        add     edi,12
288
        dec     edx
289
    .next_coord:               ; next coord from real_points list
290
        fld     dword [edi+ebx]   ; real_points -> x,y,z
291
        fcom    .max    ; max_x,y,z
292
        fstsw   ax
293
        sahf
294
        jbe     @f             ; jmp less equal
295
        fstp    .max    ; new max_x,y,z
296
        jmp     .end_coords
1245 hidnplayr 297
     @@:
8014 leency 298
        fcom    .min    ; min_x,y,z
299
        fstsw   ax
300
        sahf
301
        jnbe    @f              ; jmp greater
302
        fst     .min   ; new min_x
1245 hidnplayr 303
    @@:
8014 leency 304
        ffree   st
1245 hidnplayr 305
    .end_coords:
8014 leency 306
        add     edi,12
1245 hidnplayr 307
   ;     cmp     dword[edi],-1   ; cmp with end mark
8014 leency 308
        dec      edx
309
        jnz     .next_coord
310
        ; ok after this we found max_coord and min_coord
311
        fld     .max          ; find center point
312
        fadd    .min
313
        fld1
314
        fld1
315
        faddp
316
        fdivp   st1,st        ; st0 - center coord
317
        fstp    .center
1245 hidnplayr 318
 
8014 leency 319
        fld     .max
320
        fsub    .center      ; st = .max - .center
321
        fcom    .maxxx      ; maximum of all .max
322
        fstsw   ax
323
        sahf
324
        jbe     @f          ; jmp lower
325
        fst     .maxxx      ; new maxx
1245 hidnplayr 326
    @@:
8014 leency 327
        ffree   st
328
        mov     edi,[points_ptr]
329
        mov     edx,[points_count_var]   ; substraction all coords - center point
1245 hidnplayr 330
    @@:
8014 leency 331
        fld     dword[edi+ebx]
332
        fsub    .center
333
        fstp    dword[edi+ebx]
334
        add     edi,12
1245 hidnplayr 335
;        cmp     dword[edi],-1
336
;        jne     @b
8014 leency 337
        dec      edx
338
        jnz      @b
1245 hidnplayr 339
 
8014 leency 340
        add     ebx,4               ; ebx - x,y,z cooficientes in list real_points
341
        dec     ecx
342
        jnz     .next_c
1245 hidnplayr 343
 
8014 leency 344
        fld     .maxxx
345
        mov     edi,[points_ptr]   ; create all coords in <-1.0,1.0>
346
        mov     ecx,[points_count_var]
1245 hidnplayr 347
     @@:
8014 leency 348
        fld     dword[edi]
349
        fdiv    .maxxx
350
        fstp    dword[edi]
351
        fld     dword[edi+4]
352
        fdiv    .maxxx
353
        fstp    dword[edi+4]
354
        fld     dword[edi+8]
355
        fdiv    .maxxx
356
        fstp    dword[edi+8]
357
        add     edi,12
358
        loop    @b
1245 hidnplayr 359
     ;   cmp     dword[edi],-1
360
 
361
     ;   jne     @b
362
 
8014 leency 363
        mov     esp,ebp
1245 hidnplayr 364
ret
365
 
8014 leency 366
generate_object:         ; generate node
367
.N         equ 32
368
.x         equ word[ebp-2]
369
.Ndiv2     equ word[ebp-10]
1245 hidnplayr 370
.MthickSqr equ dword[ebp-14]   ; diameter^2
8014 leency 371
.temp      equ dword[ebp-18]   ; variable for x <-1;1>
1245 hidnplayr 372
.Hthick    equ dword[ebp-22]
373
.cos_temp  equ dword[ebp-26]
374
.next_const  equ dword[ebp-30]
8014 leency 375
.a           equ dword[ebp-34]
376
.Pi2         equ       ebp-38
1245 hidnplayr 377
 
378
 
379
 
8014 leency 380
       mov      ebp,esp
381
       sub      esp,42
1245 hidnplayr 382
 
8014 leency 383
       mov      .Ndiv2,.N/2
1245 hidnplayr 384
       fninit
385
       fldpi
8014 leency 386
       fadd     st,st
387
       fst      dword[.Pi2]
388
       fidiv    .Ndiv2
389
       fst      .a                       ; .Ndiv2*.a=2Pi => .a=2pi/.Ndiv2
1245 hidnplayr 390
 
8014 leency 391
       fld      [.Mthick]           ; inside diameter, (outside daiameter = 1)
392
       fmul     st,st0
393
       fstp     .MthickSqr
1245 hidnplayr 394
       fld1
395
 
8014 leency 396
       fsub      [.Mthick]
1245 hidnplayr 397
 
8014 leency 398
       fst      .Hthick            ; Hthick = 1 - Mthick
399
       fld      st
400
       fadd     st,st
1245 hidnplayr 401
       faddp
8014 leency 402
       fstp     .next_const         ; next_const = Hthick * 3
1245 hidnplayr 403
 
404
 
405
    ;init triangles list
8014 leency 406
       mov      edi,[triangles_ptr]
1245 hidnplayr 407
 
8014 leency 408
       xor      esi,esi
409
       xor      eax,eax
410
       mov      ebx,.N+1
411
       mov      ecx,(.N*2)+2  ;--
412
       mov      edx,(.N*3)+3  ;---
413
       mov      [triangles_count_var],0
1245 hidnplayr 414
     .again_tri:
8014 leency 415
       stosd                             ; main wave
416
       mov      dword[edi],ebx
417
       inc      eax
418
       add      edi,4
419
       stosd
420
       stosd
421
       mov      dword[edi],ebx
422
       inc      ebx
423
       mov      dword[edi+4],ebx
1245 hidnplayr 424
 
425
 
8014 leency 426
       add      edi,8
1245 hidnplayr 427
 
8014 leency 428
       mov      dword[edi],ecx      ;----   ;     n2+2        ;    xor      ax,ax
429
       inc      ecx                        ;     n2+3        ;    mov      bx,.N+1
430
       mov      dword[edi+4],edx            ;                 ;    mov      cx,(.N*2)+2  ;--
431
       mov      dword[edi+8],ecx            ;     n3+3        ;    mov      dx,(.N*3)+3  ;---
432
       mov      dword[edi+12],edx            ;     n3+3        ;
433
       inc      edx                        ;                 ;
434
       mov      dword[edi+16],edx            ;     n2+3        ;
435
       mov      dword[edi+20],ecx           ;     n3+4
436
       add      edi,24              ;----
1245 hidnplayr 437
 
8014 leency 438
       dec      eax          ; border of wave
439
       dec      ebx
440
       dec      ecx
441
       dec      edx
1245 hidnplayr 442
 
8014 leency 443
       stosd                      ; first border
444
       inc      eax
445
       stosd
446
       mov      dword[edi],edx
447
       add      edi,4
1245 hidnplayr 448
 
8014 leency 449
       mov      dword[edi],edx
450
       add      edi,4
451
       stosd
452
       inc      edx
453
       mov      dword[edi],edx
1245 hidnplayr 454
 
8014 leency 455
       mov     dword[edi+4],ebx      ; second border
456
       mov     dword[edi+8],ecx
457
       inc     ebx
458
       mov     dword[edi+12],ebx
1245 hidnplayr 459
 
8014 leency 460
       mov     dword[edi+16],ebx
461
       mov     dword[edi+20],ecx
462
       inc     ecx
463
       mov     dword[edi+24],ecx
464
       add     edi,28
1245 hidnplayr 465
 
8014 leency 466
       add      [triangles_count_var],8     ;10
467
       inc      esi
468
       cmp      esi,.N
469
       jne      .again_tri
1245 hidnplayr 470
 
8014 leency 471
       add      eax,((.N+1)*3)+1
472
       add      ebx,((.N+1)*3)+1
473
       add      ecx,((.N+1)*3)+1
474
       add      edx,((.N+1)*3)+1
475
       xor      esi,esi
476
       cmp      eax,(.N*13)+13    ;;;(.N*23)+23                ; ax,(.N*13)+13
1245 hidnplayr 477
       jl      .again_tri
478
 
8014 leency 479
     ;  mov      dword[edi],-1          ;      <--- end mark not always in use
1245 hidnplayr 480
 
481
    ; init real points list
8014 leency 482
       mov      .x,-(.N/2)
483
       mov      edi,[points_ptr]
484
       lea      esi,[edi+(12*(.N+1))]
485
       mov      eax,[points_ptr]
486
       mov      ebx,eax
487
       add      eax,2*12*(.N+1)    ;---
488
       add      ebx,3*12*(.N+1)    ;---
489
       mov      [points_count_var],0
1245 hidnplayr 490
 
491
 
492
       .R_P4 equ edi+(4*12*(.N+1))
493
       .R_P5 equ edi+(5*12*(.N+1))
494
       .R_P6 equ edi+(6*12*(.N+1))
495
       .R_P7 equ edi+(7*12*(.N+1))
496
 
497
       .R_P8 equ edi+(8*12*(.N+1))
498
       .R_P9 equ edi+(9*12*(.N+1))
499
       .R_P10 equ edi+(10*12*(.N+1))
500
       .R_P11 equ edi+(11*12*(.N+1))
501
 
502
       .R_P12 equ edi+(12*12*(.N+1))
503
       .R_P13 equ edi+(13*12*(.N+1))
504
       .R_P14 equ edi+(14*12*(.N+1))
505
       .R_P15 equ edi+(15*12*(.N+1))
506
 
507
     @@:
508
       ; x coordinate
8014 leency 509
       fild     .x
510
       fld      st
1245 hidnplayr 511
;;       fmul     .a                  ; st = <-2pi;2pi>  when mul .a
8014 leency 512
       fidiv    .Ndiv2
513
       fst      .temp                 ; temporary x in <-1.0;1.0>
1245 hidnplayr 514
 
8014 leency 515
       fst      dword[edi]              ;x coordinate of point
516
       fst      dword[esi]
517
       fst      dword[eax]              ;--
1245 hidnplayr 518
 
519
 
8014 leency 520
       fst      dword[.R_P4]
521
       fst      dword[.R_P5]
522
       fst      dword[.R_P6]
523
       fst      dword[.R_P7]
1245 hidnplayr 524
 
8014 leency 525
       fst      dword[.R_P8]
526
       fst      dword[.R_P9]
527
       fst      dword[.R_P10]
528
       fst      dword[.R_P11]
1245 hidnplayr 529
 
8014 leency 530
       fst      dword[.R_P12]
531
       fst      dword[.R_P13]
532
       fst      dword[.R_P14]
533
       fst      dword[.R_P15]
1245 hidnplayr 534
 
8014 leency 535
       fstp     dword[ebx]  ;pop
1245 hidnplayr 536
      ;*******y coord               dword[offset + 4]
8014 leency 537
       fmul      .a      ;  st  = <-2pi;2pi>
1245 hidnplayr 538
       fsincos
8014 leency 539
       fmul     .next_const
540
       fst      dword[edi+4]            ; y coordinate of point
541
       fst      dword[esi+4]
542
       fst      dword[.R_P4+4]
543
       fst      dword[.R_P5+4]
544
       fld      .Hthick
1245 hidnplayr 545
       faddp
8014 leency 546
       fst      dword[.R_P6+4]
547
       fst      dword[.R_P7+4]
548
       fst      dword[eax+4]
549
       fst      dword[ebx+4]
1245 hidnplayr 550
 
551
       fchs
8014 leency 552
       fst      dword[.R_P10+4]
553
       fst      dword[.R_P11+4]
554
       fst      dword[.R_P14+4]
555
       fst      dword[.R_P15+4]
556
       fadd     .Hthick
557
       fadd     .Hthick
558
       fst      dword[.R_P8+4]
559
       fst      dword[.R_P9+4]
560
       fst      dword[.R_P12+4]
561
       fstp     dword[.R_P13+4]
1245 hidnplayr 562
 
563
 
8014 leency 564
       fmul     .Hthick
565
       fmul     .next_const
566
       fstp     .cos_temp           ; cos_temp = Hthick^2 * 3
1245 hidnplayr 567
 
568
     ;***************z coord
8014 leency 569
       fld      .temp
570
       fld      st
571
       fmul     st,st0                  ; z coords
1245 hidnplayr 572
       fchs
573
       fld1
574
       faddp
575
       fabs
576
       fsqrt
577
;       fld      st
578
;       fsub
8014 leency 579
       fld      st
580
       fsub     .cos_temp
581
       fst      dword[esi+8]
582
       fstp     dword[eax+8]            ;--
583
       fld      st
584
       fadd     .cos_temp
585
       fst      dword[.R_P9+8]
586
       fstp     dword[.R_P10+8]
1245 hidnplayr 587
       fchs
8014 leency 588
       fld      st
589
       fsub     .cos_temp
590
       fst      dword[.R_P6+8]
591
       fstp     dword[.R_P5+8]
592
       fadd     .cos_temp
593
       fst      dword[.R_P13+8]
594
       fstp     dword[.R_P14+8]
1245 hidnplayr 595
 
8014 leency 596
       fmul     [.Mthick]
597
       fmul     st,st0
1245 hidnplayr 598
       fchs
8014 leency 599
       fld      .MthickSqr
1245 hidnplayr 600
       faddp
601
       fabs
602
       fsqrt
8014 leency 603
       fld      st
604
       fsub     .cos_temp
605
       fst      dword[edi+8]            ;  z coordinate
606
       fstp     dword[ebx+8]            ;--
607
       fld      st
608
       fadd     .cos_temp
609
       fst      dword[.R_P8+8]
610
       fstp     dword[.R_P11+8]
1245 hidnplayr 611
       fchs
8014 leency 612
       fld      st
613
       fsub     .cos_temp
614
       fst      dword[.R_P7+8]
615
       fstp     dword[.R_P4+8]
616
       fadd     .cos_temp
617
       fst      dword[.R_P12+8]
618
       fstp     dword[.R_P15+8]
1245 hidnplayr 619
 
8014 leency 620
       add      edi,12
621
       add      esi,12
622
       add      eax,12                  ;--
623
       add      ebx,12                  ;---
624
       add      [points_count_var],24         ;16
625
       inc      .x
626
       cmp      .x,.N/2
627
       jng      @b
1245 hidnplayr 628
;       mov      dword[esi],-1       ; <-- end mark
8014 leency 629
       mov       [culling_flag],0
1245 hidnplayr 630
       mov     esp,ebp
631
ret
632
.Mthick dd  0.85     ; size-thickness
633
 
634
make_random_lights:
635
  .temp1  equ ebp-4
8014 leency 636
  .temp2  equ ebp-8     ;  - light vector generate variables
1245 hidnplayr 637
  .temp3  equ ebp-12
638
  .max equ 800
8014 leency 639
        RDTSC
640
        mov    [rand_seed],ax
641
        push    ebp
642
        mov     ebp,esp
643
        sub     esp,12
644
        mov     edi,lights
645
        fninit
646
        mov     dword[.temp2],.max
647
        mov     dword[.temp3],.max/2
1245 hidnplayr 648
 
649
    .again:
8014 leency 650
        xor     esi,esi
1245 hidnplayr 651
     @@:
8014 leency 652
        mov     edx,.max
653
        xor     ecx,ecx
654
        call    random
655
        sub     eax,.max/2
656
        mov     dword[.temp1],eax
657
        fild    dword[.temp1]
658
        fidiv   dword[.temp3]
659
        fstp    dword[edi+esi*4]
660
        inc     esi
661
        cmp     esi,2
662
        jne     @b
1245 hidnplayr 663
 
664
  .max1 equ 1000
8014 leency 665
        mov     dword[.temp2],.max1/2
666
        mov     edx,.max1
667
        xor     ecx,ecx
668
        call    random
669
        mov     dword[.temp1],eax
670
        fild    dword[.temp1]
671
        fchs
672
        fidiv   dword[.temp2]
673
        fstp    dword[edi+8]
1245 hidnplayr 674
 
8014 leency 675
        xor     esi,esi
1245 hidnplayr 676
     @@:
8014 leency 677
        mov     ecx,220            ; max colors and shine  , ecx = 200 - more bright shading
678
        mov     edx,255
679
        call    random
680
        mov     byte[edi+18+esi],al
681
        inc     esi
682
        cmp     esi,4
683
        jne     @b
1245 hidnplayr 684
 
685
 
8014 leency 686
        xor     esi,esi
1245 hidnplayr 687
     @@:
8014 leency 688
        mov     ecx,100              ; orginal colors
689
        movzx   edx,byte[edi+18+esi]
690
        call    random
691
        mov     byte[edi+12+esi],al
692
        inc     esi
693
        cmp     esi,3
694
        jne     @b
1245 hidnplayr 695
 
8014 leency 696
        xor     esi,esi
1245 hidnplayr 697
     @@:
8014 leency 698
        mov     ecx,1               ; min cols
699
        movzx   edx,byte[edi+12+esi]
700
        call    random
701
        mov     byte[edi+15+esi],al
702
        inc     esi
703
        cmp     esi,3
704
        jne     @b
1245 hidnplayr 705
 
8014 leency 706
        add     edi,LIGHT_SIZE ;22
707
        cmp     edi,lightsend     ; see file View3ds,asm
708
        jne     .again
1245 hidnplayr 709
 
8014 leency 710
        mov     esp,ebp
711
        pop     ebp
1245 hidnplayr 712
ret
713
 
714
generate_texture2:
715
.const equ 32
8014 leency 716
        mov     edi,texmap
717
        xor     bx,bx
1245 hidnplayr 718
     .next_line:
8014 leency 719
        xor     dx,dx
1245 hidnplayr 720
     .next2stripes:
8014 leency 721
        mov     eax,-1
722
        mov     ecx,(TEX_X/.const)*3/4
723
        rep     stosd
724
        mov     eax,0x00ff0000
725
        mov     ecx,(TEX_X/.const)
1245 hidnplayr 726
     @@:
8014 leency 727
        stosd
728
        dec     edi
729
        loop    @b
730
        inc     dx
731
        cmp     dx,.const/2
732
        jl      .next2stripes
733
        inc     bx
734
        cmp     bx,TEX_Y
735
        jl      .next_line
1245 hidnplayr 736
ret
737
 
8014 leency 738
blur_screen:    ;blur n times  ; blur or fire
1245 hidnplayr 739
;in - ecx  times count
740
;.counter equ dword[esp-4]
741
.counter1 equ dword[esp-8]
1979 yogev_ezra 742
if Ext>=SSE2
8014 leency 743
         push       ebp
744
         mov        ebp,esp
745
         push       dword 0x01010101
746
         movss      xmm5,[esp]
747
         shufps     xmm5,xmm5,0
1979 yogev_ezra 748
     .again_blur:
8014 leency 749
         push       ecx
750
         mov        edi,[screen_ptr]
751
         movzx      ecx,word[size_x_var]  ;SIZE_X*3/4
752
         lea        ecx,[ecx*3+1]
753
         shr        ecx,2
6648 leency 754
 
6619 leency 755
   ;      mov        ecx,SIZE_X*3/4
8014 leency 756
         xor        eax,eax
757
         rep        stosd
6619 leency 758
   if 1
8014 leency 759
         movzx      ebx,word[size_x_var]
760
         movzx      ecx,word[size_y_var]
761
         sub        ecx,3
762
         imul       ecx,ebx
763
         lea        ecx,[ecx*3]
764
         shr        ecx,4
765
         lea        ebx,[ebx*3]
6619 leency 766
       ;  mov        ecx,(SIZE_X*(SIZE_Y-3))*3/16
1979 yogev_ezra 767
     .blr:
768
     @@:
8014 leency 769
         push       ecx
770
         movups     xmm0,[edi+ebx]
771
         mov        ecx,edi
772
         sub        ecx,ebx
773
         movups     xmm1,[ecx]
774
         movups     xmm2,[edi-3]
775
         movups     xmm3,[edi+3]
1979 yogev_ezra 776
 
8014 leency 777
         pavgb      xmm0,xmm1
778
         pavgb      xmm2,xmm3
779
         pavgb      xmm0,xmm2
1979 yogev_ezra 780
 
8014 leency 781
         psubusb    xmm0,xmm5  ; importand if fire
1979 yogev_ezra 782
 
8014 leency 783
         movups     [edi],xmm0
784
         add        edi,16
785
         add        esi,16
786
         pop        ecx
787
         loop       .blr
6619 leency 788
    end if
8014 leency 789
         xor        eax,eax
790
         movzx      ecx,word[size_x_var]
791
         lea        ecx,[ecx*3]
792
         shr        ecx,2
6619 leency 793
    ;     mov        ecx,SIZE_X*3/4
8014 leency 794
         rep        stosd
795
         pop        ecx
796
         loop       .again_blur
797
         mov        esp,ebp
798
         pop        ebp
1979 yogev_ezra 799
end if
800
 
801
if Ext=SSE
8014 leency 802
         emms
803
         push       ebp
804
         mov        ebp,esp
805
         push       dword 0x01010101
806
         push       dword 0x01010101
807
         movq       mm4,[esp]
1979 yogev_ezra 808
     .again_blur:
8014 leency 809
         push       ecx
810
         mov        edi,[screen_ptr]
811
         movzx      ecx,word[size_x_var]  ;SIZE_X*3/4
812
         lea        ecx,[ecx*3]
813
         shr        ecx,2
1979 yogev_ezra 814
     ;    pxor       mm5,mm5
8014 leency 815
         xor        eax,eax
816
         rep        stosd
817
         movzx      ebx,word[size_x_var]
818
         movzx      ecx,word[size_y_var]
819
         sub        ecx,3
820
         imul       ecx,ebx
821
         lea        ecx,[ecx*3]
822
         shr        ecx,3
823
         lea        ebx,[ebx*3]
6619 leency 824
       ;  mov        ecx,(SIZE_X*(SIZE_Y-3))*3/8
1979 yogev_ezra 825
     .blr:
826
     @@:
8014 leency 827
         movq       mm0,[edi+ebx]
828
         movq       mm1,[edi-ebx]
829
         movq       mm2,[edi-3]
830
         movq       mm3,[edi+3]
1979 yogev_ezra 831
 
8014 leency 832
         pavgb      mm0,mm1
833
         pavgb      mm2,mm3
834
         pavgb      mm0,mm2
1979 yogev_ezra 835
 
8014 leency 836
         psubusb    mm0,mm4  ; importand if fire
1979 yogev_ezra 837
 
8014 leency 838
         movq       [edi],mm0
839
         add         edi,8
840
         add         esi,8
1979 yogev_ezra 841
 
8014 leency 842
         loop        .blr
843
 
844
         xor        eax,eax
845
         mov        ecx,[size_x_var]
846
         lea        ecx,[ecx*3]
847
         shr        ecx,2
6619 leency 848
       ;  SIZE_X*3/4
8014 leency 849
         rep        stosd
850
         pop         ecx
851
         loop       .again_blur
852
         mov        esp,ebp
853
         pop        ebp
1979 yogev_ezra 854
end if
855
 
856
if Ext=MMX
8014 leency 857
         emms
858
         push       ebp
859
         mov        ebp,esp
860
         push       dword 0x0
861
         push       dword 0x01010101
1245 hidnplayr 862
.again_blur:
8014 leency 863
         push       ecx
864
         mov        edi,[screen_ptr]
865
         mov        ecx,SIZE_X*3/4
866
         pxor       mm5,mm5
867
         xor        eax,eax
868
         rep        stosd
1245 hidnplayr 869
 
8014 leency 870
         mov        ecx,(SIZE_X*(SIZE_Y-3))*3/4
1245 hidnplayr 871
     .blr:
872
     @@:
873
 
8014 leency 874
         movd       mm0,[edi+SIZE_X*3]
875
         movd       mm1,[edi-SIZE_X*3]
876
         movd       mm2,[edi-3]
877
         movd       mm3,[edi+3]
1245 hidnplayr 878
 
8014 leency 879
         punpcklbw  mm0,mm5
880
         punpcklbw  mm1,mm5
881
         punpcklbw  mm2,mm5
882
         punpcklbw  mm3,mm5
883
         paddw      mm0,mm1
884
         paddw      mm0,mm2
885
         paddw      mm0,mm3
886
         psrlw      mm0,2
1245 hidnplayr 887
 
8014 leency 888
         packuswb   mm0,mm5
889
         psubusb    mm0,qword[esp]  ; importand if fire
890
         movd       eax,mm0
891
         stosd
1245 hidnplayr 892
 
8014 leency 893
         loop        .blr
1245 hidnplayr 894
 
8014 leency 895
         xor        eax,eax
896
         mov        ecx,SIZE_X*3/4
897
         rep        stosd
898
         pop         ecx
899
         loop       .again_blur
900
         mov        esp,ebp
901
         pop        ebp
1245 hidnplayr 902
end if
903
if  Ext=NON
904
      .blur:
8014 leency 905
         push   ecx
906
         xor    ecx,ecx
1245 hidnplayr 907
      .next_col_coof:
8014 leency 908
         xor    esi,esi
909
         xor    eax,eax
910
         xor    ebx,ebx
911
         mov    edi,SIZE_X*SIZE_Y
1245 hidnplayr 912
      .next:
8014 leency 913
         mov    ebp,esi
914
         dec    ebp
1245 hidnplayr 915
 
8014 leency 916
         cmp    ebp,SIZE_X*SIZE_Y-1   ; clipping
917
         jl     @f
918
         mov    ebp,SIZE_X*SIZE_Y-1
1245 hidnplayr 919
      @@:
8014 leency 920
         or     ebp,ebp
921
         jg     @f
922
         xor    ebp,ebp
1245 hidnplayr 923
      @@:
8014 leency 924
         lea    edx,[ebp*3+screen]
925
         mov    al,byte[edx+ecx]
1245 hidnplayr 926
 
8014 leency 927
         mov    ebp,esi
928
         inc    ebp
929
         cmp    ebp,SIZE_X*SIZE_Y-1   ; clipping
930
         jl     @f
931
         mov    ebp,SIZE_X*SIZE_Y-1
1245 hidnplayr 932
      @@:
8014 leency 933
         or     ebp,ebp
934
         jg     @f
935
         xor    ebp,ebp
1245 hidnplayr 936
      @@:
8014 leency 937
         lea    edx,[ebp*3+screen]
938
         mov    bl,byte[edx+ecx]
939
         add    eax,ebx
1245 hidnplayr 940
 
8014 leency 941
         mov    ebp,esi
942
         sub    ebp,SIZE_X
943
         cmp    ebp,SIZE_X*SIZE_Y-1   ; clipping
944
         jl     @f
945
         mov    ebp,SIZE_X*SIZE_Y-1
1245 hidnplayr 946
      @@:
8014 leency 947
         or     ebp,ebp
948
         jg     @f
949
         xor    ebp,ebp
1245 hidnplayr 950
      @@:
8014 leency 951
         lea    edx,[ebp*3+screen]
952
         mov    bl,byte[edx+ecx]
953
         add    eax,ebx
1245 hidnplayr 954
 
8014 leency 955
         mov    ebp,esi
956
         add    ebp,SIZE_X
957
         cmp    ebp,SIZE_X*SIZE_Y-1   ; clipping
958
         jl     @f
959
         mov    ebp,SIZE_X*SIZE_Y-1
1245 hidnplayr 960
      @@:
8014 leency 961
         or     ebp,ebp
962
         jg     @f
963
         xor    ebp,ebp
1245 hidnplayr 964
      @@:
8014 leency 965
         lea    edx,[ebp*3+screen]
966
         mov    bl,byte[edx+ecx]
967
         add    eax,ebx
1245 hidnplayr 968
 
8014 leency 969
         shr    eax,2
970
         lea    edx,[esi*3+screen]
971
         or     al,al
972
         jz     @f
973
         dec    al              ; not importand if fire
974
         mov    byte[edx+ecx],al
1245 hidnplayr 975
     @@:
976
 
8014 leency 977
         inc    esi
978
         dec    edi
979
         jnz    .next
1245 hidnplayr 980
 
8014 leency 981
         inc    ecx
982
         cmp    ecx,3
983
         jne    .next_col_coof
984
         pop    ecx
985
         dec     ecx
986
         jnz    .blur
1245 hidnplayr 987
end if
988
ret
989
 
8014 leency 990
mirror:                               ; mirror effect - loseless operation
1245 hidnplayr 991
; in ah - button id = 11, 12, 13
8014 leency 992
         mov      edi,[points_ptr]     ; one real point - triple float
993
         mov      esi,[points_normals_ptr]   ; one 3dvector - triple float dword x,y,z
994
         fninit
995
         mov      ecx,[points_count_var]
1245 hidnplayr 996
 
8014 leency 997
         cmp      ah,11
998
         je       @f
999
         cmp      ah,12
1000
         je       .yn
1001
         cmp      ah,13
1002
         je       .zn
1245 hidnplayr 1003
 
8014 leency 1004
       @@:                              ; neg x
1005
         fld      dword[edi]    ;x
1006
         fchs
1007
         fstp     dword[edi]    ;x
1008
         fld      dword[esi]
1009
         fchs
1010
         fstp     dword[esi]
1011
         add      edi,12
1012
         add      esi,12
1013
         loop     @b
1014
         ret
1245 hidnplayr 1015
       .yn:
8014 leency 1016
         fld      dword[edi+4]  ;y
1017
         fchs
1018
         fstp     dword[edi+4]  ;y
1019
         fld      dword[esi+4]
1020
         fchs
1021
         fstp     dword[esi+4]
1245 hidnplayr 1022
 
8014 leency 1023
         add      edi,12
1024
         add      esi,12
1025
         loop     .yn
1026
         ret
1245 hidnplayr 1027
      .zn:
8014 leency 1028
         fld      dword[edi+8]    ;z
1029
         fchs
1030
         fstp     dword[edi+8]    ;z
1031
         fld      dword[esi+8]
1032
         fchs
1033
         fstp     dword[esi+8]
1245 hidnplayr 1034
 
8014 leency 1035
         add      edi,12
1036
         add      esi,12
1037
         loop     .zn
1245 hidnplayr 1038
ret
1039
 
8014 leency 1040
exchange:                             ; exchange some coords - loseless operation
1041
         mov      edi,[points_ptr]     ; one real point - triple float
1042
         mov      esi,[points_normals_ptr]  ; one 3dvector - triple float dword x,y,z
1043
         fninit                       ; exchange both points and normal vactors coords/coofics
1044
         mov      ecx,[points_count_var]
1245 hidnplayr 1045
 
8014 leency 1046
         cmp      [xchg_flag],1
1047
         je       @f
1048
         cmp      [xchg_flag],2
1049
         je       .zx
1050
         cmp      [xchg_flag],3
1051
         je       .yz
1245 hidnplayr 1052
       @@:
8014 leency 1053
         fld      dword[edi]    ;x
1054
         fld      dword[edi+4]  ;y
1055
         fstp     dword[edi]    ;x
1056
         fstp     dword[edi+4]  ;y
1057
         fld      dword[esi]    ;x
1058
         fld      dword[esi+4]  ;y
1059
         fstp     dword[esi]    ;x
1060
         fstp     dword[esi+4]  ;y
1245 hidnplayr 1061
 
8014 leency 1062
         add      esi,12
1063
         add      edi,12
1064
         loop     @b
1065
         ret
1245 hidnplayr 1066
       .zx:
8014 leency 1067
         fld      dword[edi]    ;x
1068
         fld      dword[edi+8]  ;z
1069
         fstp     dword[edi]    ;x
1070
         fstp     dword[edi+8]  ;z
1071
         fld      dword[esi]    ;x
1072
         fld      dword[esi+8]  ;y
1073
         fstp     dword[esi]    ;x
1074
         fstp     dword[esi+8]  ;y
1245 hidnplayr 1075
 
8014 leency 1076
         add      esi,12
1077
         add      edi,12
1078
         loop     .zx
1079
         ret
1245 hidnplayr 1080
      .yz:
8014 leency 1081
         fld      dword[edi+8]    ;z
1082
         fld      dword[edi+4]    ;y
1083
         fstp     dword[edi+8]    ;z
1084
         fstp     dword[edi+4]    ;y
1085
         fld      dword[esi+8]    ;x
1086
         fld      dword[esi+4]    ;y
1087
         fstp     dword[esi+8]    ;x
1088
         fstp     dword[esi+4]    ;y
1245 hidnplayr 1089
 
8014 leency 1090
         add      edi,12
1091
         add      esi,12
1092
         loop     .yz
1245 hidnplayr 1093
ret
1094
 
1095
;#\\\\\\\\\\\\\\\\\\\\\\\\\comented///////////////////////////////
1096
if 0
8014 leency 1097
calc_attenuation_light:          ;; calculate point to spot_light distance
1245 hidnplayr 1098
; spot light with attenuation    ;; and vector, normalize vector,
8014 leency 1099
                                 ;; calc dot_pr and unlinear color according
1100
                                 ;; to dot_product, write to color buff
1101
.distance equ dword[ebp-4]       ;; color buff in bumpmap for save the mem
1245 hidnplayr 1102
.temp_col equ word[ebp-6]
1103
.vector   equ [ebp-20]
1104
.spot_light_ptr equ dword [ebp-24]
8014 leency 1105
        mov     ebp,esp
1106
        sub     esp,24
1107
        mov     edi,rotated_points_r  ;points_rotated
1108
        mov     edx,point_normals_rotated
1109
        mov     ecx,bumpmap        ; mem area with temp points color list
1110
        xor     ax,ax              ; counter
1111
        mov     esi,spot_light_params
1112
        mov     .spot_light_ptr,esi
1245 hidnplayr 1113
     .again_color:
8014 leency 1114
        push    eax
1115
        lea     ebx,.vector
1116
        mov     esi,.spot_light_ptr ; calc vector fom light to every point
1117
        call    make_vector_r
1118
        ; ebx - ptr to result vector
1119
        fld     dword [ebx]
1120
        fmul    st, st
1121
        fld     dword [ebx+4]
1122
        fmul    st, st
1123
        fld     dword [ebx+8]
1124
        fmul    st, st
1125
        faddp   st1, st
1126
        faddp   st1, st
1127
        fsqrt
1128
        fstp    .distance
1129
        push    edi
1130
        mov     edi,ebx
1131
        call    normalize_vector
1132
        ; edi - normalized distance vector
1133
        mov     esi,edx
1134
        call    dot_product  ; esi first vector, edi second vector
1135
        ; st0 - dot product
1136
        fabs    ; why not ? - think about it
1137
        pop     edi
1138
        fldz
1139
        fcomip  st1
1140
        jbe     @f           ; st1>0
1141
        mov     dword[ecx],0
1142
        mov     word[ecx+4],0
1143
        add     ecx,6
1144
        ffree   st0
1145
        jmp     .update_counters
1245 hidnplayr 1146
  @@:
1147
     ;   pop     edi
1148
 
8014 leency 1149
        ; calc color(with atenuation), write to buff
1150
        ; buff - color of points list
1151
        ; color = ambient+cos(x)*diffuse+(cos(x)^n)*specular
1245 hidnplayr 1152
 
8014 leency 1153
        push    edx
1154
        push    edi
1245 hidnplayr 1155
 
8014 leency 1156
        push    ecx
1157
        push    ebp
1245 hidnplayr 1158
 
1159
;        mov     eax,spot_light_params
8014 leency 1160
        mov     eax,.spot_light_ptr
1161
        movzx   dx,byte[eax+15]
1162
        push    dx             ; shines
1163
        movzx   dx,byte[eax+8] ; b
1164
        push    dx             ; orginal col
1165
        movzx   dx,byte[eax+7] ; g
1166
        push    dx
1167
        movzx   dx,byte[eax+6]   ; r
1168
        push    dx
1169
        movzx   dx,byte[eax+14] ; max col
1170
        push    dx
1171
        movzx   dx,byte[eax+13]
1172
        push    dx
1173
        movzx   dx,byte[eax+12]
1174
        push    dx
1175
        movzx   dx,byte[eax+11] ; min col
1176
        push    dx
1177
        movzx   dx,byte[eax+10]
1178
        push    dx
1179
        movzx   dx,byte[eax+9]
1180
        push    dx
1181
        push    eax            ; dot pr.  (in st0)
1182
        call    calc_one_col
1183
        ; eax - 0x00rrggbb
1184
        ; brightness = 1 - (distance/light.fadezero)^fogness
1185
        ; if brightness  < 0, then brightness = 0
1186
        ; attenuetion equation taken from 3dica tutorial - 1/d^2 isn't perfect
1187
        ; color = color * brightness  ;  fogness = <0.5,2.0>
1188
        pop     ebp
1189
        pop     ecx
1245 hidnplayr 1190
 
8014 leency 1191
        fld    .distance
1192
        mov     esi,.spot_light_ptr
1245 hidnplayr 1193
;        fidiv   word[spot_light_params+16]   ; fadezero
8014 leency 1194
        fidiv   word[esi+16]   ; fadezero
1245 hidnplayr 1195
      ;  fmul    st,st0       ; fogness = 2
8014 leency 1196
        fabs                  ; to be sure
1197
        fchs
1198
        fld1
1199
        faddp
1200
        fld1
1201
        fcomip  st1
1202
        jnbe    @f
1203
        ffree   st0
1204
        fld1
1245 hidnplayr 1205
      @@:
8014 leency 1206
        fld     st            ; st - brightness
1207
        ror     eax,16
1208
        movzx   bx,al        ; al - r
1209
        mov     .temp_col,bx
1210
        fimul   .temp_col
1211
        fistp   word[ecx]
1212
        cmp     word[ecx],0
1213
        jge     @f
1214
        mov     word[ecx],0
1245 hidnplayr 1215
    @@:
1216
   ;     mov     edx,dword[spot_light_params+12]  ; max colors
8014 leency 1217
        mov     edx,dword[esi+12]  ; max colors
1218
        movzx   bx,dl         ; r max
1219
        cmp     word[ecx],bx  ; choose the brightest for r, g, b
1220
        jl      @f
1221
        mov     word[ecx],bx
1245 hidnplayr 1222
    @@:
1223
 
8014 leency 1224
        add     ecx,2
1225
        fld     st
1226
        ror     eax,16
1227
        movzx   bx,ah        ; g
1228
        mov     .temp_col,bx
1229
        fimul   .temp_col
1230
        fistp   word[ecx]
1231
        cmp     word[ecx],0
1232
        jg      @f
1233
        mov     word[ecx],0
1245 hidnplayr 1234
    @@:
8014 leency 1235
        movzx   bx,dh        ; g max
1236
        cmp     word[ecx],bx
1237
        jle     @f
1238
        mov     word[ecx],bx
1245 hidnplayr 1239
    @@:
1240
 
8014 leency 1241
        add     ecx,2
1242
        movzx   bx,al        ; b
1243
        mov     .temp_col,bx
1244
        fimul   .temp_col
1245
        fistp   word[ecx]
1246
        cmp     word[ecx],0
1247
        jg      @f
1248
        mov     word[ecx],0
1245 hidnplayr 1249
    @@:
8014 leency 1250
        shr     edx,16
1251
        movzx   bx,dl        ; b max
1252
        cmp     word[ecx],bx
1253
        jle     @f
1254
        mov     word[ecx],bx
1245 hidnplayr 1255
    @@:
8014 leency 1256
        add     ecx,2
1245 hidnplayr 1257
;end if
1258
;        ror     eax,16
1259
;        movzx   bx,al
1260
;        mov     word[ecx],bx
1261
;        ror     eax,16
1262
;        movzx   bx,ah
1263
;        mov     word[ecx+2],bx
1264
;        xor     ah,ah
1265
;        mov     word[ecx+4],ax
1266
;        add     ecx,6
1267
 
8014 leency 1268
        pop    edi
1269
        pop    edx
1245 hidnplayr 1270
 
1271
    .update_counters:
8014 leency 1272
        add     edx,12  ; normal_size
1273
        add     edi,12   ;6   ; 3d point_coord_size
1245 hidnplayr 1274
 
8014 leency 1275
        pop     eax
1276
        inc     ax
1277
        cmp     ax,[points_count_var]
1278
        jne     .again_color
1245 hidnplayr 1279
 
8014 leency 1280
        add     .spot_light_ptr,18
1281
        cmp     .spot_light_ptr,spot_l_end
1282
        jl      .again_color
1245 hidnplayr 1283
 
8014 leency 1284
        mov     esp,ebp
1245 hidnplayr 1285
ret
1286
end if
1287
;#\\\\\\\\\\\\\\\\\\\\\\\\\comented////////////////////////////////////