Example #1
0
 /// <summary>
 ///     Erstellt ein Tile mit Daten aus dem angegebenen Rom Objekt an der angegebenen Stelle
 /// </summary>
 /// <param name="rom">Rom Objekt, welches die Tile Daten enthält</param>
 /// <param name="offset">Position der Daten</param>
 /// <param name="is8Bpp">Wenn true: Es wird versucht ein 8bpp Tile zu laden</param>
 /// <returns></returns>
 public static Tile FromRomOffset(Rom rom, UInt32 offset, bool is8Bpp = false)
 {
     rom.SetStreamOffset(offset);
     if (!is8Bpp)
     {
         return new Tile(rom.ReadByteArray(32));
     }
     return new Tile(rom.ReadByteArray(64), true);
 }
Example #2
0
 /// <summary>
 ///     Erstellt eine Tilemap mit Daten vom angegebenen Rom Objekt
 /// </summary>
 /// <param name="input">Rom Objekt in welchem die Tilemap Daten liegen</param>
 /// <param name="offset">Position der Daten</param>
 /// <param name="entrycount">Länge der Tilemap in Tiles</param>
 public Tilemap(Rom input, UInt32 offset, uint entrycount)
 {
     _isRepointable = true;
     Entries = new List<TilemapEntry>();
     input.SetStreamOffset(offset);
     for (int i = 0; i < entrycount; ++i)
     {
         Entries.Add(new TilemapEntry(input.ReadUInt16()));
     }
     _origSize = GetSize();
 }
Example #3
0
 /// <summary>
 ///     Erstellt eine neue Pointer Tabelle aus dem Kontext eines Rom Objekts
 /// </summary>
 /// <param name="context">Rom Objekt, welches die Tabelle beinhaltet</param>
 /// <param name="offset">Offset der Tabelle</param>
 /// <param name="count">Anzahl der Pointer</param>
 public PointerTable(Rom context, UInt32 offset, int count)
 {
     _entries = new List<UInt32>();
     _offset = offset;
     context.SetStreamOffset(offset);
     for (int i = 0; i < count; ++i)
     {
         UInt32 pointer = context.ReadUInt32();
         if (((pointer & 0x1FFFFFF) >> 24) > 0)
         {
             throw new Exception(String.Format("An dieser Stelle wurde kein Pointer gefunden: {0}",
                 pointer.ToString("X")));
         }
         _entries.Add(pointer);
         _origSize = (_entries.Count*4);
     }
 }
Example #4
0
 /// <summary>
 ///     Erstellt eine Palette aus den Werten an der angegebenen Romadresse
 /// </summary>
 /// <param name="input">Rom Objekt, welches die Palettendaten enthält</param>
 /// <param name="offset">Offset der Daten</param>
 /// <param name="isEncoded">Wenn true: Die Daten werden zuerst dekomprimiert(LZ77)</param>
 /// <param name="is256Pal">Wenn true: Lädt 256 Einträge anstatt 16</param>
 public Palette(Rom input, UInt32 offset, bool isEncoded, bool is256Pal = false)
 {
     IsEncoded = isEncoded;
     _isRepointable = true;
     _currentOffset = offset;
     short cols = 16;
     if (is256Pal)
     {
         cols = 256;
     }
     _entries = new PaletteEntry[cols];
     var entryList = new List<UInt16>();
     if (!isEncoded)
     {
         {
             input.SetStreamOffset(offset);
             entryList = input.ReadUShortArray(cols);
         }
     }
     else
     {
         long origSize;
         byte[] unlz = RomDecode.LzUncompress(input, offset, out origSize);
         for (int i = 0; i < unlz.Length / 2; i++)
         {
             UInt16 temp = unlz[(2*i)];
             temp |= (UInt16) ((unlz[1 + (i*2)]) << 8);
             entryList.Add(temp);
         }
     }
     for (int i = 0; i < cols; i++)
     {
         _entries[i] = new PaletteEntry(entryList[i]);
     }
     if (_entries.Length != cols)
     {
         throw new Exception("Die angegebene Palette hat nicht die angegebene Anzahl an Farben");
     }
     _lenght = GetRawData().Length;
     _origSize = GetSize();
 }
Example #5
0
 public static byte[] LzUncompress(Rom input, uint offset, out long length)
 {
     input.SetStreamOffset(offset);
     return LzUncompress(input.Stream, out length);
 }