Subversion Repositories Kolibri OS

Rev

Rev 7350 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7350 leency 1
;MOS3DE V 0.1 - MENUETOS 3D  Engine V 0.1
2
 
3
; Compile with FASM for MENUET
4
 
5
; this is a very early Version: I'm so happy that it runs at all.
6
; Of course it's a bad ASM style and it can be optimized a lot.
7
 
8
; anyway - I have thought I uploap this so other PPL might optimize it
9
; as well or transform it to something completely diffrent.
10
 
11
; There are some Mouse- and Keyboardhandling Subs and Constructs. They are here
12
; because I will probably use them for the Navigation in a First Person
13
; Perspective Game - which is the goal of this project.
14
; http://www.melog.ch/mos_pub/   dietermarfurt@angelfire.com
15
 
16
; of course you can remove or replace them. It has only linear Texturemapping.
17
; Perspective Correction is a future option.
18
; a flag for multiple Textures selection should be implemented in the
19
; Meshfile Format. As I said - it's a very erarly version.
20
 
21
use32
22
 
23
               org    0x0
24
 
25
               db     'MENUET01'              ; 8 byte id
26
               dd     0x01                    ; header version
27
               dd     START                   ; start of code
28
               dd     I_END                   ; size of image
29
               dd     0x200000                ; memory for app
30
               dd     0x7fff0                 ; esp
31
               dd     0x0 , 0x0               ; I_Param , I_Icon
32
 
33
IMAGE_W		= 320
34
IMAGE_H		= 240
35
 
36
START:                          ; start of execution
37
 
38
    call init_gfx
39
    call draw_window            ; at first, draw the window
40
 
41
gamestart:
42
;   ******* MOUSE CHECK *******
43
    mov eax,37
44
    mov ebx,1     ; check mouseposition
45
    int 0x40
46
 
47
    mov ebx,eax
48
    shr eax,16
49
    and eax,0x0000FFFF  ; mousex
50
    and ebx,0x0000FFFF  ; mousey
51
    mov [mousex],eax
52
    mov [mousey],ebx
53
    cmp eax,5  ; mouse out of window ?
54
    jb check_refresh  ; it will prevent an app-crash
55
    cmp ebx,22
56
    jb check_refresh
57
    cmp eax, IMAGE_W
58
    jg check_refresh
59
    cmp ebx,221
60
    jg check_refresh
61
 
62
    cmp eax,160 ; navigating?
63
    jb m_left
64
    cmp eax,170 ;
65
    jg m_right
66
continue:
67
    cmp ebx,100 ;
68
    jb s_up
69
    cmp ebx,144 ;
70
    jg s_down
71
;   ******* END OF MOUSE CHECK *******
72
check_refresh:
73
 
74
    mov eax,23  ; wait for system event with 10 ms timeout
75
    mov ebx,1   ; wait 10 ms, then continue
76
    int  0x40
77
;    mov eax,11 ; or use this for full speed instead
78
;    int 0x40
79
 
80
    cmp  eax,1                  ; window redraw request ?
81
    je   red2
82
    cmp  eax,2                  ; key in buffer ?
83
    je   key2
84
    cmp  eax,3                  ; button in buffer ?
85
    je   button2
86
 
87
    call clear_screen
88
    call updateworld
89
    call put_screen
90
    ;call log ; used for debugging
91
 
92
    mov edi,[mouseya] ; check flag if a refresh has to be done
93
    cmp edi,1
94
    jne gamestart
95
    mov [mouseya],dword 0
96
 
97
    jmp gamestart
98
 
99
; END OF MAINLOOP
100
 
101
red2:                          ; redraw
102
    call draw_window
103
;    call draw_stuff
104
    jmp gamestart
105
 
106
key2:                          ; key
107
    mov  eax,2
108
    int  0x40
109
    cmp  al,1
110
    je   gamestart     ; keybuffer empty
111
 
112
    cmp ah,27    ; esc=End App
113
    je finish
114
 
115
    cmp  ah,178  ; up
116
    je   s_up
117
    cmp  ah,177  ; down
118
    je   s_down
119
    cmp  ah,176  ; left
120
    je   s_left
121
    cmp  ah,179  ; right
122
    je   s_right
123
 
124
    jmp gamestart ; was any other key
125
 
126
 
127
s_up:             ; walk forward (key or mouse)
128
    mov eax,[vpx]
129
    mov ebx,[vpy]
130
 
131
 
132
    mov ecx,[vheading]
133
    imul ecx,4
134
    add ecx,sinus
135
    mov edi,[ecx]
136
 
137
    mov edx,[vheading]
138
    imul edx,4
139
    add edx,sinus
140
    add edx,3600
141
    cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
142
    jb ok200
143
    sub edx,14400
144
    ok200:
145
    mov esi,[edx]
146
;    sal esi,1  ; edit walking speed here
147
;    sal edi,1
148
 
149
    add eax,edi ; newPx
150
    add ebx,esi ; newPy
151
    mov edi,eax ; newPx / ffff
152
    mov esi,ebx ; newPy / ffff
153
    sar edi,16
154
    sar esi,16
155
    mov ecx,esi
156
    sal ecx,5 ; equal *32
157
    add ecx,edi
158
    add ecx,grid
159
    cmp [ecx],byte 0  ; collision check
160
    jne cannotwalk0
161
    mov [vpx],eax
162
    mov [vpy],ebx
163
    mov [mouseya],dword 1 ; set refresh flag
164
cannotwalk0:
165
    jmp check_refresh
166
 
167
s_down:                    ; walk backward
168
    mov eax,[vpx]
169
    mov ebx,[vpy]
170
 
171
    mov ecx,[vheading]
172
    imul ecx,4
173
    add ecx,sinus
174
    mov edi,[ecx]
175
 
176
    mov edx,[vheading]
177
    imul edx,4
178
    add edx,sinus
179
    add edx,3600
180
    cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
181
    jb ok201
182
    sub edx,14400
183
    ok201:
184
 
185
    mov esi,[edx]
186
;    sal esi,1  ; edit walking speed here
187
;    sal edi,1
188
 
189
    sub eax,edi ; newPx
190
    sub ebx,esi ; newPy
191
    mov edi,eax ; newPx / ffff
192
    mov esi,ebx ; newPy / ffff
193
    sar edi,16
194
    sar esi,16
195
    mov ecx,esi
196
    sal ecx,5
197
    add ecx,edi
198
    add ecx,grid
199
    cmp [ecx],byte 0
200
    jne cannotwalk1
201
    mov [vpx],eax
202
    mov [vpy],ebx
203
    mov [mouseya],dword 1
204
cannotwalk1:
205
    jmp check_refresh
206
 
207
s_left:                                   ; turn left (key)
208
    mov edi,[vheading]  ; heading
209
    add edi,50
210
    cmp edi,1800
211
    jb ok_heading0
212
    sub edi,1800
213
    ok_heading0:
214
    mov [vheading],edi
215
    mov [mouseya],dword 1
216
    jmp check_refresh
217
 
218
s_right:                                  ; turn right
219
    mov edi,[vheading]
220
    sub edi,50
221
    cmp edi,-1
222
    jg ok_heading1
223
    add edi,1800
224
    ok_heading1:
225
    mov [vheading],edi
226
    mov [mouseya],dword 1
227
    jmp check_refresh
228
 
229
m_left:                                   ; turn left (mouse)
230
    mov edi,[vheading]  ; heading
231
    mov ecx,160
232
    sub ecx,eax
233
    sar ecx,2
234
    add edi,ecx
235
    cmp edi,1800
236
    jb ok_heading2
237
    sub edi,1800
238
    ok_heading2:
239
    mov [vheading],edi
240
    mov [mouseya],dword 1
241
    jmp continue    ; allow both: walk and rotate
242
 
243
m_right:                                  ; turn right
244
    mov edi,[vheading]
245
    sub eax,170
246
    sar eax,2
247
    sub edi,eax
248
    cmp edi,-1
249
    jg ok_heading3
250
    add edi,1800
251
    ok_heading3:
252
    mov [vheading],edi
253
    mov [mouseya],dword 1
254
    jmp continue
255
 
256
 
257
 
258
  button2:                       ; button
259
    mov  eax,17                  ; get id
260
    int  0x40
261
    cmp  ah,1                   ; button id=1 ?
262
    jne  gamestart
263
 
264
; eo GAME mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
265
finish:
266
    mov  eax,-1                 ; close this program
267
    int  0x40
268
 
269
 
270
;   *********************************************
271
;   *******  WINDOW DEFINITIONS AND DRAW ********
272
;   *********************************************
273
 
274
 
275
draw_window:
276
 
277
    mov  eax,12                   ; function 12:tell os about windowdraw
278
    mov  ebx,1                    ; 1, start of draw; 2 - end
279
    int  0x40
280
 
281
	mov eax, 48                   ; get skin height
282
	mov ebx, 4
283
	int  0x40
284
 
285
	lea  ecx,[eax + (119 shl 16) + IMAGE_H + 4]
286
    mov  ebx,192*65536+IMAGE_W+9  ; [x start] *65536 + [x size]
287
    mov  edx,0x74000000           ; skinned window, not resizable
288
    mov  edi,labelt               ; window title
289
    mov  eax,0                    ; function 0 : define and draw window
290
    int  0x40
291
 
292
    mov  eax,12
293
    mov  ebx,2
294
    int  0x40
295
 
296
    ret
297
 
298
 
299
; ---------------------------------------------------------------------
300
init_gfx:
301
 
302
;  Pwidth = 63 Shl 16   ;original texture width in pixels -1 shl 16
303
;  Pheight = 63 Shl 16 ;original texture height in pixels -1 shl 16
304
 
305
   mov [pwidth],dword 63
306
   shl dword[pwidth],16
307
   mov [pheight],dword 63
308
   shl dword[pheight],16
309
 
310
;; Read in a mesh
311
   mov eax,0  ; tex1+4
312
   mov edi,anz
313
   add edi,4    ; beginning of mesh data
314
 
315
;using a copy will allow inverse kinematic transformations (future option)
316
 
317
   readmesh:
318
   mov edx,eax
319
   add edx,a_xwww ; desti
320
   mov ecx,[edi] ; value in ecx
321
   mov [edx],ecx
322
   add edi,4
323
   ;---
324
   mov edx,eax
325
   add edx,a_ywww ; desti
326
   mov ecx,[edi] ; value in ecx
327
   mov [edx],ecx
328
   add edi,4
329
   ;---
330
   mov edx,eax
331
   add edx,a_zwww ; desti
332
   mov ecx,[edi] ; value in ecx
333
   mov [edx],ecx
334
   add edi,4
335
   ;---
336
 
337
   add eax,4
338
   cmp edi,eo_mesh
339
   jl readmesh
340
 
341
;  zoom=-500
342
   mov [zoom],dword -500
343
 
344
ret
345
;------------------------------------------------------------------
346
 
347
 
348
 
349
log:
350
;write some Variable info to screen (used for debugging)
351
 pusha
352
  mov edi,wonder ;a_xwww
353
  ;add edi,200
354
  mov [remecx], dword 24
355
  print:
356
  mov eax,47
357
  mov ebx,0x000f0000
358
  ;mov ebx,0x000f0100  ; hex
359
  mov ecx,[edi]
360
  mov edx,[remecx]
361
  or edx,0x000C0000
362
  mov esi,0x00ff0000
363
  int 0x40
364
  add [remecx],dword 8
365
  add edi,dword 4
366
  cmp [remecx], dword 250
367
  jl print
368
 popa
369
ret
370
 
371
 
372
; ---------------------------------------------------------------------
373
;                          UPDATE WORLD
374
; ---------------------------------------------------------------------
375
 
376
 updateworld:
377
 
