Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import os, sys, subprocess, shutil
- # working directory for messing with big files
- curr_dir=os.path.realpath(os.path.dirname(__file__))
- # path of unself, make_self_npdrm, make_package_npdrm, and psn_package_npdrm.exe
- tools_dir=os.path.join(curr_dir, 'bin')
- def do(cmd):
- """ shorthand for running comands """
- #print cmd
- p=subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- return p.communicate()
- try:
- sfo=os.path.realpath(sys.argv[1])
- gamedir = os.path.realpath(os.path.dirname(sys.argv[1]))
- except IndexError:
- print "You need to specify the location of the PARAM.SFO file."
- sys.exit(1)
- # get gameid
- gameid='BRKN00000'
- with open(sfo, 'read') as f:
- gameid=f.read()[-24:-15]
- print "Files need to be copied from PS3_GAME to PS3 into /dev_hdd0/G%s (don't copy USRDIR/EBOOT.bin.)" % gameid[2:]
- # make a copy of important files for package
- os.mkdir(os.path.join(curr_dir, gameid+'-pkg'))
- os.mkdir(os.path.join(curr_dir, gameid+'-pkg', 'USRDIR'))
- shutil.copyfile(os.path.join(gamedir, 'ICON0.PNG'), os.path.join(curr_dir, gameid+'-pkg','ICON0.PNG'))
- # shutil.copyfile(os.path.join(gamedir, 'USRDIR','EBOOT.BIN'), os.path.join(curr_dir, gameid + '-EBOOT.BIN.orig'))
- try:
- shutil.copyfile(os.path.join(gamedir, 'PIC1.PNG'), os.path.join(curr_dir, gameid+'-pkg','PIC1.PNG'))
- except:
- pass
- # unself EBOOT
- do("%s %s %s" % (os.path.join(tools_dir,'unself'), os.path.join(gamedir, 'USRDIR', 'EBOOT.BIN'), 'eboot_out.elf'))
- # find & replace
- b=''
- with open('eboot_out.elf', 'read') as f:
- b=f.read()
- with open('eboot_out.elf', 'write') as f:
- b = b.replace('dev_bdvd', 'dev_hdd0').replace('PS3_GAME','G' + gameid[2:])
- f.write(b)
- with open(sfo, 'read') as f:
- b=f.read()
- with open(os.path.join(curr_dir, gameid+'-pkg','PARAM.SFO'), 'write') as f:
- b = b.replace('DG%c%cLibrary programs' %(0,0), 'HG%c%cLibrary programs' %(0,0))
- f.write(b)
- # re-self EBOOT
- do('%s eboot_out.elf %s UP0001-%s_00-0000111122223333' % (os.path.join(tools_dir,'make_self_npdrm'), os.path.join(curr_dir, gameid+'-pkg', 'USRDIR', 'EBOOT.BIN'), gameid))
- # make conf file for pkg
- with open(os.path.join(curr_dir,gameid +'.conf'), 'write') as f:
- f.write("""Content-ID = UP0001-%s_00-0000111122223333
- k_licensee = 0x00000000000000000000000000000000
- DRM_Type = Free
- Content_Type = Game_Exec
- PackageVersion = 01.00""" %(gameid))
- #TODO: this doesn't work! I use wine and psn_package_npdrm to do it.)
- #make pkg
- #do('%s %s %s' % (os.path.join(tools_dir,'make_package_npdrm'), os.path.join(curr_dir, gameid + '.conf'), os.path.join(curr_dir, gameid+'-pkg')))
- do('wine %s %s %s' % (os.path.join(tools_dir,'psn_package_npdrm.exe'), os.path.join(curr_dir, gameid + '.conf'), os.path.join(curr_dir, gameid+'-pkg')))
- # cleanup
- os.unlink('eboot_out.elf')
- os.unlink(os.path.join(curr_dir, gameid + '.conf'))
- shutil.rmtree(os.path.join(curr_dir, gameid+'-pkg'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement