This commit is contained in:
33333-33333 2026-05-29 22:00:42 +09:00
commit 6cef9a3abe
11 changed files with 1184 additions and 235 deletions

View file

@ -160,7 +160,6 @@ const TERRAIN_TYPES = [
{
id: "tohoku_spine",
label: "東北型・長大脊梁",
weight: 0.24,
coastStyle: "parallel_spine",
mountainMode: "range",
massifnessRange: [0.06, 0.26],
@ -185,7 +184,6 @@ const TERRAIN_TYPES = [
{
id: "chubu_mountain",
label: "中部型・交差高山地",
weight: 0.24,
coastStyle: "outer_coast",
mountainMode: "massif",
massifnessRange: [0.42, 0.74],
@ -210,7 +208,6 @@ const TERRAIN_TYPES = [
{
id: "oceanic_archipelago",
label: "Ocean",
weight: 0.00,
autoSelectable: false,
coastStyle: "oceanic_archipelago",
mountainMode: "mixed",
@ -236,24 +233,23 @@ const TERRAIN_TYPES = [
{
id: "setouchi_inland_sea",
label: "瀬戸内型・内海多島",
weight: 0.16,
coastStyle: "inland_sea",
mountainMode: "mixed",
massifnessRange: [0.34, 0.62],
seaRatioRange: [0.28, 0.43],
twoSidedChance: 0.92,
seaRatioRange: [0.40, 0.56],
twoSidedChance: 0.96,
mountainOffsetRange: [0.22, 0.34],
baseHeightRange: [0.46, 0.78],
primaryLengthRange: [0.52, 0.78],
primaryWidthRange: [0.20, 0.38],
systemCountRange: [16, 22],
beltCountRange: [3, 4],
systemCountRange: [20, 28],
beltCountRange: [4, 5],
angleSpread: 0.34,
crossSpread: 0.86,
lengthScale: 1.00,
widthScale: 1.18,
heightScale: 0.82,
coastStrength: 1.34,
lengthScale: 0.92,
widthScale: 1.02,
heightScale: 0.78,
coastStrength: 1.52,
plainBiasRange: [0.26, 0.50],
riverRichnessRange: [0.58, 0.96],
bigRiverChanceRange: [0.18, 0.42],
@ -261,7 +257,6 @@ const TERRAIN_TYPES = [
{
id: "kanto_alluvial",
label: "関東・濃尾型・大河川平野",
weight: 0.16,
coastStyle: "open_bay",
mountainMode: "range",
massifnessRange: [0.10, 0.30],
@ -286,7 +281,6 @@ const TERRAIN_TYPES = [
{
id: "mixed_archipelago",
label: "混合型・列島変化",
weight: 0.20,
coastStyle: "mixed_archipelago",
mountainMode: "mixed",
massifnessRange: [0.16, 0.72],
@ -1896,16 +1890,19 @@ export function generateTerrainAndRivers(seed, options = {}) {
e -= high * clamp(0.18 + mountainMaskMax * 0.22, 0.18, 0.40);
}
if (terrainTemplate.terrainType === "setouchi_inland_sea") {
// Setouchi maps should have many low hills and island backbones rather
// than a few high alpine ridges. Add broad low relief, then cap peaks.
const lowHillNoise = clamp((fbm(wx * 0.95 + 17, wy * 0.95 - 23, seed + 571) - 0.38) * 2.9);
const lowHillMask = clamp(0.34 + mountainMaskMax * 0.72 + lowHillNoise * 0.50 - coastPressure * 0.12);
e += lowHillMask * 0.145;
// Do not add the previous fine speckle uplift here: it created too many
// tiny islets. Sea amount is controlled by seaRatio/coast pressure.
e -= clamp((coastPressure - 0.42) * 1.35) * 0.026;
const high = Math.max(0, e - 0.62);
e -= high * 0.42;
// Setouchi should read as sea-dominant, with many compact wooded island
// backbones rather than broad continental ridges. The small-massif term
// is band-limited so it forms believable islands, not one-cell speckle.
const lowHillNoise = clamp((fbm(wx * 0.95 + 17, wy * 0.95 - 23, seed + 571) - 0.39) * 2.7);
const islandMassif = clamp((fbm(wx * 1.85 - 31, wy * 1.85 + 19, seed + 573) - 0.50) * 3.4);
const islandBackbone = clamp((valueNoise(wx * 2.8 + 7, wy * 2.8 - 11, seed + 574, 9) - 0.54) * 3.2);
const coastalIslandBias = clamp(coastPressure * 0.64 + mountainMaskMax * 0.46 + lowHillNoise * 0.24);
e += lowHillNoise * 0.090;
e += islandMassif * coastalIslandBias * 0.105;
e += islandBackbone * coastalIslandBias * 0.045;
e -= clamp((coastPressure - 0.34) * 1.55) * 0.044;
const high = Math.max(0, e - 0.60);
e -= high * 0.48;
}
if (terrainTemplate.terrainType === "oceanic_archipelago") {
// 海洋型は大きな山塊ではなく、島列を読むための低い起伏を点在させる。