OK - I've managed to get this working with:

Code:
function unit_hit()
{
  if(you.UNIT_TYPE == UNIT_TYPE_TORPEDO) my.STATE = UNITSTATE_HIT;
}

action unit_action()
{ my.event = unit_hit;
  my.emask |= ENABLE_IMPACT; //you = other object pointer

  while(1)
  { 	move_friction=0;
        unit_physics(act_unit);
  	c_move(my, vector(unit_data[act_unit][UNIT_DATA_SPEED]*time_step,0,0), vector(unit_data[act_unit][UNIT_DATA_X_FORCE]*time_step,unit_data[act_unit][UNIT_DATA_Y_FORCE]*time_step,unit_data[act_unit][UNIT_DATA_Z_FORCE]*time_step), IGNORE_PASSABLE | GLIDE);
  	
  	//sink the sub
  	if(my.STATE == UNITSTATE_HIT)
  	{
		//my.STATE = UNITSTATE_NORMAL;
		unit_data[act_unit][UNIT_DATA_Z_FORCE]-=time_step;
		unit_data[act_unit][UNIT_DATA_POWER] = 0;
			
			
	}
  		
  	wait(1);	
}




A7 Commercial
First person submarine combat simulator project
http://alexanderforeman.webs.com/fightersubgame.htm