EmArray GetArray(int offset) { int data_offset = m_data[offset] - 10; var array = new EmArray { Count = GetInteger(offset, 0xC), ElemSize = m_data[offset + data_offset - 1] - 12, DataOffset = offset + data_offset, }; array.ArraySize = array.Count * array.ElemSize + data_offset; return(array); }
int GetArrayElem(EmArray a1, int index) { int offset = index * a1.ElemSize; switch (a1.ElemSize) { case 1: return(m_data[a1.DataOffset + offset]); case 2: return(LittleEndian.ToUInt16(m_data, a1.DataOffset + offset)); case 3: return(LittleEndian.ToUInt16(m_data, a1.DataOffset + offset) | m_data[a1.DataOffset + offset + 2] << 16); case 4: return(LittleEndian.ToInt32(m_data, a1.DataOffset + offset)); default: throw new InvalidFormatException("Invalid PSB array structure"); } }