home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga ACS 1998 #6
/
amigaacscoverdisc1998-061998.iso
/
games
/
descent
/
source
/
texmap
/
john1.asm
< prev
next >
Wrap
Assembly Source File
|
1998-06-08
|
3KB
|
117 lines
;THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
;SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
;END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
;ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
;IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
;SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
;FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
;CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
;AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
;COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
; eax = 0
; ebx = l in fixed 24.8 (really 8.8)
; ecx = (dv << 16) | du (in fixed 8.8)
; edx = free
; esi = ptr to source bitmap ( 64x64 at 256bpr)
; edi = destination ptr
; ebp = dldx (in fixed 24.8) (really 8.8)
; MEM [0..3] = (u<<16) | v (in fixed 8.8)
; Code for 8-bit destination, lighting
REPT 8
mov al, [0] ; get u
mov ah, [2] ; get v
add [0], ecx ; inc u,v
mov al, [esi+eax] ; get source pixel
mov ah, bh ; form lighting lookup value
mov al, FadeTable[eax] ; get lit pixel
mov [edi], al ; write pixel to frame buffer
inc edi ; inc dest
add ebx, ebp ; inc lighting value
ENDM
REPT 8
mov al, [0] ; get u
mov ah, [2] ; get v
add [0], ecx ; inc u,v
mov al, [esi+eax] ; get source pixel
mov ah, bh ; form lighting lookup value
mov ax, FadeTable[eax*2] ; get lit pixel
mov [edi], ax ; write pixel to frame buffer
inc edi ; inc dest
add ebx, ebp ; inc lighting value
ENDM
REPT NUM_ITERATIONS
mov al, [0] ; get u
mov ah, [2] ; get v
add [0], ecx ; inc u,v
mov al, [esi+eax] ; get source pixel
mov [edi+OFFSET], al ; write pixel to frame buffer
ENDM
mov eax,ebp ; clear for
add ebp,edx ; update v coordinate
shr eax,26 ; shift in v coordinate
shld eax,ebx,6 ; shift in u coordinate while shifting up v coordinate
add ebx,ecx ; update u coordinate
mov al,[esi+eax] ; get pixel from source bitmap
mov [edi],al
inc edi ; XPARENT ADDED BY JOHN
; compute v coordinate
mov eax,[_fx_v] ; get v
cdq
idiv ecx ; eax = (v/z)
and eax,3fh ; mask with height-1
mov ebx,eax
; compute u coordinate
mov eax,esi ; get u
cdq
idiv ecx ; eax = (u/z)
shl eax,26
shld ebx,eax,6 ; esi = v*64+u
; read 1 pixel
movzx eax,byte ptr es:[ebx] ; get pixel from source bitmap
cmp _Lighting_on, 0
je NoLight1
; LIGHTING CODE
mov ebx, _fx_l ; get temp copy of lighting value
mov ah, bh ; get lighting level
add ebx, _fx_dl_dx ; update lighting value
mov al, fs:[eax] ; xlat pixel thru lighting tables
mov _fx_l, ebx ; save temp copy of lighting value
; transparency check
NoLight1: cmp al,255
je skip1
mov [edi],al
skip1: inc edi
; update deltas
add ebp,_fx_dv_dx
add esi,_fx_du_dx
add ecx,_fx_dz_dx
je _div_0_abort ; would be dividing by 0, so abort
xchg esi, ebx
dec _loop_count
jns tmap_loop