From 677a726e6191d1dc5e03151203736aeeebdc786d Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 8 May 2026 10:26:37 +0200 Subject: [PATCH] Revert "phase(N.1): add ACME-conformant per-vertex road check" This reverts commit e279c46aace7123b0436b682afe9e9408c70625e. --- src/AcDream.Core/World/SceneryGenerator.cs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/AcDream.Core/World/SceneryGenerator.cs b/src/AcDream.Core/World/SceneryGenerator.cs index 8e13667..af0be17 100644 --- a/src/AcDream.Core/World/SceneryGenerator.cs +++ b/src/AcDream.Core/World/SceneryGenerator.cs @@ -100,14 +100,10 @@ public static class SceneryGenerator uint terrainType = (uint)((raw >> 2) & 0x1F); // bits 2-6 uint sceneType = (uint)((raw >> 11) & 0x1F); // bits 11-15 - // ACME-conformant per-vertex road check (GameScene.cs:1074). - // If this vertex itself is a road vertex, skip ALL scenery - // generation for it. This is retail behavior — the earlier - // claim that retail doesn't have this check (commit 833d167) - // was wrong. The post-displacement OnRoad check below is - // independent and still applies for non-road vertices whose - // displaced position lands on the road ribbon. - if ((raw & 0x3) != 0) continue; + // NOTE: retail does NOT skip based on this vertex's road bit. + // The road test happens AFTER displacement via the 4-corner + // polygonal OnRoad check (see below). Removing the + // pre-displacement early-exit restores retail behavior. if (terrainType >= region.TerrainInfo.TerrainTypes.Count) continue; var sceneTypeList = region.TerrainInfo.TerrainTypes[(int)terrainType].SceneTypes; @@ -304,10 +300,6 @@ public static class SceneryGenerator int i = x * VerticesPerSide + y; ushort raw = block.Terrain[i]; - // ACME-conformant per-vertex road check (GameScene.cs:1074). - // Skip the entire vertex if its road bit is set. - if ((raw & 0x3) != 0) continue; - uint terrainType = (uint)((raw >> 2) & 0x1F); uint sceneType = (uint)((raw >> 11) & 0x1F);