mirror of
https://github.com/crskycode/GARbro.git
synced 2024-12-25 12:24:12 +08:00
support WARC archives version 1.30
This commit is contained in:
parent
598b50750b
commit
fc411624df
@ -75,7 +75,7 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
return null;
|
return null;
|
||||||
int version = file.View.ReadByte (7) - 0x30;
|
int version = file.View.ReadByte (7) - 0x30;
|
||||||
version = 100 + version * 10;
|
version = 100 + version * 10;
|
||||||
if (170 != version)
|
if (170 != version && 130 != version)
|
||||||
throw new NotSupportedException ("Not supported WARC version");
|
throw new NotSupportedException ("Not supported WARC version");
|
||||||
uint index_offset = 0xf182ad82u ^ file.View.ReadUInt32 (8);
|
uint index_offset = 0xf182ad82u ^ file.View.ReadUInt32 (8);
|
||||||
if (index_offset >= file.MaxOffset)
|
if (index_offset >= file.MaxOffset)
|
||||||
@ -105,7 +105,7 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var unpacked = new byte[max_index_len];
|
var unpacked = new byte[max_index_len];
|
||||||
index_length = UnpackRNG (enc_index, unpacked);
|
index_length = UnpackRNG (enc_index, 0, index_length, unpacked);
|
||||||
if (0 == index_length)
|
if (0 == index_length)
|
||||||
return null;
|
return null;
|
||||||
index = new MemoryStream (unpacked, 0, (int)index_length);
|
index = new MemoryStream (unpacked, 0, (int)index_length);
|
||||||
@ -173,7 +173,7 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
unpack = UnpackYPK;
|
unpack = UnpackYPK;
|
||||||
break;
|
break;
|
||||||
case 0x5a4c59: // 'YLZ'
|
case 0x5a4c59: // 'YLZ'
|
||||||
unpack = UnpackYPK;
|
unpack = UnpackYLZ;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (null != unpack)
|
if (null != unpack)
|
||||||
@ -262,11 +262,11 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
decoder.Unpack();
|
decoder.Unpack();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint UnpackRNG (byte[] input, byte[] output)
|
uint UnpackRNG (byte[] input, int in_start, uint input_size, byte[] output)
|
||||||
{
|
{
|
||||||
var coder = new Kogado.CRangeCoder();
|
var coder = new Kogado.CRangeCoder();
|
||||||
coder.InitQSModel (257, 12, 2000, null, false);
|
coder.InitQSModel (257, 12, 2000, null, false);
|
||||||
return coder.Decode (output, 0, (uint)output.Length, input, 1, (uint)input.Length-1);
|
return coder.Decode (output, 0, (uint)output.Length, input, (uint)in_start, input_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ResourceOptions GetDefaultOptions ()
|
public override ResourceOptions GetDefaultOptions ()
|
||||||
@ -310,6 +310,7 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
|
|
||||||
bool GetCtlBit ()
|
bool GetCtlBit ()
|
||||||
{
|
{
|
||||||
|
m_mask >>= 1;
|
||||||
if (0 == m_mask)
|
if (0 == m_mask)
|
||||||
{
|
{
|
||||||
m_ctl = LittleEndian.ToUInt32 (m_input, m_src);
|
m_ctl = LittleEndian.ToUInt32 (m_input, m_src);
|
||||||
@ -317,7 +318,6 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
m_mask = 0x80000000;
|
m_mask = 0x80000000;
|
||||||
}
|
}
|
||||||
bool bit = 0 != (m_ctl & m_mask);
|
bool bit = 0 != (m_ctl & m_mask);
|
||||||
m_mask >>= 1;
|
|
||||||
return bit;
|
return bit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1208,7 +1208,7 @@ namespace GameRes.Formats.ShiinaRio
|
|||||||
|
|
||||||
public static EncryptionScheme[] KnownSchemes = new EncryptionScheme[]
|
public static EncryptionScheme[] KnownSchemes = new EncryptionScheme[]
|
||||||
{
|
{
|
||||||
EncryptionScheme.Create (2360, "ShiinaRio v2.3x"),
|
EncryptionScheme.Create (2360, "ShiinaRio v2.36 and older"),
|
||||||
EncryptionScheme.Create (2480, "Bloody Rondo", "BLOODY†RONDO",
|
EncryptionScheme.Create (2480, "Bloody Rondo", "BLOODY†RONDO",
|
||||||
new uint[] { 0xFBFBF8F6, 0xFBE6EDF0, 0xFBF0FA, 0, 0 }),
|
new uint[] { 0xFBFBF8F6, 0xFBE6EDF0, 0xFBF0FA, 0, 0 }),
|
||||||
EncryptionScheme.Create (2450, "Chuuchuu Nurse", "ちゅうちゅうナース",
|
EncryptionScheme.Create (2450, "Chuuchuu Nurse", "ちゅうちゅうナース",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user