I haven't done this myself, or even looked into it, but I may have a few hints for you.
I seem to recall a script that checks what kind of tile you're standing on. I'm not sure whether it checks which specific tile in the tileset it is, or whether it just checks the terrain tag. But feasibly, you could put this to some use. Grass tile means grass underfoot. Sand tile means beach underfoot. And so on.
Expanding on this, you can check which map the player is in with another script. If you're in map "Viridian Forest", then there should be long grass and a forest in the background. And so on.
You can combine the two, but it'll quickly get very messy. The amount of mess depends on how many different factors you want to use. You could use the aforementioned tile and map checks, and also time of day and a few other things too.
As for where to put all this new code, go look in PokeBattle_ActualScene. That section describes what shows up during battle, including the battle bases and the background. Create a bunch of "if...elsif...else" statements to your heart's content (or something similar). I suspect there's already some there, which describe simple things such as "inside building", "grass", "cave", and so on, so expand on those choices (if there isn't, it shouldn't be difficult to make them).
Hope that gets you thinking.
You know weather doesn't work like that, right? :cheeky: