So I guess you didn´t tried? It´s easy as hell, next to some knowledge which you can only get by testing.
I don´t know where is the problem. You read the position of a vertex, you edit the position, you set the new position of the vertex. Absolutely simple.
In the example (I don´t know the exactly spelling of the commands out of my head):
Get_vertex_count(me,temp);
temp.Y = 1;
while(temp.Y <= temp)
{
get_vertex_pos(me,mtemp,temp.Y); //because temp only is too less temponary variables for me I am creating more temponary arrays, like mtemp[3] and mytemp[3]
mtemp.X = windforce.X*(mtemp.Z/20); //windforce is a rotated force somewhere into X and Y direction, the higher the position of the vertex the more the force is working on it (on 0 its doesnt do anything, and I hope below 0 is no vertex

)
mtemp.Y = windforce.Y*(mtemp.Z/20); //the same in green
set_vertex_pos(me,mtemp,temp.Y); //remember, this effect works in the models space, not in the world space (and that´s of corse correct and better that way), that means if you model rotates you have also to rotate the force.
temp.Y += 1;
}//NO WAIT(1) IN THIS WHILE LOOP!
Additional info: I am not sure anymore about this, but you may have to store the original position and reset it before every deforming. Otherwise the new position stored until the model is new loaded (new level I think). The deformation works on every model in the level. Means you need for every flame another model file.
Storing the original position is simple.