utils: add script for inserting custom image into package3

This commit is contained in:
Michael Scire 2021-09-06 16:21:55 -07:00 committed by SciresM
parent 960161741d
commit 5e64460bb9
4 changed files with 45 additions and 1 deletions

View file

@ -164,7 +164,7 @@ def main(argc, argv):
mesosphere = read_file(os.path.join(ams_dir, 'mesosphere/mesosphere%s.bin' % target)) mesosphere = read_file(os.path.join(ams_dir, 'mesosphere/mesosphere%s.bin' % target))
all_kips = get_kips(ams_dir) all_kips = get_kips(ams_dir)
tsec_keygen = read_file(os.path.join(ams_dir, 'fusee/program/tsec_keygen/tsec_keygen.bin')) tsec_keygen = read_file(os.path.join(ams_dir, 'fusee/program/tsec_keygen/tsec_keygen.bin'))
splash_bin = read_file(os.path.join(ams_dir, 'fusee/program/splash_screen/splash_screen.bin')) splash_bin = read_file(os.path.join(ams_dir, 'img/splash.bin'))
assert len(splash_bin) == 0x3C0000 assert len(splash_bin) == 0x3C0000
with open(os.path.join(ams_dir, 'fusee/package3%s' % target), 'wb') as f: with open(os.path.join(ams_dir, 'fusee/package3%s' % target), 'wb') as f:
# Write header # Write header

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 MiB

View file

@ -0,0 +1,44 @@
from PIL import Image
import sys, os
from struct import pack as pk
SPLASH_SCREEN_WIDTH = 1280
SPLASH_SCREEN_HEIGHT = 720
SPLASH_SCREEN_STRIDE = 768
def convert_image(image_fn):
splash = Image.open(image_fn, 'r')
w, h = splash.size
if w == 1280 and h == 720:
splash = splash.transpose(Image.ROTATE_90)
w, h = splash.size
assert w == 720
assert h == 1280
splash = splash.convert('RGBA')
splash_bin = b''
for row in range(SPLASH_SCREEN_WIDTH):
for col in range(SPLASH_SCREEN_HEIGHT):
r, g, b, a = splash.getpixel((col, row))
splash_bin += pk('<BBBB', b, g, r, a)
splash_bin += b'\x00' * ((SPLASH_SCREEN_STRIDE - SPLASH_SCREEN_HEIGHT) * 4)
return splash_bin
def main(argc, argv):
if argc != 3:
print('Usage: %s image package3' % argv[0])
return 1
with open(argv[2], 'rb') as f:
package3 = f.read()
assert package3[:4] == b'PK31'
assert len(package3) == 0x800000
splash_bin = convert_image(argv[1])
assert len(splash_bin) == 0x3C0000
with open(argv[2], 'wb') as f:
f.write(package3[:0x400000])
f.write(splash_bin)
f.write(package3[0x7C0000:])
return 0
if __name__ == '__main__':
sys.exit(main(len(sys.argv), sys.argv))