378
  mov edx,[a_xw]
379
 
380
; Miny% = 32767
381
; Maxy% = 0
382
  mov [miny],dword 32737
383
  mov [maxy],dword 0
384
 
385
; Color 0,0,0 ; clear screen - l8er
386
; Rect 0,0,320,240,1
387
 
388
; a=a+1.0 ; automatic rotation...
389
  add [a],dword 10
390
  cmp [a],dword 3598
391
  jl ok360
392
  mov [a],dword 0
393
  ok360:
394
 
395
; If a>359.9 Then a=0
396
; alpha=a
397
; beta=a
398
; gamma=a+a Mod 360
399
 
400
  mov eax,[a]
401
  mov [alpha],eax
402
  mov [beta], eax
403
  mov [gamma],eax
404
  add [gamma],eax
405
  cmp [gamma],dword 3599
406
  jl ok360_2
407
  sub [gamma],dword 3600
408
  ok360_2:
409
 
410
; mausy#=0.1+(MouseY()/50.0) ; >>>>>>l8er
411
 
412
  mov eax,[alpha]
413
  mov [alphacopy],eax
414
  mov eax,[beta]
415
  mov [betacopy],eax
416
  mov eax,[gamma]
417
  mov [gammacopy],eax
418
 
419
; For i=0 To anz ; do rotation and projection  etc
420
  mov esi,0
421
  for_i:
422
 
423
; *****************************
424
;    ROTATE pitch jaw roll...
425
; *****************************
426
 
427
;;  xl1#=zwww(i)*Sin(gamma)+xwww(i)*Cos(gamma)
428
    mov eax,esi
429
    imul eax,4
430
    add eax,a_zwww
431
    mov ebx,[eax]
432
    mov eax,[gammacopy]
433
    call get_sinus
434
    imul ebx,[eax]
435
    mov [tempdiv],ebx ; is zwww(i)*sin(gamma)
436
 
437
    mov eax,esi
438
    imul eax,4
439
    add eax,a_xwww
440
    mov ebx,[eax]
441
 
442
    mov eax,[gammacopy]
443
    call get_cosinus
