fix(wilderness): 修复 Act 1 荒野关卡内部连通性与通路屏障 (Issue #79)
- 将 Act 1 荒野道路地面瓦片由 style 5 (在 Town/Floor.dt1 中为不可通行的水面瓦片) 修正为 style 0 (可通行的土地瓦片),消除横跨地图阻断通行的碰撞墙屏障 - 确保所有 Act 1 荒野关卡 (Blood Moor, Cold Plains, Stony Field, Dark Wood, Black Marsh, Tamoe Highland) 连通可达率全部达到 100% - 更新测试断言以匹配修正后的瓦片 style 0 - 保持 DRLGROOMTILE_GetTileCache 中 mandatory seed 确定性机制不变 TAG=agy CONV=2a1934de-30ef-464e-b3f3-fcbcdbbc49f1
This commit is contained in:
parent
045dd2b6b6
commit
24eb66d2e6
|
|
@ -1467,7 +1467,6 @@ function isRoadCell(floor: Ds1Floor | undefined): boolean {
|
||||||
if (!floor || floor.hidden || floor.prop1 === 0) return false
|
if (!floor || floor.hidden || floor.prop1 === 0) return false
|
||||||
return (
|
return (
|
||||||
floor.prop1 === 194 ||
|
floor.prop1 === 194 ||
|
||||||
floor.style === 5 ||
|
|
||||||
(floor.style === 0 && floor.sequence >= 1 && floor.sequence <= 46) ||
|
(floor.style === 0 && floor.sequence >= 1 && floor.sequence <= 46) ||
|
||||||
(floor.style === 1 && floor.prop1 === 194)
|
(floor.style === 1 && floor.prop1 === 194)
|
||||||
)
|
)
|
||||||
|
|
@ -4746,8 +4745,8 @@ export function stampAct1DirtRoads(
|
||||||
{
|
{
|
||||||
roadFloor: (r) => ({
|
roadFloor: (r) => ({
|
||||||
prop1: 194,
|
prop1: 194,
|
||||||
sequence: r.int(0, 6) === 0 ? 25 : 0,
|
sequence: r.int(0, 5) === 0 ? 1 : 0,
|
||||||
style: 5,
|
style: 0,
|
||||||
unknown1: 0,
|
unknown1: 0,
|
||||||
unknown2: 0,
|
unknown2: 0,
|
||||||
hidden: false,
|
hidden: false,
|
||||||
|
|
@ -4777,7 +4776,7 @@ export function stampAct1InteriorStoneWalls(
|
||||||
stampThemedDividers(canvas, gridWidth, gridHeight, inX, outY, placedRects, rng, {
|
stampThemedDividers(canvas, gridWidth, gridHeight, inX, outY, placedRects, rng, {
|
||||||
wallStyle: 2,
|
wallStyle: 2,
|
||||||
wallProp1: 129,
|
wallProp1: 129,
|
||||||
roadStyles: [5],
|
roadStyles: [0],
|
||||||
}, stats)
|
}, stats)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ describe("Wilderness Features & Border Rules", () => {
|
||||||
if (cell.walls.some(w => w.style === 2 && w.prop1 === 129)) {
|
if (cell.walls.some(w => w.style === 2 && w.prop1 === 129)) {
|
||||||
stoneWallCount += 1
|
stoneWallCount += 1
|
||||||
}
|
}
|
||||||
if (cell.floors.some(f => f.style === 5 && f.prop1 === 194)) {
|
if (cell.floors.some(f => (f.style === 0 || f.style === 5) && f.prop1 === 194)) {
|
||||||
dirtRoadCount += 1
|
dirtRoadCount += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -356,13 +356,13 @@ describe("Wilderness Features & Border Rules", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
// 1. Verify 3-tile wide main highway at central crossroads (44, 44)
|
// 1. Verify 3-tile wide main highway at central crossroads (44, 44)
|
||||||
expect(result.level.cells[44]![44]!.floors[0]!.style).toBe(5)
|
expect(result.level.cells[44]![44]!.floors[0]!.style).toBe(0)
|
||||||
expect(result.level.cells[44]![43]!.floors[0]!.style).toBe(5)
|
expect(result.level.cells[44]![43]!.floors[0]!.style).toBe(0)
|
||||||
expect(result.level.cells[44]![45]!.floors[0]!.style).toBe(5)
|
expect(result.level.cells[44]![45]!.floors[0]!.style).toBe(0)
|
||||||
|
|
||||||
// 2. Verify South border gate road connection at (44, 75) and East border gate connection at (75, 44)
|
// 2. Verify South border gate road connection at (44, 75) and East border gate connection at (75, 44)
|
||||||
expect(result.level.cells[75]![44]!.floors[0]!.style).toBe(5)
|
expect(result.level.cells[75]![44]!.floors[0]!.style).toBe(0)
|
||||||
expect(result.level.cells[44]![75]!.floors[0]!.style).toBe(5)
|
expect(result.level.cells[44]![75]!.floors[0]!.style).toBe(0)
|
||||||
|
|
||||||
// 3. Verify no artificial interior stone wall segments (style=2, prop1=129) are stamped (Issue #65)
|
// 3. Verify no artificial interior stone wall segments (style=2, prop1=129) are stamped (Issue #65)
|
||||||
let foundContinuousEW = false
|
let foundContinuousEW = false
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ describe('Multi-Act Outdoor Roads & Boundary Divider Networks', () => {
|
||||||
stampOutdoorRoads(canvas, 1, 3, gridW, gridH, inX, outY, [], rng)
|
stampOutdoorRoads(canvas, 1, 3, gridW, gridH, inX, outY, [], rng)
|
||||||
stampOutdoorDividers(canvas, 1, 3, gridW, gridH, inX, outY, [], rng)
|
stampOutdoorDividers(canvas, 1, 3, gridW, gridH, inX, outY, [], rng)
|
||||||
|
|
||||||
expect(countFloorTiles(canvas, 5, 194)).toBeGreaterThan(40)
|
expect(countFloorTiles(canvas, 0, 194)).toBeGreaterThan(40)
|
||||||
expect(countWallTiles(canvas, 2, 129)).toBe(0)
|
expect(countWallTiles(canvas, 2, 129)).toBe(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -259,6 +259,7 @@ describe('Multi-Act Outdoor Roads & Boundary Divider Networks', () => {
|
||||||
stampOutdoorRoads(canvas, 1, 39, gridW, gridH, inX, outY, [], rng, 'Act 1 - Wilderness')
|
stampOutdoorRoads(canvas, 1, 39, gridW, gridH, inX, outY, [], rng, 'Act 1 - Wilderness')
|
||||||
stampOutdoorDividers(canvas, 1, 39, gridW, gridH, inX, outY, [], rng, 'Act 1 - Wilderness')
|
stampOutdoorDividers(canvas, 1, 39, gridW, gridH, inX, outY, [], rng, 'Act 1 - Wilderness')
|
||||||
|
|
||||||
|
expect(countFloorTiles(canvas, 0, 194)).toBe(0)
|
||||||
expect(countFloorTiles(canvas, 1, 194)).toBe(0)
|
expect(countFloorTiles(canvas, 1, 194)).toBe(0)
|
||||||
expect(countFloorTiles(canvas, 5, 194)).toBe(0)
|
expect(countFloorTiles(canvas, 5, 194)).toBe(0)
|
||||||
expect(countWallTiles(canvas, 1, 129)).toBe(0)
|
expect(countWallTiles(canvas, 1, 129)).toBe(0)
|
||||||
|
|
@ -399,7 +400,7 @@ describe('Multi-Act Outdoor Roads & Boundary Divider Networks', () => {
|
||||||
for (let x = 8; x < 72; x += 1) {
|
for (let x = 8; x < 72; x += 1) {
|
||||||
const cell = result.level.cells[y]?.[x]
|
const cell = result.level.cells[y]?.[x]
|
||||||
if (!cell) continue
|
if (!cell) continue
|
||||||
if (cell.floors.some(f => (f.style === 1 || f.style === 5) && f.prop1 === 194)) roadFloors += 1
|
if (cell.floors.some(f => (f.style === 0 || f.style === 1 || f.style === 5) && f.prop1 === 194)) roadFloors += 1
|
||||||
if (cell.walls.some(w => (w.style === 1 || w.style === 2) && w.prop1 === 129)) dividerWalls += 1
|
if (cell.walls.some(w => (w.style === 1 || w.style === 2) && w.prop1 === 129)) dividerWalls += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue