⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmap.nas

📁 The source code of Doom legacy for windows
💻 NAS
📖 第 1 页 / 共 3 页
字号:
;;      we need at least 200 lines for the sky.;;;;      NOTE: the sky should never wrap, so it could use a faster method.;;            for the moment, we'll still use a wrapping method...;;;;      IT S JUST A QUICK CUT N PASTE, WAS NOT OPTIMISED AS IT SHOULD BE !!!;;;;----------------------------------------------------------------------cglobal R_DrawSkyColumn_8;       align   16R_DrawSkyColumn_8:        push    ebp        push    esi        push    edi        push    ebx;;;; dest = ylookup[dc_yl] + columnofs[dc_x];;;        mov     ebp,[dc_yl]        mov     ebx,ebp        mov     edi,[ylookup+ebx*4]        mov     ebx,[dc_x]        add     edi,[columnofs+ebx*4]   ;; edi = dest;;;; pixelcount = yh - yl + 1;;        mov     eax,[dc_yh]        inc     eax        sub     eax,ebp                 ;; pixel count        mov     [pixelcount],eax        ;; save for final pixel        jle     near    vskydone        ;; nothing to scale;;;; frac = dc_texturemid - (centery-dc_yl)*fracstep;;;        mov     ecx,[dc_iscale]        ;; fracstep        mov     eax,[centery]        sub     eax,ebp        imul    eax,ecx        mov     edx,[dc_texturemid]        sub     edx,eax        mov     ebx,edx        shr     ebx,16                  ;; frac int.        and     ebx,0xff        shl     edx,16                  ;; y frac up        mov     ebp,ecx        shl     ebp,16                  ;; fracstep f. up        shr     ecx,16                  ;; fracstep i. ->cl        mov     esi,[dc_source];;;; lets rock :) !;;        mov     eax,[pixelcount]        mov     dh,al        shr     eax,0x2        mov     ch,al                   ;; quad count        mov     eax,[dc_colormap]        test    dh,0x3        je      vskyquadloop;;;;  do un-even pixel;;        test    dh,0x1        je      f2        mov     al,[esi+ebx]            ;; prep un-even loops        add     edx,ebp                 ;; ypos f += ystep f        adc     bl,cl                   ;; ypos i += ystep i        mov     dl,[eax]                ;; colormap texel        mov     [edi],dl                ;; output pixelp8:     add     edi,0x12345678;;;;  do two non-quad-aligned pixels;;f2:     test    dh,0x2        je      skyf3        mov     al,[esi+ebx]            ;; fetch source texel        add     edx,ebp                 ;; ypos f += ystep f        adc     bl,cl                   ;; ypos i += ystep i        mov     dl,[eax]                ;; colormap texel        mov     [edi],dl                ;; output pixel        mov     al,[esi+ebx]            ;; fetch source texel        add     edx,ebp                 ;; ypos f += ystep f        adc     bl,cl                   ;; ypos i += ystep i        mov     dl,[eax]                ;; colormap texelp9:     add     edi,0x12345678        mov     [edi],dl                ;; output pixelpa:     add     edi,0x12345678;;;;  test if there was at least 4 pixels;;skyf3:  test    ch,0xff                 ;; test quad count        je      vskydone;;;; ebp : ystep frac. upper 24 bits;; edx : y     frac. upper 24 bits;; ebx : y     i.    lower 7 bits,  masked for index;; ecx : ch = counter, cl = y step i.;; eax : colormap aligned 256;; esi : source texture column;; edi : dest screen;;align 4vskyquadloop:        mov     al,[esi+ebx]            ;; prep loop        add     edx,ebp                 ;; ypos f += ystep f        mov     dl,[eax]                ;; colormap texel        adc     bl,cl                   ;; ypos i += ystep i        mov     [edi],dl                ;; output pixel        mov     al,[esi+ebx]            ;; fetch source texel        add     edx,ebp        adc     bl,clpb:     add     edi,0x12345678        mov     dl,[eax]        mov     [edi],dl        mov     al,[esi+ebx]            ;; fetch source texel        add     edx,ebp        adc     bl,clpc:     add     edi,0x12345678        mov     dl,[eax]        mov     [edi],dl        mov     al,[esi+ebx]            ;; fetch source texel        add     edx,ebp        adc     bl,clpd:     add     edi,0x12345678        mov     dl,[eax]        mov     [edi],dlpe:     add     edi,0x12345678        dec     ch        jne     vskyquadloopvskydone:        pop     ebx        pop     edi        pop     esi        pop     ebp        ret;;----------------------------------------------------------------------;; R_DrawTranslucentColumn_8;;;; Vertical column texture drawer, with transparency. Replaces Doom2's;; 'fuzz' effect, which was not so beautiful.;; Transparency is always impressive in some way, don't know why...;;----------------------------------------------------------------------cglobal R_DrawTranslucentColumn_8R_DrawTranslucentColumn_8:        push    ebp                     ;; preserve caller's stack frame pointer        push    esi                     ;; preserve register variables        push    edi        push    ebx;;;; dest = ylookup[dc_yl] + columnofs[dc_x];;;        mov     ebp,[dc_yl]        mov     ebx,ebp        mov     edi,[ylookup+ebx*4]        mov     ebx,[dc_x]        add     edi,[columnofs+ebx*4]   ;; edi = dest;;;; pixelcount = yh - yl + 1;;        mov     eax,[dc_yh]        inc     eax        sub     eax,ebp                 ;; pixel count        mov     [pixelcount],eax        ;; save for final pixel        jle     near    vtdone         ;; nothing to scale;;;; frac = dc_texturemid - (centery-dc_yl)*fracstep;;;        mov     ecx,[dc_iscale]        ;; fracstep        mov     eax,[centery]        sub     eax,ebp        imul    eax,ecx        mov     edx,[dc_texturemid]        sub     edx,eax        mov     ebx,edx        shr     ebx,16                  ;; frac int.        and     ebx,0x7f        shl     edx,16                  ;; y frac up        mov     ebp,ecx        shl     ebp,16                  ;; fracstep f. up        shr     ecx,16                  ;; fracstep i. ->cl        and     cl,0x7f        push    cx        mov     ecx,edx        pop     cx        mov     edx,[dc_colormap]        mov     esi,[dc_source];;;; lets rock :) !;;        mov     eax,[pixelcount]        shr     eax,0x2        test    byte [pixelcount],0x3        mov     ch,al                   ;; quad count        mov     eax,[dc_transmap]        je      vt4quadloop;;;;  do un-even pixel;;        test    byte [pixelcount],0x1        je      trf2        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        add     ecx,ebp        adc     bl,cl        mov     al,[edi]                ;; fetch dest  : index into colormap        and     bl,0x7f        mov     dl,[eax]        mov     dl,[edx]        mov     [edi],dlpf:     add     edi,0x12345678;;;;  do two non-quad-aligned pixels;;trf2:    test    byte [pixelcount],0x2        je      trf3        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        add     ecx,ebp        adc     bl,cl        mov     al,[edi]                ;; fetch dest  : index into colormap        and     bl,0x7f        mov     dl,[eax]        mov     dl,[edx]        mov     [edi],dlpg:     add     edi,0x12345678        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        add     ecx,ebp        adc     bl,cl        mov     al,[edi]                ;; fetch dest  : index into colormap        and     bl,0x7f        mov     dl,[eax]        mov     dl,[edx]        mov     [edi],dlph:     add     edi,0x12345678;;;;  test if there was at least 4 pixels;;trf3:   test    ch,0xff                 ;; test quad count        je near vtdone;;;; ebp : ystep frac. upper 24 bits;; edx : y     frac. upper 24 bits;; ebx : y     i.    lower 7 bits,  masked for index;; ecx : ch = counter, cl = y step i.;; eax : colormap aligned 256;; esi : source texture column;; edi : dest screen;;vt4quadloop:        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     [tystep],ebppi:     add     edi,0x12345678        mov     al,[edi]                ;; fetch dest  : index into colormappj:     sub     edi,0x12345678        mov     ebp,edipk:     sub     edi,0x12345678        jmp short inloopalign 4vtquadloop:        add     ecx,[tystep]        adc     bl,clq1:     add     ebp,0x23456789        and     bl,0x7f        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     dl,[edx]        mov     [edi],dl        mov     al,[ebp]                ;; fetch dest   : index into colormapinloop:        add     ecx,[tystep]        adc     bl,clq2:     add     edi,0x23456789        and     bl,0x7f        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     dl,[edx]        mov     [ebp+0x0],dl        mov     al,[edi]                ;; fetch dest   : index into colormap        add     ecx,[tystep]        adc     bl,clq3:     add     ebp,0x23456789        and     bl,0x7f        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     dl,[edx]        mov     [edi],dl        mov     al,[ebp]                ;; fetch dest   : index into colormap        add     ecx,[tystep]        adc     bl,clq4:     add     edi,0x23456789        and     bl,0x7f        mov     dl,[eax]        mov     ah,[esi+ebx]            ;; fetch texel : colormap number        mov     dl,[edx]        mov     [ebp],dl        mov     al,[edi]                ;; fetch dest   : index into colormap        dec     ch        jne     vtquadloopvtdone:        pop     ebx        pop     edi        pop     esi        pop     ebp        ret;;----------------------------------------------------------------------;; R_DrawShadeColumn;;;;   for smoke..etc.. test.;;----------------------------------------------------------------------cglobal R_DrawShadeColumn_8R_DrawShadeColumn_8:        push    ebp                     ;; preserve caller's stack frame pointer        push    esi                     ;; preserve register variables        push    edi        push    ebx;;;; dest = ylookup[dc_yl] + columnofs[dc_x];;;        mov     ebp,[dc_yl]        mov     ebx,ebp        mov     edi,[ylookup+ebx*4]        mov     ebx,[dc_x]        add     edi,[columnofs+ebx*4]  ;; edi = dest;;;; pixelcount = yh - yl + 1;;        mov     eax,[dc_yh]        inc     eax        sub     eax,ebp                 ;; pixel count        mov     [pixelcount],eax       ;; save for final pixel        jle near shdone                ;; nothing to scale;;;; frac = dc_texturemid - (centery-dc_yl)*fracstep;;;        mov     ecx,[dc_iscale]        ;; fracstep        mov     eax,[centery]        sub     eax,ebp        imul    eax,ecx        mov     edx,[dc_texturemid]        sub     edx,eax        mov     ebx,edx

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -