39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
tracing=False
|
|
def trace(*args,**kwargs):
|
|
if tracing: print(*args,**kwargs)
|
|
|
|
def delimit(code,spacer=''):
|
|
if not spacer:
|
|
if len(code)==16: return code
|
|
if len(code)!=19: raise Exception('code length should be 19 for despacing, got',len(code),'from',code)
|
|
return code[0:4]+code[5:9]+code[10:14]+code[15:19]
|
|
if spacer:
|
|
if len(code)==19: return code
|
|
if len(code)!=16: raise Exception('code length should be 16 for spacing, got',len(code),'from',code)
|
|
return code[0:4]+spacer+code[4:8]+spacer+code[8:12]+spacer+code[12:16]
|
|
|
|
def scramble(code,unscramble=False):
|
|
n=int(code[0])
|
|
if unscramble: n=15-n # Because the 1st digit is left alone this needs to be +1
|
|
return code[0]+code[16-n:16]+code[1:16-n]
|
|
|
|
def combine(code,namehash=''):
|
|
if namehash: return code[0:2]+namehash[4:5]+code[2:6]+namehash[3:4]+code[6:8]+namehash[1:3]+code[8:11]+namehash[0:1]
|
|
charcode=code[0:2]+code[3:7]+code[8:10]+code[12:15]
|
|
namehash=code[15]+code[10:12]+code[7]+code[2]
|
|
return charcode,namehash
|
|
|
|
def fill0s(num,zeroes=0):
|
|
if not zeroes: return str(int(num))
|
|
n=str(num)
|
|
if len(n)>zeroes: raise Exception(f"can't pad {n} ({len(n)}) with {zeroes} 0s")
|
|
return '0'*(zeroes-len(n))+n
|
|
|
|
def muxhero(clas,trait,spec):
|
|
return clas+trait*12+spec*12*16 # It's actually stored backwards like this, spec is in the most significant bits. Whatever, it doesn't need to be reversable.
|
|
|
|
def muxmedals(key,moh=-1,pcc=-1,cob=-1,lsa=-1,rem=-1):
|
|
print(key,moh,pcc,cob,lsa,rem)
|
|
if moh!=-1: return key+moh*2+pcc*4+cob*8+lsa*16+rem*32
|
|
print(bool(key&1),bool(key&2),bool(key&4),bool(key&8),bool(key&16),key//32)
|
|
return bool(key&1),bool(key&2),bool(key&4),bool(key&8),bool(key&16),key//32 |