소스 검색

FontAsset

Created a FontAsset that takes the name of a bitmap font file.  The
FontAsset parses the file and loads the textures.
Peter Robinson 9 년 전
부모
커밋
f39be09c24

+ 6 - 0
engine/compilers/VisualStudio 2013/Torque 2D.vcxproj

@@ -240,6 +240,7 @@
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\2d\assets\AnimationAsset.cc" />
     <ClCompile Include="..\..\source\2d\assets\AnimationAsset.cc" />
+    <ClCompile Include="..\..\source\2d\assets\FontAsset.cc" />
     <ClCompile Include="..\..\source\2d\assets\ImageAsset.cc" />
     <ClCompile Include="..\..\source\2d\assets\ImageAsset.cc" />
     <ClCompile Include="..\..\source\2d\assets\ParticleAsset.cc" />
     <ClCompile Include="..\..\source\2d\assets\ParticleAsset.cc" />
     <ClCompile Include="..\..\source\2d\assets\ParticleAssetEmitter.cc" />
     <ClCompile Include="..\..\source\2d\assets\ParticleAssetEmitter.cc" />
@@ -297,6 +298,7 @@
     <ClCompile Include="..\..\source\audio\AudioAsset.cc" />
     <ClCompile Include="..\..\source\audio\AudioAsset.cc" />
     <ClCompile Include="..\..\source\audio\audio_ScriptBinding.cc" />
     <ClCompile Include="..\..\source\audio\audio_ScriptBinding.cc" />
     <ClCompile Include="..\..\source\audio\vorbisStreamSource.cc" />
     <ClCompile Include="..\..\source\audio\vorbisStreamSource.cc" />
+    <ClCompile Include="..\..\source\bitmapFont\BitmapFont.cc" />
     <ClCompile Include="..\..\source\Box2D\Collision\b2BroadPhase.cpp" />
     <ClCompile Include="..\..\source\Box2D\Collision\b2BroadPhase.cpp" />
     <ClCompile Include="..\..\source\Box2D\Collision\b2CollideCircle.cpp" />
     <ClCompile Include="..\..\source\Box2D\Collision\b2CollideCircle.cpp" />
     <ClCompile Include="..\..\source\Box2D\Collision\b2CollideEdge.cpp" />
     <ClCompile Include="..\..\source\Box2D\Collision\b2CollideEdge.cpp" />
@@ -652,6 +654,8 @@
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\2d\assets\AnimationAsset.h" />
     <ClInclude Include="..\..\source\2d\assets\AnimationAsset.h" />
     <ClInclude Include="..\..\source\2d\assets\AnimationAsset_ScriptBinding.h" />
     <ClInclude Include="..\..\source\2d\assets\AnimationAsset_ScriptBinding.h" />
+    <ClInclude Include="..\..\source\2d\assets\FontAsset.h" />
+    <ClInclude Include="..\..\source\2d\assets\FontAsset_ScriptBinding.h" />
     <ClInclude Include="..\..\source\2d\assets\ImageAsset.h" />
     <ClInclude Include="..\..\source\2d\assets\ImageAsset.h" />
     <ClInclude Include="..\..\source\2d\assets\ImageAsset_ScriptBinding.h" />
     <ClInclude Include="..\..\source\2d\assets\ImageAsset_ScriptBinding.h" />
     <ClInclude Include="..\..\source\2d\assets\ParticleAsset.h" />
     <ClInclude Include="..\..\source\2d\assets\ParticleAsset.h" />
@@ -758,6 +762,8 @@
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedVisitor.h" />
     <ClInclude Include="..\..\source\assets\tamlAssetReferencedVisitor.h" />
     <ClInclude Include="..\..\source\audio\AudioAsset.h" />
     <ClInclude Include="..\..\source\audio\AudioAsset.h" />
     <ClInclude Include="..\..\source\audio\vorbisStreamSource.h" />
     <ClInclude Include="..\..\source\audio\vorbisStreamSource.h" />
+    <ClInclude Include="..\..\source\bitmapFont\BitmapFont.h" />
+    <ClInclude Include="..\..\source\bitmapFont\BitmapFontCharacter.h" />
     <ClInclude Include="..\..\source\Box2D\Box2D.h" />
     <ClInclude Include="..\..\source\Box2D\Box2D.h" />
     <ClInclude Include="..\..\source\Box2D\Collision\b2BroadPhase.h" />
     <ClInclude Include="..\..\source\Box2D\Collision\b2BroadPhase.h" />
     <ClInclude Include="..\..\source\Box2D\Collision\b2Collision.h" />
     <ClInclude Include="..\..\source\Box2D\Collision\b2Collision.h" />

+ 21 - 0
engine/compilers/VisualStudio 2013/Torque 2D.vcxproj.filters

@@ -199,6 +199,9 @@
     <Filter Include="spine">
     <Filter Include="spine">
       <UniqueIdentifier>{bb776838-ed6f-477c-b366-dd0c5c60ae5f}</UniqueIdentifier>
       <UniqueIdentifier>{bb776838-ed6f-477c-b366-dd0c5c60ae5f}</UniqueIdentifier>
     </Filter>
     </Filter>
+    <Filter Include="bitmapFont">
+      <UniqueIdentifier>{f2c8da8c-5c32-48ef-b5ab-0b27a9fe28d3}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\source\audio\audio.cc">
     <ClCompile Include="..\..\source\audio\audio.cc">
@@ -1428,6 +1431,12 @@
     <ClCompile Include="..\..\source\audio\vorbisStreamSource.cc">
     <ClCompile Include="..\..\source\audio\vorbisStreamSource.cc">
       <Filter>audio</Filter>
       <Filter>audio</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\source\2d\assets\FontAsset.cc">
+      <Filter>2d\assets</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\source\bitmapFont\BitmapFont.cc">
+      <Filter>bitmapFont</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\source\audio\audio.h">
     <ClInclude Include="..\..\source\audio\audio.h">
@@ -3159,6 +3168,18 @@
     <ClInclude Include="..\..\source\platformWin32\winVersion.h">
     <ClInclude Include="..\..\source\platformWin32\winVersion.h">
       <Filter>platformWin32</Filter>
       <Filter>platformWin32</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\source\2d\assets\FontAsset.h">
+      <Filter>2d\assets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\2d\assets\FontAsset_ScriptBinding.h">
+      <Filter>2d\assets</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\bitmapFont\BitmapFont.h">
+      <Filter>bitmapFont</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\source\bitmapFont\BitmapFontCharacter.h">
+      <Filter>bitmapFont</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">
     <CustomBuild Include="..\..\source\math\mMath_ASM.asm">

+ 275 - 0
engine/source/2d/assets/FontAsset.cc

