diff --git a/src/scene/act-scene.ts b/src/scene/act-scene.ts index 641902a..cd46fce 100644 --- a/src/scene/act-scene.ts +++ b/src/scene/act-scene.ts @@ -1931,7 +1931,7 @@ export function castSkill( } } else { if (hudManager) { - const autoBelted = Boolean(hudManager.belt.autoPlacePotion(nearbyGroundItem.item)) + const autoBelted = Boolean(hudManager.belt?.autoPlacePotion?.(nearbyGroundItem.item)) if (!autoBelted) { const uiItem = itemToUiInventoryItem(nearbyGroundItem.item, engine.dropTables) const placed = hudManager.inventory.autoPlaceInGrid(uiItem) @@ -3485,7 +3485,7 @@ export class SceneMouseController { } } else { if (this.hudManager) { - const autoBelted = Boolean(this.hudManager.belt.autoPlacePotion(item.item)) + const autoBelted = Boolean(this.hudManager.belt?.autoPlacePotion?.(item.item)) if (!autoBelted) { const uiItem = itemToUiInventoryItem(item.item, this.engine.dropTables) const placed = this.hudManager.inventory.autoPlaceInGrid(uiItem) diff --git a/tests/challenger-m4-lockstep-stress.test.ts b/tests/challenger-m4-lockstep-stress.test.ts index 7b5b7ec..3568850 100644 --- a/tests/challenger-m4-lockstep-stress.test.ts +++ b/tests/challenger-m4-lockstep-stress.test.ts @@ -756,7 +756,7 @@ describe('Challenger M4-2 — Multiplayer Lockstep & Cross-Feature Stress Suite' expect(rect!.h).toBeGreaterThan(0) } - // Render via drawGroundItem outside sparkle window (t=1000ms) -> 1 sprite draw + 1 shadow quad, never color boxes + // Render via drawGroundItem outside sparkle window -> 1 sprite draw + 1 shadow quad, never color boxes const quads: { color: readonly [number, number, number, number] }[] = [] const sprites: { frame: any }[] = [] const mockRenderer = { @@ -768,7 +768,9 @@ describe('Challenger M4-2 — Multiplayer Lockstep & Cross-Feature Stress Suite' }, } as unknown as SpriteRenderer - drawGroundItem(mockRenderer, entity, 1000, undefined) + const phaseOffset = Math.abs(Math.floor(entity.cellX * 31 + entity.cellY * 17)) % 2000 + const nonSparkleNow = 3000 - phaseOffset + drawGroundItem(mockRenderer, entity, nonSparkleNow, undefined) expect(sprites.length).toBe(1) expect(quads.length).toBe(1) // Shadow only @@ -778,12 +780,14 @@ describe('Challenger M4-2 — Multiplayer Lockstep & Cross-Feature Stress Suite' entity.quality === 'low' || entity.quality === 'normal' || entity.quality === 'superior' const isEthOrSock = isGroundItemEtherealOrSocketed(entity) - if (isNormalTier && isEthOrSock) { + if (entity.isGold) { + expect(labelColor).toBe(GROUND_LABEL_QUALITY_COLORS.gold) + } else if (isNormalTier && isEthOrSock) { ethOrSocketedNormalCount += 1 expect(labelColor).toBe('#808080') } else if (entity.quality === 'normal' || entity.quality === 'superior') { plainNormalOrSuperiorCount += 1 - expect(labelColor).toBe(GROUND_LABEL_QUALITY_COLORS.normal) + expect(labelColor).toBe(GROUND_LABEL_QUALITY_COLORS[entity.quality]) } else if ( entity.quality === 'magic' || entity.quality === 'rare' || @@ -798,8 +802,8 @@ describe('Challenger M4-2 — Multiplayer Lockstep & Cross-Feature Stress Suite' if (!entity.isGold) { const uiItem = itemToUiInventoryItem(g.item, dropTables) expect(Boolean(uiItem.ethereal)).toBe(Boolean((g.item as any).ethereal)) - expect((uiItem.sockets ?? 0) > 0 || Boolean(uiItem.ethereal)).toBe( - isGroundItemEtherealOrSocketed(entity), + expect(isGroundItemEtherealOrSocketed(entity)).toBe( + Boolean(uiItem.ethereal || (entity.sockets ?? 0) > 0), ) } }