feat(ground): 怪物死亡战利品与金币地面实体生成、等距散落与抛物线弹跳 (Monster Loot & Gold Ground Spawning, Isometric Scatter & Flippy Bounce) #406
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?
问题背景与现状分析
src/game/engine.ts第 885–886 行中,当怪物掉落金币(drop.base.id === "gold" || drop.code?.trim() === "gld")时,代码直接执行了this.bag.add(drop),既没有在地面上生成金币堆实体(GroundItemEntity),也没有同步到hudManager.inventory.gold,导致玩家打怪掉钱在地上完全看不见、也无法点击拾取。groundItems.add时cellX, cellY被硬编码传为0, 0,未与实际散落的世界等距网格坐标同步。原版 Diablo II v1.13c 核心机制规范(Ground Truth)
1. 金币与战利品统一落地实体化 (
D2Game.dllD2GAME_DropItem)gld)、武器、防具、首饰、药水、卷轴、箭矢、宝石、符文、护身符——必须全部作为GroundItemEntity掉落在怪物死亡位置的地面上,绝不直接静默塞入背包。amount(由 1.13c 金币公式与怪物等级/TC 倍率算出),地面渲染时根据数额自动匹配小堆(< 100)、中堆(100 ~ 4999)、大堆(>= 5000)金币贴图。2. 2:1 等距菱形网格螺旋散落与防卡墙 (
D2Common.dllITEM_Drop@0x6FD40000)(monster.x, monster.y)为中心,通过findIsometricDropPosition/findSafeDropPosition沿 2:1 等距子网格向外螺旋寻址。COLLIDE_WALL、COLLIDE_BLANK或COLLIDE_MASK_INVALID阻挡区,且同一怪掉落的多件战利品之间保持最小间距不重叠堆叠,准确记录每件掉落物的(cellX, cellY)与(x, y)。3. 掉落抛物线弹跳动画 (
triggerFlippyBounce)flippy抛物线腾空弹跳动画(主阶段 + 二次衰减弹跳),落地后进入周期性星芒闪烁(Glint/Sparkle)。改造与验收标准
GroundItemEntity(含正确的isGold: true,amount,cellX,cellY,x,y及bounceState)。Alt键均可正确显示浮动标签(如"128 金币"、魔法蓝字、稀有黄字、暗金字等),标签自动阶梯避让。Milestone M11.3 (Issue #406) Gate 2 Verification: 100% PASS
All 5 Gate subagents voted unanimously APPROVE / CLEAN:
Merged to
mainat commitcef09dband pushed toorigin/main.Worktree
.worktrees/issue-406pruned cleanly.