📄 newgfx16.mac
字号:
%%skip%endmacro%macro sprdrawprbwb16bngmsthr 1 or al,al jz %%skip add al,dh cmp byte[ecx+ebx-%1],1 je %%skip mov ax,[ebp+eax*2+512] cmp dh,128+64 jae %%yestransp and eax,[UnusedBitXor]%%yestransp mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax and eax,[UnusedBitXor] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax xor eax,eax%%skip%endmacro%macro sprdrawprawb16bngsthr 1 or al,al jz %%skip add al,dh test byte[sprpriodata+ebx-%1+16],dl jnz %%skip or byte[sprpriodata+ebx-%1+16],dl mov ax,[ebp+eax*2+512] cmp dh,128+64 jae %%yestransp and eax,[UnusedBitXor]%%yestransp mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax cmp byte[ecx+ebx-%1],1 je %%skip and eax,[UnusedBitXor] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax%%skip xor eax,eax%endmacro%macro sprdrawprbwb16bngsthr 1 or al,al jz %%skip add al,dh mov ax,[ebp+eax*2+512] cmp dh,128+64 jae %%yestransp and eax,[UnusedBitXor]%%yestransp mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax cmp byte[ecx+ebx-%1],1 je %%skip and eax,[UnusedBitXor] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax%%skip xor eax,eax%endmacro%macro sprdrawprawb16bngmthr 1 or al,al jz %%skip add al,dh test byte[sprpriodata+ebx-%1+16],dl jnz %%skip or byte[sprpriodata+ebx-%1+16],dl mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax cmp byte[ecx+ebx-%1],1 je %%skip cmp dh,128+64 jae %%yestransp and eax,[UnusedBitXor]%%yestransp or ax,[UnusedBit] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax%%skip xor eax,eax%endmacro%macro sprdrawprbwb16bngmthr 1 or al,al jz %%skip add al,dh mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax cmp byte[ecx+ebx-%1],1 je %%skip or ax,[UnusedBit] cmp dh,128+64 jae %%yestransp and eax,[UnusedBitXor]%%yestransp mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax%%skip xor eax,eax%endmacro%macro sprdrawpra16bngnthr 1 or al,al jz %%skip add al,ch test byte[sprpriodata+ebx-%1+16],dl jnz %%skip mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax xor eax,eax or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro sprdrawprb16bngnthr 1 or al,al jz %%skip add al,ch mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax xor eax,eax%%skip%endmacro%macro sprdrawprawb16bngnthr 1 or al,al jz %%skip add al,dh test byte[sprpriodata+ebx-%1+16],dl jnz %%skip or byte[sprpriodata+ebx-%1+16],dl cmp byte[ecx+ebx-%1],1 je %%skip mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax xor eax,eax%%skip%endmacro%macro sprdrawprbwb16bngnthr 1 or al,al jz %%skip add al,dh cmp byte[ecx+ebx-%1],1 je %%skip mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax xor eax,eax%%skip%endmacro%macro sprdrawpra16bngmsnthr 1 or al,al jz %%skip add al,ch test byte[sprpriodata+ebx-%1+16],dl jnz %%skip mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax xor eax,eax or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro sprdrawprb16bngmsnthr 1 or al,al jz %%skip add al,ch mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax xor eax,eax%%skip%endmacro%macro sprdrawprawb16bngmsnthr 1 or al,al jz %%skip add al,dh test byte[sprpriodata+ebx-%1+16],dl jnz %%skip or byte[sprpriodata+ebx-%1+16],dl cmp byte[ecx+ebx-%1],1 je %%skip mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax xor eax,eax%%skip%endmacro%macro sprdrawprbwb16bngmsnthr 1 or al,al jz %%skip add al,dh cmp byte[ecx+ebx-%1],1 je %%skip mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax xor eax,eax%%skip%endmacro%macro sprdrawprawb16bngsnthr 1 or al,al jz %%skip add al,dh test byte[sprpriodata+ebx-%1+16],dl jnz %%skip or byte[sprpriodata+ebx-%1+16],dl mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax cmp byte[ecx+ebx-%1],1 je %%skip mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax%%skip xor eax,eax%endmacro%macro sprdrawprbwb16bngsnthr 1 or al,al jz %%skip add al,dh mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax cmp byte[ecx+ebx-%1],1 je %%skip mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax%%skip xor eax,eax%endmacro%macro sprdrawprawb16bngmnthr 1 or al,al jz %%skip add al,dh test byte[sprpriodata+ebx-%1+16],dl jnz %%skip or byte[sprpriodata+ebx-%1+16],dl mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax cmp byte[ecx+ebx-%1],1 je %%skip mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax%%skip xor eax,eax%endmacro%macro sprdrawprbwb16bngmnthr 1 or al,al jz %%skip add al,dh mov ax,[ebp+eax*2] mov [edi+ebx*2-%1*2+75036*2],ax mov [edi+ebx*2-%1*2+75036*6],ax cmp byte[ecx+ebx-%1],1 je %%skip mov [edi+ebx*2-%1*2],ax mov [edi+ebx*2-%1*2+75036*4],ax%%skip xor eax,eax%endmacro%macro sprdrawpra216bnghr 1 or al,al jz %%skip or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro Procbgpr016b 5 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2; add esi,16*2+288*2 xor ebx,ebx%%nextline cmp byte[BGFB+ebx],0 jne %%nogo %4 %5, %%nogo ; Check if at a tile alignment mov ecx,[BG1SYl+ebx*2+%1*512] and ecx,0FFFFh add ecx,ebx test ecx,07h jz %%tilecheck%%proclinebyline ; process line by line push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %2 pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne %%nextline jmp %%donextbg%%tilecheck cmp dword[startlinet],ebx jae %%proclinebyline cmp dword[endlinet],ebx jbe %%proclinebyline test dword[bgwinchange+ebx],0FFFFFF00h jnz %%linebyline test dword[bgwinchange+ebx+4],0FFFFFFFFh jz %%tilebytile%%linebyline test dword[winbg1enval+ebx+%1*256],0A0A0A0Ah jnz %%proclinebyline test dword[winbg1enval+ebx+%1*256+4],0A0A0A0Ah jnz %%proclinebyline%%tilebytile cmp ebx,[reslbyl] jae %%proclinebyline test dword[bgallchange+ebx],0FFFFFF00h jnz %%proclinebyline test dword[bgallchange+ebx+4],0FFFFFFFFh jnz near %%proclinebyline test dword[bg1change+ebx+%1*256],0FFFFFF00h jnz near %%proclinebyline test dword[bg1change+ebx+%1*256+4],0FFFFFFFFh jnz near %%proclinebyline cmp byte[BGMA+ebx],5 jae near %%proclinebyline cmp byte[BGMA+ebx],2 je near %%proclinebyline test byte[mosenng+ebx],1 << %1 jnz %%mosaic%%nomosaic mov ax,[resolutn] sub ax,8 cmp bx,ax jae near %%proclinebyline push esi call %3 pop esi add ebx,8 add esi,288*2*8 cmp [resolutn],bx ja near %%nextline jmp %%donextbg%%mosaic cmp byte[mosszng+ebx],0 je %%nomosaic jmp %%proclinebyline%%donextbg%endmacro%macro Procbg3pr016b 5 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2; add esi,16+288 xor ebx,ebx%%nextline cmp byte[BGFB+ebx],0 jne %%nogo %4 %5, %%nogo ; Check if at a tile alignment mov ecx,[BG1SYl+ebx*2+%1*512] and ecx,0FFFFh add ecx,ebx test ecx,07h jz %%tilecheck%%proclinebyline ; process line by line push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %2 pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne %%nextline jmp %%donextbg%%tilecheck cmp dword[startlinet],ebx jae %%proclinebyline cmp dword[endlinet],ebx jbe %%proclinebyline test dword[bgwinchange+ebx],0FFFFFF00h jnz %%linebyline test dword[bgwinchange+ebx+4],0FFFFFFFFh jz %%tilebytile%%linebyline test dword[winbg1enval+ebx+%1*256],0A0A0A0Ah jnz %%proclinebyline test dword[winbg1enval+ebx+%1*256+4],0A0A0A0Ah jnz %%proclinebyline%%tilebytile cmp ebx,[reslbyl] jae %%proclinebyline test dword[bgallchange+ebx],0FFFFFF00h jnz %%proclinebyline test dword[bgallchange+ebx+4],0FFFFFFFFh jnz near %%proclinebyline test dword[bg1change+ebx+%1*256],0FFFFFF00h jnz near %%proclinebyline test dword[bg1change+ebx+%1*256+4],0FFFFFFFFh jnz near %%proclinebyline mov eax,[BG3PRI+ebx] cmp eax,[BG3PRI+ebx+4] jne near %%proclinebyline test byte[mosenng+ebx],1 << %1 jnz %%mosaic%%nomosaic mov ax,[resolutn] sub ax,8 cmp bx,ax jae near %%proclinebyline push esi call %3 pop esi add ebx,8 add esi,288*8*2 cmp [resolutn],bx ja near %%nextline jmp %%donextbg%%mosaic cmp byte[mosszng+ebx],0 je %%nomosaic jmp %%proclinebyline%%donextbg%endmacro%macro Procbgpr116b 6 ; Draw BG ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2; add esi,16*2+288*2 xor ebx,ebx%%nextline cmp byte[BGFB+ebx],0 jne %%nogo %5 %6, %%nogo ; Check if at a tile alignment cmp byte[%4+ebx],1 je %%tile%%proclinebyline ; process line by line push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %2 pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne %%nextline jmp %%donextbg%%tile push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %3 pop esi add ebx,8 add esi,288*2*8 cmp [resolutn],bx ja near %%nextline%%donextbg%endmacro%macro Procbg3pr116b 6 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2 xor ebx,ebx%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo %5 %6, %%nogo cmp byte[BGMA+ebx],1 jne %%nomode1 cmp byte[BG3PRI+ebx],0 jne %%nogo%%nomode1 ; Check if at a tile alignment cmp byte[%4+ebx],1 je %%tile%%proclinebyline ; process line by line push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %2 pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne %%nextline jmp %%donextbg%%tile push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %3 pop esi add ebx,8 add esi,288*2*8 cmp [resolutn],bx ja near %%nextline%%donextbg%endmacro%macro Procbg3pr1b16b 6 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2 xor ebx,ebx%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo %5 %6, %%nogo cmp byte[BGMA+ebx],1 jne %%nogo cmp byte[BG3PRI+ebx],0 je %%nogo ; Check if at a tile alignment cmp byte[%4+ebx],1 je %%tile%%proclinebyline ; process line by line push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %2 pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne %%nextline jmp %%donextbg%%tile push esi mov eax,[cpalval+ebx*4] mov [CPalPtrng],eax call %3 pop esi add ebx,8 add esi,288*2*8 cmp [resolutn],bx ja near %%nextline%%donextbg%endmacro%macro Procsprng16b 2 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,1%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo %1 %2, %%nogo xor eax,eax mov al,[sprtlng+ebx] mov cl,[sprlefttot+ebx] mov [csprival],eax inc byte[sprtlng+ebx] test byte[sprleftpr+ebx*4+eax],1 jz %%nogo or cl,cl jz %%nogo test byte[SpecialLine+ebx],2 jnz %%hires push esi call drawsprng16b pop esi jmp %%nogo%%hires mov cl,[sprlefttot+ebx] push esi call drawsprng16bhr pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne near %%nextline%endmacro%macro Procsprng0116b 2 ; Draw BG 2 ; Start line by line drawing/check mov esi,[vidbuffer] add esi,16*2+288*2 mov ebx,1%%nextline cmp byte[BGFB+ebx],0 jne near %%nogo %1 %2, %%nogo cmp byte[BGMA+ebx],1 ja %%nogo xor eax,eax mov al,[sprtlng+ebx] mov cl,[sprlefttot+ebx] mov [csprival],eax inc byte[sprtlng+ebx] test byte[sprleftpr+ebx*4+eax],1 jz %%nogo or cl,cl jz %%nogo test byte[SpecialLine+ebx],2 jnz %%hires push esi call drawsprng16b pop esi jmp %%nogo%%hires mov cl,[sprlefttot+ebx] push esi call drawsprng16bhr pop esi%%nogo inc ebx add esi,288*2 cmp [resolutn],bx jne near %%nextline%endmacro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -