Game Development Community

TGB to MITT2D Converter

by practicing01 · in Torque 2D Beginner · 08/22/2014 (5:42 am) · 4 replies

I lost my original SceneGraph converter script in a fracked os upgrade. That script parsed the text but as I originally mentioned, there are many ways to go about converting. Here is a better method: a TGB script that outputs the SceneGraph in taml format. It's not perfect and if I come across bugs I'll update. Also not everything is converted, just: sprites, triggers, sceneObjects, scrollers and tileLayers. TileLayers are interpreted as compositeSprites because I couldn't figure out how to make tileMaps in the TGB editor. The script also converts the datablocks into taml assets. www.dropbox.com/s/xebg7ai10wyslom/Convert_To_MITT2D.cs?dl=0 Code tag seems to mess up some formating like the tab and double quote characters, so don't copy/paste it, download from dropbox or here: pastebin.com/q458LThN

function Convert_Assets()
{
   
   %SimSet_DataBlocks=getT2DDatablockSet();
   
   for (%x=0;%x<%SimSet_DataBlocks.getCount();%x++)
   {
      
      %DataBlock=%SimSet_DataBlocks.getObject(%x);
      
      if (%DataBlock.getDatablockClassName()$="t2dImageMapDatablock")
      {
         
         %FileStreamObject_File=new FileStreamObject();
   
         %FileStreamObject_File.open("~/assets/images/"@%DataBlock.getName()@".asset.taml","write");
   
         %FileStreamObject_File.writeLine("<ImageAsset");
         
         %FileStreamObject_File.writeLine("\t" @ "AssetName=\"" @ %DataBlock.getName() @ "\"");
         
         %FileStreamObject_File.writeLine("\t" @ "ImageFile=\"" @ fileName(%DataBlock.getSrcBitmapName()) @ "\"");
         
         if (%DataBlock.getImageMapMode()$="CELL")
         {
            
            %FileStreamObject_File.writeLine("\t" @ "CellCountX=\"" @ %DataBlock.cellCountX @ "\"");
         
            %FileStreamObject_File.writeLine("\t" @ "CellCountY=\"" @ %DataBlock.cellCountY @ "\"");
         
            %FileStreamObject_File.writeLine("\t" @ "CellWidth=\"" @ %DataBlock.cellWidth @ "\"");
         
            %FileStreamObject_File.writeLine("\t" @ "CellHeight=\"" @ %DataBlock.cellHeight @ "\"");
         
         }
         
         %FileStreamObject_File.writeLine("/>");
   
         %FileStreamObject_File.close();
   
      }      
      else if (%DataBlock.getDatablockClassName()$="t2dAnimationDatablock")
      {
         
         %FileStreamObject_File=new FileStreamObject();
   
         %FileStreamObject_File.open("~/assets/animations/" @ %DataBlock.getName() @ ".asset.taml","write");
   
         %FileStreamObject_File.writeLine("<AnimationAsset");
         
         %FileStreamObject_File.writeLine("\t" @ "AssetName=\"" @ %DataBlock.getName() @ "\"");
         
         %FileStreamObject_File.writeLine("\t" @ "Image=\"@asset=ModuleName:" @ %DataBlock.imageMap @ "\"");
         
         %FileStreamObject_File.writeLine("\t" @ "AnimationFrames=\"" @ %DataBlock.animationFrames @ "\"");
         
         %FileStreamObject_File.writeLine("\t" @ "AnimationCycle=\"" @ %DataBlock.AnimationCycle @ "\"");
         
         %FileStreamObject_File.writeLine("\t" @ "AnimationTime=\"" @ %DataBlock.animationTime @ "\"");
         
         %FileStreamObject_File.writeLine("/>");
   
         %FileStreamObject_File.close();
   
      }
      
   }
   
}

