46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
|
# Helper script that generates stub implementation of all known nids + lookup tables
|
||
|
# for shadps4
|
||
|
|
||
|
import sys, os
|
||
|
import struct
|
||
|
#from hashlib import sha1
|
||
|
import hashlib
|
||
|
from base64 import b64encode as base64enc
|
||
|
from binascii import unhexlify as uhx
|
||
|
|
||
|
#ref https://github.com/SocraticBliss/ps4_name2nid_plugin
|
||
|
#ref derived from https://github.com/zecoxao/sce_symbols.git
|
||
|
|
||
|
# needs ps4_names.txt (see: https://github.com/zecoxao/sce_symbols.git for full list)
|
||
|
# generates "stubs.inl" to include in Core\PS4\Util
|
||
|
|
||
|
NEW_NIDS = {}
|
||
|
NAMES = 'ps4_names.txt'
|
||
|
|
||
|
def name2nid(name):
|
||
|
symbol = hashlib.sha1(name.encode() + uhx('518D64A635DED8C1E6B039B1C3E55230')).digest()
|
||
|
id = struct.unpack('<Q', symbol[:8])[0]
|
||
|
nid = base64enc(uhx('%016x' % id), b'+-').rstrip(b'=')
|
||
|
NEW_NIDS[nid]=name
|
||
|
|
||
|
def save_stubs(NIDS):
|
||
|
nidsSorted=sorted(NIDS.items(), key=lambda x: x[0])
|
||
|
|
||
|
nidsFile=open("aerolib.inl", "w")
|
||
|
nidsFile.writelines('// generated using ps4_names2stubs.py\n\n')
|
||
|
for nid, name in nidsSorted:
|
||
|
nidsFile.writelines('STUB("%s", %s)\n' % (str(nid,'utf-8'), name))
|
||
|
|
||
|
nidsFile.close()
|
||
|
|
||
|
|
||
|
|
||
|
f = open(NAMES,"r")
|
||
|
for line in f.readlines():
|
||
|
line = line.strip()
|
||
|
name2nid(line)
|
||
|
|
||
|
f.close()
|
||
|
|
||
|
save_stubs(NEW_NIDS)
|