The recovered system: fire channels = LBE4ControlsManager buttonGroups (0x40/0x45/0x46/0x47); default groups = the per-mech type-6 controls-map resource in BTL4.RES, installed by the T0 CreateStreamedMappings the port already called -- it needed only the TriggerState attribute (id 0x13 PINNED to the binary value; fireImpulse@0x31C is the binary's TriggerState) and an input feed. Keyboard/harness now push press/release edges into the button groups; the gBT*Trigger bypasses, per-type keyboard split and 1,0 pulse hack are retired -- weapons sharing a button fire TOGETHER (madcat Trigger = 4 weapons). Myomers @4b9550/@4b95b8 misattribution corrected (they are MechWeapon ConfigureMappables/ChooseButton). Verified 2-node: kill through the authentic chain (12 hits vs ~36 pre-groups). Config-mode session (regrouping UI) = the remaining stage, KB-scoped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
22 lines
932 B
Python
22 lines
932 B
Python
import struct
|
|
d=open("content/VIDEO/MAT/BLXSKIN.BMF","rb").read()
|
|
TAGS={0x2008:"NAME",0x11:"TEXTURE_MAP",0x21:"MAT_TEXTURE",0x18:"BITSLICE",0x28:"RAMP_REF",0x20:"MATERIAL",
|
|
0x30:"RAMP",0x24:"DIFFUSE",0x26:"EMISSIVE",0x23:"AMBIENT",0x2037:"SV_SPECIAL",0x2030:"SV_MATERIAL"}
|
|
CONT={0x20,0x30,0x10}
|
|
def parse(p,end,depth=0):
|
|
while p+3<=end:
|
|
tw=struct.unpack_from("<H",d,p)[0]; p+=2
|
|
cid=tw&0x2fff; lw=4 if(tw&0x8000)else(2 if(tw&0x4000)else 1)
|
|
if p+lw>end:return
|
|
ln=d[p] if lw==1 else (struct.unpack_from("<H",d,p)[0] if lw==2 else struct.unpack_from("<I",d,p)[0])
|
|
p+=lw
|
|
if p+ln>end:return
|
|
nm=TAGS.get(cid,hex(cid))
|
|
body=d[p:p+ln]
|
|
txt=''.join(chr(b) if 32<=b<127 else '.' for b in body[:40])
|
|
print(" "*depth+f"{nm}({hex(cid)}) len={ln} {txt!r}")
|
|
if cid in CONT: parse(p,p+ln,depth+1)
|
|
p+=ln
|
|
if cid==0x0005:break
|
|
parse(8,len(d))
|