fix(drlg): 消除 pickVariant 45度斜向机械平铺条纹并纠正生成器虚构 Style #116
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景与问题描述
在 #111 全地图走查中,发现:
根因剖析 (1.13c 对比)
src/game/d2map.ts:402中的pickVariant()采用了公式:state = (BigInt(seed >>> 0) + BigInt(cellX >>> 0)) * BigInt(cellY >>> 0)该公式在数学上具有强烈的对角线乘积周期性,在 2.5D 等距视角变换
(cellX - cellY, cellX + cellY)投影下,被几何放大为肉眼刺眼的 45 度平行倾斜条纹。wilderness-acts.ts在绘制 Kurast 堤道时硬编码style: 5,而 Kurast (LevelType 18) 的合法地表 style 为 20~22, 30~31, 35, 46, 50,根本不存在 style 5;wilderness-acts.ts在 Mesa 绘制熔岩裂谷时硬编码style: 20,而 style 20 属于 Act 4 Lava,Mesa (LevelType 23) 并未载入 Lava 库;wilderness-siege.ts中的stampBreachedBarricade硬编码了sequence: rng.int(1, 2),而Expansion/Siege/fence.dt1的 style 2 只有 sequence 10, 11。修复要求
src/game/d2map.ts中重构pickVariant的散列算法,采用高质量伪随机混合算法(如 SplitMix64 或 PCG32 哈希),彻底打破坐标对角线共振条纹。wilderness-acts.ts中的硬编码瓦片:style 20/style 21);style 10);wilderness-siege.ts中栅栏越界 sequence。tests/variant-distribution.test.ts,验证随机分布平坦度与无对角线周期性,以及所有关卡生成器生成的瓦片编号均合法。npm run typecheck、npx vitest run。关联主 Issue: #111
修复完成并已合并至 main
f111ba5a7415d038375af0d976f0f31195fefbe2(Merge:51c869d)src/game/d2map.ts中的pickVariant算法:引入 SplitMix64 伪随机空间坐标散列,彻底消除原有简单算术乘积在斜 45 度方向产生的明显机械周期性几何平铺条纹伪影。src/game/wilderness-acts.ts与src/game/wilderness-siege.ts中纠正野外生成器虚构硬编码的 Style 编号,改为基于当前 DT1 库实际导出的 styles/sequences。tests/variant-distribution.test.ts验证变体分布方差与空间均匀性。npm run typecheck0 errors,全量vitest run测试通过。