mirror of
https://github.com/crskycode/GARbro.git
synced 2024-12-24 03:44:13 +08:00
implemented another variant of ELG images.
This commit is contained in:
parent
eac5f21bd6
commit
1fa643b628
@ -35,6 +35,7 @@ namespace GameRes.Formats.Lucifen
|
|||||||
{
|
{
|
||||||
internal class ElgMetaData : ImageMetaData
|
internal class ElgMetaData : ImageMetaData
|
||||||
{
|
{
|
||||||
|
public int Type;
|
||||||
public int HeaderSize;
|
public int HeaderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ namespace GameRes.Formats.Lucifen
|
|||||||
|
|
||||||
public ElgFormat ()
|
public ElgFormat ()
|
||||||
{
|
{
|
||||||
Signatures = new uint[] { 0x01474c45u, 0x08474c45u, 0x18474c45u, 0x20474c45u };
|
Signatures = new uint[] { 0x01474c45u, 0x08474c45u, 0x18474c45u, 0x20474c45u, 0x02474c45u };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Write (Stream file, ImageData image)
|
public override void Write (Stream file, ImageData image)
|
||||||
@ -63,18 +64,31 @@ namespace GameRes.Formats.Lucifen
|
|||||||
int bpp = input.ReadByte();
|
int bpp = input.ReadByte();
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int y = 0;
|
int y = 0;
|
||||||
|
int type = bpp;
|
||||||
int header_size = 8;
|
int header_size = 8;
|
||||||
if (1 == bpp)
|
if (2 == type)
|
||||||
|
{
|
||||||
|
bpp = input.ReadByte();
|
||||||
|
header_size = 13;
|
||||||
|
}
|
||||||
|
else if (1 == type)
|
||||||
{
|
{
|
||||||
bpp = input.ReadByte();
|
bpp = input.ReadByte();
|
||||||
x = input.ReadInt16();
|
x = input.ReadInt16();
|
||||||
y = input.ReadInt16();
|
y = input.ReadInt16();
|
||||||
header_size = 13;
|
header_size = 13;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
type = 0;
|
||||||
if (8 != bpp && 24 != bpp && 32 != bpp)
|
if (8 != bpp && 24 != bpp && 32 != bpp)
|
||||||
return null;
|
return null;
|
||||||
uint w = input.ReadUInt16();
|
uint w = input.ReadUInt16();
|
||||||
uint h = input.ReadUInt16();
|
uint h = input.ReadUInt16();
|
||||||
|
if (2 == type)
|
||||||
|
{
|
||||||
|
x = input.ReadInt16();
|
||||||
|
y = input.ReadInt16();
|
||||||
|
}
|
||||||
return new ElgMetaData
|
return new ElgMetaData
|
||||||
{
|
{
|
||||||
Width = w,
|
Width = w,
|
||||||
@ -82,6 +96,7 @@ namespace GameRes.Formats.Lucifen
|
|||||||
OffsetX = x,
|
OffsetX = x,
|
||||||
OffsetY = y,
|
OffsetY = y,
|
||||||
BPP = bpp,
|
BPP = bpp,
|
||||||
|
Type = type,
|
||||||
HeaderSize = header_size,
|
HeaderSize = header_size,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -89,9 +104,7 @@ namespace GameRes.Formats.Lucifen
|
|||||||
|
|
||||||
public override ImageData Read (Stream file, ImageMetaData info)
|
public override ImageData Read (Stream file, ImageMetaData info)
|
||||||
{
|
{
|
||||||
var meta = info as ElgMetaData;
|
var meta = (ElgMetaData)info;
|
||||||
if (null == meta)
|
|
||||||
throw new ArgumentException ("ElgFormat.Read should be supplied with ElgMetaData", "info");
|
|
||||||
file.Position = meta.HeaderSize;
|
file.Position = meta.HeaderSize;
|
||||||
using (var reader = new Reader (file, meta))
|
using (var reader = new Reader (file, meta))
|
||||||
{
|
{
|
||||||
@ -105,6 +118,7 @@ namespace GameRes.Formats.Lucifen
|
|||||||
int m_width;
|
int m_width;
|
||||||
int m_height;
|
int m_height;
|
||||||
int m_bpp;
|
int m_bpp;
|
||||||
|
int m_type;
|
||||||
BinaryReader m_input;
|
BinaryReader m_input;
|
||||||
byte[] m_output;
|
byte[] m_output;
|
||||||
|
|
||||||
@ -117,12 +131,23 @@ namespace GameRes.Formats.Lucifen
|
|||||||
m_width = (int)info.Width;
|
m_width = (int)info.Width;
|
||||||
m_height = (int)info.Height;
|
m_height = (int)info.Height;
|
||||||
m_bpp = info.BPP;
|
m_bpp = info.BPP;
|
||||||
|
m_type = info.Type;
|
||||||
m_output = new byte[m_width*m_height*m_bpp/8];
|
m_output = new byte[m_width*m_height*m_bpp/8];
|
||||||
m_input = new ArcView.Reader (stream);
|
m_input = new ArcView.Reader (stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Unpack ()
|
public void Unpack ()
|
||||||
{
|
{
|
||||||
|
if (2 == m_type)
|
||||||
|
{
|
||||||
|
while (0 != m_input.ReadByte())
|
||||||
|
{
|
||||||
|
int size = m_input.ReadInt32();
|
||||||
|
if (size < 4)
|
||||||
|
throw new InvalidFormatException();
|
||||||
|
m_input.BaseStream.Seek (size-4, SeekOrigin.Current);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (8 == m_bpp)
|
if (8 == m_bpp)
|
||||||
{
|
{
|
||||||
Format = PixelFormats.Indexed8;
|
Format = PixelFormats.Indexed8;
|
||||||
|
@ -289,7 +289,13 @@ Ma wo Jutaiseshi Otome no Kuetsu<br/>
|
|||||||
</td></tr>
|
</td></tr>
|
||||||
<tr class="odd"><td>*.lpk</td><td><tt>LPK1</tt></td><td>No</td><td rowspan="2">Lucifen</td><td rowspan="2">
|
<tr class="odd"><td>*.lpk</td><td><tt>LPK1</tt></td><td>No</td><td rowspan="2">Lucifen</td><td rowspan="2">
|
||||||
Doki Doki Rooming<br/>
|
Doki Doki Rooming<br/>
|
||||||
|
Gangsta Republica<br/>
|
||||||
|
Love-Bride Eve<br/>
|
||||||
|
Nekonade Distortion<br/>
|
||||||
|
Ore-tachi ni Tsubasa wa Nai<br/>
|
||||||
Rikorisu ~Lycoris Radiata~<br/>
|
Rikorisu ~Lycoris Radiata~<br/>
|
||||||
|
Sakura Synchronicity<br/>
|
||||||
|
Shinsetsu Ryouki no Ori Dai 2 Shou<br/>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr class="odd"><td>*.elg</td><td><tt>ELG</tt></td><td>No</td></tr>
|
<tr class="odd"><td>*.elg</td><td><tt>ELG</tt></td><td>No</td></tr>
|
||||||
<tr><td>*.arc</td><td><tt>ARC\x1a</tt></td><td>No</td><td rowspan="2">AZ System</td><td rowspan="2">Triptych</td></tr>
|
<tr><td>*.arc</td><td><tt>ARC\x1a</tt></td><td>No</td><td rowspan="2">AZ System</td><td rowspan="2">Triptych</td></tr>
|
||||||
@ -316,6 +322,7 @@ Warusa<br/>
|
|||||||
<tr><td>*.pak+*.idx</td><td>-</td><td>No</td><td rowspan="2">EAGLS</td><td rowspan="2">
|
<tr><td>*.pak+*.idx</td><td>-</td><td>No</td><td rowspan="2">EAGLS</td><td rowspan="2">
|
||||||
Oppai Baka<br/>
|
Oppai Baka<br/>
|
||||||
Mainichi Shabutte Ii Desu ka?<br/>
|
Mainichi Shabutte Ii Desu ka?<br/>
|
||||||
|
Senpai - Oppai - Kako ni Modori Pai<br/>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
<tr><td>*.gr</td><td>-</td><td>No</td></tr>
|
<tr><td>*.gr</td><td>-</td><td>No</td></tr>
|
||||||
<tr class="odd"><td>*.dat</td><td><tt>SPack</tt></td><td>No</td><td>Goku-Fero</td><td>Inchuu Reiki Elenova</tr>
|
<tr class="odd"><td>*.dat</td><td><tt>SPack</tt></td><td>No</td><td>Goku-Fero</td><td>Inchuu Reiki Elenova</tr>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user