diff --git a/SDK/Binaries/ReadMe.txt b/SDK/Binaries/ReadMe.txt new file mode 100644 index 0000000000..4274262bc3 --- /dev/null +++ b/SDK/Binaries/ReadMe.txt @@ -0,0 +1 @@ +In this folder will be placed binaries of fonline engine. diff --git a/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/code_blocks integration.doc b/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/code_blocks integration.doc new file mode 100644 index 0000000000..f297f176b9 Binary files /dev/null and b/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/code_blocks integration.doc differ diff --git a/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/code_blocks_fos.reg b/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/code_blocks_fos.reg new file mode 100644 index 0000000000..a7b8347af8 Binary files /dev/null and b/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/code_blocks_fos.reg differ diff --git a/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/lexer_angelscript.xml b/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/lexer_angelscript.xml new file mode 100644 index 0000000000..80b8bc27bc --- /dev/null +++ b/SDK/Documentation/Obsolete/ASCompiler/CodeBlocks Integration/lexer_angelscript.xml @@ -0,0 +1,147 @@ + + + + + + + +

+ +

+

Designed for use with Apache Ant.

+
+ + + + + + + +
+ + + + + + + + + + + + + +
+
+
    + +
+ + +
+ + + + + + + + + + + + + mailto: + + + + + +
  • + + + + /?rev=&content-type=text/x-cvsweb-markup + + + /?r1=&r2= + + + () +
  • +
    + + + + + + + diff --git a/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-frames-sortby-check.xsl b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-frames-sortby-check.xsl new file mode 100644 index 0000000000..060f87885b --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-frames-sortby-check.xsl @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckStyle Audit + + + + +

    CheckStyle Audit

    +

    Designed for use with + CheckStyle and + Ant. +

    + + + + +
    + + + + + + + + + + + + + + + + + +
    + + +
    + +

    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    filelineseveritymessage
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + body { + font:normal 80% arial,helvetica,sanserif; + color: black; + background-color: white; + margin: 0; + padding: 1em; + min-width: 41em; + } + h1 { + font-weight:bold; + font-size:140%; + margin: 0 0 0.7em; + padding: 0.3em; + text-align: center; + background-color: #eee; + border: 2px ridge silver; + } + html>body h1 { + border-color: gray; + } + + ul#navigation { + font-size: 0.83em; + float: left; width: 18em; + margin: 0 0 1.2em; padding: 0; + border: 1px dashed silver; + } + ul#navigation li { + list-style: none; + margin: 0; padding: 0.2em; + } + ul#navigation a { + display: block; + padding: 0.2em; + font-weight: bold; + } + ul#navigation a:link { + color: black; background-color: #eee; + } + ul#navigation a:visited { + color: #666; background-color: #eee; + } + ul#navigation a:hover { + color: red; background-color: white; + } + ul#navigation a:active { + color: white; background-color: gray; + } + + div#content { + margin: 0 1em 1em 16em; + padding: 0 1em; + } + * html div#content { + height: 1em; /* Workaround 3-Pixel-Bug of Internet Explorers */ + } + div#content h2 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + div#content p { + font-size: 1em; + margin: 1em 0; + } + table { + width:100%; + border-collapse:collapse; + } + table td, table th { + border:1px solid #000; + padding:3px 7px 2px 7px; + } + table th { + font-weight:bold; + background: #ccc; + color: black; + } + table tr:nth-child(odd) td { + background: #efefef; + } + table tr:nth-child(even) td { + background: #fff; + } + + + + + + + /* + * Hides all "hideable" div-containers + */ + function hideAll() { + allElements = document.getElementsByTagName("div"); + for (i = 0; i < allElements.length; i++) { + if (allElements[i].className=="hideable") { + allElements[i].style.display="none"; + } + } + return; + } + + /* + * Shows one div-container and hides the other. + * @param id id of the element to show + */ + function change(id) { + hideAll(); + e = document.getElementById(id); + if (e.style.display=="none") { + e.style.display=""; + } + window.scrollTo(0, 0); + return; + } + + /* + * Shows only the first data row. + * Used in body:onload so the user could directly see some messages. + */ + function openFirst() { + hideAll(); + for (i = 0; i < allElements.length; i++) { + if (allElements[i].className=="hideable") { + allElements[i].style.display=""; + return; + } + } + return; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-frames.xsl b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-frames.xsl new file mode 100644 index 0000000000..c79c0b7b1e --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-frames.xsl @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckStyle Audit + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + + + + + + +

    CheckStyle Audit

    Designed for use with + CheckStyle and + Ant.
    +
    +
    + + + + + + + + + + + + +
    + + + + + +
    + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .oddrow td { + background: #efefef; + } + .evenrow td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + + + + + + + + + +

    Files

    +

    + + + + + +
    +

    + + +
    + + +

    Files

    + + + + + + + + +
    NameErrors
    +
    + + + + + + + + files/.html + + + + + + + + + + + + + + files/.html + + + + + + + + + + + + + + + + + ../ + + + + + + ../ + + + + + + + + + stylesheet.css + + + + +

    File

    + + + + + + + + + + + + +
    Error DescriptionLine:Column
    :
    + + +
    +
    + + +

    Summary

    + + + + + + + + + + + + + + + +
    Total FilesFiles With ErrorsErrors
    +
    + + + + oddrow + evenrow + + +
    \ No newline at end of file diff --git a/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-text.xsl b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-text.xsl new file mode 100644 index 0000000000..7359e41601 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-text.xsl @@ -0,0 +1,34 @@ + + + + + + + + + + + : + + : + + + + + + diff --git a/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-xdoc.xsl b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-xdoc.xsl new file mode 100644 index 0000000000..5fc6eab380 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/checkstyle/checkstyle-xdoc.xsl @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + Checkstyle Audit + + + + + + + + + + + + +
    + + + + + + + + +
    NameErrors
    +
    +
    + + + + + + + + files.html + + + + + + + + + + + + + Checkstyle Audit + + + +
    + + + + + + + + + + + + +
    Error DescriptionLine
    +
    + +
    +
    +
    + + +
    + + + + + + + + + + + + + + + +
    FilesFiles With ErrorsErrors
    +
    +
    + + + + oddrow + evenrow + + +
    + diff --git a/SDK/Modules/BuildSystem/_ant/etc/coverage-frames.xsl b/SDK/Modules/BuildSystem/_ant/etc/coverage-frames.xsl new file mode 100644 index 0000000000..9603597e80 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/coverage-frames.xsl @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Coverage Results. + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + + + + + + + + + +

    Classes

    + + + + + + + / + .html + + + + + +
    + +
    + + +
    + + + + + + + + +

    Home

    +

    Packages

    + + + + + + + +
    + + + +
    + + +
    + + + + + + + + + +

    Summary

    + + + + + + + + + + + + + +
    Reported ClassesMethods HitLines Hit
    + + + + +
    + To ensure accurate test runs on Java applications, developers need to know how much of + the code has been tested, and where to find any untested code. Coverage helps you + locate untested code, and measure precisely how much code has been exercised. + The result is a higher quality application in a shorter period of time. +

    +

    + +

    Packages

    + + + + + + + + + + + + +
    + + + +
    + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +
    + +

    Classes

    + + + + + + + +
    + +
    + + +
    + + + + + + + + + + + + +

    Package

    + + + +
    + + +

    Classes

    + + + + + +
    +
    + + + +
    + + + + + + + + + + + + +

    Class .

    + + + + + +
    + + +

    Methods

    + + + + + +
    + + + + +
    + + + + + + + + + + + + +
    + + http://jakarta.apache.org + +

    Source Code Coverage

    Designed for use with Sitraka JProbe and Ant.
    +
    +
    + + + + + + + + + Name + Methods Hit + Lines Hit + + + + + + Name + Lines Hit + + + + + + + + + + + + + + + Name + Methods Hit + Lines Hit + + + + + + + + + + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + + a + b + + + +
    + + diff --git a/SDK/Modules/BuildSystem/_ant/etc/jdepend-frames.xsl b/SDK/Modules/BuildSystem/_ant/etc/jdepend-frames.xsl new file mode 100644 index 0000000000..802873450d --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/jdepend-frames.xsl @@ -0,0 +1,485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JDepend Analysis + + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + + + + + + + + + + +

    Summary

    + + [summary] + [packages] + [cycles] + [explanations] +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PackageTotal ClassesAbstract ClassesConcrete ClassesAfferent CouplingsEfferent CouplingsAbstractnessInstabilityDistance
    + + overview-packages.html#PK + + + +
    + +
    + + +
    + + + + + + + + +

    Packages

    + + [summary] + [packages] + [cycles] + [explanations] +
    + + + +

    PK +

    + + + + + + + +
    Afferent Couplings: Efferent Couplings: Abstractness: Instability: Distance:
    + + + + + + + + + + + + + + +
    Abstract ClassesConcrete ClassesUsed by PackagesUses Packages
    + + None + + +
    +
    +
    + + None + + +
    +
    +
    + + None + + + + overview-packages.html#PK + +
    +
    +
    + + None + + + + overview-packages.html#PK + +
    +
    +
    +
    +
    + +
    + [summary] + [packages] + [cycles] + [explanations] +
    + + +
    + + + + + + + + +

    Cycles

    + + [summary] + [packages] + [cycles] + [explanations] +
    + + + +

    There are no cyclic dependancies.

    +
    + +

    #CY

    + +
    +

    +
    + +
    + [summary] + [packages] + [cycles] + [explanations] +
    + + +
    + + + + + + + + + +

    Explanations

    + + [summary] + [packages] + [cycles] + [explanations] +
    + +

    The following explanations are for quick reference and are lifted directly from the original JDepend documentation.

    + +

    Number of Classes

    +

    The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.

    +

    Afferent Couplings

    +

    The number of other packages that depend upon classes within the package is an indicator of the package's responsibility.

    +

    Efferent Couplings

    +

    The number of other packages that the classes in the package depend upon is an indicator of the package's independence.

    +

    Abstractness

    +

    The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package.

    +

    The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package.

    +

    Instability

    +

    The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change.

    +

    The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package.

    +

    Distance

    +

    The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability.

    +

    A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0).

    +

    The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible.

    + + + +
    + + + + + + + + + +
    + [summary] + [packages] + [cycles] + [explanations] +
    +

    Packages

    + + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + Not Analyzed: + + + + + + + + + + + +
    + [summary] + [packages] + [cycles] + [explanations] +
    +

    Cycles

    + + + + +
    + + +
    + + + + + + + + + + + +

    JDepend Analysis

    + + + + + +
    Designed for use with JDepend and Ant.
    +
    +
    + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/jdepend.xsl b/SDK/Modules/BuildSystem/_ant/etc/jdepend.xsl new file mode 100644 index 0000000000..f8132975f5 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/jdepend.xsl @@ -0,0 +1,276 @@ + + + + + + + + + + + JDepend Analysis + + + + + + + + +

    JDepend Analysis

    +

    Designed for use with JDepend and Ant.

    +
    + +
    +

    Summary

    +
    + [summary] + [packages] + [cycles] + [explanations] +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PackageTotal ClassesAbstract ClassesConcrete ClassesAfferent CouplingsEfferent CouplingsAbstractnessInstabilityDistance
    + + #PK + + + +
    + +
    + +
    +

    Packages

    +
    + [summary] + [packages] + [cycles] + [explanations] +
    + + + +

    PK +

    + + + + + + + +
    Afferent Couplings: Efferent Couplings: Abstractness: Instability: Distance:
    + + + + + + + + + + + + + + +
    Abstract ClassesConcrete ClassesUsed by PackagesUses Packages
    + + None + + +
    +
    +
    + + None + + +
    +
    +
    + + None + + + + #PK + +
    +
    +
    + + None + + + + #PK + +
    +
    +
    +
    +
    + +
    +

    Cycles

    +
    + [summary] + [packages] + [cycles] + [explanations] +
    + + +

    There are no cyclic dependancies.

    +
    + +

    + +
    +

    +
    + +
    +

    Explanations

    +
    + [summary] + [packages] + [cycles] + [explanations] +
    + +

    The following explanations are for quick reference and are lifted directly from the original JDepend documentation.

    + +

    Number of Classes

    +

    The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.

    +

    Afferent Couplings

    +

    The number of other packages that depend upon classes within the package is an indicator of the package's responsibility.

    +

    Efferent Couplings

    +

    The number of other packages that the classes in the package depend upon is an indicator of the package's independence.

    +

    Abstractness

    +

    The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package.

    +

    The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package.

    +

    Instability

    +

    The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change.

    +

    The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package.

    +

    Distance

    +

    The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability.

    +

    A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0).

    +

    The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible.

    + + + +
    + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/junit-frames-xalan1.xsl b/SDK/Modules/BuildSystem/_ant/etc/junit-frames-xalan1.xsl new file mode 100644 index 0000000000..fbc28e1339 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/junit-frames-xalan1.xsl @@ -0,0 +1,745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + Standard Output from <xsl:value-of select="@name"/> + + +
    + + +
    +
    + + + + + Standard Error from <xsl:value-of select="@name"/> + + +
    + + +
    +
    +
    +
    + + + + + Unit Test Results. + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} + + + + + + + . + + + Unit Test Results: <xsl:value-of select="$class.name"/> + + + + + + + + +

    Class

    + + + + + +
    + +

    Tests

    + + + + + + + + + +
    + + + + + + + + + +
    + + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + + + + + + + Unit Test Classes: <xsl:value-of select="$name"/> + + + + + + + + + +
    +

    + + <none> +

    +
    + +

    Classes

    + + + + + + + +
    + +
    + + +
    + + + + + + + All Unit Test Classes + + + + + +

    Classes

    + + + + +
    + + +
    + + + + + + + + + / + .html + + + + + + + + + + + + + All Unit Test Packages + + + + + +

    Home

    +

    Packages

    + + + + +
    + + +
    + + + + + + + <none> + + + + + + + + + + Unit Test Results: Summary + + + + + + open('allclasses-frame.html','classListFrame') + +

    Summary

    + + + + + + + + + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + +
    TestsFailuresErrorsSkippedSuccess rateTime
    + + + + + + + +
    + + + + +
    + Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
    + +

    Packages

    + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + +
    + + <none> + + + + +
    + + +
    + + + + + + + + + + + + open('package-frame.html','classListFrame') + +

    Package

    + + + + + +

    Classes

    +

    + + + + + +
    +

    +
    + + +
    + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + +

    Unit Test Results

    + + + + + +
    Designed for use with JUnit and Ant.
    +
    +
    + + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + Time Stamp + Host + + + + + + + Name + Status + Type + Time(s) + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + + + + + + + + + + Error + Failure + TableRowColor + + + + + + Failure + + + + Error + + + + Skipped + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + +

    + + + + + + + +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/junit-frames.xsl b/SDK/Modules/BuildSystem/_ant/etc/junit-frames.xsl new file mode 100644 index 0000000000..624fd6923b --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/junit-frames.xsl @@ -0,0 +1,972 @@ + + + + + + + + +Unit Test Results. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + Standard Output from <xsl:value-of select="@name"/> + + +
    + + +
    +
    + + + + + Standard Error from <xsl:value-of select="@name"/> + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + <xsl:value-of select="$TITLE"/> + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} + + + + + + + + + + All Failures + + + All Errors + + + All Skipped + + + All Tests + + + + + Unit Test Results: <xsl:value-of select="$title"/> + + + + + + open('allclasses-frame.html','classListFrame') + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + + . + + + Unit Test Results: <xsl:value-of select="$class.name"/> + + + + + + + + +

    Class

    + + + + + +
    + + + +

    Failures

    +
    + +

    Errors

    +
    + +

    Skipped

    +
    + +

    Tests

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + + + + + + + Unit Test Classes: <xsl:value-of select="$name"/> + + + + + + + + + +
    +

    + + <none> +

    +
    + +

    Classes

    + + + + + + + +
    + +
    + + +
    + + + + + + + All Unit Test Classes + + + + + +

    Classes

    + + + + +
    + + +
    + + + + + + + + + / + _.html + + + + + + + + + + + + + All Unit Test Packages + + + + + +

    Home

    +

    Packages

    + + + + +
    + + +
    + + + + + + + <none> + + + + + + + + + + Unit Test Results: Summary + + + + + + open('allclasses-frame.html','classListFrame') + +

    Summary

    + + + + + + + + + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + +
    TestsFailuresErrorsSkippedSuccess rateTime
    + + + + + + + +
    + + + + +
    + Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
    + +

    Packages

    + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + +
    + + <none> + + + + +
    + + +
    + + + + + + + + + + + + open('package-frame.html','classListFrame') + +

    Package

    + + + + + +

    Classes

    +

    + + + + + +
    +

    +
    + + +
    + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + +

    + + + + + +
    Designed for use with JUnit and Ant.
    +
    +
    + + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + Time Stamp + Host + + + + + + + + + Class + + Name + Status + Type + Time(s) + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error + Failure + TableRowColor + + + + + + + + + + + + + + + + + + + + + + Failure + + + + Error + + + + Skipped + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + +

    + + + + + + + +
    + + + + + + + + + + + + + + + 32 + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + + + +
    +
    + + + + + + + + + + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/junit-noframes.xsl b/SDK/Modules/BuildSystem/_ant/etc/junit-noframes.xsl new file mode 100644 index 0000000000..fa3ac3e96b --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/junit-noframes.xsl @@ -0,0 +1,513 @@ + + + + + + +Unit Test Results. + + + + + + <xsl:value-of select="$TITLE"/> + + + + + + + + + + +
    + + + +
    + + + +
    + + + + + + +
    + + + + + + + + +

    Packages

    + Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. + + + + + + + + + + + + + + + + + + Failure + Error + + + + + + + + + + + + +
    + + + +
    +
    + + + + + + + + + + + + +

    Package

    + + + + + + +
    + Back to top +

    +

    + + + + + + + + +

    TestCase

    + + + + + + + + + + +
    + +

    + + Back to top + + + + +

    Summary

    + + + + + + + + + + + + + + + + + + + Failure + Error + + + + + + + + + + +
    TestsFailuresErrorsSkippedSuccess rateTime
    + + + + + + + +
    + + + + +
    + Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
    +
    + + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + +

    + + + + + +
    Designed for use with JUnit and Ant.
    +
    +
    + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + + + + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + Time Stamp + Host + + + + + + + Name + Status + Type + Time(s) + + + + + + + + + + + Failure + Error + + + + + + + + + + + + + + + + + + + + + + + + Error + + + + + + Failure + + + + Error + + + + Skipped + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + + +

    + + + +
    + + +
    + + + + + + + + + + + + + + + 32 + + + + + + + + + + + + +
    + + + +
    + + +
    + + + +
    + + + +
    +
    + + + + + + + + + + + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/log.xsl b/SDK/Modules/BuildSystem/_ant/etc/log.xsl new file mode 100644 index 0000000000..5040993b7f --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/log.xsl @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + +
    + + http://jakarta.apache.org + + + Apache Ant +
    + + + +

    + + + + + +
    + + + + + + failed + complete + + + + + + + + + + + + + +
    Build FailedBuild CompleteTotal Time:
    + +
    + See the stacktrace. +
    +
    + + + + + +
    ant.file
    ant.version
    java.version
    os.name
    + +

    Build events

    + + + + + + + +
    targettaskmessage
    +

    + + + +

    Error details

    + + +
    +
    +
    + +

    +
    + + + + + + + a + b + + + [ ] + + + + + + +
    diff --git a/SDK/Modules/BuildSystem/_ant/etc/maudit-frames.xsl b/SDK/Modules/BuildSystem/_ant/etc/maudit-frames.xsl new file mode 100644 index 0000000000..c81f8dc3a8 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/maudit-frames.xsl @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + Audit Results. + + + + + + + + + <H2>Frame Alert</H2> + <P> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </P> + + + + + + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + + + + + + + + + + + + + + +

    Class .

    + + + + +
    + +

    Violations

    + + + + + +
    + + + +
    + + + + + + + + + + + + + + + + +
    +

    +
    + +

    Classes

    + + + + +
    + + +
    + + + + + +
    + + + + + + + + + + + + + + +

    Classes

    + + + + +
    + + +
    + + + + + + + + + + / + .html + + + + + + + + + + + + + + + + + +

    Home

    +

    Packages

    + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + +

    Summary

    + + + + + + + + + + + +
    Audited classesReported classesViolations
    + + + + +
    + Note: Rules checked have originated from style guidelines suggested by the language designers, + experience from the Java development community and insite experience. Violations are generally + reported with a reference to the Java Language Specifications (JLS x.x.x) + and Metamata Audit rules (x.x). + Please consult these documents for additional information about violations. +

    + Rules checked also enforce adherence to Sun Java coding guidelines in use at Jakarta. +

    + One should note that these violations do not necessary underline errors but should be used + as an indication for possible errors. As always, use your best judgment and review + them carefully, it might save you hours of debugging. +

    + +

    Packages

    + + + + + + + + + + +
    + + + +
    + + + + + + + + + + + + open('package-frame.html','classListFrame') + +

    Package

    + + + + +

    Classes

    + + + + + +
    +
    + + + +
    + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + + + + + + + + + + +
    + + http://jakarta.apache.org + +

    Source Code Audit

    Designed for use with Webgain QA/Metamata Audit and Ant.
    +
    +
    + + + + + + + + + + Name + Violations + + + + + + + Line + Message + + + + + + + + + + + + + + + + + + + + + + + + + a + b + + + + + diff --git a/SDK/Modules/BuildSystem/_ant/etc/mmetrics-frames.xsl b/SDK/Modules/BuildSystem/_ant/etc/mmetrics-frames.xsl new file mode 100644 index 0000000000..2b0f6b81b2 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/mmetrics-frames.xsl @@ -0,0 +1,1023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + Metrics Results. + + + + + + + + + <H2>Frame Alert</H2> + <P> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </P> + + + + + + + + + + + +

    Metrics Reference

    +V(G) | +LOC | +DIT | +NOA | +NRM | +NLM | +WMC | +RFC | +DAC | +FANOUT | +CBO | +LCOM | +NOC + + +

    Cyclomatic Complexity - V(G)

    +This metric was introduced in the 1970s to measure the amount of control +flow complexity or branching complexity in a module such as a +subroutine. It gives the number of paths that may be taken through the +code, and was initially developed to give some measure of the cost of +producing a test case for the module by executing each path. +

    +Methods with a high cyclomatic complexity tend to be more difficult to +understand and maintain. In general the more complex the methods of an +application, the more difficult it will be to test it, and this will adversely +affect its reliability. +

    +V(G) is a measure of the control flow complexity of a method or +constructor. It counts the number of branches in the body of the method, +defined as: +

      +
    • while statements;
    • +
    • if statements;
    • +
    • for statements.
    • +
    + +The metric can also be configured to count each case of a switch +statement as well. + +
    +

    Lines of Code - LOC

    + +This is perhaps the simplest of all the metrics to define and compute. +Counting lines has a long history as a software metric dating from before +the rise of structured programming, and it is still in widespread use today. +The size of a method affects the ease with which it can be understood, its +reusability and its maintainability. There are a variety of ways that the size +can be calculated. These include counting all the lines of code, the number +of statements, the blank lines of code, the lines of commentary, and the +lines consisting only of syntax such as block delimiters. +

    +This metric can also be used for sizing other constructs as well, for +example, the overall size of a Java class or package can be measured by +counting the number of source lines it consists of. +

    +LOC can be used to determine the size of a compilation unit (source file), +class or interface, method, constructor, or field. It can be configured to +ignore: +

      +
    • blank lines;
    • +
    • lines consisting only of comments;
    • +
    • lines consisting only of opening and closing braces.
    • +
    + +
    +

    Depth of Inheritance Hierarchy - DIT

    + +This metric calculates how far down the inheritance hierarchy a class is +declared. In Java all classes have java.lang.Object as their ultimate +superclass, which is defined to have a depth of 1. So a class that +immediately extends java.lang.Object has a metric value of 2; any of its +subclasses will have a value of 3, and so on. +

    +A class that is deep within the tree inherits more methods and state +variables, thereby increasing its complexity and making it difficult to +predict its behavior. It can be harder to understand a system with many +inheritance layers. +

    +DIT is defined for classes and interfaces: +

      +
    • all interface types have a depth of 1;
    • +
    • the class java.lang.Object has a depth of 1;
    • +
    • all other classes have a depth of 1 + the depth of their super class.
    • +
    + +
    +

    Number of Attributes - NOA

    + +The number of distinct state variables in a class serves as one measure of +its complexity. The more state a class represents the more difficult it is to +maintain invariants for it. It also hinders comprehensibility and reuse. +

    +In Java, state can be exposed to subclasses through protected fields, which +entails that the subclass also be aware of and maintain any invariants. This +interference with the class's data encapsulation can be a source of defects +and hidden dependencies between the state variables. +

    +NOA is defined for classes and interfaces. It counts the number of fields +declared in the class or interface. + + +

    Number of Remote Methods - NRM

    + +NRM is defined for classes. A remote method call is defined as an +invocation of a method that is not declared in any of: +
      +
    • the class itself;
    • +
    • a class or interface that the class extends or implements;
    • +
    • a class or method that extends the class.
    • +
    + +The value is the count of all the remote method calls in all of the methods +and constructors of the class. + +
    +

    Number of Local Methods - NLM

    + +NLM is defined for classes and interfaces. A local method is defined as a +method that is declared in the class or interface. NLM can be configured to +include the local methods of all of the class's superclasses. Methods with +public, protected, package and private visibility can be independently +counted by setting configuration parameters. + +
    +

    Weighted Methods per Class - WMC

    + +If the number of methods in a class can be determined during the design +and modeling phase of a project, it can be used as a predictor of how +much time and effort is needed to develop, debug and maintain it. This +metric can be further refined by incorporating a weighting for the +complexity of each method. The usual weighting is given by the cyclomatic +complexity of the method. +

    +The subclasses of a class inherit all of its public and protected methods, +and possibly its package methods as well, so the number of methods a +class has directly impacts the complexity of its subclasses. Classes with +large numbers of methods are often specific to a particular application, +reducing the ability to reuse them. +

    +The definition of WMC is based upon NLM, and it provides the same +configuration parameters for counting inherited methods and of varying +visibility. The main difference is that NLM always counts each method as 1, +whereas WMC will weight each method. There are two weighting schemes: +

      +
    • V(G) the cyclomatic complexity of the method is used as its weight. + Methods from class files are given a V(G) of 1.
    • +
    • the arity, or the number of parameters of the method are used to + determine the weight.
    • +
    + +
    +

    Response For Class - RFC

    + +The response set of a class is the set of all methods that can be invoked as +a result of a message sent to an object of the class. This includes methods +in the class's inheritance hierarchy and methods that can be invoked on +other objects. The Response For Class metric is defined to be size of the +response set for the class. A class which provides a larger response set is +considered to be more complex than one with a smaller response set. +

    +One reason for this is that if a method call on a class can result in a large +number of different method calls on the target and other classes, then it +can be harder to test the behavior of the class and debug problems. It will +typically require a deeper understanding of the potential interactions that +objects of the class can have with the rest of the system. +

    +RFC is defined as the sum of NLM and NRM for the class. The local methods +include all of the public, protected, package and private methods, but not +methods declared only in a superclass. + + +

    Data Abstraction Coupling - DAC

    + +DAC is defined for classes and interfaces. It counts the number of reference +types that are used in the field declarations of the class or interface. The +component types of arrays are also counted. Any field with a type that is +either a supertype or a subtype of the class is not counted. + + +

    Fan Out - FANOUT

    + +FANOUT is defined for classes and interfaces, constructors and methods. It +counts the number of reference types that are used in: +
      +
    • field declarations;
    • +
    • formal parameters and return types;
    • +
    • throws declarations;
    • +
    • local variables.
    • +
    + +The component types of arrays are also counted. Any type that is either a +supertype or a subtype of the class is not counted. + +
    +

    Coupling Between Objects - CBO

    + +When one object or class uses another object or class they are said to be +coupled. One major source of coupling is that between a superclass and a +subclass. A coupling is also introduced when a method or field in another +class is accessed, or when an object of another class is passed into or out +of a method invocation. Coupling Between Objects is a measure of the +non-inheritance coupling between two objects. +

    +A high value of coupling reduces the modularity of the class and makes +reuse more difficult. The more independent a class is the more likely it is +that it will be possible to reuse it in another part of the system. When a +class is coupled to another class it becomes sensitive to changes in that +class, thereby making maintenance for difficult. In addition, a class that is +overly dependent on other classes can be difficult to understand and test in +isolation. +

    +CBO is defined for classes and interfaces, constructors and methods. It +counts the number of reference types that are used in: +

      +
    • field declarations
    • +
    • formal parameters and return types
    • +
    • throws declarations
    • +
    • local variables
    • +
    + +It also counts: +
      +
    • types from which field and method selections are made
    • +
    + +The component types of arrays are also counted. Any type that is either a +supertype or a subtype of the class is not counted. + +
    +

    Lack of Cohesion Of Methods - LCOM

    + +The cohesion of a class is the degree to which its methods are related to +each other. It is determined by examining the pattern of state variable +accesses within the set of methods. If all the methods access the same state +variables then they have high cohesion; if they access disjoint sets of +variables then the cohesion is low. An extreme example of low cohesion +would be if none of the methods accessed any of the state variables. + +If a class exhibits low method cohesion it indicates that the design of the +class has probably been partitioned incorrectly, and could benefit by being +split into more classes with individually higher cohesion. On the other +hand, a high value of cohesion (a low lack of cohesion) implies that the +class is well designed. A cohesive class will tend to provide a high degree +of encapsulation, whereas a lack of cohesion decreases encapsulation and +increases complexity. +

    +Another form of cohesion that is useful for Java programs is cohesion +between nested and enclosing classes. A nested class that has very low +cohesion with its enclosing class would probably better designed as a peer +class rather than a nested class. +

    +LCOM is defined for classes. Operationally, LCOM takes each pair of +methods in the class and determines the set of fields they each access. If +they have disjoint sets of field accesses increase the count P by one. If they +share at least one field access then increase Q by one. After considering +each pair of methods, +LCOM = (P > Q) ? (P - Q) : 0 +

    +Indirect access to fields via local methods can be considered by setting a +metric configuration parameter. + + +

    Number Of Classes - NOC

    + +The overall size of the system can be estimated by calculating the number +of classes it contains. A large system with more classes is more complex +than a smaller one because the number of potential interactions between +objects is higher. This reduces the comprehensibility of the system which +in turn makes it harder to test, debug and maintain. +

    +If the number of classes in the system can be projected during the initial +design phase of the project it can serve as a base for estimating the total +effort and cost of developing, debugging and maintaining the system. +

    +The NOC metric can also usefully be applied at the package and class level +as well as the total system. +

    +NOCL is defined for class and interfaces. It counts the number of classes or +interfaces that are declared. This is usually 1, but nested class declarations +will increase this number. + + + + + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + .Error { + font-weight:bold; color:red; + } + + + + + + + + + + + + + + + + +

    Class .

    + + + +
    + +

    Methods

    + + + +
    + + + + +
    + + + + + + + + + + + + + + + +
    +

    +
    + +

    Classes

    + + + + + + + + +
    + +
    + + +
    + + + + + + + + + + + +

    Classes

    + + + + + +
    + + +
    + + + + + + +
    + + + / + + .html + + + + + + + + + + + + + + + + +

    Home

    +

    Packages

    + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + +

    Summary

    + + + + + + + + + + + + + + + + + +
    V(G)LOCDITNOANRMNLMWMCRFCDACFANOUTCBOLCOMNOCL
    + + + + +
    + Note: Metrics evaluate the quality of software by analyzing the program source and quantifying + various kind of complexity. Complexity is a common source of problems and defects in software. + High complexity makes it more difficult to develop, understand, maintain, extend, test and debug + a program. +

    + The primary use of metrics is to focus your attention on those parts of code that potentially are + complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial + actions. + For additional information about metrics and their meaning, please consult + Metamata Metrics manual. +

    + +

    Packages

    + + + + + + +
    + + + + +
    + + + + + + + + + + + +

    Package

    + + + + +
    + + + + + +
    + Note: Metrics evaluate the quality of software by analyzing the program source and quantifying + various kind of complexity. Complexity is a common source of problems and defects in software. + High complexity makes it more difficult to develop, understand, maintain, extend, test and debug + a program. +

    + The primary use of metrics is to focus your attention on those parts of code that potentially are + complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial + actions. + For additional information about metrics and their meaning, please consult + Metamata Metrics manual. +

    + + + +

    Classes

    + + + + + + +
    +
    + + + + +
    + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + + + + + + + + + + + +
    + + http://jakarta.apache.org + +

    Source Code Metrics

    Designed for use with Webgain QA/Metamata Metrics and Ant.
    +
    +
    + + + + + + + + + Name + V(G) + LOC + DIT + NOA + NRM + NLM + WMC + RFC + DAC + FANOUT + CBO + LCOM + NOCL + + + + + + + Name + V(G) + LOC + FANOUT + CBO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a + b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error + + + + +
    + diff --git a/SDK/Modules/BuildSystem/_ant/etc/tagdiff.xsl b/SDK/Modules/BuildSystem/_ant/etc/tagdiff.xsl new file mode 100644 index 0000000000..5d430a79da --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/etc/tagdiff.xsl @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + <xsl:value-of select="$title"/> + + + +

    + +

    + Tagdiff between and + +

    Designed for use with Ant.

    +
    + + + + + +
    + New Files | + Modified Files | + Removed Files +
    + + + New Files + New + + + + + Modified Files + Modified + + + + + + Removed Files + Removed + + +
    + + + +
    + + + + + + + + + + - entries + + (back to top) + + + + + + + +
      + +
    + + + + + + + + + + + + + + + + + + + + mailto: + + + + + + +
  • + + / + + + + + + + + /?rev=&content-type=text/x-cvsweb-markup + + + /?r1=&r2=&diff_format=h + + ( --> ) + + +
  • +
    + + + + + + +
    diff --git a/SDK/Modules/BuildSystem/_ant/fetch.xml b/SDK/Modules/BuildSystem/_ant/fetch.xml new file mode 100644 index 0000000000..1515fbfefd --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/fetch.xml @@ -0,0 +1,341 @@ + + + + + + + + This build file downloads JAR files that optional Ant tasks use, + and installs them in a location that is accessible the next time Ant runs. + + You can choose three locations, by going -Ddest=LOCATION on the command line + -Ddest=user user lib dir ${user.home}/.ant/lib + -Ddest=system ant lib dir ${ant.home}/lib + -Ddest=optional optional dir $${basedir}/lib/optional (for Ant developers) + + You may also need to set proxy settings. On Java1.5, Ant tries to get + this from the OS, unless you use the -noproxy option. + + Proxies can be configured manually setting the JVM proxy values in the + ANT_OPTS environment variable. + + For example, to set the proxy up in the tcsh shell, the command would be + something like: + + For csh/tcsh: + setenv ANT_OPTS "-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080" + For bash: + export ANT_OPTS="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080" + For Windows, set the environment variable in the appropriate dialog box + and open a new console. or, by hand + set ANT_OPTS = -Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080 + + + + + + + + + + + + + + + + + + + + + + + + ERROR +Set -Ddest=LOCATION on the command line + -Ddest=user user lib dir ${user.home}/.ant/lib + -Ddest=system ant lib dir ${ant.home}/lib + -Ddest=optional optional dir $${basedir}/lib/optional (for Ant developers) + + + + + + + + + + + + Unknown destination : ${dest} + Downloading to ${dest.dir} + + + + + + + + + + + + + Unknown archive @{archive} -no property @{archive}.version defined in ${lib.dir}/libraries.properties. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDK/Modules/BuildSystem/_ant/get-m2.xml b/SDK/Modules/BuildSystem/_ant/get-m2.xml new file mode 100644 index 0000000000..4111e81ea1 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/get-m2.xml @@ -0,0 +1,121 @@ + + + + + + + + This build file downloads the Maven2 Ant tasks, + and installs them in the location specified by the m2.dest.dir property. + + You may need to set proxy settings. On Java1.5, Ant tries to get + this from the OS, unless you use the -noproxy option. + + Proxies can be configured manually setting the JVM proxy values in the + ANT_OPTS environment variable. + + For example, to set the proxy up in the tcsh shell, the command would be + something like: + + For csh/tcsh: + setenv ANT_OPTS "-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080" + For bash: + export ANT_OPTS="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080" + For Windows, set the environment variable in the appropriate dialog box + and open a new console. or, by hand + set ANT_OPTS = -Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080 + + + + + + + + + + + + $${@{property}} not specified + + + + + + + + + + + + + + + + + + + Downloading to ${m2.dest.dir} + + + + + + + + + + + + + + + + + + Failed to verify the downloaded file ${m2.antlib.url}" against the checksum + coded into libraries.properties. + The local copy has been deleted, for security reasons + + + + + + + + + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/README b/SDK/Modules/BuildSystem/_ant/lib/README new file mode 100644 index 0000000000..67e37ce736 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/README @@ -0,0 +1,3 @@ +Please refer to the Ant manual under Installing Ant / Library +Dependencies for a list of the jar requirements for various optional +tasks and features. diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-antlr.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-antlr.jar new file mode 100644 index 0000000000..86089f64a3 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-antlr.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-antlr.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-antlr.pom new file mode 100644 index 0000000000..f6044b4d7f --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-antlr.pom @@ -0,0 +1,75 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-antlr + 1.10.0 + Apache Ant + ANTLR + antlr specific task. + The implementation forks a java process, therefore the antlr jar file is only needed at runtime + + + org.apache.ant + ant + 1.10.0 + true + compile + + + + antlr + antlr + 2.7.2 + true + runtime + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/ANTLR* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bcel.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bcel.jar new file mode 100644 index 0000000000..3b6c4bedec Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bcel.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bcel.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bcel.pom new file mode 100644 index 0000000000..5754c9b1d5 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bcel.pom @@ -0,0 +1,71 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-bcel + 1.10.0 + Apache Ant + BCEL + + + org.apache.ant + ant + 1.10.0 + compile + + + bcel + bcel + 5.1 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/util/depend/bcel/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bsf.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bsf.jar new file mode 100644 index 0000000000..a1cff8e683 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bsf.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bsf.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bsf.pom new file mode 100644 index 0000000000..57c37c0c0c --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-bsf.pom @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-bsf + 1.10.0 + Apache Ant + BSF + + + org.apache.ant + ant + 1.10.0 + compile + + + bsf + bsf + 2.4.0 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/Script* + org/apache/tools/ant/taskdefs/optional/script/** + org/apache/tools/ant/types/optional/*Script* + org/apache/tools/ant/util/Script* + org/apache/tools/ant/util/optional/Script* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-log4j.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-log4j.jar new file mode 100644 index 0000000000..012fefca80 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-log4j.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-log4j.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-log4j.pom new file mode 100644 index 0000000000..dd861c3cff --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-log4j.pom @@ -0,0 +1,69 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-log4j + 1.10.0 + Apache Ant + Log4J + + + org.apache.ant + ant + 1.10.0 + compile + + + log4j + log4j + 1.2.13 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/listener/Log4jListener* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-oro.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-oro.jar new file mode 100644 index 0000000000..a16806f5df Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-oro.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-oro.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-oro.pom new file mode 100644 index 0000000000..383ddf7e68 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-oro.pom @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-oro + 1.10.0 + Apache Ant + Apache Oro + + + org.apache.ant + ant + 1.10.0 + compile + + + oro + oro + 2.0.8 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/util/regexp/JakartaOro* + + + org/apache/tools/ant/util/regexp/JakartaOro* + org/apache/tools/ant/util/regexp/Regexp* + + + + + ../../../../src/main + ../../../../src/tests/junit + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-regexp.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-regexp.jar new file mode 100644 index 0000000000..eb1aac7145 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-regexp.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-regexp.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-regexp.pom new file mode 100644 index 0000000000..ace5f913f2 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-regexp.pom @@ -0,0 +1,70 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-regexp + 1.10.0 + Apache Ant + Apache Regexp + + + org.apache.ant + ant + 1.10.0 + compile + + + regexp + regexp + 1.3 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/util/regexp/JakartaRegexp* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-resolver.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-resolver.jar new file mode 100644 index 0000000000..6bcc719de3 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-resolver.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-resolver.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-resolver.pom new file mode 100644 index 0000000000..6519504d6c --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-resolver.pom @@ -0,0 +1,69 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-resolver + 1.10.0 + Apache Ant + Apache Resolver + + + org.apache.ant + ant + 1.10.0 + compile + + + xml-resolver + xml-resolver + 1.1 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/types/resolver/** + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-xalan2.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-xalan2.jar new file mode 100644 index 0000000000..e104107c8a Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-xalan2.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-apache-xalan2.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-xalan2.pom new file mode 100644 index 0000000000..570fc0a199 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-apache-xalan2.pom @@ -0,0 +1,94 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-xalan2 + 1.10.0 + Apache Ant + Xalan 2 + contains Xalan2-specific features + + + org.apache.ant + ant + 1.10.0 + compile + + + xalan + xalan + 2.7.1 + compile + + + + + + maven-antrun-plugin + + + create-timestamp-file + generate-resources + + run + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-commons-logging.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-logging.jar new file mode 100644 index 0000000000..fbe23ab5a2 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-logging.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-commons-logging.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-logging.pom new file mode 100644 index 0000000000..6fdfa31f93 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-logging.pom @@ -0,0 +1,70 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-commons-logging + 1.10.0 + Apache Ant + Commons Logging + Ant Listener based on commons-logging + + + org.apache.ant + ant + 1.10.0 + compile + + + commons-logging + commons-logging-api + 1.0.4 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/listener/CommonsLoggingListener* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-commons-net.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-net.jar new file mode 100644 index 0000000000..d3b69286fe Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-net.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-commons-net.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-net.pom new file mode 100644 index 0000000000..44f8389816 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-commons-net.pom @@ -0,0 +1,75 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-commons-net + 1.10.0 + Apache Ant + Commons Net + ftp, rexec and telnet tasks + + + org.apache.ant + ant + 1.10.0 + compile + + + commons-net + commons-net + 1.4.0 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/net/FTP* + org/apache/tools/ant/taskdefs/optional/net/RExec* + org/apache/tools/ant/taskdefs/optional/net/TelnetTask* + + + org/apache/tools/ant/taskdefs/optional/net/FTP* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jai.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-jai.jar new file mode 100644 index 0000000000..211f5453bd Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-jai.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jai.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-jai.pom new file mode 100644 index 0000000000..0555d0ed6f --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-jai.pom @@ -0,0 +1,85 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jai + 1.10.0 + Apache Ant + JAI + image task and corresponding types. + + + + org.apache.ant + ant + 1.10.0 + compile + + + javax.media + jai-core + 1.1.3 + + + com.sun.media + jai-codec + 1.1.3 + + + + + + jboss + JBoss + https://repository.jboss.org/nexus/content/groups/public/ + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/image/* + org/apache/tools/ant/types/optional/image/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-javamail.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-javamail.jar new file mode 100644 index 0000000000..d78fd8cfce Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-javamail.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-javamail.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-javamail.pom new file mode 100644 index 0000000000..617e23f891 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-javamail.pom @@ -0,0 +1,78 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-javamail + 1.10.0 + Apache Ant + JavaMail + implementation of the mail task based on javamail. + Required to send emails to SMTP servers using user/password combinations + or to send mail over SSL + + + org.apache.ant + ant + 1.10.0 + compile + + + javax.mail + mail + 1.4 + compile + + + javax.activation + activation + 1.1 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/email/MimeMailer* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jdepend.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-jdepend.jar new file mode 100644 index 0000000000..fb2447d0ee Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-jdepend.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jdepend.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-jdepend.pom new file mode 100644 index 0000000000..10ab36720e --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-jdepend.pom @@ -0,0 +1,72 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jdepend + 1.10.0 + Apache Ant + JDepend + task jdepend invoking the jdepend parser. There is also a version 2.9.1 of the + jdepend parser available on the maven repository + + + org.apache.ant + ant + 1.10.0 + compile + + + jdepend + jdepend + 2.7 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/jdepend/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jmf.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-jmf.jar new file mode 100644 index 0000000000..da16ec57f7 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-jmf.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jmf.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-jmf.pom new file mode 100644 index 0000000000..092a174404 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-jmf.pom @@ -0,0 +1,65 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jmf + 1.10.0 + Apache Ant + JMF + contains the sound task and a soundplayer listener + download the dependency from http://java.sun.com/products/java-media/jmf/ + + + org.apache.ant + ant + 1.10.0 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/sound/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jsch.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-jsch.jar new file mode 100644 index 0000000000..5e315abb8e Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-jsch.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-jsch.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-jsch.pom new file mode 100644 index 0000000000..2989eaa642 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-jsch.pom @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jsch + 1.10.0 + Apache Ant + JSch + contains the sshexec and scp tasks + + + + org.apache.ant + ant + 1.10.0 + compile + + + com.jcraft + jsch + 0.1.50 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/ssh/* + + + org/apache/tools/ant/taskdefs/optional/ssh/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-junit.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-junit.jar new file mode 100644 index 0000000000..e8183573b3 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-junit.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-junit.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-junit.pom new file mode 100644 index 0000000000..65ab0d8354 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-junit.pom @@ -0,0 +1,101 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-junit + 1.10.0 + Apache Ant + JUnit + contains the junit and junirreport tasks + + + org.apache.ant + ant + 1.10.0 + compile + + + junit + junit + 4.11 + compile + + + + + + maven-antrun-plugin + + + create-timestamp-file + generate-resources + + run + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/junit/* + + + org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter* + org/apache/tools/ant/taskdefs/optional/junit/CustomJUnit4TestAdapterCache* + + + org/apache/tools/ant/taskdefs/optional/junit/ + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-junit4.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-junit4.jar new file mode 100644 index 0000000000..f1dba69743 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-junit4.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-junit4.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-junit4.pom new file mode 100644 index 0000000000..353e063a72 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-junit4.pom @@ -0,0 +1,71 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-junit4 + 1.10.0 + Apache Ant + JUnit 4 + contains JUnit 4.x support + + + org.apache.ant + ant + 1.10.0 + compile + + + junit + junit + 4.11 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter* + org/apache/tools/ant/taskdefs/optional/junit/CustomJUnit4TestAdapterCache* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-launcher.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-launcher.jar new file mode 100644 index 0000000000..6baa8f1ae7 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-launcher.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-launcher.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-launcher.pom new file mode 100644 index 0000000000..30720b29a6 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-launcher.pom @@ -0,0 +1,57 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-launcher + 1.10.0 + Apache Ant Launcher + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/launch/*.java + + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/ant-launcher/classes + ../../../../target/ant-launcher/testcases + ../../../../target/ant-launcher + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-netrexx.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-netrexx.jar new file mode 100644 index 0000000000..8b7f0ce300 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-netrexx.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-netrexx.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-netrexx.pom new file mode 100644 index 0000000000..f45a934536 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-netrexx.pom @@ -0,0 +1,98 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-netrexx + 1.10.0 + Apache Ant + NetRexx + NetRexxC task + dependency can be downloaded from http://www.ibm.com/software/awdtools/netrexx/download.html + + + org.apache.ant + ant + 1.10.0 + compile + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/NetRexxC* + + + + ${basedir}/../../../../lib/optional + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.4 + + + validate + + + + + + + + + run + + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-parent.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-parent.pom new file mode 100644 index 0000000000..f0de9bcaca --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-parent.pom @@ -0,0 +1,151 @@ + + + + + 4.0.0 + org.apache.ant + ant-parent + 1.10.0 + pom + master POM + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + Apache Ant + http://ant.apache.org/ + 2000 + + The Apache Software Foundation + http://www.apache.org/ + + + + + dummy + Dummy to avoid accidental deploys + http://nowhere.net/ + + + + scm:git:https://git-wip-us.apache.org/repos/asf/ant.git + scm:git:https://git-wip-us.apache.org/repos/asf/ant.git + https://git-wip-us.apache.org/repos/asf/ant.git + + + hudson + https://builds.apache.org/job/Ant_BuildFromPOMs/ + + + + Ant Developers List + dev-subscribe@ant.apache.org + dev-unsubscribe@ant.apache.org + dev@ant.apache.org + http://mail-archives.apache.org/mod_mbox/ant-dev + + + Ant Users List + user-subscribe@ant.apache.org + user-unsubscribe@ant.apache.org + user@ant.apache.org + http://mail-archives.apache.org/mod_mbox/ant-user + + + + bugzilla + http://issues.apache.org/bugzilla/ + + + ant + ant-antlr + ant-apache-bcel + ant-apache-bsf + ant-apache-log4j + ant-apache-oro + ant-apache-regexp + ant-apache-resolver + ant-apache-xalan2 + ant-commons-logging + ant-commons-net + ant-jai + ant-javamail + ant-jdepend + ant-jmf + ant-jsch + ant-junit + ant-junit4 + ant-launcher + ant-netrexx + ant-swing + ant-testutil + + + + junit + junit + 3.8.2 + test + + + + ../../../src/main + ../../../src/testcases + ../../../target/classes + ../../../target/testcases + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12 + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.12 + + + + + + UTF-8 + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-swing.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-swing.jar new file mode 100644 index 0000000000..ea5bcb22ae Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-swing.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-swing.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-swing.pom new file mode 100644 index 0000000000..0e1f3ca9ed --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-swing.pom @@ -0,0 +1,66 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-swing + 1.10.0 + Apache Ant + Swing + a listener and a splash task based on Swing + + + org.apache.ant + ant + 1.10.0 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/splash/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-testutil.jar b/SDK/Modules/BuildSystem/_ant/lib/ant-testutil.jar new file mode 100644 index 0000000000..3fb189420b Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant-testutil.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant-testutil.pom b/SDK/Modules/BuildSystem/_ant/lib/ant-testutil.pom new file mode 100644 index 0000000000..d4f293a836 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant-testutil.pom @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-testutil + 1.10.0 + Apache Ant Test Utilities + test utility classes + + + org.apache.ant + ant + 1.10.0 + compile + + + junit + junit + 4.11 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/BuildFileTest* + org/apache/tools/ant/util/regexp/RegexpMatcherTest* + org/apache/tools/ant/util/regexp/RegexpTest* + org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest* + org/apache/tools/ant/types/AbstractFileSetTest* + + + + + ../../../../src/tests/junit + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId} + + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant.jar b/SDK/Modules/BuildSystem/_ant/lib/ant.jar new file mode 100644 index 0000000000..97c3eff0c7 Binary files /dev/null and b/SDK/Modules/BuildSystem/_ant/lib/ant.jar differ diff --git a/SDK/Modules/BuildSystem/_ant/lib/ant.pom b/SDK/Modules/BuildSystem/_ant/lib/ant.pom new file mode 100644 index 0000000000..078f1f96d4 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/ant.pom @@ -0,0 +1,225 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.10.0 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant + 1.10.0 + Apache Ant Core + + + org.apache.ant + ant-launcher + 1.10.0 + compile + + + junit + junit + 4.11 + test + + + + + ../../../../target/ant/.build.timestamp.properties + + + + org.apache.maven.plugins + maven-jar-plugin + + + + maven-antrun-plugin + + + create-timestamp-file + generate-resources + + run + + + + + + + + + + + + delete-timestamp-file + clean + + run + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/types/resolver/** + org/apache/tools/ant/listener/Log4jListener* + org/apache/tools/ant/listener/CommonsLoggingListener* + org/apache/tools/ant/util/regexp/JakartaRegexp* + org/apache/tools/ant/util/regexp/JakartaOro* + org/apache/tools/ant/taskdefs/email/MimeMailer* + org/apache/tools/ant/launch/** + org/apache/tools/ant/taskdefs/optional/net/FTP* + org/apache/tools/ant/taskdefs/optional/net/RExec* + org/apache/tools/ant/taskdefs/optional/net/TelnetTask* + org/apache/tools/ant/taskdefs/optional/junit/* + org/apache/tools/ant/taskdefs/optional/ssh/* + org/apache/tools/ant/taskdefs/optional/image/* + org/apache/tools/ant/types/optional/image/* + org/apache/tools/ant/taskdefs/optional/Script* + org/apache/tools/ant/taskdefs/optional/script/** + org/apache/tools/ant/types/optional/*Script* + org/apache/tools/ant/util/ScriptRunner.java + org/apache/tools/ant/util/optional/ScriptRunner.java + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/util/depend/bcel/* + org/apache/tools/ant/taskdefs/optional/NetRexxC* + org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport* + org/apache/tools/ant/taskdefs/optional/jdepend/* + + + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/types/resolver/** + org/apache/tools/ant/util/Script* + org/apache/tools/ant/listener/Log4jListener* + org/apache/tools/ant/listener/CommonsLoggingListener* + org/apache/tools/ant/util/regexp/JakartaRegexp* + org/apache/tools/ant/util/regexp/JakartaOro* + org/apache/tools/ant/util/regexp/Jdk14Regexp* + org/apache/tools/ant/taskdefs/email/MimeMailer* + org/apache/tools/ant/launch/** + org/apache/tools/ant/taskdefs/StyleTest* + org/apache/tools/ant/taskdefs/optional/junit/ + org/apache/tools/ant/taskdefs/optional/net/FTP* + org/apache/tools/ant/taskdefs/optional/ssh/* + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + ant.home + ${env.ANT_HOME} + + + build.tests + ../../../../target/ant/testcases + + + build.tests.value + ../../../../target/ant/testcases + + + offline + true + + + root + ../../../.. + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + + + + + ../../../../src/main + true + + org/apache/tools/ant/taskdefs/default.properties + org/apache/tools/ant/types/default.properties + org/apache/tools/ant/taskdefs/default.properties + org/apache/tools/ant/types/conditions/antlib.xml + org/apache/tools/ant/defaultManifest.mf + org/apache/tools/ant/version.txt + + + + ../../../../src/resources + true + + **/antlib.xml + + + + ../../../../docs + false + + images/ant_logo_large.gif + + + + + + ../../../../src/etc/testcases + true + + + ../../../../src/main + true + + **/*.java + + + + ../../../../src/main + ../../../../src/tests/junit + ../../../../target/ant/classes + ../../../../target/ant/testcases + ../../../../target/ant + + diff --git a/SDK/Modules/BuildSystem/_ant/lib/libraries.properties b/SDK/Modules/BuildSystem/_ant/lib/libraries.properties new file mode 100644 index 0000000000..4b498a9625 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/lib/libraries.properties @@ -0,0 +1,66 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#this file declares the libraries for use in +#a given release of the components + +#if you change this, change the checksum to match +m2.version=2.0.4 +m2.url=http\://repo1.maven.org/maven2 +m2.artifact-name=maven-artifact-ant +m2.jar.name=${m2.artifact-name}-${m2.version}-dep.jar +#this is the URL of the antlib library, that is pulled down for everything else. +m2.antlib.url=${m2.url}/org/apache/maven/${m2.artifact-name}/${m2.version}/${m2.jar.name} +#this is the sha1 checksum of the artifact +m2.sha1.checksum=4e7ddfdb91600e9b59bb965ff8eef2f06015df50 + +# Repository to use by default for fetching dependencies. +m2.repo=http://repo1.maven.org/maven2/ + +#versions of different libraries. Please keep in alphabetical order, except +#when a specific dependency forces them to be out-of-order +ivy.version=2.4.0 +antlr.version=2.7.7 +bcel.version=5.1 +bsf.version=2.4.0 +bsh.version=2.0b4 +bsh-core.version=${bsh.version} +commons-net.version=1.4.1 +commons-logging.version=1.1 +commons-logging-api.version=${commons-logging.version} +jai-core.version=1.1.3 +jai-codec.version=1.1.3 +jasper-compiler.version=4.1.36 +jasper-runtime.version=${jasper-compiler.version} +jdepend.version=2.9.1 +jruby.version=0.9.8 +junit.version=4.11 +jsch.version=0.1.50 +jython.version=2.1 +#log4j 1.2.15 requires JMS and a few other Sun jars that are not in the m2 repo +log4j.version=1.2.14 +#js is the javascript implementation of the rhino project +#17R1 is compiled with Java5 so we can't use the jar when building with JDK 1.4 +js.version=1.6R7 +oro.version=2.0.8 +regexp.version=1.3 +servlet-api.version=2.3 +which.version=1.0 +xalan.version=2.7.2 +xml-resolver.version=1.2 +mail.version=1.4 +#paired +jacl.version=1.2.6 +tcljava.version=${jacl.version} diff --git a/SDK/Modules/BuildSystem/_ant/patch.xml b/SDK/Modules/BuildSystem/_ant/patch.xml new file mode 100644 index 0000000000..910b123242 --- /dev/null +++ b/SDK/Modules/BuildSystem/_ant/patch.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDK/Modules/BuildSystem/_other/ReplaceVistaIcon.exe b/SDK/Modules/BuildSystem/_other/ReplaceVistaIcon.exe new file mode 100644 index 0000000000..d786dc8fc3 --- /dev/null +++ b/SDK/Modules/BuildSystem/_other/ReplaceVistaIcon.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:360e58c7eadea113497df290147cfe50ab422270c63972c0d5f5b91cacf1e678 +size 196608 diff --git a/SDK/Modules/Core/BaseCritter.focr b/SDK/Modules/Core/BaseCritter.focr new file mode 100644 index 0000000000..74be0a05ad --- /dev/null +++ b/SDK/Modules/Core/BaseCritter.focr @@ -0,0 +1,5 @@ +[ProtoCritter] +$Inject = All +WalkTime = 400 +RunTime = 200 +Cond = Alive diff --git a/SDK/Modules/Core/BaseItem.foitem b/SDK/Modules/Core/BaseItem.foitem new file mode 100644 index 0000000000..4d06351ed9 --- /dev/null +++ b/SDK/Modules/Core/BaseItem.foitem @@ -0,0 +1,3 @@ +[ProtoItem] +$Inject = All +Count = 1 diff --git a/SDK/Modules/Core/BaseLocation.foloc b/SDK/Modules/Core/BaseLocation.foloc new file mode 100644 index 0000000000..d7ddd084ff --- /dev/null +++ b/SDK/Modules/Core/BaseLocation.foloc @@ -0,0 +1,2 @@ +[ProtoLocation] +$Inject = All diff --git a/SDK/Modules/Core/BaseMap.fomap b/SDK/Modules/Core/BaseMap.fomap new file mode 100644 index 0000000000..fc1152fc5f --- /dev/null +++ b/SDK/Modules/Core/BaseMap.fomap @@ -0,0 +1,4 @@ +[ProtoMap] +$Inject = All +DayColor = 18 128 103 51 18 128 95 40 53 128 86 29 +DayTime = 300 600 1140 1380 diff --git a/SDK/Modules/Core/ClientCore.fos b/SDK/Modules/Core/ClientCore.fos new file mode 100644 index 0000000000..219c1d6cf8 --- /dev/null +++ b/SDK/Modules/Core/ClientCore.fos @@ -0,0 +1,207 @@ +// FOS Client Mapper Sort -9 + +// Messages types in message boxes +#define FOMB_GAME ( 0 ) +#define FOMB_TALK ( 1 ) +#define FOMB_COMBAT_RESULT ( 2 ) +#define FOMB_VIEW ( 3 ) +#define FOMB_ALL ( 10 ) + +// Fonts +#define FONT_DEFAULT ( 0 ) + +// Font flags +#define FT_NOBREAK ( 0x0001 ) +#define FT_NOBREAK_LINE ( 0x0002 ) +#define FT_CENTERX ( 0x0004 ) +#define FT_CENTERY ( 0x0008 ) +#define FT_CENTERXY ( 0x000C ) +#define FT_CENTERR ( 0x0010 ) +#define FT_BOTTOM ( 0x0020 ) +#define FT_UPPER ( 0x0040 ) +#define FT_NO_COLORIZE ( 0x0080 ) +#define FT_ALIGN ( 0x0100 ) +#define FT_BORDERED ( 0x0200 ) +#define FT_SKIPLINES # (l) ( 0x0400 | ( ( l ) << 16 ) ) +#define FT_SKIPLINES_END # (l) ( 0x0800 | ( ( l ) << 16 ) ) + +// Client screen types +#define IS_CLIENT_MAIN_SCREEN # (s) ( ( s ) >= CLIENT_MAIN_SCREEN_LOGIN && ( s ) <= CLIENT_MAIN_SCREEN_WAIT ) +#define CLIENT_SCREEN_NONE ( 0 ) +#define CLIENT_SCREEN_CURSOR ( -1 ) +#define CLIENT_MAIN_SCREEN_LOGIN ( 1 ) +#define CLIENT_MAIN_SCREEN_GAME ( 2 ) +#define CLIENT_MAIN_SCREEN_GLOBAL_MAP ( 3 ) +#define CLIENT_MAIN_SCREEN_WAIT ( 4 ) +#define CLIENT_SCREEN_DIALOG ( 6 ) +#define CLIENT_SCREEN_TOWN_VIEW ( 9 ) + +// Mouse buttons +#define MOUSE_BUTTON_LEFT ( 0 ) +#define MOUSE_BUTTON_RIGHT ( 1 ) +#define MOUSE_BUTTON_MIDDLE ( 2 ) +#define MOUSE_BUTTON_WHEEL_UP ( 3 ) +#define MOUSE_BUTTON_WHEEL_DOWN ( 4 ) +#define MOUSE_BUTTON_EXT0 ( 5 ) +#define MOUSE_BUTTON_EXT1 ( 6 ) +#define MOUSE_BUTTON_EXT2 ( 7 ) +#define MOUSE_BUTTON_EXT3 ( 8 ) +#define MOUSE_BUTTON_EXT4 ( 9 ) + +// Keyboard key codes +#define DIK_ESCAPE 0x01 +#define DIK_1 0x02 +#define DIK_2 0x03 +#define DIK_3 0x04 +#define DIK_4 0x05 +#define DIK_5 0x06 +#define DIK_6 0x07 +#define DIK_7 0x08 +#define DIK_8 0x09 +#define DIK_9 0x0A +#define DIK_0 0x0B +#define DIK_MINUS 0x0C /* - on main keyboard */ +#define DIK_EQUALS 0x0D +#define DIK_BACK 0x0E /* backspace */ +#define DIK_TAB 0x0F +#define DIK_Q 0x10 +#define DIK_W 0x11 +#define DIK_E 0x12 +#define DIK_R 0x13 +#define DIK_T 0x14 +#define DIK_Y 0x15 +#define DIK_U 0x16 +#define DIK_I 0x17 +#define DIK_O 0x18 +#define DIK_P 0x19 +#define DIK_LBRACKET 0x1A +#define DIK_RBRACKET 0x1B +#define DIK_RETURN 0x1C /* Enter on main keyboard */ +#define DIK_LCONTROL 0x1D +#define DIK_A 0x1E +#define DIK_S 0x1F +#define DIK_D 0x20 +#define DIK_F 0x21 +#define DIK_G 0x22 +#define DIK_H 0x23 +#define DIK_J 0x24 +#define DIK_K 0x25 +#define DIK_L 0x26 +#define DIK_SEMICOLON 0x27 +#define DIK_APOSTROPHE 0x28 +#define DIK_GRAVE 0x29 /* accent grave */ +#define DIK_LSHIFT 0x2A +#define DIK_BACKSLASH 0x2B +#define DIK_Z 0x2C +#define DIK_X 0x2D +#define DIK_C 0x2E +#define DIK_V 0x2F +#define DIK_B 0x30 +#define DIK_N 0x31 +#define DIK_M 0x32 +#define DIK_COMMA 0x33 +#define DIK_PERIOD 0x34 /* . on main keyboard */ +#define DIK_SLASH 0x35 /* / on main keyboard */ +#define DIK_RSHIFT 0x36 +#define DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define DIK_LMENU 0x38 /* left Alt */ +#define DIK_SPACE 0x39 +#define DIK_CAPITAL 0x3A +#define DIK_F1 0x3B +#define DIK_F2 0x3C +#define DIK_F3 0x3D +#define DIK_F4 0x3E +#define DIK_F5 0x3F +#define DIK_F6 0x40 +#define DIK_F7 0x41 +#define DIK_F8 0x42 +#define DIK_F9 0x43 +#define DIK_F10 0x44 +#define DIK_NUMLOCK 0x45 +#define DIK_SCROLL 0x46 /* Scroll Lock */ +#define DIK_NUMPAD7 0x47 +#define DIK_NUMPAD8 0x48 +#define DIK_NUMPAD9 0x49 +#define DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define DIK_NUMPAD4 0x4B +#define DIK_NUMPAD5 0x4C +#define DIK_NUMPAD6 0x4D +#define DIK_ADD 0x4E /* + on numeric keypad */ +#define DIK_NUMPAD1 0x4F +#define DIK_NUMPAD2 0x50 +#define DIK_NUMPAD3 0x51 +#define DIK_NUMPAD0 0x52 +#define DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define DIK_F11 0x57 +#define DIK_F12 0x58 +#define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define DIK_RCONTROL 0x9D +#define DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define DIK_SYSRQ 0xB7 +#define DIK_RMENU 0xB8 /* right Alt */ +#define DIK_PAUSE 0xC5 /* Pause */ +#define DIK_HOME 0xC7 /* Home on arrow keypad */ +#define DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define DIK_END 0xCF /* End on arrow keypad */ +#define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define DIK_LWIN 0xDB /* Left Windows key */ +#define DIK_RWIN 0xDC /* Right Windows key */ +#define DIK_TEXT 0xFE +#define DIK_CLIPBOARD_PASTE 0xFF + +// Draw primitive types +#define DRAW_PRIMITIVE_POINTLIST ( 0 ) +#define DRAW_PRIMITIVE_LINELIST ( 1 ) +#define DRAW_PRIMITIVE_LINESTRIP ( 2 ) +#define DRAW_PRIMITIVE_TRIANGLELIST ( 3 ) +#define DRAW_PRIMITIVE_TRIANGLESTRIP ( 4 ) +#define DRAW_PRIMITIVE_TRIANGLEFAN ( 5 ) + +// Effect types +#define EFFECT_2D_GENERIC ( 0x00000001 ) // Subtype can be item id, zero for all items +#define EFFECT_2D_CRITTER ( 0x00000002 ) // Subtype can be critter id, zero for all critters +#define EFFECT_2D_TILE ( 0x00000004 ) +#define EFFECT_2D_ROOF ( 0x00000008 ) +#define EFFECT_2D_RAIN ( 0x00000010 ) +#define EFFECT_3D_SKINNED ( 0x00000400 ) +#define EFFECT_3D_SKINNED_SHADOW ( 0x00000800 ) +#define EFFECT_INTERFACE_BASE ( 0x00001000 ) +#define EFFECT_INTERFACE_CONTOUR ( 0x00002000 ) +#define EFFECT_FONT ( 0x00010000 ) // Subtype is FONT_*, -1 default for all fonts +#define EFFECT_PRIMITIVE_GENERIC ( 0x00100000 ) +#define EFFECT_PRIMITIVE_LIGHT ( 0x00200000 ) +#define EFFECT_FLUSH_RENDER_TARGET ( 0x01000000 ) +#define EFFECT_FLUSH_RENDER_TARGET_MS ( 0x02000000 ) // Multisample +#define EFFECT_FLUSH_PRIMITIVE ( 0x04000000 ) +#define EFFECT_FLUSH_MAP ( 0x08000000 ) +#define EFFECT_FLUSH_LIGHT ( 0x10000000 ) +#define EFFECT_FLUSH_FOG ( 0x20000000 ) +#define EFFECT_OFFSCREEN ( 0x40000000 ) // Each subtype are separate effect + +// Anchor styles +#define ANCHOR_NONE ( 0x0 ) +#define ANCHOR_LEFT ( 0x1 ) +#define ANCHOR_RIGHT ( 0x2 ) +#define ANCHOR_TOP ( 0x4 ) +#define ANCHOR_BOTTOM ( 0x8 ) + +// Dock styles +#define DOCK_NONE ( 0 ) +#define DOCK_LEFT ( 1 ) +#define DOCK_RIGHT ( 2 ) +#define DOCK_TOP ( 3 ) +#define DOCK_BOTTOM ( 4 ) +#define DOCK_FILL ( 5 ) + +// Image layouts +#define IMAGE_LAYOUT_NONE ( 0 ) +#define IMAGE_LAYOUT_TILE ( 1 ) +#define IMAGE_LAYOUT_CENTER ( 2 ) +#define IMAGE_LAYOUT_STRETCH ( 3 ) +#define IMAGE_LAYOUT_ZOOM ( 4 ) diff --git a/SDK/Modules/Core/Colors.fos b/SDK/Modules/Core/Colors.fos new file mode 100644 index 0000000000..2d4871e60d --- /dev/null +++ b/SDK/Modules/Core/Colors.fos @@ -0,0 +1,36 @@ +// FOS Common Sort -6 + +#define COLOR_RGB # ( r, g, b )( uint( ( 0xFF << 24 ) | ( ( ( r ) & 0xFF ) << 16 ) | ( ( ( g ) & 0xFF ) << 8 ) | ( ( b ) & 0xFF ) ) ) +#define COLOR_ARGB # ( a, r, g, b )( uint( ( ( ( a ) & 0xFF ) << 24 ) | ( ( ( r ) & 0xFF ) << 16 ) | ( ( ( g ) & 0xFF ) << 8 ) | ( ( b ) & 0xFF ) ) ) +#define COLOR_LIGHT3 # ( x, y )( ( x ) < ( y ) ? ( x ) : ( y ) ) +#define COLOR_LIGHT2 # ( color, light, offs )( COLOR_LIGHT3( ( ( ( color ) >> ( offs ) ) & 0xFF ) + ( light ), 255 ) << ( offs ) ) +#define COLOR_LIGHT # ( color, light )( COLOR_LIGHT2( color, light, 16 ) | COLOR_LIGHT2( color, light, 8 ) | COLOR_LIGHT2( color, light, 0 ) | ( ( color ) & 0xFF000000 ) ) + +#define COLOR_IFACE ( COLOR_RGB( 123, 115, 106 ) ) +#define COLOR_TEXT ( COLOR_RGB( 60, 248, 0 ) ) // Default text color +#define COLOR_TEXT_FOCUSED ( COLOR_RGB( 0, 0xAA, 0 ) ) // Default focused text color +#define COLOR_CRITTER_NAME ( COLOR_RGB( 0xAD, 0xAD, 0xB9 ) ) // Default critter nickname color +#define COLOR_CONTOUR_RED ( COLOR_RGB( 150, 0, 0 ) ) +#define COLOR_CONTOUR_YELLOW ( COLOR_RGB( 150, 150, 0 ) ) +#define COLOR_CONTOUR_GREEN ( COLOR_RGB( 0, 150, 0 ) ) + +#define COLOR_LGRAY ( COLOR_RGB( 0xAB, 0xAB, 0xAB ) ) +#define COLOR_GRAY ( COLOR_RGB( 0x7F, 0x7F, 0x7F ) ) +#define COLOR_WHITE ( COLOR_RGB( 0xFF, 0xFF, 0xFF ) ) +#define COLOR_RED ( COLOR_RGB( 0xC8, 0, 0 ) ) +#define COLOR_DRED ( COLOR_RGB( 0xAA, 0, 0 ) ) +#define COLOR_DDRED ( COLOR_RGB( 0x66, 0, 0 ) ) +#define COLOR_LRED ( COLOR_RGB( 0xFF, 0, 0 ) ) +#define COLOR_BLUE ( COLOR_RGB( 0, 0, 0xC8 ) ) +#define COLOR_DBLUE ( COLOR_RGB( 0, 0, 0xAA ) ) +#define COLOR_LBLUE ( COLOR_RGB( 0, 0, 0xFF ) ) +#define COLOR_GREEN ( COLOR_RGB( 0, 0xC8, 0 ) ) +#define COLOR_DGREEN ( COLOR_RGB( 0, 0xAA, 0 ) ) +#define COLOR_DDGREEN ( COLOR_RGB( 0, 0x66, 0 ) ) +#define COLOR_LGREEN ( COLOR_RGB( 0, 0xFF, 0 ) ) +#define COLOR_BLACK ( COLOR_RGB( 0, 0, 0 ) ) +#define COLOR_SBLACK ( COLOR_RGB( 0x10, 0x10, 0x10 ) ) +#define COLOR_DARK ( COLOR_RGB( 0x30, 0x30, 0x30 ) ) +#define COLOR_GREEN_RED ( COLOR_RGB( 0, 0xC8, 0xC8 ) ) +#define COLOR_SAND ( COLOR_RGB( 0x8F, 0x6F, 0 ) ) +#define COLOR_LEMON ( COLOR_RGB( 0xFF, 0xFF, 0 ) ) diff --git a/SDK/Modules/Core/Core.fos b/SDK/Modules/Core/Core.fos new file mode 100644 index 0000000000..a316362518 --- /dev/null +++ b/SDK/Modules/Core/Core.fos @@ -0,0 +1,556 @@ +// FOS Common Sort -10 + +#ifdef __SERVER +# pragma event "EventResourcesGenerated()" +# pragma event "EventInit()" +# pragma event "EventGenerateWorld()" +# pragma event "EventStart()" +# pragma event "EventFinish()" +# pragma event "EventLoop()" +# pragma event "EventGlobalMapCritterIn( Critter critter )" +# pragma event "EventGlobalMapCritterOut( const Critter critter )" + +# pragma event "EventLocationInit( Location location, bool firstTime )" +# pragma event "EventLocationFinish( Location location )" + +# pragma event "EventMapInit( Map map, bool firstTime )" +# pragma event "EventMapFinish( Map map )" +# pragma event "EventMapLoop( Map map, uint loopIndex )" +# pragma event "EventMapCritterIn( Map map, Critter critter )" +# pragma event "EventMapCritterOut( const Map map, const Critter critter )" +# pragma event "EventMapCheckLook( const Map map, const Critter critter, const Critter target )" +# pragma event "EventMapCheckTrapLook( const Map map, const Critter critter, const Item item )" + +# pragma event "EventCritterInit( Critter critter, bool firstTime )" +# pragma event "EventCritterFinish( Critter critter )" +# pragma event "EventCritterIdle( Critter critter )" +# pragma event "EventCritterGlobalMapIdle( Critter critter )" +# pragma event "EventCritterCheckMoveItem( const Critter critter, const Item item, uint8 toSlot )" +# pragma event "EventCritterMoveItem( const Critter critter, const Item item, uint8 fromSlot )" +# pragma event "EventCritterShow( Critter critter, Critter showCritter ) deferred" +# pragma event "EventCritterShowDist1( Critter critter, Critter showCritter ) deferred" +# pragma event "EventCritterShowDist2( Critter critter, Critter showCritter ) deferred" +# pragma event "EventCritterShowDist3( Critter critter, Critter showCritter ) deferred" +# pragma event "EventCritterHide( Critter critter, Critter hideCritter ) deferred" +# pragma event "EventCritterHideDist1( Critter critter, Critter hideCritter ) deferred" +# pragma event "EventCritterHideDist2( Critter critter, Critter hideCritter ) deferred" +# pragma event "EventCritterHideDist3( Critter critter, Critter hideCritter ) deferred" +# pragma event "EventCritterShowItemOnMap( Critter critter, Item item, bool added, Critter fromCritter ) deferred" +# pragma event "EventCritterHideItemOnMap( Critter critter, Item item, bool removed, Critter toCritter ) deferred" +# pragma event "EventCritterChangeItemOnMap( Critter critter, Item item ) deferred" +# pragma event "EventCritterMessage( Critter critter, Critter receiver, int num, int value )" +# pragma event "EventCritterTalk( Critter critter, Critter who, bool begin, uint talkers )" +# pragma event "EventCritterBarter( Critter cr, Critter trader, bool begin, uint barterCount )" +# pragma event "EventCritterGetAttackDistantion( const Critter critter, const Item item, uint8 itemMode, uint& dist )" +# pragma event "EventPlayerRegistration( uint, string, uint&, uint&, string& )" +# pragma event "EventPlayerLogin( uint, string, uint, uint&, uint&, string& )" +# pragma event "EventPlayerGetAccess( Critter player, int, string& )" +# pragma event "EventPlayerAllowCommand( Critter player, string, uint8 )" +# pragma event "EventPlayerLogout( Critter player )" + +# pragma event "EventItemInit( Item item, bool firstTime )" +# pragma event "EventItemFinish( Item item )" +# pragma event "EventItemWalk( Item item, Critter critter, bool isIn, uint8 dir ) deferred" +# pragma event "EventItemCheckMove( const Item item, uint count, const Entity from, const Entity to )" + +# pragma event "EventStaticItemWalk( const Item item, Critter critter, bool isIn, uint8 dir ) deferred" +#endif + +#ifdef __CLIENT +# pragma event "EventStart()" +# pragma event "EventFinish()" +# pragma event "EventLoop()" +# pragma event "EventGetActiveScreens( int[] screens )" +# pragma event "EventScreenChange( bool show, int screen, dictionary params )" +# pragma event "EventScreenScroll( int offsetX, int offsetY )" +# pragma event "EventRenderIface()" +# pragma event "EventRenderMap()" +# pragma event "EventMouseDown( int button )" +# pragma event "EventMouseUp( int button )" +# pragma event "EventMouseMove( int offsetX, int offsetY )" +# pragma event "EventKeyDown( uint8 key, string text )" +# pragma event "EventKeyUp( uint8 key )" +# pragma event "EventInputLost()" +# pragma event "EventCritterIn( Critter critter )" +# pragma event "EventCritterOut( Critter critter )" +# pragma event "EventItemMapIn( Item item )" +# pragma event "EventItemMapChanged( Item item, Item oldItem )" +# pragma event "EventItemMapOut( Item item )" +# pragma event "EventItemInvAllIn()" +# pragma event "EventItemInvIn( Item item )" +# pragma event "EventItemInvChanged( Item item, Item oldItem )" +# pragma event "EventItemInvOut( Item item )" +# pragma event "EventReceiveItems( Item[] items, int param )" +# pragma event "EventMapMessage( string& text, uint16& hexX, uint16& hexY, uint& color, uint& delay )" +# pragma event "EventInMessage( string text, int& sayType, uint& critterId, uint& delay )" +# pragma event "EventOutMessage( string& text, int& sayType )" +# pragma event "EventMessageBox( string& text, int type, bool scriptCall )" +# pragma event "EventCombatResult( uint[] result )" +# pragma event "EventItemCheckMove( const Item item, uint count, const Entity from, const Entity to )" +# pragma event "EventCritterAction( bool localCall, Critter critter, int action, int actionExt, const Item actionItem )" +# pragma event "EventAnimation2dProcess( bool, Critter, uint, uint, Item )" +# pragma event "EventAnimation3dProcess( bool, Critter, uint, uint, Item )" +# pragma event "EventCritterAnimation( hash, uint, uint, uint&, uint&, int&, int&, string& )" +# pragma event "EventCritterAnimationSubstitute( hash, uint, uint, hash&, uint&, uint& )" +# pragma event "EventCritterAnimationFallout( hash, uint&, uint&, uint&, uint&, uint& )" +# pragma event "EventCritterCheckMoveItem( const Critter critter, const Item item, uint8 toSlot )" +# pragma event "EventCritterGetAttackDistantion( const Critter critter, const Item item, uint8 itemMode, uint& dist )" +#endif + +#ifdef __MAPPER +# pragma event "EventStart()" +# pragma event "EventFinish()" +# pragma event "EventLoop()" +# pragma event "EventConsoleMessage( string& text )" +# pragma event "EventRenderIface( uint layer )" +# pragma event "EventRenderMap()" +# pragma event "EventMouseDown( int button )" +# pragma event "EventMouseUp( int button )" +# pragma event "EventMouseMove( int offsetX, int offsetY )" +# pragma event "EventKeyDown( uint8 key, string text )" +# pragma event "EventKeyUp( uint8 key, string text )" +# pragma event "EventInputLost()" +# pragma event "EventCritterAnimation( hash, uint, uint, uint&, uint&, int&, int&, string& )" +# pragma event "EventCritterAnimationSubstitute( hash, uint, uint, hash&, uint&, uint& )" +# pragma event "EventCritterAnimationFallout( hash, uint&, uint&, uint&, uint&, uint& )" +# pragma event "EventMapLoad( Map map )" +# pragma event "EventMapSave( Map map )" +# pragma event "EventInspectorProperties( Entity entity, int[] properties )" +#endif + +#define EXPORT +#define HASH # (name) GetStrHash( name ) + +// Say types +#define SAY_NORM ( 1 ) +#define SAY_NORM_ON_HEAD ( 2 ) +#define SAY_SHOUT ( 3 ) +#define SAY_SHOUT_ON_HEAD ( 4 ) +#define SAY_EMOTE ( 5 ) +#define SAY_EMOTE_ON_HEAD ( 6 ) +#define SAY_WHISP ( 7 ) +#define SAY_WHISP_ON_HEAD ( 8 ) +#define SAY_SOCIAL ( 9 ) +#define SAY_RADIO ( 10 ) +#define SAY_NETMSG ( 11 ) +#define SAY_DIALOG ( 12 ) +#define SAY_APPEND ( 13 ) +#define SAY_FLASH_WINDOW ( 41 ) // Only flash window in tray and beep + +// Msg nums +#define TEXTMSG_TEXT ( 0 ) +#define TEXTMSG_DLG ( 1 ) +#define TEXTMSG_ITEM ( 2 ) +#define TEXTMSG_GAME ( 3 ) +#define TEXTMSG_GM ( 4 ) +#define TEXTMSG_COMBAT ( 5 ) +#define TEXTMSG_QUEST ( 6 ) +#define TEXTMSG_HOLO ( 7 ) +#define TEXTMSG_INTERNAL ( 8 ) +#define TEXTMSG_LOCATIONS ( 9 ) +#define DLGSTR # ( dialogId, strNum )( ( ( dialogId ) & 0xFFFFC000 ) | ( ( 12000 + ( strNum ) ) & ~0xFFFFC000 ) ) +#define LOCSTR # ( locPid, strNum )( ( ( locPid ) & 0xFFFFF000 ) | ( ( strNum ) & ~0xFFFFF000 ) ) +#define ITEMSTR # ( itemPid, strNum )( ( ( itemPid ) & 0xFFFFFFF0 ) | ( ( strNum ) & ~0xFFFFFFF0 ) ) +#define CRSTR # ( crPid, strNum )( ( ( crPid ) & 0xFFFFFFF0 ) | ( ( strNum ) & ~0xFFFFFFF0 ) ) + +// Item corner types, for correct light calulations +#pragma enum CornerType NorthSouth = 0 +#pragma enum CornerType West = 1 +#pragma enum CornerType East = 2 +#pragma enum CornerType South = 3 +#pragma enum CornerType North = 4 +#pragma enum CornerType EastWest = 5 + +// Moving results +#pragma enum MovingState InProgress = 0 +#pragma enum MovingState Success = 1 +#pragma enum MovingState TargetNotFound = 2 +#pragma enum MovingState CantMove = 3 +#pragma enum MovingState GagCritter = 4 +#pragma enum MovingState GagItem = 5 +#pragma enum MovingState InternalError = 6 +#pragma enum MovingState HexTooFar = 7 +#pragma enum MovingState HexBusy = 8 +#pragma enum MovingState HexBusyRing = 9 +#pragma enum MovingState Deadlock = 10 +#pragma enum MovingState TraceFail = 11 + +// Critter conditions +#pragma enum CritterCondition Unknown = 0 +#pragma enum CritterCondition Alive = 1 +#pragma enum CritterCondition Knockout = 2 +#pragma enum CritterCondition Dead = 3 + +// Items accessory +#pragma enum ItemOwnership Nowhere = 0 +#pragma enum ItemOwnership CritterInventory = 1 +#pragma enum ItemOwnership MapHex = 2 +#pragma enum ItemOwnership ItemContainer = 3 + +// Todo: delete +#pragma enum Anim1 None = 0 + +// Critter actions +// Flags for chosen: +// l - hardcoded local call +// s - hardcoded server call +// for all others critters actions call only server +// flags actionExt item +#define ACTION_MOVE ( 0 ) // l +#define ACTION_RUN ( 1 ) // l +#define ACTION_MOVE_ITEM ( 2 ) // l s from slot + +#define ACTION_MOVE_ITEM_SWAP ( 3 ) // l s from slot + +#define ACTION_USE_ITEM ( 4 ) // l s + +#define ACTION_DROP_ITEM ( 5 ) // l s from slot + +#define ACTION_USE_WEAPON ( 6 ) // l fail attack 8 bit, use index (0-2) 4-7 bits, aim 0-3 bits + +#define ACTION_RELOAD_WEAPON ( 7 ) // l s + +#define ACTION_USE_SKILL ( 8 ) // l s skill index (see SK_*) +#define ACTION_PICK_ITEM ( 9 ) // l s + +#define ACTION_PICK_CRITTER ( 10 ) // l 0 - loot, 1 - steal, 2 - push +#define ACTION_OPERATE_CONTAINER ( 11 ) // l s transfer type * 10 + [0 - get, 1 - get all, 2 - put] + (exclude get all) +#define ACTION_BARTER ( 12 ) // s 0 - item taken, 1 - item given + +#define ACTION_DODGE ( 13 ) // 0 - front, 1 - back +#define ACTION_DAMAGE ( 14 ) // 0 - front, 1 - back +#define ACTION_DAMAGE_FORCE ( 15 ) // 0 - front, 1 - back +#define ACTION_KNOCKOUT ( 16 ) // s 0 - knockout anim2begin +#define ACTION_STANDUP ( 17 ) // s 0 - knockout anim2end +#define ACTION_FIDGET ( 18 ) // l +#define ACTION_DEAD ( 19 ) // s dead type anim2 (see Anim2 in _animation.fos) +#define ACTION_CONNECT ( 20 ) // +#define ACTION_DISCONNECT ( 21 ) // +#define ACTION_RESPAWN ( 22 ) // s +#define ACTION_REFRESH ( 23 ) // s + +// Slots +#define SLOT_INV ( 0 ) // Inventory +#define SLOT_HAND1 ( 1 ) // Weapon slot +#define SLOT_HAND2 ( 2 ) // Extended slot +#define SLOT_ARMOR ( 3 ) // Armor slot + +// Timeouts in real seconds, generic values +#define MAXIMUM_TIMEOUT ( Time::RealHour( 5 ) ) +#define IS_TIMEOUT # (to) ( ( to ) > __FullSecond ) + +// Combat modes +#define COMBAT_MODE_ANY ( 0 ) +#define COMBAT_MODE_REAL_TIME ( 1 ) +#define COMBAT_MODE_TURN_BASED ( 2 ) + +// Global map fog +#define FOG_FULL ( 0 ) +#define FOG_HALF ( 1 ) +#define FOG_HALF_EX ( 2 ) +#define FOG_NONE ( 3 ) + +// Critter find types +// Combine groups with | operator +#define FIND_LIFE ( 0x01 ) // First group +#define FIND_KO ( 0x02 ) +#define FIND_DEAD ( 0x04 ) +#define FIND_LIFE_AND_KO ( 0x03 ) +#define FIND_LIFE_AND_DEAD ( 0x05 ) +#define FIND_KO_AND_DEAD ( 0x06 ) +#define FIND_ALL ( 0x0F ) +#define FIND_ONLY_PLAYERS ( 0x10 ) // Second group +#define FIND_ONLY_NPC ( 0x20 ) + +// Dialog links +#define DIALOG_END uint( -1 ) +#define DIALOG_BACK uint( -2 ) +#define DIALOG_BARTER uint( -3 ) +#define DIALOG_ATTACK uint( -4 ) + +// Access levels +#define ACCESS_CLIENT ( 0 ) +#define ACCESS_TESTER ( 1 ) +#define ACCESS_MODER ( 2 ) +#define ACCESS_ADMIN ( 3 ) + +// Look checks +#define LOOK_CHECK_DIR ( 0x01 ) // Nerfe look by directions of look +#define LOOK_CHECK_SNEAK_DIR ( 0x02 ) // Nerfe opponent sneak by directions of look +#define LOOK_CHECK_SNEAK_WEIGHT ( 0x04 ) // Nerfe sneak by current weight +#define LOOK_CHECK_TRACE ( 0x08 ) // Tracing for wall aviablility +#define LOOK_CHECK_SCRIPT ( 0x10 ) // Allow bool check_look(...) in main.fos, all other defines ignored +#define LOOK_CHECK_ITEM_SCRIPT ( 0x20 ) // Allow bool check_trap_look(...) in main.fos, for items with ITEM_TRAP flag + +// Radio +// Flags, Item::RadioFlags +#define RADIO_DISABLE_SEND ( 0x0001 ) // Hardcoded +#define RADIO_DISABLE_RECV ( 0x0002 ) // Hardcoded +#define RADIO_DISABLE_SHIFT_SEND ( 0x0100 ) +#define RADIO_DISABLE_SHIFT_RECV ( 0x0200 ) +#define RADIO_DISABLE_SHIFT_BC_SEND ( 0x0400 ) +#define RADIO_DISABLE_SHIFT_BC_RECV ( 0x0800 ) +#define RADIO_DISABLE_SHIFT_CHANNEL ( 0x1000 ) +// Broadcast, Item::RadioBroadcastSend/RadioBroadcastRecv, Hardcoded +#define RADIO_BROADCAST_WORLD ( 0 ) // Send/recv in all world +#define RADIO_BROADCAST_MAP ( 20 ) // Send/recv only on one map +#define RADIO_BROADCAST_LOCATION ( 40 ) // Send/recv only on one location +#define RADIO_BROADCAST_ZONE # (x) ( 100 + ( x ) ) // Send/recv only in x (1..100) zones radius on global map +#define RADIO_BROADCAST_FORCE_ALL ( 250 ) // Force send/recv in any place + +// Internal server commands +#define COMMAND_EXIT ( 1 ) +#define COMMAND_MYINFO ( 2 ) +#define COMMAND_GAMEINFO ( 3 ) +#define COMMAND_CRITID ( 4 ) +#define COMMAND_MOVECRIT ( 5 ) +#define COMMAND_KILLCRIT ( 6 ) +#define COMMAND_DISCONCRIT ( 7 ) +#define COMMAND_TOGLOBAL ( 8 ) +#define COMMAND_RESPAWN ( 9 ) +#define COMMAND_PARAM ( 10 ) +#define COMMAND_GETACCESS ( 11 ) +#define COMMAND_ADDITEM ( 12 ) +#define COMMAND_CRASH ( 13 ) +#define COMMAND_ADDITEM_SELF ( 14 ) +#define COMMAND_ADDNPC ( 15 ) +#define COMMAND_ADDLOCATION ( 16 ) +#define COMMAND_RELOADSCRIPTS ( 17 ) +#define COMMAND_RELOAD_CLIENT_SCRIPTS ( 19 ) +#define COMMAND_RUNSCRIPT ( 20 ) +#define COMMAND_RELOAD_PROTOS ( 21 ) +#define COMMAND_REGENMAP ( 25 ) +#define COMMAND_RELOADDIALOGS ( 26 ) +#define COMMAND_LOADDIALOG ( 27 ) +#define COMMAND_RELOADTEXTS ( 28 ) +#define COMMAND_RELOADAI ( 29 ) +#define COMMAND_CHECKVAR ( 30 ) +#define COMMAND_SETVAR ( 31 ) +#define COMMAND_SETTIME ( 32 ) +#define COMMAND_BAN ( 33 ) +#define COMMAND_DELETE_ACCOUNT ( 34 ) +#define COMMAND_CHANGE_PASSWORD ( 35 ) +#define COMMAND_DROP_UID ( 36 ) +#define COMMAND_LOG ( 37 ) +#define COMMAND_DEV_EXEC ( 38 ) +#define COMMAND_DEV_FUNC ( 39 ) +#define COMMAND_DEV_GVAR ( 40 ) + +// Item uses +#define USE_PRIMARY ( 0 ) +#define USE_SECONDARY ( 1 ) +#define USE_THIRD ( 2 ) +#define USE_RELOAD ( 3 ) +#define USE_USE ( 4 ) +#define MAX_USES ( 3 ) + +// Client lighting +#define MAX_LIGHT_VALUE ( 10000 ) +#define MAX_LIGHT_HEX ( 200 ) +#define MAX_LIGHT_ALPHA ( 255 ) +// Flags +#define LIGHT_DISABLE_DIR # (dir) ( 1 << Math::Clamp( dir, 0, 5 ) ) +#define LIGHT_GLOBAL ( 0x40 ) +#define LIGHT_INVERSE ( 0x80 ) + +// Global variables +#pragma property Global PrivateCommon const uint16 YearStart +#pragma property Global PrivateCommon const uint16 Year +#pragma property Global PrivateCommon const uint16 Month +#pragma property Global PrivateCommon const uint16 Day +#pragma property Global PrivateCommon const uint16 Hour +#pragma property Global PrivateCommon const uint16 Minute NoHistory +#pragma property Global PrivateCommon const uint16 Second NoHistory +#pragma property Global PrivateCommon const uint16 TimeMultiplier +#pragma property Global PrivateServer const uint LastEntityId NoHistory +#pragma property Global PrivateCommon const uint LastDeferredCallId NoHistory +#pragma property Global PrivateCommon const uint HistoryRecordsId NoHistory + +// Critter +#pragma property Critter Public resource ModelName +#pragma property Critter Protected uint WalkTime +#pragma property Critter Protected uint RunTime +#pragma property Critter Protected const uint Multihex +#pragma property Critter PrivateServer const uint MapId +#pragma property Critter PrivateServer const uint RefMapId +#pragma property Critter PrivateServer const hash RefMapPid +#pragma property Critter PrivateServer const uint RefLocationId +#pragma property Critter PrivateServer const hash RefLocationPid +#pragma property Critter PrivateCommon const uint16 HexX NoHistory +#pragma property Critter PrivateCommon const uint16 HexY NoHistory +#pragma property Critter PrivateCommon const uint8 Dir NoHistory +#pragma property Critter PrivateServer const string Password +#pragma property Critter PrivateCommon const CritterCondition Cond +#pragma property Critter PrivateServer const bool ClientToDelete +#pragma property Critter Protected uint16 WorldX NoHistory +#pragma property Critter Protected uint16 WorldY NoHistory +#pragma property Critter Protected const uint GlobalMapLeaderId +#pragma property Critter PrivateServer const uint GlobalMapTripId +#pragma property Critter PrivateServer const uint RefGlobalMapTripId +#pragma property Critter PrivateServer const uint RefGlobalMapLeaderId +#pragma property Critter PrivateServer const uint16 LastMapHexX NoHistory +#pragma property Critter PrivateServer const uint16 LastMapHexY NoHistory +#pragma property Critter PrivateCommon const uint Anim1Life NoHistory +#pragma property Critter PrivateCommon const uint Anim1Knockout NoHistory +#pragma property Critter PrivateCommon const uint Anim1Dead NoHistory +#pragma property Critter PrivateCommon const uint Anim2Life NoHistory +#pragma property Critter PrivateCommon const uint Anim2Knockout NoHistory +#pragma property Critter PrivateCommon const uint Anim2Dead NoHistory +#pragma property Critter PrivateServer const uint8[] GlobalMapFog NoHistory +#pragma property Critter PrivateServer const hash[] TE_FuncNum NoHistory +#pragma property Critter PrivateServer const uint[] TE_Rate NoHistory +#pragma property Critter PrivateServer const uint[] TE_NextTime NoHistory +#pragma property Critter PrivateServer const int[] TE_Identifier NoHistory + +#pragma property Critter VirtualPrivateServer int SneakCoefficient +#pragma property Critter VirtualProtected uint LookDistance + +#pragma property Critter Public int8 Gender +#pragma property Critter Protected hash NpcRole +#pragma property Critter Protected int ReplicationTime +#pragma property Critter Public uint TalkDistance +#pragma property Critter Public int ScaleFactor +#pragma property Critter Public int CurrentHp +#pragma property Critter PrivateServer uint MaxTalkers +#pragma property Critter Public hash DialogId +#pragma property Critter Public string Lexems +#pragma property Critter PrivateServer uint HomeMapId +#pragma property Critter PrivateServer uint16 HomeHexX +#pragma property Critter PrivateServer uint16 HomeHexY +#pragma property Critter PrivateServer uint8 HomeDir +#pragma property Critter PrivateServer uint[] KnownLocations +#pragma property Critter PrivateServer uint[] ConnectionIp +#pragma property Critter PrivateServer uint16[] ConnectionPort +#pragma property Critter PrivateServer uint ShowCritterDist1 +#pragma property Critter PrivateServer uint ShowCritterDist2 +#pragma property Critter PrivateServer uint ShowCritterDist3 +#pragma property Critter PrivateServer hash ScriptId +#pragma property Critter Protected hash[] KnownLocProtoId + +// 3d animation +#pragma property Critter PrivateClient int[] Anim3dLayer + +// Modes +#pragma property Critter Protected bool IsHide +#pragma property Critter Protected bool IsNoHome +#pragma property Critter Protected bool IsGeck +#pragma property Critter Protected bool IsNoUnarmed +#pragma property Critter VirtualProtected bool IsNoWalk +#pragma property Critter VirtualProtected bool IsNoRun +#pragma property Critter Protected bool IsNoRotate +#pragma property Critter Public bool IsNoTalk +#pragma property Critter Public bool IsNoFlatten + +// Timeouts +#pragma property Critter Defaults Group = Timeouts +#pragma property Critter Public uint TimeoutBattle +#pragma property Critter Protected uint TimeoutTransfer Temporary +#pragma property Critter Protected uint TimeoutRemoveFromGame Temporary +#pragma property Critter Defaults + +// Item +#pragma property Item Public const ItemOwnership Accessory +#pragma property Item Public const uint MapId +#pragma property Item Public const uint16 HexX +#pragma property Item Public const uint16 HexY +#pragma property Item Public const uint CritId +#pragma property Item Public const uint8 CritSlot +#pragma property Item Public const uint ContainerId +#pragma property Item Public const uint ContainerStack + +#pragma property Item Public float FlyEffectSpeed +#pragma property Item Public resource PicMap +#pragma property Item Public resource PicInv +#pragma property Item Public int16 OffsetX +#pragma property Item Public int16 OffsetY +#pragma property Item Public const bool Stackable +#pragma property Item Public bool GroundLevel +#pragma property Item Public bool Opened +#pragma property Item Public const CornerType Corner +#pragma property Item Public const uint8 Slot +#pragma property Item Public uint Weight +#pragma property Item Public uint Volume +#pragma property Item Public const bool DisableEgg +#pragma property Item Public const uint16 AnimWaitBase +#pragma property Item Public const uint16 AnimWaitRndMin +#pragma property Item Public const uint16 AnimWaitRndMax +#pragma property Item Public const uint8 AnimStay0 +#pragma property Item Public const uint8 AnimStay1 +#pragma property Item Public const uint8 AnimShow0 +#pragma property Item Public const uint8 AnimShow1 +#pragma property Item Public const uint8 AnimHide0 +#pragma property Item Public const uint8 AnimHide1 +#pragma property Item Public const uint8 SpriteCut +#pragma property Item Public const int8 DrawOrderOffsetHexY +#pragma property Item Public const uint8[] BlockLines + +#pragma property Item Public const bool IsStatic +#pragma property Item Public bool IsScenery +#pragma property Item Public bool IsWall +#pragma property Item Public bool IsCanOpen +#pragma property Item Public bool IsScrollBlock +#pragma property Item Public bool IsHidden +#pragma property Item Public bool IsHiddenPicture +#pragma property Item Public bool IsHiddenInStatic +#pragma property Item Public bool IsFlat +#pragma property Item Public bool IsNoBlock +#pragma property Item Public bool IsShootThru +#pragma property Item Public bool IsLightThru +#pragma property Item Public bool IsAlwaysView +#pragma property Item Public bool IsBadItem +#pragma property Item Public bool IsNoHighlight +#pragma property Item Public bool IsShowAnim +#pragma property Item Public bool IsShowAnimExt +#pragma property Item Public bool IsLight +#pragma property Item Public bool IsGeck +#pragma property Item Public bool IsTrap +#pragma property Item Public bool IsTrigger +#pragma property Item Public bool IsNoLightInfluence +#pragma property Item Public bool IsGag +#pragma property Item Public bool IsColorize +#pragma property Item Public bool IsColorizeInv +#pragma property Item Public bool IsCanTalk +#pragma property Item Public bool IsRadio +#pragma property Item Public string Lexems +#pragma property Item PublicModifiable int16 SortValue +#pragma property Item Public uint8 Info +#pragma property Item PublicModifiable uint8 Mode +#pragma property Item Public int8 LightIntensity +#pragma property Item Public uint8 LightDistance +#pragma property Item Public uint8 LightFlags +#pragma property Item Public uint LightColor +#pragma property Item PrivateServer hash ScriptId +#pragma property Item Public uint Count +#pragma property Item Protected int16 TrapValue +#pragma property Item Protected uint16 RadioChannel +#pragma property Item Protected uint16 RadioFlags +#pragma property Item Protected uint8 RadioBroadcastSend +#pragma property Item Protected uint8 RadioBroadcastRecv + +// Map +#pragma property Map PrivateServer uint LoopTime1 +#pragma property Map PrivateServer uint LoopTime2 +#pragma property Map PrivateServer uint LoopTime3 +#pragma property Map PrivateServer uint LoopTime4 +#pragma property Map PrivateServer uint LoopTime5 +#pragma property Map PrivateServer const string FileDir Temporary +#pragma property Map PrivateServer const uint16 Width +#pragma property Map PrivateServer const uint16 Height +#pragma property Map PrivateServer const uint16 WorkHexX +#pragma property Map PrivateServer const uint16 WorkHexY +#pragma property Map PrivateServer const uint LocId +#pragma property Map PrivateServer const uint LocMapIndex +#pragma property Map PrivateServer uint8 RainCapacity +#pragma property Map PrivateServer int CurDayTime +#pragma property Map PrivateServer hash ScriptId +#pragma property Map PrivateServer int[] DayTime +#pragma property Map PrivateServer uint8[] DayColor +#pragma property Map PrivateServer bool IsNoLogOut + +// Location +#pragma property Location PrivateServer const hash[] MapProtos +#pragma property Location PrivateServer const hash[] MapEntrances +#pragma property Location PrivateServer const hash[] Automaps +#pragma property Location PrivateServer uint MaxPlayers +#pragma property Location PrivateServer bool AutoGarbage +#pragma property Location PrivateServer bool GeckVisible +#pragma property Location PrivateServer hash EntranceScript +#pragma property Location PrivateServer uint16 WorldX +#pragma property Location PrivateServer uint16 WorldY +#pragma property Location PrivateServer uint16 Radius +#pragma property Location PrivateServer bool Hidden +#pragma property Location PrivateServer bool ToGarbage +#pragma property Location PrivateServer uint Color +#pragma property Location PrivateServer bool IsEncounter diff --git a/SDK/Modules/Core/FOnline.h b/SDK/Modules/Core/FOnline.h new file mode 100644 index 0000000000..0b5987a86c --- /dev/null +++ b/SDK/Modules/Core/FOnline.h @@ -0,0 +1,1566 @@ +#ifndef __FONLINE__ +#define __FONLINE__ + +// +// FOnline engine structures, for native working +// Version 521 +// Binaries built with MSVS Community 2013 (Toolset: v120_xp), GCC 4.9.1 +// Default calling convention - cdecl +// + +// Detect operating system +#if defined ( _WIN32 ) || defined ( _WIN64 ) +# define FO_WINDOWS +#elif defined ( __linux__ ) +# define FO_LINUX +#elif defined ( __APPLE__ ) +# define FO_MACOSX +#else +# error "Unknown operating system." +#endif + +// Detect compiler +#if defined ( __GNUC__ ) +# define FO_GCC +#elif defined ( _MSC_VER ) && !defined ( __MWERKS__ ) +# define FO_MSVC +#else +# error "Unknown compiler." +#endif + +// Detect CPU +#if ( defined ( FO_MSVC ) && defined ( _M_IX86 ) ) || ( defined ( FO_GCC ) && !defined ( __LP64__ ) ) +# define FO_X86 +#elif ( defined ( FO_MSVC ) && defined ( _M_X64 ) ) || ( defined ( FO_GCC ) && defined ( __LP64__ ) ) +# define FO_X64 +#else +# error "Unknown CPU." +#endif + +// Detect target +#if defined ( __SERVER ) +# define TARGET_NAME SERVER +#elif defined ( __CLIENT ) +# define TARGET_NAME CLIENT +#elif defined ( __MAPPER ) +# define TARGET_NAME MAPPER +#else +# error __SERVER / __CLIENT / __MAPPER any of this must be defined +#endif + +// Platform specific options +#ifdef FO_WINDOWS +# ifdef FO_MSVC +# define EXPORT extern "C" __declspec( dllexport ) +# define EXPORT_UNINITIALIZED extern "C" __declspec( dllexport ) extern +# else // FO_GCC +# define EXPORT extern "C" __attribute__( ( dllexport ) ) +# define EXPORT_UNINITIALIZED extern "C" __attribute__( ( dllexport ) ) extern +# endif +#else +# define EXPORT extern "C" __attribute__( ( visibility( "default" ) ) ) +# define EXPORT_UNINITIALIZED extern "C" __attribute__( ( visibility( "default" ) ) ) +#endif + +// STL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using std::string; +using std::list; +using std::vector; +using std::map; +using std::multimap; +using std::set; +using std::deque; +using std::pair; + +// AngelScript +#include "AngelScript/angelscript.h" +EXPORT_UNINITIALIZED asIScriptEngine* ASEngine; + +// AngelScript add-ons +#define FONLINE_DLL +#include "AngelScript/scriptstring.h" +#include "AngelScript/scriptarray.h" +#include "AngelScript/scriptfile.h" +#include "AngelScript/scriptdictionary.h" +#include "AngelScript/scriptdict.h" +#include "AngelScript/scriptany.h" +#include "AngelScript/scriptmath.h" +#undef FONLINE_DLL + +// FOnline types +struct GameOptions; +struct Mutex; +struct Spinlock; +struct SyncObj; +struct Property; +struct Properties; +struct CritterType; +struct NpcPlane; +struct GlobalMapGroup; +struct Entity; +struct ProtoItem; +struct Item; +struct CritterTimeEvent; +struct Critter; +struct Client; +struct Npc; +struct CritterCl; +struct MapObject; +struct MapEntire; +struct SceneryToClient; +struct ProtoMap; +struct Map; +struct ProtoLocation; +struct Location; +struct Field; +struct SpriteInfo; +struct Sprite; +struct SpriteAnim; + +#ifdef __SERVER +typedef Critter CritterMutual; +#else +typedef CritterCl CritterMutual; +#endif + +typedef char int8; +typedef unsigned char uint8; +typedef short int16; +typedef unsigned short uint16; +typedef unsigned int uint; +#if defined ( FO_MSVC ) +typedef unsigned __int64 uint64; +typedef __int64 int64; +#elif defined ( FO_GCC ) +# include +typedef uint64_t uint64; +typedef int64_t int64; +#endif +typedef uint hash; + +typedef pair< int, int > IntPair; +typedef pair< uint, uint > UintPair; +typedef pair< uint16, uint16 > Uint16Pair; + +typedef vector< uint > UintVec; +typedef vector< uint8 > Uint8Vec; +typedef vector< uint16 > Uint16Vec; +typedef vector< int > IntVec; +typedef vector< UintPair > UintPairVec; +typedef vector< Uint16Pair > Uint16PairVec; +typedef vector< hash > HashVec; +typedef vector< void* > PtrVec; +typedef set< int > IntSet; +typedef set< uint > UintSet; +typedef map< int, int > IntMap; + +typedef vector< NpcPlane* > NpcPlaneVec; +typedef vector< Critter* > CrVec; +typedef map< uint, Critter* > CrMap; +typedef vector< CritterCl* > CrClVec; +typedef vector< Client* > ClVec; +typedef vector< Npc* > PcVec; +typedef vector< Item* > ItemVec; +typedef vector< MapObject* > MapObjectVec; +typedef vector< Map* > MapVec; +typedef vector< Location* > LocVec; + +// Generic +EXPORT_UNINITIALIZED bool ( * RaiseAssert )( const char* message, const char* file, int line ); +EXPORT_UNINITIALIZED void ( * Log )( const char* frmt, ... ); +EXPORT_UNINITIALIZED asIScriptContext* ( *ScriptGetActiveContext )( ); +EXPORT_UNINITIALIZED const char* (ScriptGetLibraryOptions) ( ); +EXPORT_UNINITIALIZED const char* (ScriptGetLibraryVersion) ( ); + +#define FONLINE_DLL_ENTRY( isCompiler ) \ + GameOptions * FOnline; \ + asIScriptEngine* ASEngine; \ + EXPORT void TARGET_NAME() {} \ + bool ( * RaiseAssert )( const char* message, const char* file, int line ); \ + void ( * Log )( const char* frmt, ... ); \ + asIScriptContext* ( *ScriptGetActiveContext )( ); \ + const char* (ScriptGetLibraryOptions) ( ); \ + const char* (ScriptGetLibraryVersion) ( ); \ + EXPORT void DllMainEx( bool isCompiler ) +// FONLINE_DLL_ENTRY + +#define RUNTIME_ASSERT( a ) ( !!( a ) || RaiseAssert( # a, __FILE__, __LINE__ ) ) +#define RUNTIME_ASSERT_STR( a, str ) ( !!( a ) || RaiseAssert( str, __FILE__, __LINE__ ) ) +#define STATIC_ASSERT( a ) { static int arr[ ( a ) ? 1 : -1 ]; } + +#define BIN__N( x ) ( x ) | x >> 3 | x >> 6 | x >> 9 +#define BIN__B( x ) ( x ) & 0xf | ( x ) >> 12 & 0xf0 +#define BIN8( v ) ( BIN__B( BIN__N( 0x ## v ) ) ) +#define BIN16( bin16, bin8 ) ( ( BIN8( bin16 ) << 8 ) | ( BIN8( bin8 ) ) ) + +#define FLAG( x, y ) ( ( ( x ) & ( y ) ) != 0 ) +#define CLAMP( x, low, high ) ( ( ( x ) > ( high ) ) ? ( high ) : ( ( ( x ) < ( low ) ) ? ( low ) : ( x ) ) ) +#define SQRT3T2_FLOAT ( 3.4641016151f ) +#define SQRT3_FLOAT ( 1.732050807568877f ) +#define RAD2DEG ( 57.29577951f ) +#define CONVERT_GRAMM( x ) ( ( x ) * 453 ) +#define UTF8_BUF_SIZE( count ) ( ( count ) * 4 ) + +#define MAX_HOLO_INFO ( 250 ) +#define SCORES_MAX ( 50 ) +#define MAX_NPC_BAGS_PACKS ( 20 ) +#define MAX_ENEMY_STACK ( 30 ) +#define MAX_NPC_BAGS ( 50 ) +#define GM_ZONES_FOG_SIZE ( 2500 ) +#define MAX_SCRIPT_NAME ( 64 ) +#define MAPOBJ_SCRIPT_NAME ( 25 ) +#define MAX_NAME ( 30 ) +#define PASS_HASH_SIZE ( 32 ) +#define MAX_STORED_IP ( 20 ) +#define MAX_HEX_OFFSET ( 50 ) +#define AP_DIVIDER ( 100 ) +#define MAX_CRIT_TYPES ( 1000 ) +#define EFFECT_TEXTURES ( 10 ) +#define EFFECT_SCRIPT_VALUES ( 10 ) +#define CRITTER_USER_DATA_SIZE ( 400 ) +#define MAX_FRAMES ( 50 ) +#define DIRS_COUNT ( FOnline->MapHexagonal ? 6 : 8 ) +#define ITEM_EVENT_MAX ( 8 ) +#define CRITTER_EVENT_MAX ( 44 ) +#define MAP_EVENT_MAX ( 12 ) +#define LOCATION_EVENT_MAX ( 2 ) + +// Vars +#define VAR_CALC_QUEST( tid, val ) ( ( tid ) * 1000 + ( val ) ) +#define VAR_GLOBAL ( 0 ) +#define VAR_LOCAL ( 1 ) +#define VAR_UNICUM ( 2 ) +#define VAR_LOCAL_LOCATION ( 3 ) +#define VAR_LOCAL_MAP ( 4 ) +#define VAR_LOCAL_ITEM ( 5 ) +#define VAR_FLAG_QUEST ( 0x1 ) +#define VAR_FLAG_RANDOM ( 0x2 ) +#define VAR_FLAG_NO_CHECK ( 0x4 ) + +// Items +#define ITEM_MAX_SCRIPT_VALUES ( 10 ) +#define USE_PRIMARY ( 0 ) +#define USE_SECONDARY ( 1 ) +#define USE_THIRD ( 2 ) +#define USE_RELOAD ( 3 ) +#define USE_USE ( 4 ) +#define MAX_USES ( 3 ) +#define USE_NONE ( 15 ) +#define ITEM_ACCESSORY_NONE ( 0 ) +#define ITEM_ACCESSORY_CRITTER ( 1 ) +#define ITEM_ACCESSORY_HEX ( 2 ) +#define ITEM_ACCESSORY_CONTAINER ( 3 ) + +// Events +#define MAP_LOOP_FUNC_MAX ( 5 ) +#define MAP_MAX_DATA ( 100 ) + +// Sprites cutting +#define SPRITE_CUT_HORIZONTAL ( 1 ) +#define SPRITE_CUT_VERTICAL ( 2 ) + +// Map blocks +#define FH_BLOCK BIN8( 00000001 ) +#define FH_NOTRAKE BIN8( 00000010 ) +#define FH_WALL BIN8( 00000100 ) +#define FH_SCEN BIN8( 00001000 ) +#define FH_SCEN_GRID BIN8( 00010000 ) +#define FH_TRIGGER BIN8( 00100000 ) +#define FH_CRITTER BIN8( 00000001 ) +#define FH_DEAD_CRITTER BIN8( 00000010 ) +#define FH_ITEM BIN8( 00000100 ) +#define FH_BLOCK_ITEM BIN8( 00010000 ) +#define FH_NRAKE_ITEM BIN8( 00100000 ) +#define FH_WALK_ITEM BIN8( 01000000 ) +#define FH_GAG_ITEM BIN8( 10000000 ) +#define FH_NOWAY BIN16( 00010001, 00000001 ) +#define FH_NOSHOOT BIN16( 00100000, 00000010 ) + +// GameOptions::IndicatorType +#define INDICATOR_LINES ( 0 ) +#define INDICATOR_NUMBERS ( 1 ) +#define INDICATOR_BOTH ( 2 ) +// GameOptions::Zoom +#define MIN_ZOOM ( 0.2f ) +#define MAX_ZOOM ( 10.0f ) + +struct GameOptions +{ + const uint16 YearStart; + const uint YearStartFTLo; + const uint YearStartFTHi; + const uint16 Year; + const uint16 Month; + const uint16 Day; + const uint16 Hour; + const uint16 Minute; + const uint16 Second; + const uint FullSecondStart; + const uint FullSecond; + const uint16 TimeMultiplier; + const uint GameTimeTick; + + const bool Singleplayer; + const bool DisableTcpNagle; + const bool DisableZlibCompression; + const uint FloodSize; + const uint BruteForceTick; + const bool NoAnswerShuffle; + const bool DialogDemandRecheck; + const uint FixBoyDefaultExperience; + const uint SneakDivider; + const uint LevelCap; + const bool LevelCapAddExperience; + const uint LookNormal; + const uint LookMinimum; + const uint GlobalMapMaxGroupCount; + const uint CritterIdleTick; + const uint TurnBasedTick; + const int DeadHitPoints; + const uint Breaktime; + const uint TimeoutTransfer; + const uint TimeoutBattle; + const uint ApRegeneration; + const uint RtApCostCritterWalk; + const uint RtApCostCritterRun; + const uint RtApCostMoveItemContainer; + const uint RtApCostMoveItemInventory; + const uint RtApCostPickItem; + const uint RtApCostDropItem; + const uint RtApCostReloadWeapon; + const uint RtApCostPickCritter; + const uint RtApCostUseItem; + const uint RtApCostUseSkill; + const bool RtAlwaysRun; + const uint TbApCostCritterMove; + const uint TbApCostMoveItemContainer; + const uint TbApCostMoveItemInventory; + const uint TbApCostPickItem; + const uint TbApCostDropItem; + const uint TbApCostReloadWeapon; + const uint TbApCostPickCritter; + const uint TbApCostUseItem; + const uint TbApCostUseSkill; + const bool TbAlwaysRun; + const uint ApCostAimEyes; + const uint ApCostAimHead; + const uint ApCostAimGroin; + const uint ApCostAimTorso; + const uint ApCostAimArms; + const uint ApCostAimLegs; + const bool RunOnCombat; + const bool RunOnTransfer; + const bool RunOnTurnBased; + const uint GlobalMapWidth; + const uint GlobalMapHeight; + const uint GlobalMapZoneLength; + const uint GlobalMapMoveTime; + const uint BagRefreshTime; + const uint AttackAnimationsMinDist; + const uint WhisperDist; + const uint ShoutDist; + const int LookChecks; + const uint LookDir[ 5 ]; + const uint LookSneakDir[ 5 ]; + const uint LookWeight; + const bool CustomItemCost; + const uint RegistrationTimeout; + const uint AccountPlayTime; + const bool LoggingVars; + const uint ScriptRunSuspendTimeout; + const uint ScriptRunMessageTimeout; + const uint TalkDistance; + const uint NpcMaxTalkers; + const uint MinNameLength; + const uint MaxNameLength; + const uint DlgTalkMinTime; + const uint DlgBarterMinTime; + const uint MinimumOfflineTime; + const bool GameServer; + const bool UpdateServer; + const bool GenerateWorldDisabled; + const bool BuildMapperScripts; + const ScriptString* CommandLine; + + const int StartSpecialPoints; + const int StartTagSkillPoints; + const int SkillMaxValue; + const int SkillModAdd2; + const int SkillModAdd3; + const int SkillModAdd4; + const int SkillModAdd5; + const int SkillModAdd6; + + const int ReputationLoved; + const int ReputationLiked; + const int ReputationAccepted; + const int ReputationNeutral; + const int ReputationAntipathy; + const int ReputationHated; + + const bool MapHexagonal; + const int MapHexWidth; + const int MapHexHeight; + const int MapHexLineHeight; + const int MapTileOffsX; + const int MapTileOffsY; + const int MapTileStep; + const int MapRoofOffsX; + const int MapRoofOffsY; + const int MapRoofSkipSize; + const float MapCameraAngle; + const bool MapSmoothPath; + const ScriptString& MapDataPrefix; + + // Client and Mapper + const bool Quit; + const bool OpenGLRendering; + const bool OpenGLDebug; + const bool AssimpLogging; + const int MouseX; + const int MouseY; + const int ScrOx; + const int ScrOy; + const bool ShowTile; + const bool ShowRoof; + const bool ShowItem; + const bool ShowScen; + const bool ShowWall; + const bool ShowCrit; + const bool ShowFast; + const bool ShowPlayerNames; + const bool ShowNpcNames; + const bool ShowCritId; + const bool ScrollKeybLeft; + const bool ScrollKeybRight; + const bool ScrollKeybUp; + const bool ScrollKeybDown; + const bool ScrollMouseLeft; + const bool ScrollMouseRight; + const bool ScrollMouseUp; + const bool ScrollMouseDown; + const bool ShowGroups; + const bool HelpInfo; + const bool DebugInfo; + const bool DebugNet; + const bool Enable3dRendering; + const bool FullScreen; + const bool VSync; + const int Light; + const ScriptString& Host; + const uint Port; + const ScriptString& UpdateServerHost; + const uint UpdateServerPort; + const uint ProxyType; + const ScriptString& ProxyHost; + const uint ProxyPort; + const ScriptString& ProxyUser; + const ScriptString& ProxyPass; + const ScriptString& Name; + const int ScrollDelay; + const uint ScrollStep; + const bool ScrollCheck; + const int FixedFPS; + const uint FPS; + const uint PingPeriod; + const uint Ping; + const bool MsgboxInvert; + const uint8 DefaultCombatMode; + const bool MessNotify; + const bool SoundNotify; + const bool AlwaysOnTop; + const uint TextDelay; + const uint DamageHitDelay; + const int ScreenWidth; + const int ScreenHeight; + const int MultiSampling; + const bool MouseScroll; + const int IndicatorType; + const uint DoubleClickTime; + const uint8 RoofAlpha; + const bool HideCursor; + const bool DisableLMenu; + const bool DisableMouseEvents; + const bool DisableKeyboardEvents; + const bool HidePassword; + const ScriptString& PlayerOffAppendix; + const int CombatMessagesType; + const uint Animation3dSmoothTime; + const uint Animation3dFPS; + const int RunModMul; + const int RunModDiv; + const int RunModAdd; + const bool MapZooming; + const float SpritesZoom; + const float SpritesZoomMax; + const float SpritesZoomMin; + const float EffectValues[ EFFECT_SCRIPT_VALUES ]; + const bool AlwaysRun; + const int AlwaysRunMoveDist; + const int AlwaysRunUseDist; + const ScriptString& KeyboardRemap; + const uint CritterFidgetTime; + const uint Anim2CombatBegin; + const uint Anim2CombatIdle; + const uint Anim2CombatEnd; + const uint RainTick; + const int16 RainSpeedX; + const int16 RainSpeedY; + const uint ConsoleHistorySize; + const int SoundVolume; + const int MusicVolume; + const ScriptString& RegName; + const ScriptString& RegPassword; + const uint ChosenLightColor; + const uint8 ChosenLightDistance; + const int ChosenLightIntensity; + const uint8 ChosenLightFlags; + + // Mapper + const ScriptString& ClientPath; + const ScriptString& ServerPath; + const bool ShowCorners; + const bool ShowCuttedSprites; + const bool ShowDrawOrder; + const bool SplitTilesCollection; + + // Engine data + CritterType* CritterTypes; // Array of critter types, maximum is MAX_CRIT_TYPES + + Field* ClientMap; // Array of client map hexes, accessing - ClientMap[ hexY * ClientMapWidth + hexX ] + uint8* ClientMapLight; // Hex light, accessing - ClientMapLight[ hexY * ClientMapWidth * 3 + hexX * 3 {+ 0(R), 1(G), 2(B)} ] + uint ClientMapWidth; // Map width + uint ClientMapHeight; // Map height + + Sprite** ( *GetDrawingSprites )( uint & count ); // Array of currently drawing sprites, tree is sorted + SpriteInfo* ( *GetSpriteInfo )(uint sprId); // Sprite information + uint ( * GetSpriteColor )( uint sprId, int x, int y, bool affectZoom ); // Color of pixel on sprite + bool ( * IsSpriteHit )( Sprite* sprite, int x, int y, bool checkEgg ); // Is position hitting sprite + + const char* ( *GetNameByHash )(hash h); // Get name of file by hash + hash ( * GetHashByName )( const char* name ); // Get hash of file name + + bool ( * ScriptLoadModule )( const char* moduleName ); + uint ( * ScriptBind )( const char* moduleName, const char* funcDecl, bool temporaryId ); // Returning bindId + bool ( * ScriptPrepare )( uint bindId ); + void ( * ScriptSetArgInt8 )( int8 value ); + void ( * ScriptSetArgInt16 )( int16 value ); + void ( * ScriptSetArgInt )( int value ); + void ( * ScriptSetArgInt64 )( int64 value ); + void ( * ScriptSetArgUInt8 )( uint8 value ); + void ( * ScriptSetArgUInt16 )( uint16 value ); + void ( * ScriptSetArgUInt )( uint value ); + void ( * ScriptSetArgUInt64 )( uint64 value ); + void ( * ScriptSetArgBool )( bool value ); + void ( * ScriptSetArgFloat )( float value ); + void ( * ScriptSetArgDouble )( double value ); + void ( * ScriptSetArgObject )( void* value ); + void ( * ScriptSetArgAddress )( void* value ); + bool ( * ScriptRunPrepared )(); + int8 ( * ScriptGetReturnedInt8 )(); + int16 ( * ScriptGetReturnedInt16 )(); + int ( * ScriptGetReturnedInt )(); + int64 ( * ScriptGetReturnedInt64 )(); + uint8 ( * ScriptGetReturnedUInt8 )(); + uint16 ( * ScriptGetReturnedUInt16 )(); + uint ( * ScriptGetReturnedUInt )(); + uint64 ( * ScriptGetReturnedUInt64 )(); + bool ( * ScriptGetReturnedBool )(); + float ( * ScriptGetReturnedFloat )(); + double ( * ScriptGetReturnedDouble )(); + void* ( *ScriptGetReturnedObject )( ); + void* ( *ScriptGetReturnedAddress )( ); + + int ( * Random )( int minimum, int maximumInclusive ); + uint ( * GetTick )(); + void ( * SetLogCallback )( void ( * function )( const char* str ), bool enable ); + void ( * AddPropertyCallback )( void ( * function )( Entity* entity, Property* prop, void* curValue, void* oldValue ) ); +}; +EXPORT_UNINITIALIZED GameOptions* FOnline; + +struct Mutex +{ + const int Locker1[ 6 ]; // Windows - CRITICAL_SECTION (Locker1), Linux - pthread_mutex_t (Locker1) + const int Locker2[ 5 ]; // MacOSX - pthread_mutex_t (Locker1 + Locker2) +}; + +struct Spinlock +{ + const long Locker; +}; + +struct SyncObj +{ + const void* CurMngr; +}; + +struct Property +{ + const string PropName; + const string TypeName; + const int DataType; + const asIObjectType* AsObjType; + const bool IsIntDataType; + const bool IsSignedIntDataType; + const bool IsFloatDataType; + const bool IsBoolDataType; + const bool IsEnumDataType; + const bool IsArrayOfString; + const bool IsDictOfString; + const bool IsDictOfArray; + const bool IsDictOfArrayOfString; + const int AccessType; + const bool IsReadable; + const bool IsWritable; + const bool GenerateRandomValue; + const bool SetDefaultValue; + const bool CheckMinValue; + const bool CheckMaxValue; + const int64 DefaultValue; + const int64 MinValue; + const int64 MaxValue; + const void* Registrator; + const uint RegIndex; + const int EnumValue; + const uint PodDataOffset; + const uint ComplexDataIndex; + const uint BaseSize; + const uint GetCallback; + const uint GetCallbackArgs; + const UintVec SetCallbacks; + const IntVec SetCallbacksArgs; + const bool SetCallbacksAnyOldValue; + const void* NativeSetCallback; + const void* NativeSendCallback; + const bool GetCallbackLocked; + const bool SetCallbackLocked; + const void* SendIgnoreEntity; +}; + +struct Properties +{ + const void* Registrator; + const uint8* PodData; + const PtrVec ComplexData; + const UintVec ComplexDataSizes; + const PtrVec StoreData; + const UintVec StoreDataSizes; + const Uint16Vec StoreDataComplexIndicies; + const PtrVec UnresolvedProperties; +}; + +struct Methods +{ + const void* Registrator; + const UintVec WatcherBindIds; +}; + +struct CritterType +{ + const bool Enabled; + const char Name[ 64 ]; + const char SoundName[ 64 ]; + const uint Alias; + const uint Multihex; + const int AnimType; + + const bool CanWalk; + const bool CanRun; + const bool CanAim; + const bool CanArmor; + const bool CanRotate; + + const bool Anim1[ 37 ]; // A..Z 0..9 +}; + +struct NpcPlane +{ + const int Type; + const uint Priority; + const int Identifier; + const uint IdentifierExt; + const NpcPlane* ChildPlane; + const bool IsMove; + + union + { + struct + { + bool IsRun; + uint WaitSecond; + int ScriptBindId; + } const Misc; + + struct + { + bool IsRun; + uint TargId; + int MinHp; + bool IsGag; + uint16 GagHexX, GagHexY; + uint16 LastHexX, LastHexY; + } const Attack; + + struct + { + bool IsRun; + uint16 HexX; + uint16 HexY; + uint8 Dir; + uint Cut; + } const Walk; + + struct + { + bool IsRun; + uint16 HexX; + uint16 HexY; + uint16 Pid; + uint UseItemId; + bool ToOpen; + } const Pick; + + struct + { + uint Buffer[ 8 ]; + } const Buffer; + }; + + struct + { + const uint PathNum; + const uint Iter; + const bool IsRun; + const uint TargId; + const uint16 HexX; + const uint16 HexY; + const uint Cut; + const uint Trace; + } Move; + + const bool Assigned; + const int RefCounter; + + const NpcPlane* GetCurPlane() const { return ChildPlane ? ChildPlane->GetCurPlane() : this; } + bool IsSelfOrHas( int type ) const { return Type == type || ( ChildPlane ? ChildPlane->IsSelfOrHas( type ) : false ); } + uint GetChildIndex( NpcPlane* child ) const + { + uint index = 0; + for( const NpcPlane* child_ = this; child_; index++ ) + { + if( child_ == child ) break; + else child_ = child_->ChildPlane; + } + return index; + } + uint GetChildsCount() const + { + uint count = 0; + const NpcPlane* child = ChildPlane; + for( ; child; count++, child = child->ChildPlane ) ; + return count; + } +}; + +enum class EntityType +{ + Invalid = 0, + Custom, + Item, + Client, + Npc, + Location, + Map, + CritterCl, + ItemHex, + Global, + ClientMap, + ClientLocation, + ProtoItem, + ProtoItemExt, + ProtoCritter, + Max, +}; + +struct Entity +{ + const Properties Props; + const Methods Meths; + const uint Id; + const EntityType Type; + const long RefCounter; + const bool IsDestroyed; + const bool IsDestroying; +}; + +struct ProtoItem: Entity +{ + const Properties Props; + const hash ProtoId; + const Properties ItemProps; + const int64 InstanceCount; + const UintVec TextsLang; + const PtrVec Texts; + + #ifdef __SERVER + const string ScriptName; + #endif + #ifdef __MAPPER + const string CollectionName; + #endif +}; + +struct Item: Entity +{ + const ProtoItem* Proto; + const uint8 Accessory; + const bool ViewPlaceOnMap; + + union + { + struct + { + uint MapId; + uint16 HexX; + uint16 HexY; + } const AccHex; + + struct + { + uint Id; + uint8 Slot; + } const AccCritter; + + struct + { + uint ContainerId; + uint StackId; + } const AccContainer; + + const char AccBuffer[ 8 ]; + }; + + #ifdef __SERVER + const int FuncId[ ITEM_EVENT_MAX ]; + const Critter* ViewByCritter; + const ItemVec* ChildItems; + const SyncObj Sync; + #endif +}; + +struct GlobalMapGroup +{ + const CrVec Group; + const Critter* Rule; + const uint CarId; + const float CurX, CurY; + const float ToX, ToY; + const float Speed; + const bool IsSetMove; + const uint TimeCanFollow; + const bool IsMultiply; + const uint ProcessLastTick; + const uint EncounterDescriptor; + const uint EncounterTick; + const bool EncounterForce; +}; + +struct CritterTimeEvent +{ + const hash FuncNum; + const uint Rate; + const uint NextTime; + const int Identifier; +}; +typedef vector< CritterTimeEvent > CritterTimeEventVec; +typedef vector< CritterTimeEvent >::const_iterator CritterTimeEventVecIt; + +struct Critter: Entity +{ + const hash ProtoId; + const uint CrType; + const uint8 Cond; + const bool ClientToDelete; + const uint16 HexX; + const uint16 HexY; + const uint8 Dir; + const int Multihex; + const uint16 WorldX; + const uint16 WorldY; + const uint MapId; + const hash MapPid; + const uint GlobalGroupUid; + const uint16 LastMapHexX; + const uint16 LastMapHexY; + const uint Anim1Life; + const uint Anim1Knockout; + const uint Anim1Dead; + const uint Anim2Life; + const uint Anim2Knockout; + const uint Anim2Dead; + const uint Anim2KnockoutEnd; + const uint8 GlobalMapFog[ GM_ZONES_FOG_SIZE ]; + uint UserData[ 10 ]; + const uint Reserved[ 10 ]; + + const SyncObj Sync; + const bool CritterIsNpc; + const uint Flags; + const ScriptString& NameStr; + + struct + { + const bool IsAlloc; + const uint8* Data; + const uint Width; + const uint Height; + const uint WidthB; + } const GMapFog; + + const bool IsRuning; + const uint PrevHexTick; + const uint16 PrevHexX, PrevHexY; + const int LockMapTransfers; + const uint AllowedToDownloadMap; + const CrVec VisCr; + const CrVec VisCrSelf; + const CrMap VisCrMap; + const CrMap VisCrSelfMap; + const UintSet VisCr1, VisCr2, VisCr3; + const UintSet VisItem; + const Spinlock VisItemLocker; + const uint ViewMapId; + const hash ViewMapPid; + const uint16 ViewMapLook, ViewMapHx, ViewMapHy; + const uint8 ViewMapDir; + const uint ViewMapLocId, ViewMapLocEnt; + + const GlobalMapGroup* GroupSelf; + const GlobalMapGroup* GroupMove; + + const ItemVec InvItems; + const Item* DefItemSlotHand; + const Item* DefItemSlotArmor; + const Item* ItemSlotMain; + const Item* ItemSlotExt; + const Item* ItemSlotArmor; + const int FuncId[ CRITTER_EVENT_MAX ]; + const uint KnockoutAp; + const uint NextIntellectCachingTick; + const uint16 IntellectCacheValue; + const uint LookCacheValue; + const uint StartBreakTime; + const uint BreakTime; + const uint WaitEndTick; + const int DisableSend; + const uint AccessContainerId; + const uint ItemTransferCount; + const uint TryingGoHomeTick; + + const CritterTimeEventVec CrTimeEvents; + + const uint GlobalIdleNextTick; + const uint ApRegenerationTick; + const bool CanBeRemoved; +}; + +struct Client: Critter +{ + const char Name[ UTF8_BUF_SIZE( MAX_NAME ) ]; + const char PassHash[ PASS_HASH_SIZE ]; + const uint8 Access; + const uint LanguageMsg; +}; + +struct Npc: Critter +{ + const uint NextRefreshBagTick; + const NpcPlaneVec AiPlanes; + const uint Reserved; +}; + +struct CritterCl: Entity +{ + const hash Pid; + const uint16 HexX, HexY; + const uint8 Dir; + const uint NameColor; + const uint ContourColor; + const Uint16Vec LastHexX, LastHexY; + const uint8 Cond; + const uint Anim1Life; + const uint Anim1Knockout; + const uint Anim1Dead; + const uint Anim2Life; + const uint Anim2Knockout; + const uint Anim2Dead; + const uint Flags; + const uint CrType, CrTypeAlias; + const uint ApRegenerationTick; + const int Multihex; + void* DrawEffect; + + const ScriptString& Name; + const ScriptString& NameOnHead; + const ScriptString& Avatar; + + const ItemVec InvItems; + const Item* DefItemSlotHand; + const Item* DefItemSlotArmor; + const Item* ItemSlotMain; + const Item* ItemSlotExt; + const Item* ItemSlotArmor; + + const bool IsRuning; + const Uint16PairVec MoveSteps; +}; + +struct MapObject +{ + const uint8 MapObjType; + const hash ProtoId; + #ifdef __MAPPER + const ScriptString* ProtoName; + #endif + const uint16 MapX; + const uint16 MapY; + + const uint UID; + const uint ContainerUID; + const uint ParentUID; + const uint ParentChildIndex; + + const uint LightRGB; + const uint8 LightDay; + const uint8 LightDirOff; + const uint8 LightDistance; + const int8 LightIntensity; + + const char ScriptName[ MAPOBJ_SCRIPT_NAME + 1 ]; + const char FuncName[ MAPOBJ_SCRIPT_NAME + 1 ]; + + const int UserData[ 10 ]; + + const PtrVec* Props; + + union + { + struct + { + uint8 Dir; + uint8 Cond; + uint Anim1; + uint Anim2; + } const MCritter; + + struct + { + int16 OffsetX; + int16 OffsetY; + hash PicMap; + hash PicInv; + + uint Count; + uint8 ItemSlot; + + uint8 BrokenFlags; + uint8 BrokenCount; + uint16 Deterioration; + + hash AmmoPid; + uint AmmoCount; + + uint LockerDoorId; + uint16 LockerCondition; + uint16 LockerComplexity; + + int16 TrapValue; + + int Val[ 10 ]; + } const MItem; + + struct + { + int16 OffsetX; + int16 OffsetY; + hash PicMap; + hash PicInv; + + bool CanUse; + bool CanTalk; + uint TriggerNum; + + uint8 ParamsCount; + int Param[ 5 ]; + + hash ToMap; + uint ToEntire; + uint8 ToDir; + } const MScenery; + }; +}; + +struct MapEntire +{ + const uint Number; + const uint16 HexX; + const uint16 HexY; + const uint8 Dir; +}; +typedef vector< MapEntire > EntiresVec; + +struct SceneryToClient +{ + const hash ProtoId; + const hash PicMap; + const uint16 MapX; + const uint16 MapY; + const int16 OffsetX; + const int16 OffsetY; + const uint LightColor; + const uint8 LightDistance; + const uint8 LightFlags; + const int8 LightIntensity; + const uint8 Flags; + const uint8 SpriteCut; +}; +typedef vector< SceneryToClient > SceneryToClientVec; + +struct ProtoMap +{ + struct + { + const uint Version; + const uint16 MaxHexX, MaxHexY; + const int WorkHexX, WorkHexY; + const char ScriptModule[ MAX_SCRIPT_NAME + 1 ]; + const char ScriptFunc[ MAX_SCRIPT_NAME + 1 ]; + const int Time; + const bool NoLogOut; + const int DayTime[ 4 ]; + const uint8 DayColor[ 12 ]; + + // Deprecated + const uint16 HeaderSize; + const bool Packed; + const uint UnpackedDataLen; + } const Header; + + const MapObjectVec MObjects; + const uint LastObjectUID; + + struct Tile + { + const hash Name; + const uint16 HexX, HexY; + const int16 OffsX, OffsY; + const uint8 Layer; + const bool IsRoof; + #ifdef __MAPPER + const bool IsSelected; + #endif + }; + typedef vector< Tile > TileVec; + const TileVec Tiles; + + #ifdef __MAPPER + typedef vector< TileVec > TileVecVec; + const TileVecVec TilesField; + const TileVecVec RoofsField; + + const TileVec& GetTiles( uint16 hx, uint16 hy, bool is_roof ) const + { + uint index = hy * Header.MaxHexX + hx; + return is_roof ? RoofsField[ index ] : TilesField[ index ]; + } + #endif + + #ifdef __SERVER + const SceneryToClientVec WallsToSend; + const SceneryToClientVec SceneriesToSend; + const uint HashTiles; + const uint HashWalls; + const uint HashScen; + + const MapObjectVec CrittersVec; + const MapObjectVec ItemsVec; + const MapObjectVec SceneriesVec; + const MapObjectVec GridsVec; + const uint8* HexFlags; + #endif + + const EntiresVec MapEntires; + + const string Name; + const hash Pid; +}; + +struct Map: Entity +{ + const SyncObj Sync; + const Mutex DataLocker; + const uint8* HexFlags; + const CrVec MapCritters; + const ClVec MapPlayers; + const PcVec MapNpcs; + const ItemVec HexItems; + const Location* MapLocation; + + struct + { + const hash MapPid; + const uint8 MapRain; + const bool IsTurnBasedAviable; + const int MapTime; + const hash ScriptId; + const int MapDayTime[ 4 ]; + const uint8 MapDayColor[ 12 ]; + const uint Reserved[ 20 ]; + const int UserData[ MAP_MAX_DATA ]; + } const Data; + + const ProtoMap* Proto; + + const bool NeedProcess; + const int FuncId[ MAP_EVENT_MAX ]; + const uint LoopEnabled[ MAP_LOOP_FUNC_MAX ]; + const uint LoopLastTick[ MAP_LOOP_FUNC_MAX ]; + const uint LoopWaitTick[ MAP_LOOP_FUNC_MAX ]; + + const bool IsTurnBasedOn; + const uint TurnBasedEndTick; + const int TurnSequenceCur; + const UintVec TurnSequence; + const bool IsTurnBasedTimeout; + const uint TurnBasedBeginSecond; + const bool NeedEndTurnBased; + const uint TurnBasedRound; + const uint TurnBasedTurn; + const uint TurnBasedWholeTurn; + + uint16 GetMaxHexX() const { return Proto->Header.MaxHexX; } + uint16 GetMaxHexY() const { return Proto->Header.MaxHexY; } + + #ifdef __SERVER + bool IsHexTrigger( uint16 hx, uint16 hy ) const { return FLAG( Proto->HexFlags[ hy * GetMaxHexX() + hx ], FH_TRIGGER ); } + bool IsHexTrap( uint16 hx, uint16 hy ) const { return FLAG( HexFlags[ hy * GetMaxHexX() + hx ], FH_WALK_ITEM ); } + bool IsHexCritter( uint16 hx, uint16 hy ) const { return FLAG( HexFlags[ hy * GetMaxHexX() + hx ], FH_CRITTER | FH_DEAD_CRITTER ); } + bool IsHexGag( uint16 hx, uint16 hy ) const { return FLAG( HexFlags[ hy * GetMaxHexX() + hx ], FH_GAG_ITEM ); } + uint16 GetHexFlags( uint16 hx, uint16 hy ) const { return ( HexFlags[ hy * GetMaxHexX() + hx ] << 8 ) | Proto->HexFlags[ hy * GetMaxHexX() + hx ]; } + bool IsHexPassed( uint16 hx, uint16 hy ) const { return !FLAG( GetHexFlags( hx, hy ), FH_NOWAY ); } + bool IsHexRaked( uint16 hx, uint16 hy ) const { return !FLAG( GetHexFlags( hx, hy ), FH_NOSHOOT ); } + #endif +}; + +struct ProtoLocation +{ + const hash LocPid; + const string Name; + + const uint MaxPlayers; + const uint16 Radius; + const bool Visible; + const bool AutoGarbage; + const bool GeckVisible; + + const HashVec ProtoMapPids; + const HashVec AutomapsPids; + const UintPairVec Entrance; + const int EntranceScriptBindId; + + const UintVec TextsLang; + const IntVec Texts; // It is not int vector, do not use +}; + +struct Location +{ + const SyncObj Sync; + const MapVec LocMaps; + + struct + { + const hash LocPid; + const uint16 WX; + const uint16 WY; + const uint16 Radius; + const bool Visible; + const bool GeckVisible; + const bool AutoGarbage; + const uint Color; + const uint Reserved3[ 59 ]; + } const Data; + + const ProtoLocation* Proto; + const int GeckCount; + const int FuncId[ LOCATION_EVENT_MAX ]; + + bool IsVisible() const { return Data.Visible || ( Data.GeckVisible && GeckCount > 0 ); } +}; + +struct Field +{ + struct Tile + { + const SpriteAnim* Anim; + const int16 OffsX; + const int16 OffsY; + const uint8 Layer; + }; + typedef vector< Tile > TileVec; + + const CritterCl* Crit; + const CrClVec* DeadCrits; // NULL if empty + const int ScrX; + const int ScrY; + const SpriteAnim* SimplyTile[ 2 ]; // First tile with zero offsets and layer (if present), 0 - Tile, 1 - Roof + const TileVec* Tiles[ 2 ]; // NULL if empty, 0 - Tile, 1 - Roof + const ItemVec* Items; // NULL if empty + const int16 RoofNum; + + struct + { + const bool ScrollBlock : 1; + const bool IsWall : 1; + const bool IsWallSAI : 1; + const bool IsWallTransp : 1; + const bool IsScen : 1; + const bool IsExitGrid : 1; + const bool IsNotPassed : 1; + const bool IsNotRaked : 1; + const bool IsNoLight : 1; + const bool IsMultihex : 1; + } const Flags; + + const uint8 Corner; +}; + +struct SpriteInfo +{ + const void* Surface; + const float SurfaceUV[ 4 ]; + const uint16 Width; + const uint16 Height; + const int16 OffsX; + const int16 OffsY; + const void* DrawEffect; + const bool UsedForAnim3d; + const void* Anim3d; + const uint8* Data; + const int DataAtlasType; + const bool DataAtlasOneImage; +}; + +struct Sprite +{ + // Ordering + const int DrawOrderType; // 0..4 - flat, 5..9 - normal + const uint DrawOrderPos; + const uint TreeIndex; + + // Sprite information, pass to GetSpriteInfo + const uint SprId; + const uint* PSprId; // If PSprId == NULL than used SprId + + // Positions + const int HexX, HexY; + const int ScrX, ScrY; + const int16* OffsX, * OffsY; + + // Cutting + const int CutType; // See Sprites cutting + const Sprite* Parent, * Child; + const float CutX, CutW, CutTexL, CutTexR; + + // Other + const uint8* Alpha; + const uint8* Light; + const uint8* LightRight; + const uint8* LightLeft; + const int EggType; + const int ContourType; + const uint ContourColor; + const uint Color; + const uint FlashMask; + const void* DrawEffect; + const bool* ValidCallback; + const bool Valid; // If Valid == false than this sprite not valid + + #ifdef __MAPPER + const int CutOyL, CutOyR; + #endif + + uint const GetSprId() + { + return PSprId ? *PSprId : SprId; + } + + SpriteInfo* const GetSprInfo() + { + return FOnline->GetSpriteInfo( PSprId ? *PSprId : SprId ); + } + + void const GetPos( int& x, int& y ) + { + SpriteInfo* si = GetSprInfo(); + x = (int) ( (float) ( ScrX - si->Width / 2 + si->OffsX + ( OffsX ? *OffsX : 0 ) + FOnline->ScrOx ) / FOnline->SpritesZoom ); + y = (int) ( (float) ( ScrY - si->Height + si->OffsY + ( OffsY ? *OffsY : 0 ) + FOnline->ScrOy ) / FOnline->SpritesZoom ); + } +}; + +struct SpriteAnim +{ + // Data + const uint Ind[ MAX_FRAMES ]; + const int16 NextX[ MAX_FRAMES ]; + const int16 NextY[ MAX_FRAMES ]; + const uint CntFrm; + const uint Ticks; + const uint Anim1; + const uint Anim2; + uint GetCurSprIndex() { return CntFrm > 1 ? ( ( FOnline->GetTick() % Ticks ) * 100 / Ticks ) * CntFrm / 100 : 0; } + uint GetCurSprId() { return Ind[ GetCurSprIndex() ]; } + + // Dir animations + const bool HaveDirs; + const SpriteAnim* Dirs[ 7 ]; // 7 additional for square hexes, 5 for hexagonal + int DirCount() { return HaveDirs ? DIRS_COUNT : 1; } + const SpriteAnim* GetDir( int dir ) { return dir == 0 || !HaveDirs ? this : Dirs[ dir - 1 ]; } +}; + +inline Field* GetField( uint hexX, uint hexY ) +{ + if( !FOnline->ClientMap || hexX >= FOnline->ClientMapWidth || hexY >= FOnline->ClientMapHeight ) + return NULL; + return &FOnline->ClientMap[ hexY * FOnline->ClientMapWidth + hexX ]; +} + +inline uint GetFieldLight( uint hexX, uint hexY ) +{ + if( !FOnline->ClientMapLight || hexX >= FOnline->ClientMapWidth || hexY >= FOnline->ClientMapHeight ) + return 0; + uint r = FOnline->ClientMapLight[ hexY * FOnline->ClientMapWidth * 3 + hexX * 3 + 0 ]; + uint g = FOnline->ClientMapLight[ hexY * FOnline->ClientMapWidth * 3 + hexX * 3 + 1 ]; + uint b = FOnline->ClientMapLight[ hexY * FOnline->ClientMapWidth * 3 + hexX * 3 + 2 ]; + uint rgb = ( r << 16 ) | ( g << 8 ) | ( b ); + return rgb; +} + +inline int GetDirection( int x1, int y1, int x2, int y2 ) +{ + if( FOnline->MapHexagonal ) + { + float hx = (float) x1; + float hy = (float) y1; + float tx = (float) x2; + float ty = (float) y2; + float nx = 3 * ( tx - hx ); + float ny = ( ty - hy ) * SQRT3T2_FLOAT - ( float(x2 & 1) - float(x1 & 1) ) * SQRT3_FLOAT; + float dir = 180.0f + RAD2DEG* atan2f( ny, nx ); + + if( dir >= 60.0f && dir < 120.0f ) + return 5; + if( dir >= 120.0f && dir < 180.0f ) + return 4; + if( dir >= 180.0f && dir < 240.0f ) + return 3; + if( dir >= 240.0f && dir < 300.0f ) + return 2; + if( dir >= 300.0f ) + return 1; + return 0; + } + else + { + float dir = 180.0f + RAD2DEG* atan2( (float) ( x2 - x1 ), (float) ( y2 - y1 ) ); + + if( dir >= 22.5f && dir < 67.5f ) + return 7; + if( dir >= 67.5f && dir < 112.5f ) + return 0; + if( dir >= 112.5f && dir < 157.5f ) + return 1; + if( dir >= 157.5f && dir < 202.5f ) + return 2; + if( dir >= 202.5f && dir < 247.5f ) + return 3; + if( dir >= 247.5f && dir < 292.5f ) + return 4; + if( dir >= 292.5f && dir < 337.5f ) + return 5; + return 6; + } +} + +inline int GetDistantion( int x1, int y1, int x2, int y2 ) +{ + if( FOnline->MapHexagonal ) + { + int dx = ( x1 > x2 ? x1 - x2 : x2 - x1 ); + if( x1 % 2 == 0 ) + { + if( y2 <= y1 ) + { + int rx = y1 - y2 - dx / 2; + return dx + ( rx > 0 ? rx : 0 ); + } + else + { + int rx = y2 - y1 - ( dx + 1 ) / 2; + return dx + ( rx > 0 ? rx : 0 ); + } + } + else + { + if( y2 >= y1 ) + { + int rx = y2 - y1 - dx / 2; + return dx + ( rx > 0 ? rx : 0 ); + } + else + { + int rx = y1 - y2 - ( dx + 1 ) / 2; + return dx + ( rx > 0 ? rx : 0 ); + } + } + } + else + { + int dx = abs( x2 - x1 ); + int dy = abs( y2 - y1 ); + return std::max( dx, dy ); + } +} + +inline void static_asserts() +{ + // Check the sizes of base types + STATIC_ASSERT( sizeof( char ) == 1 ); + STATIC_ASSERT( sizeof( short ) == 2 ); + STATIC_ASSERT( sizeof( int ) == 4 ); + STATIC_ASSERT( sizeof( int64 ) == 8 ); + STATIC_ASSERT( sizeof( uint8 ) == 1 ); + STATIC_ASSERT( sizeof( uint16 ) == 2 ); + STATIC_ASSERT( sizeof( uint ) == 4 ); + STATIC_ASSERT( sizeof( uint64 ) == 8 ); + STATIC_ASSERT( sizeof( bool ) == 1 ); + #if defined ( FO_X86 ) + STATIC_ASSERT( sizeof( size_t ) == 4 ); + STATIC_ASSERT( sizeof( void* ) == 4 ); + #elif defined ( FO_X64 ) + STATIC_ASSERT( sizeof( size_t ) == 8 ); + STATIC_ASSERT( sizeof( void* ) == 8 ); + #endif +} + +#endif // __FONLINE__ diff --git a/SDK/Modules/Core/FixedDropMenu.fos b/SDK/Modules/Core/FixedDropMenu.fos new file mode 100644 index 0000000000..295d56d163 --- /dev/null +++ b/SDK/Modules/Core/FixedDropMenu.fos @@ -0,0 +1,211 @@ +// FOS Client + +/*EXPORT*/ funcdef bool DropMenuNeedShowButton( Critter cr, Item item ); +/*EXPORT*/ funcdef void DropMenuButtonAction( Critter cr, Item item ); + +class DropButton +{ + int SortIndex; + Sprite::Sprite PicNormal; + Sprite::Sprite PicActive; + DropMenuNeedShowButton NeedShow; + DropMenuButtonAction Action; +} + +class FixedDropMenu : Gui::IDropMenu +{ + int MouseButton; + CursorType Cursor; + uint ShowTime; + int ButtonHeight; + string ArtDir; + string OpenSound; + DropButton[] Buttons; + DropButton[] ShowButtons; + bool Pressed; + int PressedOffsetY; + uint MouseStayTick; + Entity SelectedEntity; + + FixedDropMenu( int mouseButton, CursorType cursor, uint showTime, uint buttonHeight, string artDir, string openSound ) + { + MouseButton = mouseButton; + Cursor = cursor; + ShowTime = showTime; + ButtonHeight = buttonHeight; + ArtDir = artDir; + OpenSound = openSound; + Buttons = array< DropButton >(); + ShowButtons = array< DropButton >(); + Pressed = false; + PressedOffsetY = 0; + MouseStayTick = 0; + SelectedEntity = null; + } + + void AddButton( int sortIndex, DropMenuNeedShowButton needShow, DropMenuButtonAction action, string picNormal, string picActive ) + { + DropButton button = DropButton(); + button.SortIndex = sortIndex; + button.PicNormal = Sprite::Sprite( ArtDir + picNormal ); + button.PicActive = Sprite::Sprite( ArtDir + picActive ); + @button.NeedShow = needShow; + @button.Action = action; + Buttons.insertLast( button ); + // Todo: sort + } + + private Entity get_SafeSelectedEntity() + { + // Simulate entity weak reference + if( SelectedEntity != null && SelectedEntity.IsDestroyed ) + SelectedEntity = null; + return SelectedEntity; + } + + void Draw() + { + if( ShowButtons.length() > 0 ) + { + int x = __MouseX + 20; // Todo: rework to actual cursor size + int y = __MouseY + 20; + int activeIndex = PressedOffsetY / ButtonHeight; + activeIndex = Math::Clamp( activeIndex, 0, int( ShowButtons.length() ) - 1 ); + for( uint i = 0; i < ShowButtons.length(); i++ ) + { + DropButton button = ShowButtons[ i ]; + Sprite::Sprite pic = ( int(i) == activeIndex ? button.PicActive : button.PicNormal ); + pic.Draw( x, y ); + y += ButtonHeight; + } + } + } + + void MouseDown( int button ) + { + if( MouseButton == button && Cursor == __Cursor && SafeSelectedEntity != null ) + { + Pressed = true; + PressedOffsetY = 0; + MouseStayTick = GetTick(); + } + } + + void MouseUp( int button ) + { + if( MouseButton == button && SafeSelectedEntity != null ) + { + Pressed = false; + + if( ShowButtons.length() == 0 ) + CollectShowButtons( true ); + + int activeIndex = PressedOffsetY / ButtonHeight; + activeIndex = Math::Clamp( activeIndex, 0, int( ShowButtons.length() ) - 1 ); + DropButton dropButton = ShowButtons[ activeIndex ]; + ShowButtons.clear(); + + Entity entity = SafeSelectedEntity; + SelectedEntity = null; + + if( !entity.IsDestroyed ) + { + Critter cr = cast< Critter >( entity ); + Item item = cast< Item >( entity ); + if( dropButton.NeedShow( cr, item ) ) + dropButton.Action( cr, item ); + } + } + } + + bool PreMouseMove( int offsetX, int offsetY ) + { + if( Pressed ) + { + if( offsetX != 0 || offsetY != 0 ) + { + PressedOffsetY += offsetY; + CustomCall( "SetMousePos " + ( __MouseX - offsetX ) + " " + ( __MouseY - offsetY ) + " false" ); + } + return true; + } + return false; + } + + void PostMouseMove( int offsetX, int offsetY ) + { + if( Cursor == __Cursor ) + { + Entity prevEntity = SafeSelectedEntity; + SelectedEntity = null; + + Gui::Object hoveredObj = Gui::GetHoveredObject(); + Gui::Screen screen = Gui::GetActiveScreen(); + if( hoveredObj != null ) + { + if( hoveredObj.Grid != null && cast< Gui::ItemView >( hoveredObj.Grid ) != null ) + SelectedEntity = cast< Gui::ItemView >( hoveredObj.Grid ).GetItem( hoveredObj.CellIndex ); + } + else if( screen == null || !screen.IsModal ) + { + Entity entity = GetMonitorEntity( __MouseX, __MouseY ); + if( entity != null && ( cast< Critter >( entity ) != null || cast< Item >( entity ) != null ) ) + SelectedEntity = entity; + } + + if( prevEntity !is SafeSelectedEntity || offsetX != 0 || offsetY != 0 ) + { + MouseStayTick = GetTick(); + ShowButtons.clear(); + } + } + } + + void InputLost() + { + Pressed = false; + SelectedEntity = null; + ShowButtons.clear(); + } + + void Loop() + { + if( SafeSelectedEntity != null ) + { + if( Cursor != __Cursor ) + { + Pressed = false; + SelectedEntity = null; + ShowButtons.clear(); + } + else if( MouseStayTick != 0 && GetTick() - ShowTime >= MouseStayTick ) + { + MouseStayTick = 0; + + CollectShowButtons( !Pressed ); + + if( ShowButtons.length() == 0 ) + { + Pressed = false; + SelectedEntity = null; + } + } + } + } + + private void CollectShowButtons( bool onlyFirst ) + { + ShowButtons.clear(); + Critter cr = cast< Critter >( SafeSelectedEntity ); + Item item = cast< Item >( SafeSelectedEntity ); + for( uint i = 0; i < Buttons.length(); i++ ) + { + if( Buttons[ i ].NeedShow( cr, item ) ) + { + ShowButtons.insertLast( Buttons[ i ] ); + if( onlyFirst ) + break; + } + } + } +} diff --git a/SDK/Modules/Core/Gui.fos b/SDK/Modules/Core/Gui.fos new file mode 100644 index 0000000000..fa184e0dba --- /dev/null +++ b/SDK/Modules/Core/Gui.fos @@ -0,0 +1,3518 @@ +// FOS Client + +#pragma enum CursorType Default = 0 +#pragma globalvar CursorType __Cursor +#pragma globalvar uint __CursorData +#pragma globalvar CursorType __DraggableCursor + +interface IDropMenu +{ + void Draw(); + void MouseDown( int button ); + void MouseUp( int button ); + bool PreMouseMove( int offsetX, int offsetY ); + void PostMouseMove( int offsetX, int offsetY ); + void InputLost(); + void Loop(); +} + +/*EXPORT*/ funcdef Screen CreateScreenFunc(); +/*EXPORT*/ funcdef bool DragAndDropHandler( Object obj, Object target ); + +// Inheritance +// Object +// Panel +// Screen +// Grid +// ItemView +// Button +// CheckBox +// RadioButton +// Text +// TextInput +// Console +// MessageBox + +// Callbacks +// Object +// void OnConstruct() +// void OnInit() +// void OnShow() +// void OnShow( dictionary params ) +// void OnHide() +// void OnAppear() +// void OnDisappear() +// void OnDraw() +// void OnPostDraw() +// void OnMove( int deltaX, int deltaY ) +// void OnMouseDown( int button ) +// void OnMouseUp( int button, bool lost ) +// void OnMousePressed( int button ) +// void OnLMousePressed() +// void OnRMousePressed() +// void OnMouseClick( int button ) +// void OnLMouseClick() +// void OnRMouseClick() +// void OnMouseMove() +// void OnGlobalMouseDown( int button ) +// void OnGlobalMouseUp( int button ) +// void OnGlobalMousePressed( int button ) +// void OnGlobalMouseClick( int button ) +// void OnGlobalMouseMove() +// void OnInput() +// void OnInput( uint8 key ) +// void OnInput( string text ) +// void OnInput( uint8 key, string text ) +// void OnGlobalInput( uint8 key, string text ) +// void OnActiveChanged() +// void OnFocusChanged() +// void OnHoverChanged() +// void OnDragChanged() +// void OnResizeGrid( Object cell, uint cellIndex ) +// void OnDrawItem( Item item, Object cell, uint cellIndex ) +// CheckBox +// void OnCheckedChanged() +// ItemView +// Item[] OnGetItems() - return all items for display +// int OnCheckItem( Item item ) - return slot index if UseSorting == false; sorting value if UseSorting == true; < 0 to discard item + +// API +// Object +// bool Active +// bool ActiveSelf +// string Name +// int PosX +// int PosY +// int AbsolutePosX +// int AbsolutePosY +// int Width +// int Height +// int Anchor +// int Dock +// bool IsDraggable +// bool IsNotHittable +// bool IsNotCatchable +// bool CheckTransparentOnHit +// bool IsFocused +// bool IsPressed +// bool IsHovered +// bool IsDragged +// uint ChildCount +// Object Parent +// Screen Screen +// Grid Grid +// uint CellIndex +// void Init( Object parent ) +// void Remove() +// void SetActive( bool active ) +// void SetPosition( int x, int y ) +// void SetPosition( string iniKey ) +// void SetSize( int w, int h ) +// void SetAnchor( int anchorStyles ) +// void SetDock( int dockStyle ) +// void SetColor( uint color ) +// void SetDraggable( bool enabled ) +// void SetNotHittable( bool enabled ) +// void SetNotCatchable( bool enabled ) +// void SetCheckTransparentOnHit( bool enabled ) +// Object FindMouseHit() +// Object FindHit( int x, int y ) +// bool IsMouseHit() +// bool IsHit( int x, int y ) +// void GetWholeSize( int& centerX, int& centerY, int& wholeWidth, int& wholeHeight, bool onlyChidren = false ) +// void Draw( int x, int y ) +// void Move( int deltaX, int deltaY ) +// void StartDragging() +// void MouseClick( int button ) +// void Input( uint8 key, string text ) +// Panel FindPanel( string name ) +// Text FindText( string name ) +// TextInput FindTextInput( string name ) +// Button FindButton( string name ) +// Object Find( string name, bool deepFind = true ) +// Object GetChild( uint index ) +// Panel : Object +// Sprite::Sprite BackgroundImage +// int BackgroundImageLayout +// void SetBackgroundImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetBackgroundImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetCropContent( bool enabled ) +// void SetAutoScroll( bool ver, bool hor ) +// void ModifyScroll( int ver, int hor ) +// bool CanModifyScroll( int ver, int hor ) +// Text : Object +// string Text (overridable) +// int TextFont +// uint TextColor +// uint TextColorFocused +// int TextFlags +// void SetText( string text, int font, int flags ) +// void SetText( string text ) +// void SetTextWithResize( string text ) +// void SetTextFont( int font ) +// void SetTextFlags( int flags ) +// void SetTextColor( uint color ) +// void SetTextFocusedColor( uint color ) +// TextInput : Text : Object +// uint InputLength +// bool IsTextPassword +// string PasswordChar +// void SetInputLength( uint length ) +// void SetInputPassword( string passwordChar ) +// void SetCarriage( bool enable ) +// Button : Panel : Object +// Sprite::Sprite PressedImage +// int PressedImageLayout +// Sprite::Sprite HoverImage +// int HoverImageLayout +// bool IsSwitched +// bool IsDisabled +// void SetPressedImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetPressedImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetHoverImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetHoverImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetDisabledImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetDisabledImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) +// void SetSwitch( bool enabled ) +// void SetCondition( bool enabled ) +// CheckBox : Button : Panel : Object +// bool IsChecked +// void SetChecked( bool checked ) +// RadioButton : CheckBox : Button : Panel : Object +// Screen : Panel : Object +// int Index +// bool IsMain +// bool IsModal +// bool IsMultiinstance +// bool IsCloseOnMiss +// bool IsCanMove +// bool IsMoveIgnoreBorders +// int[] AvailableCursors +// int Cursor +// bool IsOnTop +// void SetModal( bool enabled ) +// void SetMultiinstance( bool enabled ) +// void SetCloseOnMiss( bool enabled ) +// void SetCanMove( bool enabled, bool ignoreBorders ) +// void SetAvailableCursors( CursorType[] cursors ) +// Grid : Panel : Object +// string CellPrototype +// uint GridSize +// int Columns +// Object[] Cells +// void ResizeGrid( uint size ) +// void RefreshContentPositions() +// void SetCellPrototype( string name ) +// void SetGridSize( uint size ) +// void SetColumns( int length ) +// void SetPadding( int x, int y ) +// MessageBox : Text : Object +// string[] MessageTexts +// int[] MessageTypes +// string[] MessageTimes +// bool[] DisplayedMessages +// bool InvertMessages +// void AddMessage( string text, int type = FOMB_GAME ) +// void SetDisplayedMessages( int[] messageTypes ) +// void ChangeDisplayedMessage( int messageType, bool enable ) +// void SetInvertMessages( bool invert ) +// void ClearMessages() +// Console : TextInput : Text : Object +// string HistoryStorageName +// string[] History +// uint HistoryMaxLength +// void Activate() +// void Deactivate() +// void SendText() +// void Toggle() // Automatically manage calls of Activate / Deactivate / SendText +// void SetHistoryStorage( string storageName ) +// void SetHistoryMaxLength( uint length ) +// ItemView : Grid : Panel : Object +// int UserData +// int UserDataExt +// bool UseSorting +// Item[] Items +// Item GetItem( uint cellIndex ) +// void Resort() +// void SetUserData( int data ) +// void SetUserDataExt( int data ) +// void SetUseSorting( bool enable ) + +/*EXPORT*/ class Object +{ + bool get_Active() final { return _ActiveSelf && ( _Parent != null ? _Parent.Active : true ); } + bool get_ActiveSelf() final { return _ActiveSelf; } + string get_Name() final { return _Name; } + int get_PosX() final { return _Parent != null ? _AbsolutePosX - _Parent._AbsolutePosX : _AbsolutePosX; } + int get_PosY() final { return _Parent != null ? _AbsolutePosY - _Parent._AbsolutePosY : _AbsolutePosY; } + int get_AbsolutePosX() final { return _AbsolutePosX; } + int get_AbsolutePosY() final { return _AbsolutePosY; } + int get_Width() final { return _Width; } + int get_Height() final { return _Height; } + int get_Anchor() final { return _Anchor; } + int get_Dock() final { return _Dock; } + int get_Color() final { return _Color; } + bool get_IsDraggable() final { return _IsDraggable; } + bool get_IsNotHittable() final { return _IsNotHittable; } + bool get_IsNotCatchable() final { return _IsNotCatchable; } + bool get_CheckTransparentOnHit() final { return _CheckTransparentOnHit; } + bool get_IsFocused() final { return _IsFocused; } + bool get_IsPressed() final { return _IsPressed; } + bool get_IsHovered() final { return _IsHovered; } + bool get_IsDragged() final { return _IsDragged || ( _Parent != null && _Parent.IsDragged ); } + uint get_ChildCount() final { return _Children.length(); } + Object get_Parent() final { return _Parent; } + Screen get_Screen() final { return _Parent != null ? _Parent.Screen : cast< Screen >( this ); } + Grid get_Grid() final { return _Grid; } + uint get_CellIndex() final { return _CellIndex; } + + bool _ActiveSelf; + string _Name; + int _BasePosX; + int _BasePosY; + int _BaseWidth; + int _BaseHeight; + int _AbsolutePosX; + int _AbsolutePosY; + int _Width; + int _Height; + int _Anchor; + int _Dock; + uint _Color; + bool _IsDragged; + bool _IsDraggable; + bool _IsNotHittable; + bool _IsNotCatchable; + bool _CheckTransparentOnHit; + bool _DeferredMousePressed; + bool _IsFocused; + bool _IsPressed; + bool _IsHovered; + int _PressedButton; + int _PressedX; + int _PressedY; + Object _Parent; + Object[] _Children; + Grid _Grid; + uint _CellIndex; + + // Callbacks + void OnConstruct() {} + void OnInit() {} + void OnShow() {} + void OnShow( dictionary params ) {} + void OnHide() {} + void OnAppear() {} + void OnDisappear() {} + void OnRemove() {} + void OnDraw() {} + void OnPostDraw() {} + void OnMove( int deltaX, int deltaY ) {} + void OnMouseDown( int button ) {} + void OnMouseUp( int button, bool lost ) {} + void OnMousePressed( int button ) {} + void OnLMousePressed() {} + void OnRMousePressed() {} + void OnMouseClick( int button ) {} + void OnLMouseClick() {} + void OnRMouseClick() {} + void OnMouseMove() {} + void OnGlobalMouseDown( int button ) {} + void OnGlobalMouseUp( int button ) {} + void OnGlobalMousePressed( int button ) {} + void OnGlobalMouseClick( int button ) {} + void OnGlobalMouseMove() {} + void OnInput() {} + void OnInput( uint8 key ) {} + void OnInput( string text ) {} + void OnInput( uint8 key, string text ) {} + void OnGlobalInput( uint8 key, string text ) {} + void OnActiveChanged() {} + void OnFocusChanged() {} + void OnHoverChanged() {} + void OnDragChanged() {} + void OnResizeGrid( Object cell, uint cellIndex ) {} + void OnDrawItem( Item item, Object cell, uint cellIndex ) {} + + Object() + { + _Children = array< Object >(); + } + + void Init( Object parent ) + { + _ActiveSelf = true; + _Name = reflection::typeof < Object > ( this ).nameWithoutNamespace; + + if( _Parent != null ) + _Parent._Children.removeAt( _Parent._Children.findByRef( this ) ); + _Parent = parent; + if( parent != null ) + parent._Children.insertLast( this ); + + _Construct(); + OnConstruct(); + + Screen screen = Screen; + if( screen != null && screen._IsRegistered ) + _Init(); + } + + void _Construct() + { + // Virtual + } + + void _FixClone() + { + _Parent = null; + _Children = array< Object >(); + } + + void _Init() + { + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Init(); + OnInit(); + _RefreshPosition(); + } + + void _Show( dictionary params ) + { + OnShow(); + OnShow( params ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Show( params ); + } + + void _Hide() + { + OnHide(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Hide(); + } + + void _Appear() + { + OnAppear(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Appear(); + } + + void _Disappear() + { + OnDisappear(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Disappear(); + } + + void _DragChanged() + { + OnDragChanged(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._DragChanged(); + } + + void Remove() + { + if( _Parent != null ) + { + _Parent._Children.removeAt( _Parent._Children.findByRef( this ) ); + _Parent = null; + } + + _Remove(); + + _ActiveSelf = false; + } + + void _Remove() + { + OnRemove(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Remove(); + } + + void _Reload( bool reconstruct, bool refreshPosition ) + { + if( reconstruct ) + OnConstruct(); + if( refreshPosition ) + _RefreshPosition(); + + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Reload( reconstruct, refreshPosition ); + } + + void _DrawCallback() + { + // Draw item callback + if( _Grid != null ) + { + ItemView itemView = cast< ItemView >( _Grid ); + if( itemView != null ) + OnDrawItem( itemView.GetItem( _CellIndex ), this, _CellIndex ); + } + + // Common draw callback + OnDraw(); + } + + void _Draw( bool callCallback ) + { + if( callCallback ) + _DrawCallback(); + + // _Children + for( uint i = 0; i < _Children.length(); i++ ) + { + Object child = _Children[ i ]; + if( child._ActiveSelf && !child._IsDragged ) + child._Draw( true ); + } + + if( callCallback ) + OnPostDraw(); + } + + void Draw( int x, int y ) + { + int dx = x - _AbsolutePosX; + int dy = y - _AbsolutePosY; + _Move( dx, dy, false, false ); + _Draw( true ); + _Move( -dx, -dy, false, false ); + } + + void Move( int deltaX, int deltaY ) + { + _Move( deltaX, deltaY, true, true ); + } + + void _Move( int deltaX, int deltaY, bool callCallback, bool moveBasePos ) + { + _AbsolutePosX += deltaX; + _AbsolutePosY += deltaY; + + if( moveBasePos ) + { + _BasePosX += deltaX; + _BasePosY += deltaY; + } + + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Move( deltaX, deltaY, false, false ); + + if( callCallback ) + _MoveCallback( deltaX, deltaY ); + } + + void _MoveCallback( int deltaX, int deltaY ) + { + OnMove( deltaX, deltaY ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._MoveCallback( deltaX, deltaY ); + } + + bool _IsCatchable() + { + bool result = ( !_IsNotCatchable && !_IsDraggable && cast< Panel >( this ) != null && cast< Button >( this ) == null && cast< Grid >( this ) == null ); + return result && ( Parent != null ? Parent._IsCatchable() : true ); + } + + Object FindMouseHit() + { + return FindHit( __MouseX, __MouseY ); + } + + Object FindHit( int x, int y ) + { + // Check children + for( int i = int( _Children.length() ) - 1; i >= 0; i-- ) + { + Object obj = _Children[ i ].FindHit( x, y ); + if( obj != null ) + return obj; + } + + // Check own + if( IsHit( x, y ) ) + return this; + + // No collision found + return null; + } + + bool IsMouseHit() + { + return IsHit( __MouseX, __MouseY ); + } + + bool IsHit( int x, int y ) + { + return Active && !_IsNotHittable && _Width > 0 && _Height > 0 && + Math::IsCollision( x, y, _AbsolutePosX, _AbsolutePosY, _Width, _Height ) && !_IsCropped( x, y ); + } + + bool _IsCropped( int x, int y ) + { + Object obj = Parent; + while( obj != null ) + { + Panel panel = cast< Panel >( obj ); + if( panel != null && panel._CropContent && !Math::IsCollision( x, y, obj._AbsolutePosX, obj._AbsolutePosY, obj._Width, obj._Height ) ) + return true; + obj = obj.Parent; + } + return false; + } + + void _GetWholeSizeRect( int[] rect ) + { + int l = _AbsolutePosX; + int t = _AbsolutePosY; + int r = l + Width; + int b = t + Height; + + if( l < rect[ 0 ] ) + rect[ 0 ] = l; + if( t < rect[ 1 ] ) + rect[ 1 ] = t; + if( r > rect[ 2 ] ) + rect[ 2 ] = r; + if( b > rect[ 3 ] ) + rect[ 3 ] = b; + + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GetWholeSizeRect( rect ); + } + + void GetWholeSize( int& centerX, int& centerY, int& wholeWidth, int& wholeHeight, bool onlyChidren = false ) + { + int[] rect = { 1000000000, 1000000000, -1000000000, -1000000000 }; + if( !onlyChidren ) + { + _GetWholeSizeRect( rect ); + } + else if( _Children.length() > 0 ) + { + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GetWholeSizeRect( rect ); + } + else + { + rect[ 0 ] = rect[ 1 ] = rect[ 2 ] = rect[ 3 ] = 0; + } + wholeWidth = rect[ 2 ] - rect[ 0 ]; + wholeHeight = rect[ 3 ] - rect[ 1 ]; + centerX = rect[ 0 ] + wholeWidth / 2; + centerY = rect[ 1 ] + wholeHeight / 2; + } + + void _MouseDown( int button ) + { + _IsPressed = true; + _PressedButton = button; + _PressedX = __MouseX; + _PressedY = __MouseY; + OnMouseDown( button ); + + if( _IsDraggable && _PressedButton == MOUSE_BUTTON_LEFT ) + { + bool draggableCursor = ( __DraggableCursor != CursorType::Default && __Cursor == __DraggableCursor ); + if( draggableCursor ) + { + _IsDragged = true; + _DragChanged(); + } + } + + if( !_DeferredMousePressed ) + { + Screen._GlobalMousePressed( button ); + _MousePressed( button ); + } + } + + void StartDragging() + { + if( _IsDraggable && !_IsDragged && _IsPressed && _PressedButton == MOUSE_BUTTON_LEFT && !IsDragged ) + { + _IsDragged = true; + _DragChanged(); + } + } + + void _MousePressed( int button ) + { + OnMousePressed( button ); + if( button == MOUSE_BUTTON_LEFT ) + OnLMousePressed(); + else if( button == MOUSE_BUTTON_RIGHT ) + OnRMousePressed(); + + _MousePressedUnder( button ); + } + + void _MousePressedUnder( int button ) + { + if( Parent != null ) + Parent._MousePressedUnder( button ); + } + + void _MouseUp( bool lost ) + { + _IsPressed = false; + + if( _DeferredMousePressed ) + { + Screen._GlobalMousePressed( _PressedButton ); + _MousePressed( _PressedButton ); + } + + OnMouseUp( _PressedButton, lost ); + + if( _IsDragged ) + { + _IsDragged = false; + _DragChanged(); + } + } + + void MouseClick( int button ) + { + OnMouseClick( button ); + if( button == MOUSE_BUTTON_LEFT ) + OnLMouseClick(); + else if( button == MOUSE_BUTTON_RIGHT ) + OnRMouseClick(); + } + + void _MouseMove() + { + OnMouseMove(); + } + + void _GlobalMouseDown( int button ) + { + OnGlobalMouseDown( button ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GlobalMouseDown( button ); + } + + void _GlobalMouseUp( int button ) + { + OnGlobalMouseUp( button ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GlobalMouseUp( button ); + } + + void _GlobalMousePressed( int button ) + { + OnGlobalMousePressed( button ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GlobalMousePressed( button ); + } + + void _GlobalMouseClick( int button ) + { + OnGlobalMouseClick( button ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GlobalMouseClick( button ); + } + + void _GlobalMouseMove() + { + OnGlobalMouseMove(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GlobalMouseMove(); + } + + void Input( uint8 key, string text ) + { + OnInput(); + if( text.isEmpty() ) + OnInput( key ); + else + OnInput( text ); + OnInput( key, text ); + } + + void _GlobalInput( uint8 key, string text ) + { + OnGlobalInput( key, text ); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._GlobalInput( key, text ); + } + + void _Focus() + { + if( !_IsFocused ) + { + _IsFocused = true; + OnFocusChanged(); + } + } + + void _Unfocus() + { + if( _IsFocused ) + { + _IsFocused = false; + OnFocusChanged(); + } + } + + void _Hover() + { + if( !_IsHovered ) + { + _IsHovered = true; + OnHoverChanged(); + } + } + + void _Unhover() + { + if( _IsHovered ) + { + _IsHovered = false; + OnHoverChanged(); + } + } + + Object _Clone( Object parent ) + { + Object newObject; + reflection::typeof < Object > ( this ).instantiate( this, newObject ); + newObject._FixClone(); + newObject._Parent = parent; + if( parent != null ) + parent._Children.insertLast( newObject ); + newObject.OnConstruct(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Clone( newObject ); + return newObject; + } + + Panel FindPanel( string name ) + { + return cast< Panel >( Find( name ) ); + } + + Text FindText( string name ) + { + return cast< Text >( Find( name ) ); + } + + TextInput FindTextInput( string name ) + { + return cast< TextInput >( Find( name ) ); + } + + Button FindButton( string name ) + { + return cast< Button >( Find( name ) ); + } + + Object Find( string name, bool deepFind = true ) + { + for( uint i = 0; i < _Children.length(); i++ ) + { + Object child = _Children[ i ]; + if( !child._Name.isEmpty() && child._Name == name ) + return child; + + if( deepFind ) + { + Object obj = child.Find( name ); + if( obj != null ) + return obj; + } + } + return null; + } + + Object GetChild( uint index ) + { + return _Children[ index ]; + } + + void _RefreshPosition() + { + // Base data + _Width = _BaseWidth; + _Height = _BaseHeight; + int parentAbsolutePosX = ( _Parent != null ? _Parent._AbsolutePosX : 0 ); + int parentAbsolutePosY = ( _Parent != null ? _Parent._AbsolutePosY : 0 ); + int parentWidth = ( _Parent != null ? _Parent._Width : __ScreenWidth ); + int parentHeight = ( _Parent != null ? _Parent._Height : __ScreenHeight ); + int parentBaseWidth = ( _Parent != null ? _Parent._BaseWidth : _BaseWidth ); + int parentBaseHeight = ( _Parent != null ? _Parent._BaseHeight : _BaseHeight ); + + // Dock + int newPosX; + int newPosY; + if( _Dock != 0 ) + { + if( _Dock == DOCK_LEFT ) + { + newPosX = parentAbsolutePosX; + newPosY = parentAbsolutePosY; + _Height = parentHeight; + } + else if( _Dock == DOCK_RIGHT ) + { + newPosX = parentAbsolutePosX + parentWidth - _Width; + newPosY = parentAbsolutePosY; + _Height = parentHeight; + } + else if( _Dock == DOCK_TOP ) + { + newPosX = parentAbsolutePosX; + newPosY = parentAbsolutePosY; + _Width = parentWidth; + } + else if( _Dock == DOCK_BOTTOM ) + { + newPosX = parentAbsolutePosX; + newPosY = parentAbsolutePosY + parentHeight - _Height; + _Width = parentWidth; + } + else if( _Dock == DOCK_FILL ) + { + newPosX = parentAbsolutePosX; + newPosY = parentAbsolutePosY; + _Width = parentWidth; + _Height = parentHeight; + } + else + { + newPosX = _BasePosX + parentAbsolutePosX; + newPosY = _BasePosY + parentAbsolutePosY; + } + } + // Anchor + else + { + if( ( _Anchor & ANCHOR_LEFT ) != 0 ) + newPosX = parentAbsolutePosX + _BasePosX; + else if( ( _Anchor & ANCHOR_RIGHT ) != 0 ) + newPosX = parentAbsolutePosX + _BasePosX + ( parentWidth - parentBaseWidth ); + else + newPosX = parentAbsolutePosX + _BasePosX + ( parentWidth - parentBaseWidth ) / 2; + + if( ( _Anchor & ANCHOR_TOP ) != 0 ) + newPosY = parentAbsolutePosY + _BasePosY; + else if( ( _Anchor & ANCHOR_BOTTOM ) != 0 ) + newPosY = parentAbsolutePosY + _BasePosY + ( parentHeight - parentBaseHeight ); + else + newPosY = parentAbsolutePosY + _BasePosY + ( parentHeight - parentBaseHeight ) / 2; + } + + // Move control + if( newPosX != _AbsolutePosX || newPosY != _AbsolutePosY ) + _Move( newPosX - _AbsolutePosX, newPosY - _AbsolutePosY, false, false ); + } + + void _SizeChanged() + { + // Internal callback + } + + // Options + void SetName( string name ) + { + _Name = name; + } + + void SetActive( bool active ) + { + if( _ActiveSelf != active ) + { + _ActiveSelf = active; + _ActiveChanged(); + } + } + + void _ActiveChanged() + { + OnActiveChanged(); + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._ActiveChanged(); + } + + void SetPosition( int x, int y ) + { + if( _BasePosX == x && _BasePosY == y ) + return; + + _BasePosX = x; + _BasePosY = y; + _RefreshPosition(); + } + + void SetSize( int w, int h ) + { + if( _BaseWidth == w && _BaseHeight == h ) + return; + + _BaseWidth = w; + _BaseHeight = h; + _RefreshPosition(); + _SizeChanged(); + } + + void SetAnchor( int anchorStyles ) + { + if( _Anchor == anchorStyles ) + return; + + _Anchor = anchorStyles; + _RefreshPosition(); + } + + void SetDock( int dockStyle ) + { + if( _Dock == dockStyle ) + return; + + _Dock = dockStyle; + _RefreshPosition(); + } + + void SetColor( uint color ) + { + _Color = color; + } + + void SetDraggable( bool enabled ) + { + _IsDraggable = enabled; + } + + void SetNotHittable( bool enabled ) + { + _IsNotHittable = enabled; + } + + void SetNotCatchable( bool enabled ) + { + _IsNotCatchable = enabled; + } + + void SetCheckTransparentOnHit( bool enabled ) + { + _CheckTransparentOnHit = enabled; + } + + void SetDeferredMousePressed( bool enabled ) + { + _DeferredMousePressed = enabled; + } +} + +/*EXPORT*/ class Panel : Object +{ + Sprite::Sprite get_BackgroundImage() final { return _BackgroundImage; } + int get_BackgroundImageLayout() final { return _BackgroundImage != null ? _BackgroundImage.Layout : IMAGE_LAYOUT_NONE; } + bool get_IsVerticalScroll() final { return _IsVerticalScroll; } + bool get_IsHorizontalScroll() final { return _IsHorizontalScroll; } + int get_VerticalScrollPercent() final { return _VerticalScrollPercent; } + int get_HorizontalScrollPercent() final { return _HorizontalScrollPercent; } + + Sprite::Sprite _BackgroundImage; + bool _CropContent; + bool _IsVerticalScroll; + bool _IsHorizontalScroll; + int _VerticalScroll; + int _HorizontalScroll; + int _VerticalScrollPercent; + int _HorizontalScrollPercent; + + bool IsHit( int x, int y ) override + { + if( Object::IsHit( x, y ) ) + { + if( _CheckTransparentOnHit && _BackgroundImage != null ) + return ( GetPixelColor( _BackgroundImage.Id, _BackgroundImage.Frame, x - _AbsolutePosX, y - _AbsolutePosY ) & 0xFF000000 ) != 0; + return true; + } + return false; + } + + void _Draw( bool callCallback ) override + { + _ModifyScroll( 0, 0 ); + + bool crop = _CropContent; + if( crop ) + PushDrawScissor( AbsolutePosX, AbsolutePosY, Width, Height ); + + if( callCallback ) + _DrawCallback(); + + // Normal sprite + if( _BackgroundImage != null ) + _DrawImage( _BackgroundImage ); + + Object::_Draw( false ); + + if( callCallback ) + OnPostDraw(); + + if( crop ) + PopDrawScissor(); + } + + void _DrawImage( Sprite::Sprite image ) + { + if( _Width > 0 && _Height > 0 ) + image.Draw( _AbsolutePosX, _AbsolutePosY, _Width, _Height, -1, -1, -1, _Color ); + } + + void SetBackgroundImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _BackgroundImage, imageName, imageLayout ); + } + + void SetBackgroundImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _BackgroundImage, imageNameHash, imageLayout ); + } + + void _SetImage( Sprite::Sprite& curImage, string imageName, int imageLayout ) + { + curImage = null; + + if( !imageName.isEmpty() ) + { + Sprite::Sprite spr = Sprite::Sprite(); + if( spr.Load( imageName ) ) + curImage = spr; + } + + if( curImage != null ) + curImage.Layout = imageLayout; + + if( curImage != null && ( imageLayout == IMAGE_LAYOUT_NONE || ( _BaseWidth == 0 && _BaseHeight == 0 ) ) ) + SetSize( curImage.Width, curImage.Height ); + } + + void _SetImage( Sprite::Sprite& curImage, uint imageNameHash, int imageLayout ) + { + if( curImage != null && curImage.LoadedNameHash == imageNameHash ) + return; + + curImage = null; + if( imageNameHash != 0 ) + { + Sprite::Sprite spr = Sprite::Sprite(); + if( spr.Load( imageNameHash ) ) + curImage = spr; + } + + if( curImage != null ) + curImage.Layout = imageLayout; + + if( curImage != null && ( imageLayout == IMAGE_LAYOUT_NONE || ( _BaseWidth == 0 && _BaseHeight == 0 ) ) ) + SetSize( curImage.Width, curImage.Height ); + } + + void _MousePressedUnder( int button ) override + { + if( _IsVerticalScroll && ( button == MOUSE_BUTTON_WHEEL_UP || button == MOUSE_BUTTON_WHEEL_DOWN ) ) + { + int dy = 0; + if( button == MOUSE_BUTTON_WHEEL_UP ) + dy = -1; + else if( button == MOUSE_BUTTON_WHEEL_DOWN ) + dy = 1; + + if( dy != 0 ) + _ModifyScroll( dy * 10, 0 ); + + // Stop processing + return; + } + + Object::_MousePressedUnder( button ); + } + + void ModifyScroll( int ver, int hor ) + { + _ModifyScroll( ver, hor ); + } + + bool CanModifyScroll( int ver, int hor ) + { + return _ModifyScroll( ver, hor, true ); + } + + void SetScrollPercent( int verPercent, int horPercent ) + { + if( !_IsVerticalScroll && !_IsHorizontalScroll ) + return; + + int maxVerScroll = 0, maxHorScroll = 0; + _GetScrollableSize( maxVerScroll, maxHorScroll ); + + int newVer = ( maxVerScroll > 0 ? maxVerScroll * verPercent / 100 : 0 ); + int newHor = ( maxHorScroll > 0 ? maxHorScroll * horPercent / 100 : 0 ); + + if( newVer != _VerticalScroll || newHor != _HorizontalScroll ) + _ModifyScroll( newVer - _VerticalScroll, newHor - _HorizontalScroll ); + } + + bool _ModifyScroll( int ver, int hor, bool onlyCheck = false ) + { + if( !_IsVerticalScroll && !_IsHorizontalScroll ) + return false; + + int curVer = _VerticalScroll; + int curHor = _HorizontalScroll; + int oldVer = curVer; + int oldHor = curHor; + + if( _IsVerticalScroll ) + curVer += ver; + if( _IsHorizontalScroll ) + curHor += hor; + + int maxVerScroll = 0, maxHorScroll = 0; + _GetScrollableSize( maxVerScroll, maxHorScroll ); + + if( _IsVerticalScroll ) + { + if( curVer > maxVerScroll ) + curVer = maxVerScroll; + if( curVer < 0 ) + curVer = 0; + } + if( _IsHorizontalScroll ) + { + if( curHor > maxHorScroll ) + curHor = maxHorScroll; + if( curHor < 0 ) + curHor = 0; + } + + if( !onlyCheck || ( ver == 0 && hor == 0 ) ) + { + _VerticalScrollPercent = ( maxVerScroll > 0 ? curVer * 100 / maxVerScroll : 0 ); + _HorizontalScrollPercent = ( maxHorScroll > 0 ? curHor * 100 / maxHorScroll : 0 ); + } + + if( curVer != oldVer || curHor != oldHor ) + { + if( !onlyCheck ) + { + _VerticalScroll = curVer; + _HorizontalScroll = curHor; + for( uint i = 0; i < _Children.length(); i++ ) + _Children[ i ]._Move( -( curHor - oldHor ), -( curVer - oldVer ), true, false ); + } + return true; + } + return false; + } + + void _GetScrollableSize( int& maxVerScroll, int& maxHorScroll ) + { + if( !_IsVerticalScroll && !_IsHorizontalScroll ) + return; + + int centerX = 0, centerY = 0, wholeWidth = 0, wholeHeight = 0; + GetWholeSize( centerX, centerY, wholeWidth, wholeHeight, true ); + if( _IsVerticalScroll ) + maxVerScroll = wholeHeight - Height + ( ( centerY + _VerticalScroll ) - wholeHeight / 2 - AbsolutePosY ); + if( _IsHorizontalScroll ) + maxHorScroll = wholeWidth - Width + ( ( centerX + _HorizontalScroll ) - wholeWidth / 2 - AbsolutePosX ); + } + + void SetCropContent( bool enabled ) + { + _CropContent = enabled; + } + + void SetAutoScroll( bool ver, bool hor ) + { + _IsVerticalScroll = ver; + _IsHorizontalScroll = hor; + } +} + +/*EXPORT*/ class Text : Object +{ + string get_Text() { return _Text; } + void set_Text( string value ) { _Text = value; } + int get_TextFont() final { return _TextFont; } + uint get_TextColor() final { return _TextColor; } + uint get_TextColorFocused() final { return _TextColorFocused; } + int get_TextFlags() final { return _TextFlags; } + + string _Text; + int _TextFont; + uint _TextColor; + uint _TextColorFocused; + int _TextFlags; + + void _Construct() override + { + Object::_Construct(); + + _TextFont = FONT_DEFAULT; + _TextColor = COLOR_TEXT; + } + + void _Draw( bool callCallback ) override + { + if( callCallback ) + _DrawCallback(); + + // Text + string text = Text; + if( text.length() > 0 ) + { + uint color = ( _IsFocused && _TextColorFocused != 0 ? _TextColorFocused : _TextColor ); + DrawText( text, _AbsolutePosX, _AbsolutePosY, _Width, _Height, color, _TextFont, _TextFlags ); + } + + Object::_Draw( false ); + + if( callCallback ) + OnPostDraw(); + } + + void SetText( string text, int font, int flags ) + { + if( !text.isEmpty() ) + _Text = text; + else + _Text = ""; + + _TextFont = font; + _TextFlags = flags; + } + + void SetText( string text ) + { + if( !text.isEmpty() ) + _Text = text; + else + _Text = ""; + } + + void SetTextWithResize( string text ) + { + int tw = 0, th = 0, lines = 0; + GetTextInfo( text, Width, 1000, _TextFont, _TextFlags, tw, th, lines ); + SetSize( _Width, th + 5 ); + SetText( text ); + } + + void SetTextFont( int font ) + { + _TextFont = font; + } + + void SetTextFlags( int flags ) + { + _TextFlags = flags; + } + + void SetTextColor( uint color ) + { + _TextColor = color; + } + + void SetTextFocusedColor( uint color ) + { + _TextColorFocused = color; + } +} + +const int PasswordShowTime = 1000; +/*EXPORT*/ class TextInput : Text +{ + uint get_InputLength() final { return _InputLength; } + bool get_IsTextPassword() final { return _IsTextPassword; } + string get_PasswordChar() final { return _PasswordChar; } + + uint _InputLength; + bool _IsTextPassword; + string _PasswordChar; + uint _PasswordTime; + int _CarriagePos; + + void _Construct() override + { + Text::_Construct(); + + SetCarriage( false ); + _TextColorFocused = COLOR_TEXT_FOCUSED; + } + + void _Focus() override + { + CustomCall( "SetScreenKeyboard true" ); + + Text::_Focus(); + } + + void _Unfocus() override + { + if( CurConsole == null || !CurConsole.Active ) + CustomCall( "SetScreenKeyboard false" ); + + Text::_Unfocus(); + } + + void _Draw( bool callCallback ) override + { + if( callCallback ) + _DrawCallback(); + + // Text + string text = _Text; + if( _IsTextPassword && text.length() > 0 ) + { + string rawText = text; + text = ""; + for( uint i = 0; i < rawText.length(); i++ ) + text += _PasswordChar; + if( GetTick() - _PasswordTime <= PasswordShowTime ) + text[ text.length() - 1 ] = rawText[ text.length() - 1 ]; + } + if( _CarriagePos != -1 && _IsFocused ) + { + if( _CarriagePos < 0 ) + _CarriagePos = 0; + if( _CarriagePos > int( text.length() ) ) + _CarriagePos = text.length(); + text = text.substr( 0, _CarriagePos ) + ( GetTick() % 800 < 400 ? "!" : "." ) + text.substr( _CarriagePos ); + } + if( text.length() > 0 ) + { + uint color = ( _IsFocused && _TextColorFocused != 0 ? _TextColorFocused : _TextColor ); + DrawText( text, _AbsolutePosX, _AbsolutePosY, _Width, _Height, color, _TextFont, _TextFlags ); + } + + Object::_Draw( false ); + + if( callCallback ) + OnPostDraw(); + } + + void Input( uint8 key, string text ) override + { + uint oldLen = _Text.length(); + _ProcessKey( key, text ); + while( _InputLength != 0 && _Text.length() > _InputLength ) + _Text = _Text.substr( 0, _Text.length() - 1 ); + if( _IsTextPassword ) + _PasswordTime = ( _Text.length() > oldLen ? GetTick() : 0 ); + + Text::Input( key, text ); + } + + void _ProcessKey( uint8 key, string text ) + { + if( _CarriagePos != -1 ) + { + if( _CarriagePos < 0 ) + _CarriagePos = 0; + else if( _CarriagePos > int( _Text.length() ) ) + _CarriagePos = _Text.length(); + + if( key == DIK_BACK ) + { + if( _CarriagePos > 0 ) + { + _Text[ _CarriagePos - 1 ] = ""; + _CarriagePos--; + } + } + else if( key == DIK_DELETE ) + { + if( _CarriagePos < int( _Text.length() ) ) + _Text[ _CarriagePos ] = ""; + } + else if( key == DIK_RIGHT ) + { + if( _CarriagePos < int( _Text.length() ) ) + _CarriagePos++; + } + else if( key == DIK_LEFT ) + { + if( _CarriagePos > 0 ) + _CarriagePos--; + } + else if( key == DIK_HOME ) + { + _CarriagePos = 0; + } + else if( key == DIK_END ) + { + _CarriagePos = _Text.length(); + } + else if( !text.isEmpty() ) + { + _Text = _Text.substr( 0, _CarriagePos ) + text + _Text.substr( _CarriagePos ); + _CarriagePos += text.length(); + } + } + else + { + if( key == DIK_BACK ) + { + if( _Text.length() > 0 ) + _Text[ _Text.length() - 1 ] = ""; + } + else if( !text.isEmpty() ) + { + _Text += text; + } + } + } + + void SetInputLength( uint length ) + { + _InputLength = length; + } + + void SetInputPassword( string passwordChar ) + { + _IsTextPassword = ( passwordChar.length() == 1 ); + _PasswordChar = passwordChar; + _PasswordTime = 0; + } + + void SetCarriage( bool enable ) + { + _CarriagePos = ( enable ? int( _Text.length() ) : -1 ); + } +} + +/*EXPORT*/ class Button : Panel +{ + bool get_IsDisabled() final { return _IsDisabled; } + bool get_IsSwitched() final { return _IsSwitched; } + Sprite::Sprite get_PressedImage() final { return _PressedImage; } + int get_PressedImageLayout() final { return _PressedImage != null ? _PressedImage.Layout : IMAGE_LAYOUT_NONE; } + Sprite::Sprite get_HoverImage() final { return _HoverImage; } + int get_HoverImageLayout() final { return _HoverImage != null ? _HoverImage.Layout : IMAGE_LAYOUT_NONE; } + Sprite::Sprite get_DisabledImage() final { return _DisabledImage; } + int get_DisabledImageLayout() final { return _DisabledImage != null ? _DisabledImage.Layout : IMAGE_LAYOUT_NONE; } + + bool _IsDisabled; + bool _IsSwitched; + Sprite::Sprite _PressedImage; + Sprite::Sprite _HoverImage; + Sprite::Sprite _DisabledImage; + + void _Construct() override + { + Panel::_Construct(); + + _DeferredMousePressed = true; + } + + void _Draw( bool callCallback ) override + { + if( callCallback ) + _DrawCallback(); + + if( !_IsDisabled ) + { + // Pressed image + bool isPressed = ( ( _IsPressed && _PressedButton == MOUSE_BUTTON_LEFT ) || _IsSwitched ); + if( isPressed && _PressedImage != null ) + _DrawImage( _PressedImage ); + // Hover image + else if( _IsHovered && _HoverImage != null ) + _DrawImage( _HoverImage ); + // Normal image + else if( _BackgroundImage != null ) + _DrawImage( _BackgroundImage ); + } + else + { + // Disabled image + if( _DisabledImage != null ) + _DrawImage( _DisabledImage ); + // Normal image + else if( _BackgroundImage != null ) + _DrawImage( _BackgroundImage ); + } + + Object::_Draw( false ); + + if( callCallback ) + OnPostDraw(); + } + + void MouseClick( int button ) + { + if( _IsDisabled ) + return; + + Panel::MouseClick( button ); + } + + void _MousePressed( int button ) + { + if( _IsDisabled ) + return; + + Panel::_MousePressed( button ); + } + + void SetPressedImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _PressedImage, imageName, imageLayout ); + } + + void SetPressedImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _PressedImage, imageNameHash, imageLayout ); + } + + void SetHoverImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _HoverImage, imageName, imageLayout ); + } + + void SetHoverImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _HoverImage, imageNameHash, imageLayout ); + } + + void SetDisabledImage( string imageName, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _DisabledImage, imageName, imageLayout ); + } + + void SetDisabledImage( uint imageNameHash, int imageLayout = IMAGE_LAYOUT_NONE ) + { + _SetImage( _DisabledImage, imageNameHash, imageLayout ); + } + + void SetSwitch( bool enabled ) + { + _IsSwitched = enabled; + } + + void SetCondition( bool enabled ) + { + _IsDisabled = !enabled; + } +} + +/*EXPORT*/ class CheckBox : Button +{ + bool get_IsChecked() final { return _IsSwitched; } + + // Callbacks + void OnCheckedChanged() {} + + void MouseClick( int button ) + { + if( _IsDisabled ) + return; + + if( button == MOUSE_BUTTON_LEFT ) + SetChecked( !_IsSwitched ); + + Panel::MouseClick( button ); + } + + void SetChecked( bool checked ) + { + if( _IsSwitched != checked ) + { + _IsSwitched = checked; + OnCheckedChanged(); + } + } +} + +/*EXPORT*/ class RadioButton : CheckBox +{ + void MouseClick( int button ) + { + if( _IsDisabled || _IsSwitched ) + return; + + if( button == MOUSE_BUTTON_LEFT ) + SetChecked( true ); + + Panel::MouseClick( button ); + } + + void SetChecked( bool checked ) override + { + if( checked && _Parent != null ) + { + for( uint i = 0; i < _Parent._Children.length(); i++ ) + { + RadioButton button = cast< RadioButton >( _Parent._Children[ i ] ); + if( button != null && button._IsSwitched ) + { + button._IsSwitched = false; + button.OnCheckedChanged(); + } + } + } + + if( _IsSwitched != checked ) + { + _IsSwitched = checked; + OnCheckedChanged(); + } + } +} + +/*EXPORT*/ class Screen : Panel +{ + int get_Index() final { return _Index; } + bool get_IsMain() final { return IS_CLIENT_MAIN_SCREEN( _Index ); } + bool get_IsModal() final { return _IsModal; } + bool get_IsMultiinstance() final { return _IsMultiinstance; } + bool get_IsCloseOnMiss() final { return _IsCloseOnMiss; } + CursorType[] get_AvailableCursors() final { return _AvailableCursors; } + CursorType get_Cursor() final { return _Cursor; } + bool get_IsCanMove() final { return _IsCanMove; } + bool get_IsMoveIgnoreBorders() final { return _IsMoveIgnoreBorders; } + bool get_IsOnTop() final { return _IsOnTop; } + + int _Index; + bool _IsRegistered; + bool _IsModal; + bool _IsMultiinstance; + bool _IsCloseOnMiss; + CursorType[] _AvailableCursors; + CursorType _Cursor; + bool _IsCanMove; + bool _IsMoveIgnoreBorders; + bool _IsOnTop; + + // Workaround for input state accessing from shared code + bool[] _InputKeyPressed; + bool[] _InputMousePressed; + + void _Construct() override + { + _AvailableCursors = array< CursorType >(); + _InputKeyPressed = array< bool >(); + _InputMousePressed = array< bool >(); + + Panel::_Construct(); + } + + void _FixClone() override + { + _AvailableCursors = array< CursorType >( _AvailableCursors ); + + Panel::_FixClone(); + } + + void _Show( dictionary params ) override + { + // Make screen active + _ActiveSelf = true; + + // Set default cursor + _Cursor = ( _AvailableCursors.length() > 0 ? AvailableCursors[ 0 ] : CursorType::Default ); + + // Base behaviour + Panel::_Show( params ); + } + + void _Hide() override + { + // Make screen active + _ActiveSelf = false; + + // Base behaviour + Panel::_Hide(); + } + + void _Appear() override + { + // On top + _IsOnTop = true; + + // Set screen cursor + __Cursor = _Cursor; + + // Base behaviour + Panel::_Appear(); + } + + void _Disappear() override + { + // Not on top more + _IsOnTop = false; + + // Store cursor + _Cursor = __Cursor; + if( _AvailableCursors.find( _Cursor ) == -1 ) + _Cursor = ( _AvailableCursors.length() > 0 ? AvailableCursors[ 0 ] : CursorType::Default ); + + // Base behaviour + Panel::_Disappear(); + } + + void _GlobalMouseClick( int button ) override + { + if( button == MOUSE_BUTTON_RIGHT ) + { + if( _AvailableCursors.length() > 0 ) + { + CursorType curCursor = __Cursor; + int curCursorIndex = _AvailableCursors.find( curCursor ); + if( curCursorIndex != -1 ) + { + curCursorIndex++; + if( curCursorIndex >= int( _AvailableCursors.length() ) ) + curCursorIndex = 0; + __Cursor = _AvailableCursors[ curCursorIndex ]; + } + } + } + else + { + Panel::_GlobalMouseClick( button ); + } + } + + void _GlobalMouseMove() override + { + // Process moving + if( _IsCanMove ) + { + Object pressedObj = _FindPressed( this ); + if( pressedObj != null && pressedObj._PressedButton == MOUSE_BUTTON_LEFT && pressedObj._IsCatchable() ) + { + int lastPosX = _AbsolutePosX; + int lastPosY = _AbsolutePosY; + int newPosX = _AbsolutePosX + ( __MouseX - pressedObj._PressedX ); + int newPosY = _AbsolutePosY + ( __MouseY - pressedObj._PressedY ); + pressedObj._PressedX = __MouseX; + pressedObj._PressedY = __MouseY; + + // Check screen borders + if( !_IsMoveIgnoreBorders ) + { + int parentAbsolutePosX = ( _Parent != null ? _Parent._AbsolutePosX : 0 ); + int parentAbsolutePosY = ( _Parent != null ? _Parent._AbsolutePosY : 0 ); + int parentWidth = ( _Parent != null ? _Parent._Width : __ScreenWidth ); + int parentHeight = ( _Parent != null ? _Parent._Height : __ScreenHeight ); + int px = newPosX; + int py = newPosY; + if( newPosX < parentAbsolutePosX ) + newPosX = parentAbsolutePosX; + if( newPosY < parentAbsolutePosY ) + newPosY = parentAbsolutePosY; + if( newPosX + _Width > parentWidth ) + newPosX = parentWidth - _Width; + if( newPosY + _Height > parentHeight ) + newPosY = parentHeight - _Height; + pressedObj._PressedX += newPosX - px; + pressedObj._PressedY += newPosY - py; + } + + // Callback + if( lastPosX != newPosX || lastPosY != newPosY ) + { + int deltaX = newPosX - lastPosX; + int deltaY = newPosY - lastPosY; + _Move( deltaX, deltaY, true, true ); + } + } + } + + Panel::_GlobalMouseMove(); + } + + Object _FindPressed( Object obj ) + { + if( obj._IsPressed ) + return obj; + for( uint i = 0; i < obj._Children.length(); i++ ) + { + Object pressedObj = _FindPressed( obj._Children[ i ] ); + if( pressedObj != null ) + return pressedObj; + } + return null; + } + + // Options + void SetModal( bool enabled ) + { + _IsModal = enabled; + } + + void SetMultiinstance( bool enabled ) + { + _IsMultiinstance = enabled; + } + + void SetCloseOnMiss( bool enabled ) + { + _IsCloseOnMiss = enabled; + } + + void SetAvailableCursors( CursorType[] cursors ) + { + _AvailableCursors = cursors; + } + + void SetCanMove( bool enabled, bool ignoreBorders ) + { + _IsCanMove = enabled; + _IsMoveIgnoreBorders = ignoreBorders; + } +} + +/*EXPORT*/ class Grid : Panel +{ + string get_CellPrototype() final { return _CellPrototype; } + uint get_GridSize() final { return _GridSize; } + int get_Columns() final { return _Columns; } + int get_PaddingX() final { return _PaddingX; } + int get_PaddingY() final { return _PaddingY; } + Object[] get_Cells() final { return _Cells; } + + string _CellPrototype; + uint _GridSize; + int _Columns; + int _PaddingX; + int _PaddingY; + Object[] _Cells; + + void _Construct() override + { + Panel::_Construct(); + + _Cells = array< Object >(); + } + + void _FixClone() override + { + _Cells = array< Object >( _Cells ); + + Panel::_FixClone(); + } + + void _Init() override + { + Panel::_Init(); + + if( !_CellPrototype.isEmpty() ) + SetCellPrototype( _CellPrototype ); + + if( _GridSize > 0 ) + ResizeGrid( _GridSize ); + } + + void ResizeGrid( uint size ) + { + // Refresh grid size + _GridSize = size; + + // Find cell prototype + if( _CellPrototype.isEmpty() ) + return; + Object cellPrototype = ( _CellPrototype[ 0 ] != "." ? Find( _CellPrototype ) : Parent.Find( _CellPrototype.substr( 1 ), false ) ); + if( cellPrototype == null ) + return; + + // Get cell index + int childIndex = -1; + if( cellPrototype._Parent is this ) + childIndex = cellPrototype._Parent._Children.findByRef( cellPrototype ); + + // Remove current instances + for( uint i = 0; i < _Children.length();) + { + if( _Cells.findByRef( _Children[ i ] ) != -1 ) + { + _Children[ i ].SetActive( false ); + _SetCellIndex( _Children[ i ], null, uint( -1 ) ); + _Children.removeAt( i ); + } + else + { + i++; + } + } + _Cells.clear(); + + // Create new intsances + cellPrototype._ActiveSelf = true; + Object[] cellInstances = {}; + for( uint i = 0; i < _GridSize; i++ ) + { + Object cellInstance = cellPrototype._Clone( this ); + _Children.removeLast(); + _Children.insertAt( ++childIndex, cellInstance ); + _Cells.insertLast( cellInstance ); + _SetCellIndex( cellInstance, this, cellInstances.length() ); + cellInstances.insertLast( cellInstance ); + } + cellPrototype._ActiveSelf = false; + + // Callbacks + for( uint i = 0; i < cellInstances.length(); i++ ) + { + OnResizeGrid( cellInstances[ i ], i ); + _ResizeGrid( cellInstances[ i ], cellInstances[ i ], i ); + } + + // Init + for( uint i = 0; i < cellInstances.length(); i++ ) + cellInstances[ i ]._Init(); + + // Move + int col = 0, row = 0; + int rowHeight = 0; + int shiftX = -_HorizontalScroll; + int shiftY = -_VerticalScroll; + for( uint i = 0; i < cellInstances.length(); i++ ) + { + cellInstances[ i ]._Move( shiftX, shiftY, false, true ); + shiftX += cellInstances[ i ]._Width + _PaddingX; + if( rowHeight < cellInstances[ i ]._Height + _PaddingY ) + rowHeight = cellInstances[ i ]._Height + _PaddingY; + if( ++col >= _Columns ) + { + col = 0; + row++; + shiftX = 0; + shiftY += rowHeight; + rowHeight = 0; + } + } + _ModifyScroll( 0, 0 ); + } + + void RefreshContentPositions() + { + if( _Cells.length() == 0 ) + return; + + int col = 0, row = 0; + int rowHeight = 0; + int shiftX = -_HorizontalScroll; + int shiftY = -_VerticalScroll; + int baseX = _Cells[ 0 ]._BasePosX - _HorizontalScroll; + int baseY = _Cells[ 0 ]._BasePosY - _VerticalScroll; + for( uint i = 0; i < _Cells.length(); i++ ) + { + int ox = shiftX - _Cells[ i ]._BasePosX + baseX; + int oy = shiftY - _Cells[ i ]._BasePosY + baseY; + if( ox != 0 || oy != 0 ) + _Cells[ i ]._Move( ox, oy, false, true ); + shiftX += _Cells[ i ]._Width + _PaddingX; + if( rowHeight < _Cells[ i ]._Height + _PaddingY ) + rowHeight = _Cells[ i ]._Height + _PaddingY; + if( ++col >= _Columns ) + { + col = 0; + row++; + shiftX = 0; + shiftY += rowHeight; + rowHeight = 0; + } + } + _ModifyScroll( 0, 0 ); + } + + void _SetCellIndex( Object obj, Grid grid, uint cellIndex ) + { + obj._Grid = grid; + obj._CellIndex = cellIndex; + + for( uint i = 0; i < obj._Children.length(); i++ ) + _SetCellIndex( obj._Children[ i ], grid, cellIndex ); + } + + void _ResizeGrid( Object obj, Object cell, uint cellIndex ) + { + obj.OnResizeGrid( cell, cellIndex ); + + for( uint i = 0; i < obj._Children.length(); i++ ) + _ResizeGrid( obj._Children[ i ], cell, cellIndex ); + } + + void SetCellPrototype( string name ) + { + _CellPrototype = name; + if( !_CellPrototype.isEmpty() ) + { + Object cellPrototype = ( _CellPrototype[ 0 ] != "." ? Find( _CellPrototype ) : Parent.Find( _CellPrototype.substr( 1 ), false ) ); + if( cellPrototype != null ) + cellPrototype._ActiveSelf = false; + } + } + + void SetGridSize( uint size ) + { + _GridSize = size; + } + + void SetColumns( int length ) + { + _Columns = length; + } + + void SetPadding( int x, int y ) + { + _PaddingX = x; + _PaddingY = y; + } +} + +/*EXPORT*/ class MessageBox : Text +{ + string[] get_MessageTexts() final { return _MessageTexts; } + int[] get_MessageTypes() final { return _MessageTypes; } + string[] get_MessageTimes() final { return _MessageTimes; } + bool[] get_DisplayedMessages() final { return _DisplayedMessages; } + bool get_InvertMessages() final { return _InvertMessages; } + + string[] _MessageTexts; + int[] _MessageTypes; + string[] _MessageTimes; + bool[] _DisplayedMessages; + bool _InvertMessages; + int _Scroll; + int _MaxScroll; + int _ScrollLines; + Sprite::Sprite _ScrollUp; + Sprite::Sprite _ScrollDown; + + void _Construct() override + { + Text::_Construct(); + + _MessageTexts = array< string >(); + _MessageTypes = array< int >(); + _MessageTimes = array< string >(); + _DisplayedMessages = array< bool >( FOMB_ALL, true ); + + _ScrollUp = Sprite::Sprite( "MiniArrowUp.png" ); + _ScrollDown = Sprite::Sprite( "MiniArrowDown.png" ); + } + + void _FixClone() override + { + _MessageTexts = array< string >( _MessageTexts ); + _MessageTypes = array< int >( _MessageTypes ); + _MessageTimes = array< string >( _MessageTimes ); + _DisplayedMessages = array< bool >( _DisplayedMessages ); + + Text::_FixClone(); + } + + void _Show( dictionary params ) override + { + Text::_Show( params ); + + _InvertMessages = __MsgboxInvert; + _GenerateText(); + } + + void _Draw( bool callCallback ) override + { + if( !_InvertMessages ) + _TextFlags = FT_UPPER | FT_BOTTOM | FT_SKIPLINES_END( _ScrollLines ); + else + _TextFlags = FT_SKIPLINES( _ScrollLines ); + + Text::_Draw( callCallback ); + + if( _IsHovered ) + { + Sprite::Sprite spr = ( __MouseY < _AbsolutePosY + _Height / 2 ? _ScrollUp : _ScrollDown ); + spr.Draw( __MouseX - spr.Width / 2, __MouseY - spr.Height / 2 ); + } + } + + void _Remove() override + { + __HideCursor = false; + + Text::_Remove(); + } + + void _Hover() override + { + Text::_Hover(); + + __HideCursor = true; + } + + void _Unhover() override + { + Text::_Unhover(); + + __HideCursor = false; + } + + void _SizeChanged() override + { + _GenerateText(); + + Text::_SizeChanged(); + } + + void _ActiveChanged() override + { + if( Active ) + _GenerateText(); + + Text::_ActiveChanged(); + } + + void _MousePressed( int button ) override + { + if( button == MOUSE_BUTTON_LEFT || button == MOUSE_BUTTON_WHEEL_UP || button == MOUSE_BUTTON_WHEEL_DOWN ) + { + if( button == MOUSE_BUTTON_WHEEL_UP || ( button == MOUSE_BUTTON_LEFT && __MouseY < _AbsolutePosY + _Height / 2 ) ) + { + if( _InvertMessages && _Scroll > 0 ) + _Scroll--; + if( !_InvertMessages && _Scroll < _MaxScroll ) + _Scroll++; + } + else if( button == MOUSE_BUTTON_WHEEL_DOWN || ( button == MOUSE_BUTTON_LEFT && __MouseY >= _AbsolutePosY + _Height / 2 ) ) + { + if( _InvertMessages && _Scroll < _MaxScroll ) + _Scroll++; + if( !_InvertMessages && _Scroll > 0 ) + _Scroll--; + } + _GenerateText(); + } + + Text::_MousePressed( button ); + } + + void AddMessage( string text, int type = FOMB_GAME ) + { + // Skip error messages + if( type == FOMB_GAME && text == "error" ) + return; + + // Set text + string messageText; + if( type >= FOMB_GAME && type <= FOMB_VIEW ) + { + uint[] sayColors = { COLOR_DGREEN, COLOR_TEXT, COLOR_DRED, COLOR_DDGREEN }; + messageText = "|" + sayColors[ type ] + " " + EncodeUTF8( 0x2022 ) + " |" + COLOR_TEXT + " " + text; + } + else + { + messageText = text; + } + _MessageTexts.insertLast( messageText ); + + // Set type + int messageType = type; + _MessageTypes.insertLast( messageType ); + + // Set time + uint16 year = 0; + uint16 month = 0; + uint16 day = 0; + uint16 dayOfWeek = 0; + uint16 hour = 0; + uint16 minute = 0; + uint16 second = 0; + uint16 milliseconds; + GetTime( year, month, day, dayOfWeek, hour, minute, second, milliseconds ); + string messageTime = ( hour <= 9 ? "0" : "" ) + hour + ":" + ( minute <= 9 ? "0" : "" ) + minute + ":" + ( second <= 9 ? "0" : "" ) + second + " "; + _MessageTimes.insertLast( messageTime ); + + // Generate mess box + if( _DisplayedMessages[ type ] ) + { + if( _Scroll > 0 && _IsHovered ) + _Scroll++; + else + _Scroll = 0; + } + _GenerateText(); + } + + void _GenerateText() + { + if( !Active ) + return; + + _Text = ""; + if( _MessageTexts.length() == 0 ) + return; + + int tw = 0, th = 0; + int maxLines = 0; + GetTextInfo( "", _Width, _Height, _TextFont, 0, tw, th, maxLines ); + if( maxLines <= 0 ) + { + _MaxScroll = 0; + _ScrollLines = 0; + return; + } + + _ScrollLines = -1; + int lines = 0; + for( int i = _MessageTexts.length() - 1; i >= 0; i-- ) + { + string messageText = _MessageTexts[ i ]; + int messageType = _MessageTypes[ i ]; + string messageTime = _MessageTimes[ i ]; + + // Skip if not need to display + if( !_DisplayedMessages[ messageType ] ) + continue; + + // Skip scrolled lines + int curLines = lines; + int skipLines = 0; + GetTextInfo( messageText, _Width, 1000, _TextFont, 0, tw, th, skipLines ); + lines += skipLines; + + if( _ScrollLines < 0 ) + { + if( lines <= _Scroll ) + continue; + _ScrollLines = _Scroll - curLines; + } + + if( curLines - _Scroll < maxLines ) + { + // Add to message box + if( _InvertMessages ) + _Text += messageText + "\n"; + else + _Text = messageText + "\n" + _Text; + } + else + { + break; + } + } + _MaxScroll = lines - maxLines; + if( _ScrollLines < 0 ) + _ScrollLines = 0; + } + + bool _SetDisplayedMessage( int messageType, bool enable ) + { + bool generateText = false; + + if( messageType != FOMB_ALL ) + { + if( _DisplayedMessages[ messageType ] != enable ) + { + _DisplayedMessages[ messageType ] = enable; + generateText = true; + } + } + else + { + for( uint i = 0; i < FOMB_ALL; i++ ) + { + if( _DisplayedMessages[ messageType ] != enable ) + { + _DisplayedMessages[ messageType ] = enable; + generateText = true; + } + } + } + + return generateText; + } + + void SetDisplayedMessages( int[] messageTypes ) + { + bool generateText = false; + bool displayAll = ( messageTypes.find( FOMB_ALL ) != -1 ); + for( uint i = 0; i < _DisplayedMessages.length(); i++ ) + if( _SetDisplayedMessage( i, displayAll || messageTypes.find( i ) != -1 ) ) + generateText = true; + if( generateText ) + _GenerateText(); + } + + void ChangeDisplayedMessage( int messageType, bool enable ) + { + if( _SetDisplayedMessage( messageType, enable ) ) + _GenerateText(); + } + + void SetInvertMessages( bool invert ) + { + _InvertMessages = invert; + _GenerateText(); + } + + void ClearMessages() + { + _MessageTexts.clear(); + _MessageTypes.clear(); + _MessageTimes.clear(); + _GenerateText(); + } +} + +const string ConsoleDataPrefix = "console_"; +/*EXPORT*/ class Console : TextInput +{ + bool get_DisableDeactivation() final { return _DisableDeactivation; } + string get_HistoryStorageName() final { return _HistoryStorageName; } + string[] get_History() final + { + return _History; + } + uint get_HistoryMaxLength() final { return _HistoryMaxLength; } + + bool _DisableDeactivation; + string _HistoryStorageName; + string _HistoryActualStorageName; + string[] _History; + uint _HistoryMaxLength; + uint _HistoryCur; + + void _Construct() override + { + TextInput::_Construct(); + + _History = array< string >(); + + SetCarriage( true ); + _HistoryStorageName = ""; + } + + void _FixClone() override + { + _History = array< string >( _History ); + + TextInput::_FixClone(); + } + + void _Show( dictionary params ) override + { + CurConsole = this; + + TextInput::_Show( params ); + } + + void _ActiveChanged() override + { + CustomCall( "SetScreenKeyboard " + ( Active ? "true" : "false" ) ); + + TextInput::_ActiveChanged(); + } + + void Toggle() + { + if( !Active ) + { + // Activate console + Activate(); + } + else if( _Text.length() == 0 ) + { + // Deactivate console + if( !_DisableDeactivation ) + Deactivate(); + } + else + { + // Send text + SendText(); + } + } + + void Activate() + { + // Activate console + if( Active || !Parent.Active ) + return; + + // Load history + string name = ( GetChosen() != null ? GetChosen().Name : "" ); + string actualStorageName = ""; + if( !_HistoryStorageName.isEmpty() && !name.isEmpty() ) + actualStorageName = ConsoleDataPrefix + name + _HistoryStorageName; + + if( _HistoryActualStorageName != actualStorageName ) + { + _History.clear(); + _HistoryActualStorageName = actualStorageName; + if( _HistoryActualStorageName != "" ) + { + Serializator::Serializator data; + if( data.LoadFromCache( _HistoryActualStorageName ) > 0 ) + data.Get( _History ); + } + } + + _HistoryCur = _History.length(); + + // Raise callbacks + SetActive( true ); + } + + void Deactivate() + { + // Deactivate console + if( _ActiveSelf ) + SetActive( false ); + } + + void SendText() + { + if( !Active ) + return; + + // Modify history + _History.insertLast( _Text ); + for( uint i = 0; i < _History.length() - 1;) + { + if( _History[ i ] == _History.last() ) + _History.removeAt( i ); + else + i++; + } + + // Trim history length + uint historyMaxLength = ( _HistoryMaxLength != 0 ? _HistoryMaxLength : __ConsoleHistorySize ); + while( _History.length() > historyMaxLength ) + _History.removeAt( 0 ); + _HistoryCur = _History.length(); + + // Save history + if( _HistoryActualStorageName != "" ) + { + Serializator::Serializator data; + data.Set( _History ); + data.SaveToCache( _HistoryActualStorageName ); + } + + // Send + bool[] keyPressed = Screen._InputKeyPressed; + if( keyPressed[ DIK_LCONTROL ] || keyPressed[ DIK_RCONTROL ] ) + CustomCall( "ConsoleMessage\n/s" + _Text, "\n" ); + else if( keyPressed[ DIK_LMENU ] || keyPressed[ DIK_RMENU ] ) + CustomCall( "ConsoleMessage\n/w" + _Text, "\n" ); + else if( keyPressed[ DIK_LSHIFT ] || keyPressed[ DIK_RSHIFT ] ) + CustomCall( "ConsoleMessage\n/r" + _Text, "\n" ); + else + CustomCall( "ConsoleMessage\n" + _Text, "\n" ); + + // Clear text + _Text = ""; + _CarriagePos = 0; + } + + void _ConsoleInput( uint8 key, string text ) + { + if( Active ) + { + if( key == DIK_UP && _HistoryCur > 0 ) + { + _HistoryCur--; + _Text = _History[ _HistoryCur ]; + _CarriagePos = _Text.length(); + } + else if( key == DIK_DOWN ) + { + if( _HistoryCur + 1 < _History.length() ) + { + _HistoryCur++; + _Text = _History[ _HistoryCur ]; + _CarriagePos = _Text.length(); + } + else + { + _HistoryCur = _History.length(); + _Text = ""; + _CarriagePos = 0; + } + + } + else + { + TextInput::Input( key, text ); + } + } + + if( key == DIK_RETURN || key == DIK_NUMPADENTER ) + { + Toggle(); + } + } + + void Input( uint8 key, string text ) override + { + Text::Input( key, text ); + } + + void _Draw( bool callCallback ) override + { + if( callCallback ) + _DrawCallback(); + + string text = Text; + + if( _CarriagePos < 0 ) + _CarriagePos = 0; + if( _CarriagePos > int( text.length() ) ) + _CarriagePos = text.length(); + + text = text.substr( 0, _CarriagePos ) + ( GetTick() % 800 < 400 ? "!" : "." ) + text.substr( _CarriagePos ); + DrawText( text, _AbsolutePosX, _AbsolutePosY, _Width, _Height, _TextColor, _TextFont, _TextFlags ); + + Object::_Draw( false ); + + if( callCallback ) + OnPostDraw(); + } + + void SetDisableDeactivation( bool enable ) + { + _DisableDeactivation = enable; + } + + void SetHistoryStorage( string storageName ) + { + // Set storage name + _HistoryStorageName = storageName; + } + + void SetHistoryMaxLength( uint length ) + { + _HistoryMaxLength = length; + } +} + +/*EXPORT*/ class ItemView : Grid +{ + int get_UserData() final { return _UserData; } + int get_UserDataExt() final { return _UserDataExt; } + bool get_UseSorting() final { return _UseSorting; } + + int _UserData; + int _UserDataExt; + bool _UseSorting; + Item[] _Items; + uint _ItemsGridSize; + + void _Construct() override + { + Grid::_Construct(); + + _Items = array< Item >(); + } + + void _FixClone() override + { + _Items = array< Item >( _Items ); + + Grid::_FixClone(); + } + + // Callbacks + Item[] OnGetItems() { return null; } + int OnCheckItem( Item item ) { return -1; } + + void _Init() override + { + _ItemsGridSize = _GridSize; + + Grid::_Init(); + } + + Item GetItem( uint cellIndex ) + { + return _Items[ cellIndex ]; + } + + void Resort() + { + ResizeGrid( 0 ); + } + + void ResizeGrid( uint size ) override + { + _Items.clear(); + + Item[] items = OnGetItems(); + if( items == null ) + items = array< Item >(); + + if( !_UseSorting ) + { + _Items.resize( _ItemsGridSize ); + for( uint i = 0; i < items.length(); i++ ) + { + int itemIndex = OnCheckItem( items[ i ] ); + if( itemIndex >= 0 && itemIndex < int( _Items.length() ) ) + _Items[ itemIndex ] = items[ i ]; + } + } + else + { + int[] sortValues = {}; + for( uint i = 0; i < items.length(); i++ ) + { + int sortValue = OnCheckItem( items[ i ] ); + if( sortValue >= 0 ) + { + bool added = false; + for( uint j = 0; j < _Items.length(); j++ ) + { + if( sortValues[ j ] > sortValue ) + { + _Items.insertAt( j, items[ i ] ); + sortValues.insertAt( j, sortValue ); + added = true; + break; + } + } + if( !added ) + { + _Items.insertLast( items[ i ] ); + sortValues.insertLast( sortValue ); + } + } + } + } + + Grid::ResizeGrid( _Items.length() ); + } + + void SetUserData( int data ) + { + _UserData = data; + } + + void SetUserDataExt( int data ) + { + _UserDataExt = data; + } + + void SetUseSorting( bool enable ) + { + _UseSorting = enable; + } +} + +// Implementation + +dict< int, CreateScreenFunc > ScreenCreators = {}; + +Screen[] Screens = {}; +Screen CursorScreen; + +Object FocusedObject; +Object PressedObject; +uint PressedObjectRepeatTime; +Object LastPressedObject; +Object HoveredObject; + +DragAndDropHandler[] DragAndDropHandlers = {}; + +IDropMenu DropMenu; + +Console CurConsole; + +// +// Public API +// + +/*EXPORT*/ void RegisterScreen( int screenIndex, CreateScreenFunc screenFunc ) +{ + UnregisterScreen( screenIndex ); + + if( screenIndex == CLIENT_SCREEN_NONE ) + return; + + @ScreenCreators[ screenIndex ] = screenFunc; + + // Precache + Screen screen = CreateScreen( screenIndex ); + if( screen.IsMultiinstance ) + { + screen._Remove(); + Screens.removeAt( Screens.findByRef( screen ) ); + } +} + +/*EXPORT*/ Screen GetScreen( int screenIndex ) +{ + Screen lastMultiinstanceScreen = null; + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + { + Screen screen = Screens[ i ]; + if( screen.Index == screenIndex ) + { + if( !screen.IsMultiinstance ) + return screen; + else + lastMultiinstanceScreen = screen; + } + } + return lastMultiinstanceScreen; +} + +/*EXPORT*/ Screen GetActiveMainScreen() +{ + for( uint i = 0; i < Screens.length(); i++ ) + if( Screens[ i ].ActiveSelf && Screens[ i ].IsMain ) + return Screens[ i ]; + return null; // Should not be reach this point +} + +/*EXPORT*/ Screen GetActiveScreen() +{ + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + if( Screens[ i ].ActiveSelf ) + return Screens[ i ]; + return null; // Should not be reach this point +} + +/*EXPORT*/ void GetActiveScreens( Screen[] result ) +{ + for( uint i = 0; i < Screens.length(); i++ ) + if( Screens[ i ].ActiveSelf ) + result.insertLast( Screens[ i ] ); +} + +/*EXPORT*/ Object GetFocusedObject() +{ + if( FocusedObject != null && !FocusedObject.Active ) + { + auto obj = FocusedObject; + FocusedObject = null; + obj._Unfocus(); + } + return FocusedObject; +} + +/*EXPORT*/ void SetFocusedObject( Object obj ) +{ + if( FocusedObject != null ) + { + auto fobj = FocusedObject; + FocusedObject = null; + fobj._Unfocus(); + } + + if( obj != null && obj.Active ) + { + FocusedObject = obj; + FocusedObject._Focus(); + } +} + +/*EXPORT*/ Object GetPressedObject() +{ + if( PressedObject != null && !PressedObject.Active ) + { + auto obj = PressedObject; + PressedObject = null; + obj._MouseUp( true ); + LastPressedObject = null; + } + return PressedObject; +} + +/*EXPORT*/ Object GetLastPressedObject() +{ + if( LastPressedObject != null && !LastPressedObject.Active ) + LastPressedObject = null; + return LastPressedObject; +} + +/*EXPORT*/ Object GetDraggedObject() +{ + if( PressedObject != null && !PressedObject.Active ) + { + auto obj = PressedObject; + PressedObject = null; + obj._MouseUp( true ); + } + return PressedObject != null && PressedObject._IsDragged ? PressedObject : null; +} + +/*EXPORT*/ Object GetHoveredObject() +{ + if( HoveredObject != null && !HoveredObject.Active ) + { + auto obj = HoveredObject; + HoveredObject = null; + obj._Unhover(); + } + return HoveredObject; +} + +/*EXPORT*/ void NextTextInput() +{ + Screen screen = GetActiveScreen(); + if( screen == null ) + return; + + GetFocusedObject(); // Refresh state + TextInput curTextInput = cast< TextInput >( FocusedObject ); + FindNextTextInputSkipObj = curTextInput; + TextInput textInput = FindNextTextInput( screen ); + FindNextTextInputSkipObj = null; + if( textInput == null && curTextInput != null ) + textInput = FindNextTextInput( screen ); + + if( textInput != null && textInput !is curTextInput ) + { + if( FocusedObject != null ) + { + auto obj = FocusedObject; + FocusedObject = null; + obj._Unfocus(); + } + FocusedObject = textInput; + FocusedObject._Focus(); + } +} + +Object FindNextTextInputSkipObj = null; +TextInput FindNextTextInput( Object obj ) +{ + if( FindNextTextInputSkipObj == null ) + { + TextInput textInput = cast< TextInput >( obj ); + if( textInput != null ) + return textInput; + } + else if( obj is FindNextTextInputSkipObj ) + { + FindNextTextInputSkipObj = null; + } + + for( uint i = 0; i < obj._Children.length(); i++ ) + { + if( obj._Children[ i ]._ActiveSelf ) + { + TextInput textInput = FindNextTextInput( obj._Children[ i ] ); + if( textInput != null ) + return textInput; + } + } + return null; +} + +/*EXPORT*/ MessageBox[] CollectMessageBoxes() +{ + MessageBox[] messageBoxes = {}; + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + CollectMessageBoxes( Screens[ i ], messageBoxes ); + return messageBoxes; +} + +void CollectMessageBoxes( Object obj, MessageBox[] messageBoxes ) +{ + MessageBox mb = cast< MessageBox >( obj ); + if( mb != null ) + messageBoxes.insertLast( mb ); + + for( uint i = 0; i < obj._Children.length(); i++ ) + CollectMessageBoxes( obj._Children[ i ], messageBoxes ); +} + +/*EXPORT*/ bool IsConsoleActive() +{ + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + if( IsConsoleActive( Screens[ i ] ) ) + return true; + return false; +} + +bool IsConsoleActive( Object obj ) +{ + if( !obj.ActiveSelf ) + return false; + + Console console = cast< Console >( obj ); + if( console != null ) + return true; + + for( uint i = 0; i < obj._Children.length(); i++ ) + if( IsConsoleActive( obj._Children[ i ] ) ) + return true; + + return false; +} + +/*EXPORT*/ void AddDragAndDropHandler( DragAndDropHandler handler ) +{ + DragAndDropHandlers.insertLast( handler ); +} + +/*EXPORT*/ void SetDropMenu( IDropMenu dropMenu ) +{ + DropMenu = dropMenu; +} + +/*EXPORT*/ bool CheckHit( int x, int y ) +{ + for( uint i = 0; i < Screens.length(); i++ ) + if( Screens[ i ].ActiveSelf && Screens[ i ].FindHit( x, y ) != null ) + return true; + return false; +} + +// +// Engine callbacks +// + +/*EXPORT*/ void EngineCallback_Start() +{ + // Register custom screens + GuiScreens::InitializeScreens(); + + // Register hardcoded screens + CreateHardcodedScreen( CLIENT_MAIN_SCREEN_LOGIN ); + CreateHardcodedScreen( CLIENT_MAIN_SCREEN_GAME ); + CreateHardcodedScreen( CLIENT_MAIN_SCREEN_GLOBAL_MAP ); + CreateHardcodedScreen( CLIENT_MAIN_SCREEN_WAIT ); + CreateHardcodedScreen( CLIENT_SCREEN_DIALOG ); + CreateHardcodedScreen( CLIENT_SCREEN_DIALOGBOX ); + CreateHardcodedScreen( CLIENT_SCREEN_TOWN_VIEW ); +} + +/*EXPORT*/ void EngineCallback_ShowScreen( int screenIndex, dictionary params ) +{ + __ScrollMouseUp = false; + __ScrollMouseRight = false; + __ScrollMouseDown = false; + __ScrollMouseLeft = false; + __ScrollKeybUp = false; + __ScrollKeybRight = false; + __ScrollKeybDown = false; + __ScrollKeybLeft = false; + + // Manage multiinstance + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + { + // Find instance + Screen screen = Screens[ i ]; + if( screen.Index != screenIndex ) + continue; + + // Move to top created instance + if( !screen.IsMultiinstance ) + { + ShowHideScreen( screen, params, true ); + return; + } + } + + // Create new instance + Screen screen = CreateScreen( screenIndex ); + ShowHideScreen( screen, params, true ); +} + +/*EXPORT*/ void EngineCallback_HideScreen( int screenIndex ) +{ + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + { + // Find instance + Screen screen = Screens[ i ]; + if( !screen.ActiveSelf || screen.Index != screenIndex ) + continue; + + // Hide + ShowHideScreen( screen, null, false ); + + // Hide only one screen per call + break; + } +} + +/*EXPORT*/ void EngineCallback_Draw() +{ + for( uint i = 0; i < Screens.length(); i++ ) + { + Screen screen = Screens[ i ]; + if( screen.ActiveSelf ) + { + if( screen.Index == CLIENT_MAIN_SCREEN_WAIT ) + CustomCall( "DrawWait" ); + screen._Draw( true ); + } + } +} + +/*EXPORT*/ void EngineCallback_DrawCursor() +{ + // Dragged object + Object draggedObject = GetDraggedObject(); + if( draggedObject != null ) + { + int x = 0, y = 0, w = 0, h = 0; + draggedObject.GetWholeSize( x, y, w, h ); + draggedObject.Draw( __MouseX - w / 2, __MouseY - h / 2 ); + return; + } + + // Drop menu + if( DropMenu != null ) + DropMenu.Draw(); + + // Cursor + if( CursorScreen != null ) + CursorScreen._Draw( true ); +} + +/*EXPORT*/ void EngineCallback_MouseDown( int button ) +{ + // Unfocus current object + if( button == MOUSE_BUTTON_LEFT && FocusedObject != null ) + { + auto obj = FocusedObject; + FocusedObject = null; + obj._Unfocus(); + } + + // Release mouse from current object + if( PressedObject != null ) + { + auto obj = PressedObject; + PressedObject = null; + obj._MouseUp( true ); + } + + // Process mouse down + Screen screen = GetActiveScreen(); + if( screen == null ) + return; + + // Global callback + screen._GlobalMouseDown( button ); + + // Drop menu + if( DropMenu != null ) + DropMenu.MouseDown( button ); + + // Check hit on current screen + Object hitObj = screen.FindMouseHit(); + if( hitObj != null ) + { + // Handle pressed object + PressedObject = hitObj; + PressedObjectRepeatTime = GetTick() + 500; + LastPressedObject = hitObj; + PressedObject._MouseDown( button ); + + // Handle focused object + if( button == MOUSE_BUTTON_LEFT ) + { + FocusedObject = hitObj; + FocusedObject._Focus(); + } + return; + } + + // Close on miss + if( button == MOUSE_BUTTON_LEFT && screen.IsCloseOnMiss ) + { + ShowHideScreen( screen, null, false ); + return; + } + + // Switch to another screen + if( button == MOUSE_BUTTON_LEFT && !screen.IsModal ) + { + int screenIndex = Screens.findByRef( screen ); + for( int i = screenIndex - 1; i >= 0; i-- ) + { + Screen nextScreen = Screens[ i ]; + if( !nextScreen.ActiveSelf ) + continue; + + if( nextScreen.IsModal || nextScreen.FindMouseHit() != null ) + { + // Show screen to top and click on it + ShowHideScreen( nextScreen, null, true, nextScreen ); + EngineCallback_MouseDown( button ); + return; + } + } + } +} + +/*EXPORT*/ void EngineCallback_MouseUp( int button ) +{ + // Global handler + Screen screen = GetActiveScreen(); + if( screen != null ) + screen._GlobalMouseUp( button ); + + // Release mouse from current object + GetPressedObject(); // Refresh state + if( PressedObject != null && button == PressedObject._PressedButton ) + { + Object obj = PressedObject; + PressedObject = null; + bool isDragged = obj._IsDragged; + obj._MouseUp( false ); + + if( obj.IsMouseHit() ) + { + if( screen != null ) + screen._GlobalMouseClick( button ); + obj.MouseClick( button ); + } + + if( isDragged && screen != null ) + { + Object target = screen.FindMouseHit(); + for( uint i = 0; i < DragAndDropHandlers.length(); i++ ) + if( DragAndDropHandlers[ i ] ( obj, target ) ) + break; + } + } + + // Drop menu + if( DropMenu != null ) + DropMenu.MouseUp( button ); +} + +/*EXPORT*/ void EngineCallback_MouseMove( int offsetX, int offsetY ) +{ + bool realMove = ( offsetX != 0 || offsetY != 0 ); + + // Drop menu + if( DropMenu != null ) + { + if( DropMenu.PreMouseMove( offsetX, offsetY ) ) + return; + } + + // Move mouse for active screen + Screen screen = GetActiveScreen(); + Object hoveredObj; + if( screen != null ) + { + if( realMove ) + screen._GlobalMouseMove(); + hoveredObj = screen.FindMouseHit(); + if( realMove && hoveredObj != null ) + hoveredObj._MouseMove(); + } + + // Change hover object + GetHoveredObject(); // Refresh state + if( HoveredObject !is hoveredObj ) + { + if( HoveredObject != null ) + { + auto obj = HoveredObject; + HoveredObject = null; + obj._Unhover(); + } + HoveredObject = hoveredObj; + if( HoveredObject != null ) + HoveredObject._Hover(); + } + + // Drop menu + if( DropMenu != null ) + DropMenu.PostMouseMove( offsetX, offsetY ); +} + +/*EXPORT*/ void EngineCallback_KeyDown( uint8 key, string text ) +{ + // Global input handler + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + if( Screens[ i ]._ActiveSelf ) + Screens[ i ]._GlobalInput( key, text ); + + // Console input + if( CurConsole != null ) + CurConsole._ConsoleInput( key, text ); + + // Focused object input + if( CurConsole == null || !CurConsole.Active ) + { + Screen screen = GetActiveScreen(); + GetFocusedObject(); // Refresh state + if( FocusedObject != null && FocusedObject !is screen ) + FocusedObject.Input( key, text ); + } +} + +/*EXPORT*/ void EngineCallback_KeyUp( uint8 key ) +{ + // ... +} + +/*EXPORT*/ void EngineCallback_InputLost() +{ + if( HoveredObject != null ) + { + auto obj = HoveredObject; + HoveredObject = null; + obj._Unhover(); + } + if( FocusedObject != null ) + { + auto obj = FocusedObject; + FocusedObject = null; + obj._Unfocus(); + } + if( PressedObject != null ) + { + auto obj = PressedObject; + PressedObject = null; + obj._MouseUp( true ); + } + + if( DropMenu != null ) + DropMenu.InputLost(); +} + +/*EXPORT*/ void EngineCallback_Loop() +{ + if( __WaitPing || __IsConnecting || __IsUpdating ) + Input::ReleaseMouse(); + + GetPressedObject(); // Refresh state + if( PressedObject != null ) + { + uint tick = GetTick(); + if( tick >= PressedObjectRepeatTime && PressedObject.IsMouseHit() ) + { + PressedObjectRepeatTime = tick + 40; + Screen screen = GetActiveScreen(); + if( screen != null ) + screen._GlobalMousePressed( PressedObject._PressedButton ); + PressedObject._MousePressed( PressedObject._PressedButton ); + } + } + + EngineCallback_MouseMove( 0, 0 ); + + // Drop menu + if( DropMenu != null ) + DropMenu.Loop(); +} + +/*EXPORT*/ void EngineCallback_GetActiveScreens( int[] result ) +{ + for( uint i = 0; i < Screens.length(); i++ ) + if( Screens[ i ].ActiveSelf ) + result.insertLast( Screens[ i ].Index ); +} + +/*EXPORT*/ void EngineCallback_ItemChanged( bool onMap ) +{ + if( !onMap ) + { + ItemView[] itemViews = {}; + CollectItemView( itemViews ); + for( uint i = 0; i < itemViews.length(); i++ ) + itemViews[ i ].Resort(); + } +} + +void CollectItemView( ItemView[] itemViews ) +{ + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + CollectItemView( Screens[ i ], itemViews ); +} + +void CollectItemView( Object obj, ItemView[] itemViews ) +{ + ItemView itemView = cast< ItemView >( obj ); + if( itemView != null ) + itemViews.insertLast( itemView ); + + for( uint i = 0; i < obj._Children.length(); i++ ) + CollectItemView( obj._Children[ i ], itemViews ); +} + +// +// Custom callbacks +// + +/*EXPORT*/ void Callback_OnResolutionChanged() +{ + for( uint i = 0; i < Screens.length(); i++ ) + Screens[ i ]._Reload( false, true ); +} + +/*EXPORT*/ void Callback_OnLanguageChanged() +{ + for( uint i = 0; i < Screens.length(); i++ ) + Screens[ i ]._Reload( true, true ); +} + +// +// Internal +// + +Screen CreateEmptyScreen() +{ + Screen screen = Screen(); + screen.Init( null ); + return screen; +} + +void CreateHardcodedScreen( int screenIndex ) +{ + if( GetScreen( screenIndex ) == null ) + { + RegisterScreen( screenIndex, CreateEmptyScreen ); + CreateScreen( screenIndex ); + } +} + +Screen CreateScreen( int screenIndex ) +{ + CreateScreenFunc screenFunc = ScreenCreators[ screenIndex ]; + Screen screen = screenFunc(); + Assert( screen != null, screenIndex ); + screen._Index = screenIndex; + screen._ActiveSelf = false; + screen._IsRegistered = true; + screen._InputKeyPressed = Input::GetKeyPressed(); + screen._InputMousePressed = Input::GetMousePressed(); + + if( screenIndex != CLIENT_SCREEN_CURSOR ) + Screens.insertLast( screen ); + else + CursorScreen = screen; + + screen._Init(); + return screen; +} + +void UnregisterScreen( int screenIndex ) +{ + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + { + Screen screen = Screens[ i ]; + if( screen.Index == screenIndex ) + { + if( screen.ActiveSelf ) + ShowHideScreen( screen, null, false ); + if( !screen.IsMultiinstance ) + { + screen._Remove(); + Screens.removeAt( i ); + } + screen._IsRegistered = false; + } + } +} + +void ShowHideScreen( Screen screen, dictionary params, bool show, Screen appearScreen = null ) +{ + // Clean hovered/focused/pressed objects + if( HoveredObject != null ) + { + auto obj = HoveredObject; + HoveredObject = null; + obj._Unhover(); + } + if( FocusedObject != null ) + { + auto obj = FocusedObject; + FocusedObject = null; + obj._Unfocus(); + } + if( PressedObject != null ) + { + auto obj = PressedObject; + PressedObject = null; + obj._MouseUp( true ); + } + + if( show ) + { + // Hide active screen + Screen activeScreen = GetActiveScreen(); + if( activeScreen != null && activeScreen !is screen ) + activeScreen._Disappear(); + + // Focus and hover new elements + FocusedObject = FindNextTextInput( screen ); + if( FocusedObject != null ) + FocusedObject._Focus(); + HoveredObject = screen.FindMouseHit(); + if( HoveredObject != null ) + HoveredObject._Hover(); + + // Move to top + if( Screens.last() !is screen ) + { + Screens.removeAt( Screens.findByRef( screen ) ); + Screens.insertLast( screen ); + } + + // Callback + if( !screen._ActiveSelf ) + screen.SetActive( true ); + if( appearScreen == null ) + screen._Show( params ); + screen._Appear(); + } + else + { + // Ignore redundant hide + if( !screen._ActiveSelf ) + return; + + // Callbacks + screen._Disappear(); + screen._Hide(); + screen.SetActive( false ); + + // Remove multiinstance + if( screen.IsMultiinstance ) + { + screen._Remove(); + Screens.removeAt( Screens.findByRef( screen ) ); + } + + // Appear active screen + if( appearScreen == null ) + appearScreen = GetActiveScreen(); + if( appearScreen != null ) + { + // Move to top + if( Screens.last() !is appearScreen ) + { + Screens.removeAt( Screens.findByRef( appearScreen ) ); + Screens.insertLast( appearScreen ); + } + + appearScreen._Appear(); + } + } +} + +uint GetScreenCount( int screenIndex ) +{ + uint count = 0; + for( int i = int( Screens.length() ) - 1; i >= 0; i-- ) + if( Screens[ i ].Index == screenIndex ) + count++; + return count; +} diff --git a/SDK/Modules/Core/Input.fos b/SDK/Modules/Core/Input.fos new file mode 100644 index 0000000000..48644e61a7 --- /dev/null +++ b/SDK/Modules/Core/Input.fos @@ -0,0 +1,128 @@ +// FOS Client + +/*EXPORT*/ funcdef bool KeyDownCallback( uint8 key, string text ); +/*EXPORT*/ funcdef void KeyUpCallback( uint8 key ); + +bool[] KeyPressed = {}; +bool[] MousePressed = {}; + +KeyDownCallback[] KeyDownCallbacks = {}; +KeyUpCallback[] KeyUpCallbacks = {}; + +/*EXPORT*/ void AddKeyDownCallback( KeyDownCallback callback ) { KeyDownCallbacks.insertLast( callback ); } +/*EXPORT*/ void AddKeyUpCallback( KeyUpCallback callback ) { KeyUpCallbacks.insertLast( callback ); } + +// Export +/*EXPORT*/ bool IsKeyPressed( uint8 key ) { return KeyPressed[ key ]; } +/*EXPORT*/ bool IsMousePressed( int button ) { return MousePressed[ button ]; } +/*EXPORT*/ bool IsCtrlDown() { return KeyPressed[ DIK_RCONTROL ] || KeyPressed[ DIK_LCONTROL ]; } +/*EXPORT*/ bool IsAltDown() { return KeyPressed[ DIK_LMENU ] || KeyPressed[ DIK_RMENU ]; } +/*EXPORT*/ bool IsShiftDown() { return KeyPressed[ DIK_LSHIFT ] || KeyPressed[ DIK_RSHIFT ]; } + +/*EXPORT*/ bool[] GetKeyPressed() +{ + return KeyPressed; +} +/*EXPORT*/ bool[] GetMousePressed() +{ + return MousePressed; +} + +void ModuleInit() +{ + __EventMouseDown.Subscribe( OnMouseDown ); + __EventMouseUp.Subscribe( OnMouseUp ); + __EventMouseMove.Subscribe( OnMouseMove ); + __EventKeyDown.Subscribe( OnKeyDown ); + __EventKeyUp.Subscribe( OnKeyUp ); + __EventInputLost.Subscribe( OnInputLost ); + + KeyPressed.resize( 0x100 ); + MousePressed.resize( MOUSE_BUTTON_EXT4 + 1 ); +} + +/*EXPORT*/ void ReleaseKeys() +{ + for( uint i = 0; i < KeyPressed.length(); i++ ) + if( KeyPressed[ i ] ) + OnKeyUp( i ); +} + +/*EXPORT*/ void ReleaseMouse() +{ + for( uint i = 0; i < MousePressed.length(); i++ ) + if( MousePressed[ i ] ) + OnMouseUp( i ); +} + +// ////////////////////////////////////////////////////////////////////////////////////////////////// +// Mouse behaviours. Button states look in ClientCore.fos, Mouse buttons. +// Return true to disable engine events. +void OnMouseDown( int button ) // Engine callback +{ + if( __WaitPing || __IsConnecting || __IsUpdating ) + return; + + MousePressed[ button ] = true; + + Gui::EngineCallback_MouseDown( button ); +} + +void OnMouseUp( int button ) // Engine callback +{ + if( MousePressed[ button ] ) + Gui::EngineCallback_MouseUp( button ); + + MousePressed[ button ] = false; +} + +void OnMouseMove( int offsetX, int offsetY ) // Engine callback +{ + Gui::EngineCallback_MouseMove( offsetX, offsetY ); +} + +// ////////////////////////////////////////////////////////////////////////////////////////////////// +// Keyboard behaviours. Key codes look in ClientCore.fos, DirectInput keyboard scan codes. +// Return true to disable engine events. +void OnKeyDown( uint8 key, string text ) // Engine callback +{ + // Avoid repeating + if( KeyPressed[ key ] ) + { + if( key != DIK_TEXT && key != DIK_SPACE && key != DIK_BACK && key != DIK_DELETE && key != DIK_LEFT && key != DIK_RIGHT ) + return; + } + KeyPressed[ key ] = true; + + // Handlers + bool handled = false; + for( uint i = 0; !handled && i < KeyDownCallbacks.length(); i++ ) + handled = KeyDownCallbacks[ i ] ( key, text ); + if( !handled ) + Gui::EngineCallback_KeyDown( key, text ); +} + +void OnKeyUp( uint8 key ) // Engine callback +{ + // Avoid repeating + if( !KeyPressed[ key ] ) + return; + KeyPressed[ key ] = false; + + // Handlers + for( uint i = 0; i < KeyUpCallbacks.length(); i++ ) + KeyUpCallbacks[ i ] ( key ); + Gui::EngineCallback_KeyUp( key ); +} + +// ////////////////////////////////////////////////////////////////////////////////////////////////// +// Called on mouse/keyboard input lost (alt-tab, minimize, lost focus). +void OnInputLost() // Engine callback +{ + // Reset states + ReleaseKeys(); + ReleaseMouse(); + + // Gui:: handler + Gui::EngineCallback_InputLost(); +} diff --git a/SDK/Modules/Core/LineTracer.fos b/SDK/Modules/Core/LineTracer.fos new file mode 100644 index 0000000000..a868cfaaa3 --- /dev/null +++ b/SDK/Modules/Core/LineTracer.fos @@ -0,0 +1,177 @@ +// FOS Server +// Author: Atom + +// utilities for tracing +// pathfinding/critter-gathering functions etc. + +/*EXPORT*/ interface ITraceContext +{ + void StartExec( const Map map, uint16 hx, uint16 hy, uint16 tx, uint16 ty, uint maxDist ); + void FinishExec( const Map map, uint resultDist ); + bool Exec( const Map map, uint16 hx, uint16 hy ); // Return true to stop tracing +} + +// math +const float SQRT3T2_FLOAT = 3.4641016151f; +const float SQRT3_FLOAT = 1.732050807568877f; +const float BIAS_FLOAT = 0.02f; +const float RAD2DEG = 57.29577951f; + +float GetDirectionF( uint16 hx, uint16 hy, uint16 tx, uint16 ty ) +{ + float nx = 3 * ( float(tx) - float(hx) ); + float ny = SQRT3T2_FLOAT * ( float(ty) - float(hy) ) - ( float(tx % 2) - float(hx % 2) ) * SQRT3_FLOAT; + return 180.0f + RAD2DEG* atan2( ny, nx ); // In degrees, because cvet loves the degrees +} + +/*EXPORT*/ uint LineTracerHex( uint16 hx, uint16 hy, uint16 tx, uint16 ty, const Map map, uint dist, ITraceContext context ) +{ + if( dist == 0 ) + dist = GetDistantion( hx, hy, tx, ty ); + + context.StartExec( map, hx, hy, tx, ty, dist ); + + float dir = GetDirectionF( hx, hy, tx, ty ); + uint8 dir1, dir2; + if( ( 30.0f <= dir ) && ( dir < 90.0f ) ) + { + dir1 = 5; + dir2 = 0; + } + else if( ( 90.0f <= dir ) && ( dir < 150.0f ) ) + { + dir1 = 4; + dir2 = 5; + } + else if( ( 150.0f <= dir ) && ( dir < 210.0f ) ) + { + dir1 = 3; + dir2 = 4; + } + else if( ( 210.0f <= dir ) && ( dir < 270.0f ) ) + { + dir1 = 2; + dir2 = 3; + } + else if( ( 270.0f <= dir ) && ( dir < 330.0f ) ) + { + dir1 = 1; + dir2 = 2; + } + else + { + dir1 = 0; + dir2 = 1; + } + + uint16 cx = hx; + uint16 cy = hy; + uint16 px = hx; + uint16 py = hy; + + uint16 t1x, t1y, t2x, t2y; + + float x1 = 3 * float(hx) + BIAS_FLOAT; + float y1 = SQRT3T2_FLOAT * float(hy) - ( float(hx % 2) ) * SQRT3_FLOAT + BIAS_FLOAT; + + float x2 = 3 * float(tx) + BIAS_FLOAT; + float y2 = SQRT3T2_FLOAT * float(ty) - ( float(tx % 2) ) * SQRT3_FLOAT + BIAS_FLOAT; + + float dx = x2 - x1; + float dy = y2 - y1; + + float c1x, c1y, c2x, c2y; // test hex + float dist1, dist2; + + for( uint i = 1; i <= dist; i++ ) + { + t1x = cx; + t2x = cx; + t1y = cy; + t2y = cy; + map.MoveHexByDir( t1x, t1y, dir1, 1 ); + map.MoveHexByDir( t2x, t2y, dir2, 1 ); + c1x = 3 * float(t1x); + c1y = SQRT3T2_FLOAT * float(t1y) - ( float(t1x % 2) ) * SQRT3_FLOAT; + c2x = 3 * float(t2x); + c2y = SQRT3T2_FLOAT * float(t2y) - ( float(t2x % 2) ) * SQRT3_FLOAT; + dist1 = dx * ( y1 - c1y ) - dy * ( x1 - c1x ); + dist2 = dx * ( y1 - c2y ) - dy * ( x1 - c2x ); + dist1 = ( ( dist1 > 0 ) ? dist1 : -dist1 ); + dist2 = ( ( dist2 > 0 ) ? dist2 : -dist2 ); + if( dist1 <= dist2 ) + { + cx = t1x; + cy = t1y; + } // left hand biased + else + { + cx = t2x; + cy = t2y; + } + + // if MoveHexByDir tried to leave the map and failed: + if( cx == px && cy == py ) + { + dist = i - 1; + break; + } + + px = cx; + py = cy; + + if( context.Exec( map, cx, cy ) ) + { + dist = i; + break; + } + } + + context.FinishExec( map, dist ); + return dist; +} + +/*EXPORT*/ uint LineTracerSquare( uint16 hx, uint16 hy, uint16 tx, uint16 ty, const Map map, uint dist, ITraceContext context ) +{ + context.StartExec( map, hx, hy, tx, ty, dist ); + + float dir = atan2( float(ty - hy), float(tx - hx) ); + float dx = cos( dir ); + float dy = sin( dir ); + if( abs( dx ) > abs( dy ) ) + { + dy /= abs( dx ); + dx = ( dx > 0 ? 1.0f : -1.0f ); + } + else + { + dx /= abs( dy ); + dy = ( dy > 0 ? 1.0f : -1.0f ); + } + float x1 = float(hx) + 0.5f; + float y1 = float(hy) + 0.5f; + uint16 maxx = map.Width; + uint16 maxy = map.Height; + uint16 cx = 0, cy = 0; + + for( uint i = 1; i <= dist; i++ ) + { + x1 += dx; + y1 += dy; + cx = uint16( floor( x1 ) ); + cy = uint16( floor( y1 ) ); + if( cx >= maxx || cy >= maxy ) + { + dist = i - 1; + break; + } + if( context.Exec( map, cx, cy ) ) + { + dist = i; + break; + } + } + + context.FinishExec( map, dist ); + return dist; +} diff --git a/SDK/Modules/Core/MapperCore.fos b/SDK/Modules/Core/MapperCore.fos new file mode 100644 index 0000000000..3c0eb7def0 --- /dev/null +++ b/SDK/Modules/Core/MapperCore.fos @@ -0,0 +1,173 @@ +// FOS Mapper Sort -8 + +// Tabs +#define TAB_CUSTOM0 ( 0 ) +#define TAB_CUSTOM1 ( 1 ) +#define TAB_CUSTOM2 ( 2 ) +#define TAB_CUSTOM3 ( 3 ) +#define TAB_CUSTOM4 ( 4 ) +#define TAB_CUSTOM5 ( 5 ) +#define TAB_CUSTOM6 ( 6 ) +#define TAB_CUSTOM7 ( 7 ) +#define TAB_CUSTOM8 ( 8 ) +#define TAB_CUSTOM9 ( 9 ) +#define TAB_ITEMS ( 10 ) +#define TAB_TILES ( 11 ) +#define TAB_CRITTERS ( 12 ) +#define TAB_FAST_ITEMS ( 13 ) +#define TAB_IGNORE_ITEMS ( 14 ) +#define TAB_INVENTORY ( 15 ) // Only for TabSetName(...) +#define TAB_MESAGE_BOX ( 16 ) // Only for TabSetName(...) +#define TAB_MAPS ( 17 ) // Only for TabSetName(...) + +// Fonts +#define FONT_DEFAULT ( 0 ) + +// Font flags +#define FT_NOBREAK ( 0x0001 ) +#define FT_NOBREAK_LINE ( 0x0002 ) +#define FT_CENTERX ( 0x0004 ) +#define FT_CENTERY ( 0x0008 ) +#define FT_CENTERR ( 0x0010 ) +#define FT_BOTTOM ( 0x0020 ) +#define FT_UPPER ( 0x0040 ) +#define FT_NO_COLORIZE ( 0x0080 ) +#define FT_ALIGN ( 0x0100 ) +#define FT_SKIPLINES( l ) ( 0x0200 | ( ( l ) << 16 ) ) +#define FT_BORDERED ( 0x0400 ) + +// Cursors +#define CURSOR_DEFAULT ( 0 ) +#define CURSOR_MOVE_SELECTION ( 1 ) +#define CURSOR_PLACE_OBJECT ( 2 ) + +// Mouse click states +#define MOUSE_BUTTON_LEFT ( 0 ) +#define MOUSE_BUTTON_RIGHT ( 1 ) +#define MOUSE_BUTTON_MIDDLE ( 2 ) +#define MOUSE_BUTTON_WHEEL_UP ( 3 ) +#define MOUSE_BUTTON_WHEEL_DOWN ( 4 ) +#define MOUSE_BUTTON_EXT0 ( 5 ) +#define MOUSE_BUTTON_EXT1 ( 6 ) +#define MOUSE_BUTTON_EXT2 ( 7 ) +#define MOUSE_BUTTON_EXT3 ( 8 ) +#define MOUSE_BUTTON_EXT4 ( 9 ) + +// Keyboard key codes +#define DIK_ESCAPE 0x01 +#define DIK_1 0x02 +#define DIK_2 0x03 +#define DIK_3 0x04 +#define DIK_4 0x05 +#define DIK_5 0x06 +#define DIK_6 0x07 +#define DIK_7 0x08 +#define DIK_8 0x09 +#define DIK_9 0x0A +#define DIK_0 0x0B +#define DIK_MINUS 0x0C /* - on main keyboard */ +#define DIK_EQUALS 0x0D +#define DIK_BACK 0x0E /* backspace */ +#define DIK_TAB 0x0F +#define DIK_Q 0x10 +#define DIK_W 0x11 +#define DIK_E 0x12 +#define DIK_R 0x13 +#define DIK_T 0x14 +#define DIK_Y 0x15 +#define DIK_U 0x16 +#define DIK_I 0x17 +#define DIK_O 0x18 +#define DIK_P 0x19 +#define DIK_LBRACKET 0x1A +#define DIK_RBRACKET 0x1B +#define DIK_RETURN 0x1C /* Enter on main keyboard */ +#define DIK_LCONTROL 0x1D +#define DIK_A 0x1E +#define DIK_S 0x1F +#define DIK_D 0x20 +#define DIK_F 0x21 +#define DIK_G 0x22 +#define DIK_H 0x23 +#define DIK_J 0x24 +#define DIK_K 0x25 +#define DIK_L 0x26 +#define DIK_SEMICOLON 0x27 +#define DIK_APOSTROPHE 0x28 +#define DIK_GRAVE 0x29 /* accent grave */ +#define DIK_LSHIFT 0x2A +#define DIK_BACKSLASH 0x2B +#define DIK_Z 0x2C +#define DIK_X 0x2D +#define DIK_C 0x2E +#define DIK_V 0x2F +#define DIK_B 0x30 +#define DIK_N 0x31 +#define DIK_M 0x32 +#define DIK_COMMA 0x33 +#define DIK_PERIOD 0x34 /* . on main keyboard */ +#define DIK_SLASH 0x35 /* / on main keyboard */ +#define DIK_RSHIFT 0x36 +#define DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define DIK_LMENU 0x38 /* left Alt */ +#define DIK_SPACE 0x39 +#define DIK_CAPITAL 0x3A +#define DIK_F1 0x3B +#define DIK_F2 0x3C +#define DIK_F3 0x3D +#define DIK_F4 0x3E +#define DIK_F5 0x3F +#define DIK_F6 0x40 +#define DIK_F7 0x41 +#define DIK_F8 0x42 +#define DIK_F9 0x43 +#define DIK_F10 0x44 +#define DIK_NUMLOCK 0x45 +#define DIK_SCROLL 0x46 /* Scroll Lock */ +#define DIK_NUMPAD7 0x47 +#define DIK_NUMPAD8 0x48 +#define DIK_NUMPAD9 0x49 +#define DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define DIK_NUMPAD4 0x4B +#define DIK_NUMPAD5 0x4C +#define DIK_NUMPAD6 0x4D +#define DIK_ADD 0x4E /* + on numeric keypad */ +#define DIK_NUMPAD1 0x4F +#define DIK_NUMPAD2 0x50 +#define DIK_NUMPAD3 0x51 +#define DIK_NUMPAD0 0x52 +#define DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define DIK_F11 0x57 +#define DIK_F12 0x58 +#define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define DIK_RCONTROL 0x9D +#define DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define DIK_SYSRQ 0xB7 +#define DIK_RMENU 0xB8 /* right Alt */ +#define DIK_PAUSE 0xC5 /* Pause */ +#define DIK_HOME 0xC7 /* Home on arrow keypad */ +#define DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define DIK_END 0xCF /* End on arrow keypad */ +#define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define DIK_LWIN 0xDB /* Left Windows key */ +#define DIK_RWIN 0xDC /* Right Windows key */ +#define DIK_CLIPBOARD_PASTE 0xFF + +// Draw primitive types +#define DRAW_PRIMITIVE_POINTLIST ( 0 ) +#define DRAW_PRIMITIVE_LINELIST ( 1 ) +#define DRAW_PRIMITIVE_LINESTRIP ( 2 ) +#define DRAW_PRIMITIVE_TRIANGLELIST ( 3 ) +#define DRAW_PRIMITIVE_TRIANGLESTRIP ( 4 ) +#define DRAW_PRIMITIVE_TRIANGLEFAN ( 5 ) + +// Sprite cut type +#define SPRITE_CUT_NONE ( 0 ) +#define SPRITE_CUT_HORIZONTAL ( 1 ) +#define SPRITE_CUT_VERTICAL ( 2 ) diff --git a/SDK/Modules/Core/Math.fos b/SDK/Modules/Core/Math.fos new file mode 100644 index 0000000000..a7aa70b3eb --- /dev/null +++ b/SDK/Modules/Core/Math.fos @@ -0,0 +1,86 @@ +// FOS Common + +int Pow2( int x ) +{ + return x * x; +} + +float Pow2F( float x ) +{ + return x * x; +} + +int Pow3( int x ) +{ + return x * x * x; +} + +float Pow3F( float x ) +{ + return x * x * x; +} + +int Min( int x, int y ) +{ + return x < y ? x : y; +} + +float MinF( float x, float y ) +{ + return x < y ? x : y; +} + +int Max( int x, int y ) +{ + return x > y ? x : y; +} + +float MaxF( float x, float y ) +{ + return x > y ? x : y; +} + +int Clamp( int x, int min, int max ) +{ + return x > max ? max : ( x < min ? min : x ); +} + +float ClampF( float x, float min, float max ) +{ + return x > max ? max : ( x < min ? min : x ); +} + +int Abs( int x ) +{ + return x > 0 ? x : -x; +} + +float AbsF( float x ) +{ + return x > 0 ? x : -x; +} + +int Distance( int x1, int y1, int x2, int y2 ) +{ + return int( sqrt( Pow2( x1 - x2 ) + Pow2( y1 - y2 ) ) ); +} + +float DistanceF( float x1, float y1, float x2, float y2 ) +{ + return float( sqrt( Pow2F( x1 - x2 ) + Pow2F( y1 - y2 ) ) ); +} + +bool IsCollision( int x1, int y1, int x2, int y2, int w, int h ) +{ + return x1 >= x2 && x1 < x2 + w && y1 >= y2 && y1 < y2 + h; +} + +int LbsToGramm( int lbs ) +{ + return lbs * 453; +} + +int NumericalNumber( int num ) +{ + return num % 2 != 0 ? num * num / 2 + 1 : num * num / 2 + num / 2; +} diff --git a/SDK/Modules/Core/Player.focr b/SDK/Modules/Core/Player.focr new file mode 100644 index 0000000000..4a43426caa --- /dev/null +++ b/SDK/Modules/Core/Player.focr @@ -0,0 +1 @@ +[ProtoCritter] diff --git a/SDK/Modules/Core/Resources/Core/CritterStub.png b/SDK/Modules/Core/Resources/Core/CritterStub.png new file mode 100644 index 0000000000..af65638b2e Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/CritterStub.png differ diff --git a/SDK/Modules/Core/Resources/Core/Effects/2D_Default.glsl b/SDK/Modules/Core/Resources/Core/Effects/2D_Default.glsl new file mode 100644 index 0000000000..84835c0388 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/2D_Default.glsl @@ -0,0 +1,40 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; +attribute vec2 InTexCoord; +attribute vec2 InTexEggCoord; + +varying vec4 Color; +varying vec2 TexCoord; +varying vec2 TexEggCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; + TexCoord = InTexCoord; + TexEggCoord = InTexEggCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; +uniform sampler2D EggMap; + +varying vec4 Color; +varying vec2 TexCoord; +varying vec2 TexEggCoord; + +void main( void ) +{ + vec4 texColor = texture2D( ColorMap, TexCoord ); + gl_FragColor.rgb = ( texColor.rgb * Color.rgb ) * 2.0; + gl_FragColor.a = texColor.a * Color.a; + if( TexEggCoord.x >= 0.0 ) + gl_FragColor.a *= texture2D( EggMap, TexEggCoord ).a; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/2D_WithoutEgg.glsl b/SDK/Modules/Core/Resources/Core/Effects/2D_WithoutEgg.glsl new file mode 100644 index 0000000000..93b4004646 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/2D_WithoutEgg.glsl @@ -0,0 +1,33 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; +attribute vec2 InTexCoord; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + vec4 texColor = texture2D( ColorMap, TexCoord ); + gl_FragColor.rgb = ( texColor.rgb * Color.rgb ) * 2.0; + gl_FragColor.a = texColor.a * Color.a; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/3D_NormalMapping.glsl b/SDK/Modules/Core/Resources/Core/Effects/3D_NormalMapping.glsl new file mode 100644 index 0000000000..171497c0e4 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/3D_NormalMapping.glsl @@ -0,0 +1,154 @@ +Effect Passes 2 +Effect Pass 0 Shadow + +#version 110 + +#ifdef PASS1 +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; +uniform mat4 WorldMatrices[ MAX_BONES ]; +uniform vec4 Texture1AtlasOffset; + +const vec3 LightDir = vec3( 0.0, 0.0, 1.0 ); + +attribute vec3 InPosition; +attribute vec3 InNormal; +attribute vec2 InTexCoord; +attribute vec2 InTexCoordBase; +attribute vec3 InTangent; +attribute vec3 InBinormal; +attribute vec4 InBlendWeights; +attribute vec4 InBlendIndices; + +varying vec2 TexCoord; +varying vec2 TexCoord2; +varying vec3 LightVec; + +void main( void ) +{ + // Skinning + vec4 weights = InBlendWeights; + vec4 indices = InBlendIndices; + vec4 position = vec4( 0.0 ); + vec3 normal = vec3( 0.0 ); + vec3 tangent = vec3( 0.0 ); + vec3 binormal = vec3( 0.0 ); + for( int i = 0; i < 4; i++ ) + { + mat4 m44 = WorldMatrices[ int( indices.x ) ]; + mat3 m33 = mat3( m44[ 0 ].xyz, m44[ 1 ].xyz, m44[ 2 ].xyz ); + float w = weights.x; + position += m44 * vec4( InPosition, 1.0 ) * w; + normal += m33 * InNormal * w; + tangent += m33 * InTangent * w; + binormal += m33 * InBinormal * w; + weights = weights.yzwx; + indices = indices.yzwx; + } + + // Position + gl_Position = ProjectionMatrix * position; + + // Normalization + normal = normalize( normal ); + tangent = normalize( tangent ); + binormal = normalize( binormal ); + + // Tangent space + LightVec.x = dot(LightDir, tangent); + LightVec.y = dot(LightDir, binormal); + LightVec.z = dot(LightDir, normal); + LightVec = normalize(LightVec); + + // Pass to fragment shader + TexCoord = InTexCoord; + TexCoord2.x = ( InTexCoordBase.x * Texture1AtlasOffset.z ) + Texture1AtlasOffset.x; + TexCoord2.y = ( InTexCoordBase.y * Texture1AtlasOffset.w ) + Texture1AtlasOffset.y; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; +uniform sampler2D Texture1; + +const vec3 AmbientColor = vec3( 0.0, 0.0, 0.0 ); + +varying vec2 TexCoord; +varying vec2 TexCoord2; +varying vec3 LightVec; + +void main( void ) +{ + vec3 normal = 2.0 * texture2D( Texture1, TexCoord2 ).rgb - 1.0; + normal = normalize( normal ); + float lamberFactor = max( 0.0, dot( LightVec, normal ) ) ; + + vec4 color; + color.rgb = AmbientColor + lamberFactor; + color.a = 1.0; + + gl_FragColor = texture2D( ColorMap, TexCoord ) * color; +} +#endif +#endif // PASS1 + +#ifdef PASS0 +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; +uniform mat4 WorldMatrices[ MAX_BONES ]; +uniform vec3 GroundPosition; + +attribute vec3 InPosition; +attribute vec2 InTexCoord; +attribute vec4 InBlendWeights; +attribute vec4 InBlendIndices; + +varying vec2 TexCoord; + +const float CameraAngleCos = 0.9010770213221; // cos( 25.7 ) +const float CameraAngleSin = 0.4336590845875; // sin( 25.7 ) +const float ShadowAngleTan = 0.2548968037538; // tan( 14.3 ) + +void main( void ) +{ + // Skinning + vec4 weights = InBlendWeights; + vec4 indices = InBlendIndices; + vec4 position = vec4( 0.0 ); + for( int i = 0; i < 4; i++ ) + { + mat4 m44 = WorldMatrices[ int( indices.x ) ]; + float w = weights.x; + position += m44 * vec4( InPosition, 1.0 ) * w; + weights = weights.yzwx; + indices = indices.yzwx; + } + + // Calculate shadow position + float d = ( position.y - GroundPosition.y ) * CameraAngleCos; + d -= ( GroundPosition.z - position.z ) * CameraAngleSin; + position.y -= d * CameraAngleCos; + d *= ShadowAngleTan; + position.y += d * CameraAngleSin; + position.z -= 10.0; + + // Position + gl_Position = ProjectionMatrix * position; + + // Pass to fragment shader + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_FragColor.rgb = vec3( 0.0 ); + gl_FragColor.a = texture2D( ColorMap, TexCoord ).a; +} +#endif +#endif // PASS0 diff --git a/SDK/Modules/Core/Resources/Core/Effects/3D_Skinned.glsl b/SDK/Modules/Core/Resources/Core/Effects/3D_Skinned.glsl new file mode 100644 index 0000000000..d6e4563054 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/3D_Skinned.glsl @@ -0,0 +1,128 @@ +Effect Passes 2 +Effect Pass 0 Shadow + +#version 110 + +#ifdef PASS1 +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; +uniform mat4 WorldMatrices[ MAX_BONES ]; + +const vec3 LightDir = vec3( 0.0, 0.0, 1.0 ); +const vec3 AmbientColor = vec3( 0.0, 0.0, 0.0 ); + +attribute vec3 InPosition; +attribute vec3 InNormal; +attribute vec2 InTexCoord; +attribute vec4 InBlendWeights; +attribute vec4 InBlendIndices; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + // Skinning + vec4 weights = InBlendWeights; + vec4 indices = InBlendIndices; + vec4 position = vec4( 0.0 ); + vec3 normal = vec3( 0.0 ); + for( int i = 0; i < 4; i++ ) + { + mat4 m44 = WorldMatrices[ int( indices.x ) ]; + mat3 m33 = mat3( m44[ 0 ].xyz, m44[ 1 ].xyz, m44[ 2 ].xyz ); + float w = weights.x; + position += m44 * vec4( InPosition, 1.0 ) * w; + normal += m33 * InNormal * w; + weights = weights.yzwx; + indices = indices.yzwx; + } + + // Position + gl_Position = ProjectionMatrix * position; + + // Normal + normal = normalize( normal ); + + // Shade + Color.rgb = AmbientColor + max( 0.0, dot( normal, LightDir ) ); + Color.a = 1.0; + + // Pass to fragment shader + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + gl_FragColor = texture2D( ColorMap, TexCoord ) * Color; +} +#endif +#endif // PASS1 + +#ifdef PASS0 +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; +uniform mat4 WorldMatrices[ MAX_BONES ]; +uniform vec3 GroundPosition; + +attribute vec3 InPosition; +attribute vec2 InTexCoord; +attribute vec4 InBlendWeights; +attribute vec4 InBlendIndices; + +varying vec2 TexCoord; + +const float CameraAngleCos = 0.9010770213221; // cos( 25.7 ) +const float CameraAngleSin = 0.4336590845875; // sin( 25.7 ) +const float ShadowAngleTan = 0.2548968037538; // tan( 14.3 ) + +void main( void ) +{ + // Skinning + vec4 weights = InBlendWeights; + vec4 indices = InBlendIndices; + vec4 position = vec4( 0.0 ); + for( int i = 0; i < 4; i++ ) + { + mat4 m44 = WorldMatrices[ int( indices.x ) ]; + float w = weights.x; + position += m44 * vec4( InPosition, 1.0 ) * w; + weights = weights.yzwx; + indices = indices.yzwx; + } + + // Calculate shadow position + float d = ( position.y - GroundPosition.y ) * CameraAngleCos; + d -= ( GroundPosition.z - position.z ) * CameraAngleSin; + position.y -= d * CameraAngleCos; + d *= ShadowAngleTan; + position.y += d * CameraAngleSin; + position.z -= 10.0; + + // Position + gl_Position = ProjectionMatrix * position; + + // Pass to fragment shader + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_FragColor.rgb = vec3( 0.0 ); + gl_FragColor.a = texture2D( ColorMap, TexCoord ).a; +} +#endif +#endif // PASS0 diff --git a/SDK/Modules/Core/Resources/Core/Effects/Contour_Default.glsl b/SDK/Modules/Core/Resources/Core/Effects/Contour_Default.glsl new file mode 100644 index 0000000000..0f995ee4e9 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Contour_Default.glsl @@ -0,0 +1,87 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; +attribute vec2 InTexCoord; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; +uniform vec4 ColorMapSize; +uniform float ColorMapWidth; +uniform float ColorMapHeight; + +uniform vec4 SpriteBorder; +uniform float TimeGame; + +varying vec4 Color; +varying vec2 TexCoord; + +vec4 border = SpriteBorder; + +bool CheckPixel( float x, float y ) +{ + return texture2D( ColorMap, vec2( x, y ) ).a > 0.1; +} + +void main( void ) +{ + float l = TexCoord.x - ColorMapSize.z; + float t = TexCoord.y - ColorMapSize.w; + float r = TexCoord.x + ColorMapSize.z; + float b = TexCoord.y + ColorMapSize.w; + + if( border.w < border.y ) + border.yw = border.wy; + + bool checkPixelResult = false; + if( l < border.x ) + checkPixelResult = CheckPixel( r, TexCoord.y ); + else if( r > border.z ) + checkPixelResult = CheckPixel( l, TexCoord.y ); + else if( t < border.y ) + checkPixelResult = CheckPixel( TexCoord.x, b ); + else if( b > border.w ) + checkPixelResult = CheckPixel( TexCoord.x, t ); + else if( texture2D( ColorMap, TexCoord ).a < 0.1) + checkPixelResult = CheckPixel( l, TexCoord.y ) || CheckPixel( r, TexCoord.y ) || + CheckPixel( TexCoord.x, t ) || CheckPixel( TexCoord.x, b ); + + if( checkPixelResult ) + { + gl_FragColor = Color; + if( gl_FragColor.a > 0.1 ) + { + float v = ( TexCoord.y - border.y ) / ( border.w - border.y ); + v += 1.0 - mod( TimeGame, 2.0 ); + if( v > 1.0 ) + v = 2.0 - v; + else if( v < 0.0 ) + v = -v; + gl_FragColor.rgb += v * 0.60 - 0.30; + gl_FragColor.rgb = clamp( gl_FragColor.rgb, 0.0, 1.0 ); + } + else + { + gl_FragColor.a = 1.0; + } + } + else + { + discard; + } +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_Fog.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_Fog.glsl new file mode 100644 index 0000000000..3b610c4f51 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_Fog.glsl @@ -0,0 +1,48 @@ +#version 110 + +const float FogBlackout = 0.2; +const float AttackBlackout = 0.4; +const float AttackAroundShining = 0.4; + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec2 InTexCoord; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + vec4 tex = texture2D( ColorMap, TexCoord ); + + float fog = tex.r; + float attack = tex.g; + float attackDist = tex.b; + + float a = 1.0 - max( fog, FogBlackout ); + if( attackDist > 0.0 ) + { + a = max( attack * AttackBlackout, a ); + gl_FragColor = vec4( attack - a, 0.0, 0.0, a - max( AttackAroundShining - attackDist, 0.0 ) ); + } + else + { + if( a == 0.0 ) + discard; + gl_FragColor = vec4( 0.0, 0.0, 0.0, a ); + } +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_Light.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_Light.glsl new file mode 100644 index 0000000000..67f12d787f --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_Light.glsl @@ -0,0 +1,40 @@ +Effect Passes 2 +Effect Pass 0 BlendFunc GL_DST_COLOR GL_ONE +Effect Pass 1 BlendFunc GL_DST_COLOR GL_ONE + +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec2 InTexCoord; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + vec4 tex = texture2D( ColorMap, TexCoord ); + if( tex.a == 0.0 ) + discard; + + #ifdef PASS0 + gl_FragColor = vec4( tex.a, tex.a, tex.a, 1.0 ); + #endif + #ifdef PASS1 + gl_FragColor = vec4( tex.r, tex.g, tex.b, 1.0 ); + #endif +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_Map.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_Map.glsl new file mode 100644 index 0000000000..056c7e3ef9 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_Map.glsl @@ -0,0 +1,27 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec2 InTexCoord; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_FragColor = texture2D( ColorMap, TexCoord ); +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_Map_BlackWhite.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_Map_BlackWhite.glsl new file mode 100644 index 0000000000..c040b87001 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_Map_BlackWhite.glsl @@ -0,0 +1,44 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec2 InTexCoord; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_FragColor = texture2D( ColorMap, TexCoord ); + + gl_FragColor.rgb = vec3( ( gl_FragColor.r + gl_FragColor.g + gl_FragColor.b ) / 3.0 ); + + if( gl_FragColor.r < 0.2 || gl_FragColor.r > 0.9 ) + gl_FragColor.r = 0.0; + else + gl_FragColor.r = 1.0; + + if( gl_FragColor.g < 0.2 || gl_FragColor.g > 0.9 ) + gl_FragColor.g = 0.0; + else + gl_FragColor.g = 1.0; + + if( gl_FragColor.b < 0.2 || gl_FragColor.b > 0.9 ) + gl_FragColor.b = 0.0; + else + gl_FragColor.b = 1.0; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_Primitive.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_Primitive.glsl new file mode 100644 index 0000000000..c24b75e436 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_Primitive.glsl @@ -0,0 +1,25 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; + +varying vec4 Color; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec4 Color; + +void main( void ) +{ + gl_FragColor = Color; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_RenderTarget.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_RenderTarget.glsl new file mode 100644 index 0000000000..056c7e3ef9 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_RenderTarget.glsl @@ -0,0 +1,27 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec2 InTexCoord; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_FragColor = texture2D( ColorMap, TexCoord ); +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Flush_RenderTargetMS.glsl b/SDK/Modules/Core/Resources/Core/Effects/Flush_RenderTargetMS.glsl new file mode 100644 index 0000000000..cc43ddb8de --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Flush_RenderTargetMS.glsl @@ -0,0 +1,34 @@ +#version 150 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec2 InTexCoord; + +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2DMS ColorMap; +uniform vec4 ColorMapSize; +uniform float ColorMapSamples; + +varying vec2 TexCoord; + +void main( void ) +{ + ivec2 coord = ivec2( TexCoord.x * ColorMapSize[ 0 ], TexCoord.y * ColorMapSize[ 1 ] ); + vec4 color = vec4( 0.0 ); + for( int i = 0; i < int( ColorMapSamples ); i++ ) + color += texelFetch( ColorMap, coord, i ); + color *= 1.0 / ColorMapSamples; + gl_FragColor = color; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Font_Default.glsl b/SDK/Modules/Core/Resources/Core/Effects/Font_Default.glsl new file mode 100644 index 0000000000..93b4004646 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Font_Default.glsl @@ -0,0 +1,33 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; +attribute vec2 InTexCoord; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + vec4 texColor = texture2D( ColorMap, TexCoord ); + gl_FragColor.rgb = ( texColor.rgb * Color.rgb ) * 2.0; + gl_FragColor.a = texColor.a * Color.a; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Interface_Default.glsl b/SDK/Modules/Core/Resources/Core/Effects/Interface_Default.glsl new file mode 100644 index 0000000000..93b4004646 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Interface_Default.glsl @@ -0,0 +1,33 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; +attribute vec2 InTexCoord; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; + TexCoord = InTexCoord; +} +#endif + +#ifdef FRAGMENT_SHADER +uniform sampler2D ColorMap; + +varying vec4 Color; +varying vec2 TexCoord; + +void main( void ) +{ + vec4 texColor = texture2D( ColorMap, TexCoord ); + gl_FragColor.rgb = ( texColor.rgb * Color.rgb ) * 2.0; + gl_FragColor.a = texColor.a * Color.a; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Primitive_Default.glsl b/SDK/Modules/Core/Resources/Core/Effects/Primitive_Default.glsl new file mode 100644 index 0000000000..c24b75e436 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Primitive_Default.glsl @@ -0,0 +1,25 @@ +#version 110 + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; + +varying vec4 Color; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec4 Color; + +void main( void ) +{ + gl_FragColor = Color; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Primitive_Fog.glsl b/SDK/Modules/Core/Resources/Core/Effects/Primitive_Fog.glsl new file mode 100644 index 0000000000..9a87cb7b2f --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Primitive_Fog.glsl @@ -0,0 +1,48 @@ +Effect Pass 0 BlendFunc GL_ONE GL_ONE +Effect Pass 0 BlendEquation GL_MAX + +#version 110 + +const float FogBordersPower = 5.0; +const float FogBlackout = 0.2; +const float AttackBordersPower = 7.0; + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; + +varying vec4 Color; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec4 Color; + +void main( void ) +{ + // Input: + // a - fog area or attack area (0.0 or 1.0) + // r - actual distance + // g - whole distance + + // Place fog area in r channel + if( Color.a < 0.5 ) + { + float value = ( 1.0 - Color.r ) * FogBordersPower; + gl_FragColor = vec4( max( value, FogBlackout ), 0.0, 0.0, 1.0 ); + } + // Place attack area in g/b channel + else + { + float value = ( 1.0 - Color.r ) * AttackBordersPower; + gl_FragColor = vec4( 0.0, min( value, 0.65 ), Color.g, 1.0 ); + } +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/Primitive_Light.glsl b/SDK/Modules/Core/Resources/Core/Effects/Primitive_Light.glsl new file mode 100644 index 0000000000..856313362a --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/Primitive_Light.glsl @@ -0,0 +1,35 @@ +Effect Pass 0 BlendFunc GL_ONE GL_ONE +Effect Pass 0 BlendEquation GL_MAX + +#version 110 + +const float ShinePower = 5.0; +const float ResultPower = 0.5; + +#ifdef VERTEX_SHADER +uniform mat4 ProjectionMatrix; + +attribute vec2 InPosition; +attribute vec4 InColor; + +varying vec4 Color; + +void main( void ) +{ + gl_Position = ProjectionMatrix * vec4( InPosition, 0.0, 1.0 ); + Color = InColor; +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec4 Color; + +void main( void ) +{ + float a = Color.a * ShinePower; + float r = Color.r * min( a, 1.0 ); + float g = Color.g * min( a, 1.0 ); + float b = Color.b * min( a, 1.0 ); + gl_FragColor = vec4( r, g, b, a ) * ResultPower; +} +#endif diff --git a/SDK/Modules/Core/Resources/Core/Effects/ReadMe.txt b/SDK/Modules/Core/Resources/Core/Effects/ReadMe.txt new file mode 100644 index 0000000000..ee6ce86a35 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Effects/ReadMe.txt @@ -0,0 +1,70 @@ +// +// FOnline effects specification +// + +// Default effects + +2D_Default.glsl // Game sprites +2D_WithoutEgg.glsl // Game sprites without affecting of transparent egg +3D_Skinned.glsl // Drawing skinned models +Contour_Default.glsl // Default effect for contours +Flush_Map.glsl // Game sprites flushing +Flush_Map_BlackWhite.glsl // Game sprites flushing with Black/White effect +Flush_Primitive.glsl // Primitive flushing +Flush_RenderTarget.glsl // Flushing render target +Flush_RenderTargetMS.glsl // Flushing multisample render target +Font_Default.glsl // Default effect for fonts +Interface_Default.glsl // Default effect for interface +Primitive_Default.glsl // Default effect for primitives + +// Effect directives +// Beginning from 'Effect', must be placed before '#version' directive + +Effect Passes X - count of passes (default: 1), every pass compiled in separate shader program; +Effect Pass X Shadow - an indication that pass used for shadow rendering; +Effect Pass X BlendFunc Y Y - use custom blend function (default: GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), where one of constant used in glBlendFunc; +Effect Pass X BlendEquation Y - use custom blend function (default: GL_FUNC_ADD), where one of constant used in glBlendEquation; + +// Effect predefined names +// Use in preprocessor #ifdef, #endif, etc statements + +VERTEX_SHADER - compilation of vertex shader; +FRAGMENT_SHADER - compilation of fragment shader; +PASSX - current rendering pass, beginning from zero. + +// Effect attributes + +vec3 InPosition; // Vertex position +vec3 InNormal; // Vertex normal +vec2 InTexCoord; // Texture coordinate in atlas +vec2 InTexCoordBase; // Original texture coordinate +vec3 InTangent; // Tangent +vec3 InBitangent; // Bitangent +vec4 InBlendWeights; // Weight of bone +vec4 InBlendIndices; // Index to WorldMatrices + +// Effect uniform variables + +float ZoomFactor; // Current zoom in game +sampler2D ColorMap; // Main texture +vec4 ColorMapSize; // Main texture size: x - width, y - height, z - texel width, w - texel height +float ColorMapSamples; // Count of samples +sampler2D EggMap; // Egg texture +vec4 EggMapSize; // Size same as ColorMapSize +sampler2D Texture[0..9]; // Custom textures +vec4 Texture[0..9]Size; // Custom textures size (same as ColorMapSize) +vec4 Texture[0..9]AtlasOffset; // Custom textures atlas offsets, xy offset, zw size + +mat4 ProjectionMatrix; // Projection matrix +vec3 GroundPosition; // Ground position +mat4 WorldMatrices[]; // World matrices + +float Time; // Current time [0,120), in seconds, cycled +float TimeGame; // Current game time [0,120), in seconds, cycled +float Random1; // Random value 1 [0,1] +float Random2; // Random value 2 [0,1] +float Random3; // Random value 3 [0,1] +float Random4; // Random value 4 [0,1] +float EffectValue[0..9]; // Value that changed in scripts, names is same +float AnimPosProc; // Current animation process 0%..100% [0,1), (3d specific) +float AnimPosTime; // Current animation time, in seconds (3d specific) diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Big.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Big.fofnt new file mode 100644 index 0000000000..9873c224ab --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Big.fofnt @@ -0,0 +1,1049 @@ +Version 2 +Image Big.png +YAdvance 4 + +Letter ' ' + PositionX 65 + PositionY 1 + Width 6 + OffsetY -22 + XAdvance 6 + +Letter '!' + PositionX 73 + PositionY 1 + Width 6 + Height 22 + XAdvance 8 + +Letter '"' + PositionX 81 + PositionY 1 + Width 9 + Height 22 + XAdvance 11 + +Letter '#' + PositionX 92 + PositionY 1 + Width 17 + Height 19 + OffsetY -3 + XAdvance 19 + +Letter '%' + PositionX 113 + PositionY 1 + Width 18 + Height 22 + XAdvance 20 + +Letter '&' + PositionX 133 + PositionY 1 + Width 14 + Height 22 + XAdvance 16 + +Letter ''' + PositionX 149 + PositionY 1 + Width 5 + Height 22 + XAdvance 7 + +Letter '(' + PositionX 156 + PositionY 1 + Width 8 + Height 22 + XAdvance 10 + +Letter ')' + PositionX 166 + PositionY 1 + Width 8 + Height 22 + XAdvance 10 + +Letter '+' + PositionX 178 + PositionY 1 + Width 13 + Height 17 + OffsetY -5 + XAdvance 15 + +Letter ',' + PositionX 193 + PositionY 1 + Width 5 + Height 7 + OffsetY -15 + XAdvance 7 + +Letter '-' + PositionX 200 + PositionY 1 + Width 8 + Height 13 + OffsetY -9 + XAdvance 10 + +Letter '.' + PositionX 210 + PositionY 1 + Width 5 + Height 4 + OffsetY -18 + XAdvance 7 + +Letter '/' + PositionX 217 + PositionY 1 + Width 11 + Height 22 + XAdvance 13 + +Letter '0' + PositionX 230 + PositionY 1 + Width 13 + Height 22 + XAdvance 15 + +Letter '1' + PositionX 1 + PositionY 25 + Width 10 + Height 22 + XAdvance 12 + +Letter '2' + PositionX 13 + PositionY 25 + Width 12 + Height 22 + XAdvance 14 + +Letter '3' + PositionX 27 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter '4' + PositionX 42 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter '5' + PositionX 57 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter '6' + PositionX 72 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter '7' + PositionX 87 + PositionY 25 + Width 12 + Height 22 + XAdvance 14 + +Letter '8' + PositionX 101 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter '9' + PositionX 116 + PositionY 25 + Width 12 + Height 22 + XAdvance 14 + +Letter ':' + PositionX 130 + PositionY 25 + Width 4 + Height 17 + OffsetY -5 + XAdvance 6 + +Letter ';' + PositionX 136 + PositionY 25 + Width 5 + Height 17 + OffsetY -5 + XAdvance 7 + +Letter '=' + PositionX 145 + PositionY 25 + Width 13 + Height 15 + OffsetY -7 + XAdvance 15 + +Letter '?' + PositionX 162 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter 'A' + PositionX 179 + PositionY 25 + Width 15 + Height 22 + XAdvance 17 + +Letter 'B' + PositionX 196 + PositionY 25 + Width 12 + Height 22 + XAdvance 14 + +Letter 'C' + PositionX 210 + PositionY 25 + Width 10 + Height 22 + XAdvance 12 + +Letter 'D' + PositionX 222 + PositionY 25 + Width 13 + Height 22 + XAdvance 15 + +Letter 'E' + PositionX 237 + PositionY 25 + Width 11 + Height 22 + XAdvance 13 + +Letter 'F' + PositionX 1 + PositionY 49 + Width 11 + Height 22 + XAdvance 13 + +Letter 'G' + PositionX 14 + PositionY 49 + Width 13 + Height 22 + XAdvance 15 + +Letter 'H' + PositionX 29 + PositionY 49 + Width 12 + Height 22 + XAdvance 14 + +Letter 'I' + PositionX 43 + PositionY 49 + Width 5 + Height 22 + XAdvance 7 + +Letter 'J' + PositionX 50 + PositionY 49 + Width 7 + Height 22 + XAdvance 9 + +Letter 'K' + PositionX 59 + PositionY 49 + Width 13 + Height 22 + XAdvance 15 + +Letter 'L' + PositionX 74 + PositionY 49 + Width 9 + Height 22 + XAdvance 11 + +Letter 'M' + PositionX 85 + PositionY 49 + Width 16 + Height 22 + XAdvance 18 + +Letter 'N' + PositionX 103 + PositionY 49 + Width 14 + Height 22 + XAdvance 16 + +Letter 'O' + PositionX 119 + PositionY 49 + Width 15 + Height 22 + XAdvance 17 + +Letter 'P' + PositionX 136 + PositionY 49 + Width 13 + Height 22 + XAdvance 15 + +Letter 'Q' + PositionX 151 + PositionY 49 + Width 16 + Height 22 + XAdvance 18 + +Letter 'R' + PositionX 169 + PositionY 49 + Width 14 + Height 22 + XAdvance 16 + +Letter 'S' + PositionX 185 + PositionY 49 + Width 12 + Height 22 + XAdvance 14 + +Letter 'T' + PositionX 199 + PositionY 49 + Width 11 + Height 22 + XAdvance 13 + +Letter 'U' + PositionX 212 + PositionY 49 + Width 14 + Height 22 + XAdvance 16 + +Letter 'V' + PositionX 228 + PositionY 49 + Width 14 + Height 22 + XAdvance 16 + +Letter 'W' + PositionX 1 + PositionY 73 + Width 21 + Height 22 + XAdvance 23 + +Letter 'X' + PositionX 24 + PositionY 73 + Width 14 + Height 22 + XAdvance 16 + +Letter 'Y' + PositionX 40 + PositionY 73 + Width 13 + Height 22 + XAdvance 15 + +Letter 'Z' + PositionX 55 + PositionY 73 + Width 12 + Height 22 + XAdvance 14 + +Letter '\' + PositionX 71 + PositionY 73 + Width 11 + Height 22 + XAdvance 13 + +Letter '_' + PositionX 88 + PositionY 73 + Width 16 + Height 19 + OffsetY -3 + XAdvance 18 + +Letter 'a' + PositionX 108 + PositionY 73 + Width 15 + Height 22 + XAdvance 17 + +Letter 'b' + PositionX 125 + PositionY 73 + Width 12 + Height 22 + XAdvance 14 + +Letter 'c' + PositionX 139 + PositionY 73 + Width 10 + Height 22 + XAdvance 12 + +Letter 'd' + PositionX 151 + PositionY 73 + Width 13 + Height 22 + XAdvance 15 + +Letter 'e' + PositionX 166 + PositionY 73 + Width 11 + Height 22 + XAdvance 13 + +Letter 'f' + PositionX 179 + PositionY 73 + Width 11 + Height 22 + XAdvance 13 + +Letter 'g' + PositionX 192 + PositionY 73 + Width 13 + Height 22 + XAdvance 15 + +Letter 'h' + PositionX 207 + PositionY 73 + Width 12 + Height 22 + XAdvance 14 + +Letter 'i' + PositionX 221 + PositionY 73 + Width 5 + Height 22 + XAdvance 7 + +Letter 'j' + PositionX 228 + PositionY 73 + Width 7 + Height 22 + XAdvance 9 + +Letter 'k' + PositionX 237 + PositionY 73 + Width 13 + Height 22 + XAdvance 15 + +Letter 'l' + PositionX 1 + PositionY 97 + Width 9 + Height 22 + XAdvance 11 + +Letter 'm' + PositionX 12 + PositionY 97 + Width 16 + Height 22 + XAdvance 18 + +Letter 'n' + PositionX 30 + PositionY 97 + Width 14 + Height 22 + XAdvance 16 + +Letter 'o' + PositionX 46 + PositionY 97 + Width 15 + Height 22 + XAdvance 17 + +Letter 'p' + PositionX 63 + PositionY 97 + Width 13 + Height 22 + XAdvance 15 + +Letter 'q' + PositionX 78 + PositionY 97 + Width 16 + Height 22 + XAdvance 18 + +Letter 'r' + PositionX 96 + PositionY 97 + Width 14 + Height 22 + XAdvance 16 + +Letter 's' + PositionX 112 + PositionY 97 + Width 12 + Height 22 + XAdvance 14 + +Letter 't' + PositionX 126 + PositionY 97 + Width 11 + Height 22 + XAdvance 13 + +Letter 'u' + PositionX 139 + PositionY 97 + Width 14 + Height 22 + XAdvance 16 + +Letter 'v' + PositionX 155 + PositionY 97 + Width 14 + Height 22 + XAdvance 16 + +Letter 'w' + PositionX 171 + PositionY 97 + Width 21 + Height 22 + XAdvance 23 + +Letter 'x' + PositionX 194 + PositionY 97 + Width 14 + Height 22 + XAdvance 16 + +Letter 'y' + PositionX 210 + PositionY 97 + Width 13 + Height 22 + XAdvance 15 + +Letter 'z' + PositionX 225 + PositionY 97 + Width 12 + Height 22 + XAdvance 14 + +Letter 'Њ' + PositionX 19 + PositionY 121 + Width 21 + Height 22 + XAdvance 23 + +Letter 'њ' + PositionX 72 + PositionY 121 + Width 21 + Height 22 + XAdvance 23 + +Letter 'А' + PositionX 165 + PositionY 121 + Width 15 + Height 22 + XAdvance 17 + +Letter 'Б' + PositionX 182 + PositionY 121 + Width 12 + Height 22 + XAdvance 14 + +Letter 'В' + PositionX 196 + PositionY 121 + Width 12 + Height 22 + XAdvance 14 + +Letter 'Г' + PositionX 210 + PositionY 121 + Width 11 + Height 22 + XAdvance 13 + +Letter 'Д' + PositionX 223 + PositionY 121 + Width 20 + Height 22 + XAdvance 22 + +Letter 'Е' + PositionX 1 + PositionY 145 + Width 11 + Height 22 + XAdvance 13 + +Letter 'Ж' + PositionX 14 + PositionY 145 + Width 20 + Height 22 + XAdvance 22 + +Letter 'З' + PositionX 36 + PositionY 145 + Width 13 + Height 22 + XAdvance 15 + +Letter 'И' + PositionX 51 + PositionY 145 + Width 14 + Height 22 + XAdvance 16 + +Letter 'Й' + PositionX 67 + PositionY 145 + Width 14 + Height 22 + XAdvance 16 + +Letter 'К' + PositionX 83 + PositionY 145 + Width 13 + Height 22 + XAdvance 15 + +Letter 'Л' + PositionX 98 + PositionY 145 + Width 15 + Height 22 + XAdvance 17 + +Letter 'М' + PositionX 115 + PositionY 145 + Width 16 + Height 22 + XAdvance 18 + +Letter 'Н' + PositionX 133 + PositionY 145 + Width 12 + Height 22 + XAdvance 14 + +Letter 'О' + PositionX 147 + PositionY 145 + Width 15 + Height 22 + XAdvance 17 + +Letter 'П' + PositionX 164 + PositionY 145 + Width 12 + Height 22 + XAdvance 14 + +Letter 'Р' + PositionX 178 + PositionY 145 + Width 13 + Height 22 + XAdvance 15 + +Letter 'С' + PositionX 193 + PositionY 145 + Width 10 + Height 22 + XAdvance 12 + +Letter 'Т' + PositionX 205 + PositionY 145 + Width 11 + Height 22 + XAdvance 13 + +Letter 'У' + PositionX 218 + PositionY 145 + Width 14 + Height 22 + XAdvance 16 + +Letter 'Ф' + PositionX 234 + PositionY 145 + Width 20 + Height 22 + XAdvance 22 + +Letter 'Х' + PositionX 1 + PositionY 169 + Width 14 + Height 22 + XAdvance 16 + +Letter 'Ц' + PositionX 17 + PositionY 169 + Width 16 + Height 22 + XAdvance 18 + +Letter 'Ч' + PositionX 35 + PositionY 169 + Width 14 + Height 22 + XAdvance 16 + +Letter 'Ш' + PositionX 51 + PositionY 169 + Width 19 + Height 22 + XAdvance 21 + +Letter 'Щ' + PositionX 72 + PositionY 169 + Width 23 + Height 22 + XAdvance 25 + +Letter 'Ъ' + PositionX 97 + PositionY 169 + Width 16 + Height 22 + XAdvance 18 + +Letter 'Ы' + PositionX 115 + PositionY 169 + Width 19 + Height 22 + XAdvance 21 + +Letter 'Ь' + PositionX 136 + PositionY 169 + Width 12 + Height 22 + XAdvance 14 + +Letter 'Э' + PositionX 150 + PositionY 169 + Width 13 + Height 22 + XAdvance 15 + +Letter 'Ю' + PositionX 165 + PositionY 169 + Width 20 + Height 22 + XAdvance 22 + +Letter 'Я' + PositionX 187 + PositionY 169 + Width 14 + Height 22 + XAdvance 16 + +Letter 'а' + PositionX 203 + PositionY 169 + Width 15 + Height 22 + XAdvance 17 + +Letter 'б' + PositionX 220 + PositionY 169 + Width 12 + Height 22 + XAdvance 14 + +Letter 'в' + PositionX 234 + PositionY 169 + Width 12 + Height 22 + XAdvance 14 + +Letter 'г' + PositionX 1 + PositionY 193 + Width 11 + Height 22 + XAdvance 13 + +Letter 'д' + PositionX 14 + PositionY 193 + Width 20 + Height 22 + XAdvance 22 + +Letter 'е' + PositionX 36 + PositionY 193 + Width 11 + Height 22 + XAdvance 13 + +Letter 'ж' + PositionX 49 + PositionY 193 + Width 20 + Height 22 + XAdvance 22 + +Letter 'з' + PositionX 71 + PositionY 193 + Width 13 + Height 22 + XAdvance 15 + +Letter 'и' + PositionX 86 + PositionY 193 + Width 14 + Height 22 + XAdvance 16 + +Letter 'й' + PositionX 102 + PositionY 193 + Width 14 + Height 22 + XAdvance 16 + +Letter 'к' + PositionX 118 + PositionY 193 + Width 13 + Height 22 + XAdvance 15 + +Letter 'л' + PositionX 133 + PositionY 193 + Width 15 + Height 22 + XAdvance 17 + +Letter 'м' + PositionX 150 + PositionY 193 + Width 16 + Height 22 + XAdvance 18 + +Letter 'н' + PositionX 168 + PositionY 193 + Width 12 + Height 22 + XAdvance 14 + +Letter 'о' + PositionX 182 + PositionY 193 + Width 15 + Height 22 + XAdvance 17 + +Letter 'п' + PositionX 199 + PositionY 193 + Width 12 + Height 22 + XAdvance 14 + +Letter 'р' + PositionX 213 + PositionY 193 + Width 13 + Height 22 + XAdvance 15 + +Letter 'с' + PositionX 228 + PositionY 193 + Width 10 + Height 22 + XAdvance 12 + +Letter 'т' + PositionX 240 + PositionY 193 + Width 11 + Height 22 + XAdvance 13 + +Letter 'у' + PositionX 1 + PositionY 217 + Width 14 + Height 22 + XAdvance 16 + +Letter 'ф' + PositionX 17 + PositionY 217 + Width 20 + Height 22 + XAdvance 22 + +Letter 'х' + PositionX 39 + PositionY 217 + Width 14 + Height 22 + XAdvance 16 + +Letter 'ц' + PositionX 55 + PositionY 217 + Width 16 + Height 22 + XAdvance 18 + +Letter 'ч' + PositionX 73 + PositionY 217 + Width 14 + Height 22 + XAdvance 16 + +Letter 'ш' + PositionX 89 + PositionY 217 + Width 19 + Height 22 + XAdvance 21 + +Letter 'щ' + PositionX 110 + PositionY 217 + Width 23 + Height 22 + XAdvance 25 + +Letter 'ъ' + PositionX 135 + PositionY 217 + Width 16 + Height 22 + XAdvance 18 + +Letter 'ы' + PositionX 153 + PositionY 217 + Width 19 + Height 22 + XAdvance 21 + +Letter 'ь' + PositionX 174 + PositionY 217 + Width 12 + Height 22 + XAdvance 14 + +Letter 'э' + PositionX 188 + PositionY 217 + Width 13 + Height 22 + XAdvance 15 + +Letter 'ю' + PositionX 203 + PositionY 217 + Width 20 + Height 22 + XAdvance 22 + +Letter 'я' + PositionX 225 + PositionY 217 + Width 14 + Height 22 + XAdvance 16 + diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Big.png b/SDK/Modules/Core/Resources/Core/Fonts/Big.png new file mode 100644 index 0000000000..dd494063bc Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Big.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/BigNumbers.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/BigNumbers.fofnt new file mode 100644 index 0000000000..43e252a0ff --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/BigNumbers.fofnt @@ -0,0 +1,184 @@ +Version 2 +Image BigNumbers.png +YAdvance 0 + +Letter ' ' + PositionX 1 + PositionY 1 + XAdvance 14 + +Letter '0' + PositionX 1 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '1' + PositionX 17 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '2' + PositionX 33 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '3' + PositionX 49 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '4' + PositionX 65 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '5' + PositionX 81 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '6' + PositionX 97 + PositionY 1 + Width 14 + Height 24 + XAdvance 14 + +Letter '7' + PositionX 1 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter '8' + PositionX 17 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter '9' + PositionX 33 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter ':' + PositionX 49 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter ';' + PositionX 65 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter '<' + PositionX 81 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter '@' + PositionX 97 + PositionY 27 + Width 14 + Height 24 + XAdvance 14 + +Letter 'A' + PositionX 1 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'B' + PositionX 17 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'C' + PositionX 33 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'D' + PositionX 49 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'E' + PositionX 65 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'F' + PositionX 81 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'G' + PositionX 97 + PositionY 53 + Width 14 + Height 24 + XAdvance 14 + +Letter 'H' + PositionX 1 + PositionY 79 + Width 14 + Height 24 + XAdvance 14 + +Letter 'I' + PositionX 17 + PositionY 79 + Width 14 + Height 24 + XAdvance 14 + +Letter 'J' + PositionX 33 + PositionY 79 + Width 14 + Height 24 + XAdvance 14 + +Letter 'K' + PositionX 49 + PositionY 79 + Width 14 + Height 24 + XAdvance 14 + diff --git a/SDK/Modules/Core/Resources/Core/Fonts/BigNumbers.png b/SDK/Modules/Core/Resources/Core/Fonts/BigNumbers.png new file mode 100644 index 0000000000..cdef31d282 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/BigNumbers.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall.bmfc b/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall.bmfc new file mode 100644 index 0000000000..fa993cee66 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall.bmfc @@ -0,0 +1,55 @@ +# AngelCode Bitmap Font Generator configuration file +fileVersion=1 + +# font settings +fontName=Courier New +fontFile= +charSet=204 +fontSize=14 +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=1 +paddingUp=1 +paddingRight=1 +paddingLeft=1 +spacingHoriz=0 +spacingVert=0 +useFixedHeight=0 +forceZero=0 + +# output file +outWidth=256 +outHeight=256 +outBitDepth=32 +fontDescFormat=2 +fourChnlPacked=0 +textureFormat=png +textureCompression=0 +alphaChnl=1 +redChnl=4 +greenChnl=3 +blueChnl=3 +invA=0 +invR=0 +invG=0 +invB=0 + +# outline +outlineThickness=0 + +# selected chars +chars=32-126,160-255,1024-1279 + +# imported icon images diff --git a/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall.fnt b/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall.fnt new file mode 100644 index 0000000000..9ae524a185 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall.fnt differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall_0.png b/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall_0.png new file mode 100644 index 0000000000..64eeb5a7eb Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/CourierNewSmall_0.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Default.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Default.fofnt new file mode 100644 index 0000000000..094b311bb5 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Default.fofnt @@ -0,0 +1,25100 @@ +Version 2 +Image Default.png +LineHeight 9 +YAdvance 1 + +Letter '' + PositionX 39 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '' + PositionX 48 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '' + PositionX 57 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '' + PositionX 70 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '' + PositionX 78 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter ' ' + PositionX 98 + PositionY 1 + Width 4 + OffsetY -9 + XAdvance 4 + +Letter '!' + PositionX 104 + PositionY 1 + Width 2 + Height 9 + XAdvance 3 + +Letter '"' + PositionX 108 + PositionY 1 + Width 5 + Height 9 + XAdvance 6 + +Letter '#' + PositionX 115 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '$' + PositionX 124 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '%' + PositionX 132 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '&' + PositionX 141 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter ''' + PositionX 150 + PositionY 1 + Width 2 + Height 9 + XAdvance 3 + +Letter '(' + PositionX 154 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter ')' + PositionX 160 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter '*' + PositionX 166 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '+' + PositionX 175 + PositionY 1 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter ',' + PositionX 183 + PositionY 1 + Width 3 + Height 4 + OffsetY -5 + XAdvance 4 + +Letter '-' + PositionX 188 + PositionY 1 + Width 6 + Height 6 + OffsetY -3 + XAdvance 7 + +Letter '.' + PositionX 196 + PositionY 1 + Width 2 + Height 4 + OffsetY -5 + XAdvance 3 + +Letter '/' + PositionX 200 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '0' + PositionX 209 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '1' + PositionX 217 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter '2' + PositionX 223 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '3' + PositionX 231 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '4' + PositionX 239 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '5' + PositionX 247 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '6' + PositionX 1 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '7' + PositionX 9 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '8' + PositionX 17 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '9' + PositionX 25 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter ':' + PositionX 33 + PositionY 12 + Width 2 + Height 8 + OffsetY -1 + XAdvance 3 + +Letter ';' + PositionX 37 + PositionY 12 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '<' + PositionX 42 + PositionY 12 + Width 5 + Height 9 + XAdvance 6 + +Letter '=' + PositionX 49 + PositionY 12 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter '>' + PositionX 57 + PositionY 12 + Width 5 + Height 9 + XAdvance 6 + +Letter '?' + PositionX 64 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '@' + PositionX 72 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'A' + PositionX 81 + PositionY 12 + Width 8 + Height 9 + XAdvance 9 + +Letter 'B' + PositionX 91 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'C' + PositionX 100 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'D' + PositionX 10 + PositionY 88 + Width 7 + Height 9 + XAdvance 8 + +Letter 'E' + PositionX 117 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'F' + PositionX 125 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'G' + PositionX 133 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'H' + PositionX 142 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'I' + PositionX 24 + PositionY 88 + Width 4 + Height 9 + XAdvance 5 + +Letter 'J' + PositionX 155 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'K' + PositionX 164 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'L' + PositionX 173 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'M' + PositionX 181 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'N' + PositionX 190 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'O' + PositionX 199 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'P' + PositionX 208 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Q' + PositionX 217 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'R' + PositionX 226 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'S' + PositionX 235 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'T' + PositionX 244 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'U' + PositionX 1 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter 'V' + PositionX 10 + PositionY 23 + Width 8 + Height 9 + XAdvance 9 + +Letter 'W' + PositionX 20 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter 'X' + PositionX 29 + PositionY 23 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Y' + PositionX 39 + PositionY 23 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Z' + PositionX 49 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter '[' + PositionX 58 + PositionY 23 + Width 4 + Height 9 + XAdvance 5 + +Letter '\' + PositionX 64 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter ']' + PositionX 73 + PositionY 23 + Width 4 + Height 9 + XAdvance 5 + +Letter '^' + PositionX 79 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter '_' + PositionX 88 + PositionY 23 + Width 7 + Height 3 + OffsetY -6 + XAdvance 8 + +Letter '`' + PositionX 97 + PositionY 23 + Width 3 + Height 9 + XAdvance 4 + +Letter 'a' + PositionX 2 + PositionY 88 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'b' + PositionX 110 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'c' + PositionX 118 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'd' + PositionX 125 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'e' + PositionX 133 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'f' + PositionX 141 + PositionY 23 + Width 5 + Height 9 + XAdvance 6 + +Letter 'g' + PositionX 148 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'h' + PositionX 156 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'i' + PositionX 30 + PositionY 88 + Width 2 + Height 7 + XAdvance 3 + +Letter 'j' + PositionX 34 + PositionY 88 + Width 5 + Height 9 + XAdvance 6 + +Letter 'k' + PositionX 175 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'l' + PositionX 19 + PositionY 88 + Width 3 + Height 9 + XAdvance 4 + +Letter 'm' + PositionX 187 + PositionY 23 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'n' + PositionX 196 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'o' + PositionX 204 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'p' + PositionX 212 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'q' + PositionX 220 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'r' + PositionX 228 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 's' + PositionX 235 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 't' + PositionX 243 + PositionY 23 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'u' + PositionX 1 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'v' + PositionX 9 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'w' + PositionX 17 + PositionY 34 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'x' + PositionX 26 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'y' + PositionX 34 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'z' + PositionX 42 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter '{' + PositionX 50 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '|' + PositionX 58 + PositionY 34 + Width 2 + Height 9 + XAdvance 3 + +Letter '}' + PositionX 62 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '~' + PositionX 70 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '‚' + PositionX 85 + PositionY 34 + Width 3 + Height 4 + OffsetY -5 + XAdvance 4 + +Letter 'ѓ' + PositionX 90 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '„' + PositionX 98 + PositionY 34 + Width 7 + Height 4 + OffsetY -5 + XAdvance 8 + +Letter '…' + PositionX 107 + PositionY 34 + Width 8 + Height 4 + OffsetY -5 + XAdvance 9 + +Letter '†' + PositionX 117 + PositionY 34 + Width 5 + Height 9 + XAdvance 6 + +Letter '‡' + PositionX 124 + PositionY 34 + Width 5 + Height 9 + XAdvance 6 + +Letter '€' + PositionX 131 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '‰' + PositionX 140 + PositionY 34 + Width 10 + Height 8 + OffsetY -1 + XAdvance 11 + +Letter 'Љ' + PositionX 152 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '‹' + PositionX 160 + PositionY 34 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter 'Њ' + PositionX 167 + PositionY 34 + Width 8 + Height 9 + XAdvance 9 + +Letter '‘' + PositionX 185 + PositionY 34 + Width 3 + Height 9 + XAdvance 4 + +Letter '’' + PositionX 190 + PositionY 34 + Width 3 + Height 9 + XAdvance 4 + +Letter '“' + PositionX 195 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '”' + PositionX 204 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '•' + PositionX 213 + PositionY 34 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter '–' + PositionX 220 + PositionY 34 + Width 5 + Height 6 + OffsetY -3 + XAdvance 6 + +Letter '—' + PositionX 227 + PositionY 34 + Width 8 + Height 6 + OffsetY -3 + XAdvance 9 + +Letter '™' + PositionX 1 + PositionY 45 + Width 9 + Height 9 + XAdvance 10 + +Letter 'љ' + PositionX 12 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '›' + PositionX 20 + PositionY 45 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter 'њ' + PositionX 27 + PositionY 45 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'џ' + PositionX 43 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ў' + PositionX 53 + PositionY 45 + Width 2 + Height 9 + XAdvance 3 + +Letter 'ў' + PositionX 57 + PositionY 45 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ј' + PositionX 66 + PositionY 45 + Width 7 + Height 9 + XAdvance 8 + +Letter '¤' + PositionX 75 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Ґ' + PositionX 85 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '¦' + PositionX 93 + PositionY 45 + Width 1 + Height 9 + XAdvance 2 + +Letter '§' + PositionX 96 + PositionY 45 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ё' + PositionX 105 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '©' + PositionX 113 + PositionY 45 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Є' + PositionX 124 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '«' + PositionX 132 + PositionY 45 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter '¬' + PositionX 140 + PositionY 45 + Width 7 + Height 6 + OffsetY -3 + XAdvance 8 + +Letter '­' + PositionX 149 + PositionY 45 + Width 5 + Height 6 + OffsetY -3 + XAdvance 6 + +Letter '®' + PositionX 156 + PositionY 45 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ї' + PositionX 167 + PositionY 45 + Width 8 + Height 9 + XAdvance 9 + +Letter '°' + PositionX 177 + PositionY 45 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter '±' + PositionX 184 + PositionY 45 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'І' + PositionX 192 + PositionY 45 + Width 4 + Height 9 + XAdvance 5 + +Letter 'і' + PositionX 198 + PositionY 45 + Width 3 + Height 9 + XAdvance 4 + +Letter 'ґ' + PositionX 203 + PositionY 45 + Width 4 + Height 9 + XAdvance 5 + +Letter 'µ' + PositionX 209 + PositionY 45 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter '¶' + PositionX 217 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '·' + PositionX 225 + PositionY 45 + Width 2 + Height 6 + OffsetY -3 + XAdvance 3 + +Letter 'ё' + PositionX 229 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '№' + PositionX 237 + PositionY 45 + Width 10 + Height 9 + XAdvance 11 + +Letter 'є' + PositionX 249 + PositionY 45 + Width 4 + Height 9 + XAdvance 5 + +Letter '»' + PositionX 1 + PositionY 56 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'ј' + PositionX 10 + PositionY 56 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Ѕ' + PositionX 20 + PositionY 56 + Width 9 + Height 9 + XAdvance 10 + +Letter 'ѕ' + PositionX 31 + PositionY 56 + Width 9 + Height 9 + XAdvance 10 + +Letter 'ї' + PositionX 42 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'А' + PositionX 50 + PositionY 56 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Б' + PositionX 60 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'В' + PositionX 69 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Г' + PositionX 78 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Д' + PositionX 86 + PositionY 56 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Е' + PositionX 97 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ж' + PositionX 105 + PositionY 56 + Width 12 + Height 9 + XAdvance 13 + +Letter 'З' + PositionX 119 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'И' + PositionX 127 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Й' + PositionX 136 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'К' + PositionX 145 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Л' + PositionX 154 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'М' + PositionX 163 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Н' + PositionX 172 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'О' + PositionX 181 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'П' + PositionX 190 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Р' + PositionX 199 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'С' + PositionX 208 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Т' + PositionX 216 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'У' + PositionX 224 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ф' + PositionX 233 + PositionY 56 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Х' + PositionX 245 + PositionY 56 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Ц' + PositionX 1 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ч' + PositionX 10 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ш' + PositionX 19 + PositionY 67 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Щ' + PositionX 29 + PositionY 67 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ъ' + PositionX 40 + PositionY 67 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ы' + PositionX 51 + PositionY 67 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Ь' + PositionX 63 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Э' + PositionX 72 + PositionY 67 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ю' + PositionX 80 + PositionY 67 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Я' + PositionX 92 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'а' + PositionX 2 + PositionY 88 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'б' + PositionX 109 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'в' + PositionX 117 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'г' + PositionX 125 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'д' + PositionX 132 + PositionY 67 + Width 8 + Height 7 + OffsetY -2 + XAdvance 9 + +Letter 'е' + PositionX 142 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ж' + PositionX 150 + PositionY 67 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'з' + PositionX 162 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'и' + PositionX 169 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'й' + PositionX 177 + PositionY 67 + Width 6 + Height 9 + XAdvance 7 + +Letter 'к' + PositionX 185 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'л' + PositionX 193 + PositionY 67 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'м' + PositionX 202 + PositionY 67 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'н' + PositionX 211 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'о' + PositionX 219 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'п' + PositionX 227 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'р' + PositionX 235 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'с' + PositionX 243 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'т' + PositionX 1 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'у' + PositionX 9 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ф' + PositionX 17 + PositionY 78 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'х' + PositionX 29 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ц' + PositionX 37 + PositionY 78 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'ч' + PositionX 46 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ш' + PositionX 54 + PositionY 78 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'щ' + PositionX 66 + PositionY 78 + Width 11 + Height 7 + OffsetY -2 + XAdvance 12 + +Letter 'ъ' + PositionX 79 + PositionY 78 + Width 8 + Height 7 + OffsetY -2 + XAdvance 9 + +Letter 'ы' + PositionX 89 + PositionY 78 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'ь' + PositionX 100 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'э' + PositionX 108 + PositionY 78 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'ю' + PositionX 115 + PositionY 78 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'я' + PositionX 126 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +# +# Extended letters +# + +Letter ' ' + PositionX 616 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '¡' + PositionX 317 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter '¢' + PositionX 745 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter '£' + PositionX 635 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '¥' + PositionX 665 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter '¨' + PositionX 449 + PositionY 405 + Width 5 + Height 1 + OffsetX 2 + XAdvance 4 + +Letter 'ª' + PositionX 592 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + XAdvance 5 + +Letter '¯' + PositionX 313 + PositionY 410 + Width 8 + Height 1 + OffsetX 2 + OffsetY 2 + XAdvance 7 + +Letter '²' + PositionX 403 + PositionY 386 + Width 5 + Height 4 + OffsetX 2 + XAdvance 4 + +Letter '³' + PositionX 580 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + XAdvance 4 + +Letter '´' + PositionX 685 + PositionY 397 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '¸' + PositionX 708 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 5 + +Letter '¹' + PositionX 624 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + XAdvance 4 + +Letter 'º' + PositionX 574 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + XAdvance 5 + +Letter '¼' + PositionX 323 + PositionY 223 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '½' + PositionX 301 + PositionY 223 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '¾' + PositionX 290 + PositionY 223 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '¿' + PositionX 509 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'À' + PositionX 517 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'Á' + PositionX 527 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'Â' + PositionX 537 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'Ã' + PositionX 547 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'Ä' + PositionX 457 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'Å' + PositionX 539 + PositionY 161 + Width 8 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 8 + +Letter 'Æ' + PositionX 387 + PositionY 202 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ç' + PositionX 689 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'È' + PositionX 284 + PositionY 52 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'É' + PositionX 293 + PositionY 52 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ê' + PositionX 302 + PositionY 52 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ë' + PositionX 698 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'Ì' + PositionX 272 + PositionY 76 + Width 3 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 4 + +Letter 'Í' + PositionX 760 + PositionY 62 + Width 3 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 4 + +Letter 'Î' + PositionX 631 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'Ï' + PositionX 683 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'Ð' + PositionX 477 + PositionY 228 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ñ' + PositionX 311 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ò' + PositionX 697 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'Ó' + PositionX 707 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'Ô' + PositionX 717 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'Õ' + PositionX 327 + PositionY 27 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'Ö' + PositionX 257 + PositionY 99 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter '×' + PositionX 745 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'Ø' + PositionX 507 + PositionY 228 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ù' + PositionX 320 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ú' + PositionX 329 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Û' + PositionX 338 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ü' + PositionX 725 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'Ý' + PositionX 347 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Þ' + PositionX 329 + PositionY 268 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ß' + PositionX 517 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'à' + PositionX 609 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'á' + PositionX 601 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'â' + PositionX 593 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ã' + PositionX 585 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ä' + PositionX 525 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'å' + PositionX 577 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'æ' + PositionX 623 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ç' + PositionX 533 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'è' + PositionX 569 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'é' + PositionX 561 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ê' + PositionX 553 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ë' + PositionX 541 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ì' + PositionX 521 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'í' + PositionX 462 + PositionY 191 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'î' + PositionX 271 + PositionY 195 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ï' + PositionX 586 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ð' + PositionX 549 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ñ' + PositionX 545 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ò' + PositionX 537 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ó' + PositionX 529 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ô' + PositionX 521 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'õ' + PositionX 513 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ö' + PositionX 557 + PositionY 273 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter '÷' + PositionX 437 + PositionY 358 + Width 7 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ø' + PositionX 753 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ù' + PositionX 505 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ú' + PositionX 489 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'û' + PositionX 481 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ü' + PositionX 573 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ý' + PositionX 329 + PositionY 63 + Width 6 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 7 + +Letter 'þ' + PositionX 305 + PositionY 131 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ÿ' + PositionX 369 + PositionY 130 + Width 6 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'Ā' + PositionX 567 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'ā' + PositionX 581 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ă' + PositionX 693 + PositionY 14 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ă' + PositionX 473 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ą' + PositionX 502 + PositionY 85 + Width 9 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ą' + PositionX 446 + PositionY 265 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ć' + PositionX 745 + PositionY 26 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ć' + PositionX 465 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ĉ' + PositionX 257 + PositionY 40 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ĉ' + PositionX 457 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ċ' + PositionX 275 + PositionY 121 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ċ' + PositionX 589 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Č' + PositionX 275 + PositionY 40 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'č' + PositionX 449 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ď' + PositionX 284 + PositionY 40 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ď' + PositionX 677 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Đ' + PositionX 687 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'đ' + PositionX 464 + PositionY 265 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ē' + PositionX 284 + PositionY 121 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ē' + PositionX 597 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ĕ' + PositionX 347 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ĕ' + PositionX 441 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ė' + PositionX 293 + PositionY 121 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ė' + PositionX 605 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ę' + PositionX 307 + PositionY 98 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ę' + PositionX 613 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ě' + PositionX 356 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ě' + PositionX 433 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ĝ' + PositionX 277 + PositionY 28 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ĝ' + PositionX 438 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ğ' + PositionX 733 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ğ' + PositionX 422 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ġ' + PositionX 664 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ġ' + PositionX 545 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ģ' + PositionX 377 + PositionY 97 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ģ' + PositionX 497 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ĥ' + PositionX 365 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ĥ' + PositionX 481 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ħ' + PositionX 400 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ħ' + PositionX 500 + PositionY 264 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ĩ' + PositionX 624 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ĩ' + PositionX 703 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'Ī' + PositionX 571 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ī' + PositionX 579 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'Ĭ' + PositionX 708 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ĭ' + PositionX 432 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'Į' + PositionX 287 + PositionY 154 + Width 3 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'į' + PositionX 257 + PositionY 154 + Width 3 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'İ' + PositionX 282 + PositionY 154 + Width 3 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ı' + PositionX 685 + PositionY 376 + Width 2 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'IJ' + PositionX 267 + PositionY 241 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ij' + PositionX 609 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ĵ' + PositionX 383 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ĵ' + PositionX 659 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'Ķ' + PositionX 320 + PositionY 120 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ķ' + PositionX 617 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ĸ' + PositionX 761 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ĺ' + PositionX 529 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ĺ' + PositionX 743 + PositionY 62 + Width 4 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 4 + +Letter 'Ļ' + PositionX 625 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ļ' + PositionX 308 + PositionY 153 + Width 2 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'Ľ' + PositionX 537 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ľ' + PositionX 544 + PositionY 309 + Width 5 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter 'Ŀ' + PositionX 629 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ŀ' + PositionX 537 + PositionY 309 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'Ł' + PositionX 572 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ł' + PositionX 523 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'Ń' + PositionX 392 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ń' + PositionX 409 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ņ' + PositionX 356 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ņ' + PositionX 637 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ň' + PositionX 401 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ň' + PositionX 401 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ʼn' + PositionX 377 + PositionY 238 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ŋ' + PositionX 599 + PositionY 263 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ŋ' + PositionX 645 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ō' + PositionX 684 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ō' + PositionX 653 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ŏ' + PositionX 607 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ŏ' + PositionX 385 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ő' + PositionX 633 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ő' + PositionX 377 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Œ' + PositionX 664 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'œ' + PositionX 667 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'Ŕ' + PositionX 419 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ŕ' + PositionX 285 + PositionY 195 + Width 5 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 5 + +Letter 'Ŗ' + PositionX 383 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ŗ' + PositionX 481 + PositionY 309 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'Ř' + PositionX 428 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ř' + PositionX 369 + PositionY 182 + Width 6 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'Ś' + PositionX 606 + PositionY 50 + Width 6 + Height 10 + OffsetY 3 + XAdvance 8 + +Letter 'ś' + PositionX 361 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ŝ' + PositionX 353 + PositionY 63 + Width 6 + Height 10 + OffsetY 3 + XAdvance 8 + +Letter 'ŝ' + PositionX 353 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ş' + PositionX 273 + PositionY 143 + Width 6 + Height 9 + XAdvance 8 + +Letter 'ş' + PositionX 661 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Š' + PositionX 385 + PositionY 63 + Width 6 + Height 10 + OffsetY 3 + XAdvance 8 + +Letter 'š' + PositionX 345 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ţ' + PositionX 401 + PositionY 119 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ţ' + PositionX 473 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ť' + PositionX 446 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 6 + +Letter 'ť' + PositionX 531 + PositionY 246 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'Ŧ' + PositionX 558 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'ŧ' + PositionX 474 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'Ũ' + PositionX 455 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ũ' + PositionX 337 + PositionY 184 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ū' + PositionX 410 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ū' + PositionX 669 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ŭ' + PositionX 464 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ŭ' + PositionX 321 + PositionY 184 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ů' + PositionX 473 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ů' + PositionX 313 + PositionY 184 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ű' + PositionX 491 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ű' + PositionX 305 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ų' + PositionX 428 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ų' + PositionX 677 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ŵ' + PositionX 393 + PositionY 14 + Width 11 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 10 + +Letter 'ŵ' + PositionX 472 + PositionY 151 + Width 11 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 10 + +Letter 'Ŷ' + PositionX 509 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ŷ' + PositionX 537 + PositionY 62 + Width 6 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'Ÿ' + PositionX 446 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'Ź' + PositionX 417 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 7 + +Letter 'ź' + PositionX 297 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'Ż' + PositionX 357 + PositionY 97 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 7 + +Letter 'ż' + PositionX 685 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'Ž' + PositionX 427 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 7 + +Letter 'ž' + PositionX 289 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ſ' + PositionX 738 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'ƀ' + PositionX 621 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ɓ' + PositionX 279 + PositionY 223 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ƃ' + PositionX 630 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ƃ' + PositionX 693 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ƅ' + PositionX 557 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ƅ' + PositionX 666 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ɔ' + PositionX 684 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ƈ' + PositionX 738 + PositionY 151 + Width 9 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'ƈ' + PositionX 682 + PositionY 325 + Width 7 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'Ɖ' + PositionX 597 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ɗ' + PositionX 642 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ƌ' + PositionX 756 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ƌ' + PositionX 709 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ƍ' + PositionX 717 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ǝ' + PositionX 356 + PositionY 258 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ə' + PositionX 365 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ɛ' + PositionX 725 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ƒ' + PositionX 473 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ƒ' + PositionX 482 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'Ɠ' + PositionX 749 + PositionY 151 + Width 9 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'Ɣ' + PositionX 407 + PositionY 97 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ƕ' + PositionX 609 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ɩ' + PositionX 387 + PositionY 319 + Width 3 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'Ɨ' + PositionX 453 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'Ƙ' + PositionX 401 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ƙ' + PositionX 741 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ƚ' + PositionX 726 + PositionY 308 + Width 4 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ƛ' + PositionX 749 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ɯ' + PositionX 652 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ɲ' + PositionX 724 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ƞ' + PositionX 757 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ɵ' + PositionX 737 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ơ' + PositionX 604 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'ơ' + PositionX 719 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ƣ' + PositionX 381 + PositionY 86 + Width 9 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'ƣ' + PositionX 464 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ƥ' + PositionX 543 + PositionY 219 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ƥ' + PositionX 409 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ʀ' + PositionX 614 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'Ƨ' + PositionX 491 + PositionY 255 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ƨ' + PositionX 257 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ʃ' + PositionX 257 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ƪ' + PositionX 465 + PositionY 140 + Width 6 + Height 9 + OffsetX 2 + XAdvance 5 + +Letter 'ƫ' + PositionX 690 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ƭ' + PositionX 287 + PositionY 250 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ƭ' + PositionX 418 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'Ʈ' + PositionX 674 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'Ư' + PositionX 532 + PositionY 219 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ư' + PositionX 709 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ʊ' + PositionX 317 + PositionY 250 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ʋ' + PositionX 590 + PositionY 254 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ƴ' + PositionX 337 + PositionY 249 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ƴ' + PositionX 277 + PositionY 99 + Width 8 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ƶ' + PositionX 347 + PositionY 249 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ƶ' + PositionX 446 + PositionY 358 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ʒ' + PositionX 521 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ƹ' + PositionX 433 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ƹ' + PositionX 617 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ƺ' + PositionX 265 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ƻ' + PositionX 273 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ƽ' + PositionX 281 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ƽ' + PositionX 265 + PositionY 376 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ƾ' + PositionX 257 + PositionY 268 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ƿ' + PositionX 289 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ǀ' + PositionX 337 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'ǁ' + PositionX 404 + PositionY 310 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'ǂ' + PositionX 305 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ǃ' + PositionX 342 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'DŽ' + PositionX 305 + PositionY 15 + Width 14 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 14 + +Letter 'Dž' + PositionX 332 + PositionY 152 + Width 13 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 13 + +Letter 'dž' + PositionX 362 + PositionY 152 + Width 12 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 12 + +Letter 'LJ' + PositionX 696 + PositionY 191 + Width 12 + Height 7 + OffsetX 1 + XAdvance 13 + +Letter 'Lj' + PositionX 315 + PositionY 87 + Width 9 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'lj' + PositionX 425 + PositionY 140 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'NJ' + PositionX 568 + PositionY 191 + Width 13 + Height 7 + OffsetX 1 + XAdvance 14 + +Letter 'Nj' + PositionX 565 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 11 + +Letter 'nj' + PositionX 359 + PositionY 86 + Width 9 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'Ǎ' + PositionX 577 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ǎ' + PositionX 449 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ǐ' + PositionX 749 + PositionY 62 + Width 4 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 4 + +Letter 'ǐ' + PositionX 420 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'Ǒ' + PositionX 557 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ǒ' + PositionX 441 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ǔ' + PositionX 626 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǔ' + PositionX 433 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ǖ' + PositionX 635 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǖ' + PositionX 361 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ǘ' + PositionX 644 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǘ' + PositionX 486 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ǚ' + PositionX 653 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǚ' + PositionX 454 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ǜ' + PositionX 662 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǜ' + PositionX 390 + PositionY 51 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ǝ' + PositionX 289 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ǟ' + PositionX 467 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ǟ' + PositionX 337 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ǡ' + PositionX 457 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ǡ' + PositionX 329 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ǣ' + PositionX 361 + PositionY 75 + Width 11 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 11 + +Letter 'ǣ' + PositionX 488 + PositionY 219 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ǥ' + PositionX 499 + PositionY 219 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ǥ' + PositionX 517 + PositionY 228 + Width 8 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ǧ' + PositionX 447 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ǧ' + PositionX 686 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ǩ' + PositionX 680 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǩ' + PositionX 433 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ǫ' + PositionX 694 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ǫ' + PositionX 313 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ǭ' + PositionX 566 + PositionY 1 + Width 8 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ǭ' + PositionX 313 + PositionY 142 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ǯ' + PositionX 358 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ǯ' + PositionX 689 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ǰ' + PositionX 729 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'DZ' + PositionX 537 + PositionY 191 + Width 14 + Height 7 + OffsetX 1 + XAdvance 14 + +Letter 'Dz' + PositionX 553 + PositionY 191 + Width 13 + Height 7 + OffsetX 1 + XAdvance 13 + +Letter 'dz' + PositionX 612 + PositionY 191 + Width 12 + Height 7 + OffsetX 1 + XAdvance 12 + +Letter 'Ǵ' + PositionX 377 + PositionY 27 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ǵ' + PositionX 257 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ƕ' + PositionX 640 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ƿ' + PositionX 491 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'Ǹ' + PositionX 698 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ǹ' + PositionX 425 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ǻ' + PositionX 337 + PositionY 27 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ǻ' + PositionX 297 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ǽ' + PositionX 406 + PositionY 14 + Width 11 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 11 + +Letter 'ǽ' + PositionX 716 + PositionY 151 + Width 9 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 10 + +Letter 'Ǿ' + PositionX 287 + PositionY 28 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ǿ' + PositionX 313 + PositionY 174 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȁ' + PositionX 267 + PositionY 28 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ȁ' + PositionX 417 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȃ' + PositionX 257 + PositionY 28 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ȃ' + PositionX 409 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȅ' + PositionX 707 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȅ' + PositionX 401 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȇ' + PositionX 716 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȇ' + PositionX 393 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȉ' + PositionX 673 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ȉ' + PositionX 292 + PositionY 195 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'Ȋ' + PositionX 652 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ȋ' + PositionX 689 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'Ȍ' + PositionX 703 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ȍ' + PositionX 385 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȏ' + PositionX 663 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ȏ' + PositionX 377 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȑ' + PositionX 734 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȑ' + PositionX 369 + PositionY 172 + Width 6 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'Ȓ' + PositionX 743 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȓ' + PositionX 278 + PositionY 195 + Width 5 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 5 + +Letter 'Ȕ' + PositionX 590 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȕ' + PositionX 361 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ȗ' + PositionX 727 + PositionY 26 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȗ' + PositionX 353 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ș' + PositionX 737 + PositionY 129 + Width 6 + Height 9 + XAdvance 8 + +Letter 'ș' + PositionX 321 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ț' + PositionX 500 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ț' + PositionX 641 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ȝ' + PositionX 721 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ȝ' + PositionX 313 + PositionY 313 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ȟ' + PositionX 338 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ȟ' + PositionX 446 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ƞ' + PositionX 509 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ȡ' + PositionX 326 + PositionY 86 + Width 9 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'Ȣ' + PositionX 273 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ȣ' + PositionX 329 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ȥ' + PositionX 559 + PositionY 161 + Width 8 + Height 8 + OffsetX 2 + XAdvance 7 + +Letter 'ȥ' + PositionX 466 + PositionY 327 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ȧ' + PositionX 554 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'ȧ' + PositionX 337 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ȩ' + PositionX 518 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ȩ' + PositionX 345 + PositionY 285 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ȫ' + PositionX 387 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ȫ' + PositionX 713 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ȭ' + PositionX 367 + PositionY 27 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ȭ' + PositionX 526 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ȯ' + PositionX 524 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ȯ' + PositionX 353 + PositionY 285 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ȱ' + PositionX 317 + PositionY 27 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ȱ' + PositionX 705 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ȳ' + PositionX 527 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ȳ' + PositionX 697 + PositionY 129 + Width 6 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ȴ' + PositionX 689 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'ȵ' + PositionX 565 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ȶ' + PositionX 491 + PositionY 264 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'ȷ' + PositionX 281 + PositionY 322 + Width 4 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ȸ' + PositionX 748 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ȹ' + PositionX 617 + PositionY 209 + Width 10 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 11 + +Letter 'Ⱥ' + PositionX 444 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ȼ' + PositionX 554 + PositionY 264 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ȼ' + PositionX 633 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ƚ' + PositionX 590 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ⱦ' + PositionX 587 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 7 + +Letter 'ȿ' + PositionX 361 + PositionY 285 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɀ' + PositionX 617 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ɂ' + PositionX 369 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ɂ' + PositionX 709 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ƀ' + PositionX 727 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ʉ' + PositionX 477 + PositionY 219 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ʌ' + PositionX 455 + PositionY 220 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ɇ' + PositionX 545 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'ɇ' + PositionX 577 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ɉ' + PositionX 594 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ɉ' + PositionX 676 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ɋ' + PositionX 513 + PositionY 85 + Width 9 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ɋ' + PositionX 603 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ɍ' + PositionX 422 + PositionY 220 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ɍ' + PositionX 297 + PositionY 376 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'Ɏ' + PositionX 367 + PositionY 220 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ɏ' + PositionX 729 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ɐ' + PositionX 305 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɑ' + PositionX 313 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɒ' + PositionX 567 + PositionY 356 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɓ' + PositionX 401 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ɔ' + PositionX 321 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɕ' + PositionX 329 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɖ' + PositionX 599 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ɗ' + PositionX 446 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ɘ' + PositionX 353 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ə' + PositionX 369 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɚ' + PositionX 579 + PositionY 342 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ɛ' + PositionX 385 + PositionY 373 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ɜ' + PositionX 457 + PositionY 365 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ɝ' + PositionX 634 + PositionY 341 + Width 9 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ɞ' + PositionX 601 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɟ' + PositionX 752 + PositionY 299 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ɠ' + PositionX 626 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ɡ' + PositionX 377 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɢ' + PositionX 593 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɣ' + PositionX 385 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɤ' + PositionX 679 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ɥ' + PositionX 409 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɦ' + PositionX 497 + PositionY 300 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ɧ' + PositionX 353 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ɨ' + PositionX 762 + PositionY 308 + Width 4 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ɩ' + PositionX 493 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ɪ' + PositionX 487 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ɫ' + PositionX 656 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ɬ' + PositionX 585 + PositionY 299 + Width 6 + Height 7 + OffsetX 2 + XAdvance 5 + +Letter 'ɭ' + PositionX 757 + PositionY 140 + Width 4 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'ɮ' + PositionX 635 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ɯ' + PositionX 612 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ɰ' + PositionX 739 + PositionY 209 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ɱ' + PositionX 750 + PositionY 209 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ɲ' + PositionX 266 + PositionY 268 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ɳ' + PositionX 293 + PositionY 268 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɴ' + PositionX 281 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɵ' + PositionX 273 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ɶ' + PositionX 569 + PositionY 349 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ɷ' + PositionX 559 + PositionY 349 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ɸ' + PositionX 604 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ɹ' + PositionX 667 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ɺ' + PositionX 600 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + XAdvance 5 + +Letter 'ɻ' + PositionX 701 + PositionY 272 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ɼ' + PositionX 432 + PositionY 310 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ɽ' + PositionX 425 + PositionY 310 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ɾ' + PositionX 432 + PositionY 379 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ɿ' + PositionX 411 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ʀ' + PositionX 409 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʁ' + PositionX 417 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʂ' + PositionX 297 + PositionY 286 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʃ' + PositionX 494 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'ʄ' + PositionX 655 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'ʅ' + PositionX 376 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ʆ' + PositionX 653 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ʇ' + PositionX 327 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ʈ' + PositionX 613 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'ʉ' + PositionX 579 + PositionY 349 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ʊ' + PositionX 433 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʋ' + PositionX 441 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʌ' + PositionX 495 + PositionY 357 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʍ' + PositionX 512 + PositionY 342 + Width 10 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 9 + +Letter 'ʎ' + PositionX 393 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʏ' + PositionX 503 + PositionY 357 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʐ' + PositionX 427 + PositionY 238 + Width 8 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ʑ' + PositionX 657 + PositionY 317 + Width 9 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ʒ' + PositionX 437 + PositionY 256 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ʓ' + PositionX 626 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ʔ' + PositionX 433 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʕ' + PositionX 441 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʖ' + PositionX 449 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʗ' + PositionX 457 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʘ' + PositionX 437 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ʙ' + PositionX 511 + PositionY 356 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʚ' + PositionX 519 + PositionY 356 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʛ' + PositionX 407 + PositionY 328 + Width 8 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'ʜ' + PositionX 543 + PositionY 356 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʝ' + PositionX 660 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ʞ' + PositionX 473 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ʟ' + PositionX 292 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ʠ' + PositionX 678 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ʡ' + PositionX 481 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʢ' + PositionX 489 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʣ' + PositionX 293 + PositionY 214 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ʤ' + PositionX 392 + PositionY 86 + Width 9 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'ʥ' + PositionX 347 + PositionY 152 + Width 13 + Height 8 + OffsetX 1 + XAdvance 13 + +Letter 'ʦ' + PositionX 389 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ʧ' + PositionX 687 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ʨ' + PositionX 257 + PositionY 232 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ʩ' + PositionX 709 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ʪ' + PositionX 457 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ʫ' + PositionX 648 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ʬ' + PositionX 292 + PositionY 313 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'ʭ' + PositionX 497 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ʮ' + PositionX 467 + PositionY 237 + Width 8 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ʯ' + PositionX 521 + PositionY 210 + Width 10 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ʰ' + PositionX 523 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ʱ' + PositionX 565 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ʲ' + PositionX 294 + PositionY 347 + Width 3 + Height 6 + OffsetX 2 + XAdvance 3 + +Letter 'ʳ' + PositionX 282 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ʴ' + PositionX 726 + PositionY 387 + Width 4 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ʵ' + PositionX 431 + PositionY 386 + Width 5 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ʶ' + PositionX 690 + PositionY 387 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ʷ' + PositionX 284 + PositionY 396 + Width 7 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ʸ' + PositionX 538 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ʹ' + PositionX 421 + PositionY 397 + Width 2 + Height 3 + OffsetX 1 + XAdvance 3 + +Letter 'ʺ' + PositionX 461 + PositionY 392 + Width 5 + Height 3 + OffsetX 1 + XAdvance 6 + +Letter 'ʻ' + PositionX 758 + PositionY 387 + Width 3 + Height 3 + OffsetX 1 + XAdvance 4 + +Letter 'ʼ' + PositionX 297 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + XAdvance 4 + +Letter 'ʽ' + PositionX 257 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + XAdvance 4 + +Letter 'ʾ' + PositionX 738 + PositionY 387 + Width 3 + Height 3 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ʿ' + PositionX 267 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ˀ' + PositionX 481 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ˁ' + PositionX 505 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter '˂' + PositionX 695 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '˃' + PositionX 703 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '˄' + PositionX 711 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '˅' + PositionX 743 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'ˆ' + PositionX 380 + PositionY 406 + Width 4 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter 'ˇ' + PositionX 290 + PositionY 406 + Width 4 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter 'ˈ' + PositionX 707 + PositionY 396 + Width 2 + Height 2 + OffsetY 1 + XAdvance 4 + +Letter 'ˉ' + PositionX 762 + PositionY 396 + Width 5 + Height 1 + OffsetX 2 + XAdvance 4 + +Letter 'ˊ' + PositionX 465 + PositionY 401 + Width 3 + Height 2 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ˋ' + PositionX 460 + PositionY 401 + Width 3 + Height 2 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ˌ' + PositionX 703 + PositionY 396 + Width 2 + Height 2 + OffsetY -7 + XAdvance 4 + +Letter 'ˍ' + PositionX 456 + PositionY 405 + Width 5 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter 'ˎ' + PositionX 445 + PositionY 401 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter 'ˏ' + PositionX 440 + PositionY 401 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter 'ː' + PositionX 594 + PositionY 377 + Width 3 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ˑ' + PositionX 491 + PositionY 404 + Width 3 + Height 1 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter '˒' + PositionX 272 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '˓' + PositionX 753 + PositionY 387 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '˔' + PositionX 748 + PositionY 387 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '˕' + PositionX 743 + PositionY 387 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '˖' + PositionX 407 + PositionY 397 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '˗' + PositionX 435 + PositionY 406 + Width 5 + Height 1 + OffsetX 2 + OffsetY -5 + XAdvance 4 + +Letter '˘' + PositionX 743 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter '˙' + PositionX 626 + PositionY 402 + Width 3 + Height 1 + OffsetX 1 + XAdvance 4 + +Letter '˚' + PositionX 610 + PositionY 398 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '˛' + PositionX 605 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˜' + PositionX 757 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter '˝' + PositionX 344 + PositionY 406 + Width 4 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '˞' + PositionX 638 + PositionY 394 + Width 5 + Height 2 + OffsetX 2 + OffsetY -3 + XAdvance 4 + +Letter '˟' + PositionX 454 + PositionY 392 + Width 5 + Height 3 + OffsetX 2 + XAdvance 4 + +Letter 'ˠ' + PositionX 508 + PositionY 385 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ˡ' + PositionX 619 + PositionY 376 + Width 3 + Height 5 + OffsetX 2 + XAdvance 2 + +Letter 'ˢ' + PositionX 612 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ˣ' + PositionX 600 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ˤ' + PositionX 529 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter '˥' + PositionX 263 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter '˦' + PositionX 756 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter '˧' + PositionX 299 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter '˨' + PositionX 311 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter '˩' + PositionX 750 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter '˪' + PositionX 639 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '˫' + PositionX 629 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter 'ˬ' + PositionX 398 + PositionY 403 + Width 4 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 4 + +Letter '˭' + PositionX 645 + PositionY 394 + Width 5 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ˮ' + PositionX 447 + PositionY 392 + Width 5 + Height 3 + OffsetX 1 + XAdvance 6 + +Letter '˯' + PositionX 415 + PositionY 402 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˰' + PositionX 555 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˱' + PositionX 545 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˲' + PositionX 500 + PositionY 400 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˳' + PositionX 480 + PositionY 400 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˴' + PositionX 510 + PositionY 400 + Width 3 + Height 2 + OffsetX 1 + OffsetY -4 + XAdvance 4 + +Letter '˵' + PositionX 701 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + OffsetY -4 + XAdvance 4 + +Letter '˶' + PositionX 715 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + OffsetY -4 + XAdvance 4 + +Letter '˷' + PositionX 722 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 4 + +Letter '˸' + PositionX 654 + PositionY 376 + Width 3 + Height 5 + OffsetX 1 + XAdvance 4 + +Letter '˹' + PositionX 595 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '˺' + PositionX 764 + PositionY 392 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '˻' + PositionX 410 + PositionY 402 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˼' + PositionX 530 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter '˽' + PositionX 558 + PositionY 395 + Width 6 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 5 + +Letter '˾' + PositionX 566 + PositionY 395 + Width 6 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 5 + +Letter '˿' + PositionX 732 + PositionY 387 + Width 4 + Height 3 + OffsetX 1 + OffsetY -6 + XAdvance 4 + +Letter '̀' + PositionX 615 + PositionY 398 + Width 3 + Height 2 + OffsetX 4 + OffsetY 3 + XAdvance 1 + +Letter '́' + PositionX 435 + PositionY 402 + Width 3 + Height 2 + OffsetX 3 + OffsetY 3 + XAdvance 1 + +Letter '̂' + PositionX 450 + PositionY 401 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̃' + PositionX 284 + PositionY 406 + Width 4 + Height 2 + OffsetX 6 + OffsetY 3 + XAdvance 1 + +Letter '̄' + PositionX 611 + PositionY 402 + Width 3 + Height 1 + OffsetX 3 + XAdvance 1 + +Letter '̅' + PositionX 333 + PositionY 410 + Width 8 + Height 1 + OffsetX 5 + OffsetY 2 + XAdvance 1 + +Letter '̆' + PositionX 455 + PositionY 401 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̇' + PositionX 293 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̈' + PositionX 591 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + XAdvance 1 + +Letter '̉' + PositionX 470 + PositionY 401 + Width 3 + Height 2 + OffsetX 4 + OffsetY 3 + XAdvance 1 + +Letter '̊' + PositionX 352 + PositionY 401 + Width 3 + Height 3 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter '̋' + PositionX 356 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̌' + PositionX 540 + PositionY 399 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̍' + PositionX 704 + PositionY 403 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̎' + PositionX 430 + PositionY 402 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̏' + PositionX 278 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̐' + PositionX 287 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY 2 + XAdvance 1 + +Letter '̑' + PositionX 392 + PositionY 405 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '̒' + PositionX 767 + PositionY 242 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̓' + PositionX 766 + PositionY 305 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̔' + PositionX 706 + PositionY 403 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̕' + PositionX 718 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̖' + PositionX 720 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̗' + PositionX 722 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̘' + PositionX 726 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̙' + PositionX 728 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̚' + PositionX 598 + PositionY 395 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '̛' + PositionX 392 + PositionY 400 + Width 3 + Height 3 + OffsetX 2 + XAdvance 1 + +Letter '̜' + PositionX 730 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̝' + PositionX 505 + PositionY 400 + Width 3 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '̞' + PositionX 520 + PositionY 400 + Width 3 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '̟' + PositionX 525 + PositionY 399 + Width 3 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '̠' + PositionX 506 + PositionY 404 + Width 3 + Height 1 + OffsetX 3 + OffsetY -8 + XAdvance 1 + +Letter '̡' + PositionX 732 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̢' + PositionX 535 + PositionY 399 + Width 3 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '̣' + PositionX 767 + PositionY 239 + Width 0 + Height 1 + OffsetX 5 + OffsetY -8 + XAdvance 1 + +Letter '̤' + PositionX 511 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '̥' + PositionX 734 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̦' + PositionX 736 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̧' + PositionX 738 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̨' + PositionX 740 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̩' + PositionX 746 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̪' + PositionX 590 + PositionY 395 + Width 6 + Height 2 + OffsetX 4 + OffsetY -7 + XAdvance 1 + +Letter '̫' + PositionX 338 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̬' + PositionX 565 + PositionY 399 + Width 3 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̭' + PositionX 570 + PositionY 399 + Width 3 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̮' + PositionX 575 + PositionY 399 + Width 3 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̯' + PositionX 580 + PositionY 399 + Width 3 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̰' + PositionX 296 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̱' + PositionX 516 + PositionY 404 + Width 3 + Height 1 + OffsetX 3 + OffsetY -8 + XAdvance 1 + +Letter '̲' + PositionX 353 + PositionY 410 + Width 8 + Height 1 + OffsetX 5 + OffsetY -8 + XAdvance 1 + +Letter '̳' + PositionX 526 + PositionY 403 + Width 3 + Height 1 + OffsetX 3 + OffsetY -8 + XAdvance 1 + +Letter '̴' + PositionX 332 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY -4 + XAdvance 1 + +Letter '̵' + PositionX 531 + PositionY 403 + Width 3 + Height 1 + OffsetX 3 + OffsetY -5 + XAdvance 1 + +Letter '̶' + PositionX 343 + PositionY 410 + Width 8 + Height 1 + OffsetX 5 + OffsetY -5 + XAdvance 1 + +Letter '̷' + PositionX 265 + PositionY 369 + Width 6 + Height 5 + OffsetX 4 + OffsetY -2 + XAdvance 1 + +Letter '̸' + PositionX 392 + PositionY 319 + Width 3 + Height 7 + OffsetX 2 + XAdvance 1 + +Letter '̹' + PositionX 748 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̺' + PositionX 542 + PositionY 395 + Width 6 + Height 2 + OffsetX 4 + OffsetY -7 + XAdvance 1 + +Letter '̻' + PositionX 750 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̼' + PositionX 308 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '̽' + PositionX 752 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̾' + PositionX 754 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̿' + PositionX 458 + PositionY 397 + Width 8 + Height 2 + OffsetX 5 + OffsetY 3 + XAdvance 1 + +Letter '̀' + PositionX 515 + PositionY 400 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '́' + PositionX 620 + PositionY 398 + Width 3 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 1 + +Letter '͂' + PositionX 750 + PositionY 392 + Width 5 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '̓' + PositionX 756 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '̈́' + PositionX 614 + PositionY 394 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter 'ͅ' + PositionX 758 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͆' + PositionX 550 + PositionY 395 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '͇' + PositionX 411 + PositionY 406 + Width 6 + Height 1 + OffsetX 4 + OffsetY -8 + XAdvance 1 + +Letter '͈' + PositionX 625 + PositionY 398 + Width 3 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '͉' + PositionX 760 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͊' + PositionX 257 + PositionY 406 + Width 5 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '͋' + PositionX 424 + PositionY 386 + Width 5 + Height 4 + OffsetX 4 + OffsetY 3 + XAdvance 1 + +Letter '͌' + PositionX 501 + PositionY 385 + Width 5 + Height 4 + OffsetX 4 + OffsetY 3 + XAdvance 1 + +Letter '͍' + PositionX 404 + PositionY 403 + Width 4 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '͎' + PositionX 699 + PositionY 396 + Width 2 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '͏' + PositionX 357 + PositionY 27 + Width 8 + Height 10 + OffsetX 5 + OffsetY 3 + XAdvance 1 + +Letter '͐' + PositionX 762 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͑' + PositionX 764 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͒' + PositionX 357 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY 2 + XAdvance 1 + +Letter '͓' + PositionX 766 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͔' + PositionX 257 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͕' + PositionX 261 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͖' + PositionX 729 + PositionY 392 + Width 5 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter '͗' + PositionX 265 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͘' + PositionX 269 + PositionY 416 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter '͙' + PositionX 645 + PositionY 398 + Width 3 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '͚' + PositionX 650 + PositionY 398 + Width 3 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '͛' + PositionX 271 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '͜' + PositionX 468 + PositionY 397 + Width 8 + Height 2 + OffsetX 2 + OffsetY -7 + XAdvance 1 + +Letter '͝' + PositionX 448 + PositionY 397 + Width 8 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 1 + +Letter '͞' + PositionX 303 + PositionY 410 + Width 8 + Height 1 + OffsetX 3 + XAdvance 1 + +Letter '͟' + PositionX 393 + PositionY 409 + Width 8 + Height 1 + OffsetX 3 + OffsetY -8 + XAdvance 1 + +Letter '͠' + PositionX 437 + PositionY 397 + Width 9 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 1 + +Letter '͡' + PositionX 478 + PositionY 396 + Width 8 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 1 + +Letter '͢' + PositionX 488 + PositionY 396 + Width 8 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter 'ͣ' + PositionX 307 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ͤ' + PositionX 312 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ͥ' + PositionX 273 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ͦ' + PositionX 317 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ͧ' + PositionX 322 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ͨ' + PositionX 327 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ͩ' + PositionX 639 + PositionY 376 + Width 3 + Height 5 + OffsetX 3 + XAdvance 1 + +Letter 'ͪ' + PositionX 634 + PositionY 376 + Width 3 + Height 5 + OffsetX 3 + XAdvance 1 + +Letter 'ͫ' + PositionX 349 + PositionY 396 + Width 6 + Height 3 + OffsetX 4 + OffsetY -2 + XAdvance 1 + +Letter 'ͬ' + PositionX 275 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ͭ' + PositionX 277 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ͮ' + PositionX 337 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ͯ' + PositionX 342 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY -2 + XAdvance 1 + +Letter 'ʹ' + PositionX 665 + PositionY 398 + Width 3 + Height 2 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter '͵' + PositionX 670 + PositionY 397 + Width 3 + Height 2 + OffsetX 1 + OffsetY -7 + XAdvance 4 + +Letter 'ͺ' + PositionX 601 + PositionY 403 + Width 3 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 4 + +Letter 'ͻ' + PositionX 663 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ͼ' + PositionX 655 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ͽ' + PositionX 647 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter ';' + PositionX 382 + PositionY 319 + Width 3 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter '΄' + PositionX 675 + PositionY 397 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '΅' + PositionX 507 + PositionY 396 + Width 7 + Height 2 + OffsetX 2 + XAdvance 6 + +Letter 'Ά' + PositionX 477 + PositionY 237 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '·' + PositionX 596 + PositionY 403 + Width 3 + Height 1 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'Έ' + PositionX 557 + PositionY 209 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ή' + PositionX 389 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ί' + PositionX 433 + PositionY 301 + Width 6 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'Ό' + PositionX 662 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ύ' + PositionX 341 + PositionY 213 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ώ' + PositionX 651 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ΐ' + PositionX 529 + PositionY 171 + Width 6 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'Α' + PositionX 487 + PositionY 237 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Β' + PositionX 365 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Γ' + PositionX 449 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Δ' + PositionX 378 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ε' + PositionX 374 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ζ' + PositionX 497 + PositionY 237 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Η' + PositionX 392 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Θ' + PositionX 507 + PositionY 237 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ι' + PositionX 377 + PositionY 319 + Width 3 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'Κ' + PositionX 410 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Λ' + PositionX 675 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Μ' + PositionX 695 + PositionY 209 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ν' + PositionX 437 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ξ' + PositionX 625 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ο' + PositionX 517 + PositionY 237 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Π' + PositionX 482 + PositionY 273 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ρ' + PositionX 491 + PositionY 273 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Σ' + PositionX 673 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Τ' + PositionX 500 + PositionY 273 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'Υ' + PositionX 495 + PositionY 246 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Φ' + PositionX 504 + PositionY 246 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Χ' + PositionX 639 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ψ' + PositionX 657 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ω' + PositionX 527 + PositionY 237 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ϊ' + PositionX 515 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'Ϋ' + PositionX 347 + PositionY 108 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ά' + PositionX 537 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'έ' + PositionX 545 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ή' + PositionX 601 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ί' + PositionX 414 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ΰ' + PositionX 553 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'α' + PositionX 639 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'β' + PositionX 385 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'γ' + PositionX 537 + PositionY 237 + Width 8 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'δ' + PositionX 273 + PositionY 304 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ε' + PositionX 513 + PositionY 363 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ζ' + PositionX 449 + PositionY 140 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'η' + PositionX 329 + PositionY 304 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'θ' + PositionX 530 + PositionY 309 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'ι' + PositionX 765 + PositionY 369 + Width 2 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'κ' + PositionX 759 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'λ' + PositionX 547 + PositionY 237 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'μ' + PositionX 265 + PositionY 304 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ν' + PositionX 293 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ξ' + PositionX 662 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 5 + +Letter 'ο' + PositionX 473 + PositionY 364 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'π' + PositionX 488 + PositionY 343 + Width 10 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 9 + +Letter 'ρ' + PositionX 617 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ς' + PositionX 761 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'σ' + PositionX 275 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'τ' + PositionX 599 + PositionY 355 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'υ' + PositionX 607 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'φ' + PositionX 567 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'χ' + PositionX 657 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ψ' + PositionX 577 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ω' + PositionX 669 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ϊ' + PositionX 348 + PositionY 312 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ϋ' + PositionX 641 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ό' + PositionX 681 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ύ' + PositionX 641 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ώ' + PositionX 429 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ϐ' + PositionX 633 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ϑ' + PositionX 587 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ϒ' + PositionX 607 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ϓ' + PositionX 305 + PositionY 214 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ϔ' + PositionX 644 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ϕ' + PositionX 634 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ϖ' + PositionX 609 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ϗ' + PositionX 466 + PositionY 228 + Width 9 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'Ϙ' + PositionX 624 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ϙ' + PositionX 617 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ϛ' + PositionX 473 + PositionY 273 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ϛ' + PositionX 569 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ϝ' + PositionX 561 + PositionY 300 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ϝ' + PositionX 649 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ϟ' + PositionX 568 + PositionY 200 + Width 10 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ϟ' + PositionX 553 + PositionY 300 + Width 6 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'Ϡ' + PositionX 370 + PositionY 86 + Width 9 + Height 9 + OffsetX 2 + XAdvance 9 + +Letter 'ϡ' + PositionX 265 + PositionY 143 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ϣ' + PositionX 281 + PositionY 88 + Width 10 + Height 9 + OffsetX 1 + XAdvance 11 + +Letter 'ϣ' + PositionX 466 + PositionY 219 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'Ϥ' + PositionX 446 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ϥ' + PositionX 537 + PositionY 300 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ϧ' + PositionX 374 + PositionY 108 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ϧ' + PositionX 383 + PositionY 359 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ϩ' + PositionX 428 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ϩ' + PositionX 419 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ϫ' + PositionX 617 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ϫ' + PositionX 339 + PositionY 355 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ϭ' + PositionX 401 + PositionY 274 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ϭ' + PositionX 623 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ϯ' + PositionX 383 + PositionY 274 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'ϯ' + PositionX 473 + PositionY 300 + Width 6 + Height 7 + OffsetX 2 + XAdvance 5 + +Letter 'ϰ' + PositionX 744 + PositionY 341 + Width 9 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ϱ' + PositionX 457 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ϲ' + PositionX 631 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ϳ' + PositionX 733 + PositionY 140 + Width 4 + Height 9 + OffsetX 2 + XAdvance 5 + +Letter 'ϴ' + PositionX 627 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ϵ' + PositionX 348 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter '϶' + PositionX 334 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ϸ' + PositionX 356 + PositionY 276 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ϸ' + PositionX 369 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ϲ' + PositionX 347 + PositionY 276 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ϻ' + PositionX 637 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ϻ' + PositionX 338 + PositionY 276 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ϼ' + PositionX 329 + PositionY 277 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ͻ' + PositionX 320 + PositionY 277 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ͼ' + PositionX 311 + PositionY 277 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ͽ' + PositionX 302 + PositionY 277 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ѐ' + PositionX 563 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ђ' + PositionX 269 + PositionY 214 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ѓ' + PositionX 554 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ћ' + PositionX 437 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ќ' + PositionX 545 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ѝ' + PositionX 536 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Џ' + PositionX 392 + PositionY 108 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ѐ' + PositionX 393 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ђ' + PositionX 428 + PositionY 107 + Width 7 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ћ' + PositionX 563 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ќ' + PositionX 417 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ѝ' + PositionX 425 + PositionY 182 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ѡ' + PositionX 583 + PositionY 191 + Width 13 + Height 7 + OffsetX 1 + XAdvance 14 + +Letter 'ѡ' + PositionX 476 + PositionY 343 + Width 10 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 9 + +Letter 'Ѣ' + PositionX 449 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'ѣ' + PositionX 687 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ѥ' + PositionX 425 + PositionY 211 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ѥ' + PositionX 619 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'Ѧ' + PositionX 510 + PositionY 219 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ѧ' + PositionX 425 + PositionY 365 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ѩ' + PositionX 497 + PositionY 210 + Width 10 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'ѩ' + PositionX 689 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'Ѫ' + PositionX 697 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ѫ' + PositionX 499 + PositionY 350 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'Ѭ' + PositionX 426 + PositionY 202 + Width 11 + Height 7 + OffsetX 1 + XAdvance 12 + +Letter 'ѭ' + PositionX 500 + PositionY 342 + Width 10 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 11 + +Letter 'Ѯ' + PositionX 716 + PositionY 1 + Width 6 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'ѯ' + PositionX 569 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'Ѱ' + PositionX 707 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ѱ' + PositionX 717 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'Ѳ' + PositionX 727 + PositionY 236 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ѳ' + PositionX 393 + PositionY 365 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ѵ' + PositionX 356 + PositionY 220 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ѵ' + PositionX 439 + PositionY 351 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ѷ' + PositionX 504 + PositionY 14 + Width 9 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 9 + +Letter 'ѷ' + PositionX 519 + PositionY 161 + Width 8 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 7 + +Letter 'Ѹ' + PositionX 413 + PositionY 74 + Width 11 + Height 9 + OffsetX 1 + XAdvance 12 + +Letter 'ѹ' + PositionX 509 + PositionY 210 + Width 10 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 11 + +Letter 'Ѻ' + PositionX 469 + PositionY 85 + Width 9 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 9 + +Letter 'ѻ' + PositionX 612 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + OffsetY -1 + XAdvance 7 + +Letter 'Ѽ' + PositionX 336 + PositionY 15 + Width 13 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 14 + +Letter 'ѽ' + PositionX 293 + PositionY 87 + Width 9 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 10 + +Letter 'Ѿ' + PositionX 351 + PositionY 15 + Width 13 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 14 + +Letter 'ѿ' + PositionX 608 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 9 + +Letter 'Ҁ' + PositionX 437 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ҁ' + PositionX 433 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '҂' + PositionX 392 + PositionY 256 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '҃' + PositionX 347 + PositionY 401 + Width 3 + Height 3 + OffsetX 3 + OffsetY 2 + XAdvance 1 + +Letter '҄' + PositionX 560 + PositionY 399 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '҅' + PositionX 742 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '҆' + PositionX 744 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '҇' + PositionX 498 + PositionY 396 + Width 7 + Height 2 + OffsetX 4 + OffsetY 2 + XAdvance 1 + +Letter '҈' + PositionX 366 + PositionY 15 + Width 12 + Height 10 + OffsetX 7 + OffsetY 1 + XAdvance 1 + +Letter '҉' + PositionX 257 + PositionY 1 + Width 11 + Height 12 + OffsetX 6 + OffsetY 3 + XAdvance 1 + +Letter 'Ҋ' + PositionX 290 + PositionY 1 + Width 8 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ҋ' + PositionX 455 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ҍ' + PositionX 747 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ҍ' + PositionX 689 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ҏ' + PositionX 311 + PositionY 268 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ҏ' + PositionX 417 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ғ' + PositionX 347 + PositionY 267 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ғ' + PositionX 353 + PositionY 369 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'Ҕ' + PositionX 491 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ҕ' + PositionX 385 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Җ' + PositionX 387 + PositionY 75 + Width 11 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'җ' + PositionX 613 + PositionY 317 + Width 9 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'Ҙ' + PositionX 721 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ҙ' + PositionX 761 + PositionY 263 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Қ' + PositionX 500 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'қ' + PositionX 497 + PositionY 334 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ҝ' + PositionX 365 + PositionY 265 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ҝ' + PositionX 289 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ҟ' + PositionX 757 + PositionY 236 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ҟ' + PositionX 401 + PositionY 265 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter 'Ҡ' + PositionX 473 + PositionY 210 + Width 10 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ҡ' + PositionX 449 + PositionY 351 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ң' + PositionX 397 + PositionY 97 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ң' + PositionX 529 + PositionY 326 + Width 7 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ҥ' + PositionX 281 + PositionY 214 + Width 10 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'ҥ' + PositionX 469 + PositionY 350 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ҧ' + PositionX 439 + PositionY 74 + Width 11 + Height 9 + OffsetX 1 + XAdvance 12 + +Letter 'ҧ' + PositionX 455 + PositionY 229 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'Ҩ' + PositionX 257 + PositionY 250 + Width 8 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ҩ' + PositionX 739 + PositionY 348 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ҫ' + PositionX 509 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ҫ' + PositionX 337 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ҭ' + PositionX 337 + PositionY 97 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ҭ' + PositionX 691 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ү' + PositionX 321 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ү' + PositionX 313 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ұ' + PositionX 305 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ұ' + PositionX 297 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ҳ' + PositionX 347 + PositionY 97 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ҳ' + PositionX 484 + PositionY 326 + Width 7 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ҵ' + PositionX 589 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ҵ' + PositionX 267 + PositionY 331 + Width 8 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'Ҷ' + PositionX 507 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ҷ' + PositionX 664 + PositionY 325 + Width 7 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ҹ' + PositionX 527 + PositionY 264 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ҹ' + PositionX 735 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Һ' + PositionX 500 + PositionY 255 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'һ' + PositionX 257 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ҽ' + PositionX 593 + PositionY 209 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'ҽ' + PositionX 689 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'Ҿ' + PositionX 668 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + XAdvance 10 + +Letter 'ҿ' + PositionX 751 + PositionY 317 + Width 8 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'Ӏ' + PositionX 357 + PositionY 321 + Width 3 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'Ӂ' + PositionX 480 + PositionY 14 + Width 10 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 10 + +Letter 'ӂ' + PositionX 489 + PositionY 161 + Width 8 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 7 + +Letter 'Ӄ' + PositionX 527 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ӄ' + PositionX 761 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӆ' + PositionX 267 + PositionY 99 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ӆ' + PositionX 257 + PositionY 331 + Width 8 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ӈ' + PositionX 536 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ӈ' + PositionX 753 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӊ' + PositionX 297 + PositionY 98 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ӊ' + PositionX 511 + PositionY 326 + Width 7 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӌ' + PositionX 545 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ӌ' + PositionX 353 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӎ' + PositionX 447 + PositionY 85 + Width 9 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ӎ' + PositionX 447 + PositionY 327 + Width 8 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ӏ' + PositionX 429 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'Ӑ' + PositionX 297 + PositionY 28 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ӑ' + PositionX 633 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ӓ' + PositionX 367 + PositionY 97 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'ӓ' + PositionX 729 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӕ' + PositionX 478 + PositionY 201 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'ӕ' + PositionX 524 + PositionY 342 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'Ӗ' + PositionX 266 + PositionY 52 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ӗ' + PositionX 641 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ә' + PositionX 374 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ә' + PositionX 727 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӛ' + PositionX 581 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ӛ' + PositionX 697 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӝ' + PositionX 649 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 10 + +Letter 'ӝ' + PositionX 267 + PositionY 250 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ӟ' + PositionX 273 + PositionY 132 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'ӟ' + PositionX 731 + PositionY 299 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'Ӡ' + PositionX 455 + PositionY 265 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ӡ' + PositionX 473 + PositionY 264 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ӣ' + PositionX 590 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ӣ' + PositionX 673 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӥ' + PositionX 599 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ӥ' + PositionX 665 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӧ' + PositionX 497 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ӧ' + PositionX 657 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ө' + PositionX 277 + PositionY 250 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ө' + PositionX 719 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӫ' + PositionX 517 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ӫ' + PositionX 649 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӭ' + PositionX 608 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ӭ' + PositionX 641 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӯ' + PositionX 527 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 7 + +Letter 'ӯ' + PositionX 489 + PositionY 129 + Width 6 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'Ӱ' + PositionX 537 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 7 + +Letter 'ӱ' + PositionX 497 + PositionY 129 + Width 6 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'Ӳ' + PositionX 613 + PositionY 14 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 7 + +Letter 'ӳ' + PositionX 409 + PositionY 62 + Width 6 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'Ӵ' + PositionX 617 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ӵ' + PositionX 633 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ӷ' + PositionX 597 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ӷ' + PositionX 649 + PositionY 333 + Width 5 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'Ӹ' + PositionX 721 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 11 + +Letter 'ӹ' + PositionX 345 + PositionY 231 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ӻ' + PositionX 584 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ӻ' + PositionX 625 + PositionY 281 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'Ӽ' + PositionX 574 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ӽ' + PositionX 302 + PositionY 259 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ӿ' + PositionX 410 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ӿ' + PositionX 687 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ԁ' + PositionX 518 + PositionY 255 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'ԁ' + PositionX 601 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ԃ' + PositionX 581 + PositionY 209 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ԃ' + PositionX 290 + PositionY 232 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ԅ' + PositionX 569 + PositionY 209 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ԅ' + PositionX 429 + PositionY 351 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'Ԇ' + PositionX 714 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ԇ' + PositionX 401 + PositionY 336 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ԉ' + PositionX 517 + PositionY 201 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'ԉ' + PositionX 399 + PositionY 344 + Width 11 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 11 + +Letter 'Ԋ' + PositionX 533 + PositionY 210 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'ԋ' + PositionX 546 + PositionY 342 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'Ԍ' + PositionX 297 + PositionY 250 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ԍ' + PositionX 679 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ԏ' + PositionX 697 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ԏ' + PositionX 629 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'Ԑ' + PositionX 553 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ԑ' + PositionX 671 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ԓ' + PositionX 534 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ԓ' + PositionX 419 + PositionY 265 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ԛ' + PositionX 449 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + XAdvance 9 + +Letter 'ԛ' + PositionX 529 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ԝ' + PositionX 738 + PositionY 191 + Width 11 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'ԝ' + PositionX 425 + PositionY 344 + Width 11 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 10 + +Letter '֑' + PositionX 493 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֒' + PositionX 425 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + XAdvance 1 + +Letter '֓' + PositionX 279 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֔' + PositionX 283 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֕' + PositionX 766 + PositionY 341 + Width 1 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 1 + +Letter '֖' + PositionX 285 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֗' + PositionX 287 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֘' + PositionX 484 + PositionY 191 + Width 3 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 1 + +Letter '֙' + PositionX 766 + PositionY 50 + Width 1 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 1 + +Letter '֚' + PositionX 382 + PositionY 344 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֛' + PositionX 766 + PositionY 299 + Width 1 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 1 + +Letter '֜' + PositionX 289 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֝' + PositionX 358 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֞' + PositionX 474 + PositionY 191 + Width 3 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 1 + +Letter '֟' + PositionX 464 + PositionY 107 + Width 7 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter '֠' + PositionX 350 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֡' + PositionX 316 + PositionY 153 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter '֢' + PositionX 413 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֣' + PositionX 299 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֤' + PositionX 305 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֥' + PositionX 301 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֦' + PositionX 764 + PositionY 161 + Width 3 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֧' + PositionX 303 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֨' + PositionX 307 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֩' + PositionX 501 + PositionY 191 + Width 2 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter '֪' + PositionX 433 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֫' + PositionX 329 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֬' + PositionX 309 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '֭' + PositionX 362 + PositionY 346 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter '֮' + PositionX 724 + PositionY 181 + Width 5 + Height 8 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '֯' + PositionX 505 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 1 + +Letter 'ְ' + PositionX 311 + PositionY 416 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter 'ֱ' + PositionX 649 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ֲ' + PositionX 657 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ֳ' + PositionX 665 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ִ' + PositionX 313 + PositionY 416 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter 'ֵ' + PositionX 372 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ֶ' + PositionX 324 + PositionY 194 + Width 4 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ַ' + PositionX 370 + PositionY 346 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ָ' + PositionX 330 + PositionY 194 + Width 4 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ֹ' + PositionX 315 + PositionY 416 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter 'ֺ' + PositionX 317 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ֻ' + PositionX 336 + PositionY 194 + Width 4 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ּ' + PositionX 321 + PositionY 416 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter 'ֽ' + PositionX 325 + PositionY 416 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter '־' + PositionX 475 + PositionY 405 + Width 4 + Height 1 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ֿ' + PositionX 765 + PositionY 245 + Width 2 + Height 7 + OffsetX 1 + XAdvance 1 + +Letter '׀' + PositionX 397 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 3 + +Letter 'ׁ' + PositionX 767 + PositionY 236 + Width 0 + Height 1 + OffsetX -3 + OffsetY -8 + XAdvance 1 + +Letter 'ׂ' + PositionX 766 + PositionY 399 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '׃' + PositionX 681 + PositionY 376 + Width 2 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 3 + +Letter 'ׄ' + PositionX 708 + PositionY 403 + Width 0 + Height 1 + OffsetY -8 + XAdvance 1 + +Letter 'ׅ' + PositionX 710 + PositionY 403 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '׆' + PositionX 535 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ׇ' + PositionX 409 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'א' + PositionX 617 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ב' + PositionX 401 + PositionY 358 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ג' + PositionX 264 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ד' + PositionX 529 + PositionY 349 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ה' + PositionX 697 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ו' + PositionX 677 + PositionY 376 + Width 2 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 3 + +Letter 'ז' + PositionX 695 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ח' + PositionX 721 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ט' + PositionX 729 + PositionY 362 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'י' + PositionX 429 + PositionY 397 + Width 2 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 3 + +Letter 'ך' + PositionX 761 + PositionY 254 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'כ' + PositionX 313 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ל' + PositionX 614 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'ם' + PositionX 337 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'מ' + PositionX 345 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ן' + PositionX 401 + PositionY 319 + Width 2 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 3 + +Letter 'נ' + PositionX 469 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ס' + PositionX 361 + PositionY 376 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ע' + PositionX 521 + PositionY 334 + Width 6 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ף' + PositionX 681 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'פ' + PositionX 377 + PositionY 375 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ץ' + PositionX 642 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'צ' + PositionX 632 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ק' + PositionX 649 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ר' + PositionX 393 + PositionY 372 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ש' + PositionX 428 + PositionY 358 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ת' + PositionX 347 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'װ' + PositionX 418 + PositionY 379 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ױ' + PositionX 397 + PositionY 379 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ײ' + PositionX 496 + PositionY 391 + Width 5 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter '׳' + PositionX 585 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter '״' + PositionX 673 + PositionY 393 + Width 5 + Height 2 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter '؀' + PositionX 745 + PositionY 382 + Width 8 + Height 3 + OffsetX 1 + OffsetY -6 + XAdvance 8 + +Letter '؁' + PositionX 662 + PositionY 383 + Width 13 + Height 3 + OffsetX 1 + OffsetY -6 + XAdvance 14 + +Letter '؂' + PositionX 746 + PositionY 376 + Width 8 + Height 4 + OffsetX 1 + OffsetY -5 + XAdvance 9 + +Letter '؃' + PositionX 689 + PositionY 382 + Width 10 + Height 3 + OffsetX 2 + OffsetY -6 + XAdvance 9 + +Letter '؋' + PositionX 634 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter '،' + PositionX 367 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '؍' + PositionX 618 + PositionY 389 + Width 4 + Height 3 + OffsetX 2 + OffsetY -4 + XAdvance 3 + +Letter '؎' + PositionX 722 + PositionY 341 + Width 9 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 8 + +Letter '؏' + PositionX 641 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ؐ' + PositionX 259 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ؑ' + PositionX 267 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ؒ' + PositionX 766 + PositionY 181 + Width 1 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 1 + +Letter 'ؓ' + PositionX 312 + PositionY 153 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter 'ؔ' + PositionX 659 + PositionY 383 + Width 1 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 1 + +Letter 'ؕ' + PositionX 281 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '؛' + PositionX 589 + PositionY 377 + Width 3 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter '؞' + PositionX 598 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter '؟' + PositionX 263 + PositionY 347 + Width 4 + Height 6 + OffsetX 1 + XAdvance 5 + +Letter 'ء' + PositionX 702 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'آ' + PositionX 456 + PositionY 191 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'أ' + PositionX 525 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 3 + +Letter 'ؤ' + PositionX 540 + PositionY 246 + Width 7 + Height 7 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'إ' + PositionX 513 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + XAdvance 3 + +Letter 'ئ' + PositionX 641 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'ا' + PositionX 366 + PositionY 346 + Width 2 + Height 6 + OffsetX 1 + XAdvance 3 + +Letter 'ب' + PositionX 701 + PositionY 317 + Width 8 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ة' + PositionX 284 + PositionY 347 + Width 3 + Height 6 + OffsetX 1 + XAdvance 4 + +Letter 'ت' + PositionX 349 + PositionY 355 + Width 8 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter 'ث' + PositionX 711 + PositionY 317 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ج' + PositionX 705 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ح' + PositionX 697 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'خ' + PositionX 281 + PositionY 132 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'د' + PositionX 541 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ذ' + PositionX 714 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ر' + PositionX 297 + PositionY 339 + Width 6 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ز' + PositionX 745 + PositionY 171 + Width 6 + Height 8 + OffsetX 2 + XAdvance 5 + +Letter 'س' + PositionX 578 + PositionY 317 + Width 10 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ش' + PositionX 692 + PositionY 151 + Width 10 + Height 8 + OffsetX 1 + XAdvance 10 + +Letter 'ص' + PositionX 465 + PositionY 319 + Width 12 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 12 + +Letter 'ض' + PositionX 376 + PositionY 152 + Width 12 + Height 8 + OffsetX 1 + XAdvance 12 + +Letter 'ط' + PositionX 760 + PositionY 200 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ظ' + PositionX 374 + PositionY 265 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ع' + PositionX 668 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'غ' + PositionX 572 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ـ' + PositionX 326 + PositionY 406 + Width 4 + Height 2 + OffsetX 2 + OffsetY -4 + XAdvance 3 + +Letter 'ف' + PositionX 668 + PositionY 317 + Width 9 + Height 6 + OffsetX 1 + XAdvance 9 + +Letter 'ق' + PositionX 379 + PositionY 162 + Width 8 + Height 8 + OffsetX 2 + XAdvance 7 + +Letter 'ك' + PositionX 428 + PositionY 265 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ل' + PositionX 673 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'م' + PositionX 705 + PositionY 281 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ن' + PositionX 665 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + XAdvance 6 + +Letter 'ه' + PositionX 609 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'و' + PositionX 457 + PositionY 327 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ى' + PositionX 369 + PositionY 338 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ي' + PositionX 681 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ً' + PositionX 374 + PositionY 346 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٌ' + PositionX 330 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٍ' + PositionX 342 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'َ' + PositionX 326 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ُ' + PositionX 334 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ِ' + PositionX 354 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ّ' + PositionX 296 + PositionY 154 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter 'ْ' + PositionX 338 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٓ' + PositionX 529 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 1 + +Letter 'ٔ' + PositionX 322 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٕ' + PositionX 318 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٖ' + PositionX 319 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ٗ' + PositionX 292 + PositionY 154 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter '٘' + PositionX 328 + PositionY 153 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter 'ٙ' + PositionX 323 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ٚ' + PositionX 314 + PositionY 347 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٛ' + PositionX 765 + PositionY 333 + Width 2 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ٜ' + PositionX 327 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ٝ' + PositionX 320 + PositionY 153 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter 'ٞ' + PositionX 766 + PositionY 347 + Width 1 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 1 + +Letter '٠' + PositionX 635 + PositionY 398 + Width 3 + Height 2 + OffsetY -3 + XAdvance 7 + +Letter '١' + PositionX 723 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter '٢' + PositionX 717 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter '٣' + PositionX 265 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '٤' + PositionX 711 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter '٥' + PositionX 425 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + XAdvance 7 + +Letter '٦' + PositionX 691 + PositionY 333 + Width 5 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '٧' + PositionX 257 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '٨' + PositionX 393 + PositionY 336 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '٩' + PositionX 705 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter '٪' + PositionX 635 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter '٫' + PositionX 680 + PositionY 397 + Width 3 + Height 2 + OffsetX 1 + OffsetY -5 + XAdvance 4 + +Letter '٬' + PositionX 277 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '٭' + PositionX 681 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + XAdvance 6 + +Letter 'ٮ' + PositionX 736 + PositionY 376 + Width 8 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ٯ' + PositionX 307 + PositionY 331 + Width 8 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ٰ' + PositionX 716 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ٱ' + PositionX 348 + PositionY 192 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ٲ' + PositionX 354 + PositionY 192 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ٳ' + PositionX 366 + PositionY 192 + Width 4 + Height 8 + OffsetX 2 + XAdvance 3 + +Letter 'ٴ' + PositionX 695 + PositionY 396 + Width 2 + Height 2 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter 'ٵ' + PositionX 729 + PositionY 333 + Width 4 + Height 6 + OffsetX 1 + XAdvance 3 + +Letter 'ٶ' + PositionX 554 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ٷ' + PositionX 563 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ٸ' + PositionX 572 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ٹ' + PositionX 307 + PositionY 250 + Width 8 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'ٺ' + PositionX 337 + PositionY 331 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ٻ' + PositionX 327 + PositionY 250 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ټ' + PositionX 357 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter 'ٽ' + PositionX 317 + PositionY 331 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'پ' + PositionX 367 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ٿ' + PositionX 741 + PositionY 317 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ڀ' + PositionX 377 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ځ' + PositionX 678 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ڂ' + PositionX 758 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ڃ' + PositionX 457 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ڄ' + PositionX 529 + PositionY 291 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'څ' + PositionX 305 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'چ' + PositionX 553 + PositionY 291 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ڇ' + PositionX 585 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ڈ' + PositionX 731 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ډ' + PositionX 708 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ڊ' + PositionX 269 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ڋ' + PositionX 680 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ڌ' + PositionX 702 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ڍ' + PositionX 696 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ڎ' + PositionX 444 + PositionY 191 + Width 4 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ڏ' + PositionX 384 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ڐ' + PositionX 312 + PositionY 195 + Width 4 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ڑ' + PositionX 697 + PositionY 118 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ڒ' + PositionX 745 + PositionY 129 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ړ' + PositionX 569 + PositionY 290 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ڔ' + PositionX 752 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ڕ' + PositionX 275 + PositionY 277 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ږ' + PositionX 266 + PositionY 277 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ڗ' + PositionX 689 + PositionY 171 + Width 6 + Height 8 + OffsetX 2 + XAdvance 5 + +Letter 'ژ' + PositionX 481 + PositionY 129 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ڙ' + PositionX 297 + PositionY 132 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ښ' + PositionX 688 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 10 + +Letter 'ڛ' + PositionX 485 + PositionY 210 + Width 10 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ڜ' + PositionX 745 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'ڝ' + PositionX 479 + PositionY 318 + Width 12 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 12 + +Letter 'ڞ' + PositionX 320 + PositionY 75 + Width 12 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 12 + +Letter 'ڟ' + PositionX 725 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ڠ' + PositionX 614 + PositionY 1 + Width 7 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ڡ' + PositionX 725 + PositionY 376 + Width 9 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ڢ' + PositionX 624 + PositionY 317 + Width 9 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ڣ' + PositionX 727 + PositionY 151 + Width 9 + Height 8 + OffsetX 1 + XAdvance 9 + +Letter 'ڤ' + PositionX 708 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ڥ' + PositionX 323 + PositionY 232 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ڦ' + PositionX 719 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ڧ' + PositionX 329 + PositionY 164 + Width 8 + Height 8 + OffsetX 2 + XAdvance 7 + +Letter 'ڨ' + PositionX 557 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 7 + +Letter 'ک' + PositionX 590 + PositionY 317 + Width 10 + Height 6 + OffsetX 2 + XAdvance 9 + +Letter 'ڪ' + PositionX 404 + PositionY 152 + Width 12 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 13 + +Letter 'ګ' + PositionX 554 + PositionY 318 + Width 10 + Height 6 + OffsetX 2 + XAdvance 9 + +Letter 'ڬ' + PositionX 569 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ڭ' + PositionX 614 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ڮ' + PositionX 752 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'گ' + PositionX 572 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ڰ' + PositionX 680 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ڱ' + PositionX 560 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ڲ' + PositionX 468 + PositionY 14 + Width 10 + Height 10 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ڳ' + PositionX 442 + PositionY 1 + Width 10 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ڴ' + PositionX 536 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ڵ' + PositionX 365 + PositionY 108 + Width 7 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ڶ' + PositionX 356 + PositionY 108 + Width 7 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ڷ' + PositionX 338 + PositionY 108 + Width 7 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ڸ' + PositionX 608 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ڹ' + PositionX 449 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'ں' + PositionX 505 + PositionY 334 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ڻ' + PositionX 705 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ڼ' + PositionX 433 + PositionY 140 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'ڽ' + PositionX 257 + PositionY 143 + Width 6 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ھ' + PositionX 417 + PositionY 365 + Width 6 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ڿ' + PositionX 361 + PositionY 130 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ۀ' + PositionX 322 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ہ' + PositionX 644 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ۂ' + PositionX 327 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 5 + +Letter 'ۃ' + PositionX 274 + PositionY 347 + Width 3 + Height 6 + OffsetX 1 + XAdvance 5 + +Letter 'ۄ' + PositionX 583 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ۅ' + PositionX 502 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ۆ' + PositionX 608 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ۇ' + PositionX 590 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ۈ' + PositionX 257 + PositionY 52 + Width 7 + Height 10 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ۉ' + PositionX 581 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ۊ' + PositionX 587 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + XAdvance 6 + +Letter 'ۋ' + PositionX 536 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ی' + PositionX 465 + PositionY 335 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ۍ' + PositionX 473 + PositionY 335 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ێ' + PositionX 329 + PositionY 174 + Width 6 + Height 8 + OffsetX 1 + XAdvance 7 + +Letter 'ۏ' + PositionX 731 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + XAdvance 6 + +Letter 'ې' + PositionX 289 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ۑ' + PositionX 281 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ے' + PositionX 535 + PositionY 342 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ۓ' + PositionX 576 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '۔' + PositionX 640 + PositionY 398 + Width 3 + Height 2 + OffsetX 2 + OffsetY -4 + XAdvance 3 + +Letter 'ە' + PositionX 654 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ۖ' + PositionX 694 + PositionY 62 + Width 5 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 1 + +Letter 'ۗ' + PositionX 267 + PositionY 76 + Width 3 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 1 + +Letter 'ۘ' + PositionX 714 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۙ' + PositionX 712 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۚ' + PositionX 281 + PositionY 76 + Width 2 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 1 + +Letter 'ۛ' + PositionX 702 + PositionY 403 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۜ' + PositionX 666 + PositionY 62 + Width 5 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 1 + +Letter '۝' + PositionX 389 + PositionY 1 + Width 12 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 12 + +Letter '۞' + PositionX 374 + PositionY 1 + Width 13 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 12 + +Letter '۟' + PositionX 767 + PositionY 359 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '۠' + PositionX 767 + PositionY 356 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۡ' + PositionX 300 + PositionY 154 + Width 2 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 1 + +Letter 'ۢ' + PositionX 767 + PositionY 353 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۣ' + PositionX 696 + PositionY 181 + Width 5 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 1 + +Letter 'ۤ' + PositionX 767 + PositionY 233 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۥ' + PositionX 666 + PositionY 388 + Width 4 + Height 3 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ۦ' + PositionX 468 + PositionY 392 + Width 5 + Height 3 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ۧ' + PositionX 755 + PositionY 62 + Width 3 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 1 + +Letter 'ۨ' + PositionX 765 + PositionY 62 + Width 2 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 1 + +Letter '۩' + PositionX 654 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 7 + +Letter '۪' + PositionX 767 + PositionY 230 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '۫' + PositionX 767 + PositionY 227 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '۬' + PositionX 766 + PositionY 187 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۭ' + PositionX 766 + PositionY 59 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter 'ۮ' + PositionX 426 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ۯ' + PositionX 441 + PositionY 140 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter '۰' + PositionX 655 + PositionY 398 + Width 3 + Height 2 + OffsetY -3 + XAdvance 7 + +Letter '۱' + PositionX 735 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter '۲' + PositionX 741 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter '۳' + PositionX 281 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '۴' + PositionX 289 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '۵' + PositionX 313 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '۶' + PositionX 321 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '۷' + PositionX 329 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '۸' + PositionX 337 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + XAdvance 7 + +Letter '۹' + PositionX 747 + PositionY 333 + Width 4 + Height 6 + XAdvance 7 + +Letter 'ۺ' + PositionX 596 + PositionY 151 + Width 10 + Height 8 + OffsetX 1 + XAdvance 10 + +Letter 'ۻ' + PositionX 418 + PositionY 152 + Width 12 + Height 8 + OffsetX 1 + XAdvance 12 + +Letter 'ۼ' + PositionX 617 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter '۽' + PositionX 341 + PositionY 313 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter '۾' + PositionX 569 + PositionY 281 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ۿ' + PositionX 457 + PositionY 171 + Width 6 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ݐ' + PositionX 397 + PositionY 328 + Width 8 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ݑ' + PositionX 439 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + XAdvance 8 + +Letter 'ݒ' + PositionX 397 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ݓ' + PositionX 389 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter 'ݔ' + PositionX 407 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter 'ݕ' + PositionX 417 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ݖ' + PositionX 327 + PositionY 331 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ݗ' + PositionX 737 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ݘ' + PositionX 617 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ݙ' + PositionX 747 + PositionY 1 + Width 5 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ݚ' + PositionX 468 + PositionY 191 + Width 4 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ݛ' + PositionX 361 + PositionY 338 + Width 6 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ݜ' + PositionX 632 + PositionY 151 + Width 10 + Height 8 + OffsetX 1 + XAdvance 10 + +Letter 'ݝ' + PositionX 599 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ݞ' + PositionX 641 + PositionY 1 + Width 7 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ݟ' + PositionX 596 + PositionY 1 + Width 7 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ݠ' + PositionX 646 + PositionY 317 + Width 9 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ݡ' + PositionX 684 + PositionY 209 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ݢ' + PositionX 548 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ݣ' + PositionX 620 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ݤ' + PositionX 517 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 9 + +Letter 'ݥ' + PositionX 393 + PositionY 141 + Width 6 + Height 9 + OffsetX 2 + XAdvance 5 + +Letter 'ݦ' + PositionX 689 + PositionY 281 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ݧ' + PositionX 761 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'ݨ' + PositionX 668 + PositionY 1 + Width 6 + Height 11 + OffsetX 1 + OffsetY 3 + XAdvance 6 + +Letter 'ݩ' + PositionX 700 + PositionY 1 + Width 6 + Height 11 + OffsetX 1 + OffsetY 3 + XAdvance 6 + +Letter 'ݪ' + PositionX 681 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ݫ' + PositionX 377 + PositionY 141 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ݬ' + PositionX 345 + PositionY 141 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ݭ' + PositionX 704 + PositionY 151 + Width 10 + Height 8 + OffsetX 1 + XAdvance 10 + +Letter 'ᴀ' + PositionX 509 + PositionY 349 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᴁ' + PositionX 519 + PositionY 349 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ᴂ' + PositionX 755 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ᴃ' + PositionX 659 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᴄ' + PositionX 615 + PositionY 355 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴅ' + PositionX 449 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴆ' + PositionX 356 + PositionY 362 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᴇ' + PositionX 327 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᴈ' + PositionX 320 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᴉ' + PositionX 764 + PositionY 191 + Width 3 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ᴊ' + PositionX 299 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᴋ' + PositionX 457 + PositionY 372 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴌ' + PositionX 465 + PositionY 371 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ᴍ' + PositionX 473 + PositionY 371 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴎ' + PositionX 481 + PositionY 371 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴏ' + PositionX 489 + PositionY 371 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴐ' + PositionX 497 + PositionY 371 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴑ' + PositionX 505 + PositionY 371 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴒ' + PositionX 513 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴓ' + PositionX 365 + PositionY 362 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᴔ' + PositionX 700 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ᴕ' + PositionX 529 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴖ' + PositionX 357 + PositionY 396 + Width 6 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴗ' + PositionX 309 + PositionY 396 + Width 6 + Height 3 + OffsetX 1 + OffsetY -4 + XAdvance 7 + +Letter 'ᴘ' + PositionX 537 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴙ' + PositionX 545 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴚ' + PositionX 553 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴛ' + PositionX 561 + PositionY 370 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᴜ' + PositionX 569 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴝ' + PositionX 577 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴞ' + PositionX 639 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ᴟ' + PositionX 345 + PositionY 294 + Width 6 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'ᴠ' + PositionX 302 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ᴡ' + PositionX 451 + PositionY 343 + Width 11 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 10 + +Letter 'ᴢ' + PositionX 585 + PositionY 370 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᴣ' + PositionX 609 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᴤ' + PositionX 278 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᴥ' + PositionX 649 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᴦ' + PositionX 271 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᴧ' + PositionX 617 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴨ' + PositionX 455 + PositionY 358 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴩ' + PositionX 463 + PositionY 357 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᴪ' + PositionX 599 + PositionY 348 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ᴫ' + PositionX 266 + PositionY 362 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᴬ' + PositionX 374 + PositionY 361 + Width 7 + Height 5 + OffsetX 2 + XAdvance 6 + +Letter 'ᴭ' + PositionX 549 + PositionY 349 + Width 8 + Height 5 + OffsetX 2 + XAdvance 8 + +Letter 'ᴮ' + PositionX 257 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + XAdvance 6 + +Letter 'ᴯ' + PositionX 392 + PositionY 358 + Width 7 + Height 5 + OffsetX 2 + XAdvance 6 + +Letter 'ᴰ' + PositionX 744 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + XAdvance 6 + +Letter 'ᴱ' + PositionX 737 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴲ' + PositionX 730 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴳ' + PositionX 723 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + XAdvance 6 + +Letter 'ᴴ' + PositionX 716 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴵ' + PositionX 669 + PositionY 376 + Width 2 + Height 5 + OffsetX 1 + XAdvance 3 + +Letter 'ᴶ' + PositionX 463 + PositionY 379 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ᴷ' + PositionX 688 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + XAdvance 6 + +Letter 'ᴸ' + PositionX 457 + PositionY 379 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ᴹ' + PositionX 471 + PositionY 357 + Width 6 + Height 5 + OffsetX 2 + XAdvance 6 + +Letter 'ᴺ' + PositionX 674 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴻ' + PositionX 660 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴼ' + PositionX 479 + PositionY 357 + Width 6 + Height 5 + OffsetX 2 + XAdvance 6 + +Letter 'ᴽ' + PositionX 653 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴾ' + PositionX 639 + PositionY 369 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᴿ' + PositionX 625 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + XAdvance 6 + +Letter 'ᵀ' + PositionX 487 + PositionY 357 + Width 6 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᵁ' + PositionX 341 + PositionY 383 + Width 5 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᵂ' + PositionX 459 + PositionY 350 + Width 8 + Height 5 + OffsetX 2 + XAdvance 7 + +Letter 'ᵃ' + PositionX 630 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵄ' + PositionX 528 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵅ' + PositionX 475 + PositionY 391 + Width 5 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵆ' + PositionX 301 + PositionY 396 + Width 6 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᵇ' + PositionX 306 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ᵈ' + PositionX 390 + PositionY 380 + Width 5 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ᵉ' + PositionX 708 + PositionY 387 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵊ' + PositionX 696 + PositionY 387 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵋ' + PositionX 648 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵌ' + PositionX 624 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵍ' + PositionX 417 + PositionY 386 + Width 5 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵎ' + PositionX 619 + PositionY 383 + Width 3 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 2 + +Letter 'ᵏ' + PositionX 404 + PositionY 379 + Width 5 + Height 5 + OffsetX 2 + XAdvance 4 + +Letter 'ᵐ' + PositionX 755 + PositionY 382 + Width 7 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᵑ' + PositionX 526 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵒ' + PositionX 389 + PositionY 395 + Width 6 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᵓ' + PositionX 582 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵔ' + PositionX 368 + PositionY 406 + Width 4 + Height 2 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵕ' + PositionX 350 + PositionY 406 + Width 4 + Height 2 + OffsetX 1 + OffsetY -3 + XAdvance 5 + +Letter 'ᵖ' + PositionX 382 + PositionY 390 + Width 5 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵗ' + PositionX 586 + PositionY 384 + Width 4 + Height 4 + OffsetX 2 + OffsetY -1 + XAdvance 3 + +Letter 'ᵘ' + PositionX 606 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵙ' + PositionX 482 + PositionY 391 + Width 5 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᵚ' + PositionX 275 + PositionY 396 + Width 7 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᵛ' + PositionX 594 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵜ' + PositionX 317 + PositionY 396 + Width 6 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᵝ' + PositionX 257 + PositionY 347 + Width 4 + Height 6 + OffsetX 1 + XAdvance 5 + +Letter 'ᵞ' + PositionX 514 + PositionY 385 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵟ' + PositionX 535 + PositionY 356 + Width 6 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᵠ' + PositionX 389 + PositionY 389 + Width 5 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᵡ' + PositionX 556 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵢ' + PositionX 624 + PositionY 376 + Width 3 + Height 5 + OffsetX 2 + OffsetY -3 + XAdvance 2 + +Letter 'ᵣ' + PositionX 362 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 4 + +Letter 'ᵤ' + PositionX 552 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ᵥ' + PositionX 516 + PositionY 391 + Width 4 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ᵦ' + PositionX 753 + PositionY 333 + Width 4 + Height 6 + OffsetX 1 + OffsetY -3 + XAdvance 5 + +Letter 'ᵧ' + PositionX 550 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ᵨ' + PositionX 452 + PositionY 386 + Width 5 + Height 4 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ᵩ' + PositionX 445 + PositionY 386 + Width 5 + Height 4 + OffsetX 1 + OffsetY -5 + XAdvance 6 + +Letter 'ᵪ' + PositionX 544 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ᵫ' + PositionX 678 + PositionY 341 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ᵬ' + PositionX 545 + PositionY 255 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ᵭ' + PositionX 482 + PositionY 255 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ᵮ' + PositionX 717 + PositionY 299 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ᵯ' + PositionX 438 + PositionY 344 + Width 11 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 10 + +Letter 'ᵰ' + PositionX 489 + PositionY 350 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᵱ' + PositionX 428 + PositionY 256 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᵲ' + PositionX 551 + PositionY 356 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᵳ' + PositionX 559 + PositionY 356 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᵴ' + PositionX 338 + PositionY 362 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᵵ' + PositionX 257 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ᵶ' + PositionX 329 + PositionY 362 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ᵷ' + PositionX 609 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᵸ' + PositionX 720 + PositionY 387 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᵹ' + PositionX 625 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᵺ' + PositionX 317 + PositionY 214 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'ᵻ' + PositionX 439 + PositionY 379 + Width 4 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ᵼ' + PositionX 583 + PositionY 377 + Width 4 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ᵽ' + PositionX 427 + PositionY 247 + Width 8 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᵾ' + PositionX 319 + PositionY 355 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᵿ' + PositionX 329 + PositionY 355 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ᶀ' + PositionX 505 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ᶁ' + PositionX 464 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ᶂ' + PositionX 669 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'ᶃ' + PositionX 257 + PositionY 223 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ᶄ' + PositionX 455 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ᶅ' + PositionX 751 + PositionY 140 + Width 4 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'ᶆ' + PositionX 592 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ᶇ' + PositionX 698 + PositionY 263 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶈ' + PositionX 721 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶉ' + PositionX 397 + PositionY 310 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶊ' + PositionX 729 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶋ' + PositionX 437 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ᶌ' + PositionX 745 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶍ' + PositionX 716 + PositionY 263 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶎ' + PositionX 320 + PositionY 268 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ᶏ' + PositionX 437 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶐ' + PositionX 447 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶑ' + PositionX 419 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ᶒ' + PositionX 752 + PositionY 263 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶓ' + PositionX 257 + PositionY 277 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ᶔ' + PositionX 297 + PositionY 304 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ᶕ' + PositionX 457 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ᶖ' + PositionX 480 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'ᶗ' + PositionX 321 + PositionY 304 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶘ' + PositionX 508 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'ᶙ' + PositionX 467 + PositionY 246 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶚ' + PositionX 284 + PositionY 277 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ᶛ' + PositionX 489 + PositionY 391 + Width 5 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶜ' + PositionX 660 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶝ' + PositionX 520 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶞ' + PositionX 583 + PositionY 356 + Width 6 + Height 5 + OffsetX 2 + XAdvance 5 + +Letter 'ᶟ' + PositionX 654 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶠ' + PositionX 577 + PositionY 377 + Width 4 + Height 5 + OffsetX 2 + XAdvance 3 + +Letter 'ᶡ' + PositionX 571 + PositionY 377 + Width 4 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 3 + +Letter 'ᶢ' + PositionX 459 + PositionY 386 + Width 5 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶣ' + PositionX 553 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter 'ᶤ' + PositionX 547 + PositionY 377 + Width 4 + Height 5 + OffsetX 2 + XAdvance 3 + +Letter 'ᶥ' + PositionX 397 + PositionY 398 + Width 3 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 2 + +Letter 'ᶦ' + PositionX 402 + PositionY 398 + Width 3 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 2 + +Letter 'ᶧ' + PositionX 702 + PositionY 387 + Width 4 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 3 + +Letter 'ᶨ' + PositionX 614 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ᶩ' + PositionX 269 + PositionY 347 + Width 3 + Height 6 + OffsetX 1 + XAdvance 3 + +Letter 'ᶪ' + PositionX 304 + PositionY 347 + Width 3 + Height 6 + OffsetX 1 + XAdvance 3 + +Letter 'ᶫ' + PositionX 292 + PositionY 401 + Width 3 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ᶬ' + PositionX 293 + PositionY 390 + Width 7 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶭ' + PositionX 284 + PositionY 390 + Width 7 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᶮ' + PositionX 410 + PositionY 386 + Width 5 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶯ' + PositionX 374 + PositionY 390 + Width 6 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶰ' + PositionX 678 + PositionY 388 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶱ' + PositionX 397 + PositionY 393 + Width 6 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶲ' + PositionX 377 + PositionY 336 + Width 6 + Height 6 + OffsetX 1 + XAdvance 6 + +Letter 'ᶳ' + PositionX 568 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶴ' + PositionX 670 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ᶵ' + PositionX 517 + PositionY 377 + Width 4 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 3 + +Letter 'ᶶ' + PositionX 373 + PositionY 396 + Width 6 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶷ' + PositionX 365 + PositionY 396 + Width 6 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶸ' + PositionX 672 + PositionY 388 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶹ' + PositionX 540 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶺ' + PositionX 522 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶻ' + PositionX 503 + PositionY 391 + Width 5 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶼ' + PositionX 342 + PositionY 390 + Width 6 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ᶽ' + PositionX 257 + PositionY 390 + Width 7 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ᶾ' + PositionX 562 + PositionY 384 + Width 4 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ᶿ' + PositionX 475 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + XAdvance 5 + +Letter '᷀' + PositionX 630 + PositionY 394 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '᷁' + PositionX 582 + PositionY 395 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '᷂' + PositionX 297 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '᷃' + PositionX 475 + PositionY 401 + Width 3 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '᷄' + PositionX 374 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '᷅' + PositionX 386 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '᷆' + PositionX 302 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '᷇' + PositionX 314 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '᷈' + PositionX 606 + PositionY 394 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '᷉' + PositionX 534 + PositionY 395 + Width 6 + Height 2 + OffsetX 4 + OffsetY 1 + XAdvance 1 + +Letter '᷊' + PositionX 295 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '᷾' + PositionX 291 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '᷿' + PositionX 736 + PositionY 392 + Width 5 + Height 2 + OffsetX 3 + OffsetY -7 + XAdvance 1 + +Letter 'Ḁ' + PositionX 437 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ḁ' + PositionX 633 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ḃ' + PositionX 392 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ḃ' + PositionX 649 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ḅ' + PositionX 374 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḅ' + PositionX 681 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḇ' + PositionX 365 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḇ' + PositionX 665 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḉ' + PositionX 309 + PositionY 1 + Width 7 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ḉ' + PositionX 478 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ḋ' + PositionX 347 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ḋ' + PositionX 369 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ḍ' + PositionX 338 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḍ' + PositionX 649 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḏ' + PositionX 329 + PositionY 119 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḏ' + PositionX 593 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḑ' + PositionX 311 + PositionY 120 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḑ' + PositionX 561 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḓ' + PositionX 302 + PositionY 120 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḓ' + PositionX 425 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḕ' + PositionX 329 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ḕ' + PositionX 393 + PositionY 130 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ḗ' + PositionX 293 + PositionY 40 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ḗ' + PositionX 385 + PositionY 130 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ḙ' + PositionX 266 + PositionY 121 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḙ' + PositionX 521 + PositionY 300 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ḛ' + PositionX 257 + PositionY 121 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḛ' + PositionX 529 + PositionY 300 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ḝ' + PositionX 300 + PositionY 1 + Width 7 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ḝ' + PositionX 377 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ḟ' + PositionX 761 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'ḟ' + PositionX 585 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'Ḡ' + PositionX 417 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ḡ' + PositionX 713 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḣ' + PositionX 752 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ḣ' + PositionX 761 + PositionY 107 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ḥ' + PositionX 743 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḥ' + PositionX 297 + PositionY 143 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḧ' + PositionX 734 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ḧ' + PositionX 289 + PositionY 143 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ḩ' + PositionX 716 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḩ' + PositionX 281 + PositionY 143 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḫ' + PositionX 707 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḫ' + PositionX 657 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḭ' + PositionX 501 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'ḭ' + PositionX 557 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ḯ' + PositionX 763 + PositionY 26 + Width 4 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 4 + +Letter 'ḯ' + PositionX 638 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'Ḱ' + PositionX 275 + PositionY 52 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ḱ' + PositionX 694 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ḳ' + PositionX 671 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḳ' + PositionX 585 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḵ' + PositionX 662 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ḵ' + PositionX 553 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ḷ' + PositionX 529 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ḷ' + PositionX 324 + PositionY 153 + Width 2 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'Ḹ' + PositionX 676 + PositionY 1 + Width 6 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'ḹ' + PositionX 754 + PositionY 1 + Width 5 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'Ḻ' + PositionX 465 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ḻ' + PositionX 606 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ḽ' + PositionX 409 + PositionY 130 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ḽ' + PositionX 697 + PositionY 140 + Width 4 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'Ḿ' + PositionX 592 + PositionY 14 + Width 9 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 10 + +Letter 'ḿ' + PositionX 257 + PositionY 165 + Width 9 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 10 + +Letter 'Ṁ' + PositionX 480 + PositionY 85 + Width 9 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 10 + +Letter 'ṁ' + PositionX 301 + PositionY 232 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ṃ' + PositionX 491 + PositionY 85 + Width 9 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'ṃ' + PositionX 334 + PositionY 231 + Width 9 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'Ṅ' + PositionX 653 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ṅ' + PositionX 385 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ṇ' + PositionX 644 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṇ' + PositionX 409 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṉ' + PositionX 635 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṉ' + PositionX 417 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṋ' + PositionX 626 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṋ' + PositionX 425 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṍ' + PositionX 647 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ṍ' + PositionX 265 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ṏ' + PositionX 753 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ṏ' + PositionX 750 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ṑ' + PositionX 587 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ṑ' + PositionX 473 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ṓ' + PositionX 617 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ṓ' + PositionX 457 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ṕ' + PositionX 671 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ṕ' + PositionX 726 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ṗ' + PositionX 518 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ṗ' + PositionX 441 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ṙ' + PositionX 482 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ṙ' + PositionX 628 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter 'Ṛ' + PositionX 446 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṛ' + PositionX 593 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'Ṝ' + PositionX 623 + PositionY 1 + Width 7 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ṝ' + PositionX 578 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 5 + +Letter 'Ṟ' + PositionX 410 + PositionY 108 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṟ' + PositionX 670 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'Ṡ' + PositionX 377 + PositionY 130 + Width 6 + Height 9 + OffsetY 2 + XAdvance 8 + +Letter 'ṡ' + PositionX 505 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ṣ' + PositionX 353 + PositionY 130 + Width 6 + Height 9 + XAdvance 8 + +Letter 'ṣ' + PositionX 513 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṥ' + PositionX 761 + PositionY 38 + Width 6 + Height 10 + OffsetY 3 + XAdvance 8 + +Letter 'ṥ' + PositionX 590 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ṧ' + PositionX 582 + PositionY 50 + Width 6 + Height 10 + OffsetY 3 + XAdvance 8 + +Letter 'ṧ' + PositionX 574 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ṩ' + PositionX 692 + PositionY 1 + Width 6 + Height 11 + OffsetY 2 + XAdvance 8 + +Letter 'ṩ' + PositionX 329 + PositionY 130 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'Ṫ' + PositionX 329 + PositionY 108 + Width 7 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ṫ' + PositionX 550 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'Ṭ' + PositionX 302 + PositionY 109 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ṭ' + PositionX 543 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ṯ' + PositionX 284 + PositionY 110 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ṯ' + PositionX 536 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ṱ' + PositionX 759 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'ṱ' + PositionX 522 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ṳ' + PositionX 723 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṳ' + PositionX 577 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṵ' + PositionX 705 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṵ' + PositionX 593 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṷ' + PositionX 669 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ṷ' + PositionX 609 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ṹ' + PositionX 320 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ṹ' + PositionX 430 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ṻ' + PositionX 302 + PositionY 40 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ṻ' + PositionX 729 + PositionY 118 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ṽ' + PositionX 515 + PositionY 14 + Width 9 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ṽ' + PositionX 623 + PositionY 161 + Width 7 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ṿ' + PositionX 348 + PositionY 86 + Width 9 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ṿ' + PositionX 266 + PositionY 259 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ẁ' + PositionX 419 + PositionY 14 + Width 11 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 10 + +Letter 'ẁ' + PositionX 446 + PositionY 151 + Width 11 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 10 + +Letter 'Ẃ' + PositionX 380 + PositionY 14 + Width 11 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 10 + +Letter 'ẃ' + PositionX 459 + PositionY 151 + Width 11 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 10 + +Letter 'Ẅ' + PositionX 478 + PositionY 74 + Width 11 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 10 + +Letter 'ẅ' + PositionX 452 + PositionY 201 + Width 11 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ẇ' + PositionX 504 + PositionY 74 + Width 11 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 10 + +Letter 'ẇ' + PositionX 504 + PositionY 201 + Width 11 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ẉ' + PositionX 452 + PositionY 74 + Width 11 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ẉ' + PositionX 491 + PositionY 201 + Width 11 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 10 + +Letter 'Ẋ' + PositionX 572 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ẋ' + PositionX 713 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ẍ' + PositionX 563 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ẍ' + PositionX 721 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ẏ' + PositionX 554 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ẏ' + PositionX 401 + PositionY 130 + Width 6 + Height 9 + OffsetX 2 + XAdvance 6 + +Letter 'Ẑ' + PositionX 307 + PositionY 27 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 7 + +Letter 'ẑ' + PositionX 625 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'Ẓ' + PositionX 327 + PositionY 97 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ẓ' + PositionX 737 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'Ẕ' + PositionX 317 + PositionY 98 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ẕ' + PositionX 745 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ẖ' + PositionX 537 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ẗ' + PositionX 564 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ẘ' + PositionX 498 + PositionY 151 + Width 11 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 10 + +Letter 'ẙ' + PositionX 550 + PositionY 50 + Width 6 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ẚ' + PositionX 601 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'ẛ' + PositionX 721 + PositionY 140 + Width 4 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ẞ' + PositionX 585 + PositionY 245 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter 'Ạ' + PositionX 594 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ạ' + PositionX 265 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ả' + PositionX 477 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ả' + PositionX 641 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ấ' + PositionX 487 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ấ' + PositionX 558 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ầ' + PositionX 567 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ầ' + PositionX 569 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ẩ' + PositionX 507 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ẩ' + PositionX 489 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ẫ' + PositionX 526 + PositionY 14 + Width 9 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ẫ' + PositionX 374 + PositionY 51 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ậ' + PositionX 576 + PositionY 1 + Width 8 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'ậ' + PositionX 545 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ắ' + PositionX 407 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ắ' + PositionX 521 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ằ' + PositionX 397 + PositionY 26 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ằ' + PositionX 465 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ẳ' + PositionX 347 + PositionY 27 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ẳ' + PositionX 457 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ẵ' + PositionX 570 + PositionY 14 + Width 9 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'ẵ' + PositionX 289 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ặ' + PositionX 586 + PositionY 1 + Width 8 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'ặ' + PositionX 393 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ẹ' + PositionX 473 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ẹ' + PositionX 401 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ẻ' + PositionX 356 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ẻ' + PositionX 265 + PositionY 132 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ẽ' + PositionX 365 + PositionY 51 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ẽ' + PositionX 497 + PositionY 181 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ế' + PositionX 736 + PositionY 26 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ế' + PositionX 401 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ề' + PositionX 754 + PositionY 26 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ề' + PositionX 281 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ể' + PositionX 266 + PositionY 40 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ể' + PositionX 462 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ễ' + PositionX 311 + PositionY 39 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ễ' + PositionX 417 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ệ' + PositionX 605 + PositionY 1 + Width 7 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'ệ' + PositionX 630 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ỉ' + PositionX 763 + PositionY 14 + Width 4 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 4 + +Letter 'ỉ' + PositionX 745 + PositionY 140 + Width 4 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'Ị' + PositionX 272 + PositionY 154 + Width 3 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'ị' + PositionX 304 + PositionY 154 + Width 2 + Height 9 + OffsetX 1 + XAdvance 4 + +Letter 'Ọ' + PositionX 467 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ọ' + PositionX 449 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ỏ' + PositionX 623 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ỏ' + PositionX 417 + PositionY 130 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ố' + PositionX 673 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ố' + PositionX 382 + PositionY 51 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ồ' + PositionX 677 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ồ' + PositionX 593 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ổ' + PositionX 437 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ổ' + PositionX 542 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ỗ' + PositionX 597 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ỗ' + PositionX 414 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ộ' + PositionX 556 + PositionY 1 + Width 8 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 9 + +Letter 'ộ' + PositionX 321 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ớ' + PositionX 456 + PositionY 14 + Width 10 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 10 + +Letter 'ớ' + PositionX 479 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ờ' + PositionX 444 + PositionY 14 + Width 10 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 10 + +Letter 'ờ' + PositionX 499 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ở' + PositionX 492 + PositionY 14 + Width 10 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 10 + +Letter 'ở' + PositionX 487 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'Ỡ' + PositionX 432 + PositionY 14 + Width 10 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 10 + +Letter 'ỡ' + PositionX 529 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ợ' + PositionX 733 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 10 + +Letter 'ợ' + PositionX 487 + PositionY 228 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ụ' + PositionX 419 + PositionY 107 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ụ' + PositionX 505 + PositionY 291 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ủ' + PositionX 437 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ủ' + PositionX 305 + PositionY 142 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ứ' + PositionX 559 + PositionY 14 + Width 9 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ứ' + PositionX 279 + PositionY 165 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ừ' + PositionX 548 + PositionY 14 + Width 9 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ừ' + PositionX 299 + PositionY 165 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ử' + PositionX 537 + PositionY 14 + Width 9 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ử' + PositionX 427 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'Ữ' + PositionX 581 + PositionY 14 + Width 9 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ữ' + PositionX 349 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'Ự' + PositionX 458 + PositionY 85 + Width 9 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter 'ự' + PositionX 527 + PositionY 228 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'Ỳ' + PositionX 482 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ỳ' + PositionX 505 + PositionY 62 + Width 6 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'Ỵ' + PositionX 401 + PositionY 108 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ỵ' + PositionX 554 + PositionY 255 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ỷ' + PositionX 500 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ỷ' + PositionX 708 + PositionY 1 + Width 6 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'Ỹ' + PositionX 518 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'ỹ' + PositionX 553 + PositionY 62 + Width 6 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ἀ' + PositionX 281 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἁ' + PositionX 273 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἂ' + PositionX 265 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἃ' + PositionX 257 + PositionY 185 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἄ' + PositionX 761 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἅ' + PositionX 753 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἆ' + PositionX 561 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ἇ' + PositionX 577 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ἀ' + PositionX 537 + PositionY 228 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ἁ' + PositionX 547 + PositionY 228 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ἂ' + PositionX 461 + PositionY 210 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ἃ' + PositionX 413 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ἄ' + PositionX 401 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ἅ' + PositionX 365 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ἆ' + PositionX 414 + PositionY 85 + Width 9 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 10 + +Letter 'Ἇ' + PositionX 403 + PositionY 86 + Width 9 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 10 + +Letter 'ἐ' + PositionX 737 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ἑ' + PositionX 729 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ἒ' + PositionX 721 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ἓ' + PositionX 713 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ἔ' + PositionX 705 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ἕ' + PositionX 697 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'Ἐ' + PositionX 557 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ἑ' + PositionX 567 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'Ἒ' + PositionX 329 + PositionY 213 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ἓ' + PositionX 736 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ἔ' + PositionX 348 + PositionY 202 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ἕ' + PositionX 283 + PositionY 205 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'ἠ' + PositionX 470 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἡ' + PositionX 494 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἢ' + PositionX 406 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἣ' + PositionX 273 + PositionY 64 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἤ' + PositionX 337 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἥ' + PositionX 345 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ἦ' + PositionX 334 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ἧ' + PositionX 326 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ἠ' + PositionX 433 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ἡ' + PositionX 598 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ἢ' + PositionX 724 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ἣ' + PositionX 700 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ἤ' + PositionX 712 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ἥ' + PositionX 676 + PositionY 200 + Width 10 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ἦ' + PositionX 257 + PositionY 88 + Width 10 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 11 + +Letter 'Ἧ' + PositionX 269 + PositionY 88 + Width 10 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 11 + +Letter 'ἰ' + PositionX 489 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ἱ' + PositionX 497 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ἲ' + PositionX 745 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ἳ' + PositionX 752 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ἴ' + PositionX 378 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ἵ' + PositionX 360 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ἶ' + PositionX 617 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ἷ' + PositionX 645 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'Ἰ' + PositionX 287 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter 'Ἱ' + PositionX 293 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + XAdvance 5 + +Letter 'Ἲ' + PositionX 455 + PositionY 274 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ἳ' + PositionX 464 + PositionY 274 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ἴ' + PositionX 593 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ἵ' + PositionX 601 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'Ἶ' + PositionX 457 + PositionY 140 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'Ἷ' + PositionX 753 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 7 + +Letter 'ὀ' + PositionX 657 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὁ' + PositionX 649 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὂ' + PositionX 633 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὃ' + PositionX 625 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὄ' + PositionX 617 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὅ' + PositionX 609 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ὀ' + PositionX 411 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ὁ' + PositionX 422 + PositionY 229 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ὂ' + PositionX 361 + PositionY 202 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ὃ' + PositionX 374 + PositionY 202 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ὄ' + PositionX 270 + PositionY 205 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ὅ' + PositionX 751 + PositionY 191 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'ὐ' + PositionX 601 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὑ' + PositionX 593 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὒ' + PositionX 585 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὓ' + PositionX 577 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὔ' + PositionX 569 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὕ' + PositionX 561 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὖ' + PositionX 398 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ὗ' + PositionX 609 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ὑ' + PositionX 545 + PositionY 209 + Width 10 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ὓ' + PositionX 335 + PositionY 204 + Width 11 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ὕ' + PositionX 322 + PositionY 204 + Width 11 + Height 7 + OffsetX 1 + XAdvance 11 + +Letter 'Ὗ' + PositionX 529 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 11 + +Letter 'ὠ' + PositionX 459 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ὡ' + PositionX 359 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ὢ' + PositionX 309 + PositionY 164 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ὣ' + PositionX 339 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ὤ' + PositionX 549 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ὥ' + PositionX 509 + PositionY 161 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ὦ' + PositionX 667 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ὧ' + PositionX 657 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'Ὠ' + PositionX 353 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ὡ' + PositionX 628 + PositionY 200 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ὢ' + PositionX 654 + PositionY 191 + Width 12 + Height 7 + OffsetX 2 + XAdvance 12 + +Letter 'Ὣ' + PositionX 682 + PositionY 191 + Width 12 + Height 7 + OffsetX 2 + XAdvance 12 + +Letter 'Ὤ' + PositionX 530 + PositionY 201 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ὥ' + PositionX 543 + PositionY 200 + Width 11 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'Ὦ' + PositionX 374 + PositionY 75 + Width 11 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 11 + +Letter 'Ὧ' + PositionX 465 + PositionY 74 + Width 11 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 11 + +Letter 'ὰ' + PositionX 521 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ά' + PositionX 513 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὲ' + PositionX 505 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'έ' + PositionX 497 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ὴ' + PositionX 513 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ή' + PositionX 473 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὶ' + PositionX 517 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ί' + PositionX 396 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ὸ' + PositionX 489 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ό' + PositionX 481 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὺ' + PositionX 473 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ύ' + PositionX 465 + PositionY 171 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ὼ' + PositionX 409 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ώ' + PositionX 399 + PositionY 162 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾀ' + PositionX 449 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾁ' + PositionX 441 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾂ' + PositionX 425 + PositionY 62 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾃ' + PositionX 369 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾄ' + PositionX 361 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾅ' + PositionX 313 + PositionY 63 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾆ' + PositionX 342 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ᾇ' + PositionX 366 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ᾈ' + PositionX 714 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ᾉ' + PositionX 754 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter 'ᾊ' + PositionX 541 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ᾋ' + PositionX 553 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ᾌ' + PositionX 601 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ᾍ' + PositionX 613 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ᾎ' + PositionX 523 + PositionY 1 + Width 9 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 10 + +Letter 'ᾏ' + PositionX 534 + PositionY 1 + Width 9 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 10 + +Letter 'ᾐ' + PositionX 534 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾑ' + PositionX 502 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾒ' + PositionX 518 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾓ' + PositionX 622 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾔ' + PositionX 638 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾕ' + PositionX 654 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾖ' + PositionX 350 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ᾗ' + PositionX 318 + PositionY 1 + Width 6 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ᾘ' + PositionX 425 + PositionY 85 + Width 9 + Height 9 + OffsetX 2 + XAdvance 9 + +Letter 'ᾙ' + PositionX 436 + PositionY 85 + Width 9 + Height 9 + OffsetX 2 + XAdvance 9 + +Letter 'ᾚ' + PositionX 757 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 11 + +Letter 'ᾛ' + PositionX 625 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 11 + +Letter 'ᾜ' + PositionX 661 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 11 + +Letter 'ᾝ' + PositionX 685 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + XAdvance 11 + +Letter 'ᾞ' + PositionX 466 + PositionY 1 + Width 10 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 11 + +Letter 'ᾟ' + PositionX 454 + PositionY 1 + Width 10 + Height 11 + OffsetX 1 + OffsetY 2 + XAdvance 11 + +Letter 'ᾠ' + PositionX 723 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾡ' + PositionX 713 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾢ' + PositionX 683 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾣ' + PositionX 643 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾤ' + PositionX 603 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾥ' + PositionX 687 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ᾦ' + PositionX 270 + PositionY 1 + Width 8 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ᾧ' + PositionX 280 + PositionY 1 + Width 8 + Height 12 + OffsetX 1 + OffsetY 3 + XAdvance 9 + +Letter 'ᾨ' + PositionX 637 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ᾩ' + PositionX 673 + PositionY 74 + Width 10 + Height 9 + OffsetX 2 + XAdvance 10 + +Letter 'ᾪ' + PositionX 306 + PositionY 76 + Width 12 + Height 9 + OffsetX 2 + XAdvance 12 + +Letter 'ᾫ' + PositionX 334 + PositionY 75 + Width 12 + Height 9 + OffsetX 2 + XAdvance 12 + +Letter 'ᾬ' + PositionX 491 + PositionY 74 + Width 11 + Height 9 + OffsetX 2 + XAdvance 11 + +Letter 'ᾭ' + PositionX 426 + PositionY 74 + Width 11 + Height 9 + OffsetX 2 + XAdvance 11 + +Letter 'ᾮ' + PositionX 416 + PositionY 1 + Width 11 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 11 + +Letter 'ᾯ' + PositionX 429 + PositionY 1 + Width 11 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 11 + +Letter 'ᾰ' + PositionX 345 + PositionY 172 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾱ' + PositionX 353 + PositionY 303 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ᾲ' + PositionX 566 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾳ' + PositionX 601 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ᾴ' + PositionX 598 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾶ' + PositionX 337 + PositionY 174 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ᾷ' + PositionX 614 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ᾰ' + PositionX 743 + PositionY 14 + Width 8 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 8 + +Letter 'Ᾱ' + PositionX 547 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter 'Ὰ' + PositionX 577 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ά' + PositionX 587 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'ᾼ' + PositionX 704 + PositionY 85 + Width 8 + Height 9 + OffsetX 2 + XAdvance 8 + +Letter '᾽' + PositionX 600 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter 'ι' + PositionX 521 + PositionY 404 + Width 3 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 4 + +Letter '᾿' + PositionX 590 + PositionY 399 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter '῀' + PositionX 694 + PositionY 392 + Width 5 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter '῁' + PositionX 396 + PositionY 387 + Width 5 + Height 4 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ῂ' + PositionX 646 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῃ' + PositionX 577 + PositionY 290 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ῄ' + PositionX 510 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῆ' + PositionX 662 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῇ' + PositionX 670 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'Ὲ' + PositionX 367 + PositionY 229 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Έ' + PositionX 279 + PositionY 232 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ὴ' + PositionX 631 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ή' + PositionX 554 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'ῌ' + PositionX 320 + PositionY 109 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter '῍' + PositionX 666 + PositionY 393 + Width 5 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter '῎' + PositionX 652 + PositionY 394 + Width 5 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter '῏' + PositionX 480 + PositionY 385 + Width 5 + Height 4 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ῐ' + PositionX 342 + PositionY 194 + Width 4 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ῑ' + PositionX 383 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + XAdvance 4 + +Letter 'ῒ' + PositionX 687 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ΐ' + PositionX 736 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'ῖ' + PositionX 759 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ῗ' + PositionX 715 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'Ῐ' + PositionX 722 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 3 + XAdvance 4 + +Letter 'Ῑ' + PositionX 592 + PositionY 140 + Width 5 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'Ὶ' + PositionX 355 + PositionY 312 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'Ί' + PositionX 306 + PositionY 313 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter '῝' + PositionX 659 + PositionY 394 + Width 5 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter '῞' + PositionX 680 + PositionY 393 + Width 5 + Height 2 + OffsetX 2 + XAdvance 4 + +Letter '῟' + PositionX 473 + PositionY 385 + Width 5 + Height 4 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ῠ' + PositionX 305 + PositionY 175 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῡ' + PositionX 561 + PositionY 291 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ῢ' + PositionX 702 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ΰ' + PositionX 710 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'ῤ' + PositionX 718 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῥ' + PositionX 734 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῦ' + PositionX 297 + PositionY 175 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 7 + +Letter 'ῧ' + PositionX 742 + PositionY 50 + Width 6 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 7 + +Letter 'Ῠ' + PositionX 725 + PositionY 38 + Width 7 + Height 10 + OffsetX 1 + OffsetY 3 + XAdvance 8 + +Letter 'Ῡ' + PositionX 311 + PositionY 109 + Width 7 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter 'Ὺ' + PositionX 389 + PositionY 220 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ύ' + PositionX 377 + PositionY 211 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ῥ' + PositionX 597 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '῭' + PositionX 525 + PositionY 395 + Width 7 + Height 2 + OffsetX 2 + XAdvance 6 + +Letter '΅' + PositionX 516 + PositionY 396 + Width 7 + Height 2 + OffsetX 2 + XAdvance 6 + +Letter '`' + PositionX 490 + PositionY 400 + Width 3 + Height 2 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ῲ' + PositionX 627 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ῳ' + PositionX 607 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ῴ' + PositionX 637 + PositionY 26 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ῶ' + PositionX 319 + PositionY 164 + Width 8 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ῷ' + PositionX 653 + PositionY 14 + Width 8 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'Ὸ' + PositionX 334 + PositionY 222 + Width 9 + Height 7 + OffsetX 1 + XAdvance 10 + +Letter 'Ό' + PositionX 312 + PositionY 223 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'Ὼ' + PositionX 400 + PositionY 202 + Width 11 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'Ώ' + PositionX 616 + PositionY 200 + Width 10 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'ῼ' + PositionX 287 + PositionY 99 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter '´' + PositionX 425 + PositionY 402 + Width 3 + Height 2 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter '῾' + PositionX 420 + PositionY 402 + Width 3 + Height 2 + OffsetX 1 + XAdvance 4 + +Letter ' ' + PositionX 486 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 6 + +Letter ' ' + PositionX 481 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 11 + +Letter ' ' + PositionX 631 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 6 + +Letter ' ' + PositionX 691 + PositionY 401 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 11 + +Letter ' ' + PositionX 686 + PositionY 401 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter ' ' + PositionX 681 + PositionY 401 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter ' ' + PositionX 676 + PositionY 401 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 3 + +Letter ' ' + PositionX 671 + PositionY 401 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 7 + +Letter ' ' + PositionX 666 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter ' ' + PositionX 661 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 3 + +Letter ' ' + PositionX 656 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 2 + +Letter '​' + PositionX 263 + PositionY 416 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '‌' + PositionX 724 + PositionY 402 + Width 0 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 1 + +Letter '‍' + PositionX 636 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '‎' + PositionX 292 + PositionY 410 + Width 9 + Height 1 + OffsetX 4 + OffsetY -8 + XAdvance 1 + +Letter '‏' + PositionX 403 + PositionY 407 + Width 6 + Height 1 + OffsetX 5 + OffsetY -8 + XAdvance 1 + +Letter '‒' + PositionX 323 + PositionY 410 + Width 8 + Height 1 + OffsetX 2 + OffsetY -4 + XAdvance 7 + +Letter '―' + PositionX 269 + PositionY 410 + Width 10 + Height 1 + OffsetX 1 + OffsetY -4 + XAdvance 11 + +Letter '‖' + PositionX 710 + PositionY 299 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter '‗' + PositionX 363 + PositionY 410 + Width 8 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 7 + +Letter '‛' + PositionX 412 + PositionY 397 + Width 3 + Height 3 + OffsetX 1 + XAdvance 4 + +Letter '‟' + PositionX 426 + PositionY 392 + Width 5 + Height 3 + OffsetX 1 + XAdvance 6 + +Letter '‪' + PositionX 427 + PositionY 406 + Width 6 + Height 1 + OffsetX 3 + OffsetY -8 + XAdvance 1 + +Letter '‫' + PositionX 576 + PositionY 403 + Width 3 + Height 1 + OffsetX 3 + OffsetY -8 + XAdvance 1 + +Letter '‬' + PositionX 571 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '‭' + PositionX 566 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '‮' + PositionX 561 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter ' ' + PositionX 556 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 3 + +Letter '′' + PositionX 433 + PositionY 397 + Width 2 + Height 3 + OffsetX 1 + XAdvance 3 + +Letter '″' + PositionX 433 + PositionY 392 + Width 5 + Height 3 + OffsetX 1 + XAdvance 6 + +Letter '‴' + PositionX 266 + PositionY 396 + Width 7 + Height 3 + OffsetX 2 + XAdvance 6 + +Letter '‼' + PositionX 545 + PositionY 291 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter '‾' + PositionX 442 + PositionY 405 + Width 5 + Height 1 + OffsetX 2 + XAdvance 4 + +Letter '⁄' + PositionX 537 + PositionY 291 + Width 6 + Height 7 + OffsetX 3 + XAdvance 3 + +Letter '⁞' + PositionX 347 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter '' + PositionX 551 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '' + PositionX 546 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '' + PositionX 541 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '' + PositionX 536 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '' + PositionX 641 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter '' + PositionX 621 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 1 + +Letter 'ⁿ' + PositionX 588 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -1 + XAdvance 5 + +Letter 'ₐ' + PositionX 570 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ₑ' + PositionX 558 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ₒ' + PositionX 293 + PositionY 396 + Width 6 + Height 3 + OffsetX 2 + OffsetY -5 + XAdvance 5 + +Letter 'ₓ' + PositionX 546 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter 'ₔ' + PositionX 534 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -5 + XAdvance 5 + +Letter '₠' + PositionX 617 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '₡' + PositionX 293 + PositionY 110 + Width 7 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter '₢' + PositionX 572 + PositionY 254 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter '₣' + PositionX 608 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '₤' + PositionX 671 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '₥' + PositionX 752 + PositionY 218 + Width 9 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 10 + +Letter '₦' + PositionX 741 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '₧' + PositionX 664 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '₨' + PositionX 724 + PositionY 191 + Width 12 + Height 7 + OffsetX 1 + XAdvance 13 + +Letter '₩' + PositionX 439 + PositionY 202 + Width 11 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter '₪' + PositionX 289 + PositionY 355 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter '₫' + PositionX 621 + PositionY 308 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter '₭' + PositionX 717 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '₮' + PositionX 637 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '₯' + PositionX 321 + PositionY 15 + Width 13 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 12 + +Letter '₰' + PositionX 275 + PositionY 110 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter '₱' + PositionX 268 + PositionY 232 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '₲' + PositionX 447 + PositionY 96 + Width 8 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter '₳' + PositionX 686 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '₴' + PositionX 730 + PositionY 218 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter '₵' + PositionX 266 + PositionY 110 + Width 7 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter '₸' + PositionX 647 + PositionY 227 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter '₹' + PositionX 497 + PositionY 291 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter '⃰' + PositionX 614 + PositionY 383 + Width 3 + Height 4 + OffsetX 3 + OffsetY 2 + XAdvance 1 + +Letter '℅' + PositionX 296 + PositionY 205 + Width 11 + Height 7 + OffsetX 2 + XAdvance 10 + +Letter 'ℓ' + PositionX 495 + PositionY 309 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter '℗' + PositionX 345 + PositionY 222 + Width 9 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ω' + PositionX 312 + PositionY 232 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '℮' + PositionX 465 + PositionY 364 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '⅍' + PositionX 640 + PositionY 191 + Width 12 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'ⅎ' + PositionX 411 + PositionY 379 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter '⅓' + PositionX 657 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '⅔' + PositionX 629 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter '⅛' + PositionX 667 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '⅜' + PositionX 697 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '⅝' + PositionX 707 + PositionY 227 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter '⅞' + PositionX 640 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + XAdvance 9 + +Letter 'ↄ' + PositionX 527 + PositionY 356 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '←' + PositionX 713 + PositionY 382 + Width 10 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 11 + +Letter '↑' + PositionX 487 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter '→' + PositionX 677 + PositionY 383 + Width 10 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 11 + +Letter '↓' + PositionX 627 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter '↔' + PositionX 701 + PositionY 382 + Width 10 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 11 + +Letter '↕' + PositionX 620 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter '↨' + PositionX 599 + PositionY 140 + Width 5 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter '∂' + PositionX 356 + PositionY 267 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter '∆' + PositionX 277 + PositionY 331 + Width 8 + Height 6 + OffsetX 2 + OffsetY -1 + XAdvance 7 + +Letter '∏' + PositionX 387 + PositionY 97 + Width 8 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter '∑' + PositionX 257 + PositionY 110 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter '−' + PositionX 419 + PositionY 406 + Width 6 + Height 1 + OffsetX 1 + OffsetY -3 + XAdvance 7 + +Letter '∕' + PositionX 489 + PositionY 291 + Width 6 + Height 7 + OffsetX 3 + XAdvance 3 + +Letter '∙' + PositionX 646 + PositionY 402 + Width 3 + Height 1 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter '√' + PositionX 417 + PositionY 141 + Width 6 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 6 + +Letter '∞' + PositionX 257 + PositionY 396 + Width 7 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter '∟' + PositionX 346 + PositionY 347 + Width 2 + Height 6 + OffsetY -1 + XAdvance 11 + +Letter '∩' + PositionX 383 + PositionY 265 + Width 7 + Height 7 + OffsetX 1 + XAdvance 8 + +Letter '∫' + PositionX 701 + PositionY 62 + Width 5 + Height 10 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter '≈' + PositionX 756 + PositionY 376 + Width 7 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter '≠' + PositionX 509 + PositionY 264 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter '≡' + PositionX 569 + PositionY 363 + Width 6 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '≤' + PositionX 673 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter '≥' + PositionX 592 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter '⌂' + PositionX 305 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '⌐' + PositionX 333 + PositionY 396 + Width 6 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '⌠' + PositionX 285 + PositionY 76 + Width 2 + Height 10 + OffsetX -1 + OffsetY 1 + XAdvance 7 + +Letter '⌡' + PositionX 277 + PositionY 76 + Width 2 + Height 10 + OffsetX -1 + OffsetY 1 + XAdvance 7 + +Letter '─' + PositionX 711 + PositionY 396 + Width 21 + Height 1 + OffsetX 8 + OffsetY -8 + XAdvance 8 + +Letter '│' + PositionX 300 + PositionY 15 + Width 3 + Height 11 + OffsetY 2 + XAdvance 7 + +Letter '┌' + PositionX 649 + PositionY 376 + Width 3 + Height 5 + OffsetX -1 + OffsetY -4 + XAdvance 8 + +Letter '┐' + PositionX 644 + PositionY 376 + Width 3 + Height 5 + OffsetX -1 + OffsetY -4 + XAdvance 8 + +Letter '└' + PositionX 299 + PositionY 347 + Width 3 + Height 6 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '┘' + PositionX 289 + PositionY 347 + Width 3 + Height 6 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '├' + PositionX 290 + PositionY 15 + Width 3 + Height 11 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '┤' + PositionX 285 + PositionY 15 + Width 3 + Height 11 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '┬' + PositionX 614 + PositionY 376 + Width 3 + Height 5 + OffsetX -1 + OffsetY -4 + XAdvance 8 + +Letter '┴' + PositionX 279 + PositionY 347 + Width 3 + Height 6 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '┼' + PositionX 295 + PositionY 15 + Width 3 + Height 11 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '═' + PositionX 281 + PositionY 410 + Width 9 + Height 1 + OffsetX 2 + OffsetY -4 + XAdvance 8 + +Letter '║' + PositionX 278 + PositionY 15 + Width 5 + Height 11 + OffsetY 2 + XAdvance 8 + +Letter '╒' + PositionX 425 + PositionY 336 + Width 6 + Height 6 + OffsetX -1 + OffsetY -3 + XAdvance 8 + +Letter '╓' + PositionX 285 + PositionY 383 + Width 5 + Height 5 + OffsetY -4 + XAdvance 8 + +Letter '╔' + PositionX 628 + PositionY 325 + Width 7 + Height 6 + OffsetY -3 + XAdvance 8 + +Letter '╕' + PositionX 481 + PositionY 335 + Width 6 + Height 6 + OffsetX 2 + OffsetY -3 + XAdvance 8 + +Letter '╖' + PositionX 751 + PositionY 369 + Width 5 + Height 5 + OffsetY -4 + XAdvance 8 + +Letter '╗' + PositionX 475 + PositionY 327 + Width 7 + Height 6 + OffsetX 2 + OffsetY -3 + XAdvance 8 + +Letter '╘' + PositionX 473 + PositionY 291 + Width 6 + Height 7 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '╙' + PositionX 621 + PositionY 333 + Width 5 + Height 6 + OffsetY 2 + XAdvance 8 + +Letter '╚' + PositionX 536 + PositionY 264 + Width 7 + Height 7 + OffsetY 2 + XAdvance 8 + +Letter '╛' + PositionX 465 + PositionY 292 + Width 6 + Height 7 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╜' + PositionX 565 + PositionY 334 + Width 5 + Height 6 + OffsetY 2 + XAdvance 8 + +Letter '╝' + PositionX 545 + PositionY 264 + Width 7 + Height 7 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╞' + PositionX 724 + PositionY 1 + Width 6 + Height 11 + OffsetX -1 + OffsetY 2 + XAdvance 8 + +Letter '╟' + PositionX 271 + PositionY 15 + Width 5 + Height 11 + OffsetY 2 + XAdvance 8 + +Letter '╠' + PositionX 659 + PositionY 1 + Width 7 + Height 11 + OffsetY 2 + XAdvance 8 + +Letter '╡' + PositionX 684 + PositionY 1 + Width 6 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╢' + PositionX 264 + PositionY 15 + Width 5 + Height 11 + OffsetY 2 + XAdvance 8 + +Letter '╣' + PositionX 650 + PositionY 1 + Width 7 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╤' + PositionX 645 + PositionY 341 + Width 9 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 8 + +Letter '╥' + PositionX 362 + PositionY 383 + Width 5 + Height 5 + OffsetY -4 + XAdvance 8 + +Letter '╦' + PositionX 733 + PositionY 341 + Width 9 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 8 + +Letter '╧' + PositionX 673 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╨' + PositionX 607 + PositionY 333 + Width 5 + Height 6 + OffsetY 2 + XAdvance 8 + +Letter '╩' + PositionX 728 + PositionY 209 + Width 9 + Height 7 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╪' + PositionX 545 + PositionY 1 + Width 9 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '╫' + PositionX 761 + PositionY 1 + Width 5 + Height 11 + OffsetY 2 + XAdvance 8 + +Letter '╬' + PositionX 512 + PositionY 1 + Width 9 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '▀' + PositionX 635 + PositionY 317 + Width 9 + Height 6 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '▄' + PositionX 268 + PositionY 355 + Width 9 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 8 + +Letter '█' + PositionX 501 + PositionY 1 + Width 9 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '▌' + PositionX 257 + PositionY 15 + Width 5 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '▐' + PositionX 740 + PositionY 1 + Width 5 + Height 11 + OffsetX -2 + OffsetY 2 + XAdvance 8 + +Letter '░' + PositionX 734 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + OffsetY 2 + XAdvance 8 + +Letter '▒' + PositionX 337 + PositionY 86 + Width 9 + Height 9 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '▓' + PositionX 490 + PositionY 1 + Width 9 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 8 + +Letter '■' + PositionX 449 + PositionY 365 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '□' + PositionX 441 + PositionY 365 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '▪' + PositionX 642 + PositionY 389 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter '▫' + PositionX 684 + PositionY 388 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter '▬' + PositionX 734 + PositionY 396 + Width 12 + Height 1 + OffsetX 2 + OffsetY -4 + XAdvance 11 + +Letter '▲' + PositionX 717 + PositionY 227 + Width 8 + Height 7 + XAdvance 11 + +Letter '►' + PositionX 737 + PositionY 227 + Width 8 + Height 7 + XAdvance 11 + +Letter '▼' + PositionX 757 + PositionY 227 + Width 8 + Height 7 + XAdvance 11 + +Letter '◄' + PositionX 257 + PositionY 241 + Width 8 + Height 7 + XAdvance 11 + +Letter '◊' + PositionX 581 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + XAdvance 6 + +Letter '○' + PositionX 350 + PositionY 390 + Width 6 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '◌' + PositionX 441 + PositionY 335 + Width 6 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '●' + PositionX 358 + PositionY 390 + Width 6 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '◘' + PositionX 433 + PositionY 365 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter '◙' + PositionX 367 + PositionY 330 + Width 8 + Height 6 + OffsetX 2 + OffsetY -1 + XAdvance 7 + +Letter '◦' + PositionX 510 + PositionY 391 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter '☺' + PositionX 277 + PositionY 241 + Width 8 + Height 7 + OffsetY -1 + XAdvance 11 + +Letter '☻' + PositionX 287 + PositionY 241 + Width 8 + Height 7 + OffsetY -1 + XAdvance 12 + +Letter '☼' + PositionX 348 + PositionY 75 + Width 11 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 10 + +Letter '♀' + PositionX 750 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 9 + +Letter '♂' + PositionX 741 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter '♠' + PositionX 449 + PositionY 335 + Width 6 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 6 + +Letter '♣' + PositionX 547 + PositionY 326 + Width 7 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter '♥' + PositionX 457 + PositionY 335 + Width 6 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter '♦' + PositionX 642 + PositionY 333 + Width 5 + Height 6 + OffsetX 1 + OffsetY -1 + XAdvance 6 + +Letter '♪' + PositionX 441 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter '♫' + PositionX 650 + PositionY 161 + Width 7 + Height 8 + OffsetX 1 + XAdvance 9 + +Letter '♯' + PositionX 677 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + XAdvance 6 + +Letter 'Ⱡ' + PositionX 477 + PositionY 246 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'ⱡ' + PositionX 744 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + XAdvance 4 + +Letter 'Ɫ' + PositionX 307 + PositionY 241 + Width 8 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'Ᵽ' + PositionX 317 + PositionY 241 + Width 8 + Height 7 + OffsetX 2 + XAdvance 8 + +Letter 'Ɽ' + PositionX 732 + PositionY 96 + Width 7 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ⱥ' + PositionX 673 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ⱦ' + PositionX 696 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + XAdvance 4 + +Letter 'Ⱨ' + PositionX 564 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ⱨ' + PositionX 713 + PositionY 161 + Width 7 + Height 8 + OffsetX 1 + XAdvance 7 + +Letter 'Ⱪ' + PositionX 544 + PositionY 85 + Width 8 + Height 9 + OffsetX 1 + XAdvance 8 + +Letter 'ⱪ' + PositionX 722 + PositionY 161 + Width 7 + Height 8 + OffsetX 1 + XAdvance 7 + +Letter 'Ⱬ' + PositionX 577 + PositionY 96 + Width 8 + Height 9 + OffsetX 2 + XAdvance 7 + +Letter 'ⱬ' + PositionX 493 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'Ɑ' + PositionX 327 + PositionY 241 + Width 8 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ⱱ' + PositionX 479 + PositionY 350 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'Ⱳ' + PositionX 598 + PositionY 191 + Width 12 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter 'ⱳ' + PositionX 464 + PositionY 343 + Width 10 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ⱴ' + PositionX 409 + PositionY 365 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'Ⱶ' + PositionX 488 + PositionY 309 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'ⱶ' + PositionX 559 + PositionY 377 + Width 4 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'ⱷ' + PositionX 284 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter '⸗' + PositionX 604 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -3 + XAdvance 4 + +Letter 'ꜗ' + PositionX 372 + PositionY 401 + Width 3 + Height 3 + OffsetX 2 + XAdvance 1 + +Letter 'ꜘ' + PositionX 377 + PositionY 401 + Width 3 + Height 3 + OffsetX 2 + XAdvance 1 + +Letter 'ꜙ' + PositionX 382 + PositionY 401 + Width 3 + Height 3 + OffsetX 2 + XAdvance 1 + +Letter 'ꜚ' + PositionX 495 + PositionY 400 + Width 3 + Height 2 + OffsetX 2 + XAdvance 1 + +Letter 'ꜛ' + PositionX 494 + PositionY 385 + Width 5 + Height 4 + OffsetX 1 + OffsetY 2 + XAdvance 6 + +Letter 'ꜜ' + PositionX 487 + PositionY 385 + Width 5 + Height 4 + OffsetX 1 + OffsetY 2 + XAdvance 6 + +Letter 'ꜝ' + PositionX 664 + PositionY 376 + Width 3 + Height 5 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ꜞ' + PositionX 599 + PositionY 377 + Width 3 + Height 5 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ꜟ' + PositionX 604 + PositionY 376 + Width 3 + Height 5 + OffsetX 1 + XAdvance 4 + +Letter '꜠' + PositionX 362 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + XAdvance 1 + +Letter '꜡' + PositionX 320 + PositionY 406 + Width 4 + Height 2 + OffsetX 3 + OffsetY -5 + XAdvance 1 + +Letter 'ꞈ' + PositionX 501 + PositionY 404 + Width 3 + Height 1 + OffsetX 1 + OffsetY -8 + XAdvance 4 + +Letter '꞉' + PositionX 764 + PositionY 382 + Width 3 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter '꞊' + PositionX 576 + PositionY 390 + Width 4 + Height 3 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'Ꞌ' + PositionX 765 + PositionY 376 + Width 2 + Height 4 + OffsetX 1 + XAdvance 3 + +Letter 'ꞌ' + PositionX 417 + PositionY 397 + Width 2 + Height 3 + OffsetX 1 + XAdvance 3 + +Letter 'fi' + PositionX 513 + PositionY 246 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'fl' + PositionX 576 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'יִ' + PositionX 673 + PositionY 376 + Width 2 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 3 + +Letter 'ﬞ' + PositionX 479 + PositionY 191 + Width 3 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 1 + +Letter 'ײַ' + PositionX 355 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ﬠ' + PositionX 377 + PositionY 368 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﬡ' + PositionX 320 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﬢ' + PositionX 711 + PositionY 341 + Width 9 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ﬣ' + PositionX 399 + PositionY 351 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ﬤ' + PositionX 369 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﬥ' + PositionX 425 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ﬦ' + PositionX 389 + PositionY 351 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ﬧ' + PositionX 369 + PositionY 354 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 8 + +Letter 'ﬨ' + PositionX 359 + PositionY 355 + Width 8 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter '﬩' + PositionX 325 + PositionY 396 + Width 6 + Height 3 + OffsetX 1 + OffsetY -3 + XAdvance 7 + +Letter 'שׁ' + PositionX 419 + PositionY 256 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'שׂ' + PositionX 455 + PositionY 256 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'שּׁ' + PositionX 509 + PositionY 255 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'שּׂ' + PositionX 563 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + XAdvance 7 + +Letter 'אַ' + PositionX 409 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'אָ' + PositionX 393 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'אּ' + PositionX 345 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'בּ' + PositionX 419 + PositionY 358 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'גּ' + PositionX 758 + PositionY 369 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'דּ' + PositionX 379 + PositionY 352 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'הּ' + PositionX 337 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'וּ' + PositionX 451 + PositionY 379 + Width 4 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'זּ' + PositionX 329 + PositionY 369 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'טּ' + PositionX 321 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'יּ' + PositionX 564 + PositionY 390 + Width 4 + Height 3 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ךּ' + PositionX 377 + PositionY 292 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'כּ' + PositionX 369 + PositionY 383 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'לּ' + PositionX 334 + PositionY 313 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'מּ' + PositionX 313 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'נּ' + PositionX 445 + PositionY 379 + Width 4 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 5 + +Letter 'סּ' + PositionX 297 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ףּ' + PositionX 369 + PositionY 292 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'פּ' + PositionX 281 + PositionY 369 + Width 6 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'צּ' + PositionX 273 + PositionY 369 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'קּ' + PositionX 361 + PositionY 294 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'רּ' + PositionX 751 + PositionY 355 + Width 6 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'שּ' + PositionX 311 + PositionY 362 + Width 7 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'תּ' + PositionX 257 + PositionY 362 + Width 7 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'וֹ' + PositionX 765 + PositionY 272 + Width 2 + Height 7 + OffsetX 1 + XAdvance 3 + +Letter 'בֿ' + PositionX 437 + PositionY 265 + Width 7 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'כֿ' + PositionX 278 + PositionY 313 + Width 5 + Height 7 + OffsetX 1 + XAdvance 6 + +Letter 'פֿ' + PositionX 353 + PositionY 294 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ﭏ' + PositionX 329 + PositionY 295 + Width 6 + Height 7 + OffsetX 1 + XAdvance 7 + +Letter 'ﭐ' + PositionX 408 + PositionY 192 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ﭑ' + PositionX 402 + PositionY 192 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ﭒ' + PositionX 337 + PositionY 240 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﭓ' + PositionX 387 + PositionY 247 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﭔ' + PositionX 696 + PositionY 299 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﭕ' + PositionX 677 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﭖ' + PositionX 347 + PositionY 240 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﭗ' + PositionX 357 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﭘ' + PositionX 565 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﭙ' + PositionX 558 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﭚ' + PositionX 387 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﭛ' + PositionX 397 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﭜ' + PositionX 509 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﭝ' + PositionX 390 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﭞ' + PositionX 287 + PositionY 331 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ﭟ' + PositionX 427 + PositionY 328 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ﭠ' + PositionX 369 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭡ' + PositionX 362 + PositionY 312 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭢ' + PositionX 731 + PositionY 317 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ﭣ' + PositionX 721 + PositionY 317 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ﭤ' + PositionX 264 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭥ' + PositionX 320 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭦ' + PositionX 407 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'ﭧ' + PositionX 417 + PositionY 238 + Width 8 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 8 + +Letter 'ﭨ' + PositionX 467 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭩ' + PositionX 446 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭪ' + PositionX 400 + PositionY 220 + Width 9 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ﭫ' + PositionX 411 + PositionY 220 + Width 9 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ﭬ' + PositionX 717 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ﭭ' + PositionX 299 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭮ' + PositionX 433 + PositionY 220 + Width 9 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ﭯ' + PositionX 444 + PositionY 220 + Width 9 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 9 + +Letter 'ﭰ' + PositionX 738 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ﭱ' + PositionX 516 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﭲ' + PositionX 585 + PositionY 281 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭳ' + PositionX 644 + PositionY 254 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭴ' + PositionX 653 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﭵ' + PositionX 275 + PositionY 268 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﭶ' + PositionX 561 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭷ' + PositionX 284 + PositionY 268 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭸ' + PositionX 727 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﭹ' + PositionX 718 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﭺ' + PositionX 545 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭻ' + PositionX 383 + PositionY 256 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭼ' + PositionX 482 + PositionY 264 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﭽ' + PositionX 338 + PositionY 267 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﭾ' + PositionX 521 + PositionY 282 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﭿ' + PositionX 522 + PositionY 246 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﮀ' + PositionX 608 + PositionY 263 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﮁ' + PositionX 392 + PositionY 265 + Width 7 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﮂ' + PositionX 720 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ﮃ' + PositionX 257 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ﮄ' + PositionX 763 + PositionY 218 + Width 4 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ﮅ' + PositionX 732 + PositionY 308 + Width 4 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ﮆ' + PositionX 390 + PositionY 192 + Width 4 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ﮇ' + PositionX 318 + PositionY 194 + Width 4 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 4 + +Letter 'ﮈ' + PositionX 257 + PositionY 195 + Width 5 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ﮉ' + PositionX 264 + PositionY 195 + Width 5 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ﮊ' + PositionX 753 + PositionY 118 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ﮋ' + PositionX 321 + PositionY 131 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ﮌ' + PositionX 337 + PositionY 130 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ﮍ' + PositionX 345 + PositionY 130 + Width 6 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ﮎ' + PositionX 530 + PositionY 318 + Width 10 + Height 6 + OffsetX 2 + XAdvance 9 + +Letter 'ﮏ' + PositionX 493 + PositionY 318 + Width 11 + Height 6 + OffsetX 2 + XAdvance 10 + +Letter 'ﮐ' + PositionX 489 + PositionY 334 + Width 6 + Height 6 + OffsetX 2 + XAdvance 5 + +Letter 'ﮑ' + PositionX 646 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + XAdvance 6 + +Letter 'ﮒ' + PositionX 644 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ﮓ' + PositionX 485 + PositionY 151 + Width 11 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 10 + +Letter 'ﮔ' + PositionX 617 + PositionY 181 + Width 6 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ﮕ' + PositionX 578 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﮖ' + PositionX 478 + PositionY 1 + Width 10 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ﮗ' + PositionX 403 + PositionY 1 + Width 11 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 10 + +Letter 'ﮘ' + PositionX 732 + PositionY 1 + Width 6 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ﮙ' + PositionX 632 + PositionY 1 + Width 7 + Height 11 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﮚ' + PositionX 656 + PositionY 151 + Width 10 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 9 + +Letter 'ﮛ' + PositionX 511 + PositionY 151 + Width 11 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 10 + +Letter 'ﮜ' + PositionX 321 + PositionY 174 + Width 6 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ﮝ' + PositionX 596 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﮞ' + PositionX 433 + PositionY 336 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ﮟ' + PositionX 417 + PositionY 336 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ﮠ' + PositionX 313 + PositionY 131 + Width 6 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ﮡ' + PositionX 257 + PositionY 132 + Width 6 + Height 9 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ﮢ' + PositionX 607 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﮣ' + PositionX 460 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﮤ' + PositionX 332 + PositionY 322 + Width 3 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ﮥ' + PositionX 465 + PositionY 283 + Width 6 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 5 + +Letter 'ﮦ' + PositionX 649 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ﮧ' + PositionX 366 + PositionY 390 + Width 6 + Height 4 + OffsetX 2 + OffsetY -3 + XAdvance 5 + +Letter 'ﮨ' + PositionX 724 + PositionY 299 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﮩ' + PositionX 684 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + OffsetY -3 + XAdvance 4 + +Letter 'ﮪ' + PositionX 591 + PositionY 356 + Width 6 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﮫ' + PositionX 529 + PositionY 334 + Width 6 + Height 6 + OffsetX 2 + XAdvance 5 + +Letter 'ﮬ' + PositionX 575 + PositionY 356 + Width 6 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﮭ' + PositionX 520 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﮮ' + PositionX 568 + PositionY 342 + Width 9 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 9 + +Letter 'ﮯ' + PositionX 557 + PositionY 342 + Width 9 + Height 5 + OffsetX 1 + OffsetY -4 + XAdvance 9 + +Letter 'ﮰ' + PositionX 268 + PositionY 223 + Width 9 + Height 7 + OffsetX 1 + XAdvance 9 + +Letter 'ﮱ' + PositionX 268 + PositionY 165 + Width 9 + Height 8 + OffsetX 1 + OffsetY -1 + XAdvance 9 + +Letter 'ﯓ' + PositionX 686 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﯔ' + PositionX 695 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﯕ' + PositionX 289 + PositionY 175 + Width 6 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ﯖ' + PositionX 281 + PositionY 175 + Width 6 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ﯗ' + PositionX 651 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯘ' + PositionX 642 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯙ' + PositionX 633 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯚ' + PositionX 624 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯛ' + PositionX 581 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﯜ' + PositionX 374 + PositionY 39 + Width 7 + Height 10 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﯝ' + PositionX 615 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯞ' + PositionX 606 + PositionY 96 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯟ' + PositionX 680 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯠ' + PositionX 700 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﯡ' + PositionX 709 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﯢ' + PositionX 671 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯣ' + PositionX 662 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﯤ' + PositionX 377 + PositionY 283 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﯥ' + PositionX 409 + PositionY 351 + Width 8 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 7 + +Letter 'ﯦ' + PositionX 572 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﯧ' + PositionX 285 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﯨ' + PositionX 466 + PositionY 386 + Width 5 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﯩ' + PositionX 438 + PositionY 386 + Width 5 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﯼ' + PositionX 273 + PositionY 339 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﯽ' + PositionX 539 + PositionY 349 + Width 8 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 7 + +Letter 'ﯾ' + PositionX 656 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﯿ' + PositionX 663 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﱞ' + PositionX 485 + PositionY 400 + Width 3 + Height 2 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter 'ﱟ' + PositionX 262 + PositionY 401 + Width 3 + Height 3 + OffsetX 2 + OffsetY 3 + XAdvance 1 + +Letter 'ﱠ' + PositionX 550 + PositionY 399 + Width 3 + Height 2 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter 'ﱡ' + PositionX 630 + PositionY 398 + Width 3 + Height 2 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter 'ﱢ' + PositionX 660 + PositionY 398 + Width 3 + Height 2 + OffsetX 2 + OffsetY 2 + XAdvance 1 + +Letter '﴾' + PositionX 262 + PositionY 76 + Width 3 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter '﴿' + PositionX 257 + PositionY 76 + Width 3 + Height 10 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ﷲ' + PositionX 577 + PositionY 74 + Width 10 + Height 9 + OffsetX 1 + OffsetY 3 + XAdvance 10 + +Letter '﷼' + PositionX 289 + PositionY 76 + Width 15 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 13 + +Letter '︠' + PositionX 271 + PositionY 406 + Width 5 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 1 + +Letter '︡' + PositionX 264 + PositionY 406 + Width 5 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter '︢' + PositionX 687 + PositionY 393 + Width 5 + Height 2 + OffsetX 2 + OffsetY 1 + XAdvance 1 + +Letter '︣' + PositionX 622 + PositionY 394 + Width 6 + Height 2 + OffsetX 3 + OffsetY 1 + XAdvance 1 + +Letter 'ﺀ' + PositionX 425 + PositionY 379 + Width 5 + Height 5 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ﺁ' + PositionX 306 + PositionY 195 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ﺂ' + PositionX 710 + PositionY 181 + Width 5 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 4 + +Letter 'ﺃ' + PositionX 533 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + OffsetY 2 + XAdvance 3 + +Letter 'ﺄ' + PositionX 438 + PositionY 192 + Width 4 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 3 + +Letter 'ﺅ' + PositionX 599 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﺆ' + PositionX 581 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﺇ' + PositionX 509 + PositionY 191 + Width 2 + Height 8 + OffsetX 1 + XAdvance 3 + +Letter 'ﺈ' + PositionX 450 + PositionY 191 + Width 4 + Height 8 + OffsetX 2 + XAdvance 3 + +Letter 'ﺉ' + PositionX 733 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -1 + XAdvance 7 + +Letter 'ﺊ' + PositionX 699 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -2 + XAdvance 7 + +Letter 'ﺋ' + PositionX 558 + PositionY 334 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﺌ' + PositionX 698 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﺍ' + PositionX 378 + PositionY 344 + Width 2 + Height 6 + OffsetX 1 + XAdvance 3 + +Letter 'ﺎ' + PositionX 759 + PositionY 333 + Width 4 + Height 6 + OffsetX 2 + XAdvance 3 + +Letter 'ﺏ' + PositionX 377 + PositionY 328 + Width 8 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﺐ' + PositionX 347 + PositionY 331 + Width 8 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 8 + +Letter 'ﺑ' + PositionX 537 + PositionY 334 + Width 5 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﺒ' + PositionX 635 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﺓ' + PositionX 309 + PositionY 347 + Width 3 + Height 6 + OffsetX 1 + XAdvance 4 + +Letter 'ﺔ' + PositionX 673 + PositionY 181 + Width 6 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 5 + +Letter 'ﺕ' + PositionX 309 + PositionY 355 + Width 8 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter 'ﺖ' + PositionX 279 + PositionY 355 + Width 8 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 8 + +Letter 'ﺗ' + PositionX 551 + PositionY 334 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﺘ' + PositionX 544 + PositionY 334 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﺙ' + PositionX 437 + PositionY 327 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ﺚ' + PositionX 357 + PositionY 330 + Width 8 + Height 6 + OffsetX 1 + XAdvance 8 + +Letter 'ﺛ' + PositionX 271 + PositionY 313 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﺜ' + PositionX 502 + PositionY 309 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﺝ' + PositionX 621 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﺞ' + PositionX 518 + PositionY 264 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﺟ' + PositionX 655 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﺠ' + PositionX 637 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﺡ' + PositionX 565 + PositionY 272 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﺢ' + PositionX 410 + PositionY 265 + Width 7 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﺣ' + PositionX 266 + PositionY 390 + Width 7 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﺤ' + PositionX 275 + PositionY 390 + Width 7 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﺥ' + PositionX 729 + PositionY 129 + Width 6 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ﺦ' + PositionX 644 + PositionY 118 + Width 7 + Height 9 + OffsetX 1 + XAdvance 7 + +Letter 'ﺧ' + PositionX 619 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + XAdvance 6 + +Letter 'ﺨ' + PositionX 610 + PositionY 325 + Width 7 + Height 6 + OffsetX 2 + XAdvance 6 + +Letter 'ﺩ' + PositionX 511 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ﺪ' + PositionX 499 + PositionY 378 + Width 4 + Height 5 + OffsetX 1 + OffsetY -1 + XAdvance 4 + +Letter 'ﺫ' + PositionX 275 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ﺬ' + PositionX 305 + PositionY 322 + Width 4 + Height 7 + OffsetX 1 + OffsetY 1 + XAdvance 4 + +Letter 'ﺭ' + PositionX 513 + PositionY 334 + Width 6 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﺮ' + PositionX 385 + PositionY 336 + Width 6 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﺯ' + PositionX 740 + PositionY 161 + Width 6 + Height 8 + OffsetX 2 + XAdvance 5 + +Letter 'ﺰ' + PositionX 748 + PositionY 161 + Width 6 + Height 8 + OffsetX 2 + XAdvance 5 + +Letter 'ﺱ' + PositionX 518 + PositionY 318 + Width 10 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ﺲ' + PositionX 506 + PositionY 318 + Width 10 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 10 + +Letter 'ﺳ' + PositionX 725 + PositionY 382 + Width 8 + Height 3 + OffsetX 2 + OffsetY -3 + XAdvance 7 + +Letter 'ﺴ' + PositionX 735 + PositionY 382 + Width 8 + Height 3 + OffsetX 2 + OffsetY -3 + XAdvance 7 + +Letter 'ﺵ' + PositionX 524 + PositionY 151 + Width 10 + Height 8 + OffsetX 1 + XAdvance 10 + +Letter 'ﺶ' + PositionX 584 + PositionY 151 + Width 10 + Height 8 + OffsetX 1 + XAdvance 10 + +Letter 'ﺷ' + PositionX 417 + PositionY 328 + Width 8 + Height 6 + OffsetX 2 + XAdvance 7 + +Letter 'ﺸ' + PositionX 387 + PositionY 328 + Width 8 + Height 6 + OffsetX 2 + XAdvance 7 + +Letter 'ﺹ' + PositionX 437 + PositionY 319 + Width 12 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 12 + +Letter 'ﺺ' + PositionX 451 + PositionY 319 + Width 12 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 12 + +Letter 'ﺻ' + PositionX 713 + PositionY 376 + Width 10 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 9 + +Letter 'ﺼ' + PositionX 689 + PositionY 376 + Width 10 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 9 + +Letter 'ﺽ' + PositionX 432 + PositionY 151 + Width 12 + Height 8 + OffsetX 1 + XAdvance 12 + +Letter 'ﺾ' + PositionX 390 + PositionY 152 + Width 12 + Height 8 + OffsetX 1 + XAdvance 12 + +Letter 'ﺿ' + PositionX 542 + PositionY 318 + Width 10 + Height 6 + OffsetX 2 + XAdvance 9 + +Letter 'ﻀ' + PositionX 566 + PositionY 318 + Width 10 + Height 6 + OffsetX 2 + XAdvance 9 + +Letter 'ﻁ' + PositionX 743 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻂ' + PositionX 734 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻃ' + PositionX 725 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻄ' + PositionX 716 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻅ' + PositionX 707 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻆ' + PositionX 698 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻇ' + PositionX 680 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻈ' + PositionX 662 + PositionY 254 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻉ' + PositionX 704 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﻊ' + PositionX 609 + PositionY 299 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 6 + +Letter 'ﻋ' + PositionX 401 + PositionY 372 + Width 6 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﻌ' + PositionX 310 + PositionY 390 + Width 6 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﻍ' + PositionX 410 + PositionY 38 + Width 7 + Height 10 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻎ' + PositionX 321 + PositionY 142 + Width 6 + Height 9 + OffsetX 1 + XAdvance 6 + +Letter 'ﻏ' + PositionX 577 + PositionY 299 + Width 6 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻐ' + PositionX 761 + PositionY 317 + Width 6 + Height 6 + OffsetX 2 + XAdvance 5 + +Letter 'ﻑ' + PositionX 690 + PositionY 317 + Width 9 + Height 6 + OffsetX 1 + XAdvance 9 + +Letter 'ﻒ' + PositionX 679 + PositionY 317 + Width 9 + Height 6 + OffsetX 1 + XAdvance 9 + +Letter 'ﻓ' + PositionX 663 + PositionY 308 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﻔ' + PositionX 572 + PositionY 334 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﻕ' + PositionX 419 + PositionY 162 + Width 8 + Height 8 + OffsetX 2 + XAdvance 7 + +Letter 'ﻖ' + PositionX 369 + PositionY 162 + Width 8 + Height 8 + OffsetX 2 + XAdvance 7 + +Letter 'ﻗ' + PositionX 439 + PositionY 310 + Width 5 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 4 + +Letter 'ﻘ' + PositionX 593 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﻙ' + PositionX 536 + PositionY 255 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻚ' + PositionX 527 + PositionY 255 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻛ' + PositionX 736 + PositionY 325 + Width 6 + Height 6 + OffsetX 2 + XAdvance 5 + +Letter 'ﻜ' + PositionX 744 + PositionY 325 + Width 6 + Height 6 + OffsetX 2 + XAdvance 5 + +Letter 'ﻝ' + PositionX 756 + PositionY 161 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ﻞ' + PositionX 257 + PositionY 175 + Width 6 + Height 8 + OffsetX 1 + OffsetY 1 + XAdvance 6 + +Letter 'ﻟ' + PositionX 684 + PositionY 308 + Width 4 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 3 + +Letter 'ﻠ' + PositionX 690 + PositionY 308 + Width 4 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 3 + +Letter 'ﻡ' + PositionX 481 + PositionY 300 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﻢ' + PositionX 425 + PositionY 301 + Width 6 + Height 7 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﻣ' + PositionX 318 + PositionY 390 + Width 6 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﻤ' + PositionX 326 + PositionY 390 + Width 6 + Height 4 + OffsetX 2 + OffsetY -2 + XAdvance 5 + +Letter 'ﻥ' + PositionX 265 + PositionY 175 + Width 6 + Height 8 + OffsetX 1 + XAdvance 6 + +Letter 'ﻦ' + PositionX 273 + PositionY 175 + Width 6 + Height 8 + OffsetX 1 + XAdvance 6 + +Letter 'ﻧ' + PositionX 677 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﻨ' + PositionX 628 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + XAdvance 4 + +Letter 'ﻩ' + PositionX 634 + PositionY 383 + Width 3 + Height 4 + OffsetX 1 + OffsetY -2 + XAdvance 4 + +Letter 'ﻪ' + PositionX 752 + PositionY 325 + Width 6 + Height 6 + OffsetX 2 + XAdvance 5 + +Letter 'ﻫ' + PositionX 521 + PositionY 370 + Width 6 + Height 5 + OffsetX 2 + OffsetY -1 + XAdvance 6 + +Letter 'ﻬ' + PositionX 574 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﻭ' + PositionX 565 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﻮ' + PositionX 556 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 6 + +Letter 'ﻯ' + PositionX 760 + PositionY 325 + Width 6 + Height 6 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﻰ' + PositionX 729 + PositionY 348 + Width 8 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 7 + +Letter 'ﻱ' + PositionX 393 + PositionY 301 + Width 6 + Height 7 + OffsetX 1 + OffsetY -2 + XAdvance 7 + +Letter 'ﻲ' + PositionX 299 + PositionY 355 + Width 8 + Height 5 + OffsetX 2 + OffsetY -4 + XAdvance 7 + +Letter 'ﻳ' + PositionX 586 + PositionY 333 + Width 5 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﻴ' + PositionX 579 + PositionY 334 + Width 5 + Height 6 + OffsetX 2 + OffsetY -2 + XAdvance 4 + +Letter 'ﻵ' + PositionX 605 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﻶ' + PositionX 289 + PositionY 165 + Width 8 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 7 + +Letter 'ﻷ' + PositionX 632 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﻸ' + PositionX 659 + PositionY 161 + Width 7 + Height 8 + OffsetX 2 + OffsetY 2 + XAdvance 6 + +Letter 'ﻹ' + PositionX 760 + PositionY 151 + Width 7 + Height 8 + OffsetX 2 + XAdvance 6 + +Letter 'ﻺ' + PositionX 617 + PositionY 118 + Width 7 + Height 9 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter 'ﻻ' + PositionX 538 + PositionY 326 + Width 7 + Height 6 + OffsetX 2 + XAdvance 6 + +Letter 'ﻼ' + PositionX 675 + PositionY 245 + Width 7 + Height 7 + OffsetX 2 + OffsetY 1 + XAdvance 6 + +Letter '' + PositionX 626 + PositionY 191 + Width 12 + Height 7 + OffsetX 2 + XAdvance 11 + +Letter '𝅳' + PositionX 696 + PositionY 400 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅴' + PositionX 701 + PositionY 400 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅵' + PositionX 706 + PositionY 400 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅶' + PositionX 711 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅷' + PositionX 716 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅸' + PositionX 721 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅹' + PositionX 726 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '𝅺' + PositionX 731 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀁' + PositionX 736 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀠' + PositionX 741 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀡' + PositionX 746 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀢' + PositionX 751 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀣' + PositionX 756 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀤' + PositionX 761 + PositionY 399 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀥' + PositionX 257 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀦' + PositionX 262 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀧' + PositionX 267 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀨' + PositionX 272 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀩' + PositionX 277 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀪' + PositionX 282 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀫' + PositionX 287 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀬' + PositionX 292 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀭' + PositionX 297 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀮' + PositionX 302 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀯' + PositionX 307 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀰' + PositionX 312 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀱' + PositionX 317 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀲' + PositionX 322 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀳' + PositionX 327 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀴' + PositionX 332 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀵' + PositionX 337 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀶' + PositionX 342 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀷' + PositionX 347 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀸' + PositionX 352 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀹' + PositionX 357 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀺' + PositionX 362 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀻' + PositionX 367 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀼' + PositionX 372 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀽' + PositionX 377 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀾' + PositionX 382 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠀿' + PositionX 387 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁀' + PositionX 392 + PositionY 413 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁁' + PositionX 397 + PositionY 412 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁂' + PositionX 402 + PositionY 412 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁃' + PositionX 407 + PositionY 410 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁄' + PositionX 412 + PositionY 409 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁅' + PositionX 651 + PositionY 402 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁆' + PositionX 417 + PositionY 409 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁇' + PositionX 422 + PositionY 409 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁈' + PositionX 427 + PositionY 409 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁉' + PositionX 432 + PositionY 409 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁊' + PositionX 437 + PositionY 409 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁋' + PositionX 442 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁌' + PositionX 447 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁍' + PositionX 452 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁎' + PositionX 457 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁏' + PositionX 462 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁐' + PositionX 467 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁑' + PositionX 472 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁒' + PositionX 477 + PositionY 408 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁓' + PositionX 482 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁔' + PositionX 487 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁕' + PositionX 492 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁖' + PositionX 497 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁗' + PositionX 502 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁘' + PositionX 507 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁙' + PositionX 512 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁚' + PositionX 517 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁛' + PositionX 522 + PositionY 407 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁜' + PositionX 527 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁝' + PositionX 532 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁞' + PositionX 537 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁟' + PositionX 542 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁠' + PositionX 547 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁡' + PositionX 552 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁢' + PositionX 557 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁣' + PositionX 562 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁤' + PositionX 567 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁥' + PositionX 572 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁦' + PositionX 577 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁧' + PositionX 582 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁨' + PositionX 587 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁩' + PositionX 592 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁪' + PositionX 597 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁫' + PositionX 602 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁬' + PositionX 607 + PositionY 406 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁭' + PositionX 612 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁮' + PositionX 617 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁯' + PositionX 622 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁰' + PositionX 627 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁱' + PositionX 632 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁲' + PositionX 637 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁳' + PositionX 642 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁴' + PositionX 647 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁵' + PositionX 652 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁶' + PositionX 657 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁷' + PositionX 662 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁸' + PositionX 667 + PositionY 405 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁹' + PositionX 672 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁺' + PositionX 677 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁻' + PositionX 682 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁼' + PositionX 687 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁽' + PositionX 692 + PositionY 404 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁾' + PositionX 697 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 + +Letter '󠁿' + PositionX 606 + PositionY 403 + Width 3 + Height 1 + OffsetX 2 + OffsetY -8 + XAdvance 4 diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Default.png b/SDK/Modules/Core/Resources/Core/Fonts/Default.png new file mode 100644 index 0000000000..da6b64aca7 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Default.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/DefaultExt.fnt b/SDK/Modules/Core/Resources/Core/Fonts/DefaultExt.fnt new file mode 100644 index 0000000000..70dd0aa774 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/DefaultExt.fnt differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/DefaultExt_0.png b/SDK/Modules/Core/Resources/Core/Fonts/DefaultExt_0.png new file mode 100644 index 0000000000..cdaa986e51 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/DefaultExt_0.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Fallout.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Fallout.fofnt new file mode 100644 index 0000000000..42381a2d19 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Fallout.fofnt @@ -0,0 +1,1610 @@ +Version 2 +Image Fallout.png +YAdvance 1 + +Letter '' + PositionX 39 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '' + PositionX 48 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '' + PositionX 57 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '' + PositionX 70 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '' + PositionX 78 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter ' ' + PositionX 98 + PositionY 1 + Width 4 + OffsetY -9 + XAdvance 4 + +Letter '!' + PositionX 104 + PositionY 1 + Width 2 + Height 9 + XAdvance 3 + +Letter '"' + PositionX 108 + PositionY 1 + Width 5 + Height 9 + XAdvance 6 + +Letter '#' + PositionX 115 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '$' + PositionX 124 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '%' + PositionX 132 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '&' + PositionX 141 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter ''' + PositionX 150 + PositionY 1 + Width 2 + Height 9 + XAdvance 3 + +Letter '(' + PositionX 154 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter ')' + PositionX 160 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter '*' + PositionX 166 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '+' + PositionX 175 + PositionY 1 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter ',' + PositionX 183 + PositionY 1 + Width 3 + Height 4 + OffsetY -5 + XAdvance 4 + +Letter '-' + PositionX 188 + PositionY 1 + Width 6 + Height 6 + OffsetY -3 + XAdvance 7 + +Letter '.' + PositionX 196 + PositionY 1 + Width 2 + Height 4 + OffsetY -5 + XAdvance 3 + +Letter '/' + PositionX 200 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '0' + PositionX 209 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '1' + PositionX 217 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter '2' + PositionX 223 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '3' + PositionX 231 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '4' + PositionX 239 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '5' + PositionX 247 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '6' + PositionX 1 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '7' + PositionX 9 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '8' + PositionX 17 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '9' + PositionX 25 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter ':' + PositionX 33 + PositionY 12 + Width 2 + Height 8 + OffsetY -1 + XAdvance 3 + +Letter ';' + PositionX 37 + PositionY 12 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '<' + PositionX 42 + PositionY 12 + Width 5 + Height 9 + XAdvance 6 + +Letter '=' + PositionX 49 + PositionY 12 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter '>' + PositionX 57 + PositionY 12 + Width 5 + Height 9 + XAdvance 6 + +Letter '?' + PositionX 64 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter '@' + PositionX 72 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'A' + PositionX 81 + PositionY 12 + Width 8 + Height 9 + XAdvance 9 + +Letter 'B' + PositionX 91 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'C' + PositionX 100 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'D' + PositionX 108 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'E' + PositionX 117 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'F' + PositionX 125 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'G' + PositionX 133 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'H' + PositionX 142 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'I' + PositionX 151 + PositionY 12 + Width 2 + Height 9 + XAdvance 3 + +Letter 'J' + PositionX 155 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'K' + PositionX 164 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'L' + PositionX 173 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'M' + PositionX 181 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'N' + PositionX 190 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'O' + PositionX 199 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'P' + PositionX 208 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Q' + PositionX 217 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'R' + PositionX 226 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'S' + PositionX 235 + PositionY 12 + Width 7 + Height 9 + XAdvance 8 + +Letter 'T' + PositionX 244 + PositionY 12 + Width 6 + Height 9 + XAdvance 7 + +Letter 'U' + PositionX 1 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter 'V' + PositionX 10 + PositionY 23 + Width 8 + Height 9 + XAdvance 9 + +Letter 'W' + PositionX 20 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter 'X' + PositionX 29 + PositionY 23 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Y' + PositionX 39 + PositionY 23 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Z' + PositionX 49 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter '[' + PositionX 58 + PositionY 23 + Width 4 + Height 9 + XAdvance 5 + +Letter '\' + PositionX 64 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter ']' + PositionX 73 + PositionY 23 + Width 4 + Height 9 + XAdvance 5 + +Letter '^' + PositionX 79 + PositionY 23 + Width 7 + Height 9 + XAdvance 8 + +Letter '_' + PositionX 88 + PositionY 23 + Width 7 + Height 3 + OffsetY -6 + XAdvance 8 + +Letter '`' + PositionX 97 + PositionY 23 + Width 3 + Height 9 + XAdvance 4 + +Letter 'a' + PositionX 102 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'b' + PositionX 110 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'c' + PositionX 118 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'd' + PositionX 125 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'e' + PositionX 133 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'f' + PositionX 141 + PositionY 23 + Width 5 + Height 9 + XAdvance 6 + +Letter 'g' + PositionX 148 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'h' + PositionX 156 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'i' + PositionX 164 + PositionY 23 + Width 2 + Height 7 + OffsetY -2 + XAdvance 3 + +Letter 'j' + PositionX 168 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'k' + PositionX 175 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'l' + PositionX 183 + PositionY 23 + Width 2 + Height 9 + XAdvance 3 + +Letter 'm' + PositionX 187 + PositionY 23 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'n' + PositionX 196 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'o' + PositionX 204 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'p' + PositionX 212 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'q' + PositionX 220 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'r' + PositionX 228 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 's' + PositionX 235 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 't' + PositionX 243 + PositionY 23 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'u' + PositionX 1 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'v' + PositionX 9 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'w' + PositionX 17 + PositionY 34 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'x' + PositionX 26 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'y' + PositionX 34 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'z' + PositionX 42 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter '{' + PositionX 50 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '|' + PositionX 58 + PositionY 34 + Width 2 + Height 9 + XAdvance 3 + +Letter '}' + PositionX 62 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '~' + PositionX 70 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '‚' + PositionX 85 + PositionY 34 + Width 3 + Height 4 + OffsetY -5 + XAdvance 4 + +Letter 'ѓ' + PositionX 90 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '„' + PositionX 98 + PositionY 34 + Width 7 + Height 4 + OffsetY -5 + XAdvance 8 + +Letter '…' + PositionX 107 + PositionY 34 + Width 8 + Height 4 + OffsetY -5 + XAdvance 9 + +Letter '†' + PositionX 117 + PositionY 34 + Width 5 + Height 9 + XAdvance 6 + +Letter '‡' + PositionX 124 + PositionY 34 + Width 5 + Height 9 + XAdvance 6 + +Letter '€' + PositionX 131 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '‰' + PositionX 140 + PositionY 34 + Width 10 + Height 8 + OffsetY -1 + XAdvance 11 + +Letter 'Љ' + PositionX 152 + PositionY 34 + Width 6 + Height 9 + XAdvance 7 + +Letter '‹' + PositionX 160 + PositionY 34 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter 'Њ' + PositionX 167 + PositionY 34 + Width 8 + Height 9 + XAdvance 9 + +Letter '‘' + PositionX 185 + PositionY 34 + Width 3 + Height 9 + XAdvance 4 + +Letter '’' + PositionX 190 + PositionY 34 + Width 3 + Height 9 + XAdvance 4 + +Letter '“' + PositionX 195 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '”' + PositionX 204 + PositionY 34 + Width 7 + Height 9 + XAdvance 8 + +Letter '•' + PositionX 213 + PositionY 34 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter '–' + PositionX 220 + PositionY 34 + Width 5 + Height 6 + OffsetY -3 + XAdvance 6 + +Letter '—' + PositionX 227 + PositionY 34 + Width 8 + Height 6 + OffsetY -3 + XAdvance 9 + +Letter '™' + PositionX 1 + PositionY 45 + Width 9 + Height 9 + XAdvance 10 + +Letter 'љ' + PositionX 12 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '›' + PositionX 20 + PositionY 45 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter 'њ' + PositionX 27 + PositionY 45 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'џ' + PositionX 43 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ў' + PositionX 53 + PositionY 45 + Width 2 + Height 9 + XAdvance 3 + +Letter 'ў' + PositionX 57 + PositionY 45 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ј' + PositionX 66 + PositionY 45 + Width 7 + Height 9 + XAdvance 8 + +Letter '¤' + PositionX 75 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Ґ' + PositionX 85 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '¦' + PositionX 93 + PositionY 45 + Width 1 + Height 9 + XAdvance 2 + +Letter '§' + PositionX 96 + PositionY 45 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ё' + PositionX 105 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '©' + PositionX 113 + PositionY 45 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Є' + PositionX 124 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '«' + PositionX 132 + PositionY 45 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter '¬' + PositionX 140 + PositionY 45 + Width 7 + Height 6 + OffsetY -3 + XAdvance 8 + +Letter '­' + PositionX 149 + PositionY 45 + Width 5 + Height 6 + OffsetY -3 + XAdvance 6 + +Letter '®' + PositionX 156 + PositionY 45 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ї' + PositionX 167 + PositionY 45 + Width 8 + Height 9 + XAdvance 9 + +Letter '°' + PositionX 177 + PositionY 45 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter '±' + PositionX 184 + PositionY 45 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'І' + PositionX 192 + PositionY 45 + Width 4 + Height 9 + XAdvance 5 + +Letter 'і' + PositionX 198 + PositionY 45 + Width 3 + Height 9 + XAdvance 4 + +Letter 'ґ' + PositionX 203 + PositionY 45 + Width 4 + Height 9 + XAdvance 5 + +Letter 'µ' + PositionX 209 + PositionY 45 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter '¶' + PositionX 217 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '·' + PositionX 225 + PositionY 45 + Width 2 + Height 6 + OffsetY -3 + XAdvance 3 + +Letter 'ё' + PositionX 229 + PositionY 45 + Width 6 + Height 9 + XAdvance 7 + +Letter '№' + PositionX 237 + PositionY 45 + Width 10 + Height 9 + XAdvance 11 + +Letter 'є' + PositionX 249 + PositionY 45 + Width 4 + Height 9 + XAdvance 5 + +Letter '»' + PositionX 1 + PositionY 56 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'ј' + PositionX 10 + PositionY 56 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Ѕ' + PositionX 20 + PositionY 56 + Width 9 + Height 9 + XAdvance 10 + +Letter 'ѕ' + PositionX 31 + PositionY 56 + Width 9 + Height 9 + XAdvance 10 + +Letter 'ї' + PositionX 42 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'А' + PositionX 50 + PositionY 56 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Б' + PositionX 60 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'В' + PositionX 69 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Г' + PositionX 78 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Д' + PositionX 86 + PositionY 56 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Е' + PositionX 97 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ж' + PositionX 105 + PositionY 56 + Width 12 + Height 9 + XAdvance 13 + +Letter 'З' + PositionX 119 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'И' + PositionX 127 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Й' + PositionX 136 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'К' + PositionX 145 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Л' + PositionX 154 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'М' + PositionX 163 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Н' + PositionX 172 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'О' + PositionX 181 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'П' + PositionX 190 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Р' + PositionX 199 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'С' + PositionX 208 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Т' + PositionX 216 + PositionY 56 + Width 6 + Height 9 + XAdvance 7 + +Letter 'У' + PositionX 224 + PositionY 56 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ф' + PositionX 233 + PositionY 56 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Х' + PositionX 245 + PositionY 56 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Ц' + PositionX 1 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ч' + PositionX 10 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ш' + PositionX 19 + PositionY 67 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Щ' + PositionX 29 + PositionY 67 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ъ' + PositionX 40 + PositionY 67 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ы' + PositionX 51 + PositionY 67 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Ь' + PositionX 63 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Э' + PositionX 72 + PositionY 67 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ю' + PositionX 80 + PositionY 67 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Я' + PositionX 92 + PositionY 67 + Width 7 + Height 9 + XAdvance 8 + +Letter 'а' + PositionX 101 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'б' + PositionX 109 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'в' + PositionX 117 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'г' + PositionX 125 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'д' + PositionX 132 + PositionY 67 + Width 8 + Height 7 + OffsetY -2 + XAdvance 9 + +Letter 'е' + PositionX 142 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ж' + PositionX 150 + PositionY 67 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'з' + PositionX 162 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'и' + PositionX 169 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'й' + PositionX 177 + PositionY 67 + Width 6 + Height 9 + XAdvance 7 + +Letter 'к' + PositionX 185 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'л' + PositionX 193 + PositionY 67 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'м' + PositionX 202 + PositionY 67 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'н' + PositionX 211 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'о' + PositionX 219 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'п' + PositionX 227 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'р' + PositionX 235 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'с' + PositionX 243 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'т' + PositionX 1 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'у' + PositionX 9 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ф' + PositionX 17 + PositionY 78 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'х' + PositionX 29 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ц' + PositionX 37 + PositionY 78 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'ч' + PositionX 46 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ш' + PositionX 54 + PositionY 78 + Width 10 + Height 7 + OffsetY -2 + XAdvance 11 + +Letter 'щ' + PositionX 66 + PositionY 78 + Width 11 + Height 7 + OffsetY -2 + XAdvance 12 + +Letter 'ъ' + PositionX 79 + PositionY 78 + Width 8 + Height 7 + OffsetY -2 + XAdvance 9 + +Letter 'ы' + PositionX 89 + PositionY 78 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'ь' + PositionX 100 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'э' + PositionX 108 + PositionY 78 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'ю' + PositionX 115 + PositionY 78 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'я' + PositionX 126 + PositionY 78 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Fallout.png b/SDK/Modules/Core/Resources/Core/Fonts/Fallout.png new file mode 100644 index 0000000000..da6b64aca7 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Fallout.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Fat.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Fat.fofnt new file mode 100644 index 0000000000..c5068eae13 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Fat.fofnt @@ -0,0 +1,1113 @@ +Version 2 +Image Fat.png +YAdvance 4 + +Letter ' ' + PositionX 65 + PositionY 1 + Width 5 + OffsetY -16 + XAdvance 5 + +Letter '!' + PositionX 72 + PositionY 1 + Width 5 + Height 15 + OffsetY -1 + XAdvance 6 + +Letter '"' + PositionX 79 + PositionY 1 + Width 6 + Height 15 + OffsetY -1 + XAdvance 7 + +Letter '#' + PositionX 87 + PositionY 1 + Width 14 + Height 16 + XAdvance 15 + +Letter '$' + PositionX 103 + PositionY 1 + Width 10 + Height 16 + XAdvance 11 + +Letter '%' + PositionX 115 + PositionY 1 + Width 13 + Height 16 + XAdvance 14 + +Letter '&' + PositionX 130 + PositionY 1 + Width 11 + Height 16 + XAdvance 12 + +Letter ''' + PositionX 143 + PositionY 1 + Width 2 + Height 15 + OffsetY -1 + XAdvance 3 + +Letter '(' + PositionX 147 + PositionY 1 + Width 5 + Height 16 + XAdvance 6 + +Letter ')' + PositionX 154 + PositionY 1 + Width 6 + Height 16 + XAdvance 7 + +Letter '*' + PositionX 162 + PositionY 1 + Width 9 + Height 16 + XAdvance 10 + +Letter '+' + PositionX 173 + PositionY 1 + Width 12 + Height 13 + OffsetY -3 + XAdvance 13 + +Letter ',' + PositionX 187 + PositionY 1 + Width 4 + Height 6 + OffsetY -10 + XAdvance 5 + +Letter '-' + PositionX 193 + PositionY 1 + Width 5 + Height 8 + OffsetY -8 + XAdvance 6 + +Letter '.' + PositionX 200 + PositionY 1 + Width 4 + Height 4 + OffsetY -12 + XAdvance 5 + +Letter '/' + PositionX 206 + PositionY 1 + Width 6 + Height 16 + XAdvance 7 + +Letter '0' + PositionX 214 + PositionY 1 + Width 9 + Height 16 + XAdvance 10 + +Letter '1' + PositionX 225 + PositionY 1 + Width 7 + Height 16 + XAdvance 8 + +Letter '2' + PositionX 234 + PositionY 1 + Width 9 + Height 16 + XAdvance 10 + +Letter '3' + PositionX 245 + PositionY 1 + Width 9 + Height 16 + XAdvance 10 + +Letter '4' + PositionX 1 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter '5' + PositionX 13 + PositionY 19 + Width 9 + Height 16 + XAdvance 10 + +Letter '6' + PositionX 24 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter '7' + PositionX 36 + PositionY 19 + Width 9 + Height 16 + XAdvance 10 + +Letter '8' + PositionX 47 + PositionY 19 + Width 9 + Height 16 + XAdvance 10 + +Letter '9' + PositionX 58 + PositionY 19 + Width 9 + Height 16 + XAdvance 10 + +Letter ':' + PositionX 69 + PositionY 19 + Width 4 + Height 11 + OffsetY -5 + XAdvance 5 + +Letter ';' + PositionX 75 + PositionY 19 + Width 4 + Height 11 + OffsetY -5 + XAdvance 5 + +Letter '<' + PositionX 81 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter '=' + PositionX 93 + PositionY 19 + Width 13 + Height 10 + OffsetY -6 + XAdvance 14 + +Letter '>' + PositionX 108 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter '?' + PositionX 120 + PositionY 19 + Width 6 + Height 15 + OffsetY -1 + XAdvance 7 + +Letter '@' + PositionX 128 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter 'A' + PositionX 140 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter 'B' + PositionX 152 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter 'C' + PositionX 164 + PositionY 19 + Width 8 + Height 16 + XAdvance 9 + +Letter 'D' + PositionX 174 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter 'E' + PositionX 186 + PositionY 19 + Width 8 + Height 16 + XAdvance 9 + +Letter 'F' + PositionX 196 + PositionY 19 + Width 8 + Height 16 + XAdvance 9 + +Letter 'G' + PositionX 206 + PositionY 19 + Width 9 + Height 16 + XAdvance 10 + +Letter 'H' + PositionX 217 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter 'I' + PositionX 229 + PositionY 19 + Width 5 + Height 16 + XAdvance 6 + +Letter 'J' + PositionX 236 + PositionY 19 + Width 6 + Height 16 + XAdvance 7 + +Letter 'K' + PositionX 244 + PositionY 19 + Width 10 + Height 16 + XAdvance 11 + +Letter 'L' + PositionX 1 + PositionY 37 + Width 8 + Height 16 + XAdvance 9 + +Letter 'M' + PositionX 11 + PositionY 37 + Width 12 + Height 16 + XAdvance 13 + +Letter 'N' + PositionX 25 + PositionY 37 + Width 10 + Height 16 + XAdvance 11 + +Letter 'O' + PositionX 37 + PositionY 37 + Width 11 + Height 16 + XAdvance 12 + +Letter 'P' + PositionX 50 + PositionY 37 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Q' + PositionX 62 + PositionY 37 + Width 12 + Height 16 + XAdvance 13 + +Letter 'R' + PositionX 76 + PositionY 37 + Width 11 + Height 16 + XAdvance 12 + +Letter 'S' + PositionX 89 + PositionY 37 + Width 8 + Height 16 + XAdvance 9 + +Letter 'T' + PositionX 99 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter 'U' + PositionX 110 + PositionY 37 + Width 10 + Height 16 + XAdvance 11 + +Letter 'V' + PositionX 122 + PositionY 37 + Width 11 + Height 16 + XAdvance 12 + +Letter 'W' + PositionX 135 + PositionY 37 + Width 15 + Height 16 + XAdvance 16 + +Letter 'X' + PositionX 152 + PositionY 37 + Width 11 + Height 16 + XAdvance 12 + +Letter 'Y' + PositionX 165 + PositionY 37 + Width 11 + Height 16 + XAdvance 12 + +Letter 'Z' + PositionX 178 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter '[' + PositionX 189 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter '\' + PositionX 200 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter ']' + PositionX 211 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter '^' + PositionX 222 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter '_' + PositionX 233 + PositionY 37 + Width 9 + Height 16 + XAdvance 10 + +Letter '`' + PositionX 244 + PositionY 37 + Width 6 + Height 16 + XAdvance 7 + +Letter 'a' + PositionX 1 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'b' + PositionX 13 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'c' + PositionX 25 + PositionY 55 + Width 8 + Height 16 + XAdvance 9 + +Letter 'd' + PositionX 35 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'e' + PositionX 47 + PositionY 55 + Width 8 + Height 16 + XAdvance 9 + +Letter 'f' + PositionX 57 + PositionY 55 + Width 8 + Height 16 + XAdvance 9 + +Letter 'g' + PositionX 67 + PositionY 55 + Width 9 + Height 16 + XAdvance 10 + +Letter 'h' + PositionX 78 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'i' + PositionX 90 + PositionY 55 + Width 5 + Height 16 + XAdvance 6 + +Letter 'j' + PositionX 97 + PositionY 55 + Width 6 + Height 16 + XAdvance 7 + +Letter 'k' + PositionX 105 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'l' + PositionX 117 + PositionY 55 + Width 8 + Height 16 + XAdvance 9 + +Letter 'm' + PositionX 127 + PositionY 55 + Width 12 + Height 16 + XAdvance 13 + +Letter 'n' + PositionX 141 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'o' + PositionX 153 + PositionY 55 + Width 11 + Height 16 + XAdvance 12 + +Letter 'p' + PositionX 166 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'q' + PositionX 178 + PositionY 55 + Width 12 + Height 16 + XAdvance 13 + +Letter 'r' + PositionX 192 + PositionY 55 + Width 11 + Height 16 + XAdvance 12 + +Letter 's' + PositionX 205 + PositionY 55 + Width 8 + Height 16 + XAdvance 9 + +Letter 't' + PositionX 215 + PositionY 55 + Width 9 + Height 16 + XAdvance 10 + +Letter 'u' + PositionX 226 + PositionY 55 + Width 10 + Height 16 + XAdvance 11 + +Letter 'v' + PositionX 238 + PositionY 55 + Width 11 + Height 16 + XAdvance 12 + +Letter 'w' + PositionX 1 + PositionY 73 + Width 15 + Height 16 + XAdvance 16 + +Letter 'x' + PositionX 18 + PositionY 73 + Width 11 + Height 16 + XAdvance 12 + +Letter 'y' + PositionX 31 + PositionY 73 + Width 11 + Height 16 + XAdvance 12 + +Letter 'z' + PositionX 44 + PositionY 73 + Width 9 + Height 16 + XAdvance 10 + +Letter 'Њ' + PositionX 89 + PositionY 73 + Width 16 + Height 16 + XAdvance 17 + +Letter 'њ' + PositionX 137 + PositionY 73 + Width 16 + Height 16 + XAdvance 17 + +Letter 'А' + PositionX 225 + PositionY 73 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Б' + PositionX 237 + PositionY 73 + Width 10 + Height 16 + XAdvance 11 + +Letter 'В' + PositionX 1 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Г' + PositionX 13 + PositionY 91 + Width 9 + Height 16 + XAdvance 10 + +Letter 'Д' + PositionX 24 + PositionY 91 + Width 15 + Height 16 + XAdvance 16 + +Letter 'Е' + PositionX 41 + PositionY 91 + Width 8 + Height 16 + XAdvance 9 + +Letter 'Ж' + PositionX 51 + PositionY 91 + Width 15 + Height 16 + XAdvance 16 + +Letter 'З' + PositionX 68 + PositionY 91 + Width 9 + Height 16 + XAdvance 10 + +Letter 'И' + PositionX 79 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Й' + PositionX 91 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'К' + PositionX 103 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Л' + PositionX 115 + PositionY 91 + Width 11 + Height 16 + XAdvance 12 + +Letter 'М' + PositionX 128 + PositionY 91 + Width 12 + Height 16 + XAdvance 13 + +Letter 'Н' + PositionX 142 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'О' + PositionX 154 + PositionY 91 + Width 11 + Height 16 + XAdvance 12 + +Letter 'П' + PositionX 167 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Р' + PositionX 179 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'С' + PositionX 191 + PositionY 91 + Width 8 + Height 16 + XAdvance 9 + +Letter 'Т' + PositionX 201 + PositionY 91 + Width 9 + Height 16 + XAdvance 10 + +Letter 'У' + PositionX 212 + PositionY 91 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Ф' + PositionX 224 + PositionY 91 + Width 15 + Height 16 + XAdvance 16 + +Letter 'Х' + PositionX 241 + PositionY 91 + Width 11 + Height 16 + XAdvance 12 + +Letter 'Ц' + PositionX 1 + PositionY 109 + Width 12 + Height 16 + XAdvance 13 + +Letter 'Ч' + PositionX 15 + PositionY 109 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Ш' + PositionX 27 + PositionY 109 + Width 15 + Height 16 + XAdvance 16 + +Letter 'Щ' + PositionX 44 + PositionY 109 + Width 17 + Height 16 + XAdvance 18 + +Letter 'Ъ' + PositionX 63 + PositionY 109 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Ы' + PositionX 75 + PositionY 109 + Width 16 + Height 16 + XAdvance 17 + +Letter 'Ь' + PositionX 93 + PositionY 109 + Width 10 + Height 16 + XAdvance 11 + +Letter 'Э' + PositionX 105 + PositionY 109 + Width 9 + Height 16 + XAdvance 10 + +Letter 'Ю' + PositionX 116 + PositionY 109 + Width 16 + Height 16 + XAdvance 17 + +Letter 'Я' + PositionX 134 + PositionY 109 + Width 11 + Height 16 + XAdvance 12 + +Letter 'а' + PositionX 147 + PositionY 109 + Width 10 + Height 16 + XAdvance 11 + +Letter 'б' + PositionX 159 + PositionY 109 + Width 10 + Height 16 + XAdvance 11 + +Letter 'в' + PositionX 171 + PositionY 109 + Width 10 + Height 16 + XAdvance 11 + +Letter 'г' + PositionX 183 + PositionY 109 + Width 9 + Height 16 + XAdvance 10 + +Letter 'д' + PositionX 194 + PositionY 109 + Width 15 + Height 16 + XAdvance 16 + +Letter 'е' + PositionX 211 + PositionY 109 + Width 8 + Height 16 + XAdvance 9 + +Letter 'ж' + PositionX 221 + PositionY 109 + Width 15 + Height 16 + XAdvance 16 + +Letter 'з' + PositionX 238 + PositionY 109 + Width 9 + Height 16 + XAdvance 10 + +Letter 'и' + PositionX 1 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'й' + PositionX 13 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'к' + PositionX 25 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'л' + PositionX 37 + PositionY 127 + Width 11 + Height 16 + XAdvance 12 + +Letter 'м' + PositionX 50 + PositionY 127 + Width 12 + Height 16 + XAdvance 13 + +Letter 'н' + PositionX 64 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'о' + PositionX 76 + PositionY 127 + Width 11 + Height 16 + XAdvance 12 + +Letter 'п' + PositionX 89 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'р' + PositionX 101 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'с' + PositionX 113 + PositionY 127 + Width 8 + Height 16 + XAdvance 9 + +Letter 'т' + PositionX 123 + PositionY 127 + Width 9 + Height 16 + XAdvance 10 + +Letter 'у' + PositionX 134 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'ф' + PositionX 146 + PositionY 127 + Width 15 + Height 16 + XAdvance 16 + +Letter 'х' + PositionX 163 + PositionY 127 + Width 11 + Height 16 + XAdvance 12 + +Letter 'ц' + PositionX 176 + PositionY 127 + Width 12 + Height 16 + XAdvance 13 + +Letter 'ч' + PositionX 190 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'ш' + PositionX 202 + PositionY 127 + Width 15 + Height 16 + XAdvance 16 + +Letter 'щ' + PositionX 219 + PositionY 127 + Width 17 + Height 16 + XAdvance 18 + +Letter 'ъ' + PositionX 238 + PositionY 127 + Width 10 + Height 16 + XAdvance 11 + +Letter 'ы' + PositionX 1 + PositionY 145 + Width 16 + Height 16 + XAdvance 17 + +Letter 'ь' + PositionX 19 + PositionY 145 + Width 10 + Height 16 + XAdvance 11 + +Letter 'э' + PositionX 31 + PositionY 145 + Width 9 + Height 16 + XAdvance 10 + +Letter 'ю' + PositionX 42 + PositionY 145 + Width 16 + Height 16 + XAdvance 17 + +Letter 'я' + PositionX 60 + PositionY 145 + Width 11 + Height 16 + XAdvance 12 diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Fat.png b/SDK/Modules/Core/Resources/Core/Fonts/Fat.png new file mode 100644 index 0000000000..acea11f35a Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Fat.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Numbers.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Numbers.fofnt new file mode 100644 index 0000000000..6f7fb4e11a --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Numbers.fofnt @@ -0,0 +1,387 @@ +Version 2 +Image Numbers.png +YAdvance 0 + +Letter ' ' + PositionX 1 + PositionY 1 + XAdvance 9 + +Letter '0' + PositionX 1 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '1' + PositionX 12 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '2' + PositionX 23 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '3' + PositionX 34 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '4' + PositionX 45 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '5' + PositionX 56 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '6' + PositionX 67 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '7' + PositionX 78 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '8' + PositionX 89 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '9' + PositionX 100 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter ':' + PositionX 111 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter ';' + PositionX 122 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter '<' + PositionX 133 + PositionY 1 + Width 6 + Height 17 + XAdvance 6 + +Letter '=' + PositionX 141 + PositionY 1 + Width 6 + Height 17 + XAdvance 6 + +Letter '@' + PositionX 149 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'A' + PositionX 160 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'B' + PositionX 171 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'C' + PositionX 182 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'D' + PositionX 193 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'E' + PositionX 204 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'F' + PositionX 215 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'G' + PositionX 226 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'H' + PositionX 237 + PositionY 1 + Width 9 + Height 17 + XAdvance 9 + +Letter 'I' + PositionX 1 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'J' + PositionX 12 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'K' + PositionX 23 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'L' + PositionX 34 + PositionY 20 + Width 6 + Height 17 + XAdvance 6 + +Letter 'M' + PositionX 42 + PositionY 20 + Width 6 + Height 17 + XAdvance 6 + +Letter 'P' + PositionX 50 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'Q' + PositionX 61 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'R' + PositionX 72 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'S' + PositionX 83 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'T' + PositionX 94 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'U' + PositionX 105 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'V' + PositionX 116 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'W' + PositionX 127 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'X' + PositionX 138 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'Y' + PositionX 149 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter 'Z' + PositionX 160 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter '[' + PositionX 171 + PositionY 20 + Width 9 + Height 17 + XAdvance 9 + +Letter '\' + PositionX 182 + PositionY 20 + Width 6 + Height 17 + XAdvance 6 + +Letter ']' + PositionX 190 + PositionY 20 + Width 6 + Height 17 + XAdvance 6 + +Letter '`' + PositionX 198 + PositionY 20 + Width 29 + Height 14 + XAdvance 29 + +Letter 'a' + PositionX 1 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'b' + PositionX 32 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'c' + PositionX 63 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'd' + PositionX 94 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'e' + PositionX 125 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'f' + PositionX 156 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'g' + PositionX 187 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'h' + PositionX 218 + PositionY 39 + Width 29 + Height 14 + XAdvance 29 + +Letter 'i' + PositionX 1 + PositionY 58 + Width 29 + Height 14 + XAdvance 29 + +Letter 'j' + PositionX 32 + PositionY 58 + Width 29 + Height 14 + XAdvance 29 + +Letter 'k' + PositionX 63 + PositionY 58 + Width 29 + Height 14 + XAdvance 29 + diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Numbers.png b/SDK/Modules/Core/Resources/Core/Fonts/Numbers.png new file mode 100644 index 0000000000..1da2a3669b Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Numbers.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/OldDefault.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/OldDefault.fofnt new file mode 100644 index 0000000000..bb590b48e1 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/OldDefault.fofnt @@ -0,0 +1,1562 @@ +Version 2 +Image OldDefault.png +YAdvance 1 + +Letter ' ' + PositionX 1 + PositionY 1 + XAdvance 5 + +Letter '!' + PositionX 1 + PositionY 1 + Width 2 + Height 9 + XAdvance 3 + +Letter '"' + PositionX 5 + PositionY 1 + Width 5 + Height 3 + XAdvance 6 + +Letter '#' + PositionX 12 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter '$' + PositionX 21 + PositionY 1 + Width 6 + Height 10 + XAdvance 7 + +Letter '%' + PositionX 29 + PositionY 1 + Width 8 + Height 9 + XAdvance 9 + +Letter '&' + PositionX 39 + PositionY 1 + Width 1 + Height 1 + XAdvance 2 + +Letter ''' + PositionX 42 + PositionY 1 + Width 2 + Height 3 + XAdvance 3 + +Letter '(' + PositionX 46 + PositionY 1 + Width 3 + Height 11 + XAdvance 4 + +Letter ')' + PositionX 51 + PositionY 1 + Width 3 + Height 11 + XAdvance 4 + +Letter '*' + PositionX 56 + PositionY 1 + Width 4 + Height 3 + XAdvance 5 + +Letter '+' + PositionX 62 + PositionY 1 + Width 6 + Height 5 + XAdvance 7 + +Letter ',' + PositionX 70 + PositionY 1 + Width 3 + Height 2 + XAdvance 4 + +Letter '-' + PositionX 75 + PositionY 1 + Width 3 + Height 1 + XAdvance 4 + +Letter '.' + PositionX 80 + PositionY 1 + Width 2 + Height 1 + XAdvance 3 + +Letter '/' + PositionX 84 + PositionY 1 + Width 5 + Height 9 + XAdvance 6 + +Letter '0' + PositionX 91 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '1' + PositionX 99 + PositionY 1 + Width 4 + Height 9 + XAdvance 5 + +Letter '2' + PositionX 105 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '3' + PositionX 113 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '4' + PositionX 121 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '5' + PositionX 129 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '6' + PositionX 137 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '7' + PositionX 145 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '8' + PositionX 153 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '9' + PositionX 161 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter ':' + PositionX 169 + PositionY 1 + Width 2 + Height 6 + XAdvance 3 + +Letter ';' + PositionX 173 + PositionY 1 + Width 3 + Height 7 + XAdvance 4 + +Letter '<' + PositionX 178 + PositionY 1 + Width 5 + Height 7 + XAdvance 6 + +Letter '=' + PositionX 185 + PositionY 1 + Width 6 + Height 3 + XAdvance 7 + +Letter '>' + PositionX 193 + PositionY 1 + Width 5 + Height 7 + XAdvance 6 + +Letter '?' + PositionX 200 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter '@' + PositionX 208 + PositionY 1 + Width 11 + Height 10 + XAdvance 12 + +Letter 'A' + PositionX 221 + PositionY 1 + Width 8 + Height 9 + XAdvance 9 + +Letter 'B' + PositionX 231 + PositionY 1 + Width 6 + Height 9 + XAdvance 7 + +Letter 'C' + PositionX 239 + PositionY 1 + Width 7 + Height 9 + XAdvance 8 + +Letter 'D' + PositionX 1 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'E' + PositionX 10 + PositionY 15 + Width 6 + Height 9 + XAdvance 7 + +Letter 'F' + PositionX 18 + PositionY 15 + Width 6 + Height 9 + XAdvance 7 + +Letter 'G' + PositionX 26 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'H' + PositionX 35 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'I' + PositionX 44 + PositionY 15 + Width 2 + Height 9 + XAdvance 3 + +Letter 'J' + PositionX 48 + PositionY 15 + Width 5 + Height 9 + XAdvance 6 + +Letter 'K' + PositionX 55 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'L' + PositionX 64 + PositionY 15 + Width 6 + Height 9 + XAdvance 7 + +Letter 'M' + PositionX 72 + PositionY 15 + Width 8 + Height 9 + XAdvance 9 + +Letter 'N' + PositionX 82 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'O' + PositionX 91 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'P' + PositionX 100 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Q' + PositionX 109 + PositionY 15 + Width 7 + Height 10 + XAdvance 8 + +Letter 'R' + PositionX 118 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'S' + PositionX 127 + PositionY 15 + Width 6 + Height 9 + XAdvance 7 + +Letter 'T' + PositionX 135 + PositionY 15 + Width 6 + Height 9 + XAdvance 7 + +Letter 'U' + PositionX 143 + PositionY 15 + Width 7 + Height 9 + XAdvance 8 + +Letter 'V' + PositionX 152 + PositionY 15 + Width 8 + Height 9 + XAdvance 9 + +Letter 'W' + PositionX 162 + PositionY 15 + Width 12 + Height 9 + XAdvance 13 + +Letter 'X' + PositionX 176 + PositionY 15 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Y' + PositionX 186 + PositionY 15 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Z' + PositionX 196 + PositionY 15 + Width 8 + Height 9 + XAdvance 9 + +Letter '[' + PositionX 206 + PositionY 15 + Width 3 + Height 11 + XAdvance 4 + +Letter '\' + PositionX 211 + PositionY 15 + Width 5 + Height 9 + XAdvance 6 + +Letter ']' + PositionX 218 + PositionY 15 + Width 3 + Height 11 + XAdvance 4 + +Letter '^' + PositionX 223 + PositionY 15 + Width 6 + Height 3 + XAdvance 7 + +Letter '_' + PositionX 231 + PositionY 15 + Width 7 + Height 1 + XAdvance 8 + +Letter '`' + PositionX 240 + PositionY 15 + Width 3 + Height 2 + XAdvance 4 + +Letter 'a' + PositionX 245 + PositionY 15 + Width 6 + Height 6 + XAdvance 7 + +Letter 'b' + PositionX 1 + PositionY 29 + Width 6 + Height 9 + XAdvance 7 + +Letter 'c' + PositionX 9 + PositionY 29 + Width 6 + Height 6 + XAdvance 7 + +Letter 'd' + PositionX 17 + PositionY 29 + Width 6 + Height 9 + XAdvance 7 + +Letter 'e' + PositionX 25 + PositionY 29 + Width 6 + Height 6 + XAdvance 7 + +Letter 'f' + PositionX 33 + PositionY 29 + Width 3 + Height 9 + XAdvance 4 + +Letter 'g' + PositionX 38 + PositionY 29 + Width 6 + Height 8 + XAdvance 7 + +Letter 'h' + PositionX 46 + PositionY 29 + Width 6 + Height 9 + XAdvance 7 + +Letter 'i' + PositionX 54 + PositionY 29 + Width 2 + Height 9 + XAdvance 3 + +Letter 'j' + PositionX 58 + PositionY 29 + Width 2 + Height 11 + XAdvance 3 + +Letter 'k' + PositionX 62 + PositionY 29 + Width 6 + Height 9 + XAdvance 7 + +Letter 'l' + PositionX 70 + PositionY 29 + Width 2 + Height 9 + XAdvance 3 + +Letter 'm' + PositionX 74 + PositionY 29 + Width 8 + Height 6 + XAdvance 9 + +Letter 'n' + PositionX 84 + PositionY 29 + Width 6 + Height 6 + XAdvance 7 + +Letter 'o' + PositionX 92 + PositionY 29 + Width 6 + Height 6 + XAdvance 7 + +Letter 'p' + PositionX 100 + PositionY 29 + Width 6 + Height 8 + XAdvance 7 + +Letter 'q' + PositionX 108 + PositionY 29 + Width 6 + Height 8 + XAdvance 7 + +Letter 'r' + PositionX 116 + PositionY 29 + Width 3 + Height 6 + XAdvance 4 + +Letter 's' + PositionX 121 + PositionY 29 + Width 5 + Height 6 + XAdvance 6 + +Letter 't' + PositionX 128 + PositionY 29 + Width 3 + Height 8 + XAdvance 4 + +Letter 'u' + PositionX 133 + PositionY 29 + Width 6 + Height 6 + XAdvance 7 + +Letter 'v' + PositionX 141 + PositionY 29 + Width 6 + Height 6 + XAdvance 7 + +Letter 'w' + PositionX 149 + PositionY 29 + Width 8 + Height 6 + XAdvance 9 + +Letter 'x' + PositionX 159 + PositionY 29 + Width 5 + Height 6 + XAdvance 6 + +Letter 'y' + PositionX 166 + PositionY 29 + Width 6 + Height 8 + XAdvance 7 + +Letter 'z' + PositionX 174 + PositionY 29 + Width 5 + Height 6 + XAdvance 6 + +Letter '{' + PositionX 181 + PositionY 29 + Width 4 + Height 11 + XAdvance 5 + +Letter '|' + PositionX 187 + PositionY 29 + Width 2 + Height 10 + XAdvance 3 + +Letter '}' + PositionX 191 + PositionY 29 + Width 4 + Height 11 + XAdvance 5 + +Letter '~' + PositionX 197 + PositionY 29 + Width 7 + Height 2 + XAdvance 8 + +Letter '' + PositionX 206 + PositionY 29 + Width 3 + Height 9 + XAdvance 4 + +Letter 'Ђ' + PositionX 211 + PositionY 29 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ѓ' + PositionX 222 + PositionY 29 + Width 6 + Height 11 + XAdvance 7 + +Letter '‚' + PositionX 230 + PositionY 29 + Width 3 + Height 2 + XAdvance 4 + +Letter 'ѓ' + PositionX 235 + PositionY 29 + Width 5 + Height 9 + XAdvance 6 + +Letter '„' + PositionX 242 + PositionY 29 + Width 5 + Height 2 + XAdvance 6 + +Letter '…' + PositionX 1 + PositionY 43 + Width 6 + Height 1 + XAdvance 7 + +Letter '†' + PositionX 9 + PositionY 43 + Width 6 + Height 8 + XAdvance 7 + +Letter '‡' + PositionX 17 + PositionY 43 + Width 6 + Height 8 + XAdvance 7 + +Letter '€' + PositionX 25 + PositionY 43 + Width 7 + Height 9 + XAdvance 8 + +Letter '‰' + PositionX 34 + PositionY 43 + Width 12 + Height 9 + XAdvance 13 + +Letter 'Љ' + PositionX 48 + PositionY 43 + Width 11 + Height 9 + XAdvance 12 + +Letter '‹' + PositionX 61 + PositionY 43 + Width 4 + Height 5 + XAdvance 5 + +Letter 'Њ' + PositionX 67 + PositionY 43 + Width 11 + Height 9 + XAdvance 12 + +Letter 'Ќ' + PositionX 80 + PositionY 43 + Width 7 + Height 11 + XAdvance 8 + +Letter 'Ћ' + PositionX 89 + PositionY 43 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Џ' + PositionX 100 + PositionY 43 + Width 6 + Height 11 + XAdvance 7 + +Letter 'ђ' + PositionX 108 + PositionY 43 + Width 7 + Height 11 + XAdvance 8 + +Letter '‘' + PositionX 117 + PositionY 43 + Width 3 + Height 2 + XAdvance 4 + +Letter '’' + PositionX 122 + PositionY 43 + Width 3 + Height 2 + XAdvance 4 + +Letter '“' + PositionX 127 + PositionY 43 + Width 5 + Height 2 + XAdvance 6 + +Letter '”' + PositionX 134 + PositionY 43 + Width 5 + Height 2 + XAdvance 6 + +Letter '•' + PositionX 141 + PositionY 43 + Width 5 + Height 3 + XAdvance 6 + +Letter '–' + PositionX 148 + PositionY 43 + Width 4 + Height 1 + XAdvance 5 + +Letter '—' + PositionX 154 + PositionY 43 + Width 7 + Height 1 + XAdvance 8 + +Letter '™' + PositionX 168 + PositionY 43 + Width 10 + Height 3 + XAdvance 11 + +Letter 'љ' + PositionX 180 + PositionY 43 + Width 10 + Height 6 + XAdvance 11 + +Letter '›' + PositionX 192 + PositionY 43 + Width 4 + Height 5 + XAdvance 5 + +Letter 'њ' + PositionX 198 + PositionY 43 + Width 10 + Height 6 + XAdvance 11 + +Letter 'ќ' + PositionX 210 + PositionY 43 + Width 6 + Height 9 + XAdvance 7 + +Letter 'ћ' + PositionX 218 + PositionY 43 + Width 7 + Height 9 + XAdvance 8 + +Letter 'џ' + PositionX 227 + PositionY 43 + Width 6 + Height 8 + XAdvance 7 + +Letter ' ' + PositionX 235 + PositionY 43 + Width 1 + Height 1 + XAdvance 2 + +Letter 'Ў' + PositionX 238 + PositionY 43 + Width 7 + Height 11 + XAdvance 8 + +Letter 'ў' + PositionX 247 + PositionY 43 + Width 5 + Height 11 + XAdvance 6 + +Letter 'Ј' + PositionX 1 + PositionY 57 + Width 5 + Height 9 + XAdvance 6 + +Letter '¤' + PositionX 8 + PositionY 57 + Width 6 + Height 7 + XAdvance 7 + +Letter 'Ґ' + PositionX 16 + PositionY 57 + Width 6 + Height 10 + XAdvance 7 + +Letter '¦' + PositionX 24 + PositionY 57 + Width 2 + Height 11 + XAdvance 3 + +Letter '§' + PositionX 28 + PositionY 57 + Width 6 + Height 10 + XAdvance 7 + +Letter 'Ё' + PositionX 36 + PositionY 57 + Width 6 + Height 11 + XAdvance 7 + +Letter '©' + PositionX 44 + PositionY 57 + Width 9 + Height 7 + XAdvance 10 + +Letter 'Є' + PositionX 55 + PositionY 57 + Width 7 + Height 9 + XAdvance 8 + +Letter '«' + PositionX 64 + PositionY 57 + Width 6 + Height 5 + XAdvance 7 + +Letter '¬' + PositionX 72 + PositionY 57 + Width 6 + Height 2 + XAdvance 7 + +Letter '­' + PositionX 80 + PositionY 57 + Width 3 + Height 1 + XAdvance 4 + +Letter '®' + PositionX 85 + PositionY 57 + Width 9 + Height 8 + XAdvance 10 + +Letter 'Ї' + PositionX 96 + PositionY 57 + Width 4 + Height 11 + XAdvance 5 + +Letter '°' + PositionX 102 + PositionY 57 + Width 4 + Height 3 + XAdvance 5 + +Letter '±' + PositionX 108 + PositionY 57 + Width 6 + Height 7 + XAdvance 7 + +Letter 'І' + PositionX 116 + PositionY 57 + Width 2 + Height 9 + XAdvance 3 + +Letter 'і' + PositionX 120 + PositionY 57 + Width 2 + Height 9 + XAdvance 3 + +Letter 'ґ' + PositionX 124 + PositionY 57 + Width 5 + Height 7 + XAdvance 6 + +Letter 'µ' + PositionX 131 + PositionY 57 + Width 7 + Height 7 + XAdvance 8 + +Letter '¶' + PositionX 140 + PositionY 57 + Width 6 + Height 10 + XAdvance 7 + +Letter '·' + PositionX 148 + PositionY 57 + Width 2 + Height 1 + XAdvance 3 + +Letter 'ё' + PositionX 152 + PositionY 57 + Width 6 + Height 8 + XAdvance 7 + +Letter '№' + PositionX 160 + PositionY 57 + Width 11 + Height 9 + XAdvance 12 + +Letter 'є' + PositionX 173 + PositionY 57 + Width 6 + Height 6 + XAdvance 7 + +Letter '»' + PositionX 181 + PositionY 57 + Width 6 + Height 5 + XAdvance 7 + +Letter 'ј' + PositionX 189 + PositionY 57 + Width 2 + Height 11 + XAdvance 3 + +Letter 'Ѕ' + PositionX 193 + PositionY 57 + Width 6 + Height 9 + XAdvance 7 + +Letter 'ѕ' + PositionX 201 + PositionY 57 + Width 5 + Height 6 + XAdvance 6 + +Letter 'ї' + PositionX 208 + PositionY 57 + Width 4 + Height 9 + XAdvance 5 + +Letter 'А' + PositionX 214 + PositionY 57 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Б' + PositionX 224 + PositionY 57 + Width 6 + Height 9 + XAdvance 7 + +Letter 'В' + PositionX 232 + PositionY 57 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Г' + PositionX 240 + PositionY 57 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Д' + PositionX 1 + PositionY 71 + Width 9 + Height 10 + XAdvance 10 + +Letter 'Е' + PositionX 12 + PositionY 71 + Width 6 + Height 9 + XAdvance 7 + +Letter 'Ж' + PositionX 20 + PositionY 71 + Width 12 + Height 9 + XAdvance 13 + +Letter 'З' + PositionX 34 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'И' + PositionX 43 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Й' + PositionX 52 + PositionY 71 + Width 7 + Height 11 + XAdvance 8 + +Letter 'К' + PositionX 61 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Л' + PositionX 70 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'М' + PositionX 79 + PositionY 71 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Н' + PositionX 89 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'О' + PositionX 98 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'П' + PositionX 107 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Р' + PositionX 116 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'С' + PositionX 125 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Т' + PositionX 134 + PositionY 71 + Width 6 + Height 9 + XAdvance 7 + +Letter 'У' + PositionX 142 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ф' + PositionX 151 + PositionY 71 + Width 10 + Height 9 + XAdvance 11 + +Letter 'Х' + PositionX 163 + PositionY 71 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Ц' + PositionX 173 + PositionY 71 + Width 7 + Height 10 + XAdvance 8 + +Letter 'Ч' + PositionX 182 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ш' + PositionX 191 + PositionY 71 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Щ' + PositionX 201 + PositionY 71 + Width 9 + Height 10 + XAdvance 10 + +Letter 'Ъ' + PositionX 212 + PositionY 71 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ы' + PositionX 223 + PositionY 71 + Width 9 + Height 9 + XAdvance 10 + +Letter 'Ь' + PositionX 234 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Э' + PositionX 243 + PositionY 71 + Width 7 + Height 9 + XAdvance 8 + +Letter 'Ю' + PositionX 1 + PositionY 85 + Width 8 + Height 9 + XAdvance 9 + +Letter 'Я' + PositionX 11 + PositionY 85 + Width 7 + Height 9 + XAdvance 8 + +Letter 'а' + PositionX 20 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'б' + PositionX 28 + PositionY 85 + Width 6 + Height 9 + XAdvance 7 + +Letter 'в' + PositionX 36 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'г' + PositionX 44 + PositionY 85 + Width 5 + Height 6 + XAdvance 6 + +Letter 'д' + PositionX 51 + PositionY 85 + Width 7 + Height 7 + XAdvance 8 + +Letter 'е' + PositionX 60 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'ж' + PositionX 68 + PositionY 85 + Width 8 + Height 6 + XAdvance 9 + +Letter 'з' + PositionX 78 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'и' + PositionX 86 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'й' + PositionX 94 + PositionY 85 + Width 6 + Height 8 + XAdvance 7 + +Letter 'к' + PositionX 102 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'л' + PositionX 110 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'м' + PositionX 118 + PositionY 85 + Width 8 + Height 6 + XAdvance 9 + +Letter 'н' + PositionX 128 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'о' + PositionX 136 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'п' + PositionX 144 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'р' + PositionX 152 + PositionY 85 + Width 6 + Height 8 + XAdvance 7 + +Letter 'с' + PositionX 160 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'т' + PositionX 168 + PositionY 85 + Width 6 + Height 6 + XAdvance 7 + +Letter 'у' + PositionX 176 + PositionY 85 + Width 5 + Height 8 + XAdvance 6 + +Letter 'ф' + PositionX 183 + PositionY 85 + Width 8 + Height 8 + XAdvance 9 + +Letter 'х' + PositionX 193 + PositionY 85 + Width 5 + Height 6 + XAdvance 6 + +Letter 'ц' + PositionX 200 + PositionY 85 + Width 6 + Height 7 + XAdvance 7 + +Letter 'ч' + PositionX 208 + PositionY 85 + Width 5 + Height 6 + XAdvance 6 + +Letter 'ш' + PositionX 215 + PositionY 85 + Width 8 + Height 6 + XAdvance 9 + +Letter 'щ' + PositionX 225 + PositionY 85 + Width 9 + Height 7 + XAdvance 10 + +Letter 'ъ' + PositionX 236 + PositionY 85 + Width 8 + Height 6 + XAdvance 9 + +Letter 'ы' + PositionX 246 + PositionY 85 + Width 8 + Height 6 + XAdvance 9 + +Letter 'ь' + PositionX 1 + PositionY 99 + Width 6 + Height 6 + XAdvance 7 + +Letter 'э' + PositionX 9 + PositionY 99 + Width 6 + Height 6 + XAdvance 7 + +Letter 'ю' + PositionX 17 + PositionY 99 + Width 8 + Height 6 + XAdvance 9 + +Letter 'я' + PositionX 27 + PositionY 99 + Width 6 + Height 6 + XAdvance 7 diff --git a/SDK/Modules/Core/Resources/Core/Fonts/OldDefault.png b/SDK/Modules/Core/Resources/Core/Fonts/OldDefault.png new file mode 100644 index 0000000000..6746a242e8 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/OldDefault.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/SandNumbers.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/SandNumbers.fofnt new file mode 100644 index 0000000000..faed0722aa --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/SandNumbers.fofnt @@ -0,0 +1,79 @@ +Version 2 +Image SandNumbers.png +YAdvance 0 + +Letter ' ' + PositionX 1 + PositionY 1 + XAdvance 10 + +Letter '0' + PositionX 1 + PositionY 1 + Width 10 + Height 13 + XAdvance 10 + +Letter '1' + PositionX 13 + PositionY 1 + Width 10 + Height 13 + XAdvance 10 + +Letter '2' + PositionX 25 + PositionY 1 + Width 10 + Height 13 + XAdvance 10 + +Letter '3' + PositionX 37 + PositionY 1 + Width 10 + Height 13 + XAdvance 10 + +Letter '4' + PositionX 49 + PositionY 1 + Width 10 + Height 13 + XAdvance 10 + +Letter '5' + PositionX 1 + PositionY 16 + Width 10 + Height 13 + XAdvance 10 + +Letter '6' + PositionX 13 + PositionY 16 + Width 10 + Height 13 + XAdvance 10 + +Letter '7' + PositionX 25 + PositionY 16 + Width 10 + Height 13 + XAdvance 10 + +Letter '8' + PositionX 37 + PositionY 16 + Width 10 + Height 13 + XAdvance 10 + +Letter '9' + PositionX 49 + PositionY 16 + Width 10 + Height 13 + XAdvance 10 + diff --git a/SDK/Modules/Core/Resources/Core/Fonts/SandNumbers.png b/SDK/Modules/Core/Resources/Core/Fonts/SandNumbers.png new file mode 100644 index 0000000000..531f657b23 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/SandNumbers.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Settings.bmfc b/SDK/Modules/Core/Resources/Core/Fonts/Settings.bmfc new file mode 100644 index 0000000000..f4764e1bc0 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Settings.bmfc @@ -0,0 +1,57 @@ +# AngelCode Bitmap Font Generator configuration file +fileVersion=1 + +# font settings +fontName=DejaVu Sans Mono +fontFile= +charSet=0 +fontSize=12 +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=1 +paddingUp=1 +paddingRight=1 +paddingLeft=1 +spacingHoriz=0 +spacingVert=0 +useFixedHeight=0 +forceZero=0 + +# output file +outWidth=512 +outHeight=512 +outBitDepth=32 +fontDescFormat=2 +fourChnlPacked=0 +textureFormat=png +textureCompression=0 +alphaChnl=1 +redChnl=4 +greenChnl=3 +blueChnl=3 +invA=0 +invR=0 +invG=0 +invB=0 + +# outline +outlineThickness=0 + +# selected chars +chars=32-126,160-383,402,416-417,431-432,496,508-511,536-539,1024-1119,1122-1123,1138-1139,1168-1179,1186 +chars=1187-1189,1194-1203,1210-1211,1216-1220,1223-1224,1227-1228,1231-1273,8192-8202,8211-8213,8215-8222 +chars=8224-8226,8230,8240,8242-8243,8249-8250,8252 + +# imported icon images diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Special.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Special.fofnt new file mode 100644 index 0000000000..f1988c8965 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Special.fofnt @@ -0,0 +1,1278 @@ +Version 2 +Image Special.png +YAdvance 3 + +Letter '' + PositionX 49 + PositionY 1 + Width 7 + Height 6 + OffsetY -3 + XAdvance 8 + +Letter '' + PositionX 58 + PositionY 1 + Width 7 + Height 6 + OffsetY -3 + XAdvance 8 + +Letter ' ' + PositionX 79 + PositionY 1 + Width 4 + OffsetY -9 + XAdvance 4 + +Letter '!' + PositionX 85 + PositionY 1 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '"' + PositionX 90 + PositionY 1 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter '#' + PositionX 97 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '$' + PositionX 106 + PositionY 1 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter '%' + PositionX 116 + PositionY 1 + Width 11 + Height 8 + OffsetY -1 + XAdvance 12 + +Letter '&' + PositionX 129 + PositionY 1 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter ''' + PositionX 139 + PositionY 1 + Width 2 + Height 8 + OffsetY -1 + XAdvance 3 + +Letter '(' + PositionX 143 + PositionY 1 + Width 4 + Height 8 + OffsetY -1 + XAdvance 5 + +Letter ')' + PositionX 149 + PositionY 1 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '*' + PositionX 154 + PositionY 1 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '+' + PositionX 159 + PositionY 1 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter ',' + PositionX 167 + PositionY 1 + Width 2 + Height 4 + OffsetY -5 + XAdvance 3 + +Letter '-' + PositionX 171 + PositionY 1 + Width 4 + Height 5 + OffsetY -4 + XAdvance 5 + +Letter '.' + PositionX 177 + PositionY 1 + Width 2 + Height 4 + OffsetY -5 + XAdvance 3 + +Letter '/' + PositionX 181 + PositionY 1 + Width 5 + Height 9 + XAdvance 6 + +Letter '0' + PositionX 188 + PositionY 1 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter '1' + PositionX 198 + PositionY 1 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter '2' + PositionX 205 + PositionY 1 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter '3' + PositionX 215 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '4' + PositionX 224 + PositionY 1 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter '5' + PositionX 234 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '6' + PositionX 243 + PositionY 1 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '7' + PositionX 1 + PositionY 12 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '8' + PositionX 10 + PositionY 12 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter '9' + PositionX 19 + PositionY 12 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter ':' + PositionX 28 + PositionY 12 + Width 2 + Height 6 + OffsetY -3 + XAdvance 3 + +Letter ';' + PositionX 32 + PositionY 12 + Width 3 + Height 6 + OffsetY -3 + XAdvance 4 + +Letter '<' + PositionX 37 + PositionY 12 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter '=' + PositionX 44 + PositionY 12 + Width 6 + Height 6 + OffsetY -3 + XAdvance 7 + +Letter '>' + PositionX 52 + PositionY 12 + Width 4 + Height 7 + OffsetY -2 + XAdvance 5 + +Letter '?' + PositionX 58 + PositionY 12 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter '@' + PositionX 66 + PositionY 12 + Width 8 + Height 9 + XAdvance 9 + +Letter 'A' + PositionX 76 + PositionY 12 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'B' + PositionX 87 + PositionY 12 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'C' + PositionX 96 + PositionY 12 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'D' + PositionX 105 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'E' + PositionX 115 + PositionY 12 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'F' + PositionX 124 + PositionY 12 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'G' + PositionX 132 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'H' + PositionX 142 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'I' + PositionX 152 + PositionY 12 + Width 2 + Height 8 + OffsetY -1 + XAdvance 3 + +Letter 'J' + PositionX 156 + PositionY 12 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'K' + PositionX 164 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'L' + PositionX 174 + PositionY 12 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'M' + PositionX 182 + PositionY 12 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'N' + PositionX 193 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'O' + PositionX 203 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'P' + PositionX 213 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Q' + PositionX 223 + PositionY 12 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'R' + PositionX 234 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'S' + PositionX 244 + PositionY 12 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'T' + PositionX 1 + PositionY 23 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'U' + PositionX 10 + PositionY 23 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'V' + PositionX 20 + PositionY 23 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'W' + PositionX 29 + PositionY 23 + Width 12 + Height 8 + OffsetY -1 + XAdvance 13 + +Letter 'X' + PositionX 43 + PositionY 23 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Y' + PositionX 53 + PositionY 23 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Z' + PositionX 63 + PositionY 23 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter '[' + PositionX 73 + PositionY 23 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '\' + PositionX 78 + PositionY 23 + Width 5 + Height 9 + XAdvance 6 + +Letter ']' + PositionX 85 + PositionY 23 + Width 4 + Height 8 + OffsetY -1 + XAdvance 5 + +Letter '^' + PositionX 91 + PositionY 23 + Width 4 + Height 8 + OffsetY -1 + XAdvance 5 + +Letter '_' + PositionX 97 + PositionY 23 + Width 5 + Height 2 + OffsetY -7 + XAdvance 6 + +Letter '`' + PositionX 104 + PositionY 23 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter 'a' + PositionX 109 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'b' + PositionX 117 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'c' + PositionX 125 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'd' + PositionX 132 + PositionY 23 + Width 6 + Height 9 + XAdvance 7 + +Letter 'e' + PositionX 140 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'f' + PositionX 148 + PositionY 23 + Width 4 + Height 9 + XAdvance 5 + +Letter 'g' + PositionX 154 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'h' + PositionX 161 + PositionY 23 + Width 5 + Height 9 + XAdvance 6 + +Letter 'i' + PositionX 168 + PositionY 23 + Width 1 + Height 9 + XAdvance 2 + +Letter 'j' + PositionX 171 + PositionY 23 + Width 2 + Height 9 + XAdvance 3 + +Letter 'k' + PositionX 175 + PositionY 23 + Width 5 + Height 9 + XAdvance 6 + +Letter 'l' + PositionX 182 + PositionY 23 + Width 1 + Height 9 + XAdvance 2 + +Letter 'm' + PositionX 185 + PositionY 23 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'n' + PositionX 196 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'o' + PositionX 204 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'p' + PositionX 212 + PositionY 23 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'q' + PositionX 220 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'r' + PositionX 227 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 's' + PositionX 234 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 't' + PositionX 241 + PositionY 23 + Width 4 + Height 8 + OffsetY -1 + XAdvance 5 + +Letter 'u' + PositionX 247 + PositionY 23 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'v' + PositionX 1 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'w' + PositionX 9 + PositionY 34 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'x' + PositionX 20 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'y' + PositionX 28 + PositionY 34 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'z' + PositionX 36 + PositionY 34 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter '{' + PositionX 43 + PositionY 34 + Width 4 + Height 8 + OffsetY -1 + XAdvance 5 + +Letter '|' + PositionX 49 + PositionY 34 + Width 2 + Height 8 + OffsetY -1 + XAdvance 3 + +Letter '}' + PositionX 53 + PositionY 34 + Width 3 + Height 8 + OffsetY -1 + XAdvance 4 + +Letter '~' + PositionX 58 + PositionY 34 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter 'А' + PositionX 195 + PositionY 34 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'Б' + PositionX 206 + PositionY 34 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'В' + PositionX 215 + PositionY 34 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'Г' + PositionX 224 + PositionY 34 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'Д' + PositionX 232 + PositionY 34 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'Е' + PositionX 243 + PositionY 34 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'Ж' + PositionX 1 + PositionY 45 + Width 11 + Height 8 + OffsetY -1 + XAdvance 12 + +Letter 'З' + PositionX 14 + PositionY 45 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'И' + PositionX 23 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Й' + PositionX 33 + PositionY 45 + Width 8 + Height 9 + XAdvance 9 + +Letter 'К' + PositionX 43 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Л' + PositionX 53 + PositionY 45 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'М' + PositionX 62 + PositionY 45 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'Н' + PositionX 73 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'О' + PositionX 83 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'П' + PositionX 93 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Р' + PositionX 103 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'С' + PositionX 113 + PositionY 45 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'Т' + PositionX 122 + PositionY 45 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'У' + PositionX 131 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Ф' + PositionX 141 + PositionY 45 + Width 11 + Height 8 + OffsetY -1 + XAdvance 12 + +Letter 'Х' + PositionX 154 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Ц' + PositionX 164 + PositionY 45 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'Ч' + PositionX 175 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Ш' + PositionX 185 + PositionY 45 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'Щ' + PositionX 195 + PositionY 45 + Width 12 + Height 8 + OffsetY -1 + XAdvance 13 + +Letter 'Ъ' + PositionX 209 + PositionY 45 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'Ы' + PositionX 218 + PositionY 45 + Width 9 + Height 8 + OffsetY -1 + XAdvance 10 + +Letter 'Ь' + PositionX 229 + PositionY 45 + Width 6 + Height 8 + OffsetY -1 + XAdvance 7 + +Letter 'Э' + PositionX 237 + PositionY 45 + Width 7 + Height 8 + OffsetY -1 + XAdvance 8 + +Letter 'Ю' + PositionX 1 + PositionY 56 + Width 11 + Height 8 + OffsetY -1 + XAdvance 12 + +Letter 'Я' + PositionX 14 + PositionY 56 + Width 8 + Height 8 + OffsetY -1 + XAdvance 9 + +Letter 'а' + PositionX 24 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'б' + PositionX 31 + PositionY 56 + Width 5 + Height 9 + XAdvance 6 + +Letter 'в' + PositionX 38 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'г' + PositionX 45 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'д' + PositionX 52 + PositionY 56 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'е' + PositionX 60 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'ж' + PositionX 67 + PositionY 56 + Width 8 + Height 7 + OffsetY -2 + XAdvance 9 + +Letter 'з' + PositionX 77 + PositionY 56 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'и' + PositionX 86 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'й' + PositionX 93 + PositionY 56 + Width 5 + Height 8 + OffsetY -1 + XAdvance 6 + +Letter 'к' + PositionX 100 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'л' + PositionX 107 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'м' + PositionX 114 + PositionY 56 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'н' + PositionX 123 + PositionY 56 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'о' + PositionX 131 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'п' + PositionX 138 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'р' + PositionX 145 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'с' + PositionX 152 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'т' + PositionX 159 + PositionY 56 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'у' + PositionX 170 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'ф' + PositionX 177 + PositionY 56 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'х' + PositionX 188 + PositionY 56 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ц' + PositionX 196 + PositionY 56 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ч' + PositionX 204 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'ш' + PositionX 211 + PositionY 56 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'щ' + PositionX 222 + PositionY 56 + Width 9 + Height 7 + OffsetY -2 + XAdvance 10 + +Letter 'ъ' + PositionX 233 + PositionY 56 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ы' + PositionX 241 + PositionY 56 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + +Letter 'ь' + PositionX 249 + PositionY 56 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'э' + PositionX 1 + PositionY 67 + Width 5 + Height 7 + OffsetY -2 + XAdvance 6 + +Letter 'ю' + PositionX 8 + PositionY 67 + Width 7 + Height 7 + OffsetY -2 + XAdvance 8 + +Letter 'я' + PositionX 17 + PositionY 67 + Width 6 + Height 7 + OffsetY -2 + XAdvance 7 + diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Special.png b/SDK/Modules/Core/Resources/Core/Fonts/Special.png new file mode 100644 index 0000000000..03b2f3d73e Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Special.png differ diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Thin.fofnt b/SDK/Modules/Core/Resources/Core/Fonts/Thin.fofnt new file mode 100644 index 0000000000..e117016b88 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Fonts/Thin.fofnt @@ -0,0 +1,1159 @@ +Version 2 +Image Thin.png +YAdvance 4 + +Letter ' ' + PositionX 65 + PositionY 1 + Width 4 + OffsetY -24 + XAdvance 4 + +Letter '!' + PositionX 71 + PositionY 1 + Width 5 + Height 24 + XAdvance 6 + +Letter '"' + PositionX 78 + PositionY 1 + Width 8 + Height 24 + XAdvance 9 + +Letter '%' + PositionX 92 + PositionY 1 + Width 12 + Height 24 + XAdvance 13 + +Letter '&' + PositionX 106 + PositionY 1 + Width 9 + Height 24 + XAdvance 10 + +Letter ''' + PositionX 117 + PositionY 1 + Width 4 + Height 24 + XAdvance 5 + +Letter '(' + PositionX 123 + PositionY 1 + Width 4 + Height 24 + XAdvance 5 + +Letter ')' + PositionX 129 + PositionY 1 + Width 4 + Height 24 + XAdvance 5 + +Letter '+' + PositionX 137 + PositionY 1 + Width 11 + Height 19 + OffsetY -5 + XAdvance 12 + +Letter ',' + PositionX 150 + PositionY 1 + Width 4 + Height 6 + OffsetY -18 + XAdvance 5 + +Letter '-' + PositionX 156 + PositionY 1 + Width 6 + Height 12 + OffsetY -12 + XAdvance 7 + +Letter '.' + PositionX 164 + PositionY 1 + Width 3 + Height 6 + OffsetY -18 + XAdvance 4 + +Letter '/' + PositionX 169 + PositionY 1 + Width 7 + Height 24 + XAdvance 8 + +Letter '0' + PositionX 178 + PositionY 1 + Width 8 + Height 24 + XAdvance 9 + +Letter '1' + PositionX 188 + PositionY 1 + Width 4 + Height 24 + XAdvance 5 + +Letter '2' + PositionX 194 + PositionY 1 + Width 7 + Height 24 + XAdvance 8 + +Letter '3' + PositionX 203 + PositionY 1 + Width 6 + Height 24 + XAdvance 7 + +Letter '4' + PositionX 211 + PositionY 1 + Width 9 + Height 24 + XAdvance 10 + +Letter '5' + PositionX 222 + PositionY 1 + Width 6 + Height 24 + XAdvance 7 + +Letter '6' + PositionX 230 + PositionY 1 + Width 8 + Height 24 + XAdvance 9 + +Letter '7' + PositionX 240 + PositionY 1 + Width 5 + Height 24 + XAdvance 6 + +Letter '8' + PositionX 247 + PositionY 1 + Width 7 + Height 24 + XAdvance 8 + +Letter '9' + PositionX 1 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter ':' + PositionX 11 + PositionY 27 + Width 4 + Height 14 + OffsetY -10 + XAdvance 5 + +Letter ';' + PositionX 17 + PositionY 27 + Width 4 + Height 14 + OffsetY -10 + XAdvance 5 + +Letter '<' + PositionX 23 + PositionY 27 + Width 11 + Height 20 + OffsetY -4 + XAdvance 12 + +Letter '=' + PositionX 36 + PositionY 27 + Width 12 + Height 18 + OffsetY -6 + XAdvance 13 + +Letter '>' + PositionX 50 + PositionY 27 + Width 11 + Height 20 + OffsetY -4 + XAdvance 12 + +Letter '?' + PositionX 63 + PositionY 27 + Width 5 + Height 24 + XAdvance 6 + +Letter 'A' + PositionX 72 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'B' + PositionX 82 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'C' + PositionX 92 + PositionY 27 + Width 7 + Height 24 + XAdvance 8 + +Letter 'D' + PositionX 101 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'E' + PositionX 111 + PositionY 27 + Width 6 + Height 24 + XAdvance 7 + +Letter 'F' + PositionX 119 + PositionY 27 + Width 6 + Height 24 + XAdvance 7 + +Letter 'G' + PositionX 127 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'H' + PositionX 137 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'I' + PositionX 147 + PositionY 27 + Width 3 + Height 24 + XAdvance 4 + +Letter 'J' + PositionX 152 + PositionY 27 + Width 4 + Height 24 + XAdvance 5 + +Letter 'K' + PositionX 158 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'L' + PositionX 168 + PositionY 27 + Width 5 + Height 24 + XAdvance 6 + +Letter 'M' + PositionX 175 + PositionY 27 + Width 12 + Height 24 + XAdvance 13 + +Letter 'N' + PositionX 189 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'O' + PositionX 199 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'P' + PositionX 209 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Q' + PositionX 219 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'R' + PositionX 229 + PositionY 27 + Width 8 + Height 24 + XAdvance 9 + +Letter 'S' + PositionX 239 + PositionY 27 + Width 6 + Height 24 + XAdvance 7 + +Letter 'T' + PositionX 1 + PositionY 53 + Width 8 + Height 24 + XAdvance 9 + +Letter 'U' + PositionX 11 + PositionY 53 + Width 8 + Height 24 + XAdvance 9 + +Letter 'V' + PositionX 21 + PositionY 53 + Width 8 + Height 24 + XAdvance 9 + +Letter 'W' + PositionX 31 + PositionY 53 + Width 12 + Height 24 + XAdvance 13 + +Letter 'X' + PositionX 45 + PositionY 53 + Width 7 + Height 24 + XAdvance 8 + +Letter 'Y' + PositionX 54 + PositionY 53 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Z' + PositionX 64 + PositionY 53 + Width 6 + Height 24 + XAdvance 7 + +Letter '[' + PositionX 72 + PositionY 53 + Width 4 + Height 24 + XAdvance 5 + +Letter ']' + PositionX 80 + PositionY 53 + Width 5 + Height 24 + XAdvance 6 + +Letter 'a' + PositionX 93 + PositionY 53 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'b' + PositionX 102 + PositionY 53 + Width 7 + Height 24 + XAdvance 8 + +Letter 'c' + PositionX 111 + PositionY 53 + Width 5 + Height 19 + OffsetY -5 + XAdvance 6 + +Letter 'd' + PositionX 118 + PositionY 53 + Width 7 + Height 24 + XAdvance 8 + +Letter 'e' + PositionX 127 + PositionY 53 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'f' + PositionX 136 + PositionY 53 + Width 5 + Height 24 + XAdvance 6 + +Letter 'g' + PositionX 143 + PositionY 53 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'h' + PositionX 151 + PositionY 53 + Width 7 + Height 24 + XAdvance 8 + +Letter 'i' + PositionX 160 + PositionY 53 + Width 4 + Height 24 + XAdvance 5 + +Letter 'j' + PositionX 166 + PositionY 53 + Width 4 + Height 24 + XAdvance 5 + +Letter 'k' + PositionX 172 + PositionY 53 + Width 6 + Height 24 + XAdvance 7 + +Letter 'l' + PositionX 180 + PositionY 53 + Width 3 + Height 24 + XAdvance 4 + +Letter 'm' + PositionX 185 + PositionY 53 + Width 10 + Height 19 + OffsetY -5 + XAdvance 11 + +Letter 'n' + PositionX 197 + PositionY 53 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'o' + PositionX 206 + PositionY 53 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'p' + PositionX 215 + PositionY 53 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'q' + PositionX 223 + PositionY 53 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'r' + PositionX 231 + PositionY 53 + Width 5 + Height 19 + OffsetY -5 + XAdvance 6 + +Letter 's' + PositionX 238 + PositionY 53 + Width 5 + Height 19 + OffsetY -5 + XAdvance 6 + +Letter 't' + PositionX 245 + PositionY 53 + Width 5 + Height 22 + OffsetY -2 + XAdvance 6 + +Letter 'u' + PositionX 1 + PositionY 79 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'v' + PositionX 10 + PositionY 79 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'w' + PositionX 19 + PositionY 79 + Width 9 + Height 19 + OffsetY -5 + XAdvance 10 + +Letter 'x' + PositionX 30 + PositionY 79 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'y' + PositionX 38 + PositionY 79 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'z' + PositionX 46 + PositionY 79 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'Њ' + PositionX 88 + PositionY 79 + Width 13 + Height 24 + XAdvance 14 + +Letter '™' + PositionX 127 + PositionY 79 + Width 14 + Height 24 + XAdvance 15 + +Letter 'њ' + PositionX 147 + PositionY 79 + Width 12 + Height 19 + OffsetY -5 + XAdvance 13 + +Letter 'Ў' + PositionX 169 + PositionY 79 + Width 4 + Height 24 + XAdvance 5 + +Letter '©' + PositionX 189 + PositionY 79 + Width 14 + Height 22 + OffsetY -2 + XAdvance 15 + +Letter '«' + PositionX 207 + PositionY 79 + Width 14 + Height 17 + OffsetY -7 + XAdvance 15 + +Letter '®' + PositionX 227 + PositionY 79 + Width 14 + Height 22 + OffsetY -2 + XAdvance 15 + +Letter '»' + PositionX 13 + PositionY 105 + Width 14 + Height 17 + OffsetY -7 + XAdvance 15 + +Letter 'ї' + PositionX 35 + PositionY 105 + Width 5 + Height 24 + XAdvance 6 + +Letter 'А' + PositionX 42 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Б' + PositionX 52 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'В' + PositionX 62 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Г' + PositionX 72 + PositionY 105 + Width 6 + Height 24 + XAdvance 7 + +Letter 'Д' + PositionX 80 + PositionY 105 + Width 13 + Height 24 + XAdvance 14 + +Letter 'Е' + PositionX 95 + PositionY 105 + Width 6 + Height 24 + XAdvance 7 + +Letter 'Ж' + PositionX 103 + PositionY 105 + Width 13 + Height 24 + XAdvance 14 + +Letter 'З' + PositionX 118 + PositionY 105 + Width 6 + Height 24 + XAdvance 7 + +Letter 'И' + PositionX 126 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Й' + PositionX 136 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'К' + PositionX 146 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Л' + PositionX 156 + PositionY 105 + Width 10 + Height 24 + XAdvance 11 + +Letter 'М' + PositionX 168 + PositionY 105 + Width 12 + Height 24 + XAdvance 13 + +Letter 'Н' + PositionX 182 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'О' + PositionX 192 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'П' + PositionX 202 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Р' + PositionX 212 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'С' + PositionX 222 + PositionY 105 + Width 7 + Height 24 + XAdvance 8 + +Letter 'Т' + PositionX 231 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'У' + PositionX 241 + PositionY 105 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Ф' + PositionX 1 + PositionY 131 + Width 13 + Height 24 + XAdvance 14 + +Letter 'Х' + PositionX 16 + PositionY 131 + Width 7 + Height 24 + XAdvance 8 + +Letter 'Ц' + PositionX 25 + PositionY 131 + Width 10 + Height 24 + XAdvance 11 + +Letter 'Ч' + PositionX 37 + PositionY 131 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Ш' + PositionX 47 + PositionY 131 + Width 13 + Height 24 + XAdvance 14 + +Letter 'Щ' + PositionX 62 + PositionY 131 + Width 15 + Height 24 + XAdvance 16 + +Letter 'Ъ' + PositionX 79 + PositionY 131 + Width 11 + Height 24 + XAdvance 12 + +Letter 'Ы' + PositionX 92 + PositionY 131 + Width 12 + Height 24 + XAdvance 13 + +Letter 'Ь' + PositionX 106 + PositionY 131 + Width 8 + Height 24 + XAdvance 9 + +Letter 'Э' + PositionX 116 + PositionY 131 + Width 7 + Height 24 + XAdvance 8 + +Letter 'Ю' + PositionX 125 + PositionY 131 + Width 12 + Height 24 + XAdvance 13 + +Letter 'Я' + PositionX 139 + PositionY 131 + Width 8 + Height 24 + XAdvance 9 + +Letter 'а' + PositionX 149 + PositionY 131 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'б' + PositionX 158 + PositionY 131 + Width 7 + Height 23 + OffsetY -1 + XAdvance 8 + +Letter 'в' + PositionX 167 + PositionY 131 + Width 6 + Height 24 + XAdvance 7 + +Letter 'г' + PositionX 175 + PositionY 131 + Width 5 + Height 19 + OffsetY -5 + XAdvance 6 + +Letter 'д' + PositionX 182 + PositionY 131 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'е' + PositionX 190 + PositionY 131 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'ж' + PositionX 199 + PositionY 131 + Width 10 + Height 19 + OffsetY -5 + XAdvance 11 + +Letter 'з' + PositionX 211 + PositionY 131 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'и' + PositionX 219 + PositionY 131 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'й' + PositionX 228 + PositionY 131 + Width 7 + Height 23 + OffsetY -1 + XAdvance 8 + +Letter 'к' + PositionX 237 + PositionY 131 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'л' + PositionX 245 + PositionY 131 + Width 8 + Height 19 + OffsetY -5 + XAdvance 9 + +Letter 'м' + PositionX 1 + PositionY 157 + Width 9 + Height 19 + OffsetY -5 + XAdvance 10 + +Letter 'н' + PositionX 12 + PositionY 157 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'о' + PositionX 21 + PositionY 157 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'п' + PositionX 30 + PositionY 157 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'р' + PositionX 39 + PositionY 157 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'с' + PositionX 47 + PositionY 157 + Width 5 + Height 19 + OffsetY -5 + XAdvance 6 + +Letter 'т' + PositionX 54 + PositionY 157 + Width 10 + Height 19 + OffsetY -5 + XAdvance 11 + +Letter 'у' + PositionX 66 + PositionY 157 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'ф' + PositionX 74 + PositionY 157 + Width 10 + Height 19 + OffsetY -5 + XAdvance 11 + +Letter 'х' + PositionX 86 + PositionY 157 + Width 6 + Height 19 + OffsetY -5 + XAdvance 7 + +Letter 'ц' + PositionX 94 + PositionY 157 + Width 8 + Height 19 + OffsetY -5 + XAdvance 9 + +Letter 'ч' + PositionX 104 + PositionY 157 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'ш' + PositionX 113 + PositionY 157 + Width 11 + Height 19 + OffsetY -5 + XAdvance 12 + +Letter 'щ' + PositionX 126 + PositionY 157 + Width 12 + Height 19 + OffsetY -5 + XAdvance 13 + +Letter 'ъ' + PositionX 140 + PositionY 157 + Width 9 + Height 19 + OffsetY -5 + XAdvance 10 + +Letter 'ы' + PositionX 151 + PositionY 157 + Width 12 + Height 19 + OffsetY -5 + XAdvance 13 + +Letter 'ь' + PositionX 165 + PositionY 157 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'э' + PositionX 174 + PositionY 157 + Width 7 + Height 19 + OffsetY -5 + XAdvance 8 + +Letter 'ю' + PositionX 183 + PositionY 157 + Width 11 + Height 19 + OffsetY -5 + XAdvance 12 + +Letter 'я' + PositionX 196 + PositionY 157 + Width 8 + Height 19 + OffsetY -5 + XAdvance 9 + diff --git a/SDK/Modules/Core/Resources/Core/Fonts/Thin.png b/SDK/Modules/Core/Resources/Core/Fonts/Thin.png new file mode 100644 index 0000000000..077d897a66 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Fonts/Thin.png differ diff --git a/SDK/Modules/Core/Resources/Core/ItemStub.png b/SDK/Modules/Core/Resources/Core/ItemStub.png new file mode 100644 index 0000000000..a8051753a6 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/ItemStub.png differ diff --git a/SDK/Modules/Core/Resources/Core/MiniArrowDown.png b/SDK/Modules/Core/Resources/Core/MiniArrowDown.png new file mode 100644 index 0000000000..5e826c1038 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/MiniArrowDown.png differ diff --git a/SDK/Modules/Core/Resources/Core/MiniArrowUp.png b/SDK/Modules/Core/Resources/Core/MiniArrowUp.png new file mode 100644 index 0000000000..e6b8b20639 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/MiniArrowUp.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop1.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop1.png new file mode 100644 index 0000000000..f782c40133 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop1.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop2.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop2.png new file mode 100644 index 0000000000..bbbde36fc4 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop2.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop3.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop3.png new file mode 100644 index 0000000000..322a77afa0 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop3.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop4.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop4.png new file mode 100644 index 0000000000..926f5d3cf9 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop4.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop5.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop5.png new file mode 100644 index 0000000000..303fb630bc Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop5.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop6.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop6.png new file mode 100644 index 0000000000..9b80dab2d0 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop6.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/ADrop7.png b/SDK/Modules/Core/Resources/Core/Rain/ADrop7.png new file mode 100644 index 0000000000..9b80dab2d0 Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/ADrop7.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/Drop.fofrm b/SDK/Modules/Core/Resources/Core/Rain/Drop.fofrm new file mode 100644 index 0000000000..3469b316a7 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Rain/Drop.fofrm @@ -0,0 +1,8 @@ +count = 7 +frm_0 = ADrop1.png +frm_1 = ADrop2.png +frm_2 = ADrop3.png +frm_3 = ADrop4.png +frm_4 = ADrop5.png +frm_5 = ADrop6.png +frm_6 = ADrop7.png diff --git a/SDK/Modules/Core/Resources/Core/Rain/Drop.png b/SDK/Modules/Core/Resources/Core/Rain/Drop.png new file mode 100644 index 0000000000..21bc3e394e Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/Rain/Drop.png differ diff --git a/SDK/Modules/Core/Resources/Core/Rain/Fall.fofrm b/SDK/Modules/Core/Resources/Core/Rain/Fall.fofrm new file mode 100644 index 0000000000..871db578e4 --- /dev/null +++ b/SDK/Modules/Core/Resources/Core/Rain/Fall.fofrm @@ -0,0 +1 @@ +frm = Drop.png diff --git a/SDK/Modules/Core/Resources/Core/TransparentEgg.png b/SDK/Modules/Core/Resources/Core/TransparentEgg.png new file mode 100644 index 0000000000..10ad39b85b Binary files /dev/null and b/SDK/Modules/Core/Resources/Core/TransparentEgg.png differ diff --git a/SDK/Modules/Core/Serializator.fos b/SDK/Modules/Core/Serializator.fos new file mode 100644 index 0000000000..97be3fb907 --- /dev/null +++ b/SDK/Modules/Core/Serializator.fos @@ -0,0 +1,572 @@ +// FOS Server Client +// Data serialization + +/*EXPORT*/ class Serializator +{ + private uint8[] dataArray; + private uint curPos; + private uint bufSize; + private uint dataSize; + + Serializator() + { + dataArray = array< uint8 >(); + curPos = 0; + bufSize = 0; + dataSize = 0; + } + + Serializator( uint approxSize ) + { + dataArray = array< uint8 >(); + curPos = 0; + bufSize = 0; + dataSize = 0; + GrowBuffer( approxSize ); + } + + void GrowBuffer( uint size ) + { + if( size <= bufSize ) + return; + if( bufSize == 0 ) + bufSize = 1; + while( size > bufSize ) + bufSize *= 2; + dataArray.resize( bufSize ); + } + + #ifdef __CLIENT + void SaveToCache( string name ) + { + SetCacheData( name, dataArray, dataSize ); + Clear(); + } + + uint LoadFromCache( string name ) + { + Clear(); + dataArray = GetCacheData( name ); + if( dataArray != null ) + { + bufSize = dataArray.length(); + dataSize = bufSize; + } + return bufSize; + } + #endif + + uint8[] GetData() + { + uint8[] data = array< uint8 >( dataArray ); + data.resize( dataSize ); + return data; + } + + uint SetData( const uint8[] data ) + { + dataArray = array< uint8 >( data ); + bufSize = data.length(); + dataSize = data.length(); + return dataSize; + } + + void Clear() + { + curPos = 0; + bufSize = 0; + dataSize = 0; + } + + Serializator SetcurPos( uint pos ) + { + GrowBuffer( pos ); + curPos = pos; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Fill( uint8 value, uint length ) + { + GrowBuffer( curPos + length ); + for( uint i = 0; i < length; i++ ) + dataArray[ curPos++ ] = value; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int64& value ) + { + GrowBuffer( curPos + 8 ); + dataArray[ curPos++ ] = ( value >> 56 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 48 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 40 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 32 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 24 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 16 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 8 ) & 0xFF; + dataArray[ curPos++ ] = value & 0xFF; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int32& value ) + { + GrowBuffer( curPos + 4 ); + dataArray[ curPos++ ] = ( value >> 24 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 16 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 8 ) & 0xFF; + dataArray[ curPos++ ] = value & 0xFF; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int16& value ) + { + GrowBuffer( curPos + 2 ); + dataArray[ curPos++ ] = ( value >> 8 ) & 0xFF; + dataArray[ curPos++ ] = value & 0xFF; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int8& value ) + { + GrowBuffer( curPos + 1 ); + dataArray[ curPos++ ] = value; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint64& value ) + { + GrowBuffer( curPos + 8 ); + dataArray[ curPos++ ] = ( value >> 56 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 48 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 40 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 32 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 24 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 16 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 8 ) & 0xFF; + dataArray[ curPos++ ] = value & 0xFF; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint32& value ) + { + GrowBuffer( curPos + 4 ); + dataArray[ curPos++ ] = ( value >> 24 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 16 ) & 0xFF; + dataArray[ curPos++ ] = ( value >> 8 ) & 0xFF; + dataArray[ curPos++ ] = value & 0xFF; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint16& value ) + { + GrowBuffer( curPos + 2 ); + dataArray[ curPos++ ] = ( value >> 8 ) & 0xFF; + dataArray[ curPos++ ] = value & 0xFF; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint8& value ) + { + GrowBuffer( curPos + 1 ); + dataArray[ curPos++ ] = value; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const bool& value ) + { + GrowBuffer( curPos + 1 ); + dataArray[ curPos++ ] = value ? 1 : 0; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const string value ) + { + uint len = value.rawLength(); + GrowBuffer( curPos + len + 1 ); + for( uint i = 0; i < len; i++ ) + dataArray[ curPos++ ] = value.rawGet( i ); + dataArray[ curPos++ ] = 0; + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int64[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen * 8; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int32[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen * 4; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int16[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen * 2; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const int8[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint64[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen * 8; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint32[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen * 4; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint16[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen * 2; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const uint8[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0, j = valuesLen; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const bool[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen; + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0, j = valuesLen; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Set( const string[] values ) + { + uint valuesLen = values.length(); + uint len = 4 + valuesLen; // Length and zeros + for( uint i = 0; i < valuesLen; i++ ) + len += values[ i ].length(); + GrowBuffer( curPos + len ); + Set( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Set( values[ i ] ); + if( curPos > dataSize ) + dataSize = curPos; + return this; + } + + Serializator Get( int64& value ) + { + value = 0; + if( curPos + 8 > dataSize ) + return this; + value |= dataArray[ curPos++ ] << 56; + value |= dataArray[ curPos++ ] << 48; + value |= dataArray[ curPos++ ] << 40; + value |= dataArray[ curPos++ ] << 32; + value |= dataArray[ curPos++ ] << 24; + value |= dataArray[ curPos++ ] << 16; + value |= dataArray[ curPos++ ] << 8; + value |= dataArray[ curPos++ ]; + return this; + } + + Serializator Get( int32& value ) + { + value = 0; + if( curPos + 4 > dataSize ) + return this; + value |= dataArray[ curPos++ ] << 24; + value |= dataArray[ curPos++ ] << 16; + value |= dataArray[ curPos++ ] << 8; + value |= dataArray[ curPos++ ]; + return this; + } + + Serializator Get( int16& value ) + { + value = 0; + if( curPos + 2 > dataSize ) + return this; + value |= dataArray[ curPos++ ] << 8; + value |= dataArray[ curPos++ ]; + return this; + } + + Serializator Get( int8& value ) + { + value = 0; + if( curPos + 1 > dataSize ) + return this; + value = dataArray[ curPos++ ]; + return this; + } + + Serializator Get( uint64& value ) + { + value = 0; + if( curPos + 8 > dataSize ) + return this; + value |= dataArray[ curPos++ ] << 56; + value |= dataArray[ curPos++ ] << 48; + value |= dataArray[ curPos++ ] << 40; + value |= dataArray[ curPos++ ] << 32; + value |= dataArray[ curPos++ ] << 24; + value |= dataArray[ curPos++ ] << 16; + value |= dataArray[ curPos++ ] << 8; + value |= dataArray[ curPos++ ]; + return this; + } + + Serializator Get( uint32& value ) + { + value = 0; + if( curPos + 4 > dataSize ) + return this; + value |= dataArray[ curPos++ ] << 24; + value |= dataArray[ curPos++ ] << 16; + value |= dataArray[ curPos++ ] << 8; + value |= dataArray[ curPos++ ]; + return this; + } + + Serializator Get( uint16& value ) + { + value = 0; + if( curPos + 2 > dataSize ) + return this; + value |= dataArray[ curPos++ ] << 8; + value |= dataArray[ curPos++ ]; + return this; + } + + Serializator Get( uint8& value ) + { + value = 0; + if( curPos + 1 > dataSize ) + return this; + value = dataArray[ curPos++ ]; + return this; + } + + Serializator Get( bool& value ) + { + value = false; + if( curPos + 1 > dataSize ) + return this; + value = dataArray[ curPos++ ] == 1 ? true : false; + return this; + } + + Serializator Get( string str ) + { + uint len = 0; + for( uint i = curPos; ; i++ ) + { + if( i == dataSize ) + { + str = ""; + return this; + } + if( dataArray[ i ] == 0 ) + { + len = i - curPos; + break; + } + } + str.rawResize( len ); + for( uint i = 0; i < len; i++ ) + str.rawSet( i, dataArray[ curPos++ ] ); + curPos++; // Skip zero + return this; + } + + Serializator Get( int64[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( int32[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( int16[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( int8[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( uint64[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( uint32[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( uint16[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( uint8[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( bool[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } + + Serializator Get( string[] values ) + { + uint valuesLen = 0; + Get( valuesLen ); + values.resize( valuesLen ); + for( uint i = 0; i < valuesLen; i++ ) + Get( values[ i ] ); + return this; + } +}; diff --git a/SDK/Modules/Core/Sprite.fos b/SDK/Modules/Core/Sprite.fos new file mode 100644 index 0000000000..2a2c35015d --- /dev/null +++ b/SDK/Modules/Core/Sprite.fos @@ -0,0 +1,180 @@ +// FOS Client Mapper + +/*EXPORT*/ class Sprite +{ + Sprite() + { + // Empty + } + + Sprite( string name ) + { + bool ok = Load( name ); + Assert( ok, name ); + } + + Sprite( uint nameHash ) + { + bool ok = Load( nameHash ); + Assert( ok, nameHash ); + } + + bool Load( string name ) + { + Id = ( name.length() > 0 ? LoadSprite( name ) : 0 ); + LoadedNameHash = uint( -1 ); + RefreshData(); + return Id != 0; + } + + bool Load( uint nameHash ) + { + if( nameHash == LoadedNameHash ) + return true; + + LoadedNameHash = nameHash; + Id = LoadSprite( nameHash ); + RefreshData(); + return Id != 0; + } + + void Unload() + { + Id = 0; + RefreshData(); + } + + // cornerX/Y = -1 left / top, 0 center, 1 right / bottom + void Draw( int x, int y, int w = 0, int h = 0, int cornerX = -1, int cornerY = -1, int layout = -1, uint color = 0 ) + { + if( Id == 0 || Hidden ) + return; + + if( w == 0 ) + w = Width; + if( h == 0 ) + h = Height; + + if( AnimPlay ) + { + uint ticksPerFrame = Ticks / FrmCount; + int framesPassed = ( GetTick() - AnimStartTick ) / ticksPerFrame; + if( framesPassed > 0 ) + { + AnimStartTick += framesPassed * ticksPerFrame; + Frame += ( AnimReverse ? -framesPassed : framesPassed ); + + bool endAnim = false; + if( Frame <= 0 ) + { + endAnim = true; + AnimStartTick -= -Frame * ticksPerFrame; + Frame = 0; + } + else if( Frame >= int(FrmCount) - 1 ) + { + endAnim = true; + AnimStartTick -= ( Frame + 1 - FrmCount ) * ticksPerFrame; + Frame = FrmCount - 1; + } + + if( endAnim ) + { + if( AnimLoop ) + Frame = ( AnimReverse ? int(FrmCount) - 1 : 0 ); + else + AnimPlay = false; + } + } + } + + if( cornerX == 0 ) + x -= w / 2; + else if( cornerX == 1 ) + x -= w; + if( cornerY == 0 ) + y -= h / 2; + else if( cornerY == 1 ) + y -= h; + + switch( layout != -1 ? layout : Layout ) + { + case IMAGE_LAYOUT_TILE: + DrawSpritePattern( Id, Frame, x, y, w, h, Width, Height, color ); + break; + case IMAGE_LAYOUT_CENTER: + DrawSprite( Id, Frame, x + w / 2 - Width / 2, y + h / 2 - Height / 2, color ); + break; + case IMAGE_LAYOUT_STRETCH: + DrawSprite( Id, Frame, x, y, w, h, false, color ); + break; + case IMAGE_LAYOUT_ZOOM: + DrawSprite( Id, Frame, x, y, w, h, true, color ); + break; + default: + DrawSprite( Id, Frame, x, y, color ); + break; + } + } + + void SetFrame( int index ) + { + Frame = index; + AnimPlay = false; + } + + void SetFirstFrame() + { + SetFrame( 0 ); + } + + void SetLastFrame() + { + SetFrame( int(FrmCount) - 1 ); + } + + void PlayAnimation( bool loop = true, bool reverse = false ) + { + if( Id == 0 ) + return; + if( AnimPlay && AnimLoop == loop && AnimReverse == reverse ) + return; + + AnimPlay = true; + AnimLoop = loop; + AnimReverse = reverse; + AnimStartTick = GetTick(); + } + + private void RefreshData() + { + if( Id != 0 ) + { + Width = GetSpriteWidth( Id, 0 ); + Height = GetSpriteHeight( Id, 0 ); + FrmCount = GetSpriteCount( Id ); + Ticks = GetSpriteTicks( Id ); + } + else + { + Width = 0; + Height = 0; + FrmCount = 0; + Ticks = 0; + } + } + + uint Id; + int Frame = -1; + int Layout = IMAGE_LAYOUT_NONE; + int Width; + int Height; + uint FrmCount; + uint Ticks; + bool AnimPlay; + bool AnimLoop; + bool AnimReverse; + uint AnimStartTick; + bool Hidden; + uint LoadedNameHash; +} diff --git a/SDK/Modules/Core/Time.fos b/SDK/Modules/Core/Time.fos new file mode 100644 index 0000000000..fb9e3f3e22 --- /dev/null +++ b/SDK/Modules/Core/Time.fos @@ -0,0 +1,177 @@ +// FOS Server Client Sort -5 +// Some stuff for work with time. + +// GetNearFullSecond +// Result is greather than __FullSecond at least on one. + +// For client: +// GetTimeString +// Tags format: +// %YEAR% - year, +// %MONTH% - month, +// %DAY% - day, +// %DOW% - day of week, +// %HOUR% - hour, +// %MINUTE% - minute; +// %SECOND% - second; +// To show names of values add "-STR" to format tag (%MONTH% -> %MONTH-STR%), supported by month and day of week. +// Example: GetTimeString("%HOUR%:%MINUTE% %DAY% (%DOW-STR%) %MONTH-STR% %YEAR%",fullSecond) -> "14:05 23 (Sunday) November 2299"/"14:05 23 (Воскресенье) Ноябрь 2299". + +/*EXPORT*/ uint RealMs( uint value ) { return value * Globals.TimeMultiplier / 1000; } +/*EXPORT*/ uint RealSecond( uint value ) { return value * Globals.TimeMultiplier; } +/*EXPORT*/ uint RealMinute( uint value ) { return value * Globals.TimeMultiplier * 60; } +/*EXPORT*/ uint RealHour( uint value ) { return value * Globals.TimeMultiplier * 3600; } +/*EXPORT*/ uint RealDay( uint value ) { return value * Globals.TimeMultiplier * 86400; } +/*EXPORT*/ uint RealMonth( uint value ) { return value * Globals.TimeMultiplier * 2592000; } +/*EXPORT*/ uint RealYear( uint value ) { return value * Globals.TimeMultiplier * 31536000; } + +#define IS_MORNING # (hour) ( ( hour ) >= 7 && ( hour ) <= 11 ) // 5 hours +#define IS_AFTERNOON # (hour) ( ( hour ) >= 12 && ( hour ) <= 21 ) // 10 hours +#define IS_NIGHT # (hour) ( ( hour ) >= 22 || ( hour ) <= 6 ) // 9 hours + +#define SECOND_TICKS # (x) ( ( x ) * 1000 ) +#define MINUTE_TICKS # (x) ( ( x ) * 60000 ) +#define HOUR_TICKS # (x) ( ( x ) * 3600000 ) +#define DAY_TICKS # (x) ( ( x ) * 86400000 ) + +#define GAME_SECOND_TO_TICK # (x) ( uint( x ) * 1000 / Globals.TimeMultiplier ) +#define GAME_MINUTE_TO_TICK # (x) ( uint( x ) * 60 * 1000 / Globals.TimeMultiplier ) +#define GAME_HOUR_TO_TICK # (x) ( uint( x ) * 3600 / Globals.TimeMultiplier * 1000 ) +#define GAME_DAY_TO_TICK # (x) ( uint( x ) * 86400 / Globals.TimeMultiplier * 1000 ) +#define GAME_MONTH_TO_TICK # (x) ( uint( x ) * 2592000 / Globals.TimeMultiplier * 1000 ) +#define GAME_YEAR_TO_TICK # (x) ( uint( x ) * 31536000 / Globals.TimeMultiplier * 1000 ) + +#define STR_MONTH # (m) ( 20 + ( m ) ) +#define STR_DAY_OF_WEEK # (dow) ( 33 + ( dow ) ) + +/*EXPORT*/ uint GetNearFullSecond( uint16 year, uint16 month, uint16 day, uint16 hour, uint16 minute, uint16 second ) +{ + int jump = 0; // 1 - years, 2 - months, 3 - days + if( year == 0 ) + { + year = Globals.Year; + jump = 1; + } + if( month == 0 ) + { + month = Globals.Month; + jump = 2; + } + if( day == 0 ) + { + day = Globals.Day; + jump = 3; + } + + uint fullSecond = GetFullSecond( year, month, day, hour, minute, second ); + while( fullSecond <= __FullSecond ) + { + switch( jump ) + { + case 0: + return __FullSecond + 1; // Time expired, call faster + case 1: + year++; + break; + case 2: + month++; + if( month > 12 ) + { + month = 1; + year++; + } + break; + case 3: + day++; + if( day > 28 && day > GetDaysInMonth( year, month ) ) + { + day = 1; + month++; + if( month > 12 ) + { + month = 1; + year++; + } + } + break; + default: + break; + } + + fullSecond = GetFullSecond( year, month, day, hour, minute, second ); + } + return fullSecond; +} + +/*EXPORT*/ uint GetDaysInMonth( uint16 year, uint16 month ) +{ + switch( month ) + { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: // 31 + return 31; + case 2: // 28-29 + if( year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 ) ) + return 29; + return 28; + default: // 30 + return 30; + } + return 0; +} + +#ifdef __CLIENT +/*EXPORT*/ string GetTimeString( const string format, uint fullSecond ) // Export +{ + uint16 year = 0, month = 0, day = 0, dayOfWeek = 0, hour = 0, minute = 0, second = 0; + GetGameTime( fullSecond, year, month, day, dayOfWeek, hour, minute, second ); + return GetTimeString( format, year, month, day, dayOfWeek, hour, minute, second ); +} + +/*EXPORT*/ string GetTimeString( const string format, int year, int month, int day, int dayOfWeek, int hour, int minute, int second ) // Export +{ + string result = format; + + if( year != -1 ) + result = ReplaceText( result, "%YEAR%", year ); + if( month != -1 ) + { + result = ReplaceText( result, "%MONTH%", month ); + result = ReplaceText( result, "%MONTH-STR%", GetMsgStr( TEXTMSG_GAME, STR_MONTH( month ) ) ); + } + if( day != -1 ) + result = ReplaceText( result, "%DAY%", day ); + if( dayOfWeek != -1 ) + { + result = ReplaceText( result, "%DOW%", dayOfWeek ); + result = ReplaceText( result, "%DOW-STR%", GetMsgStr( TEXTMSG_GAME, STR_MONTH( dayOfWeek ) ) ); + } + if( hour != -1 ) + result = ReplaceText( result, "%HOUR%", hour ); + if( minute != -1 ) + result = ReplaceText( result, "%MINUTE%", minute ); + if( second != -1 ) + result = ReplaceText( result, "%SECOND%", second ); + + return result; +} +#endif + +// Возвращает представление времени в виде строки в формате dd.mm.yy hh:mm. rifleman17 +/*EXPORT*/ string DateTimeToString( uint gameTime ) +{ + uint16 year = 0; + uint16 month = 0; + uint16 dayOfWeek = 0; + uint16 day = 0; + uint16 hour = 0; + uint16 minute = 0; + uint16 second = 0; + GetGameTime( gameTime, year, month, day, dayOfWeek, hour, minute, second ); + return "" + ( day > 9 ? ( "" + day ) : ( "0" + day ) ) + "." + ( month > 9 ? ( "" + month ) : ( "0" + month ) ) + "." + year + " " + ( hour > 9 ? ( "" + hour ) : ( "0" + hour ) ) + ":" + ( minute > 9 ? ( "" + minute ) : ( "0" + minute ) ); +} diff --git a/SDK/Modules/Core/Tween.fos b/SDK/Modules/Core/Tween.fos new file mode 100644 index 0000000000..f67c01930b --- /dev/null +++ b/SDK/Modules/Core/Tween.fos @@ -0,0 +1,65 @@ +// FOS Common + +class Tween +{ + void Init( int beginX, int beginY, int endX, int endY, uint pixelsPerSecond ) + { + x1 = beginX; + y1 = beginY; + x2 = endX; + y2 = endY; + x3 = beginX; + y3 = beginY; + end = false; + pps = pixelsPerSecond; + } + + void Move( bool toEnd ) + { + if( end == toEnd ) + return; + + x3 = CurX; + y3 = CurY; + end = toEnd; + startTick = GetTick(); + } + + void ForceMove( bool toEnd ) + { + end = toEnd; + x3 = ( end ? x2 : x1 ); + y3 = ( end ? y2 : y1 ); + } + + int get_CurX() + { + return x3 + Percent * ( ( end ? x2 : x1 ) - x3 ) / 100; + } + + int get_CurY() + { + return y3 + Percent * ( ( end ? y2 : y1 ) - y3 ) / 100; + } + + int get_Dist() + { + return int( sqrt( Math::Pow2( ( end ? x2 : x1 ) - x3 ) + Math::Pow2( ( end ? y2 : y1 ) - y3 ) ) ); + } + + int get_Percent() + { + int dist = Dist; + return dist > 0 ? Math::Min( ( GetTick() - startTick ) * pps / 1000 * 100 / Dist, 100 ) : 100; + } + + private bool end; + private int x1; + private int y1; + private int x2; + private int y2; + private int x3; + private int y3; + private uint pps; + private uint startTick; +} diff --git a/SDK/Modules/FormatSource.bat b/SDK/Modules/FormatSource.bat new file mode 100644 index 0000000000..c136946ea0 --- /dev/null +++ b/SDK/Modules/FormatSource.bat @@ -0,0 +1,7 @@ +@echo off + +FOR /F "tokens=*" %%G IN ('DIR /B /S .\*.fos') DO ( +echo Indenting file "%%G" +"..\Binaries\SourceTools\uncrustify.exe" -f "%%G" -c "..\Binaries\SourceTools\uncrustify.cfg" -o indentoutput.tmp +move /Y indentoutput.tmp "%%G" +) diff --git a/SDK/Modules/Scores/Scores.fos b/SDK/Modules/Scores/Scores.fos new file mode 100644 index 0000000000..d766da516a --- /dev/null +++ b/SDK/Modules/Scores/Scores.fos @@ -0,0 +1,62 @@ +// FOS Server + +#pragma property Global Public string[] BestScores +#pragma property Global PrivateServer uint[] BestScoreCritterIds +#pragma property Global PrivateServer int[] BestScoreValues +#pragma property Critter PrivateServer dict< uint, int > Scores + +/*EXPORT*/ void SetBestScore( uint score, string name ) +{ + SetBestSocresValue( score, 0, 0, name ); +} + +/*EXPORT*/ void AddScore( Critter cr, uint score, int value ) +{ + auto scores = dict< uint, int >( cr.Scores ); + int resultValue = scores.get( score, 0 ) + value; + scores[ score ] = resultValue; + cr.Scores = scores; + + ControlGlobalBufferSize( score + 1 ); + if( Globals.BestScoreCritterIds[ score ] == cr.Id ) + return; + if( Globals.BestScoreValues[ score ] >= resultValue ) + return; + + SetBestSocresValue( score, cr.Id, resultValue, cr.Name ); +} + +/*EXPORT*/ int GetScore( Critter cr, uint score ) +{ + return cr.Scores.get( score, 0 ); +} + +void SetBestSocresValue( uint score, uint crId, int value, string name ) +{ + ControlGlobalBufferSize( score + 1 ); + auto bestScoreCritterIds = array< uint >( Globals.BestScoreCritterIds ); + bestScoreCritterIds[ score ] = crId; + Globals.BestScoreCritterIds = bestScoreCritterIds; + auto bestScoreValues = array< int >( Globals.BestScoreValues ); + bestScoreValues[ score ] = value; + Globals.BestScoreValues = bestScoreValues; + auto bestScores = array< string >( Globals.BestScores ); + bestScores[ score ] = name; + Globals.BestScores = bestScores; +} + +void ControlGlobalBufferSize( uint size ) +{ + auto bestScores = array< string >( Globals.BestScores ); + if( bestScores.length() < size ) + { + auto bestScoreCritterIds = array< uint >( Globals.BestScoreCritterIds ); + bestScoreCritterIds.resize( size ); + Globals.BestScoreCritterIds = bestScoreCritterIds; + auto bestScoreValues = array< int >( Globals.BestScoreValues ); + bestScoreValues.resize( size ); + Globals.BestScoreValues = bestScoreValues; + bestScores.resize( size ); + Globals.BestScores = bestScores; + } +} diff --git a/SDK/ReadMe.txt b/SDK/ReadMe.txt new file mode 100644 index 0000000000..a2aab42538 --- /dev/null +++ b/SDK/ReadMe.txt @@ -0,0 +1,6 @@ +Для работы с движком необходимо скопировать файл FOnline.cfg себе в проект и корректно выставить в нем настройки. + +Структура репозитория: +- Binaries - программы +- Documentation - различная документация +- Modules - базовые скрипты для работы с движком