function Convert_Default_Fields(%FileObject_File,%Object,%Bool_Close_Angle_Brackets)
{
   
   if (%Object.Immovable)
   {
      
      %FileObject_File.writeLine("\t\t" @ "BodyType=\"static\"");
      
   }
   else
   {
      
      %FileObject_File.writeLine("\t\t" @ "BodyType=\"dynamic\"");
      
   }
   
   %FileObject_File.writeLine("\t\t" @ "class=\"" @ %Object.class @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "Visible=\"" @ %Object.Visible @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "Lifetime=\"" @ %Object.Lifetime @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "Position=\"" @ %Object.Position.X SPC %Object.Position.Y*-1 @ "\"");//Flip Y
   
   %FileObject_File.writeLine("\t\t" @ "Size=\"" @ %Object.Size @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "Angle=\"" @ %Object.Rotation @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "FlipX=\"" @ %Object.FlipX @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "FlipY=\"" @ %Object.FlipY @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "SceneLayer=\"" @ %Object.Layer @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "SceneGroup=\"" @ %Object.GraphGroup @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "CollisionGroups=\"" @ %Object.CollisionGroups @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "CollisionLayers=\"" @ %Object.CollisionLayers @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "CollisionCallback=\"" @ %Object.CollisionCallback @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "BlendColor=\"" @ %Object.BlendColor @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "LinearVelocity=\"" @ %Object.LinearVelocity @ "\"");
   
   %String_Line="\t\t" @ "AngularVelocity=\"" @ %Object.AngularVelocity @ "\"";
   
   if (%Object.getDynamicFieldCount()==0&&%Bool_Close_Angle_Brackets)
   {
      
      %String_Line=%String_Line SPC "/>";
      
   }
   else if (%Object.getDynamicFieldCount()==0&&!%Bool_Close_Angle_Brackets)
   {
      
      %String_Line=%String_Line SPC ">";
      
   }
   
   %FileObject_File.writeLine(%String_Line);
   
   //Dynamic fields.
   
   for (%x=0;%x<%Object.getDynamicFieldCount();%x++)
   {
      
      %String_Line="\t\t" @ %Object.getDynamicField(%x) @ "=\"" @ %Object.getFieldValue(%Object.getDynamicField(%x)) @ "\"";
      
      if (%x==%Object.getDynamicFieldCount()-1&&%Bool_Close_Angle_Brackets)
      {
         
         %String_Line=%String_Line SPC "/>";
         
      }
      else if (%x==%Object.getDynamicFieldCount()-1&&!%Bool_Close_Angle_Brackets)
      {
         
         %String_Line=%String_Line SPC ">";
         
      }
      
      %FileObject_File.writeLine(%String_Line);
      
   }
   
}

function Convert_Scroller(%FileObject_File,%Object)
{
   
   %FileObject_File.writeLine("\t<Scroller");
   
   %FileObject_File.writeLine("\t\t" @ "Image=\"@asset=ModuleName:" @ %Object.imageMap @ "\"");

   %FileObject_File.writeLine("\t\t" @ "repeatX=\"" @ %Object.repeatX @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "repeatY=\"" @ %Object.repeatY @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "scrollX=\"" @ %Object.scrollX @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "scrollY=\"" @ %Object.scrollY @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "scrollPositionX=\"" @ %Object.scrollPositionX @ "\"");
   
   %FileObject_File.writeLine("\t\t" @ "scrollPositionY=\"" @ %Object.scrollPositionY @ "\"");
   
   //Collision shape.
   if (%Object.CollisionPolyList$="")
   {
   
      Convert_Default_Fields(%FileObject_File,%Object,true);

   }
   else
   {
      
      Convert_Default_Fields(%FileObject_File,%Object,false);
      
      %FileObject_File.writeLine("\t\t<Scroller.CollisionShapes>");
      
      %FileObject_File.writeLine("\t\t\t<Polygon");

      %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
      for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
      {
         
         %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
         %Vector2D_Point.Y*=-1;//Flip Y
         
         %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
      }
      
      %FileObject_File.writeLine("\t\t\t</Polygon>");

      %FileObject_File.writeLine("\t\t</Scroller.CollisionShapes>");
      
      %FileObject_File.writeLine("\t</Scroller>");
   
   }
   
}

