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.