List of usage examples for org.apache.commons.io EndianUtils readSwappedShort
public static short readSwappedShort(InputStream input) throws IOException
From source file:thv.th.reader.FramesReader.java
public static THFrame readByIndex(int frameIndex, FileInputStream frameStream, FileInputStream listStream, FileInputStream elementStream, File tabFile, File chunksFile, THPalette palette) throws IOException { frameStream.getChannel().position(frameIndex * 10); int listIndex = EndianUtils.readSwappedInteger(frameStream) * 2; int width = frameStream.read(); int height = frameStream.read(); if (width == 0 || height == 0) return null; frameStream.skip(1);/* ww w . j a v a 2 s . co m*/ int flags = frameStream.read(); int nextFrame = EndianUtils.readSwappedShort(frameStream); THFrame res = new THFrame(frameIndex, width, height, flags, nextFrame, chunksFile, tabFile, palette); Vector<Integer> elementList = new Vector<Integer>(); listStream.getChannel().position(listIndex); while (true) { int elementIndex = EndianUtils.readSwappedShort(listStream); if (elementIndex == -1) break; SpriteElement element = SpriteElementReader.readByIndex(elementStream, elementIndex); res.addElement(element); } return res; }
From source file:thv.th.reader.LangReader.java
public static Vector<Vector<String>> read(ABuffer raw) throws IOException { InputStream is = raw.createInputStream(); int sections = EndianUtils.readSwappedShort(is); Vector<Integer> counts = new Vector<Integer>(); for (int i = 0; i < sections; ++i) { counts.add((int) EndianUtils.readSwappedShort(is)); }// w w w .jav a 2 s. c o m Vector<Vector<String>> res = new Vector<Vector<String>>(); Reader r = new InputStreamReader(is, "Cp437"); for (int i = 0; i < sections; ++i) { int n = counts.elementAt(i); Vector<String> temp = new Vector<String>(); for (int j = 0; j < n; ++j) { temp.add(readNullTerminatedString(r)); } res.add(temp); } is.close(); return res; }
From source file:thv.th.reader.LevelReader.java
public static THMap read(FileInputStream mapStream, ABuffer tabStream, FileInputStream chunkStream, THPalette palette, Color background) throws IOException { Vector<BufferedImage> tiles = ChunksReader.readAll(chunkStream, tabStream, palette, background); THMap result = new THMap(); result.setPlayers(mapStream.read()); mapStream.skip(33);/* w w w .j ava 2 s .c om*/ for (int y = 0; y < 128; ++y) { for (int x = 0; x < 128; ++x) { int pos = (int) mapStream.getChannel().position(); int anim = EndianUtils.readSwappedShort(mapStream); int layer0id = mapStream.read(); int layer1id = mapStream.read(); int layer2id = mapStream.read(); layer0id = tileMap[layer0id]; layer1id = tileMap[layer1id]; layer2id = tileMap[layer2id]; BufferedImage l0 = tiles.elementAt(layer0id); BufferedImage l1 = null; BufferedImage l2 = null; if (layer1id > 0) { l1 = tiles.elementAt(layer1id); } if (layer2id > 0) { l2 = tiles.elementAt(layer2id); } mapStream.skip(3); Tile tile = new Tile(anim, l0, l1, l2, pos); result.setTile(x, y, tile); } } for (int y = 0; y < 128; ++y) { for (int x = 0; x < 128; ++x) { int pid = EndianUtils.readSwappedShort(mapStream); result.getTile(x, y).setParcel(pid); } } mapStream.close(); return result; }
From source file:thv.th.reader.SavegameReader.java
public static THMap read(FileInputStream frameStream, FileInputStream frameListStream, FileInputStream frameElementStream, File frameTabFile, File frameChunksFile, THPalette framePalette, FileInputStream saveStream, ABuffer blockTabStream, FileInputStream blockChunkStream, THPalette blockPalette, Color background) throws IOException { Vector<BufferedImage> tiles = ChunksReader.readAll(blockChunkStream, blockTabStream, blockPalette, background);//from w w w . ja v a 2s.co m THMap result = new THMap(); saveStream.getChannel().position(13); for (int y = 0; y < 128; ++y) { for (int x = 0; x < 128; ++x) { int pos = (int) saveStream.getChannel().position() + 21; int anim = EndianUtils.readSwappedShort(saveStream); int layer0id = saveStream.read(); int layer1id = saveStream.read(); int layer2id = saveStream.read(); layer0id = LevelReader.tileMap[layer0id]; layer1id = LevelReader.tileMap[layer1id]; layer2id = LevelReader.tileMap[layer2id]; BufferedImage l0 = tiles.elementAt(layer0id); BufferedImage l1 = null; BufferedImage l2 = null; if (layer1id > 0) { l1 = tiles.elementAt(layer1id); } if (layer2id > 0) { l2 = tiles.elementAt(layer2id); } saveStream.skip(1); int extra = saveStream.read(); saveStream.skip(1); Tile tile = new Tile(anim, l0, l1, l2, pos); switch (extra >>> 4) { case 2: case 10: tile.setShadow1(tiles.get(154)); break; case 3: case 11: tile.setShadow0(tiles.get(74)); tile.setShadow1(tiles.get(154)); break; case 6: case 7: case 14: case 15: tile.setShadow0(tiles.get(73)); tile.setShadow1(tiles.get(154)); break; case 1: case 9: tile.setShadow0(tiles.get(74)); break; case 4: case 5: case 12: case 13: tile.setShadow0(tiles.get(73)); break; } switch (extra & 0xf) { case 1: tile.setLitter(FramesReader.readByIndex(3737, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; case 2: tile.setLitter(FramesReader.readByIndex(3738, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; case 3: tile.setLitter(FramesReader.readByIndex(3739, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; case 4: tile.setLitter(FramesReader.readByIndex(4533, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; case 5: tile.setLitter(FramesReader.readByIndex(3741, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; case 6: tile.setLitter(FramesReader.readByIndex(4542, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; case 7: tile.setLitter(FramesReader.readByIndex(3742, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette)); break; } long nextPos = saveStream.getChannel().position(); readObjectInfo(saveStream, tile, frameStream, frameListStream, frameElementStream, frameTabFile, frameChunksFile, framePalette); result.setTile(x, y, tile); saveStream.getChannel().position(nextPos); } } /*for(int y = 0; y < 128; ++y) { for(int x = 0; x < 128; ++x) { int pid = EndianUtils.readSwappedShort(mapStream); result.getTile(x, y).setParcel(pid); } }*/ saveStream.close(); return result; }
From source file:thv.th.reader.SavegameReader.java
private static void readObjectInfo(FileInputStream saveStream, Tile tile, FileInputStream frameStream, FileInputStream listStream, FileInputStream elementStream, File tabFile, File chunksFile, THPalette palette) throws IOException { if (tile.getAnim() != 0) { int base = 131085 + tile.getAnim() * 175; ObjectInfo oi = new ObjectInfo(base); saveStream.getChannel().position(8 + base); int frameIndex = EndianUtils.readSwappedShort(saveStream); saveStream.skip(6);/* www .ja va 2 s. c o m*/ int byte16 = saveStream.read(); saveStream.getChannel().position(base + 29); oi.setLayerId(saveStream.read(), 0); oi.setLayerId(saveStream.read(), 1); oi.setLayerId(saveStream.read(), 2); oi.setLayerId(saveStream.read(), 3); oi.setLayerId(saveStream.read(), 4); oi.setLayerId(saveStream.read(), 5); oi.setLayerId(saveStream.read(), 6); oi.setLayerId(saveStream.read(), 7); oi.setLayerId(saveStream.read(), 8); oi.setLayerId(saveStream.read(), 9); oi.setLayerId(saveStream.read(), 10); oi.setLayerId(saveStream.read(), 11); oi.setLayerId(saveStream.read(), 12); THFrame frame = FramesReader.readByIndex(frameIndex, frameStream, listStream, elementStream, tabFile, chunksFile, palette); oi.setFrame(frame); oi.setByte16(byte16); tile.setObjectInfo(oi); } }
From source file:thv.th.reader.SpriteElementReader.java
public static SpriteElement readByIndex(FileInputStream is, int index) throws IOException { is.getChannel().position(index * 6); int tabPos = EndianUtils.readSwappedShort(is); int offsetx = is.read(); int offsety = is.read(); int layerClass = is.read(); byte flags = (byte) (0xf & layerClass); layerClass = (layerClass & 0xf0) >>> 4; int id = is.read(); return new SpriteElement(index * 6, tabPos, offsetx, offsety, flags, id, layerClass); }
From source file:thv.th.view.AnimationPanel.java
protected Vector<THAnimation> loadAnimations(int start) throws IOException { Vector<THAnimation> res = new Vector<THAnimation>(); int animCount = (int) (startFile.length() / 4); FileInputStream startStream = new FileInputStream(startFile); ABuffer tabStream = new FileBuffer(tabFile); FileInputStream chunkStream = new FileInputStream(chunksFile); FileInputStream frameStream = new FileInputStream(framesFile); FileInputStream listStream = new FileInputStream(listFile); FileInputStream elementStream = new FileInputStream(spriteElementFile); for (int i = 0; i < perPage; ++i) { if ((i + start) >= animCount) break; startStream.getChannel().position((i + start) * 4); int index = EndianUtils.readSwappedShort(startStream); int maxFrameWidth = 0; int maxFrameHeight = 0; int maxXOffset = 0; int minYOffset = 256; Vector<THFrame> frames = loadFrameChain(index, frameStream, listStream, elementStream); if (frames.size() == 0) continue; for (THFrame frame : frames) { if (frame.getWidth() > maxFrameWidth) { maxFrameWidth = frame.getWidth(); //maxXOffset = frame.getMaxXOffset(tabStream); }//ww w . ja va 2s. c o m maxXOffset = Math.max(maxXOffset, frame.getMaxXOffset(tabStream)); minYOffset = Math.min(minYOffset, frame.getMinYOffset(tabStream)); } int xover = 0; int xunder = 0; int yover = 0; int yunder = 0; for (THFrame frame : frames) { xover = Math.max(xover, frame.getXOverrun(maxFrameWidth, maxXOffset, tabStream)); xunder = Math.max(xunder, frame.getXUnderrun(maxFrameWidth, maxXOffset, tabStream)); yover = Math.max(yover, frame.getYOverrun(0, minYOffset, tabStream)); yunder = Math.max(yunder, frame.getYUnderrun(0, minYOffset, tabStream)); } maxFrameWidth += xover + xunder; maxFrameHeight += yover + yunder; THAnimation an = new THAnimation(maxFrameWidth, maxFrameHeight, i + start); for (THFrame frame : frames) { an.addFrame(frame.renderInAnim(tabStream, chunkStream, palette, 4, maxFrameWidth, maxFrameHeight, maxXOffset, minYOffset, xunder, yunder), frame); } res.add(an); } //tabStream.close(); chunkStream.close(); frameStream.close(); listStream.close(); elementStream.close(); selectPanel.setSelectionCount((animCount / perPage) + 1); return res; }