function Convert_SceneObject(%FileObject_File,%Object)
{
   
   %FileObject_File.writeLine("\t<SceneObject");

   //Collision shape.
   if (%Object.CollisionPolyList$="")
   {
   
      Convert_Default_Fields(%FileObject_File,%Object,true);

   }
   else
   {
      
      Convert_Default_Fields(%FileObject_File,%Object,false);
      
      %FileObject_File.writeLine("\t\t<SceneObject.CollisionShapes>");
      
      %FileObject_File.writeLine("\t\t\t<Polygon");

      %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
      for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
      {
         
         %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
         %Vector2D_Point.Y*=-1;//Flip Y
         
         %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
      }
      
      %FileObject_File.writeLine("\t\t\t</Polygon>");

      %FileObject_File.writeLine("\t\t</SceneObject.CollisionShapes>");
      
      %FileObject_File.writeLine("\t</SceneObject>");
   
   }
   
}

function Convert_Trigger(%FileObject_File,%Object)
{
   
   %FileObject_File.writeLine("\t<Trigger");
   
   %FileObject_File.writeLine("\t\t" @ "EnterCallback=\"" @ %Object.EnterCallback @ "\"");

   %FileObject_File.writeLine("\t\t" @ "StayCallback=\"" @ %Object.StayCallback @ "\"");

   %FileObject_File.writeLine("\t\t" @ "LeaveCallback=\"" @ %Object.LeaveCallback @ "\"");

   //Collision shape.
   if (%Object.CollisionPolyList$="")
   {
   
      Convert_Default_Fields(%FileObject_File,%Object,true);

   }
   else
   {
      
      Convert_Default_Fields(%FileObject_File,%Object,false);
      
      %FileObject_File.writeLine("\t\t<Trigger.CollisionShapes>");
      
      %FileObject_File.writeLine("\t\t\t<Polygon");

      %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
      for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
      {
         
         %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
         %Vector2D_Point.Y*=-1;//Flip Y
         
         %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
      }
      
      %FileObject_File.writeLine("\t\t\t</Polygon>");

      %FileObject_File.writeLine("\t\t</Trigger.CollisionShapes>");
      
      %FileObject_File.writeLine("\t</Trigger>");
   
   }
   
}

function Convert_AnimatedSprite(%FileObject_File,%Object)
{
   
   %FileObject_File.writeLine("\t<Sprite");
   
   %FileObject_File.writeLine("\t\t" @ "Animation=\"@asset=ModuleName:" @ %Object.animationName @ "\"");

   //Collision shape.
   if (%Object.CollisionPolyList$="")
   {
   
      Convert_Default_Fields(%FileObject_File,%Object,true);

   }
   else
   {
      
      Convert_Default_Fields(%FileObject_File,%Object,false);
      
      %FileObject_File.writeLine("\t\t<Sprite.CollisionShapes>");
      
      %FileObject_File.writeLine("\t\t\t<Polygon");

      %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
      for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
      {
         
         %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
         %Vector2D_Point.Y*=-1;//Flip Y
         
         %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
      }
      
      %FileObject_File.writeLine("\t\t\t</Polygon>");

      %FileObject_File.writeLine("\t\t</Sprite.CollisionShapes>");
      
      %FileObject_File.writeLine("\t</Sprite>");
   
   }
   
}

function Convert_StaticSprite(%FileObject_File,%Object)
{
   
   %FileObject_File.writeLine("\t<Sprite");
   
   %FileObject_File.writeLine("\t\t" @ "Image=\"@asset=ModuleName:" @ %Object.imageMap@"\"");

   %FileObject_File.writeLine("\t\t" @ "frame=\"" @ %Object.frame @ "\"");

   //Collision shape.
   if (%Object.CollisionPolyList$="")
   {
   
      Convert_Default_Fields(%FileObject_File,%Object,true);

   }
   else
   {
      
      Convert_Default_Fields(%FileObject_File,%Object,false);
      
      %FileObject_File.writeLine("\t\t<Sprite.CollisionShapes>");
      
      %FileObject_File.writeLine("\t\t\t<Polygon");

      %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
      for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
      {
         
         %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
         %Vector2D_Point.Y*=-1;//Flip Y
         
         %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
      }
      
      %FileObject_File.writeLine("\t\t\t</Polygon>");

      %FileObject_File.writeLine("\t\t</Sprite.CollisionShapes>");
      
      %FileObject_File.writeLine("\t</Sprite>");
   
   }
   
}

