This is my Phased Torpedo Script, copy it into one of your own Torpedo scripts and you shoud be good to go. Rename it to what ever you want, you will need FTECH for it to work.
###############################################################################
#   Filename:   PoleronTorp.py
#   By:             Andy      
###############################################################################
# This torpedo uses the FTA mod...
#
# it actually passes through shields and damages whatever subsystem it was
# targeted at
#
# please refer to the bottom of this file for details on changing effects
###############################################################################
import App
pWeaponLock = {}
###############################################################################
#   Args:   pTorp - the torpedo, ready to be filled-in
#   
#   Return:   zero
###############################################################################
def Create(pTorp):
   kCoreColor = App.TGColorA()
   kCoreColor.SetRGBA(222.0 / 255.0, 222.0 / 255.0, 253.0 / 255.0, 1.000000)
   kGlowColor = App.TGColorA()
   kGlowColor.SetRGBA(61.0 / 201.0, 98.0 / 255.0, 239.0 / 255.0, 1.000000)   
   pTorp.CreateTorpedoModel(
               "data/Textures/Tactical/TorpedoFlares.tga",
               kCoreColor, 
               0.1,
               0.8,    
               "data/Textures/Tactical/TorpedoCore.tga", 
               kCoreColor,
               0.1,   
               0.2,    
               0.1,   
               "data/Textures/Tactical/TorpedoCore.tga",
               kGlowColor,                              
               400,      
               0.3,      
               0.05)
   pTorp.SetDamage( GetDamage() )
   pTorp.SetDamageRadiusFactor(0.50)
   pTorp.SetGuidanceLifetime( GetGuidanceLifetime() )
   pTorp.SetMaxAngularAccel( GetMaxAngularAccel() )
   # Multiplayer specific stuff.  Please, if you create a new torp
   # type. modify the SpeciesToTorp.py file to add the new type.
   import Multiplayer.SpeciesToTorp
   pTorp.SetNetType (Multiplayer.SpeciesToTorp.QUANTUM)
   return(0)
def GetLaunchSpeed():
   return(32.0)
def GetLaunchSound():
   return("ZZ_Shockwave")
def GetPowerCost():
   return(33.0)
def GetName():
   return("Phased")
def GetDamage():
   return 0.00001
# Sets the minimum damage the torpedo will do
def GetMinDamage():
   return 170
# Sets the percentage of damage the torpedo will do
def GetPercentage():
   return 0.25
def GetGuidanceLifetime():
   return 9.0
def GetMaxAngularAccel():
   return 0.10
def TargetHit(pObject, pEvent):
   global pWeaponLock
   pTorp=App.Torpedo_Cast(pEvent.GetSource())
   pShip=App.ShipClass_Cast(pEvent.GetDestination())
   if (pTorp==None) or (pShip==None):
      return
   try:
      id=pTorp.GetObjID()
      pSubsystem=pWeaponLock[id]
      del pWeaponLock[id]
   except:
      pSubsystem=pShip.GetHull()
   if (pSubsystem==None):
      return
   Dmg=pSubsystem.GetMaxCondition()*GetPercentage()
   if (Dmg<GetMinDamage()):
      Dmg=GetMinDamage()
   if (pSubsystem.GetCondition()>Dmg):
      pSubsystem.SetCondition(pSubsystem.GetCondition()-Dmg)
   else:
      pShip.DestroySystem(pSubsystem)
   return
def WeaponFired(pObject, pEvent):
   global pWeaponLock
   pTorp=App.Torpedo_Cast(pEvent.GetSource())
   pTube=App.TorpedoTube_Cast(pEvent.GetDestination())
   if (pTorp==None) or (pTube==None):
      return
   pShip=pTube.GetParentShip()
   if (pShip==None):
      return
   try:
      pWeaponLock[pTorp.GetObjID()]=pShip.GetTargetSubsystem()
   except:
      return
   return