import com.ms.wfc.io.*; import com.ms.wfc.core.*; import com.ms.wfc.app.*; import com.ms.wfc.ui.*; import com.ms.wfc.util.*; import java.util.Vector; import com.ms.lang.*; import com.ms.*; public class Txtf extends Form { public void tgaToTxtf(String tgaFileName) { java.util.StringTokenizer parser = new java.util.StringTokenizer(tgaFileName,"."); String txtFileName = parser.nextToken() + "." + parser.nextToken(); int trueHeight = Integer.parseInt(parser.nextToken()); int hotX = Integer.parseInt(parser.nextToken()); int hotY = Integer.parseInt(parser.nextToken()); File txtfFile = File.create(txtFileName); File tgaFile = File.open(tgaFileName); tgaFile.setPosition(12); int width = tgaFile.readShort(); int height = tgaFile.readShort(); tgaFile.setPosition(18); byte[] data = tgaFile.readBytes(width*height*2); txtfFile.writeInt(0x66747874); txtfFile.writeInt(0x00020000); txtfFile.writeInt(width); txtfFile.writeInt(trueHeight); txtfFile.writeInt(hotX); txtfFile.writeInt(hotY); txtfFile.writeBytes(data); tgaFile.close(); txtfFile.close(); } public void txtfToTga(String txtfFileName) { File txtfFile = File.open(txtfFileName); if ( isTxtf(txtfFile) == false ) { if ( isTga(txtfFile) ) { txtfFile.close(); tgaToTxtf(txtfFileName); } return; } int width,height,trueHeight,hotX,hotY; txtfFile.setPosition(8); width = txtfFile.readInt(); trueHeight = txtfFile.readInt(); hotX = txtfFile.readInt(); hotY = txtfFile.readInt(); int dataSize = (int)txtfFile.getLength()-(int)txtfFile.getPosition(); height = dataSize/width/2; byte[] data = txtfFile.readBytes(width*height*2); ; File tgaFile = File.create(txtfFileName + "." + trueHeight + "." + hotX + "." + hotY + ".tga"); tgaFile.writeInt(0x00020000); tgaFile.writeInt(0x00000000); tgaFile.writeInt(0x00000000); tgaFile.writeShort((short)width); tgaFile.writeShort((short)height); tgaFile.writeShort((short)0x0110); tgaFile.writeBytes(data); tgaFile.close(); txtfFile.close(); } // end txtfToTga public void getFiles() { String[] fnames; OpenFileDialog ofd = new OpenFileDialog(); ofd.setMultiselect(true); ofd.setFilter("Gun graphic files (*.nn?,*.ns?,*.zn?,*.zs?)|*.nn?;*.ns?;*.zn?;*.zs?|Tga files (*.tga)|*.tga"); ofd.setFilterIndex(1); int dlgResult = ofd.showDialog(); if (dlgResult == DialogResult.OK) { fnames = ofd.getFileNames(); } else return; if ( ofd.getFilterIndex() == 1 ) { int i; for ( i = 0 ; i < fnames.length ; i++ ) { if ( File.isFile(fnames[i]) ) txtfToTga(fnames[i]); } } if ( ofd.getFilterIndex() == 2 ) { int i; for ( i = 0 ; i < fnames.length ; i++ ) { if ( File.isFile(fnames[i]) ) tgaToTxtf(fnames[i]); } } } public void formInit() { } // end formInit public Txtf(String[] args) { if ( args.length > 0 ) return; getFiles(); } public static void main(String[] args) { Txtf myTxtf = new Txtf(args); if ( args.length > 0 ) { String[] files = File.getFiles(args[0]); int i; for ( i = 0 ; i < files.length ; i++ ) { if ( File.isFile(files[i]) ) myTxtf.txtfToTga(files[i]); } } } // end main public boolean isTransparent(int[] data) { int i; for ( i = 0 ; i < data.length ; i++ ) { if ( data[i] != 0x7FFF ) return(false); } return(true); } public int getTop(byte[] data,int width) { int height = data.length/2/width; int[][] intData = new int[height][width]; int i,j,top=0; for ( i = 0 ; i < height ; i++ ) { for ( j = 0 ; j < width ; j++ ) { intData[i][j] = (data[(i*width+j)*2]&0xff | (data[(i*width+j)*2+1]&0xff) << 8 ) & 0xffff; } } for ( i = 0 ; i < height ; i++ ) { if ( isTransparent(intData[i]) == true ) { top = i;i = height+10; } } return(top-1); } public boolean isTga(File testFile) { testFile.setPosition(0); int test = testFile.readInt(); if ( test == 0x20000 ) return(true); else return(false); } public boolean isTxtf(String fileName) { return(isTxtf(File.open(fileName))); } public boolean isTxtf(File testFile) { int test = testFile.readInt(); if ( test == 1718909044 ) return(true); return(false); } } // end class TxtF