-- Verified zone names. Keys are the upper 32 bits of murmur64(zone_name), -- cross-checked against the EXO-55 capture of 2026-09-23 (8/8 matched). return (function() local Z={} Z.names={ ['ca47a7a9']={id='cockpit_front_left', label='COCKPIT FL', zh='驾驶舱左前'}, ['2739dfac']={id='cockpit_front_right',label='COCKPIT FR', zh='驾驶舱右前'}, ['e1b844f5']={id='cockpit_rear', label='COCKPIT REAR',zh='驾驶舱后部'}, ['668f6a68']={id='hips', label='HIPS', zh='髋部'}, ['64a3fa1d']={id='leg_left', label='LEG L', zh='左腿'}, ['87b05ff4']={id='leg_right', label='LEG R', zh='右腿'}, ['657ffa09']={id='light_left_front', label='LIGHT L', zh='左前灯', minor=true, hidden=true}, ['2be9516e']={id='light_right_front', label='LIGHT R', zh='右前灯', minor=true, hidden=true}, } -- Display order: cockpit, hips, legs, lights. Z.order={'cockpit_front_left','cockpit_front_right','cockpit_rear','hips','leg_left','leg_right'} -- Only EXO-55 was captured and verified. Other exosuits are listed so the -- reader can recognise them, but are shown only when every zone hash is known. -- All four exosuits share the same zone names (wiki anatomy: 2 cockpit, rear -- cockpit, hips, 2 legs, 2 lights). A model is only drawn when EVERY zone hash -- read from its live config is in Z.names; otherwise the reader reports -- UNVERIFIED with the unknown hashes and nothing is shown. Z.models={ ['35dbf54f016f3624']={name='EXO-55 BREACHER',code='EXO-55',cn='突破',verified=true,arm_count=2,arms={['65489809a8181b96']='combat_walker_shield',['df51fe8d62f294be']='combat_walker_shotgun'},arm_labels={L='护盾臂',R='霰弹枪臂'}}, ['79e4b3d2da5e45e3']={name='EXO-45 PATRIOT',code='EXO-45',cn='爱国者',verified=false,arm_count=2,arms={['824b7e0c4c879eb5']='missile',['08f6089289c83d22']='gatling'},arm_labels={L='火箭臂',R='机枪臂'}}, ['c2d449ecf7facab1']={name='EXO-49 EMANCIPATOR',code='EXO-49',cn='解放者',verified=false,arm_count=2,arms={['e5f64dcc3bfe9dd1']='autocannon_l',['ff9878576a4c543b']='autocannon_r'},arm_labels={L='左机炮',R='右机炮'}}, ['7b2326f6fd9c8069']={name='EXO-51 LUMBERER',code='EXO-51',cn='伐木者',verified=false,arm_count=2,arms={['0736bee2d6328726']='flamethrower',['17c5d12d8d5dee2c']='at_cannon'},arm_labels={L='喷火臂',R='反坦克炮'}}, } -- Arm side by resource (wiki.gg: Patriot rockets L / gatling R; Lumberer -- flamethrower L / AT cannon R; EXO-55 shield L confirmed by the user in game). -- df51fe8d62f294be: seen in game 2026-09-23 only next to EXO-55 (mech entity +2, -- shield +1); on probation until its maximum is confirmed arm-sized. Z.arm_probation={['df51fe8d62f294be']=true} -- Health owners that spawn next to every exosuit and are NOT arms. Z.not_arm={['75be82ed8592a6b3']=true,['8365609b35ef6672']=true} Z.side_by_resource={['df51fe8d62f294be']='R',['65489809a8181b96']='L',['824b7e0c4c879eb5']='L',['08f6089289c83d22']='R', ['e5f64dcc3bfe9dd1']='L',['ff9878576a4c543b']='R',['0736bee2d6328726']='L',['17c5d12d8d5dee2c']='R'} -- Arm side: resource-defined side first, then zone-name hashes; else unknown. Z.side_hash={['1880288e']='L',['158bff2a']='L',['edcc9243']='L',['6da43ea1']='L', ['b6f2baf5']='R',['367c6a96']='R',['b5801bf7']='R',['5f679fc8']='R'} function Z.arm_side(resource,zones) if Z.side_by_resource[resource] then return Z.side_by_resource[resource] end for _,z in ipairs(zones or {}) do if Z.side_hash[z.hash] then return Z.side_hash[z.hash] end end return nil end return Z end)()