function Convert_TileLayer(%FileObject_File,%Object)
{
   
   %Vector2D_TileCount=%Object.getTileCount();
   
   %Vector2D_TileSize=%Object.getTileSize();
   
   %Vector2D_TileSize_Half=%Vector2D_TileSize.X*0.5 SPC %Vector2D_TileSize.Y*0.5;
   
   %Vector2D_LayerSize=%Vector2D_TileSize.X*%Vector2D_TileCount.X SPC %Vector2D_TileSize.Y*%Vector2D_TileCount.Y;
   
   %Vector2D_LayerSize_Half=%Vector2D_LayerSize.X*0.5 SPC %Vector2D_LayerSize.Y*0.5;
   
   %FileObject_File.writeLine("\t<CompositeSprite");
   
   %FileObject_File.writeLine("\t\t" @ "BatchIsolated=\"1\"");

   %FileObject_File.writeLine("\t\t" @ "BatchSortMode=\"Z\"");

   Convert_Default_Fields(%FileObject_File,%Object,false);
   
   //Collision shape.
   %FileObject_File.writeLine("\t\t<CompositeSprite.CollisionShapes>");
      
   %FileObject_File.writeLine("\t\t\t<Polygon");

   %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
   for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
   {
         
      %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
      %Vector2D_Point.Y*=-1;//Flip Y
         
      %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
   }
      
   %FileObject_File.writeLine("\t\t\t</Polygon>");

   %FileObject_File.writeLine("\t\t</CompositeSprite.CollisionShapes>");

   %FileObject_File.writeLine("\t\t" @ "<CompositeSprite.Sprites>");

   for (%y=0;%y<%Vector2D_TileCount.Y;%y++)
   {
            
      for (%x=0;%x<%Vector2D_TileCount.X;%x++)
      {
               
         %StringType_Type=%Object.getTileType(%x,%y);
               
         if (%StringType_Type!$="")
         {

            %FileObject_File.writeLine("\t\t\t" @ "<Sprite");
            
            if (getWord(%StringType_Type,0)$="static")
            {
               
               %FileObject_File.writeLine("\t\t\t\t" @ "Image=\"ModuleName:" @ getWord(%StringType_Type,1) @ "\"");

               %FileObject_File.writeLine("\t\t\t\t" @ "Frame=\"" @ getWord(%StringType_Type,2) @ "\"");
               
            }
            else
            {
               
               %FileObject_File.writeLine("\t\t\t\t" @ "Animation=\"ModuleName:" @ getWord(%StringType_Type,1) @ "\"");
               
            }
            
            %Vector2D_Position=%x*%Vector2D_TileSize.X SPC %y*%Vector2D_TileSize.Y;
            
            %Vector2D_Position=%Vector2D_Position.X-%Vector2D_LayerSize_Half.X SPC %Vector2D_Position.Y-%Vector2D_LayerSize_Half.Y;
            
            %Vector2D_Position=%Vector2D_Position.X+%Vector2D_TileSize_Half.X SPC %Vector2D_Position.Y+%Vector2D_TileSize_Half.Y;
            
            %FileObject_File.writeLine("\t\t\t\t" @ "Position=\"" @ %Vector2D_Position @ "\"");

            %FileObject_File.writeLine("\t\t\t\t" @ "Size=\"" @ %Vector2D_TileSize @ "\"" SPC "/>");

         }
      }
         
   }

   %FileObject_File.writeLine("\t\t" @ "</CompositeSprite.Sprites>");

   %FileObject_File.writeLine("\t</CompositeSprite>");

}

