There is something to read C3 files - c3_core_dll.dll
Within it...
Code:
int g_nPhyCount;
int __cdecl Phy_Calculate(struct C3Phy *,int,int,struct D3DXVECTOR3);
int __cdecl Phy_Calculate_CPU(struct C3Phy *,int,int,struct D3DXVECTOR3,bool);
int __cdecl Phy_Calculate_Lite(struct C3Phy *);
void __cdecl Phy_ChangeMixTexture(struct C3Phy *,int);
void __cdecl Phy_ChangeTexture(struct C3Phy *,int);
void __cdecl Phy_Clear(struct C3Phy *);
void __cdecl Phy_ClearMatrix(struct C3Phy *);
int __cdecl Phy_Draw(struct PhyOutVertex *,unsigned long,struct C3Texture *,struct _D3DMATERIAL8 const *,unsigned long,unsigned long,int,int);
int __cdecl Phy_DrawAlpha(struct C3Phy *,int,unsigned long,unsigned long);
int __cdecl Phy_DrawNormal(struct C3Phy *,struct _D3DMATERIAL8 const &,struct _D3DXMATRIXA16 *,int,unsigned long,unsigned long,int,float,bool);
int __cdecl Phy_DrawNormal_CPU(struct C3Phy *,struct _D3DMATERIAL8 const &,struct _D3DXMATRIXA16 *,int,unsigned long,unsigned long,int,float,bool);
struct C3Phy * __cdecl Phy_DynamicCreate(unsigned long,struct D3DXVECTOR3 *,struct D3DXVECTOR2 *);
int __cdecl Phy_Load(struct C3Phy * *,void *,int,int,int);
void __cdecl Phy_Muliply(struct C3Phy *,struct _D3DXMATRIXA16 *);
void __cdecl Phy_NextFrame(struct C3Phy *,int);
void __cdecl Phy_Prepare(void);
bool __cdecl Phy_ProbeIntersection(struct C3Phy *,struct D3DXVECTOR3 const &,struct D3DXVECTOR3 const &,float &);
int __cdecl Phy_Save(char *,struct C3Phy *,int);
void __cdecl Phy_SetBlendFrame(struct C3Phy *,unsigned long);
void __cdecl Phy_SetColor(struct C3Phy *,float,float,float,float);
void __cdecl Phy_SetFluidReflectSpeed(float,float);
void __cdecl Phy_SetFrame(struct C3Phy *,unsigned long);
void __cdecl Phy_SetLight(int,float,float,float,unsigned long,unsigned long,float);
void __cdecl Phy_SetStepCount(struct C3Phy *,unsigned long);
void __cdecl Phy_Unload(struct C3Phy * *);
You can call these functions directly from an application, either using LoadLibrary, or create an import library for it using
dumpbin /EXPORTS, copying the name column into the EXPORTS section of a DEF file and use
lib /DEF:c3_core_dll.def
The parts for converting between C3Phy and DirectX structures (Phy_DrawNormal / Phy_DynamicCreate), and the reading/writing from files (Phy_Load, Phy_Save), is already done for you. If you could find a decent 3dmodelling software for which you can easily create plugins, and uses the same DX structs there, the rest is straightforward.
All that's left then is creating the C3Phy struct. If you know how to interpret a binary file, it aint too difficult, but a bit of trial and error involved.