@@ -0,0 +1,275 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+#ifndef _CONSOLE_H_
+#include "console/console.h"
+#endif
+
+#ifndef _CONSOLEINTERNAL_H_
+#include "console/consoleInternal.h"
+#endif
+
+#ifndef _GBITMAP_H_
+#include "graphics/gBitmap.h"
+#endif
+
+#ifndef _UTILITY_H_
+#include "2d/core/Utility.h"
+#endif
+
+#ifndef _SCENE_OBJECT_H_
+#include "2d/sceneobject/SceneObject.h"
+#endif
+
+#ifndef _FONT_ASSET_H_
+#include "2d/assets/FontAsset.h"
+#endif
+
+// Script bindings.
+#include "FontAsset_ScriptBinding.h"
+
+//------------------------------------------------------------------------------
+
+IMPLEMENT_CONOBJECT(FontAsset);
+
+//------------------------------------------------------------------------------
+
+ConsoleType( FontAssetPtr, TypeFontAssetPtr, sizeof(AssetPtr<FontAsset>), ASSET_ID_FIELD_PREFIX )
+
+//-----------------------------------------------------------------------------
+
+ConsoleGetType( TypeFontAssetPtr )
+{
+    // Fetch asset Id.
+    return (*((AssetPtr<FontAsset>*)dptr)).getAssetId();
+}
+
+//-----------------------------------------------------------------------------
+
+ConsoleSetType( TypeFontAssetPtr )
+{
+    // Was a single argument specified?
+    if( argc == 1 )
+    {
+        // Yes, so fetch field value.
+        const char* pFieldValue = argv[0];
+
+        // Fetch asset pointer.
+        AssetPtr<FontAsset>* pAssetPtr = dynamic_cast<AssetPtr<FontAsset>*>((AssetPtrBase*)(dptr));
+
+        // Is the asset pointer the correct type?
+        if (pAssetPtr == NULL )
+        {
+            // No, so fail.
+            Con::warnf( "(TypeFontAssetPtr) - Failed to set asset Id '%d'.", pFieldValue );
+            return;
+        }
+
+        // Set asset.
+        pAssetPtr->setAssetId( pFieldValue );
+
+        return;
+   }
+
+    // Warn.
+    Con::warnf( "(TypeFontAssetPtr) - Cannot set multiple args to a single asset." );
+}
+
+
+//------------------------------------------------------------------------------
+
+FontAsset::FontAsset() :    mFontFile(StringTable->EmptyString),
+                                    mBitmapFont()
+{
+}
+
+//------------------------------------------------------------------------------
+
+FontAsset::~FontAsset()
+{
+    
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::initPersistFields()
+{
+    // Call parent.
+    Parent::initPersistFields();
+
+    // Fields.
+    addProtectedField("FontFile", TypeAssetLooseFilePath, Offset(mFontFile, FontAsset), &setFontFile, &defaultProtectedGetFn, &writeFontFile, "The loose file pointing to a .fnt file");
+}
+
+//------------------------------------------------------------------------------
+
+bool FontAsset::onAdd()
+{
+    // Call Parent.
+    if (!Parent::onAdd())
+       return false;
+
+    return true;
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::onRemove()
+{
+    // Call Parent.
+    Parent::onRemove();
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::setFontFile( const char* pFontFile )
+{
+    // Sanity!
+    AssertFatal( pFontFile != NULL, "Cannot use a NULL Font file." );
+
+    // Fetch Font file.
+    pFontFile = StringTable->insert( pFontFile );
+
+    // Ignore no change.
+    if (pFontFile == mFontFile )
+        return;
+
+    // Update.
+    mFontFile = getOwned() ? expandAssetFilePath( pFontFile ) : StringTable->insert( pFontFile );
+
+    // Refresh the asset.
+    refreshAsset();
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::copyTo(SimObject* object)
+{
+    // Call to parent.
+    Parent::copyTo(object);
+
+    // Cast to asset.
+    FontAsset* pAsset = static_cast<FontAsset*>(object);
+
+    // Sanity!
+    AssertFatal(pAsset != NULL, "FontAsset::copyTo() - Object is not the correct type.");
+
+    // Copy state.
+    pAsset->setFontFile( getFontFile() );
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::initializeAsset( void )
+{
+    // Call parent.
+    Parent::initializeAsset();
+
+    // Ensure the Font file is expanded.
+    mFontFile = expandAssetFilePath( mFontFile );
+
+    // Build the Font data
+    buildFontData();
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::onAssetRefresh( void )
+{
+    // Ignore if not yet added to the sim.
+    if (!isProperlyAdded() )
+        return;
+
+    // Call parent.
+    Parent::onAssetRefresh();
+
+    buildFontData();
+}
+
+//-----------------------------------------------------------------------------
+
+void FontAsset::buildFontData( void )
+{
+   FileStream fStream;
+
+   if (!fStream.open(mFontFile, FileStream::Read))
+   {
+      Con::printf("Failed to open file '%s'.", expandAssetFilePath(mFontFile));
+      return;
+   }
+
+   mBitmapFont.mPageName.clear();
+   mBitmapFont.parseFont(fStream);
+
+   fStream.close();
+
+   //load the images
+   mBitmapFont.mTexture.clear();
+   for (auto iter = mBitmapFont.mPageName.begin(); iter != mBitmapFont.mPageName.end(); iter++)
+   {
+      mBitmapFont.mTexture.push_back(mBitmapFont.LoadTexture(expandAssetFilePath(*iter)));
+   }
+}
+
+//-----------------------------------------------------------------------------
+
+void FontAsset::onTamlPreWrite( void )
+{
+    // Call parent.
+    Parent::onTamlPreWrite();
+
+    // Ensure the Font file is collapsed.
+    mFontFile = collapseAssetFilePath( mFontFile );
+}
+
+//-----------------------------------------------------------------------------
+
+void FontAsset::onTamlPostWrite( void )
+{
+    // Call parent.
+    Parent::onTamlPostWrite();
+
+    // Ensure the Font file is expanded.
+    mFontFile = expandAssetFilePath( mFontFile );
+}
+
+//------------------------------------------------------------------------------
+
+void FontAsset::onTamlCustomWrite( TamlCustomNodes& customNodes )
+{
+    // Debug Profiling.
+    PROFILE_SCOPE(FontAsset_OnTamlCustomWrite);
+
+    // Call parent.
+    Parent::onTamlCustomWrite( customNodes );
+}
+
+//-----------------------------------------------------------------------------
+
+void FontAsset::onTamlCustomRead( const TamlCustomNodes& customNodes )
+{
+    // Debug Profiling.
+    PROFILE_SCOPE(FontAsset_OnTamlCustomRead);
+
+    // Call parent.
+    Parent::onTamlCustomRead( customNodes );
+}

+ 91 - 0
engine/source/2d/assets/FontAsset.h

@@ -0,0 +1,91 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+#ifndef _FONT_ASSET_H_
+#define _FONT_ASSET_H_
+
+#ifndef _ASSET_PTR_H_
+#include "assets/assetPtr.h"
+#endif
+
+#ifndef _IMAGE_ASSET_H_
+#include "2d/assets/ImageAsset.h"
+#endif
+
+#ifndef _BITMAP_FONT_H_
+#include "bitmapFont/BitmapFont.h"
+#endif
+
+//-----------------------------------------------------------------------------
+
+DefineConsoleType(TypeFontAssetPtr)
+
+//-----------------------------------------------------------------------------
+
+using namespace font;
+
+class FontAsset : public AssetBase
+{
+private:
+    typedef AssetBase Parent;
+
+public:
+    StringTableEntry                mFontFile;
+    AssetPtr<ImageAsset>            mImageAsset;
+    BitmapFont                      mBitmapFont;
+
+public:
+    FontAsset();
+    virtual ~FontAsset();
+
+    /// Core.
+    static void initPersistFields();
+    virtual bool onAdd();
+    virtual void onRemove();
+    virtual void copyTo(SimObject* object);
+
+    void                    setFontFile( const char* pFontFile );
+    inline StringTableEntry getFontFile( void ) const                   { return mFontFile; }
+
+    /// Declare Console Object.
+    DECLARE_CONOBJECT(FontAsset);
+
+private:
+    void buildFontData( void );
+
+protected:
+    virtual void initializeAsset( void );
+    virtual void onAssetRefresh( void );
+
+    /// Taml callbacks.
+    virtual void onTamlPreWrite( void );
+    virtual void onTamlPostWrite( void );
+    virtual void onTamlCustomWrite( TamlCustomNodes& customNodes );
+    virtual void onTamlCustomRead( const TamlCustomNodes& customNodes );
+
+
+protected:
+    static bool setFontFile( void* obj, const char* data )              { static_cast<FontAsset*>(obj)->setFontFile(data); return false; }
+    static bool writeFontFile( void* obj, StringTableEntry pFieldName ) { return static_cast<FontAsset*>(obj)->getFontFile() != StringTable->EmptyString; }
+};
+
+#endif // _FONT_ASSET_H_

+ 47 - 0
engine/source/2d/assets/FontAsset_ScriptBinding.h

@@ -0,0 +1,47 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+ConsoleMethodGroupBeginWithDocs(FontAsset, AssetBase)
+
+//------------------------------------------------------------------------------
+
+/*! Sets the Font file.
+    @return No return value.
+*/
+ConsoleMethodWithDocs(FontAsset, setFontFile, ConsoleVoid, 3, 3, (FontFile))
+{
+    object->setFontFile( argv[2] );
+}
+
+//-----------------------------------------------------------------------------
+
+/*! Gets the Font file.
+    @return Returns the Font file.
+*/
+ConsoleMethodWithDocs(FontAsset, getFontFile, ConsoleString, 2, 2, ())
+{
+    return object->getFontFile();
+}
+
+//------------------------------------------------------------------------------
+
+ConsoleMethodGroupEndWithDocs(FontAsset)

+ 276 - 0
engine/source/bitmapFont/BitmapFont.cc

@@ -0,0 +1,276 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+#ifndef _BITMAP_FONT_H_
+#include "bitmapFont/BitmapFont.h"
+#endif
+
+#ifndef _STRING_UNIT_H_
+#include "string/stringUnit.h"
+#endif
+
+#include <string>
+
+namespace font
+{
+   BitmapFont::BitmapFont()
+   {
+
+   }
+
+   bool BitmapFont::parseFont(Stream& io_rStream)
+   {
+      U32 numBytes = io_rStream.getStreamSize() - io_rStream.getPosition();
+      while ((io_rStream.getStatus() != Stream::EOS) && numBytes > 0)
+      {
+         char Read[256];
+         char Token[256];
+         char *buffer = Con::getReturnBuffer(256);
+         io_rStream.readLine((U8 *)buffer, 256);
+
+         char temp[256];
+         U32 tokenCount = StringUnit::getUnitCount(buffer, "\"");
+
+         if (tokenCount > 1)
+         {
+            dSprintf(Token, 256, "%s", StringUnit::getUnit(buffer, 1, "\""));
+            dSprintf(temp, 256, "tok1");
+            dSprintf(buffer, 256, "%s", (char*)StringUnit::setUnit(buffer, 1, temp, "\""));
+         }
+
+         U32 wordCount = StringUnit::getUnitCount(buffer, " \t\n");
+
+         dSprintf(Read, 256, "%s", StringUnit::getUnit(buffer, 0, " \t\n"));
+         if (dStrcmp(Read, "info") == 0)
+         {
+            U32 currentWordCount = 1;
+            while (currentWordCount < wordCount)
+            {
+               dSprintf(Read, 256, StringUnit::getUnit(buffer, currentWordCount, " \t\n"));
+               char temp[256];
+               char Key[256];
+               char Value[256];
+
+               dSprintf(temp, 256, "%s", Read);
+               dSprintf(Key, 256, "%s", StringUnit::getUnit(temp, 0, "="));
+               dSprintf(Value, 256, "%s", StringUnit::getUnit(temp, 1, "="));
+
+               if (dStrcmp(Value, "\"tok1\"") == 0) {
+                  dSprintf(Value, 256, "%s", Token);
+               }
+
+               if (dStrcmp(Key, "size") == 0)
+                  mSize = U16(dAtoi(Value));
+               currentWordCount++;
+            }
+         }
+         if (dStrcmp(Read, "common") == 0)
+         {
+            //this holds common data
+            U32 currentWordCount = 1;
+            while (currentWordCount < wordCount)
+            {
+               dSprintf(Read, 256, "%s", StringUnit::getUnit(buffer, currentWordCount, " \t\n"));
+               char temp[256];
+               char Key[256];
+               char Value[256];
+
+               dSprintf(temp, 256, "%s", Read);
+               dSprintf(Key, 256, "%s", StringUnit::getUnit(temp, 0, "="));
+               dSprintf(Value, 256, "%s", StringUnit::getUnit(temp, 1, "="));
+
+               if (dStrcmp(Value, "\"tok1\"") == 0) {
+                  dSprintf(Value, 256, "%s", Token);
+               }
+
+               if (dStrcmp(Key, "lineHeight") == 0)
+                  mLineHeight = U16(dAtoi(Value));
+               else if (dStrcmp(Key, "base") == 0)
+                  mBaseline = U16(dAtoi(Value));
+               else if (dStrcmp(Key, "scaleW") == 0)
+                  mWidth = U16(dAtoi(Value));
+               else if (dStrcmp(Key, "scaleH") == 0)
+                  mHeight = U16(dAtoi(Value));
+               else if (dStrcmp(Key, "pages") == 0)
+                  mPages = U16(dAtoi(Value));
+               currentWordCount++;
+            }
+            mAscent = mBaseline;
+            mDescent = mHeight - mBaseline;
+         }
+         else if (dStrcmp(Read, "page") == 0)
+         {
+            //this is data for a page
+            U32 currentWordCount = 1;
+            while (currentWordCount < wordCount)
+            {
+               dSprintf(Read, 256, "%s", StringUnit::getUnit(buffer, currentWordCount, " \t\n"));
+               char temp[256];
+               char Key[256];
+               char Value[256];
+
+               dSprintf(temp, 256, "%s", Read);
+               dSprintf(Key, 256, "%s", StringUnit::getUnit(temp, 0, "="));
+               dSprintf(Value, 256, "%s", StringUnit::getUnit(temp, 1, "="));
+
+               if (dStrcmp(Value, "\"tok1\"") == 0) {
+                  dSprintf(Value, 256, "%s", Token);
+               }
+
+               //assign the correct value
+               if (dStrcmp(Key, "file") == 0)
+               {
+                  mPageName.push_back(StringTable->insert(Value));
+               }
+
+               currentWordCount++;
+            }
+         }
+         else if (dStrcmp(Read, "char") == 0 && dStrcmp(Read, "chars") != 0)
+         {
+            //this is data for a character
+            BitmapFontCharacter ci;
+            U16 CharID = 0;
+            U32 currentWordCount = 1;
+            while (currentWordCount < wordCount)
+            {
+               dSprintf(Read, 256, "%s", StringUnit::getUnit(buffer, currentWordCount, " \t\n"));
+               char temp[256];
+               char Key[256];
+               char Value[256];
+
+
+               dSprintf(temp, 256, "%s", Read);
+               dSprintf(Key, 256, "%s", StringUnit::getUnit(temp, 0, "="));
+               dSprintf(Value, 256, "%s", StringUnit::getUnit(temp, 1, "="));
+
+               if (dStrcmp(Value, "\"tok1\"") == 0) {
+                  dSprintf(Value, 256, "%s", Token);
+               }
+
+               //assign the correct value
+               if (dStrcmp(Key, "id") == 0)
+                  CharID = U32(dAtoi(Value));
+               else if (dStrcmp(Key, "x") == 0)
+                  ci.mX = U32(dAtoi(Value));
+               else if (dStrcmp(Key, "y") == 0)
+                  ci.mY = U32(dAtoi(Value));
+               else if (dStrcmp(Key, "width") == 0)
+                  ci.mWidth = U32(dAtoi(Value));
+               else if (dStrcmp(Key, "height") == 0)
+                  ci.mHeight = U32(dAtoi(Value));
+               else if (dStrcmp(Key, "xoffset") == 0)
+                  ci.mXOffset = F32(dAtoi(Value));
+               else if (dStrcmp(Key, "yoffset") == 0)
+                  ci.mYOffset = F32(dAtoi(Value));
+               else if (dStrcmp(Key, "xadvance") == 0)
+                  ci.mXAdvance = F32(dAtoi(Value));
+               else if (dStrcmp(Key, "page") == 0)
+                  ci.mPage = S32(dAtoi(Value));
+               currentWordCount++;
+            }
+            mChar.emplace(CharID, ci);
+         }
+         else if (dStrcmp(Read, "kerning") == 0 && dStrcmp(Read, "kernings") != 0)
+         {
+            //this is data for a kerning pair
+            U16 first = 0;
+            U16 second = 0;
+            S16 amount = 0;
+            U32 currentWordCount = 1;
+            while (currentWordCount < wordCount)
+            {
+               dSprintf(Read, 256, "%s", StringUnit::getUnit(buffer, currentWordCount, " \t\n"));
+               char temp[256];
+               char Key[256];
+               char Value[256];
+
+
+               dSprintf(temp, 256, "%s", Read);
+               dSprintf(Key, 256, "%s", StringUnit::getUnit(temp, 0, "="));
+               dSprintf(Value, 256, "%s", StringUnit::getUnit(temp, 1, "="));
+
+               if (dStrcmp(Value, "\"tok1\"") == 0) {
+                  dSprintf(Value, 256, "%s", Token);
+               }
+
+               //assign the correct value
+               if (dStrcmp(Key, "first") == 0)
+                  first = U16(dAtoi(Value));
+               else if (dStrcmp(Key, "second") == 0)
+                  second = U16(dAtoi(Value));
+               else if (dStrcmp(Key, "amount") == 0)
+                  amount = S16(dAtoi(Value));
+               
+               currentWordCount++;
+            }
+            AddKerning(first, second, amount);
+         }
+      }
+
+      /*for (U32 i = 0; i < mPages; i++)
+      {
+         char buf[1024];
+         dSprintf(buf, sizeof(buf), "%s/%s", Con::getVariable("$GUI::fontCacheDirectory"), fileName);
+         Con::printf("Platform::makeFullPathName %s", buf);
+
+         GBitmap *bmp = dynamic_cast<GBitmap*>(ResourceManager->loadInstance(buf));
+
+         if (bmp == NULL)
+         {
+            return false;
+         }
+
+         char buff[30];
+         dSprintf(buff, sizeof(buff), "font_%d", smSheetIdCount++);
+
+         mTextureSheets.increment();
+         constructInPlace(&mTextureSheets.last());
+         mTextureSheets.last() = TextureHandle(buf, bmp, TextureHandle::BitmapKeepTexture);
+         mTextureSheets.last().setFilter(GL_NEAREST);
+      }*/
+      return (io_rStream.getStatus() == Stream::EOS);
+   }
+
+   TextureHandle BitmapFont::LoadTexture(StringTableEntry fileName)
+   {
+      // Debug Profiling.
+      PROFILE_SCOPE(FontAsset_LoadTexture);
+
+      // Get image texture.
+      TextureHandle mImageTextureHandle;
+      mImageTextureHandle.set(fileName, TextureHandle::BitmapTexture, true, false);
+
+      // Is the texture valid?
+      if (mImageTextureHandle.IsNull())
+      {
+         // No, so warn.
+         Con::warnf("FontAsset could not load texture '%s'.", fileName);
+         return mImageTextureHandle;
+      }
+
+      //Set the filter mode. For now we'll just support bilinear. In the future we should give the user an option.
+      mImageTextureHandle.setFilter(GL_LINEAR);
+
+      return mImageTextureHandle;
+   }
+}

+ 73 - 0
engine/source/bitmapFont/BitmapFont.h

@@ -0,0 +1,73 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+#ifndef _BITMAP_FONT_H_
+#define _BITMAP_FONT_H_
+
+#ifndef _BITMAP_FONT_CHARACTER_H_
+#include "bitmapFont\BitmapFontCharacter.h"
+#endif
+
+#ifndef _UTILITY_H_
+#include "2d/core/utility.h"
+#endif
+
+#ifndef _TEXTURE_MANAGER_H_
+#include "graphics/TextureManager.h"
+#endif
+
+using namespace std;
+#include <map>
+#include <string>
+#include <vector>
+using KerningMap = map<pair<U16, U16>, S16>;
+using CharacterMap = map<U16, font::BitmapFontCharacter>;
+
+namespace font
+{
+   class BitmapFont
+   {
+   private:
+      U16 mLineHeight;
+      U16 mBaseline;
+      U16 mSize;
+      U16 mAscent, mDescent;
+      U16 mWidth, mHeight;
+      U16 mPages;
+
+      CharacterMap mChar;       
+      KerningMap mKerning;
+
+   public:
+      std::vector<StringTableEntry> mPageName;
+      std::vector<TextureHandle> mTexture;
+
+      BitmapFont();
+      bool parseFont(Stream& io_rStream);
+      TextureHandle LoadTexture(StringTableEntry fileName);
+
+   private:
+      inline void AddKerning(U16 first, U16 second, S16 amount) { mKerning[make_pair(first, second)] = amount; }
+   };
+}
+
+#endif // _BITMAP_FONT_H_

+ 47 - 0
engine/source/bitmapFont/BitmapFontCharacter.h

@@ -0,0 +1,47 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 GarageGames, LLC
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+//-----------------------------------------------------------------------------
+
+#ifndef _BITMAP_FONT_CHARACTER_H_
+#define _BITMAP_FONT_CHARACTER_H_
+
+#ifndef _UTILITY_H_
+#include "2d/core/utility.h"
+#endif
+
+namespace font
+{
+   struct BitmapFontCharacter
+   {
+      U16 mX, mY;
+      U16 mWidth, mHeight;
+      F32 mXOffset, mYOffset;
+      F32 mXAdvance;
+      U16 mPage;
+
+      BitmapFontCharacter() : mX(0), mY(0), mWidth(0), mHeight(0), mXOffset(0), mYOffset(0), mXAdvance(0), mPage(0)
+      {
+
+      }
+   };
+}
+
+#endif // _BITMAP_FONT_CHARACTER_H_

+ 3 - 0
modules/ToyAssets/1/assets/fonts/Arial.asset.taml

@@ -0,0 +1,3 @@
+<FontAsset
+    AssetName="ArialFont"
+    FontFile="Arial.fnt" />

+ 195 - 0
modules/ToyAssets/1/assets/fonts/Arial.fnt

@@ -0,0 +1,195 @@
+info face="Arial" size=128 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
+common lineHeight=128 base=103 scaleW=512 scaleH=512 pages=2 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
+page id=0 file="Arial_0.png"
+page id=1 file="Arial_1.png"
+chars count=97
+char id=32   x=507   y=0     width=3     height=1     xoffset=-1    yoffset=127   xadvance=32    page=0  chnl=15
+char id=33   x=491   y=358   width=14    height=82    xoffset=8     yoffset=21    xadvance=29    page=0  chnl=15
+char id=34   x=275   y=227   width=32    height=29    xoffset=4     yoffset=21    xadvance=40    page=1  chnl=15
+char id=35   x=128   y=83    width=62    height=82    xoffset=0     yoffset=21    xadvance=63    page=1  chnl=15
+char id=36   x=321   y=0     width=55    height=97    xoffset=3     yoffset=17    xadvance=63    page=0  chnl=15
+char id=37   x=54    y=108   width=89    height=84    xoffset=6     yoffset=20    xadvance=101   page=0  chnl=15
+char id=38   x=74    y=193   width=70    height=84    xoffset=4     yoffset=20    xadvance=76    page=0  chnl=15
+char id=39   x=308   y=227   width=13    height=29    xoffset=4     yoffset=21    xadvance=22    page=1  chnl=15
+char id=40   x=243   y=0     width=28    height=105   xoffset=6     yoffset=21    xadvance=38    page=0  chnl=15
+char id=41   x=213   y=0     width=29    height=105   xoffset=6     yoffset=21    xadvance=38    page=0  chnl=15
+char id=42   x=471   y=166   width=38    height=35    xoffset=3     yoffset=21    xadvance=44    page=1  chnl=15
+char id=43   x=112   y=248   width=56    height=54    xoffset=6     yoffset=36    xadvance=67    page=1  chnl=15
+char id=44   x=322   y=227   width=13    height=27    xoffset=9     yoffset=93    xadvance=32    page=1  chnl=15
+char id=45   x=399   y=175   width=32    height=10    xoffset=3     yoffset=68    xadvance=38    page=0  chnl=15
+char id=46   x=442   y=259   width=13    height=10    xoffset=10    yoffset=93    xadvance=32    page=0  chnl=15
+char id=47   x=471   y=0     width=34    height=82    xoffset=-1    yoffset=21    xadvance=32    page=1  chnl=15
+char id=48   x=0     y=279   width=55    height=83    xoffset=4     yoffset=21    xadvance=63    page=0  chnl=15
+char id=49   x=50    y=166   width=31    height=82    xoffset=12    yoffset=21    xadvance=63    page=1  chnl=15
+char id=50   x=248   y=83    width=55    height=82    xoffset=3     yoffset=21    xadvance=63    page=1  chnl=15
+char id=51   x=56    y=279   width=55    height=83    xoffset=4     yoffset=21    xadvance=63    page=0  chnl=15
+char id=52   x=94    y=166   width=57    height=81    xoffset=1     yoffset=22    xadvance=63    page=1  chnl=15
+char id=53   x=304   y=83    width=55    height=82    xoffset=4     yoffset=22    xadvance=63    page=1  chnl=15
+char id=54   x=112   y=278   width=55    height=83    xoffset=4     yoffset=21    xadvance=63    page=0  chnl=15
+char id=55   x=152   y=166   width=54    height=81    xoffset=5     yoffset=22    xadvance=63    page=1  chnl=15
+char id=56   x=442   y=175   width=55    height=83    xoffset=4     yoffset=21    xadvance=63    page=0  chnl=15
+char id=57   x=168   y=278   width=55    height=83    xoffset=4     yoffset=21    xadvance=63    page=0  chnl=15
+char id=58   x=495   y=441   width=13    height=60    xoffset=10    yoffset=43    xadvance=32    page=0  chnl=15
+char id=59   x=207   y=166   width=13    height=77    xoffset=9     yoffset=43    xadvance=32    page=1  chnl=15
+char id=60   x=0     y=249   width=55    height=55    xoffset=6     yoffset=35    xadvance=67    page=1  chnl=15
+char id=61   x=219   y=244   width=55    height=35    xoffset=6     yoffset=45    xadvance=67    page=1  chnl=15
+char id=62   x=56    y=249   width=55    height=55    xoffset=6     yoffset=35    xadvance=67    page=1  chnl=15
+char id=63   x=224   y=278   width=54    height=83    xoffset=4     yoffset=20    xadvance=63    page=0  chnl=15
+char id=64   x=0     y=0     width=106   height=107   xoffset=6     yoffset=20    xadvance=116   page=0  chnl=15
+char id=65   x=109   y=363   width=78    height=82    xoffset=-1    yoffset=21    xadvance=76    page=0  chnl=15
+char id=66   x=64    y=83    width=63    height=82    xoffset=8     yoffset=21    xadvance=76    page=1  chnl=15
+char id=67   x=0     y=194   width=73    height=84    xoffset=5     yoffset=20    xadvance=82    page=0  chnl=15
+char id=68   x=0     y=0     width=69    height=82    xoffset=8     yoffset=21    xadvance=82    page=1  chnl=15
+char id=69   x=0     y=83    width=63    height=82    xoffset=8     yoffset=21    xadvance=76    page=1  chnl=15
+char id=70   x=191   y=83    width=56    height=82    xoffset=9     yoffset=21    xadvance=70    page=1  chnl=15
+char id=71   x=399   y=90    width=78    height=84    xoffset=5     yoffset=20    xadvance=89    page=0  chnl=15
+char id=72   x=139   y=0     width=66    height=82    xoffset=8     yoffset=21    xadvance=82    page=1  chnl=15
+char id=73   x=498   y=167   width=12    height=82    xoffset=10    yoffset=21    xadvance=32    page=0  chnl=15
+char id=74   x=460   y=0     width=46    height=83    xoffset=3     yoffset=21    xadvance=57    page=0  chnl=15
+char id=75   x=70    y=0     width=68    height=82    xoffset=8     yoffset=21    xadvance=76    page=1  chnl=15
+char id=76   x=360   y=83    width=52    height=82    xoffset=8     yoffset=21    xadvance=63    page=1  chnl=15
+char id=77   x=424   y=275   width=79    height=82    xoffset=8     yoffset=21    xadvance=95    page=0  chnl=15
+char id=78   x=340   y=0     width=65    height=82    xoffset=8     yoffset=21    xadvance=82    page=1  chnl=15
+char id=79   x=318   y=106   width=80    height=84    xoffset=5     yoffset=20    xadvance=89    page=0  chnl=15
+char id=80   x=406   y=0     width=64    height=82    xoffset=8     yoffset=21    xadvance=76    page=1  chnl=15
+char id=81   x=377   y=0     width=82    height=89    xoffset=4     yoffset=20    xadvance=89    page=0  chnl=15
+char id=82   x=417   y=359   width=73    height=82    xoffset=8     yoffset=21    xadvance=82    page=0  chnl=15
+char id=83   x=145   y=193   width=67    height=84    xoffset=4     yoffset=20    xadvance=76    page=0  chnl=15
+char id=84   x=206   y=0     width=66    height=82    xoffset=3     yoffset=21    xadvance=71    page=1  chnl=15
+char id=85   x=375   y=191   width=66    height=83    xoffset=8     yoffset=21    xadvance=82    page=0  chnl=15
+char id=86   x=265   y=362   width=76    height=82    xoffset=0     yoffset=21    xadvance=76    page=0  chnl=15
+char id=87   x=0     y=363   width=108   height=82    xoffset=1     yoffset=21    xadvance=110   page=0  chnl=15
+char id=88   x=188   y=362   width=76    height=82    xoffset=0     yoffset=21    xadvance=77    page=0  chnl=15
+char id=89   x=342   y=360   width=74    height=82    xoffset=0     yoffset=21    xadvance=75    page=0  chnl=15
+char id=90   x=273   y=0     width=66    height=82    xoffset=2     yoffset=21    xadvance=70    page=1  chnl=15
+char id=91   x=272   y=0     width=24    height=105   xoffset=7     yoffset=21    xadvance=32    page=0  chnl=15
+char id=92   x=464   y=83    width=34    height=82    xoffset=-1    yoffset=21    xadvance=32    page=1  chnl=15
+char id=93   x=297   y=0     width=23    height=105   xoffset=2     yoffset=21    xadvance=32    page=0  chnl=15
+char id=94   x=169   y=248   width=49    height=44    xoffset=2     yoffset=20    xadvance=53    page=1  chnl=15
+char id=95   x=418   y=227   width=68    height=7     xoffset=-3    yoffset=119   xadvance=63    page=1  chnl=15
+char id=96   x=396   y=227   width=21    height=16    xoffset=5     yoffset=21    xadvance=38    page=1  chnl=15
+char id=97   x=58    y=446   width=56    height=62    xoffset=3     yoffset=42    xadvance=63    page=0  chnl=15
+char id=98   x=333   y=276   width=52    height=83    xoffset=7     yoffset=21    xadvance=63    page=0  chnl=15
+char id=99   x=172   y=446   width=53    height=62    xoffset=4     yoffset=42    xadvance=57    page=0  chnl=15
+char id=100  x=279   y=276   width=53    height=83    xoffset=3     yoffset=21    xadvance=63    page=0  chnl=15
+char id=101  x=115   y=446   width=56    height=62    xoffset=3     yoffset=42    xadvance=63    page=0  chnl=15
+char id=102  x=386   y=275   width=37    height=83    xoffset=0     yoffset=20    xadvance=32    page=0  chnl=15
+char id=103  x=0     y=108   width=53    height=85    xoffset=3     yoffset=42    xadvance=63    page=0  chnl=15
+char id=104  x=0     y=166   width=49    height=82    xoffset=7     yoffset=21    xadvance=63    page=1  chnl=15
+char id=105  x=82    y=166   width=11    height=82    xoffset=7     yoffset=21    xadvance=25    page=1  chnl=15
+char id=106  x=188   y=0     width=24    height=106   xoffset=-6    yoffset=21    xadvance=25    page=0  chnl=15
+char id=107  x=413   y=83    width=50    height=82    xoffset=7     yoffset=21    xadvance=57    page=1  chnl=15
+char id=108  x=499   y=83    width=12    height=82    xoffset=6     yoffset=21    xadvance=25    page=1  chnl=15
+char id=109  x=277   y=445   width=82    height=61    xoffset=7     yoffset=42    xadvance=95    page=0  chnl=15
+char id=110  x=411   y=443   width=49    height=61    xoffset=7     yoffset=42    xadvance=63    page=0  chnl=15
+char id=111  x=0     y=446   width=57    height=62    xoffset=3     yoffset=42    xadvance=63    page=0  chnl=15
+char id=112  x=322   y=191   width=52    height=84    xoffset=7     yoffset=42    xadvance=63    page=0  chnl=15
+char id=113  x=268   y=191   width=53    height=84    xoffset=3     yoffset=42    xadvance=63    page=0  chnl=15
+char id=114  x=461   y=442   width=33    height=61    xoffset=7     yoffset=42    xadvance=38    page=0  chnl=15
+char id=115  x=226   y=445   width=50    height=62    xoffset=3     yoffset=42    xadvance=57    page=0  chnl=15
+char id=116  x=478   y=84    width=31    height=82    xoffset=1     yoffset=22    xadvance=32    page=0  chnl=15
+char id=117  x=360   y=443   width=50    height=61    xoffset=6     yoffset=43    xadvance=63    page=0  chnl=15
+char id=118  x=360   y=166   width=55    height=60    xoffset=1     yoffset=43    xadvance=57    page=1  chnl=15
+char id=119  x=221   y=166   width=81    height=60    xoffset=0     yoffset=43    xadvance=81    page=1  chnl=15
+char id=120  x=303   y=166   width=56    height=60    xoffset=0     yoffset=43    xadvance=56    page=1  chnl=15
+char id=121  x=213   y=193   width=54    height=84    xoffset=1     yoffset=43    xadvance=55    page=0  chnl=15
+char id=122  x=416   y=166   width=54    height=60    xoffset=1     yoffset=43    xadvance=57    page=1  chnl=15
+char id=123  x=107   y=0     width=34    height=107   xoffset=2     yoffset=20    xadvance=38    page=0  chnl=15
+char id=124  x=176   y=0     width=11    height=107   xoffset=9     yoffset=21    xadvance=29    page=0  chnl=15
+char id=125  x=142   y=0     width=33    height=107   xoffset=2     yoffset=20    xadvance=38    page=0  chnl=15
+char id=126  x=336   y=227   width=59    height=21    xoffset=4     yoffset=54    xadvance=67    page=1  chnl=15
+char id=169  x=231   y=106   width=86    height=84    xoffset=-1    yoffset=20    xadvance=84    page=0  chnl=15
+char id=174  x=144   y=108   width=86    height=84    xoffset=-1    yoffset=20    xadvance=84    page=0  chnl=15
+kernings count=92
+kerning first=32  second=65  amount=-6  
+kerning first=32  second=84  amount=-2  
+kerning first=32  second=89  amount=-2  
+kerning first=121 second=46  amount=-9  
+kerning first=121 second=44  amount=-9  
+kerning first=119 second=46  amount=-6  
+kerning first=119 second=44  amount=-6  
+kerning first=118 second=46  amount=-9  
+kerning first=118 second=44  amount=-9  
+kerning first=114 second=46  amount=-6  
+kerning first=49  second=49  amount=-9  
+kerning first=65  second=32  amount=-6  
+kerning first=65  second=84  amount=-9  
+kerning first=65  second=86  amount=-9  
+kerning first=65  second=87  amount=-4  
+kerning first=65  second=89  amount=-9  
+kerning first=65  second=118 amount=-2  
+kerning first=65  second=119 amount=-2  
+kerning first=65  second=121 amount=-2  
+kerning first=114 second=44  amount=-6  
+kerning first=70  second=44  amount=-13 
+kerning first=70  second=46  amount=-13 
+kerning first=70  second=65  amount=-6  
+kerning first=76  second=32  amount=-4  
+kerning first=76  second=84  amount=-9  
+kerning first=76  second=86  amount=-9  
+kerning first=76  second=87  amount=-9  
+kerning first=76  second=89  amount=-9  
+kerning first=76  second=121 amount=-4  
+kerning first=102 second=102 amount=-2  
+kerning first=80  second=32  amount=-2  
+kerning first=80  second=44  amount=-15 
+kerning first=80  second=46  amount=-15 
+kerning first=80  second=65  amount=-9  
+kerning first=82  second=84  amount=-2  
+kerning first=82  second=86  amount=-2  
+kerning first=82  second=87  amount=-2  
+kerning first=82  second=89  amount=-2  
+kerning first=84  second=32  amount=-2  
+kerning first=84  second=44  amount=-13 
+kerning first=84  second=45  amount=-6  
+kerning first=84  second=46  amount=-13 
+kerning first=84  second=58  amount=-13 
+kerning first=89  second=118 amount=-6  
+kerning first=84  second=65  amount=-9  
+kerning first=84  second=79  amount=-2  
+kerning first=84  second=97  amount=-13 
+kerning first=84  second=99  amount=-13 
+kerning first=84  second=101 amount=-13 
+kerning first=84  second=105 amount=-4  
+kerning first=84  second=111 amount=-13 
+kerning first=84  second=114 amount=-4  
+kerning first=84  second=115 amount=-13 
+kerning first=84  second=117 amount=-4  
+kerning first=84  second=119 amount=-6  
+kerning first=84  second=121 amount=-6  
+kerning first=86  second=44  amount=-11 
+kerning first=86  second=45  amount=-6  
+kerning first=86  second=46  amount=-11 
+kerning first=86  second=58  amount=-4  
+kerning first=89  second=117 amount=-6  
+kerning first=86  second=65  amount=-9  
+kerning first=86  second=97  amount=-9  
+kerning first=86  second=101 amount=-6  
+kerning first=86  second=105 amount=-2  
+kerning first=86  second=111 amount=-6  
+kerning first=86  second=114 amount=-4  
+kerning first=86  second=117 amount=-4  
+kerning first=86  second=121 amount=-4  
+kerning first=87  second=44  amount=-6  
+kerning first=87  second=45  amount=-2  
+kerning first=87  second=46  amount=-6  
+kerning first=87  second=58  amount=-2  
+kerning first=89  second=113 amount=-11 
+kerning first=87  second=65  amount=-4  
+kerning first=87  second=97  amount=-4  
+kerning first=87  second=101 amount=-2  
+kerning first=89  second=112 amount=-9  
+kerning first=87  second=111 amount=-2  
+kerning first=87  second=114 amount=-2  
+kerning first=87  second=117 amount=-2  
+kerning first=87  second=121 amount=-1  
+kerning first=89  second=32  amount=-2  
+kerning first=89  second=44  amount=-15 
+kerning first=89  second=45  amount=-11 
+kerning first=89  second=46  amount=-15 
+kerning first=89  second=58  amount=-6  
+kerning first=89  second=111 amount=-11 
+kerning first=89  second=65  amount=-9  
+kerning first=89  second=97  amount=-9  
+kerning first=89  second=101 amount=-11 
+kerning first=89  second=105 amount=-4  

BIN
modules/ToyAssets/1/assets/fonts/Arial_0.png


BIN
modules/ToyAssets/1/assets/fonts/Arial_1.png


+ 55 - 0
modules/ToyAssets/1/assets/fonts/Bitmap Font Config.bmfc

@@ -0,0 +1,55 @@
+# AngelCode Bitmap Font Generator configuration file
+fileVersion=1
+
+# font settings
+fontName=Arial
+fontFile=
+charSet=0
+fontSize=128
+aa=1
+scaleH=100
+useSmoothing=1
+isBold=0
+isItalic=0
+useUnicode=1
+disableBoxChars=1
+outputInvalidCharGlyph=0
+dontIncludeKerningPairs=0
+useHinting=1
+renderFromOutline=0
+useClearType=1
+
+# character alignment
+paddingDown=0
+paddingUp=0
+paddingRight=0
+paddingLeft=0
+spacingHoriz=1
+spacingVert=1
+useFixedHeight=0
+forceZero=0
+
+# output file
+outWidth=512
+outHeight=512
+outBitDepth=32
+fontDescFormat=0
+fourChnlPacked=0
+textureFormat=png
+textureCompression=0
+alphaChnl=0
+redChnl=4
+greenChnl=4
+blueChnl=4
+invA=0
+invR=0
+invG=0
+invB=0
+
+# outline
+outlineThickness=0
+
+# selected chars
+chars=32-126,169,174
+
+# imported icon images

+ 102 - 0
modules/ToyAssets/1/assets/fonts/Orator Bold.fnt

@@ -0,0 +1,102 @@
+info face="Orator Std" size=72 bold=1 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
+common lineHeight=72 base=56 scaleW=256 scaleH=256 pages=2 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
+page id=0 file="Orator Bold_0.png"
+page id=1 file="Orator Bold_1.png"
+chars count=97
+char id=32   x=21    y=51    width=3     height=1     xoffset=-1    yoffset=71    xadvance=34    page=0  chnl=15
+char id=33   x=239   y=150   width=8     height=36    xoffset=13    yoffset=20    xadvance=34    page=0  chnl=15
+char id=34   x=52    y=117   width=16    height=14    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=35   x=6     y=0     width=31    height=50    xoffset=2     yoffset=12    xadvance=34    page=0  chnl=15
+char id=36   x=23    y=135   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=37   x=0     y=60    width=26    height=37    xoffset=4     yoffset=19    xadvance=34    page=0  chnl=15
+char id=38   x=0     y=209   width=23    height=30    xoffset=6     yoffset=26    xadvance=34    page=0  chnl=15
+char id=39   x=248   y=150   width=7     height=14    xoffset=14    yoffset=20    xadvance=34    page=0  chnl=15
+char id=40   x=123   y=0     width=13    height=40    xoffset=11    yoffset=20    xadvance=34    page=0  chnl=15
+char id=41   x=137   y=0     width=13    height=40    xoffset=10    yoffset=20    xadvance=34    page=0  chnl=15
+char id=42   x=69    y=154   width=19    height=17    xoffset=8     yoffset=20    xadvance=34    page=0  chnl=15
+char id=43   x=24    y=209   width=31    height=29    xoffset=1     yoffset=23    xadvance=34    page=0  chnl=15
+char id=44   x=90    y=191   width=10    height=12    xoffset=11    yoffset=47    xadvance=34    page=0  chnl=15
+char id=45   x=27    y=89    width=14    height=4     xoffset=10    yoffset=40    xadvance=34    page=0  chnl=15
+char id=46   x=42    y=89    width=7     height=8     xoffset=14    yoffset=48    xadvance=34    page=0  chnl=15
+char id=47   x=38    y=0     width=21    height=42    xoffset=7     yoffset=16    xadvance=34    page=0  chnl=15
+char id=48   x=23    y=172   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=49   x=224   y=76    width=23    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=50   x=0     y=172   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=51   x=232   y=39    width=23    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=52   x=128   y=78    width=23    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=53   x=230   y=113   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=54   x=207   y=114   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=55   x=46    y=135   width=22    height=36    xoffset=8     yoffset=20    xadvance=34    page=0  chnl=15
+char id=56   x=176   y=77    width=23    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=57   x=184   y=114   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=58   x=248   y=76    width=7     height=23    xoffset=14    yoffset=33    xadvance=34    page=0  chnl=15
+char id=59   x=0     y=29    width=10    height=26    xoffset=11    yoffset=33    xadvance=34    page=1  chnl=15
+char id=60   x=151   y=0     width=24    height=39    xoffset=5     yoffset=17    xadvance=34    page=0  chnl=15
+char id=61   x=0     y=240   width=31    height=10    xoffset=2     yoffset=32    xadvance=34    page=0  chnl=15
+char id=62   x=176   y=0     width=24    height=39    xoffset=5     yoffset=17    xadvance=34    page=0  chnl=15
+char id=63   x=69    y=117   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=64   x=121   y=41    width=32    height=36    xoffset=1     yoffset=20    xadvance=34    page=0  chnl=15
+char id=65   x=180   y=40    width=25    height=36    xoffset=5     yoffset=20    xadvance=34    page=0  chnl=15
+char id=66   x=152   y=78    width=23    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=67   x=92    y=117   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=68   x=103   y=78    width=24    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=69   x=176   y=152   width=20    height=36    xoffset=8     yoffset=20    xadvance=34    page=0  chnl=15
+char id=70   x=197   y=151   width=20    height=36    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=71   x=200   y=77    width=23    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=72   x=46    y=172   width=21    height=36    xoffset=7     yoffset=20    xadvance=34    page=0  chnl=15
+char id=73   x=237   y=0     width=16    height=36    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=74   x=218   y=151   width=20    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=75   x=115   y=115   width=22    height=36    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=76   x=68    y=172   width=21    height=36    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=77   x=206   y=39    width=25    height=36    xoffset=5     yoffset=20    xadvance=34    page=0  chnl=15
+char id=78   x=90    y=154   width=21    height=36    xoffset=7     yoffset=20    xadvance=34    page=0  chnl=15
+char id=79   x=161   y=115   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=80   x=134   y=152   width=20    height=36    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=81   x=27    y=51    width=22    height=37    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=82   x=138   y=115   width=22    height=36    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=83   x=112   y=154   width=21    height=36    xoffset=7     yoffset=20    xadvance=34    page=0  chnl=15
+char id=84   x=0     y=135   width=22    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=85   x=155   y=152   width=20    height=36    xoffset=7     yoffset=20    xadvance=34    page=0  chnl=15
+char id=86   x=52    y=80    width=25    height=36    xoffset=5     yoffset=20    xadvance=34    page=0  chnl=15
+char id=87   x=26    y=98    width=25    height=36    xoffset=5     yoffset=20    xadvance=34    page=0  chnl=15
+char id=88   x=0     y=98    width=25    height=36    xoffset=5     yoffset=20    xadvance=34    page=0  chnl=15
+char id=89   x=154   y=40    width=25    height=36    xoffset=5     yoffset=20    xadvance=34    page=0  chnl=15
+char id=90   x=78    y=80    width=24    height=36    xoffset=6     yoffset=20    xadvance=34    page=0  chnl=15
+char id=91   x=219   y=0     width=17    height=38    xoffset=9     yoffset=20    xadvance=34    page=0  chnl=15
+char id=92   x=60    y=0     width=21    height=42    xoffset=7     yoffset=16    xadvance=34    page=0  chnl=15
+char id=93   x=201   y=0     width=17    height=38    xoffset=8     yoffset=20    xadvance=34    page=0  chnl=15
+char id=94   x=11    y=29    width=23    height=18    xoffset=6     yoffset=20    xadvance=34    page=1  chnl=15
+char id=95   x=65    y=239   width=35    height=2     xoffset=0     yoffset=60    xadvance=34    page=0  chnl=15
+char id=96   x=6     y=51    width=14    height=8     xoffset=10    yoffset=18    xadvance=34    page=0  chnl=15
+char id=97   x=132   y=191   width=25    height=28    xoffset=5     yoffset=28    xadvance=34    page=0  chnl=15
+char id=98   x=180   y=218   width=23    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=99   x=204   y=218   width=22    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=100  x=131   y=220   width=24    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=101  x=217   y=0     width=20    height=28    xoffset=8     yoffset=28    xadvance=34    page=1  chnl=15
+char id=102  x=196   y=0     width=20    height=28    xoffset=9     yoffset=28    xadvance=34    page=1  chnl=15
+char id=103  x=156   y=220   width=23    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=104  x=111   y=0     width=21    height=28    xoffset=7     yoffset=28    xadvance=34    page=1  chnl=15
+char id=105  x=238   y=0     width=14    height=28    xoffset=10    yoffset=28    xadvance=34    page=1  chnl=15
+char id=106  x=175   y=0     width=20    height=28    xoffset=6     yoffset=28    xadvance=34    page=1  chnl=15
+char id=107  x=234   y=188   width=21    height=28    xoffset=9     yoffset=28    xadvance=34    page=0  chnl=15
+char id=108  x=89    y=0     width=21    height=28    xoffset=9     yoffset=28    xadvance=34    page=1  chnl=15
+char id=109  x=80    y=209   width=25    height=28    xoffset=5     yoffset=28    xadvance=34    page=0  chnl=15
+char id=110  x=67    y=0     width=21    height=28    xoffset=7     yoffset=28    xadvance=34    page=1  chnl=15
+char id=111  x=227   y=217   width=22    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=112  x=154   y=0     width=20    height=28    xoffset=9     yoffset=28    xadvance=34    page=1  chnl=15
+char id=113  x=56    y=209   width=23    height=29    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=114  x=45    y=0     width=21    height=28    xoffset=8     yoffset=28    xadvance=34    page=1  chnl=15
+char id=115  x=23    y=0     width=21    height=28    xoffset=7     yoffset=28    xadvance=34    page=1  chnl=15
+char id=116  x=0     y=0     width=22    height=28    xoffset=6     yoffset=28    xadvance=34    page=1  chnl=15
+char id=117  x=133   y=0     width=20    height=28    xoffset=7     yoffset=28    xadvance=34    page=1  chnl=15
+char id=118  x=158   y=189   width=25    height=28    xoffset=5     yoffset=28    xadvance=34    page=0  chnl=15
+char id=119  x=106   y=191   width=25    height=28    xoffset=5     yoffset=28    xadvance=34    page=0  chnl=15
+char id=120  x=184   y=189   width=24    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=121  x=209   y=188   width=24    height=28    xoffset=5     yoffset=28    xadvance=34    page=0  chnl=15
+char id=122  x=106   y=220   width=24    height=28    xoffset=6     yoffset=28    xadvance=34    page=0  chnl=15
+char id=123  x=82    y=0     width=20    height=40    xoffset=8     yoffset=20    xadvance=34    page=0  chnl=15
+char id=124  x=0     y=0     width=5     height=59    xoffset=14    yoffset=12    xadvance=34    page=0  chnl=15
+char id=125  x=103   y=0     width=19    height=40    xoffset=8     yoffset=20    xadvance=34    page=0  chnl=15
+char id=126  x=32    y=239   width=32    height=9     xoffset=2     yoffset=32    xadvance=34    page=0  chnl=15
+char id=169  x=86    y=41    width=34    height=36    xoffset=0     yoffset=20    xadvance=34    page=0  chnl=15
+char id=174  x=50    y=43    width=35    height=36    xoffset=0     yoffset=20    xadvance=34    page=0  chnl=15

BIN
modules/ToyAssets/1/assets/fonts/Orator Bold_0.png


BIN
modules/ToyAssets/1/assets/fonts/Orator Bold_1.png


+ 770 - 0
modules/ToyAssets/1/assets/fonts/Trajan Pro.fnt

@@ -0,0 +1,770 @@
+info face="Trajan Pro" size=128 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=2
+common lineHeight=128 base=102 scaleW=1024 scaleH=1024 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
+page id=0 file="Trajan Pro_0.png"
+chars count=95
+char id=32   x=1015  y=532   width=7     height=132   xoffset=-3    yoffset=-2    xadvance=33    page=0  chnl=15
+char id=33   x=395   y=665   width=15    height=132   xoffset=9     yoffset=-2    xadvance=33    page=0  chnl=15
+char id=34   x=262   y=665   width=27    height=132   xoffset=3     yoffset=-2    xadvance=33    page=0  chnl=15
+char id=35   x=440   y=399   width=57    height=132   xoffset=1     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=36   x=658   y=532   width=47    height=132   xoffset=6     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=37   x=257   y=133   width=83    height=132   xoffset=3     yoffset=-2    xadvance=89    page=0  chnl=15
+char id=38   x=724   y=0     width=88    height=132   xoffset=3     yoffset=-2    xadvance=79    page=0  chnl=15
+char id=39   x=427   y=665   width=14    height=132   xoffset=3     yoffset=-2    xadvance=20    page=0  chnl=15
+char id=40   x=233   y=665   width=28    height=132   xoffset=4     yoffset=-2    xadvance=37    page=0  chnl=15
+char id=41   x=204   y=665   width=28    height=132   xoffset=5     yoffset=-2    xadvance=37    page=0  chnl=15
+char id=42   x=988   y=0     width=34    height=132   xoffset=1     yoffset=-2    xadvance=36    page=0  chnl=15
+char id=43   x=560   y=532   width=48    height=132   xoffset=2     yoffset=-2    xadvance=52    page=0  chnl=15
+char id=44   x=411   y=665   width=15    height=132   xoffset=5     yoffset=-2    xadvance=25    page=0  chnl=15
+char id=45   x=0     y=665   width=38    height=132   xoffset=1     yoffset=-2    xadvance=40    page=0  chnl=15
+char id=46   x=378   y=665   width=16    height=132   xoffset=5     yoffset=-2    xadvance=25    page=0  chnl=15
+char id=47   x=382   y=399   width=57    height=132   xoffset=0     yoffset=-2    xadvance=56    page=0  chnl=15
+char id=48   x=725   y=399   width=54    height=132   xoffset=2     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=49   x=974   y=532   width=40    height=132   xoffset=9     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=50   x=613   y=399   width=55    height=132   xoffset=1     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=51   x=260   y=532   width=50    height=132   xoffset=4     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=52   x=323   y=399   width=58    height=132   xoffset=-1    yoffset=-2    xadvance=58    page=0  chnl=15
+char id=53   x=609   y=532   width=48    height=132   xoffset=5     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=54   x=889   y=399   width=53    height=132   xoffset=3     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=55   x=53    y=532   width=52    height=132   xoffset=6     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=56   x=0     y=532   width=52    height=132   xoffset=3     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=57   x=971   y=266   width=52    height=132   xoffset=3     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=58   x=361   y=665   width=16    height=132   xoffset=5     yoffset=-2    xadvance=25    page=0  chnl=15
+char id=59   x=344   y=665   width=16    height=132   xoffset=5     yoffset=-2    xadvance=25    page=0  chnl=15
+char id=60   x=362   y=532   width=49    height=132   xoffset=0     yoffset=-2    xadvance=52    page=0  chnl=15
+char id=61   x=462   y=532   width=48    height=132   xoffset=2     yoffset=-2    xadvance=52    page=0  chnl=15
+char id=62   x=511   y=532   width=48    height=132   xoffset=2     yoffset=-2    xadvance=52    page=0  chnl=15
+char id=63   x=932   y=532   width=41    height=132   xoffset=5     yoffset=-2    xadvance=50    page=0  chnl=15
+char id=64   x=172   y=133   width=84    height=132   xoffset=4     yoffset=-2    xadvance=92    page=0  chnl=15
+char id=65   x=425   y=133   width=83    height=132   xoffset=-5    yoffset=-2    xadvance=71    page=0  chnl=15
+char id=66   x=264   y=399   width=58    height=132   xoffset=7     yoffset=-2    xadvance=70    page=0  chnl=15
+char id=67   x=386   y=266   width=74    height=132   xoffset=4     yoffset=-2    xadvance=82    page=0  chnl=15
+char id=68   x=341   y=133   width=83    height=132   xoffset=7     yoffset=-2    xadvance=94    page=0  chnl=15
+char id=69   x=158   y=532   width=50    height=132   xoffset=7     yoffset=-2    xadvance=62    page=0  chnl=15
+char id=70   x=209   y=532   width=50    height=132   xoffset=7     yoffset=-2    xadvance=60    page=0  chnl=15
+char id=71   x=592   y=133   width=81    height=132   xoffset=4     yoffset=-2    xadvance=88    page=0  chnl=15
+char id=72   x=0     y=133   width=85    height=132   xoffset=7     yoffset=-2    xadvance=98    page=0  chnl=15
+char id=73   x=110   y=665   width=31    height=132   xoffset=8     yoffset=-2    xadvance=45    page=0  chnl=15
+char id=74   x=39    y=665   width=36    height=132   xoffset=1     yoffset=-2    xadvance=42    page=0  chnl=15
+char id=75   x=756   y=133   width=80    height=132   xoffset=7     yoffset=-2    xadvance=77    page=0  chnl=15
+char id=76   x=835   y=399   width=53    height=132   xoffset=7     yoffset=-2    xadvance=60    page=0  chnl=15
+char id=77   x=520   y=0     width=107   height=132   xoffset=3     yoffset=-2    xadvance=107   page=0  chnl=15
+char id=78   x=813   y=0     width=87    height=132   xoffset=4     yoffset=-2    xadvance=97    page=0  chnl=15
+char id=79   x=86    y=133   width=85    height=132   xoffset=4     yoffset=-2    xadvance=93    page=0  chnl=15
+char id=80   x=669   y=399   width=55    height=132   xoffset=7     yoffset=-2    xadvance=65    page=0  chnl=15
+char id=81   x=0     y=0     width=153   height=132   xoffset=4     yoffset=-2    xadvance=94    page=0  chnl=15
+char id=82   x=509   y=133   width=82    height=132   xoffset=7     yoffset=-2    xadvance=77    page=0  chnl=15
+char id=83   x=799   y=532   width=44    height=132   xoffset=8     yoffset=-2    xadvance=58    page=0  chnl=15
+char id=84   x=829   y=266   width=70    height=132   xoffset=0     yoffset=-2    xadvance=70    page=0  chnl=15
+char id=85   x=674   y=133   width=81    height=132   xoffset=1     yoffset=-2    xadvance=85    page=0  chnl=15
+char id=86   x=901   y=0     width=86    height=132   xoffset=-5    yoffset=-2    xadvance=76    page=0  chnl=15
+char id=87   x=291   y=0     width=120   height=132   xoffset=-4    yoffset=-2    xadvance=112   page=0  chnl=15
+char id=88   x=917   y=133   width=77    height=132   xoffset=-3    yoffset=-2    xadvance=71    page=0  chnl=15
+char id=89   x=837   y=133   width=79    height=132   xoffset=-6    yoffset=-2    xadvance=67    page=0  chnl=15
+char id=90   x=136   y=399   width=64    height=132   xoffset=5     yoffset=-2    xadvance=71    page=0  chnl=15
+char id=91   x=997   y=399   width=26    height=132   xoffset=7     yoffset=-2    xadvance=37    page=0  chnl=15
+char id=92   x=780   y=399   width=54    height=132   xoffset=0     yoffset=-2    xadvance=53    page=0  chnl=15
+char id=93   x=318   y=665   width=25    height=132   xoffset=4     yoffset=-2    xadvance=37    page=0  chnl=15
+char id=94   x=311   y=532   width=50    height=132   xoffset=1     yoffset=-2    xadvance=52    page=0  chnl=15
+char id=95   x=556   y=399   width=56    height=132   xoffset=-2    yoffset=-2    xadvance=51    page=0  chnl=15
+char id=96   x=290   y=665   width=27    height=132   xoffset=28    yoffset=-2    xadvance=93    page=0  chnl=15
+char id=97   x=310   y=266   width=75    height=132   xoffset=-5    yoffset=-2    xadvance=64    page=0  chnl=15
+char id=98   x=943   y=399   width=53    height=132   xoffset=6     yoffset=-2    xadvance=63    page=0  chnl=15
+char id=99   x=69    y=399   width=66    height=132   xoffset=3     yoffset=-2    xadvance=72    page=0  chnl=15
+char id=100  x=461   y=266   width=73    height=132   xoffset=6     yoffset=-2    xadvance=83    page=0  chnl=15
+char id=101  x=706   y=532   width=46    height=132   xoffset=6     yoffset=-2    xadvance=56    page=0  chnl=15
+char id=102  x=753   y=532   width=45    height=132   xoffset=6     yoffset=-2    xadvance=55    page=0  chnl=15
+char id=103  x=756   y=266   width=72    height=132   xoffset=3     yoffset=-2    xadvance=77    page=0  chnl=15
+char id=104  x=233   y=266   width=76    height=132   xoffset=6     yoffset=-2    xadvance=86    page=0  chnl=15
+char id=105  x=995   y=133   width=28    height=132   xoffset=7     yoffset=-2    xadvance=40    page=0  chnl=15
+char id=106  x=76    y=665   width=33    height=132   xoffset=0     yoffset=-2    xadvance=38    page=0  chnl=15
+char id=107  x=683   y=266   width=72    height=132   xoffset=6     yoffset=-2    xadvance=68    page=0  chnl=15
+char id=108  x=412   y=532   width=49    height=132   xoffset=6     yoffset=-2    xadvance=55    page=0  chnl=15
+char id=109  x=628   y=0     width=95    height=132   xoffset=2     yoffset=-2    xadvance=94    page=0  chnl=15
+char id=110  x=78    y=266   width=77    height=132   xoffset=5     yoffset=-2    xadvance=85    page=0  chnl=15
+char id=111  x=156   y=266   width=76    height=132   xoffset=3     yoffset=-2    xadvance=82    page=0  chnl=15
+char id=112  x=106   y=532   width=51    height=132   xoffset=6     yoffset=-2    xadvance=60    page=0  chnl=15
+char id=113  x=154   y=0     width=136   height=132   xoffset=3     yoffset=-2    xadvance=83    page=0  chnl=15
+char id=114  x=609   y=266   width=73    height=132   xoffset=6     yoffset=-2    xadvance=69    page=0  chnl=15
+char id=115  x=889   y=532   width=42    height=132   xoffset=4     yoffset=-2    xadvance=53    page=0  chnl=15
+char id=116  x=201   y=399   width=62    height=132   xoffset=0     yoffset=-2    xadvance=62    page=0  chnl=15
+char id=117  x=535   y=266   width=73    height=132   xoffset=1     yoffset=-2    xadvance=75    page=0  chnl=15
+char id=118  x=0     y=266   width=77    height=132   xoffset=-5    yoffset=-2    xadvance=67    page=0  chnl=15
+char id=119  x=412   y=0     width=107   height=132   xoffset=-4    yoffset=-2    xadvance=99    page=0  chnl=15
+char id=120  x=0     y=399   width=68    height=132   xoffset=-3    yoffset=-2    xadvance=62    page=0  chnl=15
+char id=121  x=900   y=266   width=70    height=132   xoffset=-5    yoffset=-2    xadvance=59    page=0  chnl=15
+char id=122  x=498   y=399   width=57    height=132   xoffset=4     yoffset=-2    xadvance=62    page=0  chnl=15
+char id=123  x=142   y=665   width=30    height=132   xoffset=3     yoffset=-2    xadvance=37    page=0  chnl=15
+char id=124  x=442   y=665   width=10    height=132   xoffset=21    yoffset=-2    xadvance=52    page=0  chnl=15
+char id=125  x=173   y=665   width=30    height=132   xoffset=4     yoffset=-2    xadvance=37    page=0  chnl=15
+char id=126  x=844   y=532   width=44    height=132   xoffset=4     yoffset=-2    xadvance=52    page=0  chnl=15
+kernings count=670
+kerning first=40  second=118 amount=2   
+kerning first=40  second=119 amount=1   
+kerning first=40  second=121 amount=3   
+kerning first=123 second=121 amount=3   
+kerning first=123 second=119 amount=1   
+kerning first=65  second=77  amount=3   
+kerning first=65  second=83  amount=1   
+kerning first=65  second=84  amount=-7  
+kerning first=65  second=86  amount=-8  
+kerning first=65  second=87  amount=-5  
+kerning first=65  second=88  amount=1   
+kerning first=65  second=89  amount=-5  
+kerning first=65  second=109 amount=2   
+kerning first=65  second=115 amount=1   
+kerning first=65  second=116 amount=-7  
+kerning first=65  second=118 amount=-7  
+kerning first=65  second=119 amount=-4  
+kerning first=65  second=120 amount=1   
+kerning first=65  second=121 amount=-5  
+kerning first=123 second=118 amount=2   
+kerning first=122 second=113 amount=-3  
+kerning first=122 second=111 amount=-3  
+kerning first=122 second=103 amount=-3  
+kerning first=122 second=99  amount=-3  
+kerning first=122 second=97  amount=-1  
+kerning first=121 second=125 amount=3   
+kerning first=121 second=120 amount=1   
+kerning first=66  second=65  amount=-1  
+kerning first=66  second=66  amount=-2  
+kerning first=66  second=68  amount=-2  
+kerning first=66  second=69  amount=-2  
+kerning first=66  second=70  amount=-2  
+kerning first=66  second=72  amount=-2  
+kerning first=66  second=73  amount=-2  
+kerning first=66  second=75  amount=-2  
+kerning first=66  second=76  amount=-2  
+kerning first=66  second=78  amount=-2  
+kerning first=66  second=80  amount=-2  
+kerning first=66  second=82  amount=-2  
+kerning first=66  second=86  amount=-4  
+kerning first=66  second=87  amount=-2  
+kerning first=66  second=89  amount=-3  
+kerning first=66  second=97  amount=-1  
+kerning first=66  second=98  amount=-2  
+kerning first=66  second=100 amount=-2  
+kerning first=66  second=101 amount=-2  
+kerning first=66  second=102 amount=-2  
+kerning first=66  second=104 amount=-2  
+kerning first=66  second=105 amount=-2  
+kerning first=66  second=107 amount=-2  
+kerning first=66  second=108 amount=-2  
+kerning first=66  second=110 amount=-2  
+kerning first=66  second=112 amount=-2  
+kerning first=66  second=114 amount=-2  
+kerning first=66  second=118 amount=-4  
+kerning first=66  second=119 amount=-2  
+kerning first=66  second=121 amount=-3  
+kerning first=121 second=119 amount=3   
+kerning first=121 second=118 amount=2   
+kerning first=121 second=116 amount=1   
+kerning first=121 second=113 amount=-1  
+kerning first=121 second=111 amount=-1  
+kerning first=121 second=109 amount=-1  
+kerning first=121 second=103 amount=-1  
+kerning first=121 second=99  amount=-1  
+kerning first=121 second=97  amount=-4  
+kerning first=121 second=93  amount=3   
+kerning first=121 second=46  amount=-9  
+kerning first=121 second=45  amount=-3  
+kerning first=121 second=44  amount=-9  
+kerning first=121 second=41  amount=3   
+kerning first=120 second=121 amount=1   
+kerning first=120 second=120 amount=1   
+kerning first=120 second=119 amount=1   
+kerning first=120 second=116 amount=-3  
+kerning first=120 second=113 amount=-2  
+kerning first=120 second=111 amount=-2  
+kerning first=120 second=103 amount=-2  
+kerning first=120 second=99  amount=-2  
+kerning first=120 second=97  amount=-2  
+kerning first=119 second=125 amount=1   
+kerning first=119 second=121 amount=1   
+kerning first=119 second=116 amount=-2  
+kerning first=119 second=109 amount=-2  
+kerning first=119 second=97  amount=-5  
+kerning first=119 second=93  amount=1   
+kerning first=119 second=59  amount=1   
+kerning first=119 second=58  amount=1   
+kerning first=119 second=46  amount=-10 
+kerning first=119 second=44  amount=-10 
+kerning first=119 second=41  amount=1   
+kerning first=118 second=125 amount=2   
+kerning first=118 second=121 amount=1   
+kerning first=118 second=113 amount=-1  
+kerning first=118 second=111 amount=-1  
+kerning first=118 second=103 amount=-1  
+kerning first=118 second=99  amount=-1  
+kerning first=118 second=97  amount=-7  
+kerning first=118 second=93  amount=2   
+kerning first=118 second=46  amount=-13 
+kerning first=118 second=45  amount=-2  
+kerning first=118 second=44  amount=-13 
+kerning first=67  second=67  amount=-1  
+kerning first=67  second=79  amount=-1  
+kerning first=67  second=81  amount=-1  
+kerning first=67  second=84  amount=-1  
+kerning first=67  second=89  amount=2   
+kerning first=67  second=99  amount=-1  
+kerning first=67  second=103 amount=-1  
+kerning first=67  second=111 amount=-1  
+kerning first=67  second=113 amount=-1  
+kerning first=67  second=116 amount=-1  
+kerning first=67  second=121 amount=2   
+kerning first=118 second=41  amount=2   
+kerning first=117 second=109 amount=-2  
+kerning first=117 second=97  amount=-2  
+kerning first=116 second=121 amount=2   
+kerning first=116 second=120 amount=2   
+kerning first=116 second=119 amount=1   
+kerning first=116 second=116 amount=1   
+kerning first=116 second=115 amount=-1  
+kerning first=116 second=113 amount=-2  
+kerning first=116 second=111 amount=-2  
+kerning first=116 second=109 amount=-1  
+kerning first=116 second=103 amount=-2  
+kerning first=116 second=99  amount=-2  
+kerning first=116 second=97  amount=-4  
+kerning first=116 second=59  amount=-3  
+kerning first=116 second=58  amount=-3  
+kerning first=116 second=46  amount=-11 
+kerning first=116 second=45  amount=-3  
+kerning first=116 second=44  amount=-11 
+kerning first=68  second=65  amount=-1  
+kerning first=68  second=66  amount=-1  
+kerning first=68  second=68  amount=-1  
+kerning first=68  second=69  amount=-1  
+kerning first=68  second=70  amount=-1  
+kerning first=68  second=72  amount=-1  
+kerning first=68  second=73  amount=-1  
+kerning first=68  second=74  amount=-1  
+kerning first=68  second=75  amount=-1  
+kerning first=68  second=76  amount=-1  
+kerning first=68  second=77  amount=-1  
+kerning first=68  second=78  amount=-1  
+kerning first=68  second=80  amount=-1  
+kerning first=68  second=82  amount=-1  
+kerning first=68  second=97  amount=-1  
+kerning first=68  second=98  amount=-1  
+kerning first=68  second=100 amount=-1  
+kerning first=68  second=101 amount=-1  
+kerning first=68  second=102 amount=-1  
+kerning first=68  second=104 amount=-1  
+kerning first=68  second=105 amount=-1  
+kerning first=68  second=106 amount=-1  
+kerning first=68  second=107 amount=-1  
+kerning first=68  second=108 amount=-1  
+kerning first=68  second=109 amount=-1  
+kerning first=68  second=110 amount=-1  
+kerning first=68  second=112 amount=-1  
+kerning first=68  second=114 amount=-1  
+kerning first=115 second=114 amount=-2  
+kerning first=115 second=112 amount=-2  
+kerning first=115 second=110 amount=-2  
+kerning first=115 second=109 amount=-1  
+kerning first=115 second=108 amount=-2  
+kerning first=115 second=107 amount=-2  
+kerning first=115 second=105 amount=-2  
+kerning first=115 second=104 amount=-2  
+kerning first=115 second=102 amount=-2  
+kerning first=115 second=101 amount=-2  
+kerning first=115 second=100 amount=-2  
+kerning first=115 second=98  amount=-2  
+kerning first=114 second=121 amount=-2  
+kerning first=114 second=120 amount=-1  
+kerning first=114 second=118 amount=-2  
+kerning first=114 second=116 amount=-5  
+kerning first=114 second=115 amount=-1  
+kerning first=114 second=113 amount=1   
+kerning first=114 second=111 amount=1   
+kerning first=114 second=103 amount=1   
+kerning first=114 second=99  amount=1   
+kerning first=114 second=97  amount=1   
+kerning first=113 second=125 amount=3   
+kerning first=113 second=114 amount=-2  
+kerning first=113 second=112 amount=-2  
+kerning first=113 second=110 amount=-2  
+kerning first=113 second=108 amount=-2  
+kerning first=113 second=107 amount=-2  
+kerning first=113 second=105 amount=-2  
+kerning first=113 second=104 amount=-2  
+kerning first=113 second=102 amount=-2  
+kerning first=113 second=101 amount=-2  
+kerning first=113 second=100 amount=-2  
+kerning first=113 second=98  amount=-2  
+kerning first=113 second=93  amount=3   
+kerning first=113 second=41  amount=3   
+kerning first=112 second=115 amount=1   
+kerning first=112 second=114 amount=-1  
+kerning first=112 second=112 amount=-1  
+kerning first=112 second=110 amount=-1  
+kerning first=112 second=108 amount=-1  
+kerning first=69  second=86  amount=3   
+kerning first=69  second=87  amount=3   
+kerning first=69  second=88  amount=4   
+kerning first=69  second=89  amount=3   
+kerning first=69  second=118 amount=3   
+kerning first=69  second=119 amount=3   
+kerning first=69  second=120 amount=4   
+kerning first=69  second=121 amount=3   
+kerning first=112 second=107 amount=-1  
+kerning first=112 second=105 amount=-1  
+kerning first=112 second=104 amount=-1  
+kerning first=112 second=102 amount=-1  
+kerning first=70  second=44  amount=-10 
+kerning first=70  second=46  amount=-10 
+kerning first=70  second=65  amount=-3  
+kerning first=70  second=89  amount=2   
+kerning first=70  second=97  amount=-3  
+kerning first=70  second=121 amount=2   
+kerning first=112 second=101 amount=-1  
+kerning first=112 second=100 amount=-1  
+kerning first=112 second=98  amount=-1  
+kerning first=112 second=97  amount=-4  
+kerning first=112 second=46  amount=-15 
+kerning first=112 second=44  amount=-15 
+kerning first=111 second=121 amount=-1  
+kerning first=111 second=120 amount=-2  
+kerning first=111 second=119 amount=-1  
+kerning first=111 second=118 amount=-1  
+kerning first=111 second=116 amount=-3  
+kerning first=111 second=114 amount=-3  
+kerning first=111 second=112 amount=-3  
+kerning first=111 second=110 amount=-3  
+kerning first=111 second=109 amount=-1  
+kerning first=111 second=108 amount=-3  
+kerning first=111 second=107 amount=-3  
+kerning first=111 second=106 amount=-2  
+kerning first=111 second=105 amount=-3  
+kerning first=72  second=67  amount=-2  
+kerning first=72  second=71  amount=-2  
+kerning first=72  second=79  amount=-3  
+kerning first=72  second=81  amount=-3  
+kerning first=72  second=99  amount=-2  
+kerning first=72  second=103 amount=-2  
+kerning first=72  second=111 amount=-2  
+kerning first=72  second=113 amount=-2  
+kerning first=111 second=104 amount=-3  
+kerning first=111 second=102 amount=-3  
+kerning first=111 second=101 amount=-3  
+kerning first=111 second=100 amount=-3  
+kerning first=111 second=98  amount=-3  
+kerning first=111 second=97  amount=-2  
+kerning first=110 second=114 amount=-2  
+kerning first=110 second=113 amount=-1  
+kerning first=110 second=112 amount=-2  
+kerning first=110 second=111 amount=-1  
+kerning first=110 second=110 amount=-2  
+kerning first=110 second=108 amount=-2  
+kerning first=110 second=107 amount=-2  
+kerning first=110 second=105 amount=-2  
+kerning first=110 second=104 amount=-2  
+kerning first=73  second=67  amount=-2  
+kerning first=73  second=71  amount=-2  
+kerning first=73  second=79  amount=-3  
+kerning first=73  second=81  amount=-3  
+kerning first=73  second=99  amount=-2  
+kerning first=73  second=103 amount=-2  
+kerning first=73  second=111 amount=-2  
+kerning first=73  second=113 amount=-2  
+kerning first=110 second=103 amount=-1  
+kerning first=110 second=102 amount=-2  
+kerning first=110 second=101 amount=-2  
+kerning first=110 second=100 amount=-2  
+kerning first=110 second=99  amount=-1  
+kerning first=110 second=98  amount=-2  
+kerning first=109 second=121 amount=-1  
+kerning first=109 second=119 amount=-1  
+kerning first=109 second=116 amount=-2  
+kerning first=109 second=97  amount=2   
+kerning first=108 second=121 amount=-3  
+kerning first=108 second=119 amount=-2  
+kerning first=108 second=118 amount=-4  
+kerning first=108 second=117 amount=-1  
+kerning first=108 second=116 amount=-6  
+kerning first=74  second=79  amount=-1  
+kerning first=74  second=99  amount=-1  
+kerning first=74  second=103 amount=-1  
+kerning first=74  second=111 amount=-1  
+kerning first=74  second=113 amount=-1  
+kerning first=108 second=113 amount=-2  
+kerning first=108 second=111 amount=-2  
+kerning first=108 second=109 amount=-1  
+kerning first=108 second=103 amount=-2  
+kerning first=108 second=99  amount=-2  
+kerning first=108 second=97  amount=1   
+kerning first=107 second=115 amount=1   
+kerning first=107 second=97  amount=-1  
+kerning first=106 second=113 amount=-1  
+kerning first=106 second=111 amount=-1  
+kerning first=106 second=103 amount=-1  
+kerning first=106 second=99  amount=-1  
+kerning first=105 second=114 amount=-2  
+kerning first=105 second=113 amount=-1  
+kerning first=75  second=65  amount=-1  
+kerning first=105 second=112 amount=-2  
+kerning first=105 second=111 amount=-1  
+kerning first=105 second=110 amount=-2  
+kerning first=105 second=108 amount=-2  
+kerning first=75  second=83  amount=1   
+kerning first=75  second=97  amount=-1  
+kerning first=105 second=107 amount=-2  
+kerning first=105 second=105 amount=-2  
+kerning first=105 second=104 amount=-2  
+kerning first=105 second=103 amount=-1  
+kerning first=75  second=115 amount=1   
+kerning first=105 second=102 amount=-2  
+kerning first=105 second=101 amount=-2  
+kerning first=105 second=100 amount=-2  
+kerning first=105 second=99  amount=-1  
+kerning first=105 second=98  amount=-2  
+kerning first=104 second=114 amount=-2  
+kerning first=104 second=113 amount=-1  
+kerning first=104 second=112 amount=-2  
+kerning first=104 second=111 amount=-1  
+kerning first=104 second=110 amount=-2  
+kerning first=104 second=108 amount=-2  
+kerning first=104 second=107 amount=-2  
+kerning first=104 second=105 amount=-2  
+kerning first=104 second=104 amount=-2  
+kerning first=104 second=103 amount=-1  
+kerning first=104 second=102 amount=-2  
+kerning first=104 second=101 amount=-2  
+kerning first=104 second=100 amount=-2  
+kerning first=104 second=99  amount=-1  
+kerning first=104 second=98  amount=-2  
+kerning first=102 second=121 amount=2   
+kerning first=102 second=97  amount=-3  
+kerning first=102 second=46  amount=-9  
+kerning first=102 second=44  amount=-9  
+kerning first=101 second=121 amount=2   
+kerning first=101 second=120 amount=3   
+kerning first=101 second=119 amount=3   
+kerning first=101 second=118 amount=2   
+kerning first=100 second=114 amount=-1  
+kerning first=100 second=112 amount=-1  
+kerning first=100 second=110 amount=-1  
+kerning first=76  second=65  amount=1   
+kerning first=76  second=67  amount=-2  
+kerning first=76  second=71  amount=-2  
+kerning first=76  second=77  amount=-1  
+kerning first=76  second=79  amount=-2  
+kerning first=76  second=84  amount=-6  
+kerning first=76  second=85  amount=-1  
+kerning first=76  second=86  amount=-5  
+kerning first=76  second=87  amount=-3  
+kerning first=76  second=89  amount=-4  
+kerning first=76  second=97  amount=1   
+kerning first=76  second=99  amount=-3  
+kerning first=76  second=103 amount=-3  
+kerning first=76  second=109 amount=-1  
+kerning first=76  second=111 amount=-3  
+kerning first=76  second=113 amount=-3  
+kerning first=76  second=116 amount=-7  
+kerning first=76  second=117 amount=-1  
+kerning first=76  second=118 amount=-5  
+kerning first=76  second=119 amount=-3  
+kerning first=76  second=121 amount=-4  
+kerning first=100 second=109 amount=-1  
+kerning first=100 second=108 amount=-1  
+kerning first=100 second=107 amount=-1  
+kerning first=100 second=106 amount=-1  
+kerning first=100 second=105 amount=-1  
+kerning first=100 second=104 amount=-1  
+kerning first=100 second=102 amount=-1  
+kerning first=100 second=101 amount=-1  
+kerning first=100 second=100 amount=-1  
+kerning first=100 second=98  amount=-1  
+kerning first=100 second=97  amount=-1  
+kerning first=99  second=121 amount=1   
+kerning first=99  second=116 amount=-1  
+kerning first=99  second=113 amount=-1  
+kerning first=99  second=111 amount=-1  
+kerning first=99  second=103 amount=-1  
+kerning first=99  second=99  amount=-1  
+kerning first=98  second=121 amount=-3  
+kerning first=98  second=119 amount=-1  
+kerning first=98  second=118 amount=-3  
+kerning first=98  second=114 amount=-3  
+kerning first=98  second=112 amount=-3  
+kerning first=98  second=110 amount=-3  
+kerning first=98  second=108 amount=-3  
+kerning first=98  second=107 amount=-3  
+kerning first=98  second=105 amount=-3  
+kerning first=98  second=104 amount=-3  
+kerning first=98  second=102 amount=-3  
+kerning first=98  second=101 amount=-3  
+kerning first=98  second=100 amount=-3  
+kerning first=98  second=98  amount=-3  
+kerning first=98  second=97  amount=-1  
+kerning first=97  second=121 amount=-5  
+kerning first=97  second=120 amount=1   
+kerning first=97  second=119 amount=-4  
+kerning first=97  second=118 amount=-7  
+kerning first=97  second=116 amount=-7  
+kerning first=97  second=115 amount=1   
+kerning first=97  second=109 amount=2   
+kerning first=91  second=121 amount=3   
+kerning first=91  second=119 amount=1   
+kerning first=91  second=118 amount=2   
+kerning first=90  second=113 amount=-3  
+kerning first=77  second=65  amount=2   
+kerning first=77  second=84  amount=-2  
+kerning first=90  second=111 amount=-3  
+kerning first=77  second=87  amount=-2  
+kerning first=77  second=89  amount=-1  
+kerning first=77  second=97  amount=2   
+kerning first=77  second=116 amount=-2  
+kerning first=90  second=103 amount=-3  
+kerning first=77  second=119 amount=-2  
+kerning first=77  second=121 amount=-1  
+kerning first=90  second=99  amount=-3  
+kerning first=90  second=97  amount=-1  
+kerning first=90  second=79  amount=-3  
+kerning first=90  second=65  amount=-1  
+kerning first=89  second=125 amount=4   
+kerning first=89  second=120 amount=1   
+kerning first=89  second=119 amount=3   
+kerning first=89  second=118 amount=2   
+kerning first=89  second=116 amount=1   
+kerning first=89  second=113 amount=-4  
+kerning first=89  second=111 amount=-4  
+kerning first=89  second=109 amount=-1  
+kerning first=89  second=103 amount=-4  
+kerning first=89  second=99  amount=-4  
+kerning first=89  second=97  amount=-5  
+kerning first=89  second=93  amount=4   
+kerning first=89  second=88  amount=1   
+kerning first=89  second=87  amount=3   
+kerning first=89  second=86  amount=2   
+kerning first=89  second=84  amount=1   
+kerning first=89  second=79  amount=-2  
+kerning first=89  second=77  amount=-1  
+kerning first=89  second=71  amount=-1  
+kerning first=89  second=67  amount=-1  
+kerning first=89  second=65  amount=-5  
+kerning first=89  second=46  amount=-10 
+kerning first=78  second=67  amount=-2  
+kerning first=78  second=71  amount=-2  
+kerning first=78  second=79  amount=-3  
+kerning first=78  second=81  amount=-3  
+kerning first=78  second=99  amount=-2  
+kerning first=78  second=103 amount=-2  
+kerning first=78  second=111 amount=-2  
+kerning first=78  second=113 amount=-2  
+kerning first=89  second=45  amount=-3  
+kerning first=89  second=44  amount=-10 
+kerning first=89  second=41  amount=4   
+kerning first=88  second=121 amount=1   
+kerning first=88  second=120 amount=1   
+kerning first=88  second=119 amount=1   
+kerning first=88  second=116 amount=-3  
+kerning first=88  second=113 amount=-2  
+kerning first=88  second=111 amount=-2  
+kerning first=88  second=103 amount=-2  
+kerning first=88  second=99  amount=-2  
+kerning first=88  second=97  amount=-2  
+kerning first=88  second=89  amount=1   
+kerning first=88  second=88  amount=1   
+kerning first=88  second=87  amount=1   
+kerning first=79  second=65  amount=-2  
+kerning first=79  second=66  amount=-3  
+kerning first=79  second=68  amount=-3  
+kerning first=79  second=69  amount=-3  
+kerning first=79  second=70  amount=-3  
+kerning first=79  second=72  amount=-3  
+kerning first=79  second=73  amount=-3  
+kerning first=79  second=74  amount=-2  
+kerning first=79  second=75  amount=-3  
+kerning first=79  second=76  amount=-3  
+kerning first=79  second=77  amount=-1  
+kerning first=79  second=78  amount=-3  
+kerning first=79  second=80  amount=-3  
+kerning first=79  second=82  amount=-3  
+kerning first=79  second=84  amount=-3  
+kerning first=79  second=86  amount=-1  
+kerning first=79  second=87  amount=-1  
+kerning first=79  second=88  amount=-3  
+kerning first=79  second=89  amount=-1  
+kerning first=79  second=97  amount=-2  
+kerning first=79  second=98  amount=-3  
+kerning first=79  second=100 amount=-3  
+kerning first=79  second=101 amount=-3  
+kerning first=79  second=102 amount=-3  
+kerning first=79  second=104 amount=-3  
+kerning first=79  second=105 amount=-3  
+kerning first=79  second=106 amount=-2  
+kerning first=79  second=107 amount=-3  
+kerning first=79  second=108 amount=-3  
+kerning first=79  second=109 amount=-1  
+kerning first=79  second=110 amount=-3  
+kerning first=79  second=112 amount=-3  
+kerning first=79  second=114 amount=-3  
+kerning first=79  second=116 amount=-3  
+kerning first=79  second=118 amount=-1  
+kerning first=79  second=119 amount=-1  
+kerning first=79  second=120 amount=-3  
+kerning first=79  second=121 amount=-1  
+kerning first=88  second=84  amount=-3  
+kerning first=88  second=81  amount=-2  
+kerning first=88  second=79  amount=-2  
+kerning first=88  second=71  amount=-2  
+kerning first=88  second=67  amount=-2  
+kerning first=88  second=65  amount=-2  
+kerning first=87  second=125 amount=1   
+kerning first=87  second=121 amount=1   
+kerning first=87  second=116 amount=-2  
+kerning first=87  second=109 amount=-3  
+kerning first=87  second=97  amount=-6  
+kerning first=87  second=93  amount=1   
+kerning first=87  second=89  amount=1   
+kerning first=87  second=84  amount=-2  
+kerning first=87  second=77  amount=-3  
+kerning first=87  second=65  amount=-6  
+kerning first=87  second=59  amount=2   
+kerning first=87  second=58  amount=2   
+kerning first=87  second=46  amount=-11 
+kerning first=87  second=44  amount=-11 
+kerning first=87  second=41  amount=1   
+kerning first=86  second=125 amount=3   
+kerning first=86  second=121 amount=1   
+kerning first=86  second=113 amount=-1  
+kerning first=86  second=111 amount=-1  
+kerning first=86  second=103 amount=-1  
+kerning first=86  second=99  amount=-1  
+kerning first=86  second=97  amount=-8  
+kerning first=86  second=93  amount=3   
+kerning first=86  second=89  amount=1   
+kerning first=86  second=79  amount=-1  
+kerning first=86  second=65  amount=-8  
+kerning first=86  second=46  amount=-15 
+kerning first=86  second=45  amount=-2  
+kerning first=86  second=44  amount=-15 
+kerning first=86  second=41  amount=3   
+kerning first=85  second=114 amount=-3  
+kerning first=85  second=112 amount=-3  
+kerning first=85  second=110 amount=-3  
+kerning first=85  second=109 amount=-2  
+kerning first=85  second=108 amount=-3  
+kerning first=85  second=107 amount=-3  
+kerning first=85  second=105 amount=-3  
+kerning first=85  second=104 amount=-3  
+kerning first=85  second=102 amount=-3  
+kerning first=80  second=44  amount=-16 
+kerning first=80  second=46  amount=-16 
+kerning first=80  second=65  amount=-5  
+kerning first=80  second=66  amount=-2  
+kerning first=80  second=68  amount=-2  
+kerning first=80  second=69  amount=-2  
+kerning first=80  second=70  amount=-2  
+kerning first=80  second=72  amount=-2  
+kerning first=80  second=73  amount=-2  
+kerning first=80  second=75  amount=-2  
+kerning first=80  second=76  amount=-2  
+kerning first=80  second=78  amount=-2  
+kerning first=80  second=80  amount=-2  
+kerning first=80  second=82  amount=-2  
+kerning first=80  second=83  amount=1   
+kerning first=80  second=97  amount=-5  
+kerning first=80  second=98  amount=-2  
+kerning first=80  second=100 amount=-2  
+kerning first=80  second=101 amount=-2  
+kerning first=80  second=102 amount=-2  
+kerning first=80  second=104 amount=-2  
+kerning first=80  second=105 amount=-2  
+kerning first=80  second=107 amount=-2  
+kerning first=80  second=108 amount=-2  
+kerning first=80  second=110 amount=-2  
+kerning first=80  second=112 amount=-2  
+kerning first=80  second=114 amount=-2  
+kerning first=80  second=115 amount=1   
+kerning first=85  second=101 amount=-3  
+kerning first=85  second=100 amount=-3  
+kerning first=85  second=98  amount=-3  
+kerning first=85  second=97  amount=-2  
+kerning first=85  second=77  amount=-2  
+kerning first=85  second=65  amount=-2  
+kerning first=84  second=121 amount=2   
+kerning first=84  second=120 amount=2   
+kerning first=84  second=119 amount=1   
+kerning first=84  second=116 amount=1   
+kerning first=84  second=115 amount=-4  
+kerning first=84  second=114 amount=-2  
+kerning first=84  second=113 amount=-3  
+kerning first=84  second=112 amount=-2  
+kerning first=84  second=111 amount=-3  
+kerning first=84  second=110 amount=-2  
+kerning first=84  second=109 amount=-2  
+kerning first=84  second=108 amount=-2  
+kerning first=84  second=107 amount=-2  
+kerning first=84  second=105 amount=-2  
+kerning first=84  second=104 amount=-2  
+kerning first=84  second=103 amount=-3  
+kerning first=84  second=102 amount=-2  
+kerning first=84  second=101 amount=-2  
+kerning first=84  second=100 amount=-2  
+kerning first=84  second=99  amount=-3  
+kerning first=84  second=98  amount=-2  
+kerning first=84  second=97  amount=-7  
+kerning first=84  second=89  amount=2   
+kerning first=84  second=88  amount=2   
+kerning first=84  second=87  amount=1   
+kerning first=84  second=84  amount=1   
+kerning first=84  second=83  amount=-1  
+kerning first=84  second=79  amount=-3  
+kerning first=84  second=77  amount=-2  
+kerning first=84  second=71  amount=-3  
+kerning first=84  second=67  amount=-3  
+kerning first=84  second=65  amount=-5  
+kerning first=84  second=59  amount=-3  
+kerning first=84  second=58  amount=-3  
+kerning first=84  second=46  amount=-12 
+kerning first=84  second=45  amount=-3  
+kerning first=84  second=44  amount=-12 
+kerning first=83  second=109 amount=-1  
+kerning first=81  second=41  amount=3   
+kerning first=81  second=66  amount=-3  
+kerning first=81  second=68  amount=-3  
+kerning first=81  second=69  amount=-3  
+kerning first=81  second=70  amount=-3  
+kerning first=81  second=72  amount=-3  
+kerning first=81  second=73  amount=-3  
+kerning first=81  second=75  amount=-3  
+kerning first=81  second=76  amount=-3  
+kerning first=81  second=78  amount=-3  
+kerning first=81  second=80  amount=-3  
+kerning first=81  second=82  amount=-3  
+kerning first=81  second=93  amount=3   
+kerning first=81  second=98  amount=-3  
+kerning first=81  second=100 amount=-3  
+kerning first=81  second=101 amount=-3  
+kerning first=81  second=102 amount=-3  
+kerning first=81  second=104 amount=-3  
+kerning first=81  second=105 amount=-3  
+kerning first=81  second=107 amount=-3  
+kerning first=81  second=108 amount=-3  
+kerning first=81  second=110 amount=-3  
+kerning first=81  second=112 amount=-3  
+kerning first=81  second=114 amount=-3  
+kerning first=81  second=125 amount=3   
+kerning first=83  second=77  amount=-1  
+kerning first=82  second=121 amount=-2  
+kerning first=82  second=120 amount=-1  
+kerning first=82  second=118 amount=-3  
+kerning first=82  second=116 amount=-6  
+kerning first=82  second=115 amount=-1  
+kerning first=82  second=113 amount=2   
+kerning first=82  second=111 amount=2   
+kerning first=82  second=103 amount=2   
+kerning first=82  second=99  amount=2   
+kerning first=82  second=97  amount=1   
+kerning first=82  second=89  amount=-2  
+kerning first=82  second=88  amount=-1  
+kerning first=82  second=86  amount=-3  
+kerning first=82  second=84  amount=-5  
+kerning first=82  second=83  amount=-1  
+kerning first=82  second=81  amount=2   
+kerning first=82  second=79  amount=2   
+kerning first=82  second=71  amount=2   
+kerning first=82  second=67  amount=2   
+kerning first=82  second=65  amount=1   

BIN
modules/ToyAssets/1/assets/fonts/Trajan Pro_0.png