function Convert_Path(%FileObject_File,%Object)
{//Object: mount id, start node, end node, speed, move forward, orient to path, rotation offset, loops, follow mode

   for (%x=0;%x<%Object.getAttachedObjectCount();%x++)
   {
      
      echo(%Object.getAttachedObject(%x));
      
   }
   
   %FileObject_File.writeLine("\t<SceneObject");

   //Collision shape.
   if (%Object.CollisionPolyList$="")
   {
   
      Convert_Default_Fields(%FileObject_File,%Object,true);

   }
   else
   {
      
      Convert_Default_Fields(%FileObject_File,%Object,false);
      
      %FileObject_File.writeLine("\t\t<SceneObject.CollisionShapes>");
      
      %FileObject_File.writeLine("\t\t\t<Polygon");

      %FileObject_File.writeLine("\t\t\t\tSensor=\"" @ !%Object.CollisionActiveSend @ "\">");
      
      for (%x=0;%x<getWordCount(%Object.CollisionPolyList);%x+=2)
      {
         
         %Vector2D_Point=getWord(%Object.CollisionPolyList,%x)*(%Object.Size.X*0.5) SPC getWord(%Object.CollisionPolyList,%x+1)*(%Object.Size.Y*0.5);
         
         %Vector2D_Point.Y*=-1;//Flip Y
         
         %FileObject_File.writeLine("\t\t\t\t<Point>" @ %Vector2D_Point @ "</Point>");
         
      }
      
      %FileObject_File.writeLine("\t\t\t</Polygon>");

      %FileObject_File.writeLine("\t\t</SceneObject.CollisionShapes>");
      
      %FileObject_File.writeLine("\t</SceneObject>");
   
   }
   
}

function Convert_To_MITT2D()
{
   
   %FileStreamObject_File=new FileStreamObject();
   
   %FileStreamObject_File.open("~/Scene.scene.taml","write");
   
   %FileStreamObject_File.writeLine("<Scene>");
   
   for (%x=0;%x<t2dSceneGraph_SceneGraph.getCount();%x++)
   {
      
      %Object=t2dSceneGraph_SceneGraph.getObject(%x);

      if (%Object.getClassName()$="t2dTileLayer")
      {
         
         Convert_TileLayer(%FileStreamObject_File,%Object);
         
      }
      else if (%Object.getClassName()$="t2dStaticSprite")
      {
         
         Convert_StaticSprite(%FileStreamObject_File,%Object);
         
      }
      else if (%Object.getClassName()$="t2dAnimatedSprite")
      {
         
         Convert_AnimatedSprite(%FileStreamObject_File,%Object);
         
      }
      else if (%Object.getClassName()$="t2dTrigger")
      {
         
         Convert_Trigger(%FileStreamObject_File,%Object);
         
      }
      else if (%Object.getClassName()$="t2dSceneObject")
      {
         
         Convert_SceneObject(%FileStreamObject_File,%Object);
         
      }
      else if (%Object.getClassName()$="t2dScroller")
      {
         
         Convert_Scroller(%FileStreamObject_File,%Object);
         
      }
      else if (%Object.getClassName()$="t2dPath")
      {
         
         //Convert_Path(%FileStreamObject_File,%Object);
         
      }
      
      
   }
   
   %FileStreamObject_File.writeLine("</Scene>");
   
   %FileStreamObject_File.close();
   
   Convert_Assets();
   
}
Edit: 9/7/14 nano bug fix.

#2
08/22/2014 (9:43 am)
Looking forward to testing this out. Great job!
#3
08/22/2014 (3:55 pm)
Awesome! Too close to Ludum Dare 30 to test out just yet but I will definitely play around with this next week!
#4
08/23/2014 (9:20 am)
Bump cus I updated with collision shapes now being converted.

warriorcatsrpg.com/awards/22516-mini.jpg?0