Mercurial > hg > forks > pwpunix
view nykyaeka/sprites.pl @ 71:a87eb778f225
Improvements to the MinGW crossbuild. Should now build with default tools
from Debian mingw packages, though you need Win32 version of libSDL with the
necessary headers and so on in addition. 64-bit builds not tested and
probably won't work. Tested on Debian 7.0, earlier won't work.
binutils-mingw-w64-i686 gcc-mingw-w64-i686 mingw-w64-i686-dev
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 14 Aug 2012 03:08:10 +0300 |
parents | acb5694e93d9 |
children |
line wrap: on
line source
#!/usr/bin/perl # color=>grayscale palettes: # # 0x00,0x08,0x80,0x88,0x87,0x78,0x77,0x7f,0xf7,0xff ########################### $spritz="sprite*allbmps[]={"; $wrct=0; sub wr { printf("0x%x,",$_[0]); $wrct+=5; if($wrct>=70){printf("\n");$wrct=0;} } sub wrrle { my ($ch,$cnt)=($_[0],$_[1]); if($cnt==0){return;} $z=-1; for($i=0;$i<7;$i++){if($cpal[$i] eq $ch){$z=$i;}} if($z==-1) { $cpal[$cpalidx]=$ch; $cpalidx++; if($cpalidx==7){$cpalidx=0;} wr((7<<5)|$cnt); if($pal{ord($ch)} eq '') { print "/* ERROR - $ch */"; } print $pal{ord($ch)}.","; $sz+=3; } else { wr(($z<<5)|$cnt); $sz++; } } sub bitmap { $bmpname=$_[0]; $sz=0; @colors=split('/',$_[1]); foreach(@colors) { ($ch,$col,$msk)=split(':',$_); $pal{ord($ch)}="0x".$col.",0x".$msk; } @lines=split("\n",$_[2]); $xdim=0;$ydim=0; foreach(@lines) { if(length($_)>$xdim) { $xdim=length($_); } } print "u8*".$bmpname."_pict,".$bmpname."_mask;\n"; print "u8 ".$bmpname."_cmpr[]={\n"; $ydim=0; @cpal=('å','å','å','å','å','å','å');$cpalidx=0; $repch="å";$repcnt=0; foreach(@lines) { for($x=0;$x<$xdim;$x++) { $ch=substr($_,$x,1); if($ch eq "") { $ch=" "; } if($ch eq $repch) { $repcnt++; if($repcnt==31){$repcnt=0;wrrle($repch,31);} } else { wrrle($repch,$repcnt); $repch=$ch;$repcnt=1; } } $ydim++; } wrrle($repch,$repcnt); print "};\n"; print "sprite $bmpname ={ $xdim,$ydim,(char*)$sz,$bmpname"."_cmpr};\n\n"; $spritz .= '&'.$bmpname.','; } &bitmap('pwp_sf','x:7f:00/ =:00:ff',<<EOD); xxxxxxxxxxx xxxxxxxxxxxxx xx xx xx xx xx xxx x x xxx xx xx x x x x x x xx xx x x x x x x x xx xx xxx x x x xxx xx xx x x x x x xx xx x x x x x xx xx x xxxxx x xx xx xx xx xx xxxxxxxxxxxxx xxxxxxxxxxx EOD &bitmap('esittaa','x:7f:00/ =:00:ff',<<EOD); x x x x x x xxx xxx x xxx xxx xxxx xxxx x x x x x x x x x xxxx xxx x x x x x x x x x x x x x x x x xxx xxxxx x x xx xxx xxx x EOD &bitmap('forevisar','x:7f:00/ =:00:ff',<<EOD); x x xx xx x xx xx x x x xxx xxxx x xx x x x xx x x x x x x x xx x x x x xxx x x x xxx x x x xxxxx x x x x x x x x x x x x xx x xxxx xx x xxxx xxx x x x EOD &bitmap('pelu','n:44:00/-:00:ff/ :00:ff/@:87:00/.:11:82/x:44:00/Z:e6:00/o:ff:00',<<EOD); -------------------------------- - - - - nnnnnnnnnnn nn nn xxxxxxxxxxxxx xxxxxxxxxx ....ZZZZZZ .....@@@@@ .o...@@@@@ ....@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@ xx @@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@ @@@@@@ @@@@@ @@@@ - - - - - - EOD &bitmap('piimae','-:00:ff/k:ee:00/ :00:ff/!:66:00/=:7f:00/x:00:00/;:6e:88',<<EOD); -------------------------------- - - - kkkk !!!! !!!! !!!;!! !!!!!;!!!! !!!!!!!!!!!! !!!!!!!!!;;;!! !!!!!!!!!!!;;!!! !!!!!!!!!!!!;!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! ================ =xxxxx==x==x==x= =x===x==x==x==xx =xxxxx==x==x==x= =x======x==x==x= =x======x==x==x= =x======x==x==x= ================ !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! - - - - - EOD &bitmap('taehti','-:44:00/ :44:00/*:6e:00',<<EOD); -------------------------------- - - - * * * - ** *** ** - ******* - ******* - *********** - ******* - ******* - ** *** ** - * * * - - - *** **** ** **** **** - ** ** ** ** ** ** ** ** ** - ** ** ** ***** ** ** - ** ** ** ** ** ** ** ** ** - *** **** ** **** **** - - - * * * * * * * * * * * * - *** *** *** *** - * * * * * * * * * * * * - - - - - - - EOD &bitmap('tankki','z:77:00/ :00:ff/0:00:00/x:88:00',<<EOD); zzzz zzzzzzzzzzzzzzzzzzzzzzzzzzz zzz zzzz xxxxxxxxxxx zxzxzzzxzzxzxzzzzzzzzzzzzzxzzzxzzzxz zzxxxxzxxxxzxxxxzxxxxzxxxxzxxxxzxxxxzz zzx000zx000zx000zx000zx000zx000zx000zz zzx000zx000zx000zx000zx000zx000zx000zz EOD &bitmap('tumpsa','x:88:00/ :00:ff',<<EOD); x xx xxxx EOD &bitmap('isanta',' :00:ff/x:44:00/z:02:00/;:77:00/0:00:00/b:19:00/y:6e:00',<<EOD); zzzz zzzzzzz ;;; ;;;;;; ;;; xxxxxxx ;0;;0; ;;;yy ;0;;0; ;;;;;; bbyy ;;;;;; ;00; bbbb yy yyyyyy bbbbbbbbbbb yyyyyyyyyy bbbbbbbbbbb y yyyyyyyyyyy;bbbbbbbbb yyyyyyyyyy bbbbbbbbb yyyyyyyyyy bbbbbb yyyyyyyyyy 00 00 yyyyyyyyyy 0000 0000 000 000 0000 0000 EOD print <<JOOH; void decompress_bitmap(u8*dpic,u8*dmask,u8*s,int count) { u8 pal[7],palm[7],palidx=0; u8 col,msk,rep,*s1=s+count; while(s<s1) { u8 a=*s++; rep=a&31; col=a>>5; if(col==7){pal[palidx]=col=*s++;palm[palidx]=msk=*s++;palidx++;if(palidx==7)palidx=0;} else{msk=palm[col];col=pal[col];} if(rep) for(;rep;rep--){*dpic++=col;*dmask++=msk;} } } JOOH print $spritz,"NULL };\n"; print <<JOOH2 void decompress_allbmp() { u8*d,*d2; sprite**s=allbmps; while(*s) { d=malloc((*s)->width*(*s)->height*sizeof(u8)); d2=malloc((*s)->width*(*s)->height*sizeof(u8)); decompress_bitmap(d,d2,(*s)->mask,(int)((*s)->pict)); (*s)->pict=d; (*s)->mask=d2; s++; } } JOOH2