public static final AttackInfo parseDmgR(final LittleEndianAccessor lea) {
	final AttackInfo ret = new AttackInfo();

	lea.skip(1);
	ret.tbyte = lea.readByte();
	ret.targets = (byte) ((ret.tbyte >>> 4) & 0xF);
	ret.hits = (byte) (ret.tbyte & 0xF);
	ret.skill = lea.readInt();

	switch (ret.skill) {
	    case 3121004: // Hurricane
	    case 3221001: // Pierce
	    case 5221004: // Rapidfire
	    case 13111002: // Cygnus Hurricane
		lea.skip(4); // extra 4 bytes
		break;
	}
	lea.skip(9); // ORDER [4] bytes on v.79, [4] bytes on v.80, [1] byte on v.82
	ret.display = lea.readByte(); // Always zero?
	ret.animation = lea.readByte();
	lea.skip(1); // Weapon class
	ret.speed = lea.readByte(); // Confirmed
	ret.lastAttackTickCount = lea.readInt(); // Ticks
	ret.slot = (byte) lea.readShort();
	ret.csstar = (byte) lea.readShort();
	ret.AOE = lea.readByte(); // is AOE or not, TT/ Avenger = 41, Showdown = 0

	int damage, oid;
	List<Integer> allDamageNumbers;
	ret.allDamage = new ArrayList<AttackPair>();

	for (int i = 0; i < ret.targets; i++) {
	    oid = lea.readInt();
//	    System.out.println(tools.HexTool.toString(lea.read(14)));
	    lea.skip(14); // [1] Always 6?, [3] unk, [4] Pos1, [4] Pos2, [2] seems to change randomly for some attack

	    allDamageNumbers = new ArrayList<Integer>();
	    for (int j = 0; j < ret.hits; j++) {
		damage = lea.readInt();
		allDamageNumbers.add(Integer.valueOf(damage));
	    }
	    lea.skip(4); // CRC of monster [Wz Editing]
//	    System.out.println(tools.HexTool.toString(lea.read(4)));

	    ret.allDamage.add(new AttackPair(Integer.valueOf(oid), allDamageNumbers));
	}
	lea.skip(4);
	ret.position = lea.readPos();

	return ret;
    }