11package org .firescape .client ;
22
3+ import javax .imageio .ImageIO ;
34import java .awt .*;
45import java .awt .image .*;
6+ import java .io .IOException ;
7+ import java .io .InputStream ;
8+ import java .util .Set ;
9+ import java .util .TreeSet ;
510
611public class Surface implements ImageProducer , ImageObserver {
712
@@ -460,6 +465,7 @@ public void clear() {
460465
461466 public void parseSprite (int spriteId , byte spriteData [], byte indexData [], int frameCount ) {
462467 int indexOff = Utility .getUnsignedShort (spriteData , 0 );
468+ int debugIndexOff = indexOff ;
463469 int fullWidth = Utility .getUnsignedShort (indexData , indexOff );
464470 indexOff += 2 ;
465471 int fullHeight = Utility .getUnsignedShort (indexData , indexOff );
@@ -497,7 +503,6 @@ public void parseSprite(int spriteId, byte spriteData[], byte indexData[], int f
497503 spriteTranslate [id ] = true ;
498504 }
499505 }
500-
501506 } else if (unknown == 1 ) {
502507 for (int x = 0 ; x < spriteWidth [id ]; x ++) {
503508 for (int y = 0 ; y < spriteHeight [id ]; y ++) {
@@ -506,12 +511,54 @@ public void parseSprite(int spriteId, byte spriteData[], byte indexData[], int f
506511 spriteTranslate [id ] = true ;
507512 }
508513 }
509-
510514 }
515+ }
516+ InputStream inputstream = this .getClass ()
517+ .getResourceAsStream ("/org/firescape/client/conf/overwritten/" + id + ".png" );
518+ if (inputstream != null ) {
519+ System .out .println ("Overwriting Sprite: " + id );
520+ overwriteSpritePixels (id , inputstream );
521+ }
522+ }
523+ }
511524
525+ public void overwriteSpritePixels (int id , InputStream inputstream ) {
526+ BufferedImage sprite = loadNewSprite (inputstream );
527+ int [] pixelIndex = new int [sprite .getWidth () * sprite .getHeight ()];
528+ for (int y = 0 ; y < sprite .getHeight (); y ++) {
529+ for (int x = 0 ; x < sprite .getWidth (); x ++) {
530+ int pixel = sprite .getRGB (x , y );
531+ if (pixel == 0 ) {
532+ pixel = 1 ;
533+ } else if (pixel == -65281 ) {
534+ pixel = 0 ;
535+ }
536+ pixelIndex [x + y * spriteWidth [id ]] = pixel ;
512537 }
513538 }
539+ Set <Integer > uniqueColors = new TreeSet <Integer >();
540+ uniqueColors .add (-65281 );
541+ for (int i = 0 ; i < pixelIndex .length ; i ++) {
542+ uniqueColors .add (pixelIndex [i ]);
543+ }
544+
545+ Integer [] colorList = uniqueColors .toArray (new Integer [uniqueColors .size ()]);
546+ int [] colorArray = new int [colorList .length ];
547+ for (int i = 0 ; i < colorList .length ; i ++) {
548+ colorArray [i ] = colorList [i ].intValue ();
549+ }
550+ spriteColourList [id ] = colorArray ;
551+ spritePixels [id ] = pixelIndex ;
552+ }
514553
554+ public BufferedImage loadNewSprite (InputStream is ) {
555+ try {
556+ BufferedImage logo = ImageIO .read (is );
557+ return logo ;
558+ } catch (IOException e ) {
559+ e .printStackTrace ();
560+ }
561+ return null ;
515562 }
516563
517564 public void readSleepWord (int spriteId , byte spriteData []) {
@@ -638,22 +685,22 @@ public void loadSprite(int spriteId) {
638685 pixels [pixel ] = colour ;
639686 }
640687
641- // int i = spriteId;
642- // Sprite s = new Sprite(
643- // spriteId,
644- // spriteId,
645- // spriteWidth[i],
646- // spriteHeight[i],
647- // spriteWidthFull[i],
648- // spriteHeightFull[i],
649- // spriteColourList[i].length,
650- // spriteColourList[i],
651- // spriteTranslateX[i],
652- // spriteTranslateY[i],
653- // spriteTranslate[i],
654- // pixels
655- // );
656- // s.saveSprite();
688+ // int i = spriteId;
689+ // Sprite s = new Sprite(
690+ // spriteId,
691+ // spriteId,
692+ // spriteWidth[i],
693+ // spriteHeight[i],
694+ // spriteWidthFull[i],
695+ // spriteHeightFull[i],
696+ // spriteColourList[i].length,
697+ // spriteColourList[i],
698+ // spriteTranslateX[i],
699+ // spriteTranslateY[i],
700+ // spriteTranslate[i],
701+ // pixels
702+ // );
703+ // s.saveSprite();
657704
658705 spritePixels [spriteId ] = pixels ;
659706 spriteColoursUsed [spriteId ] = null ;
0 commit comments