rcpd/offline/shared.py
2024-06-17 19:12:08 +10:00

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