2019-11-02 13:17:24 -04:00
|
|
|
|
|
2019-11-02 13:51:40 -04:00
|
|
|
|
IDEAL
|
|
|
|
|
JUMPS
|
|
|
|
|
P386
|
|
|
|
|
P387 ; Allow 386 processor
|
|
|
|
|
|
|
|
|
|
model flat
|
|
|
|
|
|
|
|
|
|
codeseg
|
|
|
|
|
|
|
|
|
|
include "ackrtn.inc"
|
|
|
|
|
|
|
|
|
|
extrn _gMultiWalls:word
|
|
|
|
|
extrn _WallDistTable:dword
|
|
|
|
|
extrn _BackDropRows:dword
|
|
|
|
|
extrn _FloorCeilRtn:dword
|
|
|
|
|
extrn _Resolution:word
|
|
|
|
|
extrn _ScreenOffset:word
|
|
|
|
|
extrn _bmDistance:dword
|
|
|
|
|
extrn _bmWall:dword
|
|
|
|
|
extrn _scPtr:dword
|
|
|
|
|
extrn _VidTop:dword
|
|
|
|
|
extrn _VidBottom:dword
|
|
|
|
|
extrn _Floors1:dword
|
|
|
|
|
extrn _Floors2:dword
|
|
|
|
|
extrn _PlayerAngle:word
|
|
|
|
|
extrn _BackArray:dword
|
|
|
|
|
extrn _gWinStartX:word
|
|
|
|
|
extrn _gWinStartY:word
|
|
|
|
|
extrn _gWinEndX:word
|
|
|
|
|
extrn _gWinEndY:word
|
|
|
|
|
extrn _gWinHeight:word
|
|
|
|
|
extrn _gWinWidth:word
|
|
|
|
|
extrn _gCenterRow:word
|
|
|
|
|
extrn _gCenterOff:word
|
|
|
|
|
|
|
|
|
|
extrn _scVid:dword
|
|
|
|
|
extrn _scWall:dword
|
|
|
|
|
extrn _scPal:dword
|
|
|
|
|
extrn _scdst:word
|
|
|
|
|
extrn _scwht:word
|
|
|
|
|
extrn _scmulti:word
|
|
|
|
|
extrn _sctopht:word
|
|
|
|
|
extrn _scbotht:word
|
|
|
|
|
extrn _scsavwht:word
|
|
|
|
|
extrn _scmulcnt:word
|
|
|
|
|
extrn _scsavVid:dword
|
|
|
|
|
extrn _scbNum:word
|
|
|
|
|
extrn _scMulData:dword
|
|
|
|
|
extrn _scColumn:dword
|
|
|
|
|
extrn _WallbMaps:dword
|
|
|
|
|
|
|
|
|
|
extrn _FloorMap:word
|
|
|
|
|
extrn _CeilMap:word
|
|
|
|
|
extrn _LastWallHeight:word
|
|
|
|
|
extrn _ViewAngle:word
|
|
|
|
|
extrn _ScreenOffset:word
|
|
|
|
|
extrn _xPglobal:dword
|
|
|
|
|
extrn _yPglobal:dword
|
|
|
|
|
extrn _xBegGlobal:dword
|
|
|
|
|
extrn _yBegGlobal:dword
|
|
|
|
|
extrn _aeGlobal:dword
|
|
|
|
|
extrn _xGridGlobal:dword
|
|
|
|
|
extrn _yGridGlobal:dword
|
|
|
|
|
extrn _xPglobalHI:dword
|
|
|
|
|
extrn _yPglobalHI:dword
|
|
|
|
|
extrn _rbaTable:dword
|
|
|
|
|
extrn _rsHandle:dword
|
|
|
|
|
extrn _LastX1:dword
|
|
|
|
|
extrn _LastY1:dword
|
|
|
|
|
extrn _iLastX:dword
|
|
|
|
|
extrn _iLastY:dword
|
|
|
|
|
extrn _MaxDistance:word
|
|
|
|
|
extrn _ErrorCode:word
|
|
|
|
|
extrn _xMapPosn:dword
|
|
|
|
|
extrn _yMapPosn:dword
|
|
|
|
|
extrn _Grid:dword
|
|
|
|
|
extrn _ObjGrid:dword
|
|
|
|
|
extrn _ViewHeight:word
|
|
|
|
|
extrn _CeilingHeight:word
|
|
|
|
|
extrn _gTopColor:byte
|
|
|
|
|
extrn _gBottomColor:byte
|
|
|
|
|
extrn _PlayerAngle:word
|
|
|
|
|
extrn _gScrnBuffer:dword
|
|
|
|
|
extrn _gBkgdBuffer:dword
|
|
|
|
|
extrn _gCenterOff:word
|
|
|
|
|
extrn _gWinHeight:word
|
|
|
|
|
extrn _SysFlags:word
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extrn _xSecretmPos:word
|
|
|
|
|
extrn _xSecretmPos1:word
|
|
|
|
|
extrn _xSecretColumn:word
|
|
|
|
|
|
|
|
|
|
extrn _ySecretmPos:word
|
|
|
|
|
extrn _ySecretmPos1:word
|
|
|
|
|
extrn _ySecretColumn:word
|
|
|
|
|
|
|
|
|
|
extrn _TotalSecret:word
|
|
|
|
|
extrn _ViewColumn:word
|
|
|
|
|
extrn _SinTable:dword
|
|
|
|
|
extrn _CosTable:dword
|
|
|
|
|
extrn _LongTanTable:dword
|
|
|
|
|
extrn _LongInvTanTable:dword
|
|
|
|
|
extrn _InvCosTable:byte
|
|
|
|
|
extrn _InvSinTable:byte
|
|
|
|
|
extrn _LongCosTable:dword
|
|
|
|
|
extrn _ViewCosTable:dword
|
|
|
|
|
extrn _xNextTable:dword
|
|
|
|
|
extrn _yNextTable:dword
|
|
|
|
|
|
|
|
|
|
extrn _LastMapPosn:word
|
|
|
|
|
extrn _LastObjectHit:word
|
|
|
|
|
extrn _TotalObjects:word
|
|
|
|
|
extrn _FoundObjectCount:word
|
|
|
|
|
extrn _ObjectsSeen:byte
|
|
|
|
|
extrn _MoveObjectCount:word
|
|
|
|
|
extrn _MoveObjectList:byte
|
|
|
|
|
extrn _ObjNumber:byte
|
|
|
|
|
extrn _ObjRelDist:byte
|
|
|
|
|
extrn _ObjColumn:byte
|
|
|
|
|
|
|
|
|
|
extrn _x_xPos:dword
|
|
|
|
|
extrn _x_yPos:dword
|
|
|
|
|
extrn _x_xNext:dword
|
|
|
|
|
extrn _x_yNext:dword
|
|
|
|
|
extrn _y_xPos:dword
|
|
|
|
|
extrn _y_yPos:dword
|
|
|
|
|
extrn _y_xNext:dword
|
|
|
|
|
extrn _y_yNext:dword
|
|
|
|
|
|
|
|
|
|
extrn _Slice:dword
|
|
|
|
|
extrn _sPtr:dword
|
|
|
|
|
extrn _HitMap:byte
|
|
|
|
|
|
|
|
|
|
extrn xRaySetup_:near
|
|
|
|
|
extrn yRaySetup_:near
|
|
|
|
|
extrn BuildSlice_:near
|
|
|
|
|
extrn xRayCast_:near
|
|
|
|
|
extrn yRayCast_:near
|
|
|
|
|
extrn AckDrawFloor_:near
|
|
|
|
|
extrn AckDrawFloorOnly_:near
|
|
|
|
|
extrn AckDrawCeilingOnly_:near
|
|
|
|
|
extrn DrawWalls_:near
|
|
|
|
|
extrn CheckDoors_:near
|
|
|
|
|
extrn BuildSliceMulti_:near
|
|
|
|
|
extrn FindObject_:near
|
|
|
|
|
|
|
|
|
|
public xRayCastMulti_
|
|
|
|
|
public yRayCastMulti_
|
|
|
|
|
public ShowColLow_
|
|
|
|
|
public ShowColMaskLow_
|
|
|
|
|
public BuildUpView_
|
2019-11-02 13:17:24 -04:00
|
|
|
|
|
|
|
|
|
align 2
|
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
; void ShowColLow(void)
|
2019-11-02 13:17:24 -04:00
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
proc ShowColLow_ near
|
2019-11-02 13:17:24 -04:00
|
|
|
|
push ebp
|
|
|
|
|
push esi
|
|
|
|
|
push edi
|
|
|
|
|
mov ebp,eax
|
|
|
|
|
mov [_scPtr],eax
|
|
|
|
|
mov edi,[_scVid]
|
|
|
|
|
mov edx,[_scPal]
|
|
|
|
|
mov ax,[_scwht]
|
|
|
|
|
mov [_scsavwht],ax
|
|
|
|
|
movsx ecx,[_sctopht]
|
|
|
|
|
mov ebx,[_scWall]
|
|
|
|
|
add ebx,ecx
|
|
|
|
|
mov [_bmWall],ebx
|
|
|
|
|
mov ch,al
|
|
|
|
|
inc ch
|
|
|
|
|
mov eax,0
|
|
|
|
|
mov ebx,0
|
|
|
|
|
|
|
|
|
|
;--TEST------------------------------------------------------------------------
|
|
|
|
|
test [word ptr _scbNum],WALL_TYPE_UPPER
|
|
|
|
|
jz short toprun
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
zztoploop:
|
|
|
|
|
dec ch
|
|
|
|
|
jz short zzdomulti
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,cl
|
|
|
|
|
jge short zzdomulti
|
|
|
|
|
sub di,320
|
|
|
|
|
jmp zztoploop
|
|
|
|
|
|
|
|
|
|
zzdomulti:
|
|
|
|
|
mov ebp,[_scPtr]
|
|
|
|
|
mov [_scwht],cx
|
|
|
|
|
mov [_scsavVid],edi
|
|
|
|
|
jmp chkmulti
|
|
|
|
|
|
|
|
|
|
;--TEST------------------------------------------------------------------------
|
|
|
|
|
toprun:
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
toploop:
|
|
|
|
|
movsx eax,bh
|
|
|
|
|
mov esi,[_bmWall]
|
|
|
|
|
sub esi,eax
|
|
|
|
|
mov al,[esi]
|
|
|
|
|
mov al,[edx+eax]
|
|
|
|
|
mov ah,al
|
|
|
|
|
mov [edi],ax
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,cl
|
|
|
|
|
jg short botrun
|
|
|
|
|
dec ch
|
|
|
|
|
jz short botrun
|
|
|
|
|
sub edi,320
|
|
|
|
|
jmp toploop
|
|
|
|
|
|
|
|
|
|
botrun:
|
|
|
|
|
mov ebp,[_scPtr]
|
|
|
|
|
mov [_scwht],cx
|
|
|
|
|
mov [_scsavVid],edi
|
|
|
|
|
mov [_VidTop],edi
|
|
|
|
|
mov edi,[_scVid]
|
|
|
|
|
mov cx,[_scbotht]
|
|
|
|
|
mov bx,[_scsavwht]
|
|
|
|
|
mov ch,bl
|
|
|
|
|
mov ebx,0
|
|
|
|
|
mov esi,[_bmWall]
|
|
|
|
|
inc esi
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
dec cl
|
|
|
|
|
|
|
|
|
|
botloop:
|
|
|
|
|
add edi,320
|
|
|
|
|
movsx ax,bh
|
|
|
|
|
mov al,[esi+eax]
|
|
|
|
|
mov al,[edx+eax]
|
|
|
|
|
mov ah,al
|
|
|
|
|
mov [edi],ax
|
|
|
|
|
dec ch
|
|
|
|
|
jz short chkmulti
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,cl
|
|
|
|
|
jl botloop
|
|
|
|
|
|
|
|
|
|
chkmulti:
|
|
|
|
|
mov [_VidBottom],edi
|
|
|
|
|
mov ebp,[_scPtr]
|
|
|
|
|
mov edi,[_scsavVid]
|
|
|
|
|
cmp [word ptr _scmulti],0
|
|
|
|
|
jz alldone
|
|
|
|
|
mov cx,[_scmulcnt]
|
|
|
|
|
|
|
|
|
|
mov ebx,[_scMulData] ;ptr to count and wall data
|
|
|
|
|
mov cl,[ebx] ;get count of data
|
|
|
|
|
inc ebx
|
|
|
|
|
mov al,[ebx] ;first wall to show
|
|
|
|
|
inc ebx
|
|
|
|
|
mov [_scMulData],ebx
|
|
|
|
|
movsx ebx,al ;get wall number
|
|
|
|
|
shl ebx,2 ;x4 for index into wall bitmap array
|
|
|
|
|
mov eax,[_WallbMaps]
|
|
|
|
|
mov ebx,[eax+ebx]
|
|
|
|
|
add ebx,[dword ptr _scColumn] ;add in current column
|
|
|
|
|
add ebx,63 ;point to bottom of column
|
|
|
|
|
mov [_bmWall],ebx
|
|
|
|
|
|
|
|
|
|
mov bx,[_scwht]
|
|
|
|
|
mov ch,bh
|
|
|
|
|
cmp ch,0
|
|
|
|
|
jz short alldone
|
|
|
|
|
|
|
|
|
|
mov ebx,0
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
mulloop:
|
|
|
|
|
sub edi,320
|
|
|
|
|
movsx eax,bh
|
|
|
|
|
mov esi,[_bmWall]
|
|
|
|
|
sub esi,eax
|
|
|
|
|
mov al,[esi]
|
|
|
|
|
mov al,[edx+eax]
|
|
|
|
|
mov ah,al
|
|
|
|
|
mov [edi],ax
|
|
|
|
|
dec ch
|
|
|
|
|
jz short alldone
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,64
|
|
|
|
|
jge short nextlevel
|
|
|
|
|
jmp mulloop
|
|
|
|
|
|
|
|
|
|
nextlevel:
|
|
|
|
|
dec cl
|
|
|
|
|
jz short alldone
|
|
|
|
|
mov ebx,[_scMulData]
|
|
|
|
|
mov al,[ebx] ;next wall number
|
|
|
|
|
inc ebx
|
|
|
|
|
mov [_scMulData],ebx
|
|
|
|
|
movsx ebx,al
|
|
|
|
|
shl ebx,2
|
|
|
|
|
mov eax,[_WallbMaps]
|
|
|
|
|
mov ebx,[eax+ebx]
|
|
|
|
|
add ebx,[dword ptr _scColumn] ;add in current column
|
|
|
|
|
add ebx,63 ;point to bottom of column
|
|
|
|
|
mov [_bmWall],ebx
|
|
|
|
|
mov ebx,0
|
|
|
|
|
jmp mulloop
|
|
|
|
|
|
|
|
|
|
alldone:
|
|
|
|
|
mov [_VidTop],edi
|
|
|
|
|
pop edi
|
|
|
|
|
pop esi
|
|
|
|
|
pop ebp
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align 2
|
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
; void ShowColMaskLow(void)
|
2019-11-02 13:17:24 -04:00
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
proc ShowColMaskLow_ near
|
2019-11-02 13:17:24 -04:00
|
|
|
|
push ebp
|
|
|
|
|
push esi
|
|
|
|
|
push edi
|
|
|
|
|
mov ebp,eax
|
|
|
|
|
mov [_scPtr],eax
|
|
|
|
|
mov edi,[_scVid]
|
|
|
|
|
mov edx,[_scPal]
|
|
|
|
|
mov ax,[_scwht]
|
|
|
|
|
mov [_scsavwht],ax
|
|
|
|
|
movsx ecx,[_sctopht]
|
|
|
|
|
mov ebx,[_scWall]
|
|
|
|
|
add ebx,ecx
|
|
|
|
|
mov [_bmWall],ebx
|
|
|
|
|
mov ch,al
|
|
|
|
|
mov eax,0
|
|
|
|
|
mov ebx,0
|
|
|
|
|
|
|
|
|
|
;--TEST------------------------------------------------------------------------
|
|
|
|
|
test [word ptr _scbNum],WALL_TYPE_UPPER
|
|
|
|
|
jz short m_toprun
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
m_zztoploop:
|
|
|
|
|
dec ch
|
|
|
|
|
jz short m_zzdomulti
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,cl
|
|
|
|
|
jge short m_zzdomulti
|
|
|
|
|
sub edi,320
|
|
|
|
|
jmp m_zztoploop
|
|
|
|
|
|
|
|
|
|
m_zzdomulti:
|
|
|
|
|
mov ebp,[_scPtr]
|
|
|
|
|
mov [_scwht],cx
|
|
|
|
|
mov [_scsavVid],edi
|
|
|
|
|
jmp m_chkmulti
|
|
|
|
|
|
|
|
|
|
;--TEST------------------------------------------------------------------------
|
|
|
|
|
m_toprun:
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
m_toploop:
|
|
|
|
|
movsx eax,bh
|
|
|
|
|
mov esi,[_bmWall]
|
|
|
|
|
sub esi,eax
|
|
|
|
|
mov al,[esi]
|
|
|
|
|
or al,al
|
|
|
|
|
jz m_blank1
|
|
|
|
|
mov al,[edx+eax]
|
|
|
|
|
mov ah,al
|
|
|
|
|
mov [edi],ax
|
|
|
|
|
|
|
|
|
|
m_blank1:
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,cl
|
|
|
|
|
jg short m_botrun
|
|
|
|
|
dec ch
|
|
|
|
|
jz short m_botrun
|
|
|
|
|
sub edi,320
|
|
|
|
|
jmp m_toploop
|
|
|
|
|
|
|
|
|
|
m_botrun:
|
|
|
|
|
mov ebp,[_scPtr]
|
|
|
|
|
mov [_scwht],cx
|
|
|
|
|
mov [_scsavVid],edi
|
|
|
|
|
mov edi,[_scVid]
|
|
|
|
|
mov cx,[_scbotht]
|
|
|
|
|
mov bx,[_scsavwht]
|
|
|
|
|
mov ch,bl
|
|
|
|
|
mov ebx,0
|
|
|
|
|
mov esi,[_bmWall]
|
|
|
|
|
inc esi
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
m_botloop:
|
|
|
|
|
add edi,320
|
|
|
|
|
movsx ax,bh
|
|
|
|
|
mov al,[esi+eax]
|
|
|
|
|
or al,al
|
|
|
|
|
jz m_blank2
|
|
|
|
|
mov al,[edx+eax]
|
|
|
|
|
mov ah,al
|
|
|
|
|
mov [edi],ax
|
|
|
|
|
|
|
|
|
|
m_blank2:
|
|
|
|
|
dec ch
|
|
|
|
|
jz short m_chkmulti
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,cl
|
|
|
|
|
jl m_botloop
|
|
|
|
|
|
|
|
|
|
m_chkmulti:
|
|
|
|
|
mov ebp,[_scPtr]
|
|
|
|
|
cmp [word ptr _scmulti],0
|
|
|
|
|
jz short m_alldone
|
|
|
|
|
mov cx,[_scmulcnt]
|
|
|
|
|
mov bx,[_scwht]
|
|
|
|
|
mov ch,bh
|
|
|
|
|
cmp ch,0
|
|
|
|
|
jz short m_alldone
|
|
|
|
|
|
|
|
|
|
mov edi,[_scsavVid]
|
|
|
|
|
mov ebx,[_scWall]
|
|
|
|
|
add ebx,63
|
|
|
|
|
mov [_bmWall],ebx
|
|
|
|
|
mov ebx,0
|
|
|
|
|
mov ebp,[_bmDistance]
|
|
|
|
|
|
|
|
|
|
m_mulloop:
|
|
|
|
|
sub edi,320
|
|
|
|
|
movsx eax,bh
|
|
|
|
|
mov esi,[_bmWall]
|
|
|
|
|
sub esi,eax
|
|
|
|
|
mov al,[esi]
|
|
|
|
|
or al,al
|
|
|
|
|
jz m_blank3
|
|
|
|
|
mov al,[edx+eax]
|
|
|
|
|
mov ah,al
|
|
|
|
|
mov [edi],ax
|
|
|
|
|
|
|
|
|
|
m_blank3:
|
|
|
|
|
dec ch
|
|
|
|
|
jz short m_alldone
|
|
|
|
|
add bx,bp
|
|
|
|
|
cmp bh,64
|
|
|
|
|
jge short m_nextlevel
|
|
|
|
|
jmp m_mulloop
|
|
|
|
|
|
|
|
|
|
m_nextlevel:
|
|
|
|
|
mov ebx,0
|
|
|
|
|
dec cl
|
|
|
|
|
jnz m_mulloop
|
|
|
|
|
|
|
|
|
|
m_alldone:
|
|
|
|
|
pop edi
|
|
|
|
|
pop esi
|
|
|
|
|
pop ebp
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
; USHORT xRayCastMulti(void)
|
2019-11-02 13:17:24 -04:00
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
proc xRayCastMulti_ near
|
|
|
|
|
; sub esp,50
|
2019-11-02 13:17:24 -04:00
|
|
|
|
push esi
|
|
|
|
|
push edi
|
|
|
|
|
push ebx
|
|
|
|
|
push ecx
|
|
|
|
|
push edx
|
|
|
|
|
|
|
|
|
|
mov [word ptr retval],0
|
|
|
|
|
|
|
|
|
|
looptop:
|
|
|
|
|
|
|
|
|
|
mov edx,[dword ptr _x_xPos]
|
|
|
|
|
cmp edx,large 0
|
|
|
|
|
jl short getout
|
|
|
|
|
cmp edx,large 4096
|
|
|
|
|
jg short getout
|
|
|
|
|
mov eax,[_x_yPos]
|
|
|
|
|
cmp eax,large 0
|
|
|
|
|
jl short getout
|
|
|
|
|
cmp eax,large 010000000h
|
|
|
|
|
jle short inbounds
|
|
|
|
|
|
|
|
|
|
getout:
|
|
|
|
|
jmp loopdone
|
|
|
|
|
|
|
|
|
|
inbounds:
|
|
|
|
|
sar eax,16
|
|
|
|
|
and ax,-64
|
|
|
|
|
sar edx,6
|
|
|
|
|
add ax,dx
|
|
|
|
|
mov si,ax
|
|
|
|
|
|
|
|
|
|
shl ax,1
|
|
|
|
|
movsx eax,ax
|
|
|
|
|
mov ebx,[dword ptr _ObjGrid]
|
|
|
|
|
mov ax,[word ptr ebx+eax]
|
|
|
|
|
or ax,ax
|
|
|
|
|
jz short no_obj
|
|
|
|
|
|
|
|
|
|
and ax,0FFh
|
|
|
|
|
mov [word ptr Color],ax
|
|
|
|
|
|
|
|
|
|
movsx ecx,[_FoundObjectCount] ;// Get number of current objects seen
|
|
|
|
|
mov ebx,ecx
|
|
|
|
|
jcxz short nofound ;// None found yet, add this new one
|
|
|
|
|
mov edi,offset _ObjectsSeen
|
|
|
|
|
repne scasb ;// See if this object already seen
|
|
|
|
|
jz short no_obj ;// Yes, ignore this ray then
|
|
|
|
|
|
|
|
|
|
nofound:
|
|
|
|
|
mov edi,offset _ObjectsSeen
|
|
|
|
|
mov [edi+ebx],al
|
|
|
|
|
inc bx
|
|
|
|
|
mov [word ptr _FoundObjectCount],bx
|
|
|
|
|
|
|
|
|
|
no_obj:
|
|
|
|
|
movsx eax,si
|
|
|
|
|
|
|
|
|
|
shl eax,1
|
|
|
|
|
mov ebx,[dword ptr _xGridGlobal]
|
|
|
|
|
mov cx,[ebx+eax]
|
|
|
|
|
or cx,cx
|
|
|
|
|
jz short next_square
|
|
|
|
|
test cx,WALL_UPPER_MULTI
|
|
|
|
|
jz short next_square
|
|
|
|
|
cmp cl,[byte ptr _LastWallHeight]
|
|
|
|
|
jbe short next_square
|
|
|
|
|
|
|
|
|
|
mov [word ptr _xMapPosn],si
|
|
|
|
|
mov ebx,[dword ptr _x_xPos]
|
|
|
|
|
mov [dword ptr _iLastX],ebx
|
|
|
|
|
mov edx,[dword ptr _x_yPos]
|
|
|
|
|
mov [dword ptr _LastY1],edx
|
|
|
|
|
|
|
|
|
|
movsx eax,cx
|
|
|
|
|
jmp short xRayDone
|
|
|
|
|
|
|
|
|
|
next_square:
|
|
|
|
|
mov eax,[dword ptr _x_xNext]
|
|
|
|
|
add [dword ptr _x_xPos],eax
|
|
|
|
|
mov eax,[dword ptr _x_yNext]
|
|
|
|
|
add [dword ptr _x_yPos],eax
|
|
|
|
|
jmp looptop
|
|
|
|
|
|
|
|
|
|
loopdone:
|
|
|
|
|
movsx eax,[word ptr retval]
|
|
|
|
|
|
|
|
|
|
xRayDone:
|
|
|
|
|
pop edx
|
|
|
|
|
pop ecx
|
|
|
|
|
pop ebx
|
|
|
|
|
pop edi
|
|
|
|
|
pop esi
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
; USHORT yRayCastMulti(void)
|
2019-11-02 13:17:24 -04:00
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
proc yRayCastMulti_ near
|
|
|
|
|
; sub esp,50
|
2019-11-02 13:17:24 -04:00
|
|
|
|
push esi
|
|
|
|
|
push edi
|
|
|
|
|
push ebx
|
|
|
|
|
push ecx
|
|
|
|
|
push edx
|
|
|
|
|
mov [word ptr retval],0
|
|
|
|
|
|
|
|
|
|
y_looptop:
|
|
|
|
|
mov edx,[dword ptr _y_xPos]
|
|
|
|
|
cmp edx,large 0
|
|
|
|
|
jl short y_getout
|
|
|
|
|
cmp edx,large 010000000h
|
|
|
|
|
jg short y_getout
|
|
|
|
|
mov eax,[_y_yPos]
|
|
|
|
|
cmp eax,large 0
|
|
|
|
|
jl short y_getout
|
|
|
|
|
cmp eax,large 4096
|
|
|
|
|
jle short y_inbounds
|
|
|
|
|
|
|
|
|
|
y_getout:
|
|
|
|
|
jmp loopdone
|
|
|
|
|
|
|
|
|
|
y_inbounds:
|
|
|
|
|
sar edx,22
|
|
|
|
|
and ax,-64
|
|
|
|
|
add ax,dx
|
|
|
|
|
mov si,ax
|
|
|
|
|
|
|
|
|
|
shl ax,1
|
|
|
|
|
movsx eax,ax
|
|
|
|
|
mov ebx,[dword ptr _ObjGrid]
|
|
|
|
|
mov ax,[ebx+eax]
|
|
|
|
|
or ax,ax
|
|
|
|
|
jz short y_no_obj
|
|
|
|
|
|
|
|
|
|
and ax,0FFh
|
|
|
|
|
mov [word ptr Color],ax
|
|
|
|
|
|
|
|
|
|
movsx ecx,[_FoundObjectCount]
|
|
|
|
|
mov ebx,ecx
|
|
|
|
|
jcxz short y_nofound
|
|
|
|
|
mov edi,offset _ObjectsSeen
|
|
|
|
|
repne scasb
|
|
|
|
|
jz short y_no_obj
|
|
|
|
|
|
|
|
|
|
y_nofound:
|
|
|
|
|
mov edi,offset _ObjectsSeen
|
|
|
|
|
mov [edi+ebx],al
|
|
|
|
|
inc bx
|
|
|
|
|
mov [word ptr _FoundObjectCount],bx
|
|
|
|
|
|
|
|
|
|
y_no_obj:
|
|
|
|
|
movsx eax,si
|
|
|
|
|
|
|
|
|
|
shl eax,1
|
|
|
|
|
mov ebx,[dword ptr _yGridGlobal]
|
|
|
|
|
mov cx,[ebx+eax]
|
|
|
|
|
or cx,cx
|
|
|
|
|
jz short y_next_square
|
|
|
|
|
|
|
|
|
|
y_wall_here:
|
|
|
|
|
test cx,WALL_UPPER_MULTI
|
|
|
|
|
jz short y_next_square
|
|
|
|
|
cmp cl,[byte ptr _LastWallHeight]
|
|
|
|
|
jbe short y_next_square
|
|
|
|
|
mov [word ptr _yMapPosn],si
|
|
|
|
|
mov ebx,[dword ptr _y_xPos]
|
|
|
|
|
mov [dword ptr _LastX1],ebx
|
|
|
|
|
mov edx,[dword ptr _y_yPos]
|
|
|
|
|
mov [dword ptr _iLastY],edx
|
|
|
|
|
mov edx,ebx
|
|
|
|
|
|
|
|
|
|
movsx eax,cx
|
|
|
|
|
jmp short yRayDone
|
|
|
|
|
|
|
|
|
|
y_next_square:
|
|
|
|
|
mov eax,[dword ptr _y_xNext]
|
|
|
|
|
add [dword ptr _y_xPos],eax
|
|
|
|
|
mov eax,[dword ptr _y_yNext]
|
|
|
|
|
add [dword ptr _y_yPos],eax
|
|
|
|
|
jmp y_looptop
|
|
|
|
|
|
|
|
|
|
y_loopdone:
|
|
|
|
|
movsx eax,[word ptr retval]
|
|
|
|
|
|
|
|
|
|
yRayDone:
|
|
|
|
|
pop edx
|
|
|
|
|
pop ecx
|
|
|
|
|
pop ebx
|
|
|
|
|
pop edi
|
|
|
|
|
pop esi
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
; void CheckHitMap(void)
|
2019-11-02 13:17:24 -04:00
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
proc CheckHitMap_ near
|
2019-11-02 13:17:24 -04:00
|
|
|
|
mov edi,offset _HitMap
|
|
|
|
|
mov edx,edi
|
|
|
|
|
mov ecx,4096
|
|
|
|
|
mov esi,[dword ptr _ObjGrid]
|
|
|
|
|
|
|
|
|
|
chmLoop:
|
|
|
|
|
xor eax,eax
|
|
|
|
|
repe scasb
|
|
|
|
|
jcxz chmDone
|
|
|
|
|
mov ebx,edi ;get current location
|
|
|
|
|
sub ebx,edx ;minus start for actual offset
|
|
|
|
|
dec ebx ;minus base 0 offset
|
|
|
|
|
shl ebx,1 ;times 2 for word array
|
|
|
|
|
mov ax,[word ptr esi+ebx]
|
|
|
|
|
or al,al ;is there an object there?
|
|
|
|
|
jz chmLoop ;nope, keep checking
|
|
|
|
|
movzx ebx,[word ptr _FoundObjectCount]
|
|
|
|
|
mov [byte ptr _ObjectsSeen+ebx],al
|
|
|
|
|
inc ebx
|
|
|
|
|
mov [word ptr _FoundObjectCount],bx
|
|
|
|
|
jmp chmLoop
|
|
|
|
|
|
|
|
|
|
chmDone:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
; void BuildUpView(void)
|
2019-11-02 13:17:24 -04:00
|
|
|
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2019-11-02 13:51:40 -04:00
|
|
|
|
proc BuildUpView_ near
|
2019-11-02 13:17:24 -04:00
|
|
|
|
push ebp ; Save registers used by this routine
|
|
|
|
|
push esi
|
|
|
|
|
push edi
|
|
|
|
|
push ebx
|
|
|
|
|
push ecx
|
|
|
|
|
push edx
|
|
|
|
|
|
2019-11-02 13:51:40 -04:00
|
|
|
|
call CheckDoors_ ; Determine the state of the doors used in the view
|
2019-11-02 13:17:24 -04:00
|
|
|
|
|
|
|
|
|
mov edi,offset _HitMap ; Access the hit map
|
|
|
|
|
mov ecx,1024 ; Size of the hit map
|
|
|
|
|
xor eax,eax ; Clear each location
|
|
|
|
|
rep stosd ; Clear out entire hit map
|
|
|
|
|
|
|
|
|
|
; Check to see if moveable objects are found in the view. If so, access the object list
|
|
|
|
|
; and store the objects.
|
|
|
|
|
mov [word ptr _MaxDistance],0
|
|
|
|
|
movzx ecx,[word ptr _MoveObjectCount] ; Get # of moveable objects
|
|
|
|
|
mov [_FoundObjectCount],cx ; Store # of objects found in view
|
|
|
|
|
jcxz short buv010 ; No objects are used, jump ahead
|
|
|
|
|
mov edi,offset _ObjectsSeen ; Reference global object list
|
|
|
|
|
mov esi,offset _MoveObjectList ; List of movable objects
|
|
|
|
|
mov ebx,ecx ; # of moveable objects
|
|
|
|
|
sar ecx,2 ; Divide by 2
|
|
|
|
|
rep movsd
|
|
|
|
|
mov ecx,ebx ; # of moveable objects
|
|
|
|
|
and ecx,3
|
|
|
|
|
rep movsb ; Finish copying _ObjectSeen to
|
|
|
|
|
; _MoveObjectList
|
|
|
|
|
buv010:
|
|
|
|
|
movzx esi,[_gWinEndX] ; Get right side of viewport
|
|
|
|
|
cmp si,320 ; Is right coord. = 320?
|
|
|
|
|
jae short buv020
|
|
|
|
|
inc esi ; Adjust right viewport if not 320
|
|
|
|
|
|
|
|
|
|
buv020:
|
|
|
|
|
movzx eax,[_PlayerAngle] ; Get current player<65>s angle
|
|
|
|
|
sub eax,INT_ANGLE_32 ; Check with 32 degree point
|
|
|
|
|
jnc short buv030 ; Skip if in range
|
|
|
|
|
add eax,INT_ANGLE_360 ; Add 360 degrees to angle
|
|
|
|
|
|
|
|
|
|
buv030:
|
|
|
|
|
movzx ebx,[_gWinStartX] ; Get left side of viewport
|
|
|
|
|
mov [_ViewColumn],bx ; Save location in _ViewColumn
|
|
|
|
|
add eax,ebx ; Add angle to left side
|
|
|
|
|
cmp eax,INT_ANGLE_360 ; Are we out of range?
|
|
|
|
|
jl short buv040 ; We<57>re ok!
|
|
|
|
|
sub eax,INT_ANGLE_360 ; Reduce angle by 360 degrees
|
|
|
|
|
|
|
|
|
|
buv040:
|
|
|
|
|
mov [_ViewAngle],ax ; Store updated angle
|
|
|
|
|
|
|
|
|
|
; The start of the main loop that builds individual slices for the view.
|
|
|
|
|
; This loop continues until the entire view has been built. Each time through
|
|
|
|
|
; the loop, the player<65>s viewing angle is increased. This continues until a full
|
|
|
|
|
; 64 degre range is casted (assuming a full width screen is used).
|
|
|
|
|
buv050:
|
|
|
|
|
movzx ebx,[_ViewColumn] ; Get left column position
|
|
|
|
|
mov [dword ptr _WallDistTable+ebx*4],4096 ; Max distance to walls
|
|
|
|
|
mov eax,offset _Slice ; Access base adress of Slice structure
|
|
|
|
|
imul ebx,saSize ; Calculate offset into actual slice
|
|
|
|
|
add eax,ebx ; Add offset to base address
|
|
|
|
|
mov [_sPtr],eax ; Set up pointer to actual column slice
|
|
|
|
|
movzx edi,[_ViewAngle] ; Use current viewing angle
|
2019-11-02 13:51:40 -04:00
|
|
|
|
call xRaySetup_ ; Set up x ray to start casting
|
2019-11-02 13:17:24 -04:00
|
|
|
|
|
|
|
|
|
buv060:
|
2019-11-02 13:51:40 -04:00
|
|
|
|
call yRaySetup_ ; Set up y ray to start casting
|
2019-11-02 13:17:24 -04:00
|
|
|
|
|
|
|
|
|
buv070:
|
|
|
|
|
mov [word ptr _LastWallHeight],0 ; For checking mult-height walls
|
2019-11-02 13:51:40 -04:00
|
|
|
|
call BuildSlice_ ; Build the current slice
|
2019-11-02 13:17:24 -04:00
|
|
|
|
cmp [word ptr _gMultiWalls],0 ; Are multi-height walls used?
|
|
|
|
|
jz short buv080 ; Nope, no need to check
|
|
|
|
|
|
|
|
|
|
cmp [word ptr _LastWallHeight],200 ; No need to check if > 200
|
|
|
|
|
jg short buv080
|
|
|
|
|
|
2019-11-02 13:44:19 -04:00
|
|
|
|
mov eax,[_sPtr] ; Get base address of column slice
|
2019-11-02 13:17:24 -04:00
|
|
|
|
cmp [dword ptr eax+saNext],0 ; Check for any more walls
|
|
|
|
|
je short buv080
|
|
|
|
|
cmp [word ptr eax+saDist],96 ; Distance from POV to slice is
|
|
|
|
|
jle short buv080 ; less than or equal to 96
|
|
|
|
|
|
2019-11-02 13:51:40 -04:00
|
|
|
|
call BuildSliceMulti_ ; Build the current slice for
|
2019-11-02 13:17:24 -04:00
|
|
|
|
; a multi-height wall
|
|
|
|
|
buv080:
|
|
|
|
|
movzx eax,[_ViewColumn] ; Get current column
|
|
|
|
|
inc eax ; Advance to the next column
|
|
|
|
|
inc edi ; Increment the casting angle
|
|
|
|
|
cmp [word ptr _Resolution],RES_LOW ; Check for screen resolution
|
|
|
|
|
jne short buv090
|
|
|
|
|
inc edi ; Increment angle and position
|
|
|
|
|
inc eax ; for higher resolution casting
|
|
|
|
|
|
|
|
|
|
buv090:
|
|
|
|
|
cmp edi,INT_ANGLE_360 ; Did we go past 360 degrees?
|
|
|
|
|
jl short buv100 ; We<57>re ok
|
|
|
|
|
sub edi,INT_ANGLE_360 ; Adjust angle for building next slice
|
|
|
|
|
|
|
|
|
|
buv100:
|
|
|
|
|
mov [_ViewAngle],di ; Save current viewing angle
|
|
|
|
|
mov [_ViewColumn],ax ; Save column position
|
|
|
|
|
cmp eax,esi ; Are we done yet?
|
|
|
|
|
jl buv050 ; Nope; go build next slice
|
|
|
|
|
|
|
|
|
|
buv_exit:
|
2019-11-02 13:51:40 -04:00
|
|
|
|
call CheckHitMap_
|
|
|
|
|
call FindObject_ ; Update slice structures with objects found
|
|
|
|
|
call [dword ptr _FloorCeilRtn] ; Build the floor and ceiling
|
|
|
|
|
call DrawWalls_ ; Build the walls
|
2019-11-02 13:17:24 -04:00
|
|
|
|
|
|
|
|
|
pop edx ; Restore the registers used
|
|
|
|
|
pop ecx
|
|
|
|
|
pop ebx
|
|
|
|
|
pop edi
|
|
|
|
|
pop esi
|
|
|
|
|
pop ebp
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|