444
    imul ebx,[eax]  ; is xwww*cos(gamma
445
 
446
    add ebx,[tempdiv]
447
    mov eax,ebx
448
    ;or eax,1
449
    cdq
450
     mov ecx,6553
451
     idiv ecx
452
    mov [xl1],eax
453
 
454
 
455
;;  yl1#=ywww(i)
456
    mov eax,esi
457
    imul eax,4
458
    add eax,a_ywww
459
    mov ebx,[eax]
460
    mov [yl1],ebx
461
 
462
 
463
;;  zl1#=zwww(i)*Cos(gamma)-xwww(i)*Sin(gamma)
464
    mov eax,esi
465
    imul eax,4
466
    add eax,a_zwww
467
    mov ebx,[eax]
468
    mov eax,[gammacopy]
469
    call get_cosinus
470
    imul ebx,[eax]
471
    mov [tempdiv],ebx ; is zwww(i)*cos(gamma)
472
 
473
    mov eax,esi
474
    imul eax,4
475
    add eax,a_xwww
476
    mov ebx,[eax]
477
 
478
    mov eax,[gammacopy]
479
    call get_sinus
480
    imul ebx,[eax]  ; is xwww*sin(gamma
481
 
482
    sub [tempdiv],ebx
483
    mov eax,[tempdiv]
484
    ;or eax,1
485
    cdq
486
    mov ecx,6553 ; once 6500
487
    idiv ecx
488
    mov [zl1],eax
489
 
490
 
491
 
492
;
493
;-----------------------------------------------------------------------
494
;;  xl2#=xl1
495
    mov eax,[xl1]
496
    mov [xl2],eax
497
 
498
;;  yl2#=yl1*Cos(beta)-zl1*Sin(beta)
499
    mov ebx,[yl1]
500
    mov eax,[betacopy]
501
    call get_cosinus
502
    imul ebx,[eax]
503
    mov [tempdiv],ebx ; is yl1*cos(beta)
504
 
505
    mov ebx,[zl1]  ; zl1
506
 
507
    mov eax,[betacopy]
508
    call get_sinus
509
    imul ebx,[eax]  ; is zl1*sin(beta
510
 
511
    sub [tempdiv],ebx
512
    mov eax,[tempdiv]
513
    ;or eax,1
514
    cdq
515
    mov ecx,6553
516
    idiv ecx
517
    mov [yl2],eax
518
 
519
 
520
 
521
;;  zl2#=yl1*Sin(beta)+zl1*Cos(beta)
522
    mov ebx,[yl1]
523
    mov eax,[betacopy]
524
    call get_sinus
525
    imul ebx,[eax]
526
    mov [tempdiv],ebx ; is yl1*sin(beta)
527
 
528
    mov ebx,[zl1]  ; zl1
529
 
530
    mov eax,[betacopy]
531
    call get_cosinus
532
    imul ebx,[eax]  ; is zl1*cos(beta
533
 
534
     add ebx,[tempdiv]
535
     mov eax,ebx
536
    ;or eax,1
537
    cdq
538
    mov ecx,6553
539
    idiv ecx
540
    mov [zl2],eax
541
 
542
 
543
;-----------------------------------------------------------------------
544
;;  xl3#=(yl2*Sin(alpha)+xl2*Cos(alpha))
545
    mov ebx,[yl2]
546
    mov eax,[alphacopy]
547
    call get_sinus
548
    imul ebx,[eax]
549
    mov [tempdiv],ebx ; is yl2*sin(alpha)
550
 
551
    mov ebx,[xl2]  ; xl2
552
    mov eax,[alphacopy]
553
    call get_cosinus
554
    imul ebx,[eax]  ; is xl2*cos(alpha
555
 
556
    add ebx,[tempdiv]
557
    mov eax,ebx
558
    ;or eax,1
559
    cdq
560
    mov ecx,6553
561
    idiv ecx
562
    mov [xl3],eax
563
 
564
 
565
;;  yl3#=(yl2*Cos(alpha)-xl2*Sin(alpha))
566
    mov ebx,[yl2]
567
    mov eax,[alphacopy]
568
    call get_cosinus
569
    imul ebx,[eax]
570
    mov [tempdiv],ebx ; is yl2*cos(alpha)
571
 
572
    mov ebx,[xl2]  ; xl2
573
    mov eax,[alphacopy]
574
    call get_sinus
575
    imul ebx,[eax]  ; is xl2*sin(alpha
576
 
577
    sub [tempdiv],ebx
578
    mov eax,[tempdiv]
579
    ;or eax,1
580
    cdq
581
    mov ecx,6553
582
    idiv ecx
583
    mov [yl3],eax
584
 
585
 
586
;;  zl3#=(zl2)
587
    mov eax,[zl2]
588
    mov [zl3],eax
589
 
590
;-----------------------------------------------------------------------
591
 
592
; *********************
593
;  PROJECTING 3D to 2D
594
 
595
;  If yloc# - Zoom <> 0 Then yloc = Int(yl3 ) * 200 / (zl3 - Zoom)
596
   ;-------
597
   mov ecx,[zl3]
598
   sub ecx,[zoom]
599
   mov eax,[yl3]
600
   imul eax,200
601
   or eax,1
602
   cdq
603
   idiv ecx
604
   ;mov eax,[yl3] ; no perpective
605
   mov [yloc],eax
606
   ;------
607
 
608
 ; If xloc# - Zoom <> 0 Then xloc = Int(xl3 ) * 200 / (zl3 - Zoom)
609
 
610
   ;------
611
   mov ecx,[zl3]
612
   sub ecx,[zoom]
613
   mov eax,[xl3]
614
   imul eax,200
615
   or eax,1
616
   cdq
617
   idiv ecx
618
   ;mov eax,[xl3] ; no perspective
619
   mov [xloc],eax
620
   ;------
621
 
622
;  xw(i)=((mausy#)*xloc) +160
623
;  yw(i)=((mausy#)*yloc) +120
624
;  zw(i)=(zl3+256)
625
 
626
   mov eax,[mousey] ; define scaling
627
   mov [factor],eax
628
   cmp eax,32000
629
   jl positivemousey
630
   mov [factor],dword 10
631
   jmp less220
632
   positivemousey:
633
   cmp eax,10
634
   jg more20
635
   mov [factor],dword 10
636
   jmp less220
637
   more20:
638
   cmp eax,220
639
   jl less220
640
   mov [factor],dword 220
641
   less220:
642
 
643
   mov eax,esi ; i...
644
   imul eax,4
645
 
646
   mov ecx,[xloc]
647
   mov eax,esi
648
   imul eax,4
649
   mov ebx,a_xw
650
   add ebx,eax
651
   imul ecx,[factor]
652
   sar ecx,5
653
   mov [ebx],ecx
654
   add [ebx],dword 160
655
 
656
   mov ecx,[yloc]
657
;   mov eax,esi
658
;   imul eax,4
659
   mov ebx,a_yw
660
   add ebx,eax
661
   imul ecx,[factor]
662
   sar ecx,5
663
   mov [ebx],ecx
664
   add [ebx],dword 120
665
 
666
   mov ecx,[zl3] ; used for z sorting
667
   mov ebx,a_zw
668
   add ebx,eax
669
   mov [ebx],ecx
670
   add [ebx],dword 256
671
 
672
; Next
673
  inc esi
674
  cmp esi,[anz]
675
  jle for_i
676
;---------------
677
 
678
 
679
  mov [sorted_quads],dword 0
680
 
681
 
682
; ; z-sorting...
683
; For i=0 To 10000 ; clear old info
684
;  zbuffer(i)=-1
685
; Next
686
  mov eax,zbuffer
687
  mov ebx,eax
688
  add ebx,40000
689
  clear_zbuffer:
690
  mov [eax],dword 1000000
691
  add eax,4
692
  cmp eax,ebx
693
  jle clear_zbuffer
694
 
695
 
696
 
697
; For i=0 To anz-3 Step 4
698
  mov eax,0
699
  mov ebx,[anz]
700
  for_i_0_to_anz:
701
 
702
;  If zw(i)>=0 ; clip Quads behind Camera
703
   mov ecx,eax
704
   imul ecx,4
705
   add ecx,a_zw
706
   mov edx,[ecx]
707
   cmp edx,0
708
   jle behindcamera
709
 
710
;   zwmax=zw(i)
711
    mov esi,edx
712
 
713
;   ;find quads internal most far point
714
;   If zwmax
715
;   If zwmax
716
;   If zwmax
717
    ; skip this for debugging
718
    ; jmp no_internal_sorting
719
    cmp esi,[ecx+4]
720
    jge checkmore1
721
    mov esi,[ecx+4]
722
    checkmore1:
723
 
724
    cmp esi,[ecx+8]
725
    jge checkmore2
726
    mov esi,[ecx+8]
727
    checkmore2:
728
 
729
    cmp esi,[ecx+12]
730
    jge checkmore3
731
    mov esi,[ecx+12]
732
    checkmore3:
733
 
734
    no_internal_sorting:
735
 
736
    mov [i],eax ; anz-ID in [i] (not times 4)
737
    push eax
738
    push ebx
739
 
740
;   While zbuffer(zwmax)<>-1 And zwmax<10000
741
;    zwmax=zwmax+1
742
;   Wend
743
    mov eax,esi  ; is actual z/poititon of point (used for z-order)
744
    imul eax,4
745
 
746
    findslot:
747
    mov ebx,eax
748
    add ebx,zbuffer
749
    cmp [ebx],dword 1000000
750
    je found_empty_slot
751
    add eax,4
752
    cmp eax,40000
753
    jl findslot
754
    found_empty_slot:
755
 
756
;   zbuffer(zwmax)=i
757
    inc dword[sorted_quads]  ; check slot writing
758
 
759
    mov ecx,[i]
760
    mov [ebx],ecx
761
 
762
    pop ebx
763
    pop eax
764
 
765
;  EndIf
766
   behindcamera:
767
; Next
768
  add eax,4
769
  cmp eax,[anz]  ;ebx
770
  jl for_i_0_to_anz
771
  ;----------------
772
 
773
  ;mov [rendered_quads],dword 0 ; debugging...
774
 
775
; For i2=10000 To 0 Step -1 ; reading quads in z-order from far to near
776
  mov eax,40000
777
  mov ebx,0
778
  for_i_0_to_10000:
779
 
780
 
781
;  i=zbuffer(i2)
782
   mov edx,eax
783
   add edx,zbuffer
784
   mov ecx,[edx] ; i...
785
 
786
;  If i>-1 And i< anz-2 ; if it isn't -1 then it's a Quad Point 1 ID
787
   cmp ecx,1000000
788
   je is_empty_slot
789
 
790
    ;inc dword[rendered_quads] ; used for debugging
791
 
792
;   ;***Mapping***
793
 
794
;   ;GetPolygonPoints(i)
795
;   ;FindSmallLargeY()
796
 
797
    mov [ilocal],ecx
798
    call get_polygon_points
799
    call find_small_large_y
800
 
801
;   X1% = Polypoints%(0, 0)
802
    mov edi,[polypoints]
803
    mov [x1],edi
804
;   Y1% = Polypoints%(0, 1)
805
    mov edi,[polypoints+4]
806
    mov [y1],edi
807
;   X2% = Polypoints%(1, 0)
808
    mov edi,[polypoints+8]
809
    mov [x2],edi
810
;   Y2% = Polypoints%(1, 1)
811
    mov edi,[polypoints+12]
812
    mov [y2],edi
813
 
814
;   ScanConvert(X1%, Y1%, X2%, Y2%, 1)     ;scan top of picture
815
    mov [pside],dword 1
816
    call scan_convert
817
 
818
;   X1% = Polypoints%(1, 0)
819
    mov edi,[polypoints+8]
820
    mov [x1],edi
821
;   Y1% = Polypoints%(1, 1)
822
    mov edi,[polypoints+12]
823
    mov [y1],edi
824
;   X2% = Polypoints%(2, 0)
825
    mov edi,[polypoints+16]
826
    mov [x2],edi
827
;   Y2% = Polypoints%(2, 1)
828
    mov edi,[polypoints+20]
829
    mov [y2],edi
830
 
831
;   ScanConvert(X1%, Y1%, X2%, Y2%, 2)   ;scan Right of picture
832
    mov [pside],dword 2
833
    call scan_convert
834
 
835
;   X1% = Polypoints%(2, 0)
836
    mov edi,[polypoints+16]
837
    mov [x1],edi
838
;   Y1% = Polypoints%(2, 1)
839
    mov edi,[polypoints+20]
840
    mov [y1],edi
841
;   X2% = Polypoints%(3, 0)
842
    mov edi,[polypoints+24]
843
    mov [x2],edi
844
;   Y2% = Polypoints%(3, 1)
845
    mov edi,[polypoints+28]
846
    mov [y2],edi
847
 
848
;   ScanConvert(X1%, Y1%, X2%, Y2%, 3)  ;scan bottom of picture
849
    mov [pside],dword 3
850
    call scan_convert
851
 
852
;   X1% = Polypoints%(3, 0)
853
    mov edi,[polypoints+24]
854
    mov [x1],edi
855
;   Y1% = Polypoints%(3, 1)
856
    mov edi,[polypoints+28]
857
    mov [y1],edi
858
;   X2% = Polypoints%(0, 0)
859
    mov edi,[polypoints]
860
    mov [x2],edi
861
;   Y2% = Polypoints%(0, 1)
862
    mov edi,[polypoints+4]
863
    mov [y2],edi
864
 
865
;   ScanConvert(X1%, Y1%, X2%, Y2%, 4)    ;scan Left of picture
866
    mov [pside],dword 4
867
    call scan_convert
868
 
869
;   TextureMap()
870
     call texture_map
871
 
872
;  EndIf
873
   is_empty_slot:
874
 
875
; Next
876
  sub eax,4
877
  cmp eax,0  ;ebx
878
  jge for_i_0_to_10000
879
 
880
;Wend
881
ret
882
 
883
;End
884
 
885
 
886
 
887
 
888
; ---------------------------------------------------------------------
889
 
890
get_sinus:
891
 imul eax,4 ; expects degree*10
892
 add eax,sinus
893
ret
894
 
895
get_cosinus:
896
 imul eax,4 ; expects degree*10
897
 add eax,sinus
898
 add eax,10804
899
 cmp eax,eosinus
900
 jl ok3600sub
901
 sub eax,14400
902
 ok3600sub:
903
ret
904
 
905
 
906
 
907
 
908
 
909
 
910
;; ------------------ texture mapping functions-----------------------------
911
 
912
;Function GetPolygonPoints(ilocal%) ; initially read in a rectangle
913
get_polygon_points:
914
pusha
915
; For Count% = 0 To 3
916
;  Polypoints%(Count%, 0) = xw(ilocal%+Count%)
917
;  Polypoints%(Count%, 1) = yw(ilocal%+Count%)
918
; Next
919
  mov eax,0
920
; ---
921
  count_0_3:
922
 
923
  mov ebx,eax
924
  imul ebx,8         ; count
925
  add ebx,polypoints  ; desti adr
926
  mov ecx,eax
927
  add ecx,[ilocal]
928
  imul ecx,4
929
  add ecx,a_xw      ; src adr
930
  mov edx,[ecx]
931
  mov [ebx],edx
932
  ; ----
933
  add ebx,4          ; desti 2
934
  mov ecx,eax
935
  add ecx,[ilocal]
936
  imul ecx,4
937
  add ecx,a_yw       ; src 2
938
  mov edx,[ecx]
939
  mov [ebx],edx
940
  ; ----
941
  inc eax
942
  cmp eax,4
943
  jl count_0_3
944
 
945
;End Function
946
 popa
947
ret
948
 
949
; -------------------------------------------------------------------------
950
 
951
;Function FindSmallLargeY()
952
find_small_large_y:
953
 pusha
954
; For Count% = 0 To 3
955
  mov eax,0
956
  for03b:
957
 
958
;  Ycoord% = Polypoints%(Count%, 1)
959
   mov ebx,eax
960
   imul ebx,8
961
   add ebx,4
962
   add ebx,polypoints
963
   mov ecx,[ebx]
964
 
965
;  If Ycoord% < Miny% Then       ; is this the New lowest y co-ord?
966
;   Miny% = Ycoord%             ; Yes...
967
;  End If
968
   cmp ecx,[miny]
969
   jge isge0
970
   mov [miny],ecx
971
   isge0:
972
 
973
;  If Ycoord% > Maxy% Then       ; is this the New highest y co-ord?
974
;   Maxy% = Ycoord%             ; Yes...
975
;  End If
976
   cmp ecx,[maxy]
977
   jle isge1
978
   mov [maxy],ecx
979
   isge1:
980
 
981
; Next
982
  inc eax
983
  cmp eax,4
984
  jl for03b
985
 
986
;End Function
987
 popa
988
ret
989
 
990
; -------------------------------------------------------------------------
991
 
992
 
993
;Function ScanConvert (X1%, Y1%, X2%, Y2%, Pside)
994
scan_convert:
995
 pusha
996
; If Y2% < Y1% Then
997
  mov eax,[y1]
998
  mov ebx,[y2]
999
  cmp eax,ebx
1000
  jl l_else0
1001
 
1002
;  temp%=X1% : X1%=X2% : X2%=temp%
1003
;  temp%=Y1% : Y1%=Y2% : Y2%=temp%
1004
;  Lineheight% = (Y2% - Y1%)
1005
;  ScanLeftSide(X1%, X2%, Y1%, Lineheight%, Pside)
1006
   mov [y1],ebx ; swap y,x
1007
   mov [y2],eax
1008
    mov eax,[x1]
1009
    mov ebx,[x2]
1010
   mov [x1],ebx
1011
   mov [x2],eax
1012
   mov eax,[y1]
1013
    mov ebx,[y2]
1014
    ; eo swap
1015
   sub ebx,eax
1016
    mov [lineheight],ebx
1017
    call scan_left_side
1018
   jmp l_endif0
1019
 
1020
; Else
1021
  l_else0:
1022
 
1023
;  Lineheight% = (Y2% - Y1%)
1024
;  ScanRightSide(X1%, X2%, Y1%, Lineheight%, Pside)
1025
   sub ebx,eax
1026
   mov [lineheight],ebx
1027
   call scan_right_side
1028
 
1029
; End If
1030
  l_endif0:
1031
;End Function
1032
 popa
1033
ret
1034
; -------------------------------------------------------------------------
1035
 
1036
 
1037
;Function ScanLeftSide (X1%, X2%, Ytop%, Lineheight%, Pside)
1038
 scan_left_side:
1039
  pusha
1040
 
1041
  mov eax,[y1]
1042
  mov [ytop],eax
1043
 
1044
; Lineheight% = Lineheight% + 1       ; prevent divide by zero
1045
  inc dword[lineheight]
1046
; Xadd = (X2% - X1%) Shl 16
1047
  mov edi,[x2]
1048
  sub edi,[x1]
1049
  sal edi,16
1050
 
1051
; Xadd = Xadd / Lineheight%
1052
  mov eax,edi ; whole
1053
  cdq
1054
  mov ebx,[lineheight] ; divisor
1055
; or ebx,1
1056
  idiv ebx ; result now in eax
1057
  mov [v_xadd],eax
1058
 
1059
; ------------
1060
; If Pside = 1 Then
1061
  cmp [pside],dword 1
1062
  jne psidenot10
1063
 
1064
;  Px = Pwidth% - 1
1065
;  Py = 0
1066
   mov edi,[pwidth]
1067
   mov esi,edi
1068
   sub esi,1
1069
   mov [px],esi
1070
   mov [py],dword 0
1071
;  Pxadd = -Pwidth%  / Lineheight%
1072
;  Pyadd = 0
1073
   mov eax,0
1074
   sub eax,[pwidth]
1075
   cdq
1076
   mov ebx,[lineheight] ; divisor
1077
   ;or ebx,1
1078
   idiv ebx ; result now in eax
1079
   mov [pxadd],eax
1080
   mov [pyadd],dword 0
1081
; End If
1082
  psidenot10:
1083
 
1084
; ------------
1085
; If Pside = 2 Then
1086
  cmp [pside],dword 2
1087
  jne psidenot20
1088
 
1089
;  Px = Pwidth%
1090
;  Py = Pheight%
1091
   mov edi,[pwidth]
1092
   mov esi,[pheight]
1093
   mov [px],edi
1094
   mov [py],esi
1095
;  Pxadd = 0
1096
;  Pyadd = -Pheight%  / Lineheight%
1097
   mov [pxadd],dword 0
1098
   mov eax,0
1099
   sub eax,[pheight]
1100
   cdq
1101
   mov ebx,[lineheight] ; divisor
1102
   ;or ebx,1
1103
   idiv ebx ; result now in eax
1104
   mov [pyadd],eax
1105
; End If
1106
  psidenot20:
1107
 
1108
; ------------
1109
; If Pside = 3 Then
1110
  cmp [pside],dword 3
1111
  jne psidenot30
1112
;  Px = 0
1113
;  Py = Pheight%
1114
   mov [px],dword 0
1115
   mov edi,[pheight]
1116
   mov [py],edi
1117
;  Pxadd = Pwidth%  / Lineheight%
1118
;  Pyadd = 0
1119
   mov eax,[pwidth]
1120
   cdq
1121
   mov ebx,[lineheight] ; divisor
1122
   ;or ebx,1
1123
   idiv ebx ; result now in eax
1124
   mov [pxadd],eax
1125
   mov [pyadd],dword 0
1126
; End If
1127
  psidenot30:
1128
 
1129
; ------------
1130
; If Pside = 4 Then
1131
  cmp [pside],dword 4
1132
  jne psidenot40 ; jne
1133
;  Px = 0
1134
;  Py = 0
1135
   mov [px],dword 0
1136
   mov [py],dword 0
1137
;  Pxadd = 0
1138
;  Pyadd = Pheight%  / Lineheight%
1139
   mov [pxadd],dword 0
1140
   mov eax,[pheight]
1141
   cdq
1142
   mov ebx,[lineheight] ; divisor
1143
   ;or ebx,1
1144
   idiv ebx
1145
   mov [pyadd],eax
1146
; End If
1147
  psidenot40:
1148
; ------------
1149
; x = X1% Shl 16
1150
  mov edx,[x1] ; used for x
1151
  mov edi,[px] ; used for px
1152
  mov esi,[py] ; used for py
1153
  sal edx,16
1154
  ;mov [x],edx
1155
;------
1156
; For y% = 0 To Lineheight%
1157
  mov eax,0
1158
  for0lineheight0:
1159
 
1160
;  Ytopy%=Ytop%+y%
1161
   mov ebx,[ytop]
1162
   mov [ytopy],ebx
1163
   add [ytopy],eax
1164
 
1165
;  If Ytopy%<0 Then Ytopy%=0 ; prevent read pre array
1166
   cmp [ytopy], dword 0
1167
   jge isnot00
1168
   mov [ytopy],dword 0
1169
   isnot00:
1170
 
1171
;  Lefttable(Ytopy%, 0) = x Sar 16    ;polygon x
1172
   mov ecx,[ytopy]
1173
   imul ecx,16
1174
   add ecx,lefttable
1175
   mov [ecx],edx
1176
   sar dword[ecx],16
1177
 
1178
;  Lefttable(Ytopy%, 1) = Px          ;picture x
1179
   add ecx,4
1180
   mov [ecx],edi
1181
 
1182
;  Lefttable(Ytopy%, 2) = Py          ;picture y
1183
   add ecx,4
1184
   mov [ecx],esi
1185
 
1186
;  x = x + Xadd                       ;Next polygon x
1187
;  Px = Px + Pxadd                    ;Next picture x
1188
;  Py = Py + Pyadd                    ;Next picture y
1189
   add edx,[v_xadd]
1190
   add edi,[pxadd]
1191
   add esi,[pyadd]
1192
 
1193
;------
1194
; Next
1195
  inc eax
1196
  cmp eax,[lineheight]
1197
  jl for0lineheight0
1198
 
1199
 
1200
;End Function
1201
 popa
1202
ret
1203
 
1204
; -------------------------------------------------------------------------
1205
 
1206
; -------------------------------------------------------------------------
1207
 
1208
;Function ScanRightSide (X1%, X2%, Ytop%, Lineheight%, Pside)
1209
 scan_right_side:
1210
  pusha
1211
  mov eax,[y1]
1212
  mov [ytop],eax
1213
 
1214
; Lineheight% = Lineheight% + 1       ; prevent divide by zero
1215
  inc dword[lineheight]
1216
 
1217
; Xadd = (X2% - X1%) Shl 16
1218
  mov edi,[x2]
1219
  sub edi,[x1]
1220
  sal edi,16
1221
; Xadd = Xadd / Lineheight%
1222
  mov eax,edi ; whole
1223
  cdq
1224
  mov ebx,[lineheight] ; divisor
1225
  ;or ebx,1
1226
  idiv ebx ; result now in eax
1227
  mov [v_xadd],eax
1228
 
1229
 
1230
 
1231
 ; ------------
1232
; If Pside = 1 Then
1233
  cmp [pside],dword 1
1234
  jne psidenot11
1235
;  Px = 0
1236
;  Py = 0
1237
   mov [px],dword 0
1238
   mov [py],dword 0
1239
;  Pxadd = Pwidth% / Lineheight%
1240
;  Pyadd = 0
1241
   mov eax,[pwidth]
1242
   cdq
1243
   mov ebx,[lineheight] ; divisor
1244
   ;or ebx,1
1245
   idiv ebx ; result now in eax
1246
   mov [pxadd],eax
1247
   mov [pyadd],dword 0
1248
; End If
1249
  psidenot11:
1250
; ------------
1251
 
1252
; If Pside = 2 Then
1253
  cmp [pside],dword 2
1254
  jne psidenot21
1255
;  Px = Pwidth%
1256
;  Py = 0
1257
   mov edi,[pwidth]
1258
   mov [px],edi
1259
   mov [py],dword 0
1260
;  Pxadd = 0
1261
;  Pyadd = Pheight% / Lineheight%
1262
   mov [pxadd],dword 0
1263
   mov eax,[pheight]
1264
   cdq
1265
   mov ebx,[lineheight] ; divisor
1266
   ;or ebx,1
1267
   idiv ebx ; result now in eax
1268
   mov [pyadd],eax
1269
; End If
1270
  psidenot21:
1271
; ------------
1272
 
1273
; If Pside = 3 Then
1274
  cmp [pside],dword 3
1275
  jne psidenot31
1276
;  Px = Pwidth%
1277
;  Py = Pheight%
1278
   mov edi,[pwidth]
1279
   mov [px],edi
1280
   mov esi,[pheight]
1281
   mov [py],esi
1282
;  Pxadd = -Pwidth% / Lineheight%
1283
;  Pyadd = 0
1284
   mov eax,0
1285
   sub eax,[pwidth]
1286
   cdq
1287
   mov ebx,[lineheight] ; divisor
1288
   ;or ebx,3  ; prevent div 0
1289
   idiv ebx ; result now in eax
1290
   mov [pxadd],eax
1291
   mov [pyadd],dword 0
1292
; End If
1293
  psidenot31:
1294
 
1295
; ------------
1296
; If Pside = 4 Then
1297
  cmp [pside],dword 4
1298
  jne psidenot41 ; jne
1299
;  Px = 0
1300
;  Py = Pheight%
1301
   mov [px],dword 0
1302
   mov esi,[pheight]
1303
   mov [py],esi
1304
;  Pxadd = 0
1305
;  Pyadd = -Pheight% / Lineheight%
1306
   mov [pxadd],dword 0
1307
   mov eax,0
1308
   sub eax,[pheight]
1309
   cdq
1310
   mov ebx,[lineheight] ; divisor
1311
   ;or ebx,1
1312
   idiv ebx
1313
   mov [pyadd],eax
1314
; End If
1315
  psidenot41:
1316
  push edx
1317
  push edi
1318
  push esi
1319
; ------------
1320
; x = X1% Shl 16
1321
  mov edx,[x1] ; used for x
1322
  mov edi,[px] ; used for px
1323
  mov esi,[py] ; used for py
1324
  sal edx,16
1325
 
1326
cmp [lineheight],dword 100  ; lineheight is up to 33 mio ???
1327
jle okok
1328
mov eax,[lineheight]
1329
mov [wonder+4],eax
1330
okok:
1331
 
1332
;------
1333
; For y% = 0 To Lineheight%
1334
  mov eax,0
1335
  for0lineheight1b:
1336
; Ytopy%=Ytop%+y%
1337
  mov ebx,[ytop]
1338
  mov [ytopy],ebx
1339
  add [ytopy],eax
1340
 
1341
;  If Ytopy%<0 Then Ytopy%=0  ; prevent read pre array
1342
   cmp [ytopy], dword 0
1343
   jg isnot01
1344
   mov [ytopy],dword 0
1345
   isnot01:
1346
;  righttable(Ytopy%, 0) = x Sar 16    ;polygon x
1347
   mov ecx,[ytopy]
1348
   imul ecx,16
1349
   add ecx,righttable
1350
   mov [ecx],edx
1351
   sar dword[ecx],16
1352
 
1353
;  righttable(Ytopy%, 1) = Px          ;picture x
1354
   add ecx,4
1355
   mov [ecx],edi
1356
;  righttable(Ytopy%, 2) = Py          ;picture y
1357
   add ecx,4
1358
   mov [ecx],esi
1359
;  x = x + Xadd                       ;Next polygon x
1360
;  Px = Px + Pxadd                    ;Next picture x
1361
;  Py = Py + Pyadd                    ;Next picture y
1362
   add edx,[v_xadd]
1363
   add edi,[pxadd]
1364
   add esi,[pyadd]
1365
;------
1366
; Next
1367
  inc eax
1368
  cmp eax,[lineheight]
1369
  jl for0lineheight1b
1370
dbg2:
1371
  pop esi
1372
  pop edi
1373
  pop edx
1374
 
1375
;End Function
1376
 popa
1377
ret
1378
 
1379
 
1380
; -------------------------------------------------------------------------
1381
 
1382
; well I'm shure the following Sub CAN and SHOULD be optimized a LOT.
1383
 
1384
 
1385
;Function TextureMap()
1386
texture_map:
1387
 pusha
1388
 
1389
; For y% = Miny% To Maxy%
1390
  mov eax,[miny]
1391
  for_miny_maxy:
1392
 
1393
;  If y>0 And y<=239
1394
   cmp eax,0
1395
   jle clipy
1396
   cmp eax,239
1397
   jg clipy
1398
 
1399
   mov [y],eax
1400
 
1401
;   Polyx1% = Lefttable((y%), 0)
1402
    mov ebx,eax
1403
    sal ebx,4
1404
    add ebx,lefttable
1405
    mov ecx,[ebx]
1406
    mov [polyx1],ecx
1407
;   Px1 = Lefttable(y%, 1)
1408
    add ebx,4
1409
    mov ecx,[ebx]
1410
    mov [px1],ecx
1411
;   Py1 = Lefttable(y%, 2)
1412
    add ebx,4
1413
    mov ecx,[ebx]
1414
    mov [py1],ecx
1415
 
1416
 
1417
;   Polyx2% = Righttable((y%), 0)
1418
    mov ebx,eax
1419
    sal ebx,4
1420
    add ebx,righttable
1421
    mov ecx,[ebx]
1422
    mov [polyx2],ecx
1423
;   Px2 = Righttable(y%, 1)
1424
    add ebx,4
1425
    mov ecx,[ebx]
1426
    mov [px2],ecx
1427
;   Py2 = Righttable(y%, 2)
1428
    add ebx,4
1429
    mov ecx,[ebx]
1430
    mov [py2],ecx
1431
 
1432
 
1433
;   Linewidth% = Polyx2% - Polyx1%
1434
    mov ecx,[polyx2]
1435
    sub ecx,[polyx1]
1436
 
1437
;   Linewidth%=Linewidth% Or 1
1438
    or ecx,1
1439
    mov [linewidth],ecx
1440
 
1441
;   Pxadd = ((Px2 - Px1)) / Linewidth%
1442
    mov eax,[px2]
1443
    sub eax,[px1]
1444
    cdq
1445
    mov ebx,[linewidth] ; divisor
1446
    or ebx,1
1447
    idiv ebx  ; should be idiv ... probs
1448
    mov [pxadd],eax
1449
 
1450
;   Pyadd = ((Py2 - Py1)) / Linewidth%
1451
    mov eax,[py2]
1452
    sub eax,[py1]
1453
    cdq
1454
    mov ebx,[linewidth] ; divisor
1455
    or ebx,1
1456
    idiv ebx  ; should be idiv ...probs
1457
    mov [pyadd],eax
1458
 
1459
    mov edi,[px1]
1460
    mov esi,[py1]
1461
 
1462
 
1463
;   For x% = Polyx1% To Polyx2%
1464
    mov eax,[polyx1]
1465
    cmp eax,[polyx2]
1466
    jge clipxfully
1467
    for_polyx1_polyx2:
1468
 
1469
;     If x>0 And x<=319
1470
      cmp eax,0
1471
      jl clipx
1472
      cmp eax,319
1473
      jg clipx
1474
 
1475
;      Col%=ReadPixelFast((Px1 Shr 16),(Py1 Shr 16),imgtxt)
1476
 
1477
       mov ebx,edi
1478
       sar ebx,16   ; is eq (px1 shr 16)*64
1479
       and ebx,63
1480
       sal ebx,2  ; is x
1481
 
1482
       mov ecx,esi
1483
       sar ecx,16
1484
       and ecx,63
1485
       sal ecx,8  ; y
1486
       add ecx,ebx
1487
       add ecx,tex1 ; adr of texturepixel now in ecx
1488
 
1489
       mov edx,[ecx]; rgb now in edx
1490
 
1491
;      WritePixelFast x%,y%,Col%
1492
       mov ebx,[y]
1493
       mov [tempdiv],ebx
1494
       shl dword [tempdiv],6
1495
       shl ebx,10
1496
       sub ebx,[tempdiv]
1497
       ;this was imul ebx,960 ; *1024 - *64
1498
       add ebx,eax
1499
       add ebx,eax
1500
       add ebx,eax
1501
       add ebx,0x80000
1502
       or [ebx],edx
1503
;     EndIf
1504
      clipx:
1505
 
1506
;     Px1 = Px1 + Pxadd
1507
;     Py1 = Py1 + Pyadd
1508
      add edi,dword [pxadd]
1509
      add esi,dword [pyadd]
1510
 
1511
;   Next x
1512
    inc eax
1513
    cmp eax,[polyx2]
1514
    jl for_polyx1_polyx2
1515
    clipxfully:
1516
    mov eax,[y]
1517
 
1518
;  EndIf
1519
   clipy:
1520
; Next y
1521
  inc eax
1522
  cmp eax,[maxy]
1523
  jl for_miny_maxy
1524
 
1525
;End Function
1526
 
1527
 
1528
popa
1529
ret
1530
; -------------------------------------------------------------------------
1531
 
1532
 
1533
 
1534
put_screen:
1535
pusha
1536
mov eax,7
1537
mov ebx,0x80000
1538
mov ecx,IMAGE_W*65536+IMAGE_H
1539
mov edx,0
1540
int 0x40
1541
popa
1542
ret
1543
 
1544
 
1545
clear_screen:
1546
push ebx
1547
mov ebx,0x80000
1548
cls:
1549
mov [ebx],dword 0
1550
add ebx,4
1551
cmp ebx,0x80000+(IMAGE_W*IMAGE_H*3)
1552
jl cls
1553
pop ebx
1554
ret
1555
 
1556
; -------------------------------------------------------------------------
1557
 
1558
; DATA AREA
1559
 
1560
 
1561
; cube.inc includes the mesh 3D Data, in this case a simple cube. Any Model
1562
; is theoreticly possible. Check the File, the Format is trivial.
1563
; The Quads should not intersect for a bearable z-sorting. The Quads must be
1564
; clockwise.
1565
 
7351 leency 1566
include "cube.inc"
7350 leency 1567
 
1568
;;------------------------------
1569
 
1570
grid:  ; 32*32 Blocks, Map: 0 = Air, 1 to 5 = Wall
1571
; this is a relict from an other program. I leave it here to keep
1572
; the Navigation Subs compatible (planning to recycle them)
1573
db 2,1,2,1,2,1,2,1,2,1,2,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
1574
db 1,0,0,0,1,0,0,0,0,0,0,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8
1575
db 5,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8
1576
db 1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,3,3,3,3,0,0,0,0,0,0,8
1577
db 5,0,1,2,3,4,5,6,7,8,2,1,3,3,3,0,5,0,2,1,2,3,0,0,0,0,0,0,0,0,0,8
1578
db 1,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,0,0,0,8
1579
db 5,0,0,0,1,0,0,4,0,0,0,1,0,0,0,0,5,0,0,0,0,3,3,0,3,3,0,0,0,0,0,8
1580
db 1,1,0,1,1,1,1,4,1,0,1,3,0,0,0,0,5,2,1,2,0,3,0,0,0,3,0,0,0,0,0,8
1581
db 5,0,0,0,1,0,0,0,0,0,0,1,0,3,3,3,5,0,0,0,0,3,0,0,0,3,0,0,0,0,0,8
1582
db 1,0,0,0,1,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,3,0,0,0,0,0,8
1583
db 5,0,0,0,0,0,0,5,0,0,0,1,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,0,0,0,8
1584
db 1,4,4,4,4,4,4,4,4,4,4,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,8,8
1585
db 2,2,2,2,2,2,8,8,8,8,8,8,8,8,8,0,0,0,6,6,0,7,7,7,7,7,7,7,7,7,8,8
1586
db 1,0,0,0,1,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1
1587
db 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,2,2,2,2,0,0,0,0,3,3,3,3,3,1
1588
db 1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,6,0,0,0,0,2,0,0,0,0,3,0,0,0,0,1
1589
db 5,0,2,3,2,3,2,3,2,3,2,1,0,0,0,0,6,0,2,2,0,2,0,0,0,0,3,0,5,5,0,1
1590
db 1,0,0,0,0,0,0,4,0,0,0,3,0,0,0,0,6,0,0,2,0,2,0,2,0,0,3,0,0,0,0,1
1591
db 5,0,0,0,1,0,0,4,0,0,0,1,0,0,0,0,6,0,0,2,2,2,0,2,0,0,3,3,3,3,0,1
1592
db 1,1,0,1,1,1,1,4,1,0,1,3,7,7,7,0,6,0,0,0,0,0,0,2,0,0,0,0,0,3,0,1
1593
db 5,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,6,0,0,0,0,2,2,2,0,0,0,0,0,3,0,1
1594
db 1,0,0,0,1,0,0,5,0,0,0,3,0,0,0,0,6,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1
1595
db 5,0,0,0,0,0,0,5,0,0,0,1,0,0,0,0,6,0,5,1,0,2,0,0,4,4,0,4,4,0,0,1
1596
db 1,4,1,4,1,4,1,4,1,4,1,3,0,0,0,0,6,0,0,5,0,2,0,0,0,4,0,4,0,0,0,1
1597
db 1,0,0,0,0,0,0,4,0,0,0,3,0,3,3,3,6,0,0,1,0,1,0,0,4,4,0,4,4,0,0,1
1598
db 5,0,0,0,1,0,0,4,0,0,0,1,0,0,0,0,6,0,0,5,0,1,0,4,4,0,0,0,4,4,0,1
1599
db 1,1,0,1,1,1,1,4,1,0,1,3,0,0,0,0,6,0,0,1,0,1,0,4,0,0,0,0,0,4,0,1
1600
db 5,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,6,0,0,5,0,1,0,4,0,0,0,0,0,4,0,1
1601
db 1,0,0,0,1,0,0,5,0,0,0,3,0,0,0,0,6,1,5,1,0,1,0,4,4,0,0,0,4,4,0,1
1602
db 5,0,0,0,0,0,0,5,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,4,4,4,4,4,0,0,1
1603
db 1,4,1,4,1,4,1,4,1,4,1,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1
1604
db 2,1,2,1,2,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
1605
 
1606
sinus:
1607
dd 0,11,22,34,45,57,68,80,91,102
1608
dd 114,125,137,148,160,171,182,194,205,217
1609
dd 228,240,251,263,274,285,297,308,320,331
1610
dd 342,354,365,377,388,400,411,422,434,445
1611
dd 457,468,479,491,502,514,525,536,548,559
1612
dd 571,582,593,605,616,628,639,650,662,673
1613
dd 685,696,707,719,730,741,753,764,775,787
1614
dd 798,810,821,832,844,855,866,878,889,900
1615
dd 912,923,934,946,957,968,979,991,1002,1013
1616
dd 1025,1036,1047,1059,1070,1081,1092,1104,1115,1126
1617
dd 1138,1149,1160,1171,1183,1194,1205,1216,1228,1239
1618
dd 1250,1261,1272,1284,1295,1306,1317,1328,1340,1351
1619
dd 1362,1373,1384,1396,1407,1418,1429,1440,1451,1463
1620
dd 1474,1485,1496,1507,1518,1529,1541,1552,1563,1574
1621
dd 1585,1596,1607,1618,1629,1640,1651,1663,1674,1685
1622
dd 1696,1707,1718,1729,1740,1751,1762,1773,1784,1795
1623
dd 1806,1817,1828,1839,1850,1861,1872,1883,1894,1905
1624
dd 1916,1926,1937,1948,1959,1970,1981,1992,2003,2014
1625
dd 2025,2036,2046,2057,2068,2079,2090,2101,2111,2122
1626
dd 2133,2144,2155,2166,2176,2187,2198,2209,2219,2230
1627
dd 2241,2252,2262,2273,2284,2295,2305,2316,2327,2337
1628
dd 2348,2359,2369,2380,2391,2401,2412,2423,2433,2444
1629
dd 2454,2465,2476,2486,2497,2507,2518,2529,2539,2550
1630
dd 2560,2571,2581,2592,2602,2613,2623,2634,2644,2655
1631
dd 2665,2675,2686,2696,2707,2717,2728,2738,2748,2759
1632
dd 2769,2779,2790,2800,2811,2821,2831,2841,2852,2862
1633
dd 2872,2883,2893,2903,2913,2924,2934,2944,2954,2965
1634
dd 2975,2985,2995,3005,3015,3026,3036,3046,3056,3066
1635
dd 3076,3086,3096,3106,3117,3127,3137,3147,3157,3167
1636
dd 3177,3187,3197,3207,3217,3227,3237,3246,3256,3266
1637
dd 3276,3286,3296,3306,3316,3326,3336,3345,3355,3365
1638
dd 3375,3385,3394,3404,3414,3424,3433,3443,3453,3463
1639
dd 3472,3482,3492,3501,3511,3521,3530,3540,3550,3559
1640
dd 3569,3578,3588,3598,3607,3617,3626,3636,3645,3655
1641
dd 3664,3674,3683,3693,3702,3711,3721,3730,3740,3749
1642
dd 3758,3768,3777,3786,3796,3805,3814,3824,3833,3842
1643
dd 3852,3861,3870,3879,3888,3898,3907,3916,3925,3934
1644
dd 3943,3953,3962,3971,3980,3989,3998,4007,4016,4025
1645
dd 4034,4043,4052,4061,4070,4079,4088,4097,4106,4115
1646
dd 4124,4133,4142,4150,4159,4168,4177,4186,4194,4203
1647
dd 4212,4221,4230,4238,4247,4256,4264,4273,4282,4290
1648
dd 4299,4308,4316,4325,4333,4342,4351,4359,4368,4376
1649
dd 4385,4393,4402,4410,4419,4427,4435,4444,4452,4461
1650
dd 4469,4477,4486,4494,4502,4511,4519,4527,4535,4544
1651
dd 4552,4560,4568,4577,4585,4593,4601,4609,4617,4625
1652
dd 4634,4642,4650,4658,4666,4674,4682,4690,4698,4706
1653
dd 4714,4722,4730,4737,4745,4753,4761,4769,4777,4785
1654
dd 4792,4800,4808,4816,4824,4831,4839,4847,4854,4862
1655
dd 4870,4877,4885,4893,4900,4908,4915,4923,4930,4938
1656
dd 4945,4953,4960,4968,4975,4983,4990,4998,5005,5012
1657
dd 5020,5027,5034,5042,5049,5056,5064,5071,5078,5085
1658
dd 5093,5100,5107,5114,5121,5128,5135,5143,5150,5157
1659
dd 5164,5171,5178,5185,5192,5199,5206,5213,5220,5226
1660
dd 5233,5240,5247,5254,5261,5268,5274,5281,5288,5295
1661
dd 5301,5308,5315,5321,5328,5335,5341,5348,5355,5361
1662
dd 5368,5374,5381,5387,5394,5400,5407,5413,5420,5426
1663
dd 5433,5439,5445,5452,5458,5464,5471,5477,5483,5489
1664
dd 5496,5502,5508,5514,5521,5527,5533,5539,5545,5551
1665
dd 5557,5563,5569,5575,5581,5587,5593,5599,5605,5611
1666
dd 5617,5623,5629,5635,5640,5646,5652,5658,5664,5669
1667
dd 5675,5681,5686,5692,5698,5703,5709,5715,5720,5726
1668
dd 5731,5737,5742,5748,5753,5759,5764,5770,5775,5781
1669
dd 5786,5791,5797,5802,5807,5813,5818,5823,5828,5834
1670
dd 5839,5844,5849,5854,5859,5864,5870,5875,5880,5885
1671
dd 5890,5895,5900,5905,5910,5915,5920,5924,5929,5934
1672
dd 5939,5944,5949,5953,5958,5963,5968,5972,5977,5982
1673
dd 5986,5991,5996,6000,6005,6009,6014,6019,6023,6028
1674
dd 6032,6036,6041,6045,6050,6054,6059,6063,6067,6072
1675
dd 6076,6080,6084,6089,6093,6097,6101,6105,6109,6114
1676
dd 6118,6122,6126,6130,6134,6138,6142,6146,6150,6154
1677
dd 6158,6162,6166,6169,6173,6177,6181,6185,6188,6192
1678
dd 6196,6200,6203,6207,6211,6214,6218,6222,6225,6229
1679
dd 6232,6236,6239,6243,6246,6250,6253,6257,6260,6263
1680
dd 6267,6270,6273,6277,6280,6283,6286,6290,6293,6296
1681
dd 6299,6302,6305,6309,6312,6315,6318,6321,6324,6327
1682
dd 6330,6333,6336,6338,6341,6344,6347,6350,6353,6356
1683
dd 6358,6361,6364,6367,6369,6372,6375,6377,6380,6382
1684
dd 6385,6388,6390,6393,6395,6398,6400,6403,6405,6407
1685
dd 6410,6412,6415,6417,6419,6421,6424,6426,6428,6430
1686
dd 6433,6435,6437,6439,6441,6443,6445,6447,6449,6451
1687
dd 6453,6455,6457,6459,6461,6463,6465,6467,6469,6471
1688
dd 6472,6474,6476,6478,6479,6481,6483,6484,6486,6488
1689
dd 6489,6491,6492,6494,6495,6497,6498,6500,6501,6503
1690
dd 6504,6506,6507,6508,6510,6511,6512,6513,6515,6516
1691
dd 6517,6518,6519,6521,6522,6523,6524,6525,6526,6527
1692
dd 6528,6529,6530,6531,6532,6533,6534,6535,6535,6536
1693
dd 6537,6538,6539,6539,6540,6541,6541,6542,6543,6543
1694
dd 6544,6545,6545,6546,6546,6547,6547,6548,6548,6549
1695
dd 6549,6549,6550,6550,6550,6551,6551,6551,6552,6552
1696
dd 6552,6552,6552,6553,6553,6553,6553,6553,6553,6553
1697
dd 6553,6553,6553,6553,6553,6553,6553,6553,6552,6552
1698
dd 6552,6552,6552,6551,6551,6551,6550,6550,6550,6549
1699
dd 6549,6549,6548,6548,6547,6547,6546,6546,6545,6545
1700
dd 6544,6543,6543,6542,6541,6541,6540,6539,6539,6538
1701
dd 6537,6536,6535,6535,6534,6533,6532,6531,6530,6529
1702
dd 6528,6527,6526,6525,6524,6523,6522,6521,6519,6518
1703
dd 6517,6516,6515,6513,6512,6511,6510,6508,6507,6506
1704
dd 6504,6503,6501,6500,6498,6497,6495,6494,6492,6491
1705
dd 6489,6488,6486,6484,6483,6481,6479,6478,6476,6474
1706
dd 6472,6471,6469,6467,6465,6463,6461,6459,6457,6455
1707
dd 6453,6451,6449,6447,6445,6443,6441,6439,6437,6435
1708
dd 6433,6430,6428,6426,6424,6421,6419,6417,6415,6412
1709
dd 6410,6407,6405,6403,6400,6398,6395,6393,6390,6388
1710
dd 6385,6382,6380,6377,6375,6372,6369,6367,6364,6361
1711
dd 6358,6356,6353,6350,6347,6344,6341,6338,6336,6333
1712
dd 6330,6327,6324,6321,6318,6315,6312,6309,6305,6302
1713
dd 6299,6296,6293,6290,6286,6283,6280,6277,6273,6270
1714
dd 6267,6263,6260,6257,6253,6250,6246,6243,6239,6236
1715
dd 6232,6229,6225,6222,6218,6214,6211,6207,6203,6200
1716
dd 6196,6192,6188,6185,6181,6177,6173,6169,6166,6162
1717
dd 6158,6154,6150,6146,6142,6138,6134,6130,6126,6122
1718
dd 6118,6114,6109,6105,6101,6097,6093,6089,6084,6080
1719
dd 6076,6072,6067,6063,6059,6054,6050,6045,6041,6036
1720
dd 6032,6028,6023,6019,6014,6009,6005,6000,5996,5991
1721
dd 5986,5982,5977,5972,5968,5963,5958,5953,5949,5944
1722
dd 5939,5934,5929,5924,5920,5915,5910,5905,5900,5895
1723
dd 5890,5885,5880,5875,5870,5864,5859,5854,5849,5844
1724
dd 5839,5834,5828,5823,5818,5813,5807,5802,5797,5791
1725
dd 5786,5781,5775,5770,5764,5759,5753,5748,5742,5737
1726
dd 5731,5726,5720,5715,5709,5703,5698,5692,5686,5681
1727
dd 5675,5669,5664,5658,5652,5646,5640,5635,5629,5623
1728
dd 5617,5611,5605,5599,5593,5587,5581,5575,5569,5563
1729
dd 5557,5551,5545,5539,5533,5527,5521,5514,5508,5502
1730
dd 5496,5489,5483,5477,5471,5464,5458,5452,5445,5439
1731
dd 5433,5426,5420,5413,5407,5400,5394,5387,5381,5374
1732
dd 5368,5361,5355,5348,5341,5335,5328,5321,5315,5308
1733
dd 5301,5295,5288,5281,5274,5268,5261,5254,5247,5240
1734
dd 5233,5226,5220,5213,5206,5199,5192,5185,5178,5171
1735
dd 5164,5157,5150,5143,5135,5128,5121,5114,5107,5100
1736
dd 5093,5085,5078,5071,5064,5056,5049,5042,5034,5027
1737
dd 5020,5012,5005,4998,4990,4983,4975,4968,4960,4953
1738
dd 4945,4938,4930,4923,4915,4908,4900,4893,4885,4877
1739
dd 4870,4862,4854,4847,4839,4831,4824,4816,4808,4800
1740
dd 4792,4785,4777,4769,4761,4753,4745,4737,4730,4722
1741
dd 4714,4706,4698,4690,4682,4674,4666,4658,4650,4642
1742
dd 4634,4625,4617,4609,4601,4593,4585,4577,4568,4560
1743
dd 4552,4544,4535,4527,4519,4511,4502,4494,4486,4477
1744
dd 4469,4461,4452,4444,4435,4427,4419,4410,4402,4393
1745
dd 4385,4376,4368,4359,4351,4342,4333,4325,4316,4308
1746
dd 4299,4290,4282,4273,4264,4256,4247,4238,4230,4221
1747
dd 4212,4203,4194,4186,4177,4168,4159,4150,4142,4133
1748
dd 4124,4115,4106,4097,4088,4079,4070,4061,4052,4043
1749
dd 4034,4025,4016,4007,3998,3989,3980,3971,3962,3953
1750
dd 3943,3934,3925,3916,3907,3898,3888,3879,3870,3861
1751
dd 3852,3842,3833,3824,3814,3805,3796,3786,3777,3768
1752
dd 3758,3749,3740,3730,3721,3711,3702,3693,3683,3674
1753
dd 3664,3655,3645,3636,3626,3617,3607,3598,3588,3578
1754
dd 3569,3559,3550,3540,3530,3521,3511,3501,3492,3482
1755
dd 3472,3463,3453,3443,3433,3424,3414,3404,3394,3385
1756
dd 3375,3365,3355,3345,3336,3326,3316,3306,3296,3286
1757
dd 3276,3266,3256,3246,3237,3227,3217,3207,3197,3187
1758
dd 3177,3167,3157,3147,3137,3127,3117,3106,3096,3086
1759
dd 3076,3066,3056,3046,3036,3026,3015,3005,2995,2985
1760
dd 2975,2965,2954,2944,2934,2924,2913,2903,2893,2883
1761
dd 2872,2862,2852,2841,2831,2821,2811,2800,2790,2779
1762
dd 2769,2759,2748,2738,2728,2717,2707,2696,2686,2675
1763
dd 2665,2655,2644,2634,2623,2613,2602,2592,2581,2571
1764
dd 2560,2550,2539,2529,2518,2507,2497,2486,2476,2465
1765
dd 2454,2444,2433,2423,2412,2401,2391,2380,2369,2359
1766
dd 2348,2337,2327,2316,2305,2295,2284,2273,2262,2252
1767
dd 2241,2230,2219,2209,2198,2187,2176,2166,2155,2144
1768
dd 2133,2122,2111,2101,2090,2079,2068,2057,2046,2036
1769
dd 2025,2014,2003,1992,1981,1970,1959,1948,1937,1926
1770
dd 1916,1905,1894,1883,1872,1861,1850,1839,1828,1817
1771
dd 1806,1795,1784,1773,1762,1751,1740,1729,1718,1707
1772
dd 1696,1685,1674,1663,1651,1640,1629,1618,1607,1596
1773
dd 1585,1574,1563,1552,1541,1529,1518,1507,1496,1485
1774
dd 1474,1463,1451,1440,1429,1418,1407,1396,1384,1373
1775
dd 1362,1351,1340,1328,1317,1306,1295,1284,1272,1261
1776
dd 1250,1239,1228,1216,1205,1194,1183,1171,1160,1149
1777
dd 1138,1126,1115,1104,1092,1081,1070,1059,1047,1036
1778
dd 1025,1013,1002,991,979,968,957,946,934,923
1779
dd 912,900,889,878,866,855,844,832,821,810
1780
dd 798,787,775,764,753,741,730,719,707,696
1781
dd 685,673,662,650,639,628,616,605,593,582
1782
dd 571,559,548,536,525,514,502,491,479,468
1783
dd 457,445,434,422,411,400,388,377,365,354
1784
dd 342,331,320,308,297,285,274,263,251,240
1785
dd 228,217,205,194,182,171,160,148,137,125
1786
dd 114,102,91,80,68,57,45,34,22,11
1787
dd 0,-12,-23,-35,-46,-58,-69,-81,-92,-103
1788
dd -115,-126,-138,-149,-161,-172,-183,-195,-206,-218
1789
dd -229,-241,-252,-264,-275,-286,-298,-309,-321,-332
1790
dd -343,-355,-366,-378,-389,-401,-412,-423,-435,-446
1791
dd -458,-469,-480,-492,-503,-515,-526,-537,-549,-560
1792
dd -572,-583,-594,-606,-617,-629,-640,-651,-663,-674
1793
dd -686,-697,-708,-720,-731,-742,-754,-765,-776,-788
1794
dd -799,-811,-822,-833,-845,-856,-867,-879,-890,-901
1795
dd -913,-924,-935,-947,-958,-969,-980,-992,-1003,-1014
1796
dd -1026,-1037,-1048,-1060,-1071,-1082,-1093,-1105,-1116,-1127
1797
dd -1139,-1150,-1161,-1172,-1184,-1195,-1206,-1217,-1229,-1240
1798
dd -1251,-1262,-1273,-1285,-1296,-1307,-1318,-1329,-1341,-1352
1799
dd -1363,-1374,-1385,-1397,-1408,-1419,-1430,-1441,-1452,-1464
1800
dd -1475,-1486,-1497,-1508,-1519,-1530,-1542,-1553,-1564,-1575
1801
dd -1586,-1597,-1608,-1619,-1630,-1641,-1652,-1664,-1675,-1686
1802
dd -1697,-1708,-1719,-1730,-1741,-1752,-1763,-1774,-1785,-1796
1803
dd -1807,-1818,-1829,-1840,-1851,-1862,-1873,-1884,-1895,-1906
1804
dd -1917,-1927,-1938,-1949,-1960,-1971,-1982,-1993,-2004,-2015
1805
dd -2026,-2037,-2047,-2058,-2069,-2080,-2091,-2102,-2112,-2123
1806
dd -2134,-2145,-2156,-2167,-2177,-2188,-2199,-2210,-2220,-2231
1807
dd -2242,-2253,-2263,-2274,-2285,-2296,-2306,-2317,-2328,-2338
1808
dd -2349,-2360,-2370,-2381,-2392,-2402,-2413,-2424,-2434,-2445
1809
dd -2455,-2466,-2477,-2487,-2498,-2508,-2519,-2530,-2540,-2551
1810
dd -2561,-2572,-2582,-2593,-2603,-2614,-2624,-2635,-2645,-2656
1811
dd -2666,-2676,-2687,-2697,-2708,-2718,-2729,-2739,-2749,-2760
1812
dd -2770,-2780,-2791,-2801,-2812,-2822,-2832,-2842,-2853,-2863
1813
dd -2873,-2884,-2894,-2904,-2914,-2925,-2935,-2945,-2955,-2966
1814
dd -2976,-2986,-2996,-3006,-3016,-3027,-3037,-3047,-3057,-3067
1815
dd -3077,-3087,-3097,-3107,-3118,-3128,-3138,-3148,-3158,-3168
1816
dd -3178,-3188,-3198,-3208,-3218,-3228,-3238,-3247,-3257,-3267
1817
dd -3277,-3287,-3297,-3307,-3317,-3327,-3337,-3346,-3356,-3366
1818
dd -3376,-3386,-3395,-3405,-3415,-3425,-3434,-3444,-3454,-3464
1819
dd -3473,-3483,-3493,-3502,-3512,-3522,-3531,-3541,-3551,-3560
1820
dd -3570,-3579,-3589,-3599,-3608,-3618,-3627,-3637,-3646,-3656
1821
dd -3665,-3675,-3684,-3694,-3703,-3712,-3722,-3731,-3741,-3750
1822
dd -3759,-3769,-3778,-3787,-3797,-3806,-3815,-3825,-3834,-3843
1823
dd -3853,-3862,-3871,-3880,-3889,-3899,-3908,-3917,-3926,-3935
1824
dd -3944,-3954,-3963,-3972,-3981,-3990,-3999,-4008,-4017,-4026
1825
dd -4035,-4044,-4053,-4062,-4071,-4080,-4089,-4098,-4107,-4116
1826
dd -4125,-4134,-4143,-4151,-4160,-4169,-4178,-4187,-4195,-4204
1827
dd -4213,-4222,-4231,-4239,-4248,-4257,-4265,-4274,-4283,-4291
1828
dd -4300,-4309,-4317,-4326,-4334,-4343,-4352,-4360,-4369,-4377
1829
dd -4386,-4394,-4403,-4411,-4420,-4428,-4436,-4445,-4453,-4462
1830
dd -4470,-4478,-4487,-4495,-4503,-4512,-4520,-4528,-4536,-4545
1831
dd -4553,-4561,-4569,-4578,-4586,-4594,-4602,-4610,-4618,-4626
1832
dd -4635,-4643,-4651,-4659,-4667,-4675,-4683,-4691,-4699,-4707
1833
dd -4715,-4723,-4731,-4738,-4746,-4754,-4762,-4770,-4778,-4786
1834
dd -4793,-4801,-4809,-4817,-4825,-4832,-4840,-4848,-4855,-4863
1835
dd -4871,-4878,-4886,-4894,-4901,-4909,-4916,-4924,-4931,-4939
1836
dd -4946,-4954,-4961,-4969,-4976,-4984,-4991,-4999,-5006,-5013
1837
dd -5021,-5028,-5035,-5043,-5050,-5057,-5065,-5072,-5079,-5086
1838
dd -5094,-5101,-5108,-5115,-5122,-5129,-5136,-5144,-5151,-5158
1839
dd -5165,-5172,-5179,-5186,-5193,-5200,-5207,-5214,-5221,-5227
1840
dd -5234,-5241,-5248,-5255,-5262,-5269,-5275,-5282,-5289,-5296
1841
dd -5302,-5309,-5316,-5322,-5329,-5336,-5342,-5349,-5356,-5362
1842
dd -5369,-5375,-5382,-5388,-5395,-5401,-5408,-5414,-5421,-5427
1843
dd -5434,-5440,-5446,-5453,-5459,-5465,-5472,-5478,-5484,-5490
1844
dd -5497,-5503,-5509,-5515,-5522,-5528,-5534,-5540,-5546,-5552
1845
dd -5558,-5564,-5570,-5576,-5582,-5588,-5594,-5600,-5606,-5612
1846
dd -5618,-5624,-5630,-5636,-5641,-5647,-5653,-5659,-5665,-5670
1847
dd -5676,-5682,-5687,-5693,-5699,-5704,-5710,-5716,-5721,-5727
1848
dd -5732,-5738,-5743,-5749,-5754,-5760,-5765,-5771,-5776,-5782
1849
dd -5787,-5792,-5798,-5803,-5808,-5814,-5819,-5824,-5829,-5835
1850
dd -5840,-5845,-5850,-5855,-5860,-5865,-5871,-5876,-5881,-5886
1851
dd -5891,-5896,-5901,-5906,-5911,-5916,-5921,-5925,-5930,-5935
1852
dd -5940,-5945,-5950,-5954,-5959,-5964,-5969,-5973,-5978,-5983
1853
dd -5987,-5992,-5997,-6001,-6006,-6010,-6015,-6020,-6024,-6029
1854
dd -6033,-6037,-6042,-6046,-6051,-6055,-6060,-6064,-6068,-6073
1855
dd -6077,-6081,-6085,-6090,-6094,-6098,-6102,-6106,-6110,-6115
1856
dd -6119,-6123,-6127,-6131,-6135,-6139,-6143,-6147,-6151,-6155
1857
dd -6159,-6163,-6167,-6170,-6174,-6178,-6182,-6186,-6189,-6193
1858
dd -6197,-6201,-6204,-6208,-6212,-6215,-6219,-6223,-6226,-6230
1859
dd -6233,-6237,-6240,-6244,-6247,-6251,-6254,-6258,-6261,-6264
1860
dd -6268,-6271,-6274,-6278,-6281,-6284,-6287,-6291,-6294,-6297
1861
dd -6300,-6303,-6306,-6310,-6313,-6316,-6319,-6322,-6325,-6328
1862
dd -6331,-6334,-6337,-6339,-6342,-6345,-6348,-6351,-6354,-6357
1863
dd -6359,-6362,-6365,-6368,-6370,-6373,-6376,-6378,-6381,-6383
1864
dd -6386,-6389,-6391,-6394,-6396,-6399,-6401,-6404,-6406,-6408
1865
dd -6411,-6413,-6416,-6418,-6420,-6422,-6425,-6427,-6429,-6431
1866
dd -6434,-6436,-6438,-6440,-6442,-6444,-6446,-6448,-6450,-6452
1867
dd -6454,-6456,-6458,-6460,-6462,-6464,-6466,-6468,-6470,-6472
1868
dd -6473,-6475,-6477,-6479,-6480,-6482,-6484,-6485,-6487,-6489
1869
dd -6490,-6492,-6493,-6495,-6496,-6498,-6499,-6501,-6502,-6504
1870
dd -6505,-6507,-6508,-6509,-6511,-6512,-6513,-6514,-6516,-6517
1871
dd -6518,-6519,-6520,-6522,-6523,-6524,-6525,-6526,-6527,-6528
1872
dd -6529,-6530,-6531,-6532,-6533,-6534,-6535,-6536,-6536,-6537
1873
dd -6538,-6539,-6540,-6540,-6541,-6542,-6542,-6543,-6544,-6544
1874
dd -6545,-6546,-6546,-6547,-6547,-6548,-6548,-6549,-6549,-6550
1875
dd -6550,-6550,-6551,-6551,-6551,-6552,-6552,-6552,-6553,-6553
1876
dd -6553,-6553,-6553,-6554,-6554,-6554,-6554,-6554,-6554,-6554
1877
dd -6554,-6554,-6554,-6554,-6554,-6554,-6554,-6554,-6553,-6553
1878
dd -6553,-6553,-6553,-6552,-6552,-6552,-6551,-6551,-6551,-6550
1879
dd -6550,-6550,-6549,-6549,-6548,-6548,-6547,-6547,-6546,-6546
1880
dd -6545,-6544,-6544,-6543,-6542,-6542,-6541,-6540,-6540,-6539
1881
dd -6538,-6537,-6536,-6536,-6535,-6534,-6533,-6532,-6531,-6530
1882
dd -6529,-6528,-6527,-6526,-6525,-6524,-6523,-6522,-6520,-6519
1883
dd -6518,-6517,-6516,-6514,-6513,-6512,-6511,-6509,-6508,-6507
1884
dd -6505,-6504,-6502,-6501,-6499,-6498,-6496,-6495,-6493,-6492
1885
dd -6490,-6489,-6487,-6485,-6484,-6482,-6480,-6479,-6477,-6475
1886
dd -6473,-6472,-6470,-6468,-6466,-6464,-6462,-6460,-6458,-6456
1887
dd -6454,-6452,-6450,-6448,-6446,-6444,-6442,-6440,-6438,-6436
1888
dd -6434,-6431,-6429,-6427,-6425,-6422,-6420,-6418,-6416,-6413
1889
dd -6411,-6408,-6406,-6404,-6401,-6399,-6396,-6394,-6391,-6389
1890
dd -6386,-6383,-6381,-6378,-6376,-6373,-6370,-6368,-6365,-6362
1891
dd -6359,-6357,-6354,-6351,-6348,-6345,-6342,-6339,-6337,-6334
1892
dd -6331,-6328,-6325,-6322,-6319,-6316,-6313,-6309,-6306,-6303
1893
dd -6300,-6297,-6294,-6291,-6287,-6284,-6281,-6278,-6274,-6271
1894
dd -6268,-6264,-6261,-6258,-6254,-6251,-6247,-6244,-6240,-6237
1895
dd -6233,-6230,-6226,-6223,-6219,-6215,-6212,-6208,-6204,-6201
1896
dd -6197,-6193,-6189,-6186,-6182,-6178,-6174,-6170,-6167,-6163
1897
dd -6159,-6155,-6151,-6147,-6143,-6139,-6135,-6131,-6127,-6123
1898
dd -6119,-6115,-6110,-6106,-6102,-6098,-6094,-6090,-6085,-6081
1899
dd -6077,-6073,-6068,-6064,-6060,-6055,-6051,-6046,-6042,-6037
1900
dd -6033,-6029,-6024,-6020,-6015,-6010,-6006,-6001,-5997,-5992
1901
dd -5987,-5983,-5978,-5973,-5969,-5964,-5959,-5954,-5950,-5945
1902
dd -5940,-5935,-5930,-5925,-5921,-5916,-5911,-5906,-5901,-5896
1903
dd -5891,-5886,-5881,-5876,-5871,-5865,-5860,-5855,-5850,-5845
1904
dd -5840,-5835,-5829,-5824,-5819,-5814,-5808,-5803,-5798,-5792
1905
dd -5787,-5782,-5776,-5771,-5765,-5760,-5754,-5749,-5743,-5738
1906
dd -5732,-5727,-5721,-5716,-5710,-5704,-5699,-5693,-5687,-5682
1907
dd -5676,-5670,-5665,-5659,-5653,-5647,-5641,-5636,-5630,-5624
1908
dd -5618,-5612,-5606,-5600,-5594,-5588,-5582,-5576,-5570,-5564
1909
dd -5558,-5552,-5546,-5540,-5534,-5528,-5522,-5515,-5509,-5503
1910
dd -5497,-5490,-5484,-5478,-5472,-5465,-5459,-5453,-5446,-5440
1911
dd -5434,-5427,-5421,-5414,-5408,-5401,-5395,-5388,-5382,-5375
1912
dd -5369,-5362,-5356,-5349,-5342,-5336,-5329,-5322,-5316,-5309
1913
dd -5302,-5296,-5289,-5282,-5275,-5269,-5262,-5255,-5248,-5241
1914
dd -5234,-5227,-5221,-5214,-5207,-5200,-5193,-5186,-5179,-5172
1915
dd -5165,-5158,-5151,-5144,-5136,-5129,-5122,-5115,-5108,-5101
1916
dd -5094,-5086,-5079,-5072,-5065,-5057,-5050,-5043,-5035,-5028
1917
dd -5021,-5013,-5006,-4999,-4991,-4984,-4976,-4969,-4961,-4954
1918
dd -4946,-4939,-4931,-4924,-4916,-4909,-4901,-4894,-4886,-4878
1919
dd -4871,-4863,-4855,-4848,-4840,-4832,-4825,-4817,-4809,-4801
1920
dd -4793,-4786,-4778,-4770,-4762,-4754,-4746,-4738,-4731,-4723
1921
dd -4715,-4707,-4699,-4691,-4683,-4675,-4667,-4659,-4651,-4643
1922
dd -4635,-4626,-4618,-4610,-4602,-4594,-4586,-4578,-4569,-4561
1923
dd -4553,-4545,-4536,-4528,-4520,-4512,-4503,-4495,-4487,-4478
1924
dd -4470,-4462,-4453,-4445,-4436,-4428,-4420,-4411,-4403,-4394
1925
dd -4386,-4377,-4369,-4360,-4352,-4343,-4334,-4326,-4317,-4309
1926
dd -4300,-4291,-4283,-4274,-4265,-4257,-4248,-4239,-4231,-4222
1927
dd -4213,-4204,-4195,-4187,-4178,-4169,-4160,-4151,-4143,-4134
1928
dd -4125,-4116,-4107,-4098,-4089,-4080,-4071,-4062,-4053,-4044
1929
dd -4035,-4026,-4017,-4008,-3999,-3990,-3981,-3972,-3963,-3954
1930
dd -3944,-3935,-3926,-3917,-3908,-3899,-3889,-3880,-3871,-3862
1931
dd -3853,-3843,-3834,-3825,-3815,-3806,-3797,-3787,-3778,-3769
1932
dd -3759,-3750,-3741,-3731,-3722,-3712,-3703,-3694,-3684,-3675
1933
dd -3665,-3656,-3646,-3637,-3627,-3618,-3608,-3599,-3589,-3579
1934
dd -3570,-3560,-3551,-3541,-3531,-3522,-3512,-3502,-3493,-3483
1935
dd -3473,-3464,-3454,-3444,-3434,-3425,-3415,-3405,-3395,-3386
1936
dd -3376,-3366,-3356,-3346,-3337,-3327,-3317,-3307,-3297,-3287
1937
dd -3277,-3267,-3257,-3247,-3238,-3228,-3218,-3208,-3198,-3188
1938
dd -3178,-3168,-3158,-3148,-3138,-3128,-3118,-3107,-3097,-3087
1939
dd -3077,-3067,-3057,-3047,-3037,-3027,-3016,-3006,-2996,-2986
1940
dd -2976,-2966,-2955,-2945,-2935,-2925,-2914,-2904,-2894,-2884
1941
dd -2873,-2863,-2853,-2842,-2832,-2822,-2812,-2801,-2791,-2780
1942
dd -2770,-2760,-2749,-2739,-2729,-2718,-2708,-2697,-2687,-2676
1943
dd -2666,-2656,-2645,-2635,-2624,-2614,-2603,-2593,-2582,-2572
1944
dd -2561,-2551,-2540,-2530,-2519,-2508,-2498,-2487,-2477,-2466
1945
dd -2455,-2445,-2434,-2424,-2413,-2402,-2392,-2381,-2370,-2360
1946
dd -2349,-2338,-2328,-2317,-2306,-2296,-2285,-2274,-2263,-2253
1947
dd -2242,-2231,-2220,-2210,-2199,-2188,-2177,-2167,-2156,-2145
1948
dd -2134,-2123,-2112,-2102,-2091,-2080,-2069,-2058,-2047,-2037
1949
dd -2026,-2015,-2004,-1993,-1982,-1971,-1960,-1949,-1938,-1927
1950
dd -1917,-1906,-1895,-1884,-1873,-1862,-1851,-1840,-1829,-1818
1951
dd -1807,-1796,-1785,-1774,-1763,-1752,-1741,-1730,-1719,-1708
1952
dd -1697,-1686,-1675,-1664,-1652,-1641,-1630,-1619,-1608,-1597
1953
dd -1586,-1575,-1564,-1553,-1542,-1530,-1519,-1508,-1497,-1486
1954
dd -1475,-1464,-1452,-1441,-1430,-1419,-1408,-1397,-1385,-1374
1955
dd -1363,-1352,-1341,-1329,-1318,-1307,-1296,-1285,-1273,-1262
1956
dd -1251,-1240,-1229,-1217,-1206,-1195,-1184,-1172,-1161,-1150
1957
dd -1139,-1127,-1116,-1105,-1093,-1082,-1071,-1060,-1048,-1037
1958
dd -1026,-1014,-1003,-992,-980,-969,-958,-947,-935,-924
1959
dd -913,-901,-890,-879,-867,-856,-845,-833,-822,-811
1960
dd -799,-788,-776,-765,-754,-742,-731,-720,-708,-697
1961
dd -686,-674,-663,-651,-640,-629,-617,-606,-594,-583
1962
dd -572,-560,-549,-537,-526,-515,-503,-492,-480,-469
1963
dd -458,-446,-435,-423,-412,-401,-389,-378,-366,-355
1964
dd -343,-332,-321,-309,-298,-286,-275,-264,-252,-241
1965
dd -229,-218,-206,-195,-183,-172,-161,-149,-138,-126
1966
dd -115,-103,-92,-81,-69,-58,-46,-35,-23,-12
1967
 
1968
eosinus:
1969
 
1970
; misc vars for mouse / keys:
1971
wonder:
1972
 dd 7777
1973
dududu:
1974
 dd 0
1975
rendered_quads:
1976
 dd 0
1977
sorted_quads:
1978
 dd 0
1979
vxx:
1980
 dd 0
1981
mouseya:
1982
 dd 0
1983
vpx:
1984
 dd 0
1985
vpy:
1986
 dd 0
1987
vheading:
1988
 dd 0
1989
 
1990
wtolong:
1991
 dw 0,0
1992
 
1993
; misc Engine Vars --------------------------
1994
imgtxt:
1995
 dd 0
1996
mousex:
1997
 dd 0
1998
mousey:
1999
 dd 0
2000
factor:
2001
 dd 0
2002
i:
2003
 dd 0
2004
miny:
2005
 dd 0
2006
maxy:
2007
 dd 0
2008
pwidth:
2009
 dd 0
2010
pheight:
2011
 dd 0
2012
;anz:
2013
; dd 0
2014
a:
2015
 dd 0
2016
alpha:
2017
 dd 0
2018
beta:
2019
 dd 0
2020
gamma:
2021
 dd 0
2022
zoom:
2023
 dd 0
2024
zwmax:
2025
 dd 0
2026
i2:
2027
 dd 0
2028
x1:
2029
 dd 0
2030
y1:
2031
 dd 0
2032
x2:
2033
 dd 0
2034
y2:
2035
 dd 0
2036
 
2037
count:
2038
 dd 0
2039
ilocal:
2040
 dd 0
2041
ycoord:
2042
 dd 0
2043
pside:
2044
 dd 0
2045
temp:
2046
 dd 0
2047
lineheight:
2048
 dd 0
2049
linewidth:
2050
 dd 0
2051
v_xadd:
2052
 dd 0
2053
pxadd:
2054
 dd 0
2055
pyadd:
2056
 dd 0
2057
ytop:
2058
 dd 0
2059
ytopy:
2060
 dd 0
2061
px:
2062
 dd 0
2063
py:
2064
 dd 0
2065
x:
2066
 dd 0
2067
y:
2068
 dd 0
2069
polyx1:
2070
 dd 0
2071
polyx2:
2072
 dd 0
2073
px1:
2074
 dd 0
2075
py1:
2076
 dd 0
2077
px2:
2078
 dd 0
2079
py2:
2080
 dd 0
2081
remeax:
2082
 dd 0
2083
remebx:
2084
 dd 0
2085
remecx:
2086
 dd 0
2087
remedx:
2088
 dd 0
2089
remedi:
2090
 dd 0
2091
remesi:
2092
 dd 0
2093
singamma:
2094
 dd 0
2095
sinbeta:
2096
 dd 0
2097
sinalpha:
2098
 dd 0
2099
alphacopy:
2100
 dd 0
2101
betacopy:
2102
 dd 0
2103
gammacopy:
2104
 dd 0
2105
 
2106
 
2107
;;fixed size arrays --------------------
2108
lefttable:
2109
 times 1920*2 dd 0 ; 1440
2110
righttable:
2111
 times 1920*2 dd 0
2112
polypoints:
2113
 times 12 dd 0 ; 8
2114
zbuffer:
2115
 times 10010 dd 0 ; 10000
2116
 
2117
; floating vars ------------------------
2118
 
2119
twohundred:
2120
 dd 200
2121
mausy:
2122
 dd 0
2123
 
2124
xl1:
2125
 dd 0
2126
yl1:
2127
 dd 0
2128
zl1:
2129
 dd 0
2130
 
2131
xl2:
2132
 dd 0
2133
yl2:
2134
 dd 0
2135
zl2:
2136
 dd 0
2137
 
2138
xl3:
2139
 dd 0
2140
yl3:
2141
 dd 0
2142
zl3:
2143
 dd 0
2144
 
2145
xloc:
2146
 dd 0
2147
yloc:
2148
 dd 0
2149
 
2150
tempdiv:
2151
 dd 0
2152
 
2153
 
2154
tex1:
2155
; the texture ( dd 0xRRGGBB,0xRRGGBB... 64*64*32 Bit)
2156
include "wall3.inc"
2157
 
2158
 
2159
labelt:
2160
      db   'MOS3DE',0
2161
 
2162
labellen:
2163
 
2164
I_END:
2165
 
2166
 
2167
 
2168