home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / texmap / john1.asm < prev    next >
Assembly Source File  |  1998-06-08  |  3KB  |  117 lines

  1. ;THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  2. ;SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  3. ;END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  4. ;ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  5. ;IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  6. ;SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  7. ;FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  8. ;CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  9. ;AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  10. ;COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  11.  
  12.  
  13.  
  14.  
  15.         ; eax = 0
  16.         ; ebx = l in fixed 24.8 (really 8.8)
  17.         ; ecx = (dv << 16) | du   (in fixed 8.8)
  18.         ; edx = free
  19.         ; esi = ptr to source bitmap ( 64x64 at 256bpr)
  20.         ; edi = destination ptr
  21.         ; ebp = dldx   (in fixed 24.8) (really 8.8)
  22.         ; MEM [0..3] = (u<<16) | v  (in fixed 8.8)
  23.         ; Code for 8-bit destination, lighting
  24.  
  25.         REPT 8
  26.             mov    al, [0]            ; get u
  27.             mov    ah, [2]            ; get v
  28.             add    [0], ecx        ; inc u,v
  29.             mov    al, [esi+eax]        ; get source pixel
  30.             mov    ah, bh            ; form lighting lookup value
  31.             mov    al, FadeTable[eax]    ; get lit pixel
  32.             mov    [edi], al        ; write pixel to frame buffer
  33.             inc    edi            ; inc dest
  34.             add    ebx, ebp        ; inc lighting value
  35.         ENDM
  36.  
  37.  
  38.         REPT 8
  39.             mov    al, [0]            ; get u
  40.             mov    ah, [2]            ; get v
  41.             add    [0], ecx        ; inc u,v
  42.             mov    al, [esi+eax]        ; get source pixel
  43.             mov    ah, bh            ; form lighting lookup value
  44.             mov    ax, FadeTable[eax*2]    ; get lit pixel
  45.             mov    [edi], ax        ; write pixel to frame buffer
  46.             inc    edi            ; inc dest
  47.             add    ebx, ebp        ; inc lighting value
  48.         ENDM
  49.  
  50.  
  51.         REPT NUM_ITERATIONS
  52.             mov    al, [0]            ; get u
  53.             mov    ah, [2]            ; get v
  54.             add    [0], ecx        ; inc u,v
  55.             mov    al, [esi+eax]        ; get source pixel
  56.             mov    [edi+OFFSET], al    ; write pixel to frame buffer
  57.         ENDM
  58.  
  59.     mov    eax,ebp    ; clear for 
  60.     add    ebp,edx    ; update v coordinate
  61.     shr    eax,26    ; shift in v coordinate
  62.     shld    eax,ebx,6    ; shift in u coordinate while shifting up v coordinate
  63.     add    ebx,ecx    ; update u coordinate
  64.     mov    al,[esi+eax]    ; get pixel from source bitmap
  65.     mov    [edi],al
  66.     inc    edi        ; XPARENT ADDED BY JOHN
  67.  
  68.  
  69.  
  70. ; compute v coordinate
  71.     mov    eax,[_fx_v]    ; get v
  72.     cdq
  73.     idiv    ecx    ; eax = (v/z)
  74.  
  75.     and    eax,3fh    ; mask with height-1
  76.     mov    ebx,eax
  77.  
  78. ; compute u coordinate
  79.     mov    eax,esi    ; get u
  80.     cdq
  81.     idiv    ecx    ; eax = (u/z)
  82.  
  83.     shl     eax,26
  84.     shld     ebx,eax,6    ; esi = v*64+u
  85.  
  86. ; read 1  pixel
  87.     movzx    eax,byte ptr es:[ebx]    ; get pixel from source bitmap
  88.  
  89.     cmp    _Lighting_on, 0
  90.     je    NoLight1
  91.  
  92. ; LIGHTING CODE
  93.     mov    ebx, _fx_l    ; get temp copy of lighting value
  94.     mov    ah, bh    ; get lighting level
  95.     add    ebx, _fx_dl_dx    ; update lighting value
  96.     mov    al, fs:[eax]    ; xlat pixel thru lighting tables
  97.     mov    _fx_l, ebx    ; save temp copy of lighting value
  98.  
  99. ; transparency check
  100. NoLight1:    cmp    al,255
  101.     je    skip1
  102.  
  103.     mov    [edi],al
  104. skip1:    inc    edi
  105.     
  106. ; update deltas
  107.     add    ebp,_fx_dv_dx
  108.     add    esi,_fx_du_dx
  109.     add    ecx,_fx_dz_dx
  110.     je    _div_0_abort    ; would be dividing by 0, so abort
  111.  
  112.     xchg    esi, ebx
  113.  
  114.     dec    _loop_count
  115.     jns    tmap_loop
  116. 
  117.