public static String makeSkinFile(MD3_File md3_file){
    if( md3_file == null )
      return ""; 
    StringBuilder sb = new StringBuilder();
    String md3_file_name = md3_file.file.getName();
    
    String skin_file_name = md3_file_name.split("[.]")[0] + ".skin";

    sb.append("//.................... skin file ....................");
    sb.append("// .skin: "+skin_file_name);
    sb.append("//");
    sb.append("// .md3: "+md3_file.file);
    sb.append("//");
    MD3_TagFrame tag_frames[] = md3_file.tag_frames;
    if( tag_frames != null && tag_frames.length >= 1){
      sb.append("// tags");
      MD3_Tag tags[] = tag_frames[0].tags;
      if( tags != null ){
        for(int i = 0; i < tags.length; i++){
          sb.append(tags[i].STR_NAME+",");
        }
      }
    }
    sb.append("");
    sb.append("// surfaces/shaders ");
    MD3_Surface md3_surfaces[] = md3_file.surfaces;
    for(int i = 0; i < md3_surfaces.length; i++){
      String surface_name = md3_surfaces[i].STR_NAME;
      MD3_Shader md3_shaders[] = md3_surfaces[i].shaders;
      for(int j = 0; j <  md3_shaders.length; j++){
        String shader_name = md3_shaders[j].STR_NAME;
        shader_name = shader_name.replaceAll("\0", "");
        if(shader_name.startsWith("odels")) shader_name = "m"+shader_name;
        sb.append(surface_name +", "+shader_name );
      }
      if( md3_shaders.length == 0)
        sb.append(surface_name +", (undefined texture)" );
    }
    sb.append("");
    sb.append("//.................... skin file ....................");
    return sb.toString();
  }