XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
"""Bounded FocusRing producer/primitive/material evidence; no game execution."""
import hashlib, importlib.util, json, struct
from pathlib import Path

spec=importlib.util.spec_from_file_location('audit',Path(__file__).with_name('Audit-GalaxyClientCompatibility.py'))
audit=importlib.util.module_from_spec(spec);spec.loader.exec_module(audit)
image=audit.Image(Path('artifacts/ship-model-reference/client-copy/EliteDangerous64.exe'))
if hashlib.sha256(image.raw).hexdigest()!='6891f70a021fa9f3a0e00458c284f48d1226e68ae7fc02ad48081aed47857e93':raise ValueError('Pinned ring source changed')
def f(at,count=1):return list(struct.unpack('<'+'f'*count,image.data(at,count*4)))
constants=dict(distanceMaximum=f(0x4E29750)[0],distanceMinimum=f(0x4E328C0)[0],widthScale=f(0x552F4E8)[0],
               uAxis=f(0x50CB0D0,3),vAxis=f(0x50CB0F0,3),colour=f(0x54C8330,4))
if constants['distanceMaximum']!=6 or constants['distanceMinimum']!=1 or abs(constants['widthScale']-.05)>1e-8 or \
   constants['uAxis']!=[1,0,0] or constants['vAxis']!=[0,0,1] or constants['colour']!=[1,1,1,0]:raise ValueError('Actual range constants changed')
for offset,target in [(0,0x3A1E740),(8,0x3A1E730)]:
    if struct.unpack('<Q',image.data(0x551F838+offset,8))[0]-image.base!=target:raise ValueError('Actual shared callback changed')
if image.data(0x4E2DE48+5*2,2)!=bytes([1,2]) or struct.unpack('<I',image.data(0x4E2DE78+5*4,4))[0]!=5:
    raise ValueError('Original primitive-count/topology mapping changed')
functions=[]
for at in [0x3A26BF0,0x3A441A0,0x3B33690,0x3C01F30,0x3C05790,0x3C16450,0x51BE30,0x5101A0]:
    span=image.function(at)
    if at==0x3C05790:
        length=0x44
        if image.data(at+length-1,1)!=b'\xc3':raise ValueError('Actual append leaf return changed')
    elif not span or span[0]!=at:raise ValueError('Exact ring body missing: '+hex(at))
    else:length=span[1]-at
    functions.append(dict(rva=hex(at),length=length,sha256=hashlib.sha256(image.data(at,length)).hexdigest()))
folder=Path('artifacts/galaxy-query-research/power-outer-sources')
materials=json.loads((folder/'material/original-materials.json').read_text())
material=next(m for m in materials['materials'] if m['name']=='focusring')
params={p['name']:p.get('floatValues',[p.get('integerValue')])[0] for p in material['parameters']}
for name,value in [('pQuadCount',16),('pNumSegments',200),('pRadialFeather',.8),('pSegmentFeather',.3),('pSegmentSolidRatio',.85)]:
    if abs(params[name]-value)>1e-7:raise ValueError('Original FocusRing parameter changed')
blend=json.loads((folder/'material-slots/original-blend-application.json').read_text())
state=next(m for m in blend['materials'] if m['material']=='focusring')
if not state['resolved'] or state['originalEnums']['rgbSource']!=1 or state['originalEnums']['rgbDestination']!=5 or state['originalEnums']['rgbOperation']!=0:
    raise ValueError('Compiled FocusRing blend state changed')
shader_hashes={}
for stage in ['vs','ps']:
    path=folder/f'effects/{stage}_GalaxyMapFocusRing_Forward_0_Win64_SM50.dxbc'
    shader_hashes[stage]=hashlib.sha256(path.read_bytes()).hexdigest()
ps=(folder/'effects/ps_GalaxyMapFocusRing_Forward_0_Win64_SM50.dxbc').read_bytes()
immediates={hex(at):dict(bits=hex(struct.unpack_from('<I',ps,at)[0]),value=struct.unpack_from('<f',ps,at)[0])
            for at in [0x400,0x408,0x42C,0x450,0x474,0x4D8,0x648]}
result=dict(gameProcessAccess=False,gameCalls=0,networkRequests=0,imageSha256=hashlib.sha256(image.raw).hexdigest(),functions=functions,
    path=['shared3A26BF0 -> callback551F838[0]/3A1E740 ->3C05790',
          '3A441A0 viewport+30 -> config108 ->3C01F30 ->FocusRing/GalaxyMapFocusRing',
          '3C16450 primitive32 ->51BE30(type5 multiplier1/add2) ->DrawInstanced34',
          '5101A0 mapped topology4E2DE78[5]=5 ->context+C0/IASetPrimitiveTopology'],
    recordStride=64,primitive='TriangleStrip',primitiveCount=32,vertexCount=34,quadCount=16,
    constants=constants,material=material,sourceBlend=state['originalEnums'],shaderSha256=shader_hashes,actualPsImmediates=immediates,
    exposure=dict(required=True,materialEnable=params['pEmissiveRescalingEnable'],materialType=params['pEmissiveRescalingType'],
        runtimeResolved=False,unknownMustRemainHidden=True,probeInput='explicit synthetic exposure texture with all channels8, type2 multiplier1/8 -> scalar1'),
    implemented='64B range annulus, actual strip count and source shader math with explicit known emissive input; source-linked original DXBC WARP comparison.',
    limits=['Additional extent object1C0/FocusBillboard is separate and not fabricated.',
            'Per-system64B influence links are separate and not replaced by jump lines.',
            'No runtime emissive rescaling value is inferred; source-unknown production range geometry is not drawn.'])
path=folder/'focus-ring/original-ring.json';path.parent.mkdir(parents=True,exist_ok=True);path.write_text(json.dumps(result,indent=2)+'\n',encoding='utf8')
print(json.dumps(dict(path=str(path),sourceBodies=len(functions),primitive=result['primitive'],vertices=34,constants=constants,exposure=result['exposure']),indent=2))