Skip to content

GU 16.9 - No Trade Removable - #5

Merged
AconiteX merged 1 commit into
SWG-Source:masterfrom
Geit:gu-16.9/no-trade-removable
Nov 25, 2020
Merged

GU 16.9 - No Trade Removable#5
AconiteX merged 1 commit into
SWG-Source:masterfrom
Geit:gu-16.9/no-trade-removable

Conversation

@Geit

@Geit Geit commented Sep 21, 2020

Copy link
Copy Markdown
Contributor

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.

@AconiteX
AconiteX merged commit 4a73df8 into SWG-Source:master Nov 25, 2020
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants