Add per-condition encounter rates to seed data
Add a `condition` column to RouteEncounter so encounters can store per-condition rates (time of day, season, weather) instead of flattening to max(). Update the seed loader, API schemas, and frontend to support the new `conditions` dict format in seed JSON. Port the PoC branch's condition-aware EncounterModal UI with filter tabs that let players see encounter rates for specific conditions. Add horde/SOS as distinct encounter methods with their own badges. Update the import tool to extract per-condition rates instead of flattening, and add a merge script (tools/merge-conditions.py) that enriches existing curated seed files with condition data from PokeDB. Seed data updated for 22 games (5,684 encounters): - Gen 2: Gold, Silver, Crystal (morning/day/night) - Gen 4: HG, SS, Diamond, Pearl, Platinum, BD, SP (morning/day/night) - Gen 5: Black, White, Black 2, White 2 (spring/summer/autumn/winter) - Gen 7: Sun, Moon, Ultra Sun, Ultra Moon (day/night) - Gen 8: Sword, Shield (weather) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1486,7 +1486,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Relic Castle (Volcarona\u2019s Room and Room Outside)",
|
||||
"name": "Relic Castle (Volcarona’s Room and Room Outside)",
|
||||
"order": 30,
|
||||
"encounters": [
|
||||
{
|
||||
@@ -2971,25 +2971,40 @@
|
||||
"pokeapi_id": 536,
|
||||
"pokemon_name": "Palpitoad",
|
||||
"method": "walk",
|
||||
"encounter_rate": 40,
|
||||
"encounter_rate": null,
|
||||
"min_level": 30,
|
||||
"max_level": 33
|
||||
"max_level": 33,
|
||||
"conditions": {
|
||||
"spring": 40,
|
||||
"summer": 40,
|
||||
"autumn": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 616,
|
||||
"pokemon_name": "Shelmet",
|
||||
"method": "walk",
|
||||
"encounter_rate": 40,
|
||||
"encounter_rate": null,
|
||||
"min_level": 30,
|
||||
"max_level": 33
|
||||
"max_level": 33,
|
||||
"conditions": {
|
||||
"spring": 40,
|
||||
"summer": 40,
|
||||
"autumn": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 618,
|
||||
"pokemon_name": "Stunfisk",
|
||||
"method": "walk",
|
||||
"encounter_rate": 20,
|
||||
"encounter_rate": null,
|
||||
"min_level": 31,
|
||||
"max_level": 32
|
||||
"max_level": 32,
|
||||
"conditions": {
|
||||
"spring": 20,
|
||||
"summer": 20,
|
||||
"autumn": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 340,
|
||||
@@ -3439,25 +3454,40 @@
|
||||
"pokeapi_id": 536,
|
||||
"pokemon_name": "Palpitoad",
|
||||
"method": "walk",
|
||||
"encounter_rate": 40,
|
||||
"encounter_rate": null,
|
||||
"min_level": 30,
|
||||
"max_level": 33
|
||||
"max_level": 33,
|
||||
"conditions": {
|
||||
"spring": 40,
|
||||
"summer": 40,
|
||||
"autumn": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 616,
|
||||
"pokemon_name": "Shelmet",
|
||||
"method": "walk",
|
||||
"encounter_rate": 40,
|
||||
"encounter_rate": null,
|
||||
"min_level": 30,
|
||||
"max_level": 33
|
||||
"max_level": 33,
|
||||
"conditions": {
|
||||
"spring": 40,
|
||||
"summer": 40,
|
||||
"autumn": 40
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 618,
|
||||
"pokemon_name": "Stunfisk",
|
||||
"method": "walk",
|
||||
"encounter_rate": 20,
|
||||
"encounter_rate": null,
|
||||
"min_level": 31,
|
||||
"max_level": 32
|
||||
"max_level": 32,
|
||||
"conditions": {
|
||||
"spring": 20,
|
||||
"summer": 20,
|
||||
"autumn": 20
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 340,
|
||||
@@ -5630,9 +5660,12 @@
|
||||
"pokeapi_id": 446,
|
||||
"pokemon_name": "Munchlax",
|
||||
"method": "trade",
|
||||
"encounter_rate": 100,
|
||||
"encounter_rate": null,
|
||||
"min_level": 60,
|
||||
"max_level": 60
|
||||
"max_level": 60,
|
||||
"conditions": {
|
||||
"summer": 100
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 90,
|
||||
@@ -5740,9 +5773,15 @@
|
||||
"pokeapi_id": 320,
|
||||
"pokemon_name": "Wailmer",
|
||||
"method": "surf",
|
||||
"encounter_rate": 90,
|
||||
"encounter_rate": null,
|
||||
"min_level": 25,
|
||||
"max_level": 60
|
||||
"max_level": 60,
|
||||
"conditions": {
|
||||
"spring": 90,
|
||||
"summer": 90,
|
||||
"autumn": 90,
|
||||
"winter": 60
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 223,
|
||||
@@ -5772,25 +5811,36 @@
|
||||
"pokeapi_id": 458,
|
||||
"pokemon_name": "Mantyke",
|
||||
"method": "surf",
|
||||
"encounter_rate": 30,
|
||||
"encounter_rate": null,
|
||||
"min_level": 25,
|
||||
"max_level": 55
|
||||
"max_level": 55,
|
||||
"conditions": {
|
||||
"spring": 30,
|
||||
"summer": 30,
|
||||
"autumn": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 364,
|
||||
"pokemon_name": "Sealeo",
|
||||
"method": "surf",
|
||||
"encounter_rate": 30,
|
||||
"encounter_rate": null,
|
||||
"min_level": 25,
|
||||
"max_level": 60
|
||||
"max_level": 60,
|
||||
"conditions": {
|
||||
"winter": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 363,
|
||||
"pokemon_name": "Spheal",
|
||||
"method": "surf",
|
||||
"encounter_rate": 30,
|
||||
"encounter_rate": null,
|
||||
"min_level": 25,
|
||||
"max_level": 55
|
||||
"max_level": 55,
|
||||
"conditions": {
|
||||
"winter": 30
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 279,
|
||||
@@ -5812,9 +5862,14 @@
|
||||
"pokeapi_id": 226,
|
||||
"pokemon_name": "Mantine",
|
||||
"method": "surf",
|
||||
"encounter_rate": 5,
|
||||
"encounter_rate": null,
|
||||
"min_level": 25,
|
||||
"max_level": 60
|
||||
"max_level": 60,
|
||||
"conditions": {
|
||||
"spring": 5,
|
||||
"summer": 5,
|
||||
"autumn": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"pokeapi_id": 224,
|
||||
@@ -5836,9 +5891,12 @@
|
||||
"pokeapi_id": 365,
|
||||
"pokemon_name": "Walrein",
|
||||
"method": "surf",
|
||||
"encounter_rate": 5,
|
||||
"encounter_rate": null,
|
||||
"min_level": 25,
|
||||
"max_level": 70
|
||||
"max_level": 70,
|
||||
"conditions": {
|
||||
"winter": 5
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user