GU 16.9 - No Trade Removable - #5
Merged
Merged
Conversation
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
May 20, 2026
…ills with identity/zero defaults before first draw (Iter-18 must-haves SWG-Source#2 + SWG-Source#3 + SWG-Source#5; Task 3a) Plan 11-08 Task 3a. Mitigates the Iter-18 BSOD CODEX sixth hypothesis: Map(D3D11_MAP_WRITE_DISCARD) does NOT zero unwritten bytes per Microsoft documentation; unwritten bytes contain ARBITRARY GARBAGE from prior frames. Without primeDefaults, the first draw call's shader reads uninitialized cbuffer memory in slot 0's c8..c71 region (~1024 bytes beyond the 128-byte WVP+World write that Iter-18 attempted) PLUS every byte in slots 1/2/3 PLUS every byte in PS slots 0..3. That's exactly the symptom that took the OS down via NaN cascade -> degenerate rasterization -> GPU TDR escalation -> BSOD. Direct3d11_ConstantBuffer.h: - new `static void primeDefaults()` declaration with header comment explaining FULL-FILL discipline + Iter-18 root-cause-item-SWG-Source#6 cross-reference. Direct3d11_ConstantBuffer.cpp: - #include Direct3d11_LightManager.h for the Direct3d11_LightingCB struct identity reference (slot 3 ownership comment). - primeDefaults() implementation: - Stack `unsigned char zero[kMaxCBufferBytes]` = 1152 bytes of zeros, reused across slots that don't have a dedicated struct shape. - VS slot 0: full Direct3d11_VertexSlot0CB (the struct landed in Iter-2.5) -- `{}-init` zeroes every field, then two XMStoreFloat4x4 calls set objectWorldCameraProjectionMatrix + objectWorldMatrix to identity. lightData[0].x = 0 is implicit via {}-init (numLights = 0 guard against shader-side for-loop bombs reading uninitialized counter). - VS slots 1, 2: full 1152-byte zero-fill. Belt-and-suspenders against any engine path that binds them between Iter-3a and the Task 3b setter rewrite. - VS slot 3: full 1152-byte zero-fill. Rule-1 deviation from the plan -- the plan assumed Direct3d11_LightManager::install primed slot 3, but verification via source read (LightManager.cpp:42-48) confirms LightManager::install is intentionally empty; slot 3 is unprimed until setLights() runs (AFTER first draw). primeDefaults takes ownership of priming slot 3 to close the same garbage-read gap covered for other slots. When setLights() fires later, its updateVS(kLightingCBSlot, &cb, sizeof(cb)) cleanly overwrites the zero-fill with real Direct3d11_LightingCB data. Zero impact on Plan 11-06 LightManager behavior. - PS slots 0..3: full 1152-byte zero-fill each. PS-side reads of zero produce defined-dark visuals, not NaN. - DEBUG_REPORT_LOG_PRINT at end confirms the prime fired (visible in stage/d3d11-debug.log via the Iter-1.7 file sink and in OutputDebugString stream). - Wired primeDefaults() call into install() immediately after the per-slot createOneSlot loop + before the existing install log line. No behavioral change to per-frame logic this iteration -- primeDefaults is purely defensive. The setter rewrite + WVP composition + per-draw flush+bind sequencing lands in Task 3b. Smoke gate for Iter-3a is: process launches + dark-blue clear visible + zero ERROR-severity D3D11 messages + >= 30 sec without crash. Matches Iter-1 baseline (plus Iter-1.8's BC2 fix dropping the prior 96 BC2 errors to 0). Verification: - MSBuild Direct3d11 EXIT=0; gl11_d.dll auto-restages clean. - D-13/D-04a/D-05 invariants unchanged; STUB count unchanged at 27. - 10 Direct3d11_VertexSlot0CB static_asserts (Iter-2.5) still pass at compile time. - MSVC /W4 clean (pre-existing C4459 DirectXMathVector carry-forward only). Awaiting Kenny smoke: Iter-3a + Iter-1.8 combined effect. Expected: stage/d3d11-debug.log carries the new "primeDefaults: VS slot 0 = identity-matrix..." line near the session-start header, ZERO BC2 errors (Iter-1.8 closure), no new cbuffer-write errors, Plan 11-07 milestone still preserved.
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
May 30, 2026
Plan 17-02 (D-09 non-fatal PSRC recompile lane) merged via 4d2973b. Code deliverables done — 0 unresolved externals, 116 PS input signatures dumped, 26 cbuffer layouts reflected (all SwgVertexConstants bindPoint=0 totalSize=400 vars=9), 0 PSRC compile failures. CHAR-01 visual evidence: character renders flat-black silhouette under D3D11. Root cause traced to systemic VS↔PS interpolator-schema mismatch (id=343 fires 565K times per session: 188K COLOR + 376K TEXCOORD). VS programs only output [TEXCOORD0 r=o1 mask=0x3] (single interpolator, inherited from pre-recompile-lane fallback-magenta-PS world); HLSL- compiled PS programs expect COLOR0+TEXCOORD0+TEXCOORD1+ at registers 0-4. PS reads garbage / zero for missing semantics, modulates against COLOR0=0, output goes flat black. Plan 17-02's R3-02b SR-2 dual-route diagnostic worked as designed — surfaced exactly this gap. Parked findings (do NOT block Phase 17 close): - Task SWG-Source#5: gl05_d.dll rebuild texture-binding regression (D3D9 reference path unavailable on Phase-17+ binaries; pre-17-01 backup works; rebuild config drift suspected from 80 KB size delta) - Task SWG-Source#6: VS recompile lane to match HLSL PS interpolator schema (id=343 root cause; cross-AI consult prompt at .planning/research/CONSULT-vs-ps-interpolator-mismatch-codex.in) Phase 17 closes as 'beachhead established with two parked gaps' once Plan 17-03 (cbuffer wiring) finishes. Visual parity gated on Phase 17.X or Phase 18 addressing SWG-Source#5 + SWG-Source#6. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
May 30, 2026
…e cap + cross-AI consult
Plan 17-03 host-stage boot verification + investigation into a 3-of-3
deterministic FATAL crash that masked itself when diagnostic instrumentation
was added (Heisenbug). Plan 17-03 is CODE-COMPLETE and VERIFIED running on
real char-select shaders.
Boot evidence (CLOSEOUT.md):
- 4,407 apply() invocations across all char-select assets (sul_eye,
sul_m_head, sul_m_body, scout_blaster, shoes, vest, shirt, pants,
necklace, armor_marauder_belt — every char-select shader)
- All reflected layouts: SwgVertexConstants @ b0, totalSize=400,
varsCount=9 (consistent with Plan 17-02's PS-cbuffer census)
- id=343 × 24,408 (char-select only) — task SWG-Source#6 (VS↔PS register-position
mismatch) confirmed dominant; visual outcome still flat-black character
- R3-03g flush log: sul_eye + sul_m_head both show
wroteDiffuse=0 wroteSpecular=0 wroteEmissive=0 despite materialValid=1
and properly-resolved source data (diffuse=(1,1,1,1) etc) — task SWG-Source#7
(writeVarByName lookups for "materialDiffuse" etc don't exist in
SwgVertexConstants; the cbuffer uses material[N] array indexing)
confirmed
Initial crash (now fixed by defensive cap, plus possibly was elsewhere):
- First 3 host-stage boots of the merged Plan 17-03 binaries produced
identical FATAL: MemoryManager refused ~1.05 GB allocation at PPEM
init's setStaticShader(*ms_copyShader) → gl11_d.dll
- Inserted synchronous fopen/fwrite/fclose trace BEFORE apply()'s
std::vector<unsigned char> staging(layout.TotalSize) — the only
unbounded alloc in Plan 17-03's diff
- Boot with trace did NOT reproduce the crash (Heisenbug — code layout
/ timing sensitive); 4,407 trace lines all show clean TotalSize=400
- Conclusion: original FATAL was NOT in apply()'s staging allocation;
bug is elsewhere in the setStaticShader call chain (uninitialized
memory read, or timing-dependent race) that this build's code layout
doesn't expose
- Trace evidence preserved at .planning/phases/17-.../evidence/
Defensive cap (Direct3d11_StaticShaderData.cpp):
- Trace insertion removed (4,407 fopen/write/close per boot was a perf
cost)
- Replaced with cheap upper-bound: if layout.TotalSize > 64 KiB (160×
SwgVertexConstants's 400 B), skip + DEBUG_WARNING with shader name
and layout name — belt-and-braces against any future reflected layout
returning a corrupt size, regardless of root cause
Cross-AI consult on task SWG-Source#6 (VS↔PS pair signature validation):
- Codex + Cursor both fired in background during Wave 3, decoded from
UTF-16, synthesized at .planning/research/CONSULT-...-SYNTHESIS.md
- Convergence: diagnosis confirmed (D3D11 register-position strict;
semantic-only matching was a D3D9 assumption that no longer holds);
Approach SWG-Source#1 (VS recompile lane mirroring PS lane) ranked primary;
Approach SWG-Source#5 (per-pass interpolator ABI normalization) as fallback;
Approaches 2/3/4 rejected
- Cursor's key correction: VS recompile lane already exists from Phase
11 (Direct3d11_VertexShaderData.cpp + buildHlslForVSOutputs() from
Iter-3 fixed a related id=343 × 65K case for static Variant T).
Real fix is pair-validate at PS-bind time → use selectFallbackPSForVS
when asset PS is incompatible with bound VS
- Task SWG-Source#6 description revised accordingly; Plan 17-04 spec scoped for
that approach
D3D9 no-textures regression evidence (task SWG-Source#5):
- Screenshot from earlier in the session preserved at
docs/research/phase17-char-select/d3d9-no-textures-regression-mos-eisley.png
- Mos Eisley with flat-color materials (no textures) — pre-existing-
gl05-rebuild-config regression confirmed by A/B (pre-17-01 backup
boots clean with textures)
Plan 17-03 stays merged. Phase 17 close-out can proceed.
Pre-Plan-17-04 work: spec the VS↔PS pair-validation plan.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
May 30, 2026
…7 scope expanded
Two-task plan that lands the two technical fixes blocking CHAR-01/02/03
visual parity, both surfaced by Plans 17-01/02/03 boot evidence:
Task 1 — VS↔PS signature pair validation at asset-PS bind time
(Direct3d11_StateCache.cpp + PixelShaderProgramData). When the
bound VS's reflected output signature is incompatible with the
asset PS's cached input signature, fall through to the existing
selectFallbackPSForVS path (Phase 11 Iter-3's buildHlslForVSOutputs
builds a PS matching the VS register layout). Eliminates id=343
× 24K per char-select boot.
Task 2 — writeVarByName recognizes SwgVertexConstants material[N]
array schema (Direct3d11_StaticShaderData.cpp). Plan 17-03's
R3-03g flush log confirmed wroteDiffuse/Specular/Emissive=0/0/0
because hardcoded "materialDiffuse" etc names don't exist in
SwgVertexConstants's 9 reflected vars (material[N] array per
vertex_shader_constants.inc). Extend lookups to discover names
from D3DReflect output AND read vertex_shader_constants.inc
inline for ground truth. Keep original hardcoded names as
fallback so a future shader using simple names still works.
Single human-verify checkpoint at end (Task 3) — Kenny boots once,
expected outcome is the FIRST textured character at D3D11 char-select.
Cross-AI consult on Task 1 already complete (Codex + Cursor convergence
at .planning/research/CONSULT-vs-ps-interpolator-mismatch-SYNTHESIS.md):
diagnosis confirmed, Approach SWG-Source#1 ranked primary, Approach SWG-Source#5 as fallback,
Cursor caught my original task-SWG-Source#6 framing was wrong (VS recompile lane
already exists from Phase 11; real fix is bind-time pair validation).
Phase 17 scope: 3 plans → 4 plans. ROADMAP.md updated, STATE.md re-opens
phase status. Plan 17-04 is the first plan to enable rather than instrument.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
May 30, 2026
…UCTURE COMPLETE Plan 17-04 (Visual Parity Activation) — merged 9e5cfe2 + spec-name refinement 04ef669. Phase 17 ships SUBSTANTIAL infrastructure: - Plan 17-01: shared/clientGraphics PSRC source retention + flag-gated census (22 HLSL + 10 asm unique PS programs identified at char-select) - Plan 17-02: D-09 non-fatal HLSL PSRC recompile lane + D3DReflect-once cbuffer+input-signature caching (116 PS signatures + 26 cbuffer layouts captured; 0 fatals) - Plan 17-03: per-pass material+textureFactor source-data resolution (SR-1) + reflection-driven offset-aware cbuffer upload (Plan 17-02 layouts consumed; 4407 apply() invocations verified clean) - Plan 17-04: VS↔PS signature pair validation (id=343: 24,408 → 9, a 99.96% reduction) + cbuffer schema-aware writeVarByName with materialSpecularColor / textureFactor / textureFactor2 landing correctly (R3-03g flush log evidence: sul_eye specular=(2,2,2,1) landed, sul_m_head specular=(0.5,0.5,0.5,1) landed) Visual parity is NOT achieved tonight — character renders flat-black at D3D11 char-select because engine global state (dot3LightDirection / DiffuseColor / SpecularColor + bloom flags + alphaFadeOpacity) is NOT fed into the SwgVertexConstants packedRegister0..4 slots at draw time. Without light data: result.rgb = anything × 0 × anything = 0 = black, regardless of how correct the cbuffer-write infrastructure is. Phase 17 close-out parked findings (tracked for Phase 18 or 17.X cycles): - SWG-Source#5: gl05_d.dll rebuild texture-binding regression (D3D9 reference path unavailable; pre-17-01 backup works only with pre-17-01 SwgClient.exe due to ABI cascade) - Engine-global-state push into SwgVertexConstants packedRegister0..4 (the actual visual-parity blocker — confirmed by PSRC source inspection at .planning/phases/17-.../evidence/plan-17-04x-psrc-source-dump.txt) Cross-AI consult on Plan 17-04 Task 1 was decisive and accurate (both Codex + Cursor converged on bind-time pair validation as the canonical approach; Cursor's correction that VS recompile already existed prevented a wrong-headed Plan 17-04 design). Evidence at .planning/research/CONSULT-vs-ps-interpolator-mismatch-SYNTHESIS.md. Phase 18 (next on roadmap: Load-Screen Half-Texel Seam) is independent and ready. The packedRegister0..4 feeding work could become a Phase 17.1 gap-closure OR a new phase inserted before Phase 18, depending on how v2.2 scope evolves. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
May 30, 2026
CONVERGENCE NOT ACHIEVED -> CONVERGENCE: revise the 3 gap-closure plans against Round 4 cross-AI review (Codex + Cursor). All 6 HIGH concerns closed; 7 MEDIUMs folded in. HIGH closures: - HIGH-1 writeVarByName sub-channels: 17-06b adds writeVarFloat4AtOffset helper before candidate-chain extension (preserves whole-name lambda). - HIGH-2 17-07 files_modified honesty: StateCache.cpp + PSData.h + .cpp now in frontmatter upfront; STAGE-1 BLOCKING full-plugin rebuild per shared-header ABI cascade trap (project memory). - HIGH-3 GAP-2 visual-vs-instrumentation framing: 17-06b objective scopes closure as INSTRUMENTATION COMPLETENESS, not char-select visual delivery; 17-05 Task 5 attributes per-CHAR-0x verdict to delivering lane. - HIGH-4 PSRC parameter-list (not struct): 17-07 primary helper now rewritePsMainParameterListForVSOutputs; struct-bound path is rare-asset fallback; Task 0 spike de-risks parser on one real PSRC. - HIGH-5 Path A dead end: split 17-06 -> 17-06a (discovery, defaults to Path B) + 17-06b (mapping/write consuming 17-06a evidence). Old 17-06-PLAN.md removed. - HIGH-6 isCompatibleWithVS per-VS reflection: relaxed acceptance to 'unchanged for native ctor compile; rewritten PS validated via per-VS reflected inputs before bind'; new overload + per-VS cache. MEDIUMs folded: depends_on chain uses 17-05-task3 parking point (no cycle); 17-07 cache key salted with VS-output-signature-hash + bumps D3D11_REWRITE_VERSION 20->21; new asset-PS-bound= attribution log distinct from COMPATIBLE-vs= validator log; 17-05 evidence/README.md pins slot/camera/UI/resolution; Task 2/4 grep set symmetric; char_default_d3d11_0003.png canonical-alias for ROADMAP success SWG-Source#5. Propagated corrections (per --reviews replan memory rule): - 17-VERIFICATION.md GAP-2/GAP-3 scope-of-fix narratives rewritten - 17-PATTERNS.md Round-4 amendment block appended (3 corrections) - 17-CONTEXT.md, 17-RESEARCH.md, 17-VALIDATION.md: no changes required (grep confirmed no drift) Plan checker: PASS (0 BLOCKERS, 2 housekeeping WARNINGS — open-questions markers + 17-07 Task 1 scope concentration). All 6 HIGH closures independently verified via plan-text grep, not planner self-report. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jun 14, 2026
… node_errors) Surgical in-place revision of the four Phase-28 plans + CONTEXT to close the Codex+Cursor consensus findings (REVIEWS.md): - SWG-Source#1 28-03: rewrite merge loop to single descending pass; claimed/tombstoned guard BEFORE the tree-length-0 branch; delete claimed.pop (the un-claim bug) - SWG-Source#2 28-04: add test_searchtree_lower_priority_length0_does_not_tombstone_winner - SWG-Source#3 28-04: mandatory build_cot2000() + read_cot2000_entries round-trip (drop the detector-only hedge); SC#1 met literally, no ROADMAP wording change - SWG-Source#4 28-04: strengthen integration test (assert priority-10 winner_node.kind== 'path' when override non-empty); real-archive tombstone proof delegated to the synthetic suite — SC#3 tombstone clause narrowed to synthetic, override on real - SWG-Source#5 28-02: verified vendored dataclasses already expose snake_case length + compressed_length; verbatim+two-edits stands; +extended-stride 8-byte pad note - SWG-Source#6 28-02/03/04: soften 02 bounded-reads wording; add merge-boundary bounds preflight (T-28-03-04) + regression test - SWG-Source#7 28-03/04: deterministic sorted os.walk, followlinks=False, reparse/junction skip; +missing/empty searchPath dir tests - SWG-Source#8 28-03/04: add VirtualTree.node_errors diagnostics field + assertions - SWG-Source#9 28-CONTEXT: correct blanket length-0-tombstone line to per-node-type nuance - LOW: 28-01 pin .python-version to 3.11 floor; 28-03 scanner _NN_/TOCTreePath engine-role notes Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jun 14, 2026
…st-hit-wins merge - fix_up_file_name VERBATIM engine port (leading-.. only; keeps interior .. — review SWG-Source#3) - safe_virtual_key hardening wrapper rejects interior-../drive/UNC/empty (threat T-28-03-01) - single descending pass first-hit-wins; guard precedes tree-length-0 branch (review SWG-Source#1, no claimed.pop) - PER-NODE-TYPE tombstone: tree length-0 = global remove; toc length-0/offset-0 = skip-only - shadowed = later REAL copies only, excludes tombstones/absent (review SWG-Source#4) - eager deterministic searchPath os.walk with reparse-dir prune before descent (Open-Q1, review SWG-Source#5/SWG-Source#7) - .tre AND .toc header bounds preflight + count*stride cap (review SWG-Source#6/#2a, threat T-28-03-04) - node_errors diagnostics field on VirtualTree (review SWG-Source#8); documented approximation boundary (review SWG-Source#7) - re-export fix_up_file_name/safe_virtual_key/build_virtual_tree/MergedEntry/VirtualTree from __init__
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jun 17, 2026
- get/put(std::map) replace raw size_t numKeys with uint32_t so it binds the existing 4-byte unsigned-int overload on both x86 and LLP64 x64 (a raw size_t is 8 bytes on x64 -> overload-resolution FAILURE, a compile error not a silent wire widen; review SWG-Source#5) - put() asserts source.size() <= UINT32_MAX before the narrowing cast (assert is the archive lib house guard; DEBUG_FATAL sits above this layer) - #include <cassert>/<cstdint>; wire format byte-identical to the shipped 32-bit server; SAFE paths (vector/set/deque/IFF/int32) byte-unchanged - exercised by a scratch-only archive-map-instantiation.cpp (gitignored) that round-trips std::map<int,int> -> compiles x64-clean in the harness (review SWG-Source#5)
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jun 17, 2026
…plan 06 (Task 3) - bits03 backstop sweep (61 TUs) reports 0 serialization overload-resolution (C2664/C2665) survivors in 31-05's files; the Archive std::map fix compiles x64-clean and is exercised by archive-map-instantiation.cpp (review SWG-Source#5) - RESIDUAL-31-05: ByteStream.cpp:347 reinterpret_cast<unsigned int>(Data*) C4311 (BITS-02 ptr-truncation in the freed-memory-poison assert; NON-owned by 31-05) classified (a) in-scope MUST-FIX, handed to plan 06 - documents the D-07-excluded vector signed-int C4244 (did not surface in this sweep) so the gate executor does not mistake it for a survivor
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jun 17, 2026
…s + 3 up-front audits - Direct3d9_VertexShaderData.cpp: D3DXCompileShader -> D3DCompile via ABI-identical reinterpret-cast at the call boundary; flags = D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY ONLY (NO PACK_MATRIX_ROW_MAJOR -- review fix SWG-Source#4); applyToMainSource on m_compileText - Fix-A SEH guard RETAINED (D-04): compileVertexShaderFpGuarded now wraps D3DCompile (belt-and-suspenders until Wave-2/32-05 retires it) - include-cache rewrite-BEFORE-insert (Cursor C2): Include ctor applies applyToIncludeBuffer so REWRITTEN bytes are cached; 2nd #include returns rewritten text. Viewer/tool path rewrites on Open too - vs_1_1 branch handled (review fix SWG-Source#5 / D-06): promote to vs_2_0 + DEBUG_FATAL; D3DCompile dropped vs_1_1, never silently null a VS - DECLARE_textureCoordinateSets register omission BOTH places (review fix SWG-Source#7 / Cursor C5): engine macro strips ' : register(vN)'; all 9 stage/override/*.vsh DECLARE macros lose the post-preprocessor ': register(vN)' leak (incl. tfcl_4uv's 4x). InputVertex struct bindings retained (Rules B/C handle those pre-preprocessor) - Direct3d9_HlslRewrite.cpp: [Rule 3 fix] close the anonymous namespace before the public function defs (the WIP file left it open -> C2888/C1075; never built before this plan) - Task-2(G) THREE up-front audits (hlsl-constant-audit.txt): (i) PASS Rule D disabled (15 flat register(cN) + 8 native register(bN), no cbuffer/packoffset); (ii) v# input signature -- D3DCompile re-numbers v# but PRESERVES dcl usage semantics; D3D9 binds by D3DDECLUSAGE+UsageIndex (VertexDeclarationMap.cpp:128-223) NOT raw v#, so Cursor C1 'renders garbage' is REFUTED (pending render confirmation); (iii) PASS flag audit - 5-target Debug build clean (incl. gl11): 0 unresolved external symbol, 0 LNK1181, 0 error C - asm path (:567 D3DXAssembleShader) untouched (D-04); d3dx9.lib retained (D-05)
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jun 18, 2026
- tinyxml.vcxproj: StaticLibrary Debug|x64/Release|x64 over the 4 .cpp, imports x64-platform.props, TIXML_USE_STL (corrected from plan's TINYXML_USE_STL) - OutDir = src/compile/win32/tinyxml/x64/<cfg>/ (7-up depth, peer-verified not 5) - builds clean x64 -> tinyxmld_STL.lib (machine 8664) + tinyxmld.lib alias (post-build copy; both names SwgClient.vcxproj:103/:216 link -- reviews fix SWG-Source#5) - 33-x64-DLL-CHECKLIST.md: V14 provenance (size+SHA256+dumpbin x64) for every lifted DLL (binkw64/libxml2/pcre/jpeg62) + d3dcompiler_47 WoW64/Sysnative note - Miles mss64.dll deferred to Phase 35 (audio-degraded boot OK for X64-02) - X64-04 icu/discord-rpc satisfied-by-N/A: include/vendor/link checks all 0 - NOTE for Plan 04-T3: register tinyxml.vcxproj in swg.sln + x64 boot-path mapping
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Jul 20, 2026
…G-Toolkit change request SWG-Source#5) The last accessor of the model-D persist flow: the .ilf stores o2p, the gizmo drives o2w. getTransform_o2p() is inline + const Transform& -> shim mandatory (ABI RULE); layout byte-for-byte = camera::getTransformO2W (row-major 3x4, position col 3). Borrowed consumer-held Object*, null- checked; lifetime discipline per the v22 pick rows. Contract 145 -> 146. Gates: forced relink 0 unresolved, ord-82 export, 146==146, 45s smoke.
kennethlong
added a commit
to kennethlong/client-tools
that referenced
this pull request
Aug 15, 2026
…sumer x64 change request Answers asks SWG-Source#4 and SWG-Source#5 of the toolkit 2026-08-15 x64 CHANGE-REQUEST (the other four were satisfied by the x64 port itself; full answers in the PROVIDER-HANDBACK). 160 -> 162 names, both arches from the one source: client::advertisedArchBits -- extern "C" int __cdecl (void), the provider pointer width in bits (32/64), compile-time per-arch. The consumer arch assert: their export-absent fallback seeds x86 SWGEmu RVA literals and no legacy x64 client exists, so their x64 agent fails closed on a missing export -- and with this row asserts the table IS the x64 contract instead of inferring it from the PE header. object::setScale -- &Object::setScale via pmfToVoid (non-virtual, out-of-line, Object.h:228 / Object.cpp:2205; Vector is a 3-float POD by const&, the setPosition_w boundary shape). Closes the consumer D-09 gap their rva_table deliberately seeds nullptr for. Version 33 -> 34 per the name-add policy; the bump also serves as the dual-arch-contract signal the consumer requested (they treat version drift as a soft warning, so the x86 path is unaffected). Verified: 5-target Release both platforms, 0 unresolved externals; tools/hookpoints-probe on both staged exes: version=34 count=162 nulls=0 dups=0.
swgsais
added a commit
to Galaxies-Reborn/client-tools
that referenced
this pull request
Aug 19, 2026
…ults Merge pull request #3 from Galaxies-Reborn/toolkit-advertise
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary: Adds support for the "No Trade Removable" badge at the top right of the details pane on items.
See SWG-Source/dsrc#151 for full details on this change.
Warning: I haven't been able to test this locally, as I haven't got the client build working - so this PR is a massive assumption that it will work. Given this PR is not essential for the functionality of the rest of the changeset, I'd hold off on merging it until someone who can compile the client can test it.