kolibrios-fun/programs/demos/mos3de/mos3de.asm
Kirill Lipatov (Leency) 2bf14704a9 fix name case
git-svn-id: svn://kolibrios.org@7351 a494cfbc-eb01-0410-851d-a64ba20cac60
2018-09-10 20:49:45 +00:00

2168 lines
56 KiB
NASM

;MOS3DE V 0.1 - MENUETOS 3D Engine V 0.1
; Compile with FASM for MENUET
; this is a very early Version: I'm so happy that it runs at all.
; Of course it's a bad ASM style and it can be optimized a lot.
; anyway - I have thought I uploap this so other PPL might optimize it
; as well or transform it to something completely diffrent.
; There are some Mouse- and Keyboardhandling Subs and Constructs. They are here
; because I will probably use them for the Navigation in a First Person
; Perspective Game - which is the goal of this project.
; http://www.melog.ch/mos_pub/ dietermarfurt@angelfire.com
; of course you can remove or replace them. It has only linear Texturemapping.
; Perspective Correction is a future option.
; a flag for multiple Textures selection should be implemented in the
; Meshfile Format. As I said - it's a very erarly version.
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd 0x200000 ; memory for app
dd 0x7fff0 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
IMAGE_W = 320
IMAGE_H = 240
START: ; start of execution
call init_gfx
call draw_window ; at first, draw the window
gamestart:
; ******* MOUSE CHECK *******
mov eax,37
mov ebx,1 ; check mouseposition
int 0x40
mov ebx,eax
shr eax,16
and eax,0x0000FFFF ; mousex
and ebx,0x0000FFFF ; mousey
mov [mousex],eax
mov [mousey],ebx
cmp eax,5 ; mouse out of window ?
jb check_refresh ; it will prevent an app-crash
cmp ebx,22
jb check_refresh
cmp eax, IMAGE_W
jg check_refresh
cmp ebx,221
jg check_refresh
cmp eax,160 ; navigating?
jb m_left
cmp eax,170 ;
jg m_right
continue:
cmp ebx,100 ;
jb s_up
cmp ebx,144 ;
jg s_down
; ******* END OF MOUSE CHECK *******
check_refresh:
mov eax,23 ; wait for system event with 10 ms timeout
mov ebx,1 ; wait 10 ms, then continue
int 0x40
; mov eax,11 ; or use this for full speed instead
; int 0x40
cmp eax,1 ; window redraw request ?
je red2
cmp eax,2 ; key in buffer ?
je key2
cmp eax,3 ; button in buffer ?
je button2
call clear_screen
call updateworld
call put_screen
;call log ; used for debugging
mov edi,[mouseya] ; check flag if a refresh has to be done
cmp edi,1
jne gamestart
mov [mouseya],dword 0
jmp gamestart
; END OF MAINLOOP
red2: ; redraw
call draw_window
; call draw_stuff
jmp gamestart
key2: ; key
mov eax,2
int 0x40
cmp al,1
je gamestart ; keybuffer empty
cmp ah,27 ; esc=End App
je finish
cmp ah,178 ; up
je s_up
cmp ah,177 ; down
je s_down
cmp ah,176 ; left
je s_left
cmp ah,179 ; right
je s_right
jmp gamestart ; was any other key
s_up: ; walk forward (key or mouse)
mov eax,[vpx]
mov ebx,[vpy]
mov ecx,[vheading]
imul ecx,4
add ecx,sinus
mov edi,[ecx]
mov edx,[vheading]
imul edx,4
add edx,sinus
add edx,3600
cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
jb ok200
sub edx,14400
ok200:
mov esi,[edx]
; sal esi,1 ; edit walking speed here
; sal edi,1
add eax,edi ; newPx
add ebx,esi ; newPy
mov edi,eax ; newPx / ffff
mov esi,ebx ; newPy / ffff
sar edi,16
sar esi,16
mov ecx,esi
sal ecx,5 ; equal *32
add ecx,edi
add ecx,grid
cmp [ecx],byte 0 ; collision check
jne cannotwalk0
mov [vpx],eax
mov [vpy],ebx
mov [mouseya],dword 1 ; set refresh flag
cannotwalk0:
jmp check_refresh
s_down: ; walk backward
mov eax,[vpx]
mov ebx,[vpy]
mov ecx,[vheading]
imul ecx,4
add ecx,sinus
mov edi,[ecx]
mov edx,[vheading]
imul edx,4
add edx,sinus
add edx,3600
cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
jb ok201
sub edx,14400
ok201:
mov esi,[edx]
; sal esi,1 ; edit walking speed here
; sal edi,1
sub eax,edi ; newPx
sub ebx,esi ; newPy
mov edi,eax ; newPx / ffff
mov esi,ebx ; newPy / ffff
sar edi,16
sar esi,16
mov ecx,esi
sal ecx,5
add ecx,edi
add ecx,grid
cmp [ecx],byte 0
jne cannotwalk1
mov [vpx],eax
mov [vpy],ebx
mov [mouseya],dword 1
cannotwalk1:
jmp check_refresh
s_left: ; turn left (key)
mov edi,[vheading] ; heading
add edi,50
cmp edi,1800
jb ok_heading0
sub edi,1800
ok_heading0:
mov [vheading],edi
mov [mouseya],dword 1
jmp check_refresh
s_right: ; turn right
mov edi,[vheading]
sub edi,50
cmp edi,-1
jg ok_heading1
add edi,1800
ok_heading1:
mov [vheading],edi
mov [mouseya],dword 1
jmp check_refresh
m_left: ; turn left (mouse)
mov edi,[vheading] ; heading
mov ecx,160
sub ecx,eax
sar ecx,2
add edi,ecx
cmp edi,1800
jb ok_heading2
sub edi,1800
ok_heading2:
mov [vheading],edi
mov [mouseya],dword 1
jmp continue ; allow both: walk and rotate
m_right: ; turn right
mov edi,[vheading]
sub eax,170
sar eax,2
sub edi,eax
cmp edi,-1
jg ok_heading3
add edi,1800
ok_heading3:
mov [vheading],edi
mov [mouseya],dword 1
jmp continue
button2: ; button
mov eax,17 ; get id
int 0x40
cmp ah,1 ; button id=1 ?
jne gamestart
; eo GAME mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
finish:
mov eax,-1 ; close this program
int 0x40
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw; 2 - end
int 0x40
mov eax, 48 ; get skin height
mov ebx, 4
int 0x40
lea ecx,[eax + (119 shl 16) + IMAGE_H + 4]
mov ebx,192*65536+IMAGE_W+9 ; [x start] *65536 + [x size]
mov edx,0x74000000 ; skinned window, not resizable
mov edi,labelt ; window title
mov eax,0 ; function 0 : define and draw window
int 0x40
mov eax,12
mov ebx,2
int 0x40
ret
; ---------------------------------------------------------------------
init_gfx:
; Pwidth = 63 Shl 16 ;original texture width in pixels -1 shl 16
; Pheight = 63 Shl 16 ;original texture height in pixels -1 shl 16
mov [pwidth],dword 63
shl dword[pwidth],16
mov [pheight],dword 63
shl dword[pheight],16
;; Read in a mesh
mov eax,0 ; tex1+4
mov edi,anz
add edi,4 ; beginning of mesh data
;using a copy will allow inverse kinematic transformations (future option)
readmesh:
mov edx,eax
add edx,a_xwww ; desti
mov ecx,[edi] ; value in ecx
mov [edx],ecx
add edi,4
;---
mov edx,eax
add edx,a_ywww ; desti
mov ecx,[edi] ; value in ecx
mov [edx],ecx
add edi,4
;---
mov edx,eax
add edx,a_zwww ; desti
mov ecx,[edi] ; value in ecx
mov [edx],ecx
add edi,4
;---
add eax,4
cmp edi,eo_mesh
jl readmesh
; zoom=-500
mov [zoom],dword -500
ret
;------------------------------------------------------------------
log:
;write some Variable info to screen (used for debugging)
pusha
mov edi,wonder ;a_xwww
;add edi,200
mov [remecx], dword 24
print:
mov eax,47
mov ebx,0x000f0000
;mov ebx,0x000f0100 ; hex
mov ecx,[edi]
mov edx,[remecx]
or edx,0x000C0000
mov esi,0x00ff0000
int 0x40
add [remecx],dword 8
add edi,dword 4
cmp [remecx], dword 250
jl print
popa
ret
; ---------------------------------------------------------------------
; UPDATE WORLD
; ---------------------------------------------------------------------
updateworld:
mov edx,[a_xw]
; Miny% = 32767
; Maxy% = 0
mov [miny],dword 32737
mov [maxy],dword 0
; Color 0,0,0 ; clear screen - l8er
; Rect 0,0,320,240,1
; a=a+1.0 ; automatic rotation...
add [a],dword 10
cmp [a],dword 3598
jl ok360
mov [a],dword 0
ok360:
; If a>359.9 Then a=0
; alpha=a
; beta=a
; gamma=a+a Mod 360
mov eax,[a]
mov [alpha],eax
mov [beta], eax
mov [gamma],eax
add [gamma],eax
cmp [gamma],dword 3599
jl ok360_2
sub [gamma],dword 3600
ok360_2:
; mausy#=0.1+(MouseY()/50.0) ; >>>>>>l8er
mov eax,[alpha]
mov [alphacopy],eax
mov eax,[beta]
mov [betacopy],eax
mov eax,[gamma]
mov [gammacopy],eax
; For i=0 To anz ; do rotation and projection etc
mov esi,0
for_i:
; *****************************
; ROTATE pitch jaw roll...
; *****************************
;; xl1#=zwww(i)*Sin(gamma)+xwww(i)*Cos(gamma)
mov eax,esi
imul eax,4
add eax,a_zwww
mov ebx,[eax]
mov eax,[gammacopy]
call get_sinus
imul ebx,[eax]
mov [tempdiv],ebx ; is zwww(i)*sin(gamma)
mov eax,esi
imul eax,4
add eax,a_xwww
mov ebx,[eax]
mov eax,[gammacopy]
call get_cosinus
imul ebx,[eax] ; is xwww*cos(gamma
add ebx,[tempdiv]
mov eax,ebx
;or eax,1
cdq
mov ecx,6553
idiv ecx
mov [xl1],eax
;; yl1#=ywww(i)
mov eax,esi
imul eax,4
add eax,a_ywww
mov ebx,[eax]
mov [yl1],ebx
;; zl1#=zwww(i)*Cos(gamma)-xwww(i)*Sin(gamma)
mov eax,esi
imul eax,4
add eax,a_zwww
mov ebx,[eax]
mov eax,[gammacopy]
call get_cosinus
imul ebx,[eax]
mov [tempdiv],ebx ; is zwww(i)*cos(gamma)
mov eax,esi
imul eax,4
add eax,a_xwww
mov ebx,[eax]
mov eax,[gammacopy]
call get_sinus
imul ebx,[eax] ; is xwww*sin(gamma
sub [tempdiv],ebx
mov eax,[tempdiv]
;or eax,1
cdq
mov ecx,6553 ; once 6500
idiv ecx
mov [zl1],eax
;
;-----------------------------------------------------------------------
;; xl2#=xl1
mov eax,[xl1]
mov [xl2],eax
;; yl2#=yl1*Cos(beta)-zl1*Sin(beta)
mov ebx,[yl1]
mov eax,[betacopy]
call get_cosinus
imul ebx,[eax]
mov [tempdiv],ebx ; is yl1*cos(beta)
mov ebx,[zl1] ; zl1
mov eax,[betacopy]
call get_sinus
imul ebx,[eax] ; is zl1*sin(beta
sub [tempdiv],ebx
mov eax,[tempdiv]
;or eax,1
cdq
mov ecx,6553
idiv ecx
mov [yl2],eax
;; zl2#=yl1*Sin(beta)+zl1*Cos(beta)
mov ebx,[yl1]
mov eax,[betacopy]
call get_sinus
imul ebx,[eax]
mov [tempdiv],ebx ; is yl1*sin(beta)
mov ebx,[zl1] ; zl1
mov eax,[betacopy]
call get_cosinus
imul ebx,[eax] ; is zl1*cos(beta
add ebx,[tempdiv]
mov eax,ebx
;or eax,1
cdq
mov ecx,6553
idiv ecx
mov [zl2],eax
;-----------------------------------------------------------------------
;; xl3#=(yl2*Sin(alpha)+xl2*Cos(alpha))
mov ebx,[yl2]
mov eax,[alphacopy]
call get_sinus
imul ebx,[eax]
mov [tempdiv],ebx ; is yl2*sin(alpha)
mov ebx,[xl2] ; xl2
mov eax,[alphacopy]
call get_cosinus
imul ebx,[eax] ; is xl2*cos(alpha
add ebx,[tempdiv]
mov eax,ebx
;or eax,1
cdq
mov ecx,6553
idiv ecx
mov [xl3],eax
;; yl3#=(yl2*Cos(alpha)-xl2*Sin(alpha))
mov ebx,[yl2]
mov eax,[alphacopy]
call get_cosinus
imul ebx,[eax]
mov [tempdiv],ebx ; is yl2*cos(alpha)
mov ebx,[xl2] ; xl2
mov eax,[alphacopy]
call get_sinus
imul ebx,[eax] ; is xl2*sin(alpha
sub [tempdiv],ebx
mov eax,[tempdiv]
;or eax,1
cdq
mov ecx,6553
idiv ecx
mov [yl3],eax
;; zl3#=(zl2)
mov eax,[zl2]
mov [zl3],eax
;-----------------------------------------------------------------------
; *********************
; PROJECTING 3D to 2D
; If yloc# - Zoom <> 0 Then yloc = Int(yl3 ) * 200 / (zl3 - Zoom)
;-------
mov ecx,[zl3]
sub ecx,[zoom]
mov eax,[yl3]
imul eax,200
or eax,1
cdq
idiv ecx
;mov eax,[yl3] ; no perpective
mov [yloc],eax
;------
; If xloc# - Zoom <> 0 Then xloc = Int(xl3 ) * 200 / (zl3 - Zoom)
;------
mov ecx,[zl3]
sub ecx,[zoom]
mov eax,[xl3]
imul eax,200
or eax,1
cdq
idiv ecx
;mov eax,[xl3] ; no perspective
mov [xloc],eax
;------
; xw(i)=((mausy#)*xloc) +160
; yw(i)=((mausy#)*yloc) +120
; zw(i)=(zl3+256)
mov eax,[mousey] ; define scaling
mov [factor],eax
cmp eax,32000
jl positivemousey
mov [factor],dword 10
jmp less220
positivemousey:
cmp eax,10
jg more20
mov [factor],dword 10
jmp less220
more20:
cmp eax,220
jl less220
mov [factor],dword 220
less220:
mov eax,esi ; i...
imul eax,4
mov ecx,[xloc]
mov eax,esi
imul eax,4
mov ebx,a_xw
add ebx,eax
imul ecx,[factor]
sar ecx,5
mov [ebx],ecx
add [ebx],dword 160
mov ecx,[yloc]
; mov eax,esi
; imul eax,4
mov ebx,a_yw
add ebx,eax
imul ecx,[factor]
sar ecx,5
mov [ebx],ecx
add [ebx],dword 120
mov ecx,[zl3] ; used for z sorting
mov ebx,a_zw
add ebx,eax
mov [ebx],ecx
add [ebx],dword 256
; Next
inc esi
cmp esi,[anz]
jle for_i
;---------------
mov [sorted_quads],dword 0
; ; z-sorting...
; For i=0 To 10000 ; clear old info
; zbuffer(i)=-1
; Next
mov eax,zbuffer
mov ebx,eax
add ebx,40000
clear_zbuffer:
mov [eax],dword 1000000
add eax,4
cmp eax,ebx
jle clear_zbuffer
; For i=0 To anz-3 Step 4
mov eax,0
mov ebx,[anz]
for_i_0_to_anz:
; If zw(i)>=0 ; clip Quads behind Camera
mov ecx,eax
imul ecx,4
add ecx,a_zw
mov edx,[ecx]
cmp edx,0
jle behindcamera
; zwmax=zw(i)
mov esi,edx
; ;find quads internal most far point
; If zwmax<zw(i+1) Then zwmax=zw(i+1)
; If zwmax<zw(i+2) Then zwmax=zw(i+2)
; If zwmax<zw(i+3) Then zwmax=zw(i+3)
; skip this for debugging
; jmp no_internal_sorting
cmp esi,[ecx+4]
jge checkmore1
mov esi,[ecx+4]
checkmore1:
cmp esi,[ecx+8]
jge checkmore2
mov esi,[ecx+8]
checkmore2:
cmp esi,[ecx+12]
jge checkmore3
mov esi,[ecx+12]
checkmore3:
no_internal_sorting:
mov [i],eax ; anz-ID in [i] (not times 4)
push eax
push ebx
; While zbuffer(zwmax)<>-1 And zwmax<10000
; zwmax=zwmax+1
; Wend
mov eax,esi ; is actual z/poititon of point (used for z-order)
imul eax,4
findslot:
mov ebx,eax
add ebx,zbuffer
cmp [ebx],dword 1000000
je found_empty_slot
add eax,4
cmp eax,40000
jl findslot
found_empty_slot:
; zbuffer(zwmax)=i
inc dword[sorted_quads] ; check slot writing
mov ecx,[i]
mov [ebx],ecx
pop ebx
pop eax
; EndIf
behindcamera:
; Next
add eax,4
cmp eax,[anz] ;ebx
jl for_i_0_to_anz
;----------------
;mov [rendered_quads],dword 0 ; debugging...
; For i2=10000 To 0 Step -1 ; reading quads in z-order from far to near
mov eax,40000
mov ebx,0
for_i_0_to_10000:
; i=zbuffer(i2)
mov edx,eax
add edx,zbuffer
mov ecx,[edx] ; i...
; If i>-1 And i< anz-2 ; if it isn't -1 then it's a Quad Point 1 ID
cmp ecx,1000000
je is_empty_slot
;inc dword[rendered_quads] ; used for debugging
; ;***Mapping***
; ;GetPolygonPoints(i)
; ;FindSmallLargeY()
mov [ilocal],ecx
call get_polygon_points
call find_small_large_y
; X1% = Polypoints%(0, 0)
mov edi,[polypoints]
mov [x1],edi
; Y1% = Polypoints%(0, 1)
mov edi,[polypoints+4]
mov [y1],edi
; X2% = Polypoints%(1, 0)
mov edi,[polypoints+8]
mov [x2],edi
; Y2% = Polypoints%(1, 1)
mov edi,[polypoints+12]
mov [y2],edi
; ScanConvert(X1%, Y1%, X2%, Y2%, 1) ;scan top of picture
mov [pside],dword 1
call scan_convert
; X1% = Polypoints%(1, 0)
mov edi,[polypoints+8]
mov [x1],edi
; Y1% = Polypoints%(1, 1)
mov edi,[polypoints+12]
mov [y1],edi
; X2% = Polypoints%(2, 0)
mov edi,[polypoints+16]
mov [x2],edi
; Y2% = Polypoints%(2, 1)
mov edi,[polypoints+20]
mov [y2],edi
; ScanConvert(X1%, Y1%, X2%, Y2%, 2) ;scan Right of picture
mov [pside],dword 2
call scan_convert
; X1% = Polypoints%(2, 0)
mov edi,[polypoints+16]
mov [x1],edi
; Y1% = Polypoints%(2, 1)
mov edi,[polypoints+20]
mov [y1],edi
; X2% = Polypoints%(3, 0)
mov edi,[polypoints+24]
mov [x2],edi
; Y2% = Polypoints%(3, 1)
mov edi,[polypoints+28]
mov [y2],edi
; ScanConvert(X1%, Y1%, X2%, Y2%, 3) ;scan bottom of picture
mov [pside],dword 3
call scan_convert
; X1% = Polypoints%(3, 0)
mov edi,[polypoints+24]
mov [x1],edi
; Y1% = Polypoints%(3, 1)
mov edi,[polypoints+28]
mov [y1],edi
; X2% = Polypoints%(0, 0)
mov edi,[polypoints]
mov [x2],edi
; Y2% = Polypoints%(0, 1)
mov edi,[polypoints+4]
mov [y2],edi
; ScanConvert(X1%, Y1%, X2%, Y2%, 4) ;scan Left of picture
mov [pside],dword 4
call scan_convert
; TextureMap()
call texture_map
; EndIf
is_empty_slot:
; Next
sub eax,4
cmp eax,0 ;ebx
jge for_i_0_to_10000
;Wend
ret
;End
; ---------------------------------------------------------------------
get_sinus:
imul eax,4 ; expects degree*10
add eax,sinus
ret
get_cosinus:
imul eax,4 ; expects degree*10
add eax,sinus
add eax,10804
cmp eax,eosinus
jl ok3600sub
sub eax,14400
ok3600sub:
ret
;; ------------------ texture mapping functions-----------------------------
;Function GetPolygonPoints(ilocal%) ; initially read in a rectangle
get_polygon_points:
pusha
; For Count% = 0 To 3
; Polypoints%(Count%, 0) = xw(ilocal%+Count%)
; Polypoints%(Count%, 1) = yw(ilocal%+Count%)
; Next
mov eax,0
; ---
count_0_3:
mov ebx,eax
imul ebx,8 ; count
add ebx,polypoints ; desti adr
mov ecx,eax
add ecx,[ilocal]
imul ecx,4
add ecx,a_xw ; src adr
mov edx,[ecx]
mov [ebx],edx
; ----
add ebx,4 ; desti 2
mov ecx,eax
add ecx,[ilocal]
imul ecx,4
add ecx,a_yw ; src 2
mov edx,[ecx]
mov [ebx],edx
; ----
inc eax
cmp eax,4
jl count_0_3
;End Function
popa
ret
; -------------------------------------------------------------------------
;Function FindSmallLargeY()
find_small_large_y:
pusha
; For Count% = 0 To 3
mov eax,0
for03b:
; Ycoord% = Polypoints%(Count%, 1)
mov ebx,eax
imul ebx,8
add ebx,4
add ebx,polypoints
mov ecx,[ebx]
; If Ycoord% < Miny% Then ; is this the New lowest y co-ord?
; Miny% = Ycoord% ; Yes...
; End If
cmp ecx,[miny]
jge isge0
mov [miny],ecx
isge0:
; If Ycoord% > Maxy% Then ; is this the New highest y co-ord?
; Maxy% = Ycoord% ; Yes...
; End If
cmp ecx,[maxy]
jle isge1
mov [maxy],ecx
isge1:
; Next
inc eax
cmp eax,4
jl for03b
;End Function
popa
ret
; -------------------------------------------------------------------------
;Function ScanConvert (X1%, Y1%, X2%, Y2%, Pside)
scan_convert:
pusha
; If Y2% < Y1% Then
mov eax,[y1]
mov ebx,[y2]
cmp eax,ebx
jl l_else0
; temp%=X1% : X1%=X2% : X2%=temp%
; temp%=Y1% : Y1%=Y2% : Y2%=temp%
; Lineheight% = (Y2% - Y1%)
; ScanLeftSide(X1%, X2%, Y1%, Lineheight%, Pside)
mov [y1],ebx ; swap y,x
mov [y2],eax
mov eax,[x1]
mov ebx,[x2]
mov [x1],ebx
mov [x2],eax
mov eax,[y1]
mov ebx,[y2]
; eo swap
sub ebx,eax
mov [lineheight],ebx
call scan_left_side
jmp l_endif0
; Else
l_else0:
; Lineheight% = (Y2% - Y1%)
; ScanRightSide(X1%, X2%, Y1%, Lineheight%, Pside)
sub ebx,eax
mov [lineheight],ebx
call scan_right_side
; End If
l_endif0:
;End Function
popa
ret
; -------------------------------------------------------------------------
;Function ScanLeftSide (X1%, X2%, Ytop%, Lineheight%, Pside)
scan_left_side:
pusha
mov eax,[y1]
mov [ytop],eax
; Lineheight% = Lineheight% + 1 ; prevent divide by zero
inc dword[lineheight]
; Xadd = (X2% - X1%) Shl 16
mov edi,[x2]
sub edi,[x1]
sal edi,16
; Xadd = Xadd / Lineheight%
mov eax,edi ; whole
cdq
mov ebx,[lineheight] ; divisor
; or ebx,1
idiv ebx ; result now in eax
mov [v_xadd],eax
; ------------
; If Pside = 1 Then
cmp [pside],dword 1
jne psidenot10
; Px = Pwidth% - 1
; Py = 0
mov edi,[pwidth]
mov esi,edi
sub esi,1
mov [px],esi
mov [py],dword 0
; Pxadd = -Pwidth% / Lineheight%
; Pyadd = 0
mov eax,0
sub eax,[pwidth]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx ; result now in eax
mov [pxadd],eax
mov [pyadd],dword 0
; End If
psidenot10:
; ------------
; If Pside = 2 Then
cmp [pside],dword 2
jne psidenot20
; Px = Pwidth%
; Py = Pheight%
mov edi,[pwidth]
mov esi,[pheight]
mov [px],edi
mov [py],esi
; Pxadd = 0
; Pyadd = -Pheight% / Lineheight%
mov [pxadd],dword 0
mov eax,0
sub eax,[pheight]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx ; result now in eax
mov [pyadd],eax
; End If
psidenot20:
; ------------
; If Pside = 3 Then
cmp [pside],dword 3
jne psidenot30
; Px = 0
; Py = Pheight%
mov [px],dword 0
mov edi,[pheight]
mov [py],edi
; Pxadd = Pwidth% / Lineheight%
; Pyadd = 0
mov eax,[pwidth]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx ; result now in eax
mov [pxadd],eax
mov [pyadd],dword 0
; End If
psidenot30:
; ------------
; If Pside = 4 Then
cmp [pside],dword 4
jne psidenot40 ; jne
; Px = 0
; Py = 0
mov [px],dword 0
mov [py],dword 0
; Pxadd = 0
; Pyadd = Pheight% / Lineheight%
mov [pxadd],dword 0
mov eax,[pheight]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx
mov [pyadd],eax
; End If
psidenot40:
; ------------
; x = X1% Shl 16
mov edx,[x1] ; used for x
mov edi,[px] ; used for px
mov esi,[py] ; used for py
sal edx,16
;mov [x],edx
;------
; For y% = 0 To Lineheight%
mov eax,0
for0lineheight0:
; Ytopy%=Ytop%+y%
mov ebx,[ytop]
mov [ytopy],ebx
add [ytopy],eax
; If Ytopy%<0 Then Ytopy%=0 ; prevent read pre array
cmp [ytopy], dword 0
jge isnot00
mov [ytopy],dword 0
isnot00:
; Lefttable(Ytopy%, 0) = x Sar 16 ;polygon x
mov ecx,[ytopy]
imul ecx,16
add ecx,lefttable
mov [ecx],edx
sar dword[ecx],16
; Lefttable(Ytopy%, 1) = Px ;picture x
add ecx,4
mov [ecx],edi
; Lefttable(Ytopy%, 2) = Py ;picture y
add ecx,4
mov [ecx],esi
; x = x + Xadd ;Next polygon x
; Px = Px + Pxadd ;Next picture x
; Py = Py + Pyadd ;Next picture y
add edx,[v_xadd]
add edi,[pxadd]
add esi,[pyadd]
;------
; Next
inc eax
cmp eax,[lineheight]
jl for0lineheight0
;End Function
popa
ret
; -------------------------------------------------------------------------
; -------------------------------------------------------------------------
;Function ScanRightSide (X1%, X2%, Ytop%, Lineheight%, Pside)
scan_right_side:
pusha
mov eax,[y1]
mov [ytop],eax
; Lineheight% = Lineheight% + 1 ; prevent divide by zero
inc dword[lineheight]
; Xadd = (X2% - X1%) Shl 16
mov edi,[x2]
sub edi,[x1]
sal edi,16
; Xadd = Xadd / Lineheight%
mov eax,edi ; whole
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx ; result now in eax
mov [v_xadd],eax
; ------------
; If Pside = 1 Then
cmp [pside],dword 1
jne psidenot11
; Px = 0
; Py = 0
mov [px],dword 0
mov [py],dword 0
; Pxadd = Pwidth% / Lineheight%
; Pyadd = 0
mov eax,[pwidth]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx ; result now in eax
mov [pxadd],eax
mov [pyadd],dword 0
; End If
psidenot11:
; ------------
; If Pside = 2 Then
cmp [pside],dword 2
jne psidenot21
; Px = Pwidth%
; Py = 0
mov edi,[pwidth]
mov [px],edi
mov [py],dword 0
; Pxadd = 0
; Pyadd = Pheight% / Lineheight%
mov [pxadd],dword 0
mov eax,[pheight]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx ; result now in eax
mov [pyadd],eax
; End If
psidenot21:
; ------------
; If Pside = 3 Then
cmp [pside],dword 3
jne psidenot31
; Px = Pwidth%
; Py = Pheight%
mov edi,[pwidth]
mov [px],edi
mov esi,[pheight]
mov [py],esi
; Pxadd = -Pwidth% / Lineheight%
; Pyadd = 0
mov eax,0
sub eax,[pwidth]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,3 ; prevent div 0
idiv ebx ; result now in eax
mov [pxadd],eax
mov [pyadd],dword 0
; End If
psidenot31:
; ------------
; If Pside = 4 Then
cmp [pside],dword 4
jne psidenot41 ; jne
; Px = 0
; Py = Pheight%
mov [px],dword 0
mov esi,[pheight]
mov [py],esi
; Pxadd = 0
; Pyadd = -Pheight% / Lineheight%
mov [pxadd],dword 0
mov eax,0
sub eax,[pheight]
cdq
mov ebx,[lineheight] ; divisor
;or ebx,1
idiv ebx
mov [pyadd],eax
; End If
psidenot41:
push edx
push edi
push esi
; ------------
; x = X1% Shl 16
mov edx,[x1] ; used for x
mov edi,[px] ; used for px
mov esi,[py] ; used for py
sal edx,16
cmp [lineheight],dword 100 ; lineheight is up to 33 mio ???
jle okok
mov eax,[lineheight]
mov [wonder+4],eax
okok:
;------
; For y% = 0 To Lineheight%
mov eax,0
for0lineheight1b:
; Ytopy%=Ytop%+y%
mov ebx,[ytop]
mov [ytopy],ebx
add [ytopy],eax
; If Ytopy%<0 Then Ytopy%=0 ; prevent read pre array
cmp [ytopy], dword 0
jg isnot01
mov [ytopy],dword 0
isnot01:
; righttable(Ytopy%, 0) = x Sar 16 ;polygon x
mov ecx,[ytopy]
imul ecx,16
add ecx,righttable
mov [ecx],edx
sar dword[ecx],16
; righttable(Ytopy%, 1) = Px ;picture x
add ecx,4
mov [ecx],edi
; righttable(Ytopy%, 2) = Py ;picture y
add ecx,4
mov [ecx],esi
; x = x + Xadd ;Next polygon x
; Px = Px + Pxadd ;Next picture x
; Py = Py + Pyadd ;Next picture y
add edx,[v_xadd]
add edi,[pxadd]
add esi,[pyadd]
;------
; Next
inc eax
cmp eax,[lineheight]
jl for0lineheight1b
dbg2:
pop esi
pop edi
pop edx
;End Function
popa
ret
; -------------------------------------------------------------------------
; well I'm shure the following Sub CAN and SHOULD be optimized a LOT.
;Function TextureMap()
texture_map:
pusha
; For y% = Miny% To Maxy%
mov eax,[miny]
for_miny_maxy:
; If y>0 And y<=239
cmp eax,0
jle clipy
cmp eax,239
jg clipy
mov [y],eax
; Polyx1% = Lefttable((y%), 0)
mov ebx,eax
sal ebx,4
add ebx,lefttable
mov ecx,[ebx]
mov [polyx1],ecx
; Px1 = Lefttable(y%, 1)
add ebx,4
mov ecx,[ebx]
mov [px1],ecx
; Py1 = Lefttable(y%, 2)
add ebx,4
mov ecx,[ebx]
mov [py1],ecx
; Polyx2% = Righttable((y%), 0)
mov ebx,eax
sal ebx,4
add ebx,righttable
mov ecx,[ebx]
mov [polyx2],ecx
; Px2 = Righttable(y%, 1)
add ebx,4
mov ecx,[ebx]
mov [px2],ecx
; Py2 = Righttable(y%, 2)
add ebx,4
mov ecx,[ebx]
mov [py2],ecx
; Linewidth% = Polyx2% - Polyx1%
mov ecx,[polyx2]
sub ecx,[polyx1]
; Linewidth%=Linewidth% Or 1
or ecx,1
mov [linewidth],ecx
; Pxadd = ((Px2 - Px1)) / Linewidth%
mov eax,[px2]
sub eax,[px1]
cdq
mov ebx,[linewidth] ; divisor
or ebx,1
idiv ebx ; should be idiv ... probs
mov [pxadd],eax
; Pyadd = ((Py2 - Py1)) / Linewidth%
mov eax,[py2]
sub eax,[py1]
cdq
mov ebx,[linewidth] ; divisor
or ebx,1
idiv ebx ; should be idiv ...probs
mov [pyadd],eax
mov edi,[px1]
mov esi,[py1]
; For x% = Polyx1% To Polyx2%
mov eax,[polyx1]
cmp eax,[polyx2]
jge clipxfully
for_polyx1_polyx2:
; If x>0 And x<=319
cmp eax,0
jl clipx
cmp eax,319
jg clipx
; Col%=ReadPixelFast((Px1 Shr 16),(Py1 Shr 16),imgtxt)
mov ebx,edi
sar ebx,16 ; is eq (px1 shr 16)*64
and ebx,63
sal ebx,2 ; is x
mov ecx,esi
sar ecx,16
and ecx,63
sal ecx,8 ; y
add ecx,ebx
add ecx,tex1 ; adr of texturepixel now in ecx
mov edx,[ecx]; rgb now in edx
; WritePixelFast x%,y%,Col%
mov ebx,[y]
mov [tempdiv],ebx
shl dword [tempdiv],6
shl ebx,10
sub ebx,[tempdiv]
;this was imul ebx,960 ; *1024 - *64
add ebx,eax
add ebx,eax
add ebx,eax
add ebx,0x80000
or [ebx],edx
; EndIf
clipx:
; Px1 = Px1 + Pxadd
; Py1 = Py1 + Pyadd
add edi,dword [pxadd]
add esi,dword [pyadd]
; Next x
inc eax
cmp eax,[polyx2]
jl for_polyx1_polyx2
clipxfully:
mov eax,[y]
; EndIf
clipy:
; Next y
inc eax
cmp eax,[maxy]
jl for_miny_maxy
;End Function
popa
ret
; -------------------------------------------------------------------------
put_screen:
pusha
mov eax,7
mov ebx,0x80000
mov ecx,IMAGE_W*65536+IMAGE_H
mov edx,0
int 0x40
popa
ret
clear_screen:
push ebx
mov ebx,0x80000
cls:
mov [ebx],dword 0
add ebx,4
cmp ebx,0x80000+(IMAGE_W*IMAGE_H*3)
jl cls
pop ebx
ret
; -------------------------------------------------------------------------
; DATA AREA
; cube.inc includes the mesh 3D Data, in this case a simple cube. Any Model
; is theoreticly possible. Check the File, the Format is trivial.
; The Quads should not intersect for a bearable z-sorting. The Quads must be
; clockwise.
include "cube.inc"
;;------------------------------
grid: ; 32*32 Blocks, Map: 0 = Air, 1 to 5 = Wall
; this is a relict from an other program. I leave it here to keep
; the Navigation Subs compatible (planning to recycle them)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
sinus:
dd 0,11,22,34,45,57,68,80,91,102
dd 114,125,137,148,160,171,182,194,205,217
dd 228,240,251,263,274,285,297,308,320,331
dd 342,354,365,377,388,400,411,422,434,445
dd 457,468,479,491,502,514,525,536,548,559
dd 571,582,593,605,616,628,639,650,662,673
dd 685,696,707,719,730,741,753,764,775,787
dd 798,810,821,832,844,855,866,878,889,900
dd 912,923,934,946,957,968,979,991,1002,1013
dd 1025,1036,1047,1059,1070,1081,1092,1104,1115,1126
dd 1138,1149,1160,1171,1183,1194,1205,1216,1228,1239
dd 1250,1261,1272,1284,1295,1306,1317,1328,1340,1351
dd 1362,1373,1384,1396,1407,1418,1429,1440,1451,1463
dd 1474,1485,1496,1507,1518,1529,1541,1552,1563,1574
dd 1585,1596,1607,1618,1629,1640,1651,1663,1674,1685
dd 1696,1707,1718,1729,1740,1751,1762,1773,1784,1795
dd 1806,1817,1828,1839,1850,1861,1872,1883,1894,1905
dd 1916,1926,1937,1948,1959,1970,1981,1992,2003,2014
dd 2025,2036,2046,2057,2068,2079,2090,2101,2111,2122
dd 2133,2144,2155,2166,2176,2187,2198,2209,2219,2230
dd 2241,2252,2262,2273,2284,2295,2305,2316,2327,2337
dd 2348,2359,2369,2380,2391,2401,2412,2423,2433,2444
dd 2454,2465,2476,2486,2497,2507,2518,2529,2539,2550
dd 2560,2571,2581,2592,2602,2613,2623,2634,2644,2655
dd 2665,2675,2686,2696,2707,2717,2728,2738,2748,2759
dd 2769,2779,2790,2800,2811,2821,2831,2841,2852,2862
dd 2872,2883,2893,2903,2913,2924,2934,2944,2954,2965
dd 2975,2985,2995,3005,3015,3026,3036,3046,3056,3066
dd 3076,3086,3096,3106,3117,3127,3137,3147,3157,3167
dd 3177,3187,3197,3207,3217,3227,3237,3246,3256,3266
dd 3276,3286,3296,3306,3316,3326,3336,3345,3355,3365
dd 3375,3385,3394,3404,3414,3424,3433,3443,3453,3463
dd 3472,3482,3492,3501,3511,3521,3530,3540,3550,3559
dd 3569,3578,3588,3598,3607,3617,3626,3636,3645,3655
dd 3664,3674,3683,3693,3702,3711,3721,3730,3740,3749
dd 3758,3768,3777,3786,3796,3805,3814,3824,3833,3842
dd 3852,3861,3870,3879,3888,3898,3907,3916,3925,3934
dd 3943,3953,3962,3971,3980,3989,3998,4007,4016,4025
dd 4034,4043,4052,4061,4070,4079,4088,4097,4106,4115
dd 4124,4133,4142,4150,4159,4168,4177,4186,4194,4203
dd 4212,4221,4230,4238,4247,4256,4264,4273,4282,4290
dd 4299,4308,4316,4325,4333,4342,4351,4359,4368,4376
dd 4385,4393,4402,4410,4419,4427,4435,4444,4452,4461
dd 4469,4477,4486,4494,4502,4511,4519,4527,4535,4544
dd 4552,4560,4568,4577,4585,4593,4601,4609,4617,4625
dd 4634,4642,4650,4658,4666,4674,4682,4690,4698,4706
dd 4714,4722,4730,4737,4745,4753,4761,4769,4777,4785
dd 4792,4800,4808,4816,4824,4831,4839,4847,4854,4862
dd 4870,4877,4885,4893,4900,4908,4915,4923,4930,4938
dd 4945,4953,4960,4968,4975,4983,4990,4998,5005,5012
dd 5020,5027,5034,5042,5049,5056,5064,5071,5078,5085
dd 5093,5100,5107,5114,5121,5128,5135,5143,5150,5157
dd 5164,5171,5178,5185,5192,5199,5206,5213,5220,5226
dd 5233,5240,5247,5254,5261,5268,5274,5281,5288,5295
dd 5301,5308,5315,5321,5328,5335,5341,5348,5355,5361
dd 5368,5374,5381,5387,5394,5400,5407,5413,5420,5426
dd 5433,5439,5445,5452,5458,5464,5471,5477,5483,5489
dd 5496,5502,5508,5514,5521,5527,5533,5539,5545,5551
dd 5557,5563,5569,5575,5581,5587,5593,5599,5605,5611
dd 5617,5623,5629,5635,5640,5646,5652,5658,5664,5669
dd 5675,5681,5686,5692,5698,5703,5709,5715,5720,5726
dd 5731,5737,5742,5748,5753,5759,5764,5770,5775,5781
dd 5786,5791,5797,5802,5807,5813,5818,5823,5828,5834
dd 5839,5844,5849,5854,5859,5864,5870,5875,5880,5885
dd 5890,5895,5900,5905,5910,5915,5920,5924,5929,5934
dd 5939,5944,5949,5953,5958,5963,5968,5972,5977,5982
dd 5986,5991,5996,6000,6005,6009,6014,6019,6023,6028
dd 6032,6036,6041,6045,6050,6054,6059,6063,6067,6072
dd 6076,6080,6084,6089,6093,6097,6101,6105,6109,6114
dd 6118,6122,6126,6130,6134,6138,6142,6146,6150,6154
dd 6158,6162,6166,6169,6173,6177,6181,6185,6188,6192
dd 6196,6200,6203,6207,6211,6214,6218,6222,6225,6229
dd 6232,6236,6239,6243,6246,6250,6253,6257,6260,6263
dd 6267,6270,6273,6277,6280,6283,6286,6290,6293,6296
dd 6299,6302,6305,6309,6312,6315,6318,6321,6324,6327
dd 6330,6333,6336,6338,6341,6344,6347,6350,6353,6356
dd 6358,6361,6364,6367,6369,6372,6375,6377,6380,6382
dd 6385,6388,6390,6393,6395,6398,6400,6403,6405,6407
dd 6410,6412,6415,6417,6419,6421,6424,6426,6428,6430
dd 6433,6435,6437,6439,6441,6443,6445,6447,6449,6451
dd 6453,6455,6457,6459,6461,6463,6465,6467,6469,6471
dd 6472,6474,6476,6478,6479,6481,6483,6484,6486,6488
dd 6489,6491,6492,6494,6495,6497,6498,6500,6501,6503
dd 6504,6506,6507,6508,6510,6511,6512,6513,6515,6516
dd 6517,6518,6519,6521,6522,6523,6524,6525,6526,6527
dd 6528,6529,6530,6531,6532,6533,6534,6535,6535,6536
dd 6537,6538,6539,6539,6540,6541,6541,6542,6543,6543
dd 6544,6545,6545,6546,6546,6547,6547,6548,6548,6549
dd 6549,6549,6550,6550,6550,6551,6551,6551,6552,6552
dd 6552,6552,6552,6553,6553,6553,6553,6553,6553,6553
dd 6553,6553,6553,6553,6553,6553,6553,6553,6552,6552
dd 6552,6552,6552,6551,6551,6551,6550,6550,6550,6549
dd 6549,6549,6548,6548,6547,6547,6546,6546,6545,6545
dd 6544,6543,6543,6542,6541,6541,6540,6539,6539,6538
dd 6537,6536,6535,6535,6534,6533,6532,6531,6530,6529
dd 6528,6527,6526,6525,6524,6523,6522,6521,6519,6518
dd 6517,6516,6515,6513,6512,6511,6510,6508,6507,6506
dd 6504,6503,6501,6500,6498,6497,6495,6494,6492,6491
dd 6489,6488,6486,6484,6483,6481,6479,6478,6476,6474
dd 6472,6471,6469,6467,6465,6463,6461,6459,6457,6455
dd 6453,6451,6449,6447,6445,6443,6441,6439,6437,6435
dd 6433,6430,6428,6426,6424,6421,6419,6417,6415,6412
dd 6410,6407,6405,6403,6400,6398,6395,6393,6390,6388
dd 6385,6382,6380,6377,6375,6372,6369,6367,6364,6361
dd 6358,6356,6353,6350,6347,6344,6341,6338,6336,6333
dd 6330,6327,6324,6321,6318,6315,6312,6309,6305,6302
dd 6299,6296,6293,6290,6286,6283,6280,6277,6273,6270
dd 6267,6263,6260,6257,6253,6250,6246,6243,6239,6236
dd 6232,6229,6225,6222,6218,6214,6211,6207,6203,6200
dd 6196,6192,6188,6185,6181,6177,6173,6169,6166,6162
dd 6158,6154,6150,6146,6142,6138,6134,6130,6126,6122
dd 6118,6114,6109,6105,6101,6097,6093,6089,6084,6080
dd 6076,6072,6067,6063,6059,6054,6050,6045,6041,6036
dd 6032,6028,6023,6019,6014,6009,6005,6000,5996,5991
dd 5986,5982,5977,5972,5968,5963,5958,5953,5949,5944
dd 5939,5934,5929,5924,5920,5915,5910,5905,5900,5895
dd 5890,5885,5880,5875,5870,5864,5859,5854,5849,5844
dd 5839,5834,5828,5823,5818,5813,5807,5802,5797,5791
dd 5786,5781,5775,5770,5764,5759,5753,5748,5742,5737
dd 5731,5726,5720,5715,5709,5703,5698,5692,5686,5681
dd 5675,5669,5664,5658,5652,5646,5640,5635,5629,5623
dd 5617,5611,5605,5599,5593,5587,5581,5575,5569,5563
dd 5557,5551,5545,5539,5533,5527,5521,5514,5508,5502
dd 5496,5489,5483,5477,5471,5464,5458,5452,5445,5439
dd 5433,5426,5420,5413,5407,5400,5394,5387,5381,5374
dd 5368,5361,5355,5348,5341,5335,5328,5321,5315,5308
dd 5301,5295,5288,5281,5274,5268,5261,5254,5247,5240
dd 5233,5226,5220,5213,5206,5199,5192,5185,5178,5171
dd 5164,5157,5150,5143,5135,5128,5121,5114,5107,5100
dd 5093,5085,5078,5071,5064,5056,5049,5042,5034,5027
dd 5020,5012,5005,4998,4990,4983,4975,4968,4960,4953
dd 4945,4938,4930,4923,4915,4908,4900,4893,4885,4877
dd 4870,4862,4854,4847,4839,4831,4824,4816,4808,4800
dd 4792,4785,4777,4769,4761,4753,4745,4737,4730,4722
dd 4714,4706,4698,4690,4682,4674,4666,4658,4650,4642
dd 4634,4625,4617,4609,4601,4593,4585,4577,4568,4560
dd 4552,4544,4535,4527,4519,4511,4502,4494,4486,4477
dd 4469,4461,4452,4444,4435,4427,4419,4410,4402,4393
dd 4385,4376,4368,4359,4351,4342,4333,4325,4316,4308
dd 4299,4290,4282,4273,4264,4256,4247,4238,4230,4221
dd 4212,4203,4194,4186,4177,4168,4159,4150,4142,4133
dd 4124,4115,4106,4097,4088,4079,4070,4061,4052,4043
dd 4034,4025,4016,4007,3998,3989,3980,3971,3962,3953
dd 3943,3934,3925,3916,3907,3898,3888,3879,3870,3861
dd 3852,3842,3833,3824,3814,3805,3796,3786,3777,3768
dd 3758,3749,3740,3730,3721,3711,3702,3693,3683,3674
dd 3664,3655,3645,3636,3626,3617,3607,3598,3588,3578
dd 3569,3559,3550,3540,3530,3521,3511,3501,3492,3482
dd 3472,3463,3453,3443,3433,3424,3414,3404,3394,3385
dd 3375,3365,3355,3345,3336,3326,3316,3306,3296,3286
dd 3276,3266,3256,3246,3237,3227,3217,3207,3197,3187
dd 3177,3167,3157,3147,3137,3127,3117,3106,3096,3086
dd 3076,3066,3056,3046,3036,3026,3015,3005,2995,2985
dd 2975,2965,2954,2944,2934,2924,2913,2903,2893,2883
dd 2872,2862,2852,2841,2831,2821,2811,2800,2790,2779
dd 2769,2759,2748,2738,2728,2717,2707,2696,2686,2675
dd 2665,2655,2644,2634,2623,2613,2602,2592,2581,2571
dd 2560,2550,2539,2529,2518,2507,2497,2486,2476,2465
dd 2454,2444,2433,2423,2412,2401,2391,2380,2369,2359
dd 2348,2337,2327,2316,2305,2295,2284,2273,2262,2252
dd 2241,2230,2219,2209,2198,2187,2176,2166,2155,2144
dd 2133,2122,2111,2101,2090,2079,2068,2057,2046,2036
dd 2025,2014,2003,1992,1981,1970,1959,1948,1937,1926
dd 1916,1905,1894,1883,1872,1861,1850,1839,1828,1817
dd 1806,1795,1784,1773,1762,1751,1740,1729,1718,1707
dd 1696,1685,1674,1663,1651,1640,1629,1618,1607,1596
dd 1585,1574,1563,1552,1541,1529,1518,1507,1496,1485
dd 1474,1463,1451,1440,1429,1418,1407,1396,1384,1373
dd 1362,1351,1340,1328,1317,1306,1295,1284,1272,1261
dd 1250,1239,1228,1216,1205,1194,1183,1171,1160,1149
dd 1138,1126,1115,1104,1092,1081,1070,1059,1047,1036
dd 1025,1013,1002,991,979,968,957,946,934,923
dd 912,900,889,878,866,855,844,832,821,810
dd 798,787,775,764,753,741,730,719,707,696
dd 685,673,662,650,639,628,616,605,593,582
dd 571,559,548,536,525,514,502,491,479,468
dd 457,445,434,422,411,400,388,377,365,354
dd 342,331,320,308,297,285,274,263,251,240
dd 228,217,205,194,182,171,160,148,137,125
dd 114,102,91,80,68,57,45,34,22,11
dd 0,-12,-23,-35,-46,-58,-69,-81,-92,-103
dd -115,-126,-138,-149,-161,-172,-183,-195,-206,-218
dd -229,-241,-252,-264,-275,-286,-298,-309,-321,-332
dd -343,-355,-366,-378,-389,-401,-412,-423,-435,-446
dd -458,-469,-480,-492,-503,-515,-526,-537,-549,-560
dd -572,-583,-594,-606,-617,-629,-640,-651,-663,-674
dd -686,-697,-708,-720,-731,-742,-754,-765,-776,-788
dd -799,-811,-822,-833,-845,-856,-867,-879,-890,-901
dd -913,-924,-935,-947,-958,-969,-980,-992,-1003,-1014
dd -1026,-1037,-1048,-1060,-1071,-1082,-1093,-1105,-1116,-1127
dd -1139,-1150,-1161,-1172,-1184,-1195,-1206,-1217,-1229,-1240
dd -1251,-1262,-1273,-1285,-1296,-1307,-1318,-1329,-1341,-1352
dd -1363,-1374,-1385,-1397,-1408,-1419,-1430,-1441,-1452,-1464
dd -1475,-1486,-1497,-1508,-1519,-1530,-1542,-1553,-1564,-1575
dd -1586,-1597,-1608,-1619,-1630,-1641,-1652,-1664,-1675,-1686
dd -1697,-1708,-1719,-1730,-1741,-1752,-1763,-1774,-1785,-1796
dd -1807,-1818,-1829,-1840,-1851,-1862,-1873,-1884,-1895,-1906
dd -1917,-1927,-1938,-1949,-1960,-1971,-1982,-1993,-2004,-2015
dd -2026,-2037,-2047,-2058,-2069,-2080,-2091,-2102,-2112,-2123
dd -2134,-2145,-2156,-2167,-2177,-2188,-2199,-2210,-2220,-2231
dd -2242,-2253,-2263,-2274,-2285,-2296,-2306,-2317,-2328,-2338
dd -2349,-2360,-2370,-2381,-2392,-2402,-2413,-2424,-2434,-2445
dd -2455,-2466,-2477,-2487,-2498,-2508,-2519,-2530,-2540,-2551
dd -2561,-2572,-2582,-2593,-2603,-2614,-2624,-2635,-2645,-2656
dd -2666,-2676,-2687,-2697,-2708,-2718,-2729,-2739,-2749,-2760
dd -2770,-2780,-2791,-2801,-2812,-2822,-2832,-2842,-2853,-2863
dd -2873,-2884,-2894,-2904,-2914,-2925,-2935,-2945,-2955,-2966
dd -2976,-2986,-2996,-3006,-3016,-3027,-3037,-3047,-3057,-3067
dd -3077,-3087,-3097,-3107,-3118,-3128,-3138,-3148,-3158,-3168
dd -3178,-3188,-3198,-3208,-3218,-3228,-3238,-3247,-3257,-3267
dd -3277,-3287,-3297,-3307,-3317,-3327,-3337,-3346,-3356,-3366
dd -3376,-3386,-3395,-3405,-3415,-3425,-3434,-3444,-3454,-3464
dd -3473,-3483,-3493,-3502,-3512,-3522,-3531,-3541,-3551,-3560
dd -3570,-3579,-3589,-3599,-3608,-3618,-3627,-3637,-3646,-3656
dd -3665,-3675,-3684,-3694,-3703,-3712,-3722,-3731,-3741,-3750
dd -3759,-3769,-3778,-3787,-3797,-3806,-3815,-3825,-3834,-3843
dd -3853,-3862,-3871,-3880,-3889,-3899,-3908,-3917,-3926,-3935
dd -3944,-3954,-3963,-3972,-3981,-3990,-3999,-4008,-4017,-4026
dd -4035,-4044,-4053,-4062,-4071,-4080,-4089,-4098,-4107,-4116
dd -4125,-4134,-4143,-4151,-4160,-4169,-4178,-4187,-4195,-4204
dd -4213,-4222,-4231,-4239,-4248,-4257,-4265,-4274,-4283,-4291
dd -4300,-4309,-4317,-4326,-4334,-4343,-4352,-4360,-4369,-4377
dd -4386,-4394,-4403,-4411,-4420,-4428,-4436,-4445,-4453,-4462
dd -4470,-4478,-4487,-4495,-4503,-4512,-4520,-4528,-4536,-4545
dd -4553,-4561,-4569,-4578,-4586,-4594,-4602,-4610,-4618,-4626
dd -4635,-4643,-4651,-4659,-4667,-4675,-4683,-4691,-4699,-4707
dd -4715,-4723,-4731,-4738,-4746,-4754,-4762,-4770,-4778,-4786
dd -4793,-4801,-4809,-4817,-4825,-4832,-4840,-4848,-4855,-4863
dd -4871,-4878,-4886,-4894,-4901,-4909,-4916,-4924,-4931,-4939
dd -4946,-4954,-4961,-4969,-4976,-4984,-4991,-4999,-5006,-5013
dd -5021,-5028,-5035,-5043,-5050,-5057,-5065,-5072,-5079,-5086
dd -5094,-5101,-5108,-5115,-5122,-5129,-5136,-5144,-5151,-5158
dd -5165,-5172,-5179,-5186,-5193,-5200,-5207,-5214,-5221,-5227
dd -5234,-5241,-5248,-5255,-5262,-5269,-5275,-5282,-5289,-5296
dd -5302,-5309,-5316,-5322,-5329,-5336,-5342,-5349,-5356,-5362
dd -5369,-5375,-5382,-5388,-5395,-5401,-5408,-5414,-5421,-5427
dd -5434,-5440,-5446,-5453,-5459,-5465,-5472,-5478,-5484,-5490
dd -5497,-5503,-5509,-5515,-5522,-5528,-5534,-5540,-5546,-5552
dd -5558,-5564,-5570,-5576,-5582,-5588,-5594,-5600,-5606,-5612
dd -5618,-5624,-5630,-5636,-5641,-5647,-5653,-5659,-5665,-5670
dd -5676,-5682,-5687,-5693,-5699,-5704,-5710,-5716,-5721,-5727
dd -5732,-5738,-5743,-5749,-5754,-5760,-5765,-5771,-5776,-5782
dd -5787,-5792,-5798,-5803,-5808,-5814,-5819,-5824,-5829,-5835
dd -5840,-5845,-5850,-5855,-5860,-5865,-5871,-5876,-5881,-5886
dd -5891,-5896,-5901,-5906,-5911,-5916,-5921,-5925,-5930,-5935
dd -5940,-5945,-5950,-5954,-5959,-5964,-5969,-5973,-5978,-5983
dd -5987,-5992,-5997,-6001,-6006,-6010,-6015,-6020,-6024,-6029
dd -6033,-6037,-6042,-6046,-6051,-6055,-6060,-6064,-6068,-6073
dd -6077,-6081,-6085,-6090,-6094,-6098,-6102,-6106,-6110,-6115
dd -6119,-6123,-6127,-6131,-6135,-6139,-6143,-6147,-6151,-6155
dd -6159,-6163,-6167,-6170,-6174,-6178,-6182,-6186,-6189,-6193
dd -6197,-6201,-6204,-6208,-6212,-6215,-6219,-6223,-6226,-6230
dd -6233,-6237,-6240,-6244,-6247,-6251,-6254,-6258,-6261,-6264
dd -6268,-6271,-6274,-6278,-6281,-6284,-6287,-6291,-6294,-6297
dd -6300,-6303,-6306,-6310,-6313,-6316,-6319,-6322,-6325,-6328
dd -6331,-6334,-6337,-6339,-6342,-6345,-6348,-6351,-6354,-6357
dd -6359,-6362,-6365,-6368,-6370,-6373,-6376,-6378,-6381,-6383
dd -6386,-6389,-6391,-6394,-6396,-6399,-6401,-6404,-6406,-6408
dd -6411,-6413,-6416,-6418,-6420,-6422,-6425,-6427,-6429,-6431
dd -6434,-6436,-6438,-6440,-6442,-6444,-6446,-6448,-6450,-6452
dd -6454,-6456,-6458,-6460,-6462,-6464,-6466,-6468,-6470,-6472
dd -6473,-6475,-6477,-6479,-6480,-6482,-6484,-6485,-6487,-6489
dd -6490,-6492,-6493,-6495,-6496,-6498,-6499,-6501,-6502,-6504
dd -6505,-6507,-6508,-6509,-6511,-6512,-6513,-6514,-6516,-6517
dd -6518,-6519,-6520,-6522,-6523,-6524,-6525,-6526,-6527,-6528
dd -6529,-6530,-6531,-6532,-6533,-6534,-6535,-6536,-6536,-6537
dd -6538,-6539,-6540,-6540,-6541,-6542,-6542,-6543,-6544,-6544
dd -6545,-6546,-6546,-6547,-6547,-6548,-6548,-6549,-6549,-6550
dd -6550,-6550,-6551,-6551,-6551,-6552,-6552,-6552,-6553,-6553
dd -6553,-6553,-6553,-6554,-6554,-6554,-6554,-6554,-6554,-6554
dd -6554,-6554,-6554,-6554,-6554,-6554,-6554,-6554,-6553,-6553
dd -6553,-6553,-6553,-6552,-6552,-6552,-6551,-6551,-6551,-6550
dd -6550,-6550,-6549,-6549,-6548,-6548,-6547,-6547,-6546,-6546
dd -6545,-6544,-6544,-6543,-6542,-6542,-6541,-6540,-6540,-6539
dd -6538,-6537,-6536,-6536,-6535,-6534,-6533,-6532,-6531,-6530
dd -6529,-6528,-6527,-6526,-6525,-6524,-6523,-6522,-6520,-6519
dd -6518,-6517,-6516,-6514,-6513,-6512,-6511,-6509,-6508,-6507
dd -6505,-6504,-6502,-6501,-6499,-6498,-6496,-6495,-6493,-6492
dd -6490,-6489,-6487,-6485,-6484,-6482,-6480,-6479,-6477,-6475
dd -6473,-6472,-6470,-6468,-6466,-6464,-6462,-6460,-6458,-6456
dd -6454,-6452,-6450,-6448,-6446,-6444,-6442,-6440,-6438,-6436
dd -6434,-6431,-6429,-6427,-6425,-6422,-6420,-6418,-6416,-6413
dd -6411,-6408,-6406,-6404,-6401,-6399,-6396,-6394,-6391,-6389
dd -6386,-6383,-6381,-6378,-6376,-6373,-6370,-6368,-6365,-6362
dd -6359,-6357,-6354,-6351,-6348,-6345,-6342,-6339,-6337,-6334
dd -6331,-6328,-6325,-6322,-6319,-6316,-6313,-6309,-6306,-6303
dd -6300,-6297,-6294,-6291,-6287,-6284,-6281,-6278,-6274,-6271
dd -6268,-6264,-6261,-6258,-6254,-6251,-6247,-6244,-6240,-6237
dd -6233,-6230,-6226,-6223,-6219,-6215,-6212,-6208,-6204,-6201
dd -6197,-6193,-6189,-6186,-6182,-6178,-6174,-6170,-6167,-6163
dd -6159,-6155,-6151,-6147,-6143,-6139,-6135,-6131,-6127,-6123
dd -6119,-6115,-6110,-6106,-6102,-6098,-6094,-6090,-6085,-6081
dd -6077,-6073,-6068,-6064,-6060,-6055,-6051,-6046,-6042,-6037
dd -6033,-6029,-6024,-6020,-6015,-6010,-6006,-6001,-5997,-5992
dd -5987,-5983,-5978,-5973,-5969,-5964,-5959,-5954,-5950,-5945
dd -5940,-5935,-5930,-5925,-5921,-5916,-5911,-5906,-5901,-5896
dd -5891,-5886,-5881,-5876,-5871,-5865,-5860,-5855,-5850,-5845
dd -5840,-5835,-5829,-5824,-5819,-5814,-5808,-5803,-5798,-5792
dd -5787,-5782,-5776,-5771,-5765,-5760,-5754,-5749,-5743,-5738
dd -5732,-5727,-5721,-5716,-5710,-5704,-5699,-5693,-5687,-5682
dd -5676,-5670,-5665,-5659,-5653,-5647,-5641,-5636,-5630,-5624
dd -5618,-5612,-5606,-5600,-5594,-5588,-5582,-5576,-5570,-5564
dd -5558,-5552,-5546,-5540,-5534,-5528,-5522,-5515,-5509,-5503
dd -5497,-5490,-5484,-5478,-5472,-5465,-5459,-5453,-5446,-5440
dd -5434,-5427,-5421,-5414,-5408,-5401,-5395,-5388,-5382,-5375
dd -5369,-5362,-5356,-5349,-5342,-5336,-5329,-5322,-5316,-5309
dd -5302,-5296,-5289,-5282,-5275,-5269,-5262,-5255,-5248,-5241
dd -5234,-5227,-5221,-5214,-5207,-5200,-5193,-5186,-5179,-5172
dd -5165,-5158,-5151,-5144,-5136,-5129,-5122,-5115,-5108,-5101
dd -5094,-5086,-5079,-5072,-5065,-5057,-5050,-5043,-5035,-5028
dd -5021,-5013,-5006,-4999,-4991,-4984,-4976,-4969,-4961,-4954
dd -4946,-4939,-4931,-4924,-4916,-4909,-4901,-4894,-4886,-4878
dd -4871,-4863,-4855,-4848,-4840,-4832,-4825,-4817,-4809,-4801
dd -4793,-4786,-4778,-4770,-4762,-4754,-4746,-4738,-4731,-4723
dd -4715,-4707,-4699,-4691,-4683,-4675,-4667,-4659,-4651,-4643
dd -4635,-4626,-4618,-4610,-4602,-4594,-4586,-4578,-4569,-4561
dd -4553,-4545,-4536,-4528,-4520,-4512,-4503,-4495,-4487,-4478
dd -4470,-4462,-4453,-4445,-4436,-4428,-4420,-4411,-4403,-4394
dd -4386,-4377,-4369,-4360,-4352,-4343,-4334,-4326,-4317,-4309
dd -4300,-4291,-4283,-4274,-4265,-4257,-4248,-4239,-4231,-4222
dd -4213,-4204,-4195,-4187,-4178,-4169,-4160,-4151,-4143,-4134
dd -4125,-4116,-4107,-4098,-4089,-4080,-4071,-4062,-4053,-4044
dd -4035,-4026,-4017,-4008,-3999,-3990,-3981,-3972,-3963,-3954
dd -3944,-3935,-3926,-3917,-3908,-3899,-3889,-3880,-3871,-3862
dd -3853,-3843,-3834,-3825,-3815,-3806,-3797,-3787,-3778,-3769
dd -3759,-3750,-3741,-3731,-3722,-3712,-3703,-3694,-3684,-3675
dd -3665,-3656,-3646,-3637,-3627,-3618,-3608,-3599,-3589,-3579
dd -3570,-3560,-3551,-3541,-3531,-3522,-3512,-3502,-3493,-3483
dd -3473,-3464,-3454,-3444,-3434,-3425,-3415,-3405,-3395,-3386
dd -3376,-3366,-3356,-3346,-3337,-3327,-3317,-3307,-3297,-3287
dd -3277,-3267,-3257,-3247,-3238,-3228,-3218,-3208,-3198,-3188
dd -3178,-3168,-3158,-3148,-3138,-3128,-3118,-3107,-3097,-3087
dd -3077,-3067,-3057,-3047,-3037,-3027,-3016,-3006,-2996,-2986
dd -2976,-2966,-2955,-2945,-2935,-2925,-2914,-2904,-2894,-2884
dd -2873,-2863,-2853,-2842,-2832,-2822,-2812,-2801,-2791,-2780
dd -2770,-2760,-2749,-2739,-2729,-2718,-2708,-2697,-2687,-2676
dd -2666,-2656,-2645,-2635,-2624,-2614,-2603,-2593,-2582,-2572
dd -2561,-2551,-2540,-2530,-2519,-2508,-2498,-2487,-2477,-2466
dd -2455,-2445,-2434,-2424,-2413,-2402,-2392,-2381,-2370,-2360
dd -2349,-2338,-2328,-2317,-2306,-2296,-2285,-2274,-2263,-2253
dd -2242,-2231,-2220,-2210,-2199,-2188,-2177,-2167,-2156,-2145
dd -2134,-2123,-2112,-2102,-2091,-2080,-2069,-2058,-2047,-2037
dd -2026,-2015,-2004,-1993,-1982,-1971,-1960,-1949,-1938,-1927
dd -1917,-1906,-1895,-1884,-1873,-1862,-1851,-1840,-1829,-1818
dd -1807,-1796,-1785,-1774,-1763,-1752,-1741,-1730,-1719,-1708
dd -1697,-1686,-1675,-1664,-1652,-1641,-1630,-1619,-1608,-1597
dd -1586,-1575,-1564,-1553,-1542,-1530,-1519,-1508,-1497,-1486
dd -1475,-1464,-1452,-1441,-1430,-1419,-1408,-1397,-1385,-1374
dd -1363,-1352,-1341,-1329,-1318,-1307,-1296,-1285,-1273,-1262
dd -1251,-1240,-1229,-1217,-1206,-1195,-1184,-1172,-1161,-1150
dd -1139,-1127,-1116,-1105,-1093,-1082,-1071,-1060,-1048,-1037
dd -1026,-1014,-1003,-992,-980,-969,-958,-947,-935,-924
dd -913,-901,-890,-879,-867,-856,-845,-833,-822,-811
dd -799,-788,-776,-765,-754,-742,-731,-720,-708,-697
dd -686,-674,-663,-651,-640,-629,-617,-606,-594,-583
dd -572,-560,-549,-537,-526,-515,-503,-492,-480,-469
dd -458,-446,-435,-423,-412,-401,-389,-378,-366,-355
dd -343,-332,-321,-309,-298,-286,-275,-264,-252,-241
dd -229,-218,-206,-195,-183,-172,-161,-149,-138,-126
dd -115,-103,-92,-81,-69,-58,-46,-35,-23,-12
eosinus:
; misc vars for mouse / keys:
wonder:
dd 7777
dududu:
dd 0
rendered_quads:
dd 0
sorted_quads:
dd 0
vxx:
dd 0
mouseya:
dd 0
vpx:
dd 0
vpy:
dd 0
vheading:
dd 0
wtolong:
dw 0,0
; misc Engine Vars --------------------------
imgtxt:
dd 0
mousex:
dd 0
mousey:
dd 0
factor:
dd 0
i:
dd 0
miny:
dd 0
maxy:
dd 0
pwidth:
dd 0
pheight:
dd 0
;anz:
; dd 0
a:
dd 0
alpha:
dd 0
beta:
dd 0
gamma:
dd 0
zoom:
dd 0
zwmax:
dd 0
i2:
dd 0
x1:
dd 0
y1:
dd 0
x2:
dd 0
y2:
dd 0
count:
dd 0
ilocal:
dd 0
ycoord:
dd 0
pside:
dd 0
temp:
dd 0
lineheight:
dd 0
linewidth:
dd 0
v_xadd:
dd 0
pxadd:
dd 0
pyadd:
dd 0
ytop:
dd 0
ytopy:
dd 0
px:
dd 0
py:
dd 0
x:
dd 0
y:
dd 0
polyx1:
dd 0
polyx2:
dd 0
px1:
dd 0
py1:
dd 0
px2:
dd 0
py2:
dd 0
remeax:
dd 0
remebx:
dd 0
remecx:
dd 0
remedx:
dd 0
remedi:
dd 0
remesi:
dd 0
singamma:
dd 0
sinbeta:
dd 0
sinalpha:
dd 0
alphacopy:
dd 0
betacopy:
dd 0
gammacopy:
dd 0
;;fixed size arrays --------------------
lefttable:
times 1920*2 dd 0 ; 1440
righttable:
times 1920*2 dd 0
polypoints:
times 12 dd 0 ; 8
zbuffer:
times 10010 dd 0 ; 10000
; floating vars ------------------------
twohundred:
dd 200
mausy:
dd 0
xl1:
dd 0
yl1:
dd 0
zl1:
dd 0
xl2:
dd 0
yl2:
dd 0
zl2:
dd 0
xl3:
dd 0
yl3:
dd 0
zl3:
dd 0
xloc:
dd 0
yloc:
dd 0
tempdiv:
dd 0
tex1:
; the texture ( dd 0xRRGGBB,0xRRGGBB... 64*64*32 Bit)
include "wall3.inc"
labelt:
db 'MOS3DE',0
labellen:
I_END: