forked from KolibriOS/kolibrios
free3d04 1) fixed I_END 2)small arithmetic optimization
git-svn-id: svn://kolibrios.org@272 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b9300edb72
commit
0cb93396cf
@ -149,14 +149,16 @@ s_up: ; walk forward (key or mouse)
|
|||||||
|
|
||||||
|
|
||||||
mov ecx,[vheading]
|
mov ecx,[vheading]
|
||||||
imul ecx,4
|
; imul ecx,4
|
||||||
add ecx,sinus
|
; add ecx,sinus
|
||||||
|
lea ecx, [sinus+ecx*4]
|
||||||
mov edi,[ecx]
|
mov edi,[ecx]
|
||||||
|
|
||||||
mov edx,[vheading]
|
mov edx,[vheading]
|
||||||
imul edx,4
|
; imul edx,4
|
||||||
add edx,sinus
|
; add edx,sinus
|
||||||
add edx,3600
|
; add edx,3600
|
||||||
|
lea edx, [sinus+3600+edx*4]
|
||||||
cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
|
cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
|
||||||
jb ok200
|
jb ok200
|
||||||
sub edx,14400
|
sub edx,14400
|
||||||
@ -173,8 +175,9 @@ s_up: ; walk forward (key or mouse)
|
|||||||
sar esi,16
|
sar esi,16
|
||||||
mov ecx,esi
|
mov ecx,esi
|
||||||
sal ecx,5 ; equal *32
|
sal ecx,5 ; equal *32
|
||||||
add ecx,edi
|
; add ecx,edi
|
||||||
add ecx,grid
|
; add ecx,grid
|
||||||
|
lea ecx, [grid+ecx+edi]
|
||||||
cmp [ecx],byte 0 ; collision check
|
cmp [ecx],byte 0 ; collision check
|
||||||
jne cannotwalk0
|
jne cannotwalk0
|
||||||
mov [vpx],eax
|
mov [vpx],eax
|
||||||
@ -188,14 +191,16 @@ s_down: ; walk backward
|
|||||||
mov ebx,[vpy]
|
mov ebx,[vpy]
|
||||||
|
|
||||||
mov ecx,[vheading]
|
mov ecx,[vheading]
|
||||||
imul ecx,4
|
; imul ecx,4
|
||||||
add ecx,sinus
|
; add ecx,sinus
|
||||||
|
lea ecx, [sinus+ecx*4]
|
||||||
mov edi,[ecx]
|
mov edi,[ecx]
|
||||||
|
|
||||||
mov edx,[vheading]
|
mov edx,[vheading]
|
||||||
imul edx,4
|
; imul edx,4
|
||||||
add edx,sinus
|
; add edx,sinus
|
||||||
add edx,3600
|
; add edx,3600
|
||||||
|
lea edx, [sinus+3600+edx*4]
|
||||||
cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
|
cmp edx,eosinus ;cosinus taken from (sinus plus 900) mod 3600
|
||||||
jb ok201
|
jb ok201
|
||||||
sub edx,14400
|
sub edx,14400
|
||||||
@ -213,8 +218,9 @@ s_down: ; walk backward
|
|||||||
sar esi,16
|
sar esi,16
|
||||||
mov ecx,esi
|
mov ecx,esi
|
||||||
sal ecx,5
|
sal ecx,5
|
||||||
add ecx,edi
|
; add ecx,edi
|
||||||
add ecx,grid
|
; add ecx,grid
|
||||||
|
lea ecx, [grid+ecx+edi]
|
||||||
cmp [ecx],byte 0
|
cmp [ecx],byte 0
|
||||||
jne cannotwalk1
|
jne cannotwalk1
|
||||||
mov [vpx],eax
|
mov [vpx],eax
|
||||||
@ -363,17 +369,19 @@ ok1:
|
|||||||
ok2:
|
ok2:
|
||||||
|
|
||||||
; get stepx and stepy
|
; get stepx and stepy
|
||||||
mov ecx,edx
|
; mov ecx,edx
|
||||||
imul ecx,4
|
; imul ecx,4
|
||||||
add ecx,sinus ; pointer to stepx
|
; add ecx,sinus ; pointer to stepx
|
||||||
|
lea ecx, [sinus+edx*4]
|
||||||
mov esi,[ecx]
|
mov esi,[ecx]
|
||||||
sar esi,4 ; accuracy
|
sar esi,4 ; accuracy
|
||||||
mov [vstepx],esi ; store stepx
|
mov [vstepx],esi ; store stepx
|
||||||
|
|
||||||
mov esi,edx
|
; mov esi,edx
|
||||||
imul esi,4
|
; imul esi,4
|
||||||
add esi,sinus ; pointer to stepy
|
; add esi,sinus ; pointer to stepy
|
||||||
add esi,3600
|
; add esi,3600
|
||||||
|
lea esi, [sinus+3600+edx*4]
|
||||||
cmp esi,eosinus ;cosinus taken from ((sinus plus 900) mod 3600)
|
cmp esi,eosinus ;cosinus taken from ((sinus plus 900) mod 3600)
|
||||||
jb ok202
|
jb ok202
|
||||||
sub esi,14400
|
sub esi,14400
|
||||||
@ -459,8 +467,10 @@ nodouble:
|
|||||||
sal edi,8
|
sal edi,8
|
||||||
mov esi,[xfrac]
|
mov esi,[xfrac]
|
||||||
sal esi,2
|
sal esi,2
|
||||||
add edi,esi
|
; add edi,esi
|
||||||
add edi,wall ; in fact its floor, just using the wall texture :)
|
; add edi,wall ; in fact its floor, just using the wall texture :)
|
||||||
|
lea edi, [wall+edi+esi]
|
||||||
|
|
||||||
mov edx,[edi]
|
mov edx,[edi]
|
||||||
mov [remesi],esi
|
mov [remesi],esi
|
||||||
|
|
||||||
@ -468,10 +478,13 @@ nodouble:
|
|||||||
mov esi,[ytemp]
|
mov esi,[ytemp]
|
||||||
add esi,240
|
add esi,240
|
||||||
imul esi,1920
|
imul esi,1920
|
||||||
add esi,[vx1]
|
; add esi,[vx1]
|
||||||
add esi,[vx1]
|
; add esi,[vx1]
|
||||||
add esi,[vx1]
|
; add esi,[vx1]
|
||||||
add esi,0x80000
|
; add esi,0x80000
|
||||||
|
mov eax, [vx1]
|
||||||
|
lea eax, [eax+eax*2]
|
||||||
|
lea esi, [0x80000+eax+esi]
|
||||||
|
|
||||||
cmp esi,0x80000+1920*480
|
cmp esi,0x80000+1920*480
|
||||||
jg foff0
|
jg foff0
|
||||||
@ -588,8 +601,10 @@ no_nu_pixel:
|
|||||||
mov edx,ebx
|
mov edx,ebx
|
||||||
; imul edx,32
|
; imul edx,32
|
||||||
shl edx,5
|
shl edx,5
|
||||||
add edx,grid
|
; add edx,grid
|
||||||
add edx,eax
|
; add edx,eax
|
||||||
|
lea edx, [grid+edx+eax]
|
||||||
|
|
||||||
cmp [edx],byte 0 ; raycaster reached a wall? (0=no)
|
cmp [edx],byte 0 ; raycaster reached a wall? (0=no)
|
||||||
jne getout
|
jne getout
|
||||||
cmp edi,10000 ; limit view range
|
cmp edi,10000 ; limit view range
|
||||||
@ -612,14 +627,18 @@ copyfloor:
|
|||||||
sub eax,1920
|
sub eax,1920
|
||||||
add ebx,1920
|
add ebx,1920
|
||||||
|
|
||||||
mov ecx,0
|
; mov ecx,0
|
||||||
add ecx,[vx1]
|
; add ecx,[vx1]
|
||||||
add ecx,[vx1]
|
; add ecx,[vx1]
|
||||||
add ecx,[vx1]
|
; add ecx,[vx1]
|
||||||
|
mov ecx, [vx1]
|
||||||
|
lea ecx, [ecx+ecx*2]
|
||||||
|
|
||||||
mov edx,ecx
|
; mov edx,ecx
|
||||||
|
; add ecx,eax
|
||||||
|
; add edx,ebx
|
||||||
|
lea edx, [ecx+ebx]
|
||||||
add ecx,eax
|
add ecx,eax
|
||||||
add edx,ebx
|
|
||||||
|
|
||||||
mov esi,[edx]
|
mov esi,[edx]
|
||||||
mov [ecx],esi
|
mov [ecx],esi
|
||||||
@ -673,7 +692,8 @@ copyfloor:
|
|||||||
xor edx,edx
|
xor edx,edx
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
mov ebx,[vdd]
|
mov ebx,[vdd]
|
||||||
add ebx,[vdd]
|
; add ebx,[vdd]
|
||||||
|
add ebx, ebx
|
||||||
div ebx
|
div ebx
|
||||||
and eax,63
|
and eax,63
|
||||||
mov [ytemp],eax ; get y of texture for wall
|
mov [ytemp],eax ; get y of texture for wall
|
||||||
@ -763,12 +783,16 @@ east:
|
|||||||
|
|
||||||
; ******* DRAW WALL PIXEL *******
|
; ******* DRAW WALL PIXEL *******
|
||||||
mov eax,esi
|
mov eax,esi
|
||||||
sub eax,22
|
; sub eax,22
|
||||||
|
lea eax, [esi-22]
|
||||||
imul eax,1920
|
imul eax,1920
|
||||||
add eax,[vx1]
|
; add eax,[vx1]
|
||||||
add eax,[vx1]
|
; add eax,[vx1]
|
||||||
add eax,[vx1]
|
; add eax,[vx1]
|
||||||
add eax,0x80000
|
; add eax,0x80000
|
||||||
|
mov ebx, [vx1]
|
||||||
|
lea ebx, [ebx+ebx*2]
|
||||||
|
lea eax, [eax+0x80000+ebx]
|
||||||
|
|
||||||
cmp eax,0x80000+1920*480
|
cmp eax,0x80000+1920*480
|
||||||
jg dont_draw
|
jg dont_draw
|
||||||
@ -814,10 +838,14 @@ mov eax,0x080000+360*1920
|
|||||||
|
|
||||||
copyfloor2:
|
copyfloor2:
|
||||||
add eax,1920
|
add eax,1920
|
||||||
mov ebx,eax
|
; mov ebx,eax
|
||||||
add ebx,[vx1]
|
; add ebx,[vx1]
|
||||||
add ebx,[vx1]
|
; add ebx,[vx1]
|
||||||
add ebx,[vx1]
|
; add ebx,[vx1]
|
||||||
|
mov ebx,[vx1]
|
||||||
|
lea ebx, [ebx+ebx*2]
|
||||||
|
add ebx, eax
|
||||||
|
|
||||||
|
|
||||||
mov ecx,[ebx-15]
|
mov ecx,[ebx-15]
|
||||||
and ecx,0x00FEFEFE
|
and ecx,0x00FEFEFE
|
||||||
@ -988,7 +1016,8 @@ sininc dd 0.0017453292519943295769236907684886
|
|||||||
sindiv dd 6553.5
|
sindiv dd 6553.5
|
||||||
textures:
|
textures:
|
||||||
file 'texture.gif'
|
file 'texture.gif'
|
||||||
I_END:
|
|
||||||
|
align 4
|
||||||
|
|
||||||
col1:
|
col1:
|
||||||
dd ?;-
|
dd ?;-
|
||||||
@ -1075,5 +1104,6 @@ step64:
|
|||||||
lasty:
|
lasty:
|
||||||
dd ?;-
|
dd ?;-
|
||||||
|
|
||||||
|
I_END:
|
||||||
sinus rd 360*10
|
sinus rd 360*10
|
||||||
eosinus:
|
eosinus:
|
||||||
|
Loading…
Reference in New Issue
Block a user