[DRLG-M3] 还原原版 16 位多层碰撞掩码系统与投射物/视线穿透 (COLLIDE_MISSILE_BARRIER / RayTrace) #75
Labels
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: troytt/diablo2-web#75
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?
目标与背景
以暴雪原版 1.13c
D2Common.dll(Ordinal 10118COLLISION_CheckMask, Ordinal 10127COLLISION_SetMask, Ordinal 11263COLLISION_RayTrace) 为黄金标准,全面升级现行src/game/d2map.ts与战斗碰撞判定层。缺陷与审计发现
Uint8Array,仅区分为1 = 阻挡, 0 = 可通行。COLLIDE_WALL (0x0001)但没有COLLIDE_MISSILE_BARRIER (0x0004),地面单位无法通行,但箭矢与魔法投射物可直接射过。当前全被设为不可通行,导致远程攻击被完全阻挡。COLLIDE_VISIBLE (0x0002)与COLLIDE_MASK_FLYING_UNIT。COLLISION_RayTrace,导致技能轨迹与视线判断只能通过粗糙的包围盒近似。验收条件
scene.collision升级为 16 位位掩码网格 (Uint16Array)。COLLIDE_WALL (0x0001)、COLLIDE_VISIBLE (0x0002)、COLLIDE_MISSILE_BARRIER (0x0004)、COLLIDE_DOOR (0x0800)。COLLIDE_MASK_PLAYER_PATH) 与投射物飞跃判定 (COLLIDE_MISSILE_BARRIER),允许火球、箭矢穿透河流与低矮障碍。COLLISION_RayTrace亚图块射线追踪算法。npm run typecheck0 errors。npx vitest run全量通过并新增射线与穿透测试。npx tsx scripts/verify-packs.ts1671/1671 项逐字节完全匹配(保持兼容)。已完成原版 1.13c 16位多层碰撞掩码系统与投射物/视线穿透对齐并合入
main(ef59646):D2C_CollisionMaskFlags全部 16 位掩码定义 (COLLIDE_WALL=0x0001,COLLIDE_VISIBLE=0x0002,COLLIDE_MISSILE_BARRIER=0x0004,COLLIDE_DOOR=0x0800等) 及复合掩码。buildIsoMapScene构建Uint16Array collisionMasks多层碰撞网格,同时 100% 保持blocked: Uint8Array兼容(1671/1671 Pack 验证逐字节通过)。COLLISION_CheckMask(#10118)、COLLISION_SetMask(#10127)、COLLISION_ResetMask(#10123) 与亚图块级 Bresenham 射线追踪COLLISION_RayTrace(#11263)。iso-terrain.ts与skills.ts弹道穿透判定,允许弓箭/法术越过河流与低矮障碍并阻挡于实体高墙与闭合门洞。