Example usage for org.apache.commons.io EndianUtils readSwappedShort

List of usage examples for org.apache.commons.io EndianUtils readSwappedShort

Introduction

In this page you can find the example usage for org.apache.commons.io EndianUtils readSwappedShort.

Prototype

public static short readSwappedShort(InputStream input) throws IOException 

Source Link

Document

Reads a "short" value from an InputStream.

Usage

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;
}