28 lines
749 B
Python
28 lines
749 B
Python
import sys
|
|
|
|
if len(sys.argv) != 4:
|
|
print('Usage: %s {block-count} {content.bin} {out.gci}'%sys.argv[0], file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
blockCount = int(sys.argv[1])
|
|
contentPath = sys.argv[2]
|
|
outPath = sys.argv[3]
|
|
|
|
gameId = b'GMSJ01\xff\x00' # TODO other version
|
|
fileName = b'gct'
|
|
|
|
pad = lambda buf, size: buf+b'\x00'*(size-len(buf))
|
|
with open(contentPath, 'rb') as fr, open(outPath, 'wb') as fw:
|
|
content = fr.read()
|
|
bodySize = 0x2000*blockCount
|
|
assert len(content)<=bodySize, f'{contentPath} is too big: expect at most {bodySize} bytes, got {len(content)}'
|
|
fw.write(b''.join((
|
|
# header
|
|
gameId,
|
|
pad(fileName, 0x20),
|
|
b'\x00'*16,
|
|
blockCount.to_bytes(2, 'big'),
|
|
b'\xff'*6,
|
|
# body
|
|
pad(content, bodySize),
|
|
)))
|