I'd rather approach it from the other direction:
Have dedicated Move Skill data files where the different conditions to unlock them can be defined.
That way you can set various conditions - like for
Ore Sense, which can be used with either the moves
Magnet Rise or
Metal Sound, or via the ability
Magnet Pull:
Code: Select all"required": {
"moves": [
"Magenet Rise",
"Metal Sound"
],
"abilities": [
"Magnet Pull"
]
}
Or ones like
Wormhole, which are available for specific Pokémon:
Code: Select all"required": {
"species": [
"Palkia",
"Arceus",
"Solgaleo",
"Lunala",
"Necrozma"
]
}
Those data files would also allow for detailed customization.
For example, the following attribute would make it so any Move Skills with grief potential are only avaiblable in singleplayer by default:
Servers then have the abilitiy to override them to
false individually, if they do want them to be available.
Same for variants of the same Move Skill that have different requirements to unlock certain effects, like the different patterns for
Ignite:
Code: Select all[
{
"area": {
"type": "horizontal",
"pattern": [
"X",
"X",
"X"
]
},
"required": {
"move": [
"Ember",
"Fire Spin",
"Flame Burst",
"Flame Wheel",
"Heat Wave",
"Will-O-Wisp"
]
}
},
{
"area": {
"type": "horizontal",
"pattern": [
"X X",
" X ",
"X X"
]
},
"required": {
"move": [
"Fire Blast"
]
}
},
{
"area": {
"type": "horizontal",
"pattern": [
"XXX",
"XXX",
"XXX"
]
},
"required": {
"move": [
"Incinerate",
"Inferno",
"Sacred Fire"
]
}
}
]
Other aspects that would be possible to set that way include
cooldowns (fixed; linear relative to base/current min/max stats; addition of multiple values; etc.), usable/affected
blocks (think
Cut,
Dig,
Ore Sense, etc.), associated
loot tables and/or
spawns (
Forage,
Headbutt,
Rock Smash) and many more.