I'd reccomend doing it in a vertex shader to not destroy performance by either always having that many meshes loaded or creating a lag spike on death (by having to create as many meshes as vertices). This is because Godot is fairly high level, so all of its inherit classes have some overhead, and when used (abused?) to this degree it becomes noticeable.
You'd have to know some vector math to make it customisable, but for the flame one I'd take each vertex move it down x units each timestep, clamped to the floor's height
Edit to include an exploding example I made elsewhere in the post
void vertex(){
VERTEX += NORMAL * (sin(TIME)+1.0) *0.1;
}