?
This commit is contained in:
parent
3ac2c116bd
commit
da9d8ef904
11 changed files with 612 additions and 344 deletions
57
mapOutput.js
57
mapOutput.js
|
|
@ -72,10 +72,12 @@ export function finishMapOutput({
|
|||
tributaryRivers,
|
||||
smallStreams,
|
||||
externalGateways,
|
||||
transportDebug,
|
||||
prefectureMask,
|
||||
prefectureBorder,
|
||||
prefectureRegionId,
|
||||
regionalDebug,
|
||||
terrainDebug,
|
||||
regionalPrefectureBorders,
|
||||
}) {
|
||||
// Final population pass after land-use cleanup, satellite municipality locking, and isolated urban deletion.
|
||||
|
|
@ -171,28 +173,59 @@ export function finishMapOutput({
|
|||
center.name = best.name;
|
||||
}
|
||||
}
|
||||
const adminNamePrefixes = ["\u6771", "\u897F", "\u5357", "\u5317", "\u4E0A", "\u4E0B", "\u65B0", "\u65E7", "\u4E2D", "\u5916"];
|
||||
const adminNameSuffixes = [
|
||||
"\u753A\u57DF",
|
||||
"\u5E02\u57DF",
|
||||
"\u90F7\u57DF",
|
||||
"\u6D41\u57DF",
|
||||
"\u6E7E\u5CB8",
|
||||
"\u5C71\u9E93",
|
||||
"\u5E73\u91CE",
|
||||
"\u5730\u533A",
|
||||
];
|
||||
const adminNameCounts = new Map();
|
||||
for (const center of adminCenters) adminNameCounts.set(center.name, (adminNameCounts.get(center.name) || 0) + 1);
|
||||
const duplicateOrdinal = new Map();
|
||||
const baseVariantCounts = new Map();
|
||||
for (const center of adminCenters) {
|
||||
if ((adminNameCounts.get(center.name) || 0) <= 1) continue;
|
||||
const n = duplicateOrdinal.get(center.name) || 0;
|
||||
duplicateOrdinal.set(center.name, n + 1);
|
||||
const prefix = adminNamePrefixes[(Math.floor(center.x / Math.max(1, MAP_W / 3)) + Math.floor(center.y / Math.max(1, MAP_H / 3)) * 3 + n) % adminNamePrefixes.length];
|
||||
if (!String(center.name).startsWith(prefix)) center.name = `${prefix}${center.name}`;
|
||||
const base = String(center.name || "");
|
||||
const count = adminNameCounts.get(base) || 0;
|
||||
if (count <= 1) {
|
||||
baseVariantCounts.set(base, Math.max(baseVariantCounts.get(base) || 0, 1));
|
||||
continue;
|
||||
}
|
||||
const usedForBase = baseVariantCounts.get(base) || 0;
|
||||
if (usedForBase === 0) {
|
||||
baseVariantCounts.set(base, 1);
|
||||
continue;
|
||||
}
|
||||
if (usedForBase < 2) {
|
||||
const i = indexOf(center.x, center.y);
|
||||
const naturalSuffix = coastalLowland[i] > 0.28
|
||||
? "\u6E7E\u5CB8"
|
||||
: basinField[i] > 0.28
|
||||
? "\u5E73\u91CE"
|
||||
: ridgeField[i] > 0.42 || slope[i] > 0.34
|
||||
? "\u5C71\u9E93"
|
||||
: river[i] > 0.25 || flowAccum[i] > 0.38
|
||||
? "\u6D41\u57DF"
|
||||
: adminNameSuffixes[(Math.floor(center.x / 12) + Math.floor(center.y / 12)) % adminNameSuffixes.length];
|
||||
center.name = `${base}${naturalSuffix}`;
|
||||
center.derivedFromBaseName = base;
|
||||
nameDebug.derivedNameCount++;
|
||||
baseVariantCounts.set(base, usedForBase + 1);
|
||||
}
|
||||
}
|
||||
const usedAdminNames = new Set();
|
||||
for (const center of adminCenters) {
|
||||
let candidate = center.name;
|
||||
let guard = 0;
|
||||
while (usedAdminNames.has(candidate) && guard < adminNamePrefixes.length) {
|
||||
candidate = `${adminNamePrefixes[(guard + Math.floor(center.x / 12) + Math.floor(center.y / 12)) % adminNamePrefixes.length]}${center.name}`;
|
||||
guard++;
|
||||
const generated = String(center.generatedMunicipalityName || "");
|
||||
if (usedAdminNames.has(candidate) && Array.from(generated).length >= 2 && !usedAdminNames.has(generated)) {
|
||||
candidate = generated;
|
||||
}
|
||||
center.name = candidate;
|
||||
usedAdminNames.add(center.name);
|
||||
}
|
||||
nameDebug.maxDerivedPerBase = Math.max(0, ...baseVariantCounts.values());
|
||||
|
||||
const entitiesForNames = [
|
||||
...modernCities,
|
||||
|
|
@ -220,6 +253,7 @@ export function finishMapOutput({
|
|||
prefectureBorder,
|
||||
prefectureRegionId,
|
||||
regionalDebug,
|
||||
terrainDebug,
|
||||
regionalPrefectureBorders,
|
||||
elevation,
|
||||
moisture,
|
||||
|
|
@ -291,6 +325,7 @@ export function finishMapOutput({
|
|||
tributaryRivers,
|
||||
smallStreams,
|
||||
externalGateways,
|
||||
transportDebug,
|
||||
entitiesForNames,
|
||||
nameDebug,
|
||||
}, options);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue