;Copyright (c) 1990-2012 by Neil Dodwell ;Released with permission from Neil Dodwell under GPLv2 ;See LICENSE file for full license text Fadedos proc near call vsync mov es,buffers mov di,startpal mov al,0 mov dx,3c7h out dx,al mov dx,3c9h mov cx,768/4 dos1: in al,dx stosb loop dos1 mov cx,64 fadedosloop: push cx mov ds,buffers mov si,startpal mov cx,768 dos3: lodsb cmp al,0 jz nodown dec al nodown: mov [si-1],al loop dos3 call vsync mov ds,buffers mov si,startpal mov al,0 mov dx,3c8h out dx,al inc dx mov cx,768/4 dos2: lodsb out dx,al loop dos2 pop cx loop fadedosloop ret endp Dofade proc near cmp fadedirection,0 jz finishfade mov cl,numtofade mov ch,0 mov al,colourpos mov ah,0 mov ds,buffers mov si,startpal add si,ax add si,ax add si,ax call showgroup mov al,numtofade add al,colourpos mov colourpos,al cmp al,0 jnz finishfade call fadecalculation finishfade: ret endp Clearendpal proc near mov es,buffers mov di,endpal mov cx,768 mov al,0 rep stosb ret endp Clearpalette proc near mov fadedirection,0 call clearstartpal call dumpcurrent ret endp Fadescreenup proc near call clearstartpal call paltoendpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 ret endp Fadetowhite proc near mov es,buffers mov di,endpal mov cx,768 mov al,63 rep stosb mov di,endpal mov al,0 stosb stosb stosb call paltostartpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 ret endp Fadefromwhite proc near mov es,buffers mov di,startpal mov cx,768 mov al,63 rep stosb mov di,startpal mov al,0 stosb stosb stosb call paltoendpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 ret endp Fadescreenups proc near call clearstartpal call paltoendpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,64 ret endp Fadescreendownhalf proc near call paltostartpal call paltoendpal mov cx,768 mov es,buffers mov bx,endpal halfend: mov al,[es:bx] shr al,1 mov [es:bx],al inc bx loop halfend mov ds,buffers mov es,buffers mov si,startpal+(56*3) mov di,endpal+(56*3) mov cx,3*5 rep movsb mov si,startpal+(77*3) mov di,endpal+(77*3) mov cx,3*2 rep movsb mov fadedirection,1 mov fadecount,31 mov colourpos,0 mov numtofade,32 ret endp Fadescreenuphalf proc near call endpaltostart call paltoendpal mov fadedirection,1 mov fadecount,31 mov colourpos,0 mov numtofade,32 ret endp Fadescreendown proc near call paltostartpal call clearendpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 ret endp Fadescreendowns proc near call paltostartpal call clearendpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,64 ret endp Clearstartpal proc near mov es,buffers mov di,startpal mov cx,256 wholeloop1: mov ax,0 stosw mov al,0 stosb loop wholeloop1 ret endp Showgun proc near mov addtored,0 ;12 mov addtogreen,0 mov addtoblue,0 call paltostartpal call paltoendpal call greyscalesum ; mov es,buffers ; mov di,endpal+3 ; mov cx,255 ; mov ax,0 ;reds: mov byte ptr [es:di],63 ; inc di ; stosw ; loop reds mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 mov cx,130 call hangon call endpaltostart call clearendpal mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 mov cx,200 call hangon mov roomssample,34 call loadroomssample mov volume,0 mov dx,offset cs:gungraphic call loadintotemp call createpanel2 mov ds,tempgraphics mov al,0 mov ah,0 mov di,100 mov bx,4 call showframe mov ds,tempgraphics mov al,1 mov ah,0 mov di,158 mov bx,106 call showframe call worktoscreen call getridoftemp call fadescreenup mov cx,160 call hangon mov al,12 mov ah,0 call playchannel0 mov dx,offset cs:endtextname call loadtemptext call rollendcredits2 call getridoftemptext ret endp Rollendcredits2 proc near call rollem ret endp Rollem proc near mov cl,160 mov ch,160 mov di,25 mov bx,20 mov ds,mapstore mov si,0 call multiget mov es,textfile1 mov si,49*2 mov ax,[es:si] mov si,ax add si,textstart mov cx,80 endcredits21: push cx mov bx,10 mov cx,linespacing endcredits22: push cx si di es bx call vsync mov cl,160 mov ch,160 mov di,25 mov bx,20 mov ds,mapstore mov si,0 call multiput call vsync pop bx es di si push si di es bx mov cx,18 onelot2: push cx mov di,25 ;75 mov dx,161 mov ax,0 call printdirect add bx,linespacing pop cx loop onelot2 call vsync mov cl,160 mov ch,160 mov di,25 ;75 mov bx,20 call multidump pop bx es di si cx cmp lasthardkey,1 jz endearly2 dec bx loop endcredits22 pop cx looknext2: mov al,[es:si] inc si cmp al,":" jz gotnext2 cmp al,0 jz gotnext2 jmp looknext2 gotnext2: cmp lasthardkey,1 jz endearly loop endcredits21 mov cx,120 call hangone ret endearly2: pop cx endearly: ret endp Fadecalculation proc near cmp fadecount,0 jz nomorefading mov bl,fadecount mov es,buffers mov si,startpal mov di,endpal mov cx,768 fadecolloop: mov al,[es:si] mov ah,[es:di] cmp al,ah jz gotthere jc lesscolour dec byte ptr [es:si] jmp gotthere lesscolour: cmp bl,ah jz withit jnc gotthere withit: inc byte ptr [es:si] gotthere: inc si inc di loop fadecolloop dec fadecount ret nomorefading: mov fadedirection,0 ret endp Greyscalesum proc near ;converts palette to grey scale ;summed using formula: mov es,buffers ; .20xred + .59xGreen + .11xBlue mov si,maingamepal mov di,endpal mov cx,256 ;convert 256 colours greysumloop1: push cx mov bx,0 mov al,[es:si] mov ah,0 mov cx,20 mul cx add bx,ax mov al,[es:si+1] mov ah,0 mov cx,59 mul cx add bx,ax mov al,[es:si+2] mov ah,0 mov cx,11 mul cx add bx,ax ;bx holds equationx100 mov al,-1 ;divide result by 100 greysumloop2: inc al sub bx,100 jnc greysumloop2 ;ah holds grey scale number mov bl,al mov al,bl mov ah,addtored cmp al,0 ;jz noaddr add al,ah noaddr: stosb mov ah,addtogreen mov al,bl cmp al,0 jz noaddg add al,ah noaddg: stosb ;store result in red, green and mov ah,addtoblue mov al,bl cmp al,0 jz noaddb add al,ah noaddb: stosb ;blue portions of palette. add si,3 pop cx loop greysumloop1 ret endp Showgroup proc near mov dx,3c8h out dx,al mov dx,3c9h showgroup1: lodsb out dx,al lodsb out dx,al lodsb out dx,al loop showgroup1 ret endp Paltostartpal proc near mov es,buffers mov ds,buffers mov si,maingamepal mov di,startpal mov cx,768/2 rep movsw ret endp Endpaltostart proc near mov es,buffers mov ds,buffers mov si,endpal mov di,startpal mov cx,768/2 rep movsw ret endp Startpaltoend proc near mov es,buffers mov ds,buffers mov di,endpal mov si,startpal mov cx,768/2 rep movsw ret endp Paltoendpal proc near mov es,buffers mov ds,buffers mov di,endpal mov si,maingamepal mov cx,768/2 rep movsw ret endp Allpalette proc near mov es,buffers mov ds,buffers mov di,startpal mov si,maingamepal mov cx,768/2 rep movsw call dumpcurrent ret endp Dumpcurrent proc near mov si,startpal mov ds,buffers call vsync mov al,0 mov cx,128 call showgroup call vsync mov al,128 mov cx,128 call showgroup ret endp Fadedownmon proc near call paltostartpal call paltoendpal mov es,buffers mov di,endpal+(231*3) mov cx,3*8 mov ax,0 rep stosb mov di,endpal+(246*3) stosb stosw mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 mov cx,64 ;100 call hangon ;curs ret endp Fadeupmon proc near call paltostartpal call paltoendpal mov es,buffers mov di,startpal+(231*3) mov cx,3*8 mov ax,0 rep stosb mov di,startpal+(246*3) stosb stosw mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 mov cx,128 call hangon ;curs ret endp Fadeupmonfirst proc near call paltostartpal call paltoendpal mov es,buffers mov di,startpal+(231*3) mov cx,3*8 mov ax,0 rep stosb mov di,startpal+(246*3) stosb stosw mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 mov cx,64 call hangon mov al,26 call playchannel1 mov cx,64 call hangon ret endp Fadeupyellows proc near ;call startpaltoend call paltoendpal mov es,buffers mov di,endpal+(231*3) mov cx,3*8 mov ax,0 rep stosb mov di,endpal+(246*3) stosb stosw mov fadedirection,1 mov fadecount,63 mov colourpos,0 mov numtofade,128 mov cx,128 call hangon ret endp Initialmoncols proc near call paltostartpal mov es,buffers mov di,startpal+(230*3) mov cx,3*9 mov ax,0 rep stosb mov di,startpal+(246*3) stosb stosw mov ds,buffers mov si,startpal+(230*3) mov al,230 mov cx,18 call showgroup ret endp