Mercurial > hg > forks > pwpunix
diff oldchsool/sprites.pl @ 0:acb5694e93d9
Initial import.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 18 May 2010 04:25:44 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/oldchsool/sprites.pl Tue May 18 04:25:44 2010 +0300 @@ -0,0 +1,500 @@ +#!/usr/bin/perl +##!/opt/bin/perl5 + +# 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('oldsk',' :00:ff/o:88:00/;:67:00/b:78:00/x:ff:00',<<EOD); + ;;;;;; + bbb;;;;;; + bbbb;;;;;;b; + ; b;;;;;;;;;bbb; ; +;;;;;xxxxxx;;;;;;;;;;;; +;;;;;x;;;;x;xxxxxx;;;; +;;;; x;xx;x;x;;;;x;;; + ;; x;;;;x;x;xx;x;; + xxxxxx;x;;;;x + ;;;;;xxxxxx + ;;;;;;;;;; + bbb;o;o;;bbb + bbbbbbbbbbbbb + bbbbbbbbbb + bbbbbbbbb + bbbbbbbb + bb bbbb + bb bbb + bb + b +EOD +# ppppppppppppp ppppp ppppp pppppppppppppp +# ppppppppppppp ppppp ppppp pppppppppppppp +# ppppp ppppp ppppp ppppp ppppp ppppp +# ppppp ppppp ppppp ppppp ppppp ppppp +# ppppppppppppp ppppp ppp ppppp pppppppppppppp +# ppppppppppppp ppppp ppp ppppp pppppppppppppp +# ppppp ppppp ppp ppppp ppppp +# ppppp ppppppppppppppppppp ppppp +# ppppp ppppppppppppppppppp ppppp +# +&bitmap('bdash0',' :00:ff/b:44:00/*:77:00/b:6e:00/w:55:00',<<EOD); + + + wwww + wwwwwwww + ww wwwwww + ww wwwwww + wwwwww + wwww + **** + **wwww + **** + bbwwwwbbbb + bb ww + bb ww +wwww + +EOD +&bitmap('bdash1',' :00:ff/b:44:00/*:77:00/b:6e:00/w:55:00',<<EOD); + + + wwww + wwwwwwww +ww wwwwww +ww wwwwww + wwwwww + wwww + **** + **wwww + **** + bbwwwwbb + bb bb + bb bbww +wwww ww + +EOD +&bitmap('bdash2',' :00:ff/b:44:00/*:77:00/b:6e:00/w:55:00',<<EOD); + + + + wwww + wwwwwwww + ww wwwwww + ww wwwwww + wwwwww + wwww + **** + **wwww + **** + wwww + bbbb + bbbbww + wwww ww + +EOD +&bitmap('bdash3',' :00:ff/b:44:00/*:77:00/b:6e:00/w:55:00',<<EOD); + + + + wwww + wwwwwwww + ww wwwwww + ww wwwwww + wwwwww + wwww + **** + **wwww + **** + wwww + bbbbbbbb + bbbbbb ww + wwww ww + +EOD +&bitmap('bdash4',' :00:ff/b:44:00/*:77:00/b:6e:00/w:55:00',<<EOD); + + + ww ww + ww ww + ww wwww ww + ww wwww ww + wwwwwwww + wwww + wwwwwwww + ww **** ww + ** wwww ** + **** + wwww + bb****bb + bb bb + ww bb + wwww wwww +EOD +&bitmap('brick0',' :00:00/w:93:00/*:77:00',<<EOD); +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +ww wwww ww +wwww wwwwww ww +ww** wwww** ww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +ww wwww ww +wwww wwwwww ww +ww** wwww** ww +wwwwwwwwwwwwwwww +wwwwwwwwwwwwwwww +EOD +&bitmap('brick1',' :00:00/w:ff:00/*:77:00/x:88:00',<<EOD); +www wwwwwwwwww +**x ww******** +*xx ww*xxx**xx + + +wwwwwwwwww www +*********w ww* +xx*xx**xxx ww* + + +wwwwww wwwwwww +*****x ww***** +*****x ww***** +*xx*xx ww*xxx* + + +EOD +&bitmap('pelush1',' :00:ff/r:44:00/Y:66:00/y:38:00/.:11:00/W:77:00',<<EOD); + yyyyyyyy + yy + rrrrrrrrr + rrrrrrrrrrrrrr + YYYYYY..... +WWWWWW...WW. +WWWWWWW..... +WWWWWWWWWWWW +WWWWWWWWWWWWWW +WWWWWWWWWWWWWWWW +WWWWWW +WWWWWWWW +WWWWWWWWWWW rr + WWWWWWWWWWWWWW + WWWWWWWWWW + WWWWWW +EOD +&bitmap('pelush0',' :00:ff/r:44:00/Y:66:00/y:38:00/.:11:00/W:77:00',<<EOD); + yyyyyy + yy + rrrrrrrrr + rrrrrrrrrrrrrr + YYYYYY..... +WWWWWW...WW. +WWWWWWW..... +WWWWWWWWWWWW +WWWWWWWWWWWWWW +WWWWWWWWWWWWWWWW +WWWWWW +WWWWWW +WWWWWWW + WWWWWWW rr + WWWWWWWWWWWWWW + WWWWWWWWWWW +EOD +&bitmap('pelush2',' :00:ff/r:44:00/Y:66:00/y:38:00/.:11:00/W:77:00',<<EOD); + yyyy + yy + rrrrrrrr + rrrrrrrrrrrrr + YYYYYYYYYY +WWWWW...... +WWWWWWWWWWW +WWWWWWWWWWW +WWWWWWWWWWWWW +WWWWWWWWWWWWWWW +WWWWW +WWWWWWWWWWWWWWW +WWWWWWWWWWWWWW + WWWWWWWWWWW + WWWWWWW + +EOD +&bitmap('boulder','.:00:ff/x:33:00/y:37:00/;:88:00',<<EOD); +................ +......xxxxx..... +.....xxxxxxx.... +....xxxyyyyxx... +...xxxxxxxyxx... +...;xxxxxxyyyx.. +..xxxxxxxxxxyx.. +..xxxxxxxxxxxxx. +.xxxxxxxxxxxxxx. +.xxxxxxxxxxxxxx. +.;xxxxxxxyxyxyx. +.;xxxxxxxxyxyx.. +..;xxxxxxxxyxy.. +..;xxxxxxxyxy... +...;xxxxxxxyx... +....;xxxxxxx.... +EOD +&bitmap('splat0',' :00:ff/b:44:00/B:4c:00',<<EOD); + + + + bb + + bbbbb + bb bb + bbbbb + bbBBBBBbb + bbBBBBBBbb b + bbbbbbbb b + bbbbbbbb + bbbb + bbbb + +bb +EOD +&bitmap('splat1',' :00:ff/b:44:00/B:cc:00',<<EOD); +bbbb + + bbb + bbbbbb + bbbbbbb + bbbbbbbbb + bbBbbbBbbbb + bbbbbbBbbbb + bbbBBBBBbbbb + bBBBBBBBBbbbb + BbBBBBBbbbb + bbbbBBBbbbb + bbbbbbbbbb + bbbbbbbb + + +EOD +&bitmap('splat2',' :00:ff/b:4c:00/B:ce:00/x:ee:00',<<EOD); + bbbbbb + bbbbbxbbb + bbbbbbbbbbb + bbbbbbxBBbbb + bbbbBBxBBbbb +bbbbBBBxBbbbbb +bbbxBBxxxbbxbb +bxbxBxxxbbbxb +bbbbbBBxBBbbbb +bbbBBBBxBBBbbbb + bBbBBBxBbbbb + bbbbBBBbbbbb + bbbbbbbbbbb + bbbbbxbb + bbbb +EOD +&bitmap('splat3',' :00:ff/b:6e:00/B:66:00/x:ee:00',<<EOD); + bbbbbb + bbbbbbbbbb +bbbbbbbbbbbbb +bbbbbb BBbbbb +bbbb b bbb +bbbb bbbb +bbbx bxbb +bxb bbxb +bbbb bbb +bbbBB bbbbb +bbBbBBBxBbbbbb +bbbbbbbbbbbbb + bbbbbbbbbbb + bbbbbxbb + bbbbb +EOD +&bitmap('splat4',' :00:ff/b:40:00/x:04:00',<<EOD); + bbb bb + b bb bb +bbb bb + b +bb b bbb +bb bb + bb + +b bb + b bbb +b b b bb +bbbb bb bb + bbbb + bbbbbxbb + bbbbb +EOD +&bitmap('tietzka',' :00:ff/*:77:ff/B:99:ff/w:66:ff/!:ff:ff',<<EOD); + + + ******** + *BBBBBB* + *BBBBBB* **** + *BBBBBB* *!!* + ******** **** + ****** **** + **** **** +wwwwwwwwwwwwwww + wwwww wwwww + www www + www www +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 + +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