Fix duplicate sub-areas caused by PokeAPI casing (e.g. 1f vs 1F)

PokeAPI returns both lowercase and uppercase floor names as separate
sub-areas with identical encounter data, causing 649 duplicate routes
across all 22 seed files. Merged case-insensitive duplicates, keeping
the uppercase name and deduplicating encounters. Re-seed required.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-08 13:22:50 +01:00
parent be6c8e75be
commit bbac19677a
23 changed files with 530 additions and 38259 deletions

View File

@@ -3400,114 +3400,6 @@
}
]
},
{
"name": "Terminus Cave (1f)",
"order": 49,
"encounters": [
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "rock-smash",
"encounter_rate": 95,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 632,
"pokemon_name": "Durant",
"method": "walk",
"encounter_rate": 40,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "walk",
"encounter_rate": 20,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 305,
"pokemon_name": "Lairon",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 28,
"pokemon_name": "Sandslash",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 213,
"pokemon_name": "Shuckle",
"method": "rock-smash",
"encounter_rate": 5,
"min_level": 44,
"max_level": 46
}
]
},
{
"name": "Terminus Cave (B1f Left)",
"order": 50,
"encounters": [
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "rock-smash",
"encounter_rate": 95,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 632,
"pokemon_name": "Durant",
"method": "walk",
"encounter_rate": 40,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "walk",
"encounter_rate": 20,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 305,
"pokemon_name": "Lairon",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 28,
"pokemon_name": "Sandslash",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 213,
"pokemon_name": "Shuckle",
"method": "rock-smash",
"encounter_rate": 5,
"min_level": 44,
"max_level": 46
}
]
},
{
"name": "Terminus Cave (B1F Left)",
"order": 50,
@@ -3562,60 +3454,6 @@
}
]
},
{
"name": "Terminus Cave (B1f Right)",
"order": 51,
"encounters": [
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "rock-smash",
"encounter_rate": 95,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 632,
"pokemon_name": "Durant",
"method": "walk",
"encounter_rate": 40,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "walk",
"encounter_rate": 20,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 305,
"pokemon_name": "Lairon",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 28,
"pokemon_name": "Sandslash",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 213,
"pokemon_name": "Shuckle",
"method": "rock-smash",
"encounter_rate": 5,
"min_level": 44,
"max_level": 46
}
]
},
{
"name": "Terminus Cave (B1F Right)",
"order": 51,
@@ -3708,44 +3546,6 @@
}
]
},
{
"name": "Terminus Cave (B2f)",
"order": 52,
"encounters": [
{
"pokeapi_id": 632,
"pokemon_name": "Durant",
"method": "walk",
"encounter_rate": 40,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 75,
"pokemon_name": "Graveler",
"method": "walk",
"encounter_rate": 20,
"min_level": 44,
"max_level": 46
},
{
"pokeapi_id": 305,
"pokemon_name": "Lairon",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
},
{
"pokeapi_id": 28,
"pokemon_name": "Sandslash",
"method": "walk",
"encounter_rate": 20,
"min_level": 45,
"max_level": 46
}
]
},
{
"name": "Terminus Cave (Zygardes Chamber)",
"order": 53,