Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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<zw(i+1) Then zwmax=zw(i+1)
  715. ;   If zwmax<zw(i+2) Then zwmax=zw(i+2)
  716. ;   If zwmax<zw(i+3) Then zwmax=zw(i+3)
  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.    
  1566. include "CUBE.INC"
  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.