mirgrated to the actual engine and new spritesheet
TODO: proper offsetting i dont feel like it right nowwwwwwwwwwwwwwwwwwwwwwwww
This commit is contained in:
+71
-27
@@ -2,33 +2,77 @@
|
||||
<letters fps="24">
|
||||
<bold spritesheet="menus/alphabet-bold">
|
||||
<!-- Bold Letters !-->
|
||||
<letter char="A" anim="A bold" />
|
||||
<letter char="B" anim="B bold" />
|
||||
<letter char="C" anim="C bold" />
|
||||
<letter char="D" anim="D bold" />
|
||||
<letter char="E" anim="E bold" />
|
||||
<letter char="F" anim="F bold" />
|
||||
<letter char="G" anim="G bold" />
|
||||
<letter char="H" anim="H bold" />
|
||||
<letter char="I" anim="I bold" />
|
||||
<letter char="J" anim="J bold" />
|
||||
<letter char="K" anim="K bold" />
|
||||
<letter char="L" anim="L bold" />
|
||||
<letter char="M" anim="M bold" />
|
||||
<letter char="N" anim="N bold" />
|
||||
<letter char="O" anim="O bold" />
|
||||
<letter char="P" anim="P bold" />
|
||||
<letter char="Q" anim="Q bold" />
|
||||
<letter char="R" anim="R bold" />
|
||||
<letter char="S" anim="S bold" />
|
||||
<letter char="T" anim="T bold" />
|
||||
<letter char="U" anim="U bold" />
|
||||
<letter char="V" anim="V bold" />
|
||||
<letter char="W" anim="W bold" />
|
||||
<letter char="X" anim="X bold" />
|
||||
<letter char="Y" anim="Y bold" />
|
||||
<letter char="Z" anim="Z bold" />
|
||||
<letter char=">" anim="> Bold" />
|
||||
<letter char="A" anim="character-a" />
|
||||
<letter char="B" anim="character-b" />
|
||||
<letter char="C" anim="character-c" />
|
||||
<letter char="D" anim="character-d" />
|
||||
<letter char="E" anim="character-e" />
|
||||
<letter char="F" anim="character-f" />
|
||||
<letter char="G" anim="character-g" />
|
||||
<letter char="H" anim="character-h" />
|
||||
<letter char="I" anim="character-i" />
|
||||
<letter char="J" anim="character-j" />
|
||||
<letter char="K" anim="character-k" />
|
||||
<letter char="L" anim="character-l" />
|
||||
<letter char="M" anim="character-m" />
|
||||
<letter char="N" anim="character-n" />
|
||||
<letter char="O" anim="character-o" />
|
||||
<letter char="P" anim="character-p" />
|
||||
<letter char="Q" anim="character-q" />
|
||||
<letter char="R" anim="character-r" />
|
||||
<letter char="S" anim="character-s" />
|
||||
<letter char="T" anim="character-t" />
|
||||
<letter char="U" anim="character-u" />
|
||||
<letter char="V" anim="character-v" />
|
||||
<letter char="W" anim="character-w" />
|
||||
<letter char="X" anim="character-x" />
|
||||
<letter char="Y" anim="character-y" />
|
||||
<letter char="Z" anim="character-z" />
|
||||
|
||||
<letter char="&" anim="character-ampersand" />
|
||||
<letter char="<" anim="character-anglebracket-left" />
|
||||
<letter char=">" anim="character-anglebracket-right" />
|
||||
<letter char="*" anim="character-asterisk" />
|
||||
<letter char="@" anim="character-at" />
|
||||
<letter char="\" anim="character-backslash" />
|
||||
<letter char="`" anim="character-backtick" />
|
||||
<letter char="^" anim="character-caret" />
|
||||
<letter char=":" anim="character-colon" />
|
||||
<letter char="," anim="character-comma" />
|
||||
<letter char="{" anim="character-curlybracket-left" />
|
||||
<letter char="}" anim="character-curlybracket-right" />
|
||||
<letter char="$" anim="character-dollar" />
|
||||
<letter char='"' anim="character-doublequote" />
|
||||
<letter char="=" anim="character-equal" />
|
||||
<letter char="!" anim="character-exclamationmark" />
|
||||
<letter char="-" anim="character-hyphen" />
|
||||
<letter char="%" anim="character-percent" />
|
||||
<letter char="." anim="character-period" />
|
||||
<letter char="+" anim="character-plus" />
|
||||
<letter char="#" anim="character-pound" />
|
||||
<letter char="?" anim="character-questionmark" />
|
||||
<letter char="(" anim="character-roundbracket-left" />
|
||||
<letter char=")" anim="character-roundbracket-right" />
|
||||
<letter char=";" anim="character-semicolon" />
|
||||
<letter char="'" anim="character-singlequote" />
|
||||
<letter char="/" anim="character-slash" />
|
||||
<letter char="[" anim="character-squarebracket-left" />
|
||||
<letter char="]" anim="character-squarebracket-right" />
|
||||
<letter char="~" anim="character-tilde" />
|
||||
<letter char="_" anim="character-underscore" />
|
||||
<letter char="|" anim="character-verticalbar" />
|
||||
<letter char="*" anim="character-asterisk" />
|
||||
|
||||
<letter char="0" anim="character-zero" />
|
||||
<letter char="1" anim="character-one" />
|
||||
<letter char="2" anim="character-two" />
|
||||
<letter char="3" anim="character-three" />
|
||||
<letter char="4" anim="character-four" />
|
||||
<letter char="5" anim="character-five" />
|
||||
<letter char="6" anim="character-six" />
|
||||
<letter char="7" anim="character-seven" />
|
||||
<letter char="8" anim="character-eight" />
|
||||
<letter char="9" anim="character-nine" />
|
||||
</bold>
|
||||
<normal spritesheet="menus/alphabet">
|
||||
<!-- Symbols !-->
|
||||
|
||||
@@ -1,6 +1,50 @@
|
||||
<!DOCTYPE codename-engine-alphabet-font>
|
||||
<alphabetFont fps="24" advance="50" lineGap="75" forceCasing="upper">
|
||||
<alphabetFont fps="24" advance="50" lineGap="75" forceCasing="lower">
|
||||
<spritesheet>menus/alphabet-bold</spritesheet>
|
||||
|
||||
<defaultAnim>LETTER bold</defaultAnim>
|
||||
<defaultAnim>character-LETTER0</defaultAnim>
|
||||
<anim char="&">character-ampersand</anim>
|
||||
<anim char="<">character-anglebracket-left</anim>
|
||||
<anim char=">">character-anglebracket-right</anim>
|
||||
<anim char="*">character-asterisk</anim>
|
||||
<anim char="@">character-at</anim>
|
||||
<anim char="\">character-backslash</anim>
|
||||
<anim char="`">character-backtick</anim>
|
||||
<anim char="^">character-caret</anim>
|
||||
<anim char=":">character-colon</anim>
|
||||
<anim char=",">character-comma</anim>
|
||||
<anim char="{">character-curlybracket-left</anim>
|
||||
<anim char="}">character-curlybracket-right</anim>
|
||||
<anim char="$">character-dollar</anim>
|
||||
<anim char='"'>character-doublequote</anim>
|
||||
<anim char="=">character-equal</anim>
|
||||
<anim char="!">character-exclamationmark</anim>
|
||||
<anim char="-">character-hyphen</anim>
|
||||
<anim char="%">character-percent</anim>
|
||||
<anim char=".">character-period</anim>
|
||||
<anim char="+">character-plus</anim>
|
||||
<anim char="#">character-pound</anim>
|
||||
<anim char="?">character-questionmark</anim>
|
||||
<anim char="(">character-roundbracket-left</anim>
|
||||
<anim char=")">character-roundbracket-right</anim>
|
||||
<anim char=";">character-semicolon</anim>
|
||||
<anim char="'">character-singlequote</anim>
|
||||
<anim char="/">character-slash</anim>
|
||||
<anim char="[">character-squarebracket-left</anim>
|
||||
<anim char="]">character-squarebracket-right</anim>
|
||||
<anim char="~">character-tilde</anim>
|
||||
<anim char="_">character-underscore</anim>
|
||||
<anim char="|">character-verticalbar</anim>
|
||||
<anim char="*">character-asterisk</anim>
|
||||
|
||||
<anim char="0">character-zero</anim>
|
||||
<anim char="1">character-one</anim>
|
||||
<anim char="2">character-two</anim>
|
||||
<anim char="3">character-three</anim>
|
||||
<anim char="4">character-four</anim>
|
||||
<anim char="5">character-five</anim>
|
||||
<anim char="6">character-six</anim>
|
||||
<anim char="7">character-seven</anim>
|
||||
<anim char="8">character-eight</anim>
|
||||
<anim char="9">character-nine</anim>
|
||||
</alphabetFont>
|
||||
@@ -12,7 +12,6 @@
|
||||
<anim char="q" y="-15">q lowercase</anim>
|
||||
<anim char="y" y="-15">y lowercase</anim>
|
||||
<anim char="$">dollarsign</anim>
|
||||
<anim char="#">hashtag</anim>
|
||||
<anim char="&">amp</anim>
|
||||
<anim char="→" y="9">right arrow</anim>
|
||||
<anim char="←" y="9">left arrow</anim>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 179 KiB |
@@ -1,153 +1,514 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextureAtlas imagePath="Alphabet_Bold.png">
|
||||
<!-- Created with Adobe Animate version 23.0.0.407 -->
|
||||
<!-- http://www.adobe.com/products/animate.html -->
|
||||
<SubTexture name="0 bold0000" x="0" y="0" width="56" height="74"/>
|
||||
<SubTexture name="0 bold0001" x="0" y="0" width="56" height="74"/>
|
||||
<SubTexture name="0 bold0002" x="56" y="0" width="56" height="74"/>
|
||||
<SubTexture name="0 bold0003" x="56" y="0" width="56" height="74"/>
|
||||
<SubTexture name="1 bold0000" x="112" y="0" width="52" height="70"/>
|
||||
<SubTexture name="1 bold0001" x="112" y="0" width="52" height="70"/>
|
||||
<SubTexture name="1 bold0002" x="164" y="0" width="52" height="70"/>
|
||||
<SubTexture name="1 bold0003" x="164" y="0" width="52" height="70"/>
|
||||
<SubTexture name="2 bold0000" x="216" y="0" width="59" height="73"/>
|
||||
<SubTexture name="2 bold0001" x="216" y="0" width="59" height="73"/>
|
||||
<SubTexture name="2 bold0002" x="275" y="0" width="59" height="73"/>
|
||||
<SubTexture name="2 bold0003" x="275" y="0" width="59" height="73"/>
|
||||
<SubTexture name="3 bold0000" x="334" y="0" width="57" height="72"/>
|
||||
<SubTexture name="3 bold0001" x="334" y="0" width="57" height="72"/>
|
||||
<SubTexture name="3 bold0002" x="391" y="0" width="56" height="72" frameX="0" frameY="0" frameWidth="57" frameHeight="72"/>
|
||||
<SubTexture name="3 bold0003" x="391" y="0" width="56" height="72" frameX="0" frameY="0" frameWidth="57" frameHeight="72"/>
|
||||
<SubTexture name="4 bold0000" x="447" y="0" width="58" height="69"/>
|
||||
<SubTexture name="4 bold0001" x="447" y="0" width="58" height="69"/>
|
||||
<SubTexture name="4 bold0002" x="505" y="0" width="58" height="69"/>
|
||||
<SubTexture name="4 bold0003" x="505" y="0" width="58" height="69"/>
|
||||
<SubTexture name="5 bold0000" x="563" y="0" width="56" height="71" frameX="0" frameY="0" frameWidth="56" frameHeight="72"/>
|
||||
<SubTexture name="5 bold0001" x="563" y="0" width="56" height="71" frameX="0" frameY="0" frameWidth="56" frameHeight="72"/>
|
||||
<SubTexture name="5 bold0002" x="619" y="0" width="56" height="72"/>
|
||||
<SubTexture name="5 bold0003" x="619" y="0" width="56" height="72"/>
|
||||
<SubTexture name="6 bold0000" x="675" y="0" width="53" height="68"/>
|
||||
<SubTexture name="6 bold0001" x="675" y="0" width="53" height="68"/>
|
||||
<SubTexture name="6 bold0002" x="728" y="0" width="53" height="68"/>
|
||||
<SubTexture name="6 bold0003" x="728" y="0" width="53" height="68"/>
|
||||
<SubTexture name="7 bold0000" x="781" y="0" width="54" height="73"/>
|
||||
<SubTexture name="7 bold0001" x="781" y="0" width="54" height="73"/>
|
||||
<SubTexture name="7 bold0002" x="835" y="0" width="54" height="73"/>
|
||||
<SubTexture name="7 bold0003" x="835" y="0" width="54" height="73"/>
|
||||
<SubTexture name="8 bold0000" x="889" y="0" width="54" height="70"/>
|
||||
<SubTexture name="8 bold0001" x="889" y="0" width="54" height="70"/>
|
||||
<SubTexture name="8 bold0002" x="943" y="0" width="54" height="70"/>
|
||||
<SubTexture name="8 bold0003" x="943" y="0" width="54" height="70"/>
|
||||
<SubTexture name="9 bold0000" x="0" y="74" width="53" height="68"/>
|
||||
<SubTexture name="9 bold0001" x="0" y="74" width="53" height="68"/>
|
||||
<SubTexture name="9 bold0002" x="53" y="74" width="53" height="67" frameX="0" frameY="0" frameWidth="53" frameHeight="68"/>
|
||||
<SubTexture name="9 bold0003" x="53" y="74" width="53" height="67" frameX="0" frameY="0" frameWidth="53" frameHeight="68"/>
|
||||
<SubTexture name="> Bold0000" x="106" y="74" width="51" height="73" frameX="0" frameY="0" frameWidth="52" frameHeight="73"/>
|
||||
<SubTexture name="> Bold0001" x="106" y="74" width="51" height="73" frameX="0" frameY="0" frameWidth="52" frameHeight="73"/>
|
||||
<SubTexture name="> Bold0002" x="157" y="74" width="52" height="73"/>
|
||||
<SubTexture name="> Bold0003" x="157" y="74" width="52" height="73"/>
|
||||
<SubTexture name="A bold0000" x="209" y="74" width="54" height="67"/>
|
||||
<SubTexture name="A bold0001" x="209" y="74" width="54" height="67"/>
|
||||
<SubTexture name="A bold0002" x="263" y="74" width="54" height="67"/>
|
||||
<SubTexture name="A bold0003" x="263" y="74" width="54" height="67"/>
|
||||
<SubTexture name="B bold0000" x="317" y="74" width="46" height="70"/>
|
||||
<SubTexture name="B bold0001" x="317" y="74" width="46" height="70"/>
|
||||
<SubTexture name="B bold0002" x="363" y="74" width="46" height="70"/>
|
||||
<SubTexture name="B bold0003" x="363" y="74" width="46" height="70"/>
|
||||
<SubTexture name="C bold0000" x="409" y="74" width="55" height="66"/>
|
||||
<SubTexture name="C bold0001" x="409" y="74" width="55" height="66"/>
|
||||
<SubTexture name="C bold0002" x="464" y="74" width="54" height="65" frameX="0" frameY="-1" frameWidth="55" frameHeight="66"/>
|
||||
<SubTexture name="C bold0003" x="464" y="74" width="54" height="65" frameX="0" frameY="-1" frameWidth="55" frameHeight="66"/>
|
||||
<SubTexture name="D bold0000" x="518" y="74" width="53" height="67"/>
|
||||
<SubTexture name="D bold0001" x="518" y="74" width="53" height="67"/>
|
||||
<SubTexture name="D bold0002" x="571" y="74" width="53" height="67"/>
|
||||
<SubTexture name="D bold0003" x="571" y="74" width="53" height="67"/>
|
||||
<SubTexture name="E bold0000" x="624" y="74" width="43" height="66"/>
|
||||
<SubTexture name="E bold0001" x="624" y="74" width="43" height="66"/>
|
||||
<SubTexture name="E bold0002" x="667" y="74" width="43" height="66"/>
|
||||
<SubTexture name="E bold0003" x="667" y="74" width="43" height="66"/>
|
||||
<SubTexture name="F bold0000" x="710" y="74" width="43" height="67"/>
|
||||
<SubTexture name="F bold0001" x="710" y="74" width="43" height="67"/>
|
||||
<SubTexture name="F bold0002" x="753" y="74" width="43" height="67"/>
|
||||
<SubTexture name="F bold0003" x="753" y="74" width="43" height="67"/>
|
||||
<SubTexture name="G bold0000" x="796" y="74" width="54" height="70"/>
|
||||
<SubTexture name="G bold0001" x="796" y="74" width="54" height="70"/>
|
||||
<SubTexture name="G bold0002" x="850" y="74" width="54" height="70"/>
|
||||
<SubTexture name="G bold0003" x="850" y="74" width="54" height="70"/>
|
||||
<SubTexture name="H bold0000" x="904" y="74" width="45" height="66"/>
|
||||
<SubTexture name="H bold0001" x="904" y="74" width="45" height="66"/>
|
||||
<SubTexture name="H bold0002" x="949" y="74" width="44" height="66" frameX="0" frameY="0" frameWidth="45" frameHeight="66"/>
|
||||
<SubTexture name="H bold0003" x="949" y="74" width="44" height="66" frameX="0" frameY="0" frameWidth="45" frameHeight="66"/>
|
||||
<SubTexture name="I bold0000" x="0" y="147" width="43" height="64"/>
|
||||
<SubTexture name="I bold0001" x="0" y="147" width="43" height="64"/>
|
||||
<SubTexture name="I bold0002" x="43" y="147" width="43" height="64"/>
|
||||
<SubTexture name="I bold0003" x="43" y="147" width="43" height="64"/>
|
||||
<SubTexture name="J bold0000" x="86" y="147" width="54" height="70"/>
|
||||
<SubTexture name="J bold0001" x="86" y="147" width="54" height="70"/>
|
||||
<SubTexture name="J bold0002" x="140" y="147" width="54" height="70"/>
|
||||
<SubTexture name="J bold0003" x="140" y="147" width="54" height="70"/>
|
||||
<SubTexture name="K bold0000" x="194" y="147" width="44" height="69"/>
|
||||
<SubTexture name="K bold0001" x="194" y="147" width="44" height="69"/>
|
||||
<SubTexture name="K bold0002" x="238" y="147" width="44" height="69"/>
|
||||
<SubTexture name="K bold0003" x="238" y="147" width="44" height="69"/>
|
||||
<SubTexture name="L bold0000" x="282" y="147" width="41" height="66"/>
|
||||
<SubTexture name="L bold0001" x="282" y="147" width="41" height="66"/>
|
||||
<SubTexture name="L bold0002" x="323" y="147" width="41" height="66"/>
|
||||
<SubTexture name="L bold0003" x="323" y="147" width="41" height="66"/>
|
||||
<SubTexture name="M bold0000" x="364" y="147" width="56" height="63"/>
|
||||
<SubTexture name="M bold0001" x="364" y="147" width="56" height="63"/>
|
||||
<SubTexture name="M bold0002" x="420" y="147" width="56" height="63"/>
|
||||
<SubTexture name="M bold0003" x="420" y="147" width="56" height="63"/>
|
||||
<SubTexture name="N bold0000" x="476" y="147" width="45" height="65"/>
|
||||
<SubTexture name="N bold0001" x="476" y="147" width="45" height="65"/>
|
||||
<SubTexture name="N bold0002" x="521" y="147" width="45" height="65"/>
|
||||
<SubTexture name="N bold0003" x="521" y="147" width="45" height="65"/>
|
||||
<SubTexture name="O bold0000" x="566" y="147" width="50" height="69"/>
|
||||
<SubTexture name="O bold0001" x="566" y="147" width="50" height="69"/>
|
||||
<SubTexture name="O bold0002" x="616" y="147" width="50" height="69"/>
|
||||
<SubTexture name="O bold0003" x="616" y="147" width="50" height="69"/>
|
||||
<SubTexture name="P bold0000" x="666" y="147" width="46" height="70"/>
|
||||
<SubTexture name="P bold0001" x="666" y="147" width="46" height="70"/>
|
||||
<SubTexture name="P bold0002" x="712" y="147" width="46" height="70"/>
|
||||
<SubTexture name="P bold0003" x="712" y="147" width="46" height="70"/>
|
||||
<SubTexture name="Q bold0000" x="758" y="147" width="52" height="67"/>
|
||||
<SubTexture name="Q bold0001" x="758" y="147" width="52" height="67"/>
|
||||
<SubTexture name="Q bold0002" x="810" y="147" width="52" height="67"/>
|
||||
<SubTexture name="Q bold0003" x="810" y="147" width="52" height="67"/>
|
||||
<SubTexture name="R bold0000" x="862" y="147" width="47" height="66"/>
|
||||
<SubTexture name="R bold0001" x="862" y="147" width="47" height="66"/>
|
||||
<SubTexture name="R bold0002" x="909" y="147" width="47" height="66"/>
|
||||
<SubTexture name="R bold0003" x="909" y="147" width="47" height="66"/>
|
||||
<SubTexture name="S bold0000" x="956" y="147" width="49" height="66"/>
|
||||
<SubTexture name="S bold0001" x="956" y="147" width="49" height="66"/>
|
||||
<SubTexture name="S bold0002" x="0" y="217" width="49" height="66"/>
|
||||
<SubTexture name="S bold0003" x="0" y="217" width="49" height="66"/>
|
||||
<SubTexture name="T bold0000" x="49" y="217" width="44" height="64"/>
|
||||
<SubTexture name="T bold0001" x="49" y="217" width="44" height="64"/>
|
||||
<SubTexture name="T bold0002" x="93" y="217" width="44" height="64"/>
|
||||
<SubTexture name="T bold0003" x="93" y="217" width="44" height="64"/>
|
||||
<SubTexture name="U bold0000" x="137" y="217" width="44" height="59"/>
|
||||
<SubTexture name="U bold0001" x="137" y="217" width="44" height="59"/>
|
||||
<SubTexture name="U bold0002" x="181" y="217" width="44" height="59"/>
|
||||
<SubTexture name="U bold0003" x="181" y="217" width="44" height="59"/>
|
||||
<SubTexture name="V bold0000" x="225" y="217" width="54" height="66"/>
|
||||
<SubTexture name="V bold0001" x="225" y="217" width="54" height="66"/>
|
||||
<SubTexture name="V bold0002" x="279" y="217" width="54" height="66"/>
|
||||
<SubTexture name="V bold0003" x="279" y="217" width="54" height="66"/>
|
||||
<SubTexture name="W bold0000" x="333" y="217" width="58" height="63"/>
|
||||
<SubTexture name="W bold0001" x="333" y="217" width="58" height="63"/>
|
||||
<SubTexture name="W bold0002" x="391" y="217" width="58" height="63"/>
|
||||
<SubTexture name="W bold0003" x="391" y="217" width="58" height="63"/>
|
||||
<SubTexture name="X bold0000" x="449" y="217" width="55" height="67"/>
|
||||
<SubTexture name="X bold0001" x="449" y="217" width="55" height="67"/>
|
||||
<SubTexture name="X bold0002" x="504" y="217" width="55" height="67"/>
|
||||
<SubTexture name="X bold0003" x="504" y="217" width="55" height="67"/>
|
||||
<SubTexture name="Y bold0000" x="559" y="217" width="54" height="69"/>
|
||||
<SubTexture name="Y bold0001" x="559" y="217" width="54" height="69"/>
|
||||
<SubTexture name="Y bold0002" x="613" y="217" width="54" height="69"/>
|
||||
<SubTexture name="Y bold0003" x="613" y="217" width="54" height="69"/>
|
||||
<SubTexture name="Z bold0000" x="667" y="217" width="52" height="65"/>
|
||||
<SubTexture name="Z bold0001" x="667" y="217" width="52" height="65"/>
|
||||
<SubTexture name="Z bold0002" x="719" y="217" width="52" height="65"/>
|
||||
<SubTexture name="Z bold0003" x="719" y="217" width="52" height="65"/>
|
||||
</TextureAtlas>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Created with Funkin Packer v0.1.3 https://neeeoo.github.io/funkin-packer/
|
||||
-->
|
||||
<TextureAtlas imagePath="alphabet-bold.png" width="768" height="805">
|
||||
<SubTexture name="character-a0000" x="49" y="364" width="54" height="67" frameX="-0" frameY="-0" frameWidth="54" frameHeight="67"/>
|
||||
<SubTexture name="character-a0001" x="49" y="364" width="54" height="67" frameX="-0" frameY="-0" frameWidth="54" frameHeight="67"/>
|
||||
<SubTexture name="character-a0002" x="232" y="359" width="54" height="67" frameX="-0" frameY="-0" frameWidth="54" frameHeight="67"/>
|
||||
<SubTexture name="character-a0003" x="232" y="359" width="54" height="67" frameX="-0" frameY="-0" frameWidth="54" frameHeight="67"/>
|
||||
<SubTexture name="character-ampersand0000" x="2" y="216" width="58" height="68" frameX="-0" frameY="-0" frameWidth="59" frameHeight="68"/>
|
||||
<SubTexture name="character-ampersand0001" x="2" y="216" width="58" height="68" frameX="-0" frameY="-0" frameWidth="59" frameHeight="68"/>
|
||||
<SubTexture name="character-ampersand0002" x="123" y="213" width="58" height="68" frameX="-0" frameY="-0" frameWidth="59" frameHeight="68"/>
|
||||
<SubTexture name="character-ampersand0003" x="123" y="213" width="58" height="68" frameX="-0" frameY="-0" frameWidth="59" frameHeight="68"/>
|
||||
<SubTexture name="character-anglebracket-left0000" x="610" y="209" width="42" height="68" frameX="-0" frameY="-0" frameWidth="42" frameHeight="68"/>
|
||||
<SubTexture name="character-anglebracket-left0001" x="610" y="209" width="42" height="68" frameX="-0" frameY="-0" frameWidth="42" frameHeight="68"/>
|
||||
<SubTexture name="character-anglebracket-left0002" x="614" y="70" width="42" height="68" frameX="-0" frameY="-0" frameWidth="42" frameHeight="68"/>
|
||||
<SubTexture name="character-anglebracket-left0003" x="614" y="70" width="42" height="68" frameX="-0" frameY="-0" frameWidth="42" frameHeight="68"/>
|
||||
<SubTexture name="character-anglebracket-right0000" x="423" y="570" width="44" height="69" frameX="-0" frameY="-0" frameWidth="45" frameHeight="69"/>
|
||||
<SubTexture name="character-anglebracket-right0001" x="423" y="570" width="44" height="69" frameX="-0" frameY="-0" frameWidth="45" frameHeight="69"/>
|
||||
<SubTexture name="character-anglebracket-right0002" x="568" y="71" width="44" height="69" frameX="-0" frameY="-0" frameWidth="45" frameHeight="69"/>
|
||||
<SubTexture name="character-anglebracket-right0003" x="568" y="71" width="44" height="69" frameX="-0" frameY="-0" frameWidth="45" frameHeight="69"/>
|
||||
<SubTexture name="character-ash0000" x="82" y="2" width="75" height="68" frameX="-0" frameY="-0" frameWidth="75" frameHeight="68"/>
|
||||
<SubTexture name="character-ash0001" x="82" y="2" width="75" height="68" frameX="-0" frameY="-0" frameWidth="75" frameHeight="68"/>
|
||||
<SubTexture name="character-ash0002" x="82" y="72" width="75" height="68" frameX="-0" frameY="-0" frameWidth="75" frameHeight="68"/>
|
||||
<SubTexture name="character-ash0003" x="82" y="72" width="75" height="68" frameX="-0" frameY="-0" frameWidth="75" frameHeight="68"/>
|
||||
<SubTexture name="character-asterisk0000" x="504" y="365" width="40" height="33" frameX="-0" frameY="-0" frameWidth="40" frameHeight="33"/>
|
||||
<SubTexture name="character-asterisk0001" x="504" y="365" width="40" height="33" frameX="-0" frameY="-0" frameWidth="40" frameHeight="33"/>
|
||||
<SubTexture name="character-asterisk0002" x="722" y="413" width="40" height="33" frameX="-0" frameY="-0" frameWidth="40" frameHeight="33"/>
|
||||
<SubTexture name="character-asterisk0003" x="722" y="413" width="40" height="33" frameX="-0" frameY="-0" frameWidth="40" frameHeight="33"/>
|
||||
<SubTexture name="character-at0000" x="82" y="142" width="66" height="68" frameX="-0" frameY="-0" frameWidth="66" frameHeight="68"/>
|
||||
<SubTexture name="character-at0001" x="82" y="142" width="66" height="68" frameX="-0" frameY="-0" frameWidth="66" frameHeight="68"/>
|
||||
<SubTexture name="character-at0002" x="2" y="146" width="66" height="68" frameX="-0" frameY="-0" frameWidth="66" frameHeight="68"/>
|
||||
<SubTexture name="character-at0003" x="2" y="146" width="66" height="68" frameX="-0" frameY="-0" frameWidth="66" frameHeight="68"/>
|
||||
<SubTexture name="character-b0000" x="551" y="365" width="46" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-b0001" x="551" y="365" width="46" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-b0002" x="213" y="563" width="45" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-b0003" x="213" y="563" width="45" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-backslash0000" x="463" y="227" width="51" height="67" frameX="-0" frameY="-0" frameWidth="51" frameHeight="67"/>
|
||||
<SubTexture name="character-backslash0001" x="463" y="227" width="51" height="67" frameX="-0" frameY="-0" frameWidth="51" frameHeight="67"/>
|
||||
<SubTexture name="character-backslash0002" x="504" y="296" width="51" height="67" frameX="-0" frameY="-0" frameWidth="51" frameHeight="67"/>
|
||||
<SubTexture name="character-backslash0003" x="504" y="296" width="51" height="67" frameX="-0" frameY="-0" frameWidth="51" frameHeight="67"/>
|
||||
<SubTexture name="character-backtick0000" x="731" y="655" width="33" height="31" frameX="-0" frameY="-0" frameWidth="33" frameHeight="31"/>
|
||||
<SubTexture name="character-backtick0001" x="731" y="655" width="33" height="31" frameX="-0" frameY="-0" frameWidth="33" frameHeight="31"/>
|
||||
<SubTexture name="character-backtick0002" x="568" y="713" width="33" height="31" frameX="-0" frameY="-0" frameWidth="33" frameHeight="31"/>
|
||||
<SubTexture name="character-backtick0003" x="568" y="713" width="33" height="31" frameX="-0" frameY="-0" frameWidth="33" frameHeight="31"/>
|
||||
<SubTexture name="character-c0000" x="374" y="2" width="54" height="66" frameX="-0" frameY="-0" frameWidth="55" frameHeight="66"/>
|
||||
<SubTexture name="character-c0001" x="374" y="2" width="54" height="66" frameX="-0" frameY="-0" frameWidth="55" frameHeight="66"/>
|
||||
<SubTexture name="character-c0002" x="407" y="270" width="54" height="64" frameX="-0" frameY="-1" frameWidth="55" frameHeight="66"/>
|
||||
<SubTexture name="character-c0003" x="407" y="270" width="54" height="64" frameX="-0" frameY="-1" frameWidth="55" frameHeight="66"/>
|
||||
<SubTexture name="character-caret0000" x="694" y="74" width="46" height="34" frameX="-0" frameY="-0" frameWidth="46" frameHeight="34"/>
|
||||
<SubTexture name="character-caret0001" x="694" y="74" width="46" height="34" frameX="-0" frameY="-0" frameWidth="46" frameHeight="34"/>
|
||||
<SubTexture name="character-caret0002" x="687" y="480" width="46" height="34" frameX="-0" frameY="-0" frameWidth="46" frameHeight="34"/>
|
||||
<SubTexture name="character-caret0003" x="687" y="480" width="46" height="34" frameX="-0" frameY="-0" frameWidth="46" frameHeight="34"/>
|
||||
<SubTexture name="character-colon0000" x="744" y="301" width="22" height="49" frameX="-0" frameY="-0" frameWidth="22" frameHeight="49"/>
|
||||
<SubTexture name="character-colon0001" x="744" y="301" width="22" height="49" frameX="-0" frameY="-0" frameWidth="22" frameHeight="49"/>
|
||||
<SubTexture name="character-colon0002" x="744" y="352" width="22" height="49" frameX="-0" frameY="-0" frameWidth="22" frameHeight="49"/>
|
||||
<SubTexture name="character-colon0003" x="744" y="352" width="22" height="49" frameX="-0" frameY="-0" frameWidth="22" frameHeight="49"/>
|
||||
<SubTexture name="character-comma0000" x="456" y="756" width="25" height="32" frameX="-0" frameY="-0" frameWidth="25" frameHeight="32"/>
|
||||
<SubTexture name="character-comma0001" x="456" y="756" width="25" height="32" frameX="-0" frameY="-0" frameWidth="25" frameHeight="32"/>
|
||||
<SubTexture name="character-comma0002" x="385" y="764" width="25" height="32" frameX="-0" frameY="-0" frameWidth="25" frameHeight="32"/>
|
||||
<SubTexture name="character-comma0003" x="385" y="764" width="25" height="32" frameX="-0" frameY="-0" frameWidth="25" frameHeight="32"/>
|
||||
<SubTexture name="character-curlybracket-left0000" x="548" y="548" width="46" height="68" frameX="-0" frameY="-0" frameWidth="46" frameHeight="68"/>
|
||||
<SubTexture name="character-curlybracket-left0001" x="548" y="548" width="46" height="68" frameX="-0" frameY="-0" frameWidth="46" frameHeight="68"/>
|
||||
<SubTexture name="character-curlybracket-left0002" x="493" y="550" width="46" height="68" frameX="-0" frameY="-0" frameWidth="46" frameHeight="68"/>
|
||||
<SubTexture name="character-curlybracket-left0003" x="493" y="550" width="46" height="68" frameX="-0" frameY="-0" frameWidth="46" frameHeight="68"/>
|
||||
<SubTexture name="character-curlybracket-right0000" x="50" y="572" width="47" height="67" frameX="-0" frameY="-0" frameWidth="47" frameHeight="67"/>
|
||||
<SubTexture name="character-curlybracket-right0001" x="50" y="572" width="47" height="67" frameX="-0" frameY="-0" frameWidth="47" frameHeight="67"/>
|
||||
<SubTexture name="character-curlybracket-right0002" x="521" y="2" width="47" height="67" frameX="-0" frameY="-0" frameWidth="47" frameHeight="67"/>
|
||||
<SubTexture name="character-curlybracket-right0003" x="521" y="2" width="47" height="67" frameX="-0" frameY="-0" frameWidth="47" frameHeight="67"/>
|
||||
<SubTexture name="character-d0000" x="444" y="430" width="53" height="66" frameX="-0" frameY="-0" frameWidth="53" frameHeight="67"/>
|
||||
<SubTexture name="character-d0001" x="444" y="430" width="53" height="66" frameX="-0" frameY="-0" frameWidth="53" frameHeight="67"/>
|
||||
<SubTexture name="character-d0002" x="49" y="433" width="53" height="67" frameX="-0" frameY="-0" frameWidth="53" frameHeight="67"/>
|
||||
<SubTexture name="character-d0003" x="49" y="433" width="53" height="67" frameX="-0" frameY="-0" frameWidth="53" frameHeight="67"/>
|
||||
<SubTexture name="character-dollar0000" x="499" y="478" width="47" height="70" frameX="-0" frameY="-0" frameWidth="47" frameHeight="70"/>
|
||||
<SubTexture name="character-dollar0001" x="499" y="478" width="47" height="70" frameX="-0" frameY="-0" frameWidth="47" frameHeight="70"/>
|
||||
<SubTexture name="character-dollar0002" x="444" y="498" width="47" height="70" frameX="-0" frameY="-0" frameWidth="47" frameHeight="70"/>
|
||||
<SubTexture name="character-dollar0003" x="444" y="498" width="47" height="70" frameX="-0" frameY="-0" frameWidth="47" frameHeight="70"/>
|
||||
<SubTexture name="character-doublequote0000" x="687" y="581" width="47" height="32" frameX="-0" frameY="-0" frameWidth="47" frameHeight="32"/>
|
||||
<SubTexture name="character-doublequote0001" x="687" y="581" width="47" height="32" frameX="-0" frameY="-0" frameWidth="47" frameHeight="32"/>
|
||||
<SubTexture name="character-doublequote0002" x="86" y="707" width="47" height="32" frameX="-0" frameY="-0" frameWidth="47" frameHeight="32"/>
|
||||
<SubTexture name="character-doublequote0003" x="86" y="707" width="47" height="32" frameX="-0" frameY="-0" frameWidth="47" frameHeight="32"/>
|
||||
<SubTexture name="character-doublequote-alt0000" x="415" y="227" width="39" height="41" frameX="-1" frameY="-0" frameWidth="40" frameHeight="41"/>
|
||||
<SubTexture name="character-doublequote-alt0001" x="415" y="227" width="39" height="41" frameX="-1" frameY="-0" frameWidth="40" frameHeight="41"/>
|
||||
<SubTexture name="character-doublequote-alt0002" x="598" y="505" width="40" height="41" frameX="-0" frameY="-0" frameWidth="40" frameHeight="41"/>
|
||||
<SubTexture name="character-doublequote-alt0003" x="598" y="505" width="40" height="41" frameX="-0" frameY="-0" frameWidth="40" frameHeight="41"/>
|
||||
<SubTexture name="character-e0000" x="642" y="505" width="43" height="65" frameX="-0" frameY="-0" frameWidth="43" frameHeight="66"/>
|
||||
<SubTexture name="character-e0001" x="642" y="505" width="43" height="65" frameX="-0" frameY="-0" frameWidth="43" frameHeight="66"/>
|
||||
<SubTexture name="character-e0002" x="642" y="572" width="43" height="65" frameX="-0" frameY="-0" frameWidth="43" frameHeight="66"/>
|
||||
<SubTexture name="character-e0003" x="642" y="572" width="43" height="65" frameX="-0" frameY="-0" frameWidth="43" frameHeight="66"/>
|
||||
<SubTexture name="character-eight0000" x="380" y="501" width="49" height="67" frameX="-0" frameY="-0" frameWidth="49" frameHeight="67"/>
|
||||
<SubTexture name="character-eight0001" x="380" y="501" width="49" height="67" frameX="-0" frameY="-0" frameWidth="49" frameHeight="67"/>
|
||||
<SubTexture name="character-eight0002" x="2" y="502" width="49" height="67" frameX="-0" frameY="-0" frameWidth="49" frameHeight="67"/>
|
||||
<SubTexture name="character-eight0003" x="2" y="502" width="49" height="67" frameX="-0" frameY="-0" frameWidth="49" frameHeight="67"/>
|
||||
<SubTexture name="character-equal0000" x="362" y="156" width="48" height="34" frameX="-0" frameY="-0" frameWidth="48" frameHeight="34"/>
|
||||
<SubTexture name="character-equal0001" x="362" y="156" width="48" height="34" frameX="-0" frameY="-0" frameWidth="48" frameHeight="34"/>
|
||||
<SubTexture name="character-equal0002" x="694" y="38" width="48" height="34" frameX="-0" frameY="-0" frameWidth="48" frameHeight="34"/>
|
||||
<SubTexture name="character-equal0003" x="694" y="38" width="48" height="34" frameX="-0" frameY="-0" frameWidth="48" frameHeight="34"/>
|
||||
<SubTexture name="character-ethel0000" x="2" y="2" width="78" height="70" frameX="-0" frameY="-0" frameWidth="79" frameHeight="70"/>
|
||||
<SubTexture name="character-ethel0001" x="2" y="2" width="78" height="70" frameX="-0" frameY="-0" frameWidth="79" frameHeight="70"/>
|
||||
<SubTexture name="character-ethel0002" x="2" y="74" width="78" height="70" frameX="-0" frameY="-0" frameWidth="79" frameHeight="70"/>
|
||||
<SubTexture name="character-ethel0003" x="2" y="74" width="78" height="70" frameX="-0" frameY="-0" frameWidth="79" frameHeight="70"/>
|
||||
<SubTexture name="character-exclamationmark0000" x="2" y="642" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-exclamationmark0001" x="2" y="642" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-exclamationmark0002" x="313" y="635" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-exclamationmark0003" x="313" y="635" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-f0000" x="599" y="352" width="43" height="67" frameX="-0" frameY="-0" frameWidth="43" frameHeight="67"/>
|
||||
<SubTexture name="character-f0001" x="599" y="352" width="43" height="67" frameX="-0" frameY="-0" frameWidth="43" frameHeight="67"/>
|
||||
<SubTexture name="character-f0002" x="605" y="281" width="43" height="67" frameX="-0" frameY="-0" frameWidth="43" frameHeight="67"/>
|
||||
<SubTexture name="character-f0003" x="605" y="281" width="43" height="67" frameX="-0" frameY="-0" frameWidth="43" frameHeight="67"/>
|
||||
<SubTexture name="character-five0000" x="516" y="210" width="46" height="69" frameX="-0" frameY="-0" frameWidth="47" frameHeight="69"/>
|
||||
<SubTexture name="character-five0001" x="516" y="210" width="46" height="69" frameX="-0" frameY="-0" frameWidth="47" frameHeight="69"/>
|
||||
<SubTexture name="character-five0002" x="557" y="281" width="46" height="69" frameX="-0" frameY="-0" frameWidth="47" frameHeight="69"/>
|
||||
<SubTexture name="character-five0003" x="557" y="281" width="46" height="69" frameX="-0" frameY="-0" frameWidth="47" frameHeight="69"/>
|
||||
<SubTexture name="character-four0000" x="398" y="359" width="52" height="69" frameX="-0" frameY="-0" frameWidth="53" frameHeight="69"/>
|
||||
<SubTexture name="character-four0001" x="398" y="359" width="52" height="69" frameX="-0" frameY="-0" frameWidth="53" frameHeight="69"/>
|
||||
<SubTexture name="character-four0002" x="362" y="85" width="52" height="69" frameX="-0" frameY="-0" frameWidth="53" frameHeight="69"/>
|
||||
<SubTexture name="character-four0003" x="362" y="85" width="52" height="69" frameX="-0" frameY="-0" frameWidth="53" frameHeight="69"/>
|
||||
<SubTexture name="character-g0000" x="183" y="282" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-g0001" x="183" y="282" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-g0002" x="123" y="283" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-g0003" x="123" y="283" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-h0000" x="570" y="2" width="44" height="66" frameX="-0" frameY="-0" frameWidth="45" frameHeight="66"/>
|
||||
<SubTexture name="character-h0001" x="570" y="2" width="44" height="66" frameX="-0" frameY="-0" frameWidth="45" frameHeight="66"/>
|
||||
<SubTexture name="character-h0002" x="598" y="437" width="44" height="66" frameX="-0" frameY="-0" frameWidth="45" frameHeight="66"/>
|
||||
<SubTexture name="character-h0003" x="598" y="437" width="44" height="66" frameX="-0" frameY="-0" frameWidth="45" frameHeight="66"/>
|
||||
<SubTexture name="character-hyphen0000" x="408" y="720" width="49" height="20" frameX="-0" frameY="-0" frameWidth="49" frameHeight="20"/>
|
||||
<SubTexture name="character-hyphen0001" x="408" y="720" width="49" height="20" frameX="-0" frameY="-0" frameWidth="49" frameHeight="20"/>
|
||||
<SubTexture name="character-hyphen0002" x="224" y="718" width="49" height="20" frameX="-0" frameY="-0" frameWidth="49" frameHeight="20"/>
|
||||
<SubTexture name="character-hyphen0003" x="224" y="718" width="49" height="20" frameX="-0" frameY="-0" frameWidth="49" frameHeight="20"/>
|
||||
<SubTexture name="character-i0000" x="644" y="350" width="43" height="64" frameX="-0" frameY="-0" frameWidth="43" frameHeight="64"/>
|
||||
<SubTexture name="character-i0001" x="644" y="350" width="43" height="64" frameX="-0" frameY="-0" frameWidth="43" frameHeight="64"/>
|
||||
<SubTexture name="character-i0002" x="650" y="279" width="43" height="64" frameX="-0" frameY="-0" frameWidth="43" frameHeight="64"/>
|
||||
<SubTexture name="character-i0003" x="650" y="279" width="43" height="64" frameX="-0" frameY="-0" frameWidth="43" frameHeight="64"/>
|
||||
<SubTexture name="character-j0000" x="2" y="286" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-j0001" x="2" y="286" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-j0002" x="57" y="292" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-j0003" x="57" y="292" width="53" height="70" frameX="-0" frameY="-0" frameWidth="54" frameHeight="70"/>
|
||||
<SubTexture name="character-k0000" x="564" y="210" width="44" height="69" frameX="-0" frameY="-0" frameWidth="44" frameHeight="69"/>
|
||||
<SubTexture name="character-k0001" x="564" y="210" width="44" height="69" frameX="-0" frameY="-0" frameWidth="44" frameHeight="69"/>
|
||||
<SubTexture name="character-k0002" x="596" y="548" width="44" height="69" frameX="-0" frameY="-0" frameWidth="44" frameHeight="69"/>
|
||||
<SubTexture name="character-k0003" x="596" y="548" width="44" height="69" frameX="-0" frameY="-0" frameWidth="44" frameHeight="69"/>
|
||||
<SubTexture name="character-l0000" x="644" y="416" width="40" height="66" frameX="-0" frameY="-0" frameWidth="41" frameHeight="66"/>
|
||||
<SubTexture name="character-l0001" x="644" y="416" width="40" height="66" frameX="-0" frameY="-0" frameWidth="41" frameHeight="66"/>
|
||||
<SubTexture name="character-l0002" x="654" y="206" width="41" height="66" frameX="-0" frameY="-0" frameWidth="41" frameHeight="66"/>
|
||||
<SubTexture name="character-l0003" x="654" y="206" width="41" height="66" frameX="-0" frameY="-0" frameWidth="41" frameHeight="66"/>
|
||||
<SubTexture name="character-m0000" x="222" y="428" width="56" height="63" frameX="-0" frameY="-0" frameWidth="56" frameHeight="63"/>
|
||||
<SubTexture name="character-m0001" x="222" y="428" width="56" height="63" frameX="-0" frameY="-0" frameWidth="56" frameHeight="63"/>
|
||||
<SubTexture name="character-m0002" x="280" y="429" width="56" height="63" frameX="-0" frameY="-0" frameWidth="56" frameHeight="63"/>
|
||||
<SubTexture name="character-m0003" x="280" y="429" width="56" height="63" frameX="-0" frameY="-0" frameWidth="56" frameHeight="63"/>
|
||||
<SubTexture name="character-n0000" x="280" y="2" width="45" height="65" frameX="-0" frameY="-0" frameWidth="45" frameHeight="65"/>
|
||||
<SubTexture name="character-n0001" x="280" y="2" width="45" height="65" frameX="-0" frameY="-0" frameWidth="45" frameHeight="65"/>
|
||||
<SubTexture name="character-n0002" x="569" y="142" width="45" height="65" frameX="-0" frameY="-0" frameWidth="45" frameHeight="65"/>
|
||||
<SubTexture name="character-n0003" x="569" y="142" width="45" height="65" frameX="-0" frameY="-0" frameWidth="45" frameHeight="65"/>
|
||||
<SubTexture name="character-nine0000" x="288" y="359" width="53" height="68" frameX="-0" frameY="-0" frameWidth="53" frameHeight="68"/>
|
||||
<SubTexture name="character-nine0001" x="288" y="359" width="53" height="68" frameX="-0" frameY="-0" frameWidth="53" frameHeight="68"/>
|
||||
<SubTexture name="character-nine0002" x="343" y="359" width="53" height="68" frameX="-0" frameY="-0" frameWidth="53" frameHeight="68"/>
|
||||
<SubTexture name="character-nine0003" x="343" y="359" width="53" height="68" frameX="-0" frameY="-0" frameWidth="53" frameHeight="68"/>
|
||||
<SubTexture name="character-o0000" x="452" y="336" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-o0001" x="452" y="336" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-o0002" x="415" y="156" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-o0003" x="415" y="156" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-one0000" x="338" y="429" width="51" height="69" frameX="-0" frameY="-0" frameWidth="51" frameHeight="69"/>
|
||||
<SubTexture name="character-one0001" x="338" y="429" width="51" height="69" frameX="-0" frameY="-0" frameWidth="51" frameHeight="69"/>
|
||||
<SubTexture name="character-one0002" x="391" y="430" width="51" height="69" frameX="-0" frameY="-0" frameWidth="51" frameHeight="69"/>
|
||||
<SubTexture name="character-one0003" x="391" y="430" width="51" height="69" frameX="-0" frameY="-0" frameWidth="51" frameHeight="69"/>
|
||||
<SubTexture name="character-p0000" x="156" y="564" width="45" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-p0001" x="156" y="564" width="45" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-p0002" x="103" y="565" width="45" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-p0003" x="103" y="565" width="45" height="70" frameX="-0" frameY="-0" frameWidth="46" frameHeight="70"/>
|
||||
<SubTexture name="character-percent0000" x="221" y="2" width="57" height="66" frameX="-0" frameY="-0" frameWidth="57" frameHeight="67"/>
|
||||
<SubTexture name="character-percent0001" x="221" y="2" width="57" height="66" frameX="-0" frameY="-0" frameWidth="57" frameHeight="67"/>
|
||||
<SubTexture name="character-percent0002" x="243" y="151" width="57" height="66" frameX="-0" frameY="-0" frameWidth="57" frameHeight="67"/>
|
||||
<SubTexture name="character-percent0003" x="243" y="151" width="57" height="66" frameX="-0" frameY="-0" frameWidth="57" frameHeight="67"/>
|
||||
<SubTexture name="character-period0000" x="605" y="677" width="23" height="18" frameX="-0" frameY="-0" frameWidth="23" frameHeight="18"/>
|
||||
<SubTexture name="character-period0001" x="605" y="677" width="23" height="18" frameX="-0" frameY="-0" frameWidth="23" frameHeight="18"/>
|
||||
<SubTexture name="character-period0002" x="289" y="781" width="23" height="18" frameX="-0" frameY="-0" frameWidth="23" frameHeight="18"/>
|
||||
<SubTexture name="character-period0003" x="289" y="781" width="23" height="18" frameX="-0" frameY="-0" frameWidth="23" frameHeight="18"/>
|
||||
<SubTexture name="character-plus0000" x="260" y="629" width="51" height="50" frameX="-0" frameY="-0" frameWidth="51" frameHeight="50"/>
|
||||
<SubTexture name="character-plus0001" x="260" y="629" width="51" height="50" frameX="-0" frameY="-0" frameWidth="51" frameHeight="50"/>
|
||||
<SubTexture name="character-plus0002" x="203" y="635" width="51" height="50" frameX="-0" frameY="-0" frameWidth="51" frameHeight="50"/>
|
||||
<SubTexture name="character-plus0003" x="203" y="635" width="51" height="50" frameX="-0" frameY="-0" frameWidth="51" frameHeight="50"/>
|
||||
<SubTexture name="character-pound0000" x="159" y="73" width="58" height="67" frameX="-0" frameY="-0" frameWidth="58" frameHeight="67"/>
|
||||
<SubTexture name="character-pound0001" x="159" y="73" width="58" height="67" frameX="-0" frameY="-0" frameWidth="58" frameHeight="67"/>
|
||||
<SubTexture name="character-pound0002" x="183" y="213" width="58" height="67" frameX="-0" frameY="-0" frameWidth="58" frameHeight="67"/>
|
||||
<SubTexture name="character-pound0003" x="183" y="213" width="58" height="67" frameX="-0" frameY="-0" frameWidth="58" frameHeight="67"/>
|
||||
<SubTexture name="character-q0000" x="467" y="141" width="51" height="67" frameX="-0" frameY="-0" frameWidth="52" frameHeight="67"/>
|
||||
<SubTexture name="character-q0001" x="467" y="141" width="51" height="67" frameX="-0" frameY="-0" frameWidth="52" frameHeight="67"/>
|
||||
<SubTexture name="character-q0002" x="468" y="2" width="51" height="67" frameX="-0" frameY="-0" frameWidth="52" frameHeight="67"/>
|
||||
<SubTexture name="character-q0003" x="468" y="2" width="51" height="67" frameX="-0" frameY="-0" frameWidth="52" frameHeight="67"/>
|
||||
<SubTexture name="character-questionmark0000" x="416" y="70" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-questionmark0001" x="416" y="70" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-questionmark0002" x="499" y="407" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-questionmark0003" x="499" y="407" width="50" height="69" frameX="-0" frameY="-0" frameWidth="50" frameHeight="69"/>
|
||||
<SubTexture name="character-questionmark-alt0000" x="219" y="73" width="50" height="76" frameX="-0" frameY="-2" frameWidth="51" frameHeight="78"/>
|
||||
<SubTexture name="character-questionmark-alt0001" x="219" y="73" width="50" height="76" frameX="-0" frameY="-2" frameWidth="51" frameHeight="78"/>
|
||||
<SubTexture name="character-questionmark-alt0002" x="70" y="212" width="51" height="78" frameX="-0" frameY="-0" frameWidth="51" frameHeight="78"/>
|
||||
<SubTexture name="character-questionmark-alt0003" x="70" y="212" width="51" height="78" frameX="-0" frameY="-0" frameWidth="51" frameHeight="78"/>
|
||||
<SubTexture name="character-r0000" x="520" y="142" width="47" height="66" frameX="-0" frameY="-0" frameWidth="47" frameHeight="66"/>
|
||||
<SubTexture name="character-r0001" x="520" y="142" width="47" height="66" frameX="-0" frameY="-0" frameWidth="47" frameHeight="66"/>
|
||||
<SubTexture name="character-r0002" x="374" y="570" width="47" height="66" frameX="-0" frameY="-0" frameWidth="47" frameHeight="66"/>
|
||||
<SubTexture name="character-r0003" x="374" y="570" width="47" height="66" frameX="-0" frameY="-0" frameWidth="47" frameHeight="66"/>
|
||||
<SubTexture name="character-roundbracket-left0000" x="469" y="620" width="34" height="67" frameX="-0" frameY="-0" frameWidth="34" frameHeight="67"/>
|
||||
<SubTexture name="character-roundbracket-left0001" x="469" y="620" width="34" height="67" frameX="-0" frameY="-0" frameWidth="34" frameHeight="67"/>
|
||||
<SubTexture name="character-roundbracket-left0002" x="505" y="620" width="34" height="67" frameX="-0" frameY="-0" frameWidth="34" frameHeight="67"/>
|
||||
<SubTexture name="character-roundbracket-left0003" x="505" y="620" width="34" height="67" frameX="-0" frameY="-0" frameWidth="34" frameHeight="67"/>
|
||||
<SubTexture name="character-roundbracket-right0000" x="99" y="637" width="34" height="68" frameX="-0" frameY="-0" frameWidth="34" frameHeight="68"/>
|
||||
<SubTexture name="character-roundbracket-right0001" x="99" y="637" width="34" height="68" frameX="-0" frameY="-0" frameWidth="34" frameHeight="68"/>
|
||||
<SubTexture name="character-roundbracket-right0002" x="50" y="641" width="34" height="68" frameX="-0" frameY="-0" frameWidth="34" frameHeight="68"/>
|
||||
<SubTexture name="character-roundbracket-right0003" x="50" y="641" width="34" height="68" frameX="-0" frameY="-0" frameWidth="34" frameHeight="68"/>
|
||||
<SubTexture name="character-s0000" x="274" y="561" width="48" height="66" frameX="-0" frameY="-0" frameWidth="49" frameHeight="66"/>
|
||||
<SubTexture name="character-s0001" x="274" y="561" width="48" height="66" frameX="-0" frameY="-0" frameWidth="49" frameHeight="66"/>
|
||||
<SubTexture name="character-s0002" x="324" y="567" width="48" height="66" frameX="-0" frameY="-0" frameWidth="49" frameHeight="66"/>
|
||||
<SubTexture name="character-s0003" x="324" y="567" width="48" height="66" frameX="-0" frameY="-0" frameWidth="49" frameHeight="66"/>
|
||||
<SubTexture name="character-semicolon0000" x="719" y="110" width="24" height="63" frameX="-0" frameY="-0" frameWidth="24" frameHeight="63"/>
|
||||
<SubTexture name="character-semicolon0001" x="719" y="110" width="24" height="63" frameX="-0" frameY="-0" frameWidth="24" frameHeight="63"/>
|
||||
<SubTexture name="character-semicolon0002" x="687" y="516" width="24" height="63" frameX="-0" frameY="-0" frameWidth="24" frameHeight="63"/>
|
||||
<SubTexture name="character-semicolon0003" x="687" y="516" width="24" height="63" frameX="-0" frameY="-0" frameWidth="24" frameHeight="63"/>
|
||||
<SubTexture name="character-seven0000" x="53" y="502" width="48" height="68" frameX="-0" frameY="-0" frameWidth="48" frameHeight="69"/>
|
||||
<SubTexture name="character-seven0001" x="53" y="502" width="48" height="68" frameX="-0" frameY="-0" frameWidth="48" frameHeight="69"/>
|
||||
<SubTexture name="character-seven0002" x="548" y="478" width="48" height="68" frameX="-0" frameY="-0" frameWidth="48" frameHeight="69"/>
|
||||
<SubTexture name="character-seven0003" x="548" y="478" width="48" height="68" frameX="-0" frameY="-0" frameWidth="48" frameHeight="69"/>
|
||||
<SubTexture name="character-singlequote0000" x="327" y="746" width="27" height="31" frameX="-0" frameY="-0" frameWidth="27" frameHeight="31"/>
|
||||
<SubTexture name="character-singlequote0001" x="327" y="746" width="27" height="31" frameX="-0" frameY="-0" frameWidth="27" frameHeight="31"/>
|
||||
<SubTexture name="character-singlequote0002" x="356" y="747" width="27" height="31" frameX="-0" frameY="-0" frameWidth="27" frameHeight="31"/>
|
||||
<SubTexture name="character-singlequote0003" x="356" y="747" width="27" height="31" frameX="-0" frameY="-0" frameWidth="27" frameHeight="31"/>
|
||||
<SubTexture name="character-six0000" x="299" y="219" width="54" height="68" frameX="-0" frameY="-0" frameWidth="54" frameHeight="68"/>
|
||||
<SubTexture name="character-six0001" x="299" y="219" width="54" height="68" frameX="-0" frameY="-0" frameWidth="54" frameHeight="68"/>
|
||||
<SubTexture name="character-six0002" x="352" y="289" width="53" height="68" frameX="-0" frameY="-0" frameWidth="54" frameHeight="68"/>
|
||||
<SubTexture name="character-six0003" x="352" y="289" width="53" height="68" frameX="-0" frameY="-0" frameWidth="54" frameHeight="68"/>
|
||||
<SubTexture name="character-slash0000" x="468" y="71" width="50" height="68" frameX="-0" frameY="-0" frameWidth="50" frameHeight="68"/>
|
||||
<SubTexture name="character-slash0001" x="468" y="71" width="50" height="68" frameX="-0" frameY="-0" frameWidth="50" frameHeight="68"/>
|
||||
<SubTexture name="character-slash0002" x="222" y="493" width="50" height="68" frameX="-0" frameY="-0" frameWidth="50" frameHeight="68"/>
|
||||
<SubTexture name="character-slash0003" x="222" y="493" width="50" height="68" frameX="-0" frameY="-0" frameWidth="50" frameHeight="68"/>
|
||||
<SubTexture name="character-squarebracket-left0000" x="348" y="638" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-left0001" x="348" y="638" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-left0002" x="383" y="638" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-left0003" x="383" y="638" width="33" height="70" frameX="-0" frameY="-0" frameWidth="33" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-right0000" x="658" y="68" width="34" height="70" frameX="-0" frameY="-0" frameWidth="34" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-right0001" x="658" y="68" width="34" height="70" frameX="-0" frameY="-0" frameWidth="34" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-right0002" x="150" y="636" width="34" height="70" frameX="-0" frameY="-0" frameWidth="34" frameHeight="70"/>
|
||||
<SubTexture name="character-squarebracket-right0003" x="150" y="636" width="34" height="70" frameX="-0" frameY="-0" frameWidth="34" frameHeight="70"/>
|
||||
<SubTexture name="character-t0000" x="616" y="2" width="44" height="64" frameX="-0" frameY="-0" frameWidth="44" frameHeight="64"/>
|
||||
<SubTexture name="character-t0001" x="616" y="2" width="44" height="64" frameX="-0" frameY="-0" frameWidth="44" frameHeight="64"/>
|
||||
<SubTexture name="character-t0002" x="616" y="140" width="44" height="64" frameX="-0" frameY="-0" frameWidth="44" frameHeight="64"/>
|
||||
<SubTexture name="character-t0003" x="616" y="140" width="44" height="64" frameX="-0" frameY="-0" frameWidth="44" frameHeight="64"/>
|
||||
<SubTexture name="character-three0000" x="520" y="71" width="46" height="69" frameX="-0" frameY="-0" frameWidth="46" frameHeight="69"/>
|
||||
<SubTexture name="character-three0001" x="520" y="71" width="46" height="69" frameX="-0" frameY="-0" frameWidth="46" frameHeight="69"/>
|
||||
<SubTexture name="character-three0002" x="2" y="571" width="46" height="69" frameX="-0" frameY="-0" frameWidth="46" frameHeight="69"/>
|
||||
<SubTexture name="character-three0003" x="2" y="571" width="46" height="69" frameX="-0" frameY="-0" frameWidth="46" frameHeight="69"/>
|
||||
<SubTexture name="character-tilde0000" x="2" y="714" width="52" height="28" frameX="-0" frameY="-0" frameWidth="52" frameHeight="28"/>
|
||||
<SubTexture name="character-tilde0001" x="2" y="714" width="52" height="28" frameX="-0" frameY="-0" frameWidth="52" frameHeight="28"/>
|
||||
<SubTexture name="character-tilde0002" x="685" y="690" width="52" height="28" frameX="-0" frameY="-0" frameWidth="52" frameHeight="28"/>
|
||||
<SubTexture name="character-tilde0003" x="685" y="690" width="52" height="28" frameX="-0" frameY="-0" frameWidth="52" frameHeight="28"/>
|
||||
<SubTexture name="character-tilde-alt0000" x="256" y="681" width="55" height="35" frameX="-0" frameY="-0" frameWidth="55" frameHeight="35"/>
|
||||
<SubTexture name="character-tilde-alt0001" x="256" y="681" width="55" height="35" frameX="-0" frameY="-0" frameWidth="55" frameHeight="35"/>
|
||||
<SubTexture name="character-tilde-alt0002" x="662" y="140" width="55" height="34" frameX="-0" frameY="-0" frameWidth="55" frameHeight="35"/>
|
||||
<SubTexture name="character-tilde-alt0003" x="662" y="140" width="55" height="34" frameX="-0" frameY="-0" frameWidth="55" frameHeight="35"/>
|
||||
<SubTexture name="character-two0000" x="161" y="494" width="50" height="68" frameX="-0" frameY="-0" frameWidth="51" frameHeight="68"/>
|
||||
<SubTexture name="character-two0001" x="161" y="494" width="50" height="68" frameX="-0" frameY="-0" frameWidth="51" frameHeight="68"/>
|
||||
<SubTexture name="character-two0002" x="104" y="495" width="50" height="68" frameX="-0" frameY="-0" frameWidth="51" frameHeight="68"/>
|
||||
<SubTexture name="character-two0003" x="104" y="495" width="50" height="68" frameX="-0" frameY="-0" frameWidth="51" frameHeight="68"/>
|
||||
<SubTexture name="character-u0000" x="2" y="441" width="44" height="59" frameX="-0" frameY="-0" frameWidth="44" frameHeight="59"/>
|
||||
<SubTexture name="character-u0001" x="2" y="441" width="44" height="59" frameX="-0" frameY="-0" frameWidth="44" frameHeight="59"/>
|
||||
<SubTexture name="character-u0002" x="639" y="639" width="44" height="59" frameX="-0" frameY="-0" frameWidth="44" frameHeight="59"/>
|
||||
<SubTexture name="character-u0003" x="639" y="639" width="44" height="59" frameX="-0" frameY="-0" frameWidth="44" frameHeight="59"/>
|
||||
<SubTexture name="character-underscore0000" x="603" y="724" width="56" height="18" frameX="-0" frameY="-0" frameWidth="56" frameHeight="18"/>
|
||||
<SubTexture name="character-underscore0001" x="603" y="724" width="56" height="18" frameX="-0" frameY="-0" frameWidth="56" frameHeight="18"/>
|
||||
<SubTexture name="character-underscore0002" x="166" y="708" width="56" height="18" frameX="-0" frameY="-0" frameWidth="56" frameHeight="18"/>
|
||||
<SubTexture name="character-underscore0003" x="166" y="708" width="56" height="18" frameX="-0" frameY="-0" frameWidth="56" frameHeight="18"/>
|
||||
<SubTexture name="character-underscore-alt0000" x="605" y="700" width="65" height="22" frameX="-0" frameY="-0" frameWidth="65" frameHeight="22"/>
|
||||
<SubTexture name="character-underscore-alt0001" x="605" y="700" width="65" height="22" frameX="-0" frameY="-0" frameWidth="65" frameHeight="22"/>
|
||||
<SubTexture name="character-underscore-alt0002" x="672" y="720" width="65" height="22" frameX="-0" frameY="-0" frameWidth="65" frameHeight="22"/>
|
||||
<SubTexture name="character-underscore-alt0003" x="672" y="720" width="65" height="22" frameX="-0" frameY="-0" frameWidth="65" frameHeight="22"/>
|
||||
<SubTexture name="character-v0000" x="166" y="426" width="54" height="66" frameX="-0" frameY="-0" frameWidth="54" frameHeight="66"/>
|
||||
<SubTexture name="character-v0001" x="166" y="426" width="54" height="66" frameX="-0" frameY="-0" frameWidth="54" frameHeight="66"/>
|
||||
<SubTexture name="character-v0002" x="105" y="427" width="54" height="66" frameX="-0" frameY="-0" frameWidth="54" frameHeight="66"/>
|
||||
<SubTexture name="character-v0003" x="105" y="427" width="54" height="66" frameX="-0" frameY="-0" frameWidth="54" frameHeight="66"/>
|
||||
<SubTexture name="character-verticalbar0000" x="721" y="345" width="21" height="66" frameX="-0" frameY="-0" frameWidth="21" frameHeight="66"/>
|
||||
<SubTexture name="character-verticalbar0001" x="721" y="345" width="21" height="66" frameX="-0" frameY="-0" frameWidth="21" frameHeight="66"/>
|
||||
<SubTexture name="character-verticalbar0002" x="744" y="2" width="21" height="66" frameX="-0" frameY="-0" frameWidth="21" frameHeight="66"/>
|
||||
<SubTexture name="character-verticalbar0003" x="744" y="2" width="21" height="66" frameX="-0" frameY="-0" frameWidth="21" frameHeight="66"/>
|
||||
<SubTexture name="character-verticalbar-alt0000" x="739" y="175" width="16" height="76" frameX="-0" frameY="-0" frameWidth="16" frameHeight="77"/>
|
||||
<SubTexture name="character-verticalbar-alt0001" x="739" y="175" width="16" height="76" frameX="-0" frameY="-0" frameWidth="16" frameHeight="77"/>
|
||||
<SubTexture name="character-verticalbar-alt0002" x="745" y="70" width="16" height="76" frameX="-0" frameY="-0" frameWidth="16" frameHeight="77"/>
|
||||
<SubTexture name="character-verticalbar-alt0003" x="745" y="70" width="16" height="76" frameX="-0" frameY="-0" frameWidth="16" frameHeight="77"/>
|
||||
<SubTexture name="character-w0000" x="302" y="141" width="58" height="63" frameX="-0" frameY="-0" frameWidth="58" frameHeight="63"/>
|
||||
<SubTexture name="character-w0001" x="302" y="141" width="58" height="63" frameX="-0" frameY="-0" frameWidth="58" frameHeight="63"/>
|
||||
<SubTexture name="character-w0002" x="355" y="206" width="58" height="62" frameX="-0" frameY="-0" frameWidth="58" frameHeight="63"/>
|
||||
<SubTexture name="character-w0003" x="355" y="206" width="58" height="62" frameX="-0" frameY="-0" frameWidth="58" frameHeight="63"/>
|
||||
<SubTexture name="character-x0000" x="238" y="290" width="55" height="67" frameX="-0" frameY="-0" frameWidth="55" frameHeight="67"/>
|
||||
<SubTexture name="character-x0001" x="238" y="290" width="55" height="67" frameX="-0" frameY="-0" frameWidth="55" frameHeight="67"/>
|
||||
<SubTexture name="character-x0002" x="295" y="290" width="55" height="67" frameX="-0" frameY="-0" frameWidth="55" frameHeight="67"/>
|
||||
<SubTexture name="character-x0003" x="295" y="290" width="55" height="67" frameX="-0" frameY="-0" frameWidth="55" frameHeight="67"/>
|
||||
<SubTexture name="character-y0000" x="271" y="70" width="54" height="69" frameX="-0" frameY="-0" frameWidth="54" frameHeight="69"/>
|
||||
<SubTexture name="character-y0001" x="271" y="70" width="54" height="69" frameX="-0" frameY="-0" frameWidth="54" frameHeight="69"/>
|
||||
<SubTexture name="character-y0002" x="243" y="219" width="54" height="69" frameX="-0" frameY="-0" frameWidth="54" frameHeight="69"/>
|
||||
<SubTexture name="character-y0003" x="243" y="219" width="54" height="69" frameX="-0" frameY="-0" frameWidth="54" frameHeight="69"/>
|
||||
<SubTexture name="character-z0000" x="274" y="494" width="51" height="65" frameX="-0" frameY="-0" frameWidth="52" frameHeight="65"/>
|
||||
<SubTexture name="character-z0001" x="274" y="494" width="51" height="65" frameX="-0" frameY="-0" frameWidth="52" frameHeight="65"/>
|
||||
<SubTexture name="character-z0002" x="327" y="500" width="51" height="65" frameX="-0" frameY="-0" frameWidth="52" frameHeight="65"/>
|
||||
<SubTexture name="character-z0003" x="327" y="500" width="51" height="65" frameX="-0" frameY="-0" frameWidth="52" frameHeight="65"/>
|
||||
<SubTexture name="character-zero0000" x="178" y="354" width="52" height="70" frameX="-0" frameY="-0" frameWidth="53" frameHeight="70"/>
|
||||
<SubTexture name="character-zero0001" x="178" y="354" width="52" height="70" frameX="-0" frameY="-0" frameWidth="53" frameHeight="70"/>
|
||||
<SubTexture name="character-zero0002" x="112" y="355" width="52" height="70" frameX="-0" frameY="-0" frameWidth="53" frameHeight="70"/>
|
||||
<SubTexture name="character-zero0003" x="112" y="355" width="52" height="70" frameX="-0" frameY="-0" frameWidth="53" frameHeight="70"/>
|
||||
<SubTexture name="diacritic-acute-fill0000" x="727" y="327" width="14" height="16" frameX="-0" frameY="-0" frameWidth="14" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-acute-fill0001" x="727" y="327" width="14" height="16" frameX="-0" frameY="-0" frameWidth="14" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-acute-fill0002" x="186" y="656" width="14" height="16" frameX="-0" frameY="-0" frameWidth="14" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-acute-fill0003" x="186" y="656" width="14" height="16" frameX="-0" frameY="-0" frameWidth="14" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-acute-outline0000" x="197" y="728" width="25" height="26" frameX="-0" frameY="-0" frameWidth="25" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-acute-outline0001" x="197" y="728" width="25" height="26" frameX="-0" frameY="-0" frameWidth="25" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-acute-outline0002" x="147" y="755" width="25" height="26" frameX="-0" frameY="-0" frameWidth="25" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-acute-outline0003" x="147" y="755" width="25" height="26" frameX="-0" frameY="-0" frameWidth="25" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-apostophe-fill0000" x="264" y="785" width="17" height="17" frameX="-0" frameY="-0" frameWidth="17" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-apostophe-fill0001" x="264" y="785" width="17" height="17" frameX="-0" frameY="-0" frameWidth="17" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-apostophe-fill0002" x="469" y="598" width="17" height="17" frameX="-0" frameY="-0" frameWidth="17" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-apostophe-fill0003" x="469" y="598" width="17" height="17" frameX="-0" frameY="-0" frameWidth="17" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-apostophe-outline0000" x="662" y="38" width="29" height="26" frameX="-0" frameY="-0" frameWidth="29" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-apostophe-outline0001" x="662" y="38" width="29" height="26" frameX="-0" frameY="-0" frameWidth="29" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-apostophe-outline0002" x="412" y="764" width="29" height="26" frameX="-0" frameY="-0" frameWidth="29" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-apostophe-outline0003" x="412" y="764" width="29" height="26" frameX="-0" frameY="-0" frameWidth="29" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-breve-fill0000" x="142" y="783" width="30" height="15" frameX="-0" frameY="-0" frameWidth="30" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-breve-fill0001" x="142" y="783" width="30" height="15" frameX="-0" frameY="-0" frameWidth="30" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-breve-fill0002" x="174" y="788" width="29" height="15" frameX="-1" frameY="-0" frameWidth="30" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-breve-fill0003" x="174" y="788" width="29" height="15" frameX="-1" frameY="-0" frameWidth="30" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-breve-outline0000" x="2" y="744" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-breve-outline0001" x="2" y="744" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-breve-outline0002" x="42" y="747" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-breve-outline0003" x="42" y="747" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-cadilla-fill0000" x="174" y="755" width="19" height="31" frameX="-0" frameY="-0" frameWidth="19" frameHeight="31"/>
|
||||
<SubTexture name="diacritic-cadilla-fill0001" x="174" y="755" width="19" height="31" frameX="-0" frameY="-0" frameWidth="19" frameHeight="31"/>
|
||||
<SubTexture name="diacritic-cadilla-fill0002" x="483" y="756" width="19" height="30" frameX="-0" frameY="-1" frameWidth="19" frameHeight="31"/>
|
||||
<SubTexture name="diacritic-cadilla-fill0003" x="483" y="756" width="19" height="30" frameX="-0" frameY="-1" frameWidth="19" frameHeight="31"/>
|
||||
<SubTexture name="diacritic-cadilla-outline0000" x="377" y="710" width="29" height="35" frameX="-0" frameY="-0" frameWidth="29" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-cadilla-outline0001" x="377" y="710" width="29" height="35" frameX="-0" frameY="-0" frameWidth="29" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-cadilla-outline0002" x="135" y="708" width="29" height="35" frameX="-0" frameY="-0" frameWidth="29" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-cadilla-outline0003" x="135" y="708" width="29" height="35" frameX="-0" frameY="-0" frameWidth="29" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-circumflex-fill0000" x="235" y="770" width="27" height="14" frameX="-1" frameY="-0" frameWidth="28" frameHeight="14"/>
|
||||
<SubTexture name="diacritic-circumflex-fill0001" x="235" y="770" width="27" height="14" frameX="-1" frameY="-0" frameWidth="28" frameHeight="14"/>
|
||||
<SubTexture name="diacritic-circumflex-fill0002" x="452" y="407" width="27" height="14" frameX="-1" frameY="-0" frameWidth="28" frameHeight="14"/>
|
||||
<SubTexture name="diacritic-circumflex-fill0003" x="452" y="407" width="27" height="14" frameX="-1" frameY="-0" frameWidth="28" frameHeight="14"/>
|
||||
<SubTexture name="diacritic-circumflex-outline0000" x="2" y="771" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-circumflex-outline0001" x="2" y="771" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-circumflex-outline0002" x="42" y="774" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-circumflex-outline0003" x="42" y="774" width="38" height="25" frameX="-0" frameY="-0" frameWidth="38" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-dot-fill0000" x="186" y="674" width="12" height="11" frameX="-0" frameY="-1" frameWidth="12" frameHeight="12"/>
|
||||
<SubTexture name="diacritic-dot-fill0001" x="186" y="674" width="12" height="11" frameX="-0" frameY="-1" frameWidth="12" frameHeight="12"/>
|
||||
<SubTexture name="diacritic-dot-fill0002" x="502" y="210" width="12" height="11" frameX="-0" frameY="-1" frameWidth="12" frameHeight="12"/>
|
||||
<SubTexture name="diacritic-dot-fill0003" x="502" y="210" width="12" height="11" frameX="-0" frameY="-1" frameWidth="12" frameHeight="12"/>
|
||||
<SubTexture name="diacritic-dot-outline0000" x="694" y="110" width="23" height="23" frameX="-0" frameY="-0" frameWidth="23" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-dot-outline0001" x="694" y="110" width="23" height="23" frameX="-0" frameY="-0" frameWidth="23" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-dot-outline0002" x="224" y="740" width="23" height="23" frameX="-0" frameY="-0" frameWidth="23" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-dot-outline0003" x="224" y="740" width="23" height="23" frameX="-0" frameY="-0" frameWidth="23" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-hookabove-fill0000" x="469" y="570" width="20" height="26" frameX="-0" frameY="-0" frameWidth="20" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-hookabove-fill0001" x="469" y="570" width="20" height="26" frameX="-0" frameY="-0" frameWidth="20" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-hookabove-fill0002" x="745" y="148" width="20" height="25" frameX="-0" frameY="-1" frameWidth="20" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-hookabove-fill0003" x="745" y="148" width="20" height="25" frameX="-0" frameY="-1" frameWidth="20" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-hookabove-outline0000" x="735" y="476" width="30" height="35" frameX="-0" frameY="-0" frameWidth="30" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookabove-outline0001" x="735" y="476" width="30" height="35" frameX="-0" frameY="-0" frameWidth="30" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookabove-outline0002" x="736" y="572" width="30" height="35" frameX="-0" frameY="-0" frameWidth="30" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookabove-outline0003" x="736" y="572" width="30" height="35" frameX="-0" frameY="-0" frameWidth="30" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-fill0000" x="662" y="176" width="33" height="23" frameX="-0" frameY="-0" frameWidth="33" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-fill0001" x="662" y="176" width="33" height="23" frameX="-0" frameY="-0" frameWidth="33" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-fill0002" x="327" y="780" width="33" height="23" frameX="-0" frameY="-0" frameWidth="33" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-fill0003" x="327" y="780" width="33" height="23" frameX="-0" frameY="-0" frameWidth="33" frameHeight="23"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-outline0000" x="463" y="296" width="39" height="34" frameX="-0" frameY="-0" frameWidth="39" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-outline0001" x="463" y="296" width="39" height="34" frameX="-0" frameY="-0" frameWidth="39" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-outline0002" x="551" y="437" width="39" height="34" frameX="-0" frameY="-0" frameWidth="39" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-hookhorizontal-outline0003" x="551" y="437" width="39" height="34" frameX="-0" frameY="-0" frameWidth="39" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-hookside-fill0000" x="212" y="151" width="28" height="50" frameX="-0" frameY="-0" frameWidth="28" frameHeight="50"/>
|
||||
<SubTexture name="diacritic-hookside-fill0001" x="212" y="151" width="28" height="50" frameX="-0" frameY="-0" frameWidth="28" frameHeight="50"/>
|
||||
<SubTexture name="diacritic-hookside-fill0002" x="327" y="85" width="28" height="50" frameX="-0" frameY="-0" frameWidth="28" frameHeight="50"/>
|
||||
<SubTexture name="diacritic-hookside-fill0003" x="327" y="85" width="28" height="50" frameX="-0" frameY="-0" frameWidth="28" frameHeight="50"/>
|
||||
<SubTexture name="diacritic-hookside-outline0000" x="430" y="2" width="34" height="62" frameX="-0" frameY="-0" frameWidth="34" frameHeight="62"/>
|
||||
<SubTexture name="diacritic-hookside-outline0001" x="430" y="2" width="34" height="62" frameX="-0" frameY="-0" frameWidth="34" frameHeight="62"/>
|
||||
<SubTexture name="diacritic-hookside-outline0002" x="686" y="416" width="34" height="62" frameX="-0" frameY="-0" frameWidth="34" frameHeight="62"/>
|
||||
<SubTexture name="diacritic-hookside-outline0003" x="686" y="416" width="34" height="62" frameX="-0" frameY="-0" frameWidth="34" frameHeight="62"/>
|
||||
<SubTexture name="diacritic-hookvertical-fill0000" x="507" y="737" width="23" height="35" frameX="-0" frameY="-0" frameWidth="23" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookvertical-fill0001" x="507" y="737" width="23" height="35" frameX="-0" frameY="-0" frameWidth="23" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookvertical-fill0002" x="532" y="737" width="23" height="35" frameX="-0" frameY="-0" frameWidth="23" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookvertical-fill0003" x="532" y="737" width="23" height="35" frameX="-0" frameY="-0" frameWidth="23" frameHeight="35"/>
|
||||
<SubTexture name="diacritic-hookvertical-outline0000" x="731" y="615" width="34" height="38" frameX="-0" frameY="-1" frameWidth="34" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-hookvertical-outline0001" x="731" y="615" width="34" height="38" frameX="-0" frameY="-1" frameWidth="34" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-hookvertical-outline0002" x="727" y="261" width="34" height="38" frameX="-0" frameY="-1" frameWidth="34" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-hookvertical-outline0003" x="727" y="261" width="34" height="38" frameX="-0" frameY="-1" frameWidth="34" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-horn-fill0000" x="481" y="407" width="15" height="18" frameX="-0" frameY="-0" frameWidth="16" frameHeight="18"/>
|
||||
<SubTexture name="diacritic-horn-fill0001" x="481" y="407" width="15" height="18" frameX="-0" frameY="-0" frameWidth="16" frameHeight="18"/>
|
||||
<SubTexture name="diacritic-horn-fill0002" x="186" y="636" width="15" height="18" frameX="-0" frameY="-0" frameWidth="16" frameHeight="18"/>
|
||||
<SubTexture name="diacritic-horn-fill0003" x="186" y="636" width="15" height="18" frameX="-0" frameY="-0" frameWidth="16" frameHeight="18"/>
|
||||
<SubTexture name="diacritic-horn-outline0000" x="116" y="772" width="24" height="25" frameX="-0" frameY="-0" frameWidth="24" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-horn-outline0001" x="116" y="772" width="24" height="25" frameX="-0" frameY="-0" frameWidth="24" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-horn-outline0002" x="82" y="777" width="24" height="25" frameX="-0" frameY="-0" frameWidth="24" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-horn-outline0003" x="82" y="777" width="24" height="25" frameX="-0" frameY="-0" frameWidth="24" frameHeight="26"/>
|
||||
<SubTexture name="diacritic-macron-fill0000" x="557" y="352" width="34" height="10" frameX="-1" frameY="-0" frameWidth="35" frameHeight="10"/>
|
||||
<SubTexture name="diacritic-macron-fill0001" x="557" y="352" width="34" height="10" frameX="-1" frameY="-0" frameWidth="35" frameHeight="10"/>
|
||||
<SubTexture name="diacritic-macron-fill0002" x="516" y="281" width="34" height="9" frameX="-1" frameY="-1" frameWidth="35" frameHeight="10"/>
|
||||
<SubTexture name="diacritic-macron-fill0003" x="516" y="281" width="34" height="9" frameX="-1" frameY="-1" frameWidth="35" frameHeight="10"/>
|
||||
<SubTexture name="diacritic-macron-outline0000" x="459" y="734" width="46" height="20" frameX="-0" frameY="-0" frameWidth="46" frameHeight="20"/>
|
||||
<SubTexture name="diacritic-macron-outline0001" x="459" y="734" width="46" height="20" frameX="-0" frameY="-0" frameWidth="46" frameHeight="20"/>
|
||||
<SubTexture name="diacritic-macron-outline0002" x="408" y="742" width="46" height="20" frameX="-0" frameY="-0" frameWidth="46" frameHeight="20"/>
|
||||
<SubTexture name="diacritic-macron-outline0003" x="408" y="742" width="46" height="20" frameX="-0" frameY="-0" frameWidth="46" frameHeight="20"/>
|
||||
<SubTexture name="diacritic-ogonek-fill0000" x="195" y="756" width="18" height="28" frameX="-0" frameY="-1" frameWidth="19" frameHeight="29"/>
|
||||
<SubTexture name="diacritic-ogonek-fill0001" x="195" y="756" width="18" height="28" frameX="-0" frameY="-1" frameWidth="19" frameHeight="29"/>
|
||||
<SubTexture name="diacritic-ogonek-fill0002" x="249" y="740" width="18" height="28" frameX="-0" frameY="-1" frameWidth="19" frameHeight="29"/>
|
||||
<SubTexture name="diacritic-ogonek-fill0003" x="249" y="740" width="18" height="28" frameX="-0" frameY="-1" frameWidth="19" frameHeight="29"/>
|
||||
<SubTexture name="diacritic-ogonek-outline0000" x="56" y="711" width="28" height="34" frameX="-0" frameY="-0" frameWidth="28" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-ogonek-outline0001" x="56" y="711" width="28" height="34" frameX="-0" frameY="-0" frameWidth="28" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-ogonek-outline0002" x="86" y="741" width="28" height="34" frameX="-0" frameY="-0" frameWidth="28" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-ogonek-outline0003" x="86" y="741" width="28" height="34" frameX="-0" frameY="-0" frameWidth="28" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-ring-fill0000" x="385" y="747" width="19" height="15" frameX="-0" frameY="-1" frameWidth="19" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-ring-fill0001" x="385" y="747" width="19" height="15" frameX="-0" frameY="-1" frameWidth="19" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-ring-fill0002" x="362" y="780" width="19" height="15" frameX="-0" frameY="-1" frameWidth="19" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-ring-fill0003" x="362" y="780" width="19" height="15" frameX="-0" frameY="-1" frameWidth="19" frameHeight="16"/>
|
||||
<SubTexture name="diacritic-ring-outline0000" x="166" y="728" width="29" height="25" frameX="-0" frameY="-0" frameWidth="29" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-ring-outline0001" x="166" y="728" width="29" height="25" frameX="-0" frameY="-0" frameWidth="29" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-ring-outline0002" x="116" y="745" width="29" height="25" frameX="-0" frameY="-0" frameWidth="29" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-ring-outline0003" x="116" y="745" width="29" height="25" frameX="-0" frameY="-0" frameWidth="29" frameHeight="25"/>
|
||||
<SubTexture name="diacritic-sicilicus-fill0000" x="726" y="2" width="12" height="24" frameX="-0" frameY="-0" frameWidth="12" frameHeight="24"/>
|
||||
<SubTexture name="diacritic-sicilicus-fill0001" x="726" y="2" width="12" height="24" frameX="-0" frameY="-0" frameWidth="12" frameHeight="24"/>
|
||||
<SubTexture name="diacritic-sicilicus-fill0002" x="727" y="301" width="12" height="24" frameX="-0" frameY="-0" frameWidth="12" frameHeight="24"/>
|
||||
<SubTexture name="diacritic-sicilicus-fill0003" x="727" y="301" width="12" height="24" frameX="-0" frameY="-0" frameWidth="12" frameHeight="24"/>
|
||||
<SubTexture name="diacritic-sicilicus-outline0000" x="275" y="718" width="24" height="36" frameX="-0" frameY="-0" frameWidth="25" frameHeight="36"/>
|
||||
<SubTexture name="diacritic-sicilicus-outline0001" x="275" y="718" width="24" height="36" frameX="-0" frameY="-0" frameWidth="25" frameHeight="36"/>
|
||||
<SubTexture name="diacritic-sicilicus-outline0002" x="301" y="743" width="24" height="36" frameX="-0" frameY="-0" frameWidth="25" frameHeight="36"/>
|
||||
<SubTexture name="diacritic-sicilicus-outline0003" x="301" y="743" width="24" height="36" frameX="-0" frameY="-0" frameWidth="25" frameHeight="36"/>
|
||||
<SubTexture name="diacritic-stroke0-long-fill0000" x="205" y="794" width="55" height="7" frameX="-0" frameY="-0" frameWidth="55" frameHeight="7"/>
|
||||
<SubTexture name="diacritic-stroke0-long-fill0001" x="205" y="794" width="55" height="7" frameX="-0" frameY="-0" frameWidth="55" frameHeight="7"/>
|
||||
<SubTexture name="diacritic-stroke0-long-fill0002" x="205" y="794" width="55" height="7" frameX="-0" frameY="-0" frameWidth="55" frameHeight="7"/>
|
||||
<SubTexture name="diacritic-stroke0-long-fill0003" x="205" y="794" width="55" height="7" frameX="-0" frameY="-0" frameWidth="55" frameHeight="7"/>
|
||||
<SubTexture name="diacritic-stroke0-long-outline0000" x="186" y="687" width="68" height="19" frameX="-0" frameY="-0" frameWidth="68" frameHeight="19"/>
|
||||
<SubTexture name="diacritic-stroke0-long-outline0001" x="186" y="687" width="68" height="19" frameX="-0" frameY="-0" frameWidth="68" frameHeight="19"/>
|
||||
<SubTexture name="diacritic-stroke0-long-outline0002" x="464" y="689" width="68" height="19" frameX="-0" frameY="-0" frameWidth="68" frameHeight="19"/>
|
||||
<SubTexture name="diacritic-stroke0-long-outline0003" x="464" y="689" width="68" height="19" frameX="-0" frameY="-0" frameWidth="68" frameHeight="19"/>
|
||||
<SubTexture name="diacritic-stroke0-short-fill0000" x="2" y="798" width="30" height="5" frameX="-0" frameY="-0" frameWidth="30" frameHeight="5"/>
|
||||
<SubTexture name="diacritic-stroke0-short-fill0001" x="2" y="798" width="30" height="5" frameX="-0" frameY="-0" frameWidth="30" frameHeight="5"/>
|
||||
<SubTexture name="diacritic-stroke0-short-fill0002" x="224" y="708" width="30" height="5" frameX="-0" frameY="-0" frameWidth="30" frameHeight="5"/>
|
||||
<SubTexture name="diacritic-stroke0-short-fill0003" x="224" y="708" width="30" height="5" frameX="-0" frameY="-0" frameWidth="30" frameHeight="5"/>
|
||||
<SubTexture name="diacritic-stroke0-short-outline0000" x="355" y="270" width="43" height="17" frameX="-0" frameY="-0" frameWidth="43" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-stroke0-short-outline0001" x="355" y="270" width="43" height="17" frameX="-0" frameY="-0" frameWidth="43" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-stroke0-short-outline0002" x="407" y="336" width="43" height="17" frameX="-0" frameY="-0" frameWidth="43" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-stroke0-short-outline0003" x="407" y="336" width="43" height="17" frameX="-0" frameY="-0" frameWidth="43" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-stroke30-fill0000" x="464" y="710" width="50" height="22" frameX="-0" frameY="-0" frameWidth="50" frameHeight="22"/>
|
||||
<SubTexture name="diacritic-stroke30-fill0001" x="464" y="710" width="50" height="22" frameX="-0" frameY="-0" frameWidth="50" frameHeight="22"/>
|
||||
<SubTexture name="diacritic-stroke30-fill0002" x="516" y="713" width="50" height="22" frameX="-0" frameY="-0" frameWidth="50" frameHeight="22"/>
|
||||
<SubTexture name="diacritic-stroke30-fill0003" x="516" y="713" width="50" height="22" frameX="-0" frameY="-0" frameWidth="50" frameHeight="22"/>
|
||||
<SubTexture name="diacritic-stroke30-outline0000" x="541" y="677" width="62" height="34" frameX="-0" frameY="-0" frameWidth="62" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke30-outline0001" x="541" y="677" width="62" height="34" frameX="-0" frameY="-0" frameWidth="62" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke30-outline0002" x="662" y="2" width="62" height="34" frameX="-0" frameY="-0" frameWidth="62" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke30-outline0003" x="662" y="2" width="62" height="34" frameX="-0" frameY="-0" frameWidth="62" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke45-long-fill0000" x="541" y="618" width="47" height="56" frameX="-0" frameY="-0" frameWidth="47" frameHeight="57"/>
|
||||
<SubTexture name="diacritic-stroke45-long-fill0001" x="541" y="618" width="47" height="56" frameX="-0" frameY="-0" frameWidth="47" frameHeight="57"/>
|
||||
<SubTexture name="diacritic-stroke45-long-fill0002" x="590" y="619" width="47" height="56" frameX="-0" frameY="-0" frameWidth="47" frameHeight="57"/>
|
||||
<SubTexture name="diacritic-stroke45-long-fill0003" x="590" y="619" width="47" height="56" frameX="-0" frameY="-0" frameWidth="47" frameHeight="57"/>
|
||||
<SubTexture name="diacritic-stroke45-long-outline0000" x="150" y="142" width="60" height="69" frameX="-0" frameY="-0" frameWidth="60" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke45-long-outline0001" x="150" y="142" width="60" height="69" frameX="-0" frameY="-0" frameWidth="60" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke45-long-outline0002" x="159" y="2" width="60" height="69" frameX="-0" frameY="-0" frameWidth="60" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke45-long-outline0003" x="159" y="2" width="60" height="69" frameX="-0" frameY="-0" frameWidth="60" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke45-short-fill0000" x="313" y="707" width="30" height="34" frameX="-0" frameY="-0" frameWidth="30" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke45-short-fill0001" x="313" y="707" width="30" height="34" frameX="-0" frameY="-0" frameWidth="30" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke45-short-fill0002" x="345" y="710" width="30" height="34" frameX="-0" frameY="-0" frameWidth="30" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke45-short-fill0003" x="345" y="710" width="30" height="34" frameX="-0" frameY="-0" frameWidth="30" frameHeight="34"/>
|
||||
<SubTexture name="diacritic-stroke45-short-outline0000" x="418" y="641" width="44" height="49" frameX="-0" frameY="-0" frameWidth="44" frameHeight="49"/>
|
||||
<SubTexture name="diacritic-stroke45-short-outline0001" x="418" y="641" width="44" height="49" frameX="-0" frameY="-0" frameWidth="44" frameHeight="49"/>
|
||||
<SubTexture name="diacritic-stroke45-short-outline0002" x="685" y="639" width="44" height="49" frameX="-0" frameY="-0" frameWidth="44" frameHeight="49"/>
|
||||
<SubTexture name="diacritic-stroke45-short-outline0003" x="685" y="639" width="44" height="49" frameX="-0" frameY="-0" frameWidth="44" frameHeight="49"/>
|
||||
<SubTexture name="diacritic-stroke60-fill0000" x="689" y="345" width="30" height="69" frameX="-0" frameY="-0" frameWidth="31" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke60-fill0001" x="689" y="345" width="30" height="69" frameX="-0" frameY="-0" frameWidth="31" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke60-fill0002" x="695" y="274" width="30" height="69" frameX="-0" frameY="-0" frameWidth="31" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke60-fill0003" x="695" y="274" width="30" height="69" frameX="-0" frameY="-0" frameWidth="31" frameHeight="69"/>
|
||||
<SubTexture name="diacritic-stroke60-outline0000" x="327" y="2" width="45" height="81" frameX="-0" frameY="-0" frameWidth="45" frameHeight="81"/>
|
||||
<SubTexture name="diacritic-stroke60-outline0001" x="327" y="2" width="45" height="81" frameX="-0" frameY="-0" frameWidth="45" frameHeight="81"/>
|
||||
<SubTexture name="diacritic-stroke60-outline0002" x="2" y="358" width="45" height="81" frameX="-0" frameY="-0" frameWidth="45" frameHeight="81"/>
|
||||
<SubTexture name="diacritic-stroke60-outline0003" x="2" y="358" width="45" height="81" frameX="-0" frameY="-0" frameWidth="45" frameHeight="81"/>
|
||||
<SubTexture name="diacritic-stroke90-long-fill0000" x="661" y="724" width="7" height="70" frameX="-0" frameY="-0" frameWidth="8" frameHeight="70"/>
|
||||
<SubTexture name="diacritic-stroke90-long-fill0001" x="661" y="724" width="7" height="70" frameX="-0" frameY="-0" frameWidth="8" frameHeight="70"/>
|
||||
<SubTexture name="diacritic-stroke90-long-fill0002" x="203" y="564" width="7" height="69" frameX="-0" frameY="-1" frameWidth="8" frameHeight="70"/>
|
||||
<SubTexture name="diacritic-stroke90-long-fill0003" x="203" y="564" width="7" height="69" frameX="-0" frameY="-1" frameWidth="8" frameHeight="70"/>
|
||||
<SubTexture name="diacritic-stroke90-long-outline0000" x="697" y="176" width="19" height="83" frameX="-0" frameY="-0" frameWidth="19" frameHeight="83"/>
|
||||
<SubTexture name="diacritic-stroke90-long-outline0001" x="697" y="176" width="19" height="83" frameX="-0" frameY="-0" frameWidth="19" frameHeight="83"/>
|
||||
<SubTexture name="diacritic-stroke90-long-outline0002" x="718" y="176" width="19" height="83" frameX="-0" frameY="-0" frameWidth="19" frameHeight="83"/>
|
||||
<SubTexture name="diacritic-stroke90-long-outline0003" x="718" y="176" width="19" height="83" frameX="-0" frameY="-0" frameWidth="19" frameHeight="83"/>
|
||||
<SubTexture name="diacritic-stroke90-short-fill0000" x="443" y="764" width="7" height="39" frameX="-0" frameY="-0" frameWidth="7" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-stroke90-short-fill0001" x="443" y="764" width="7" height="39" frameX="-0" frameY="-0" frameWidth="7" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-stroke90-short-fill0002" x="213" y="494" width="7" height="39" frameX="-0" frameY="-0" frameWidth="7" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-stroke90-short-fill0003" x="213" y="494" width="7" height="39" frameX="-0" frameY="-0" frameWidth="7" frameHeight="39"/>
|
||||
<SubTexture name="diacritic-stroke90-short-outline0000" x="739" y="688" width="19" height="51" frameX="-0" frameY="-0" frameWidth="19" frameHeight="51"/>
|
||||
<SubTexture name="diacritic-stroke90-short-outline0001" x="739" y="688" width="19" height="51" frameX="-0" frameY="-0" frameWidth="19" frameHeight="51"/>
|
||||
<SubTexture name="diacritic-stroke90-short-outline0002" x="739" y="741" width="19" height="51" frameX="-0" frameY="-0" frameWidth="19" frameHeight="51"/>
|
||||
<SubTexture name="diacritic-stroke90-short-outline0003" x="739" y="741" width="19" height="51" frameX="-0" frameY="-0" frameWidth="19" frameHeight="51"/>
|
||||
<SubTexture name="diacritic-tilde-fill0000" x="599" y="421" width="33" height="14" frameX="-1" frameY="-1" frameWidth="34" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-tilde-fill0001" x="599" y="421" width="33" height="14" frameX="-1" frameY="-1" frameWidth="34" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-tilde-fill0002" x="467" y="210" width="33" height="14" frameX="-1" frameY="-1" frameWidth="34" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-tilde-fill0003" x="467" y="210" width="33" height="14" frameX="-1" frameY="-1" frameWidth="34" frameHeight="15"/>
|
||||
<SubTexture name="diacritic-tilde-outline0000" x="722" y="448" width="44" height="26" frameX="-0" frameY="-0" frameWidth="44" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-tilde-outline0001" x="722" y="448" width="44" height="26" frameX="-0" frameY="-0" frameWidth="44" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-tilde-outline0002" x="418" y="692" width="44" height="26" frameX="-0" frameY="-0" frameWidth="44" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-tilde-outline0003" x="418" y="692" width="44" height="26" frameX="-0" frameY="-0" frameWidth="44" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-titlo-fill0000" x="644" y="484" width="37" height="16" frameX="-0" frameY="-1" frameWidth="37" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-titlo-fill0001" x="644" y="484" width="37" height="16" frameX="-0" frameY="-1" frameWidth="37" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-titlo-fill0002" x="687" y="615" width="37" height="16" frameX="-0" frameY="-1" frameWidth="37" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-titlo-fill0003" x="687" y="615" width="37" height="16" frameX="-0" frameY="-1" frameWidth="37" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-titlo-outline0000" x="713" y="516" width="47" height="26" frameX="-0" frameY="-0" frameWidth="47" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-titlo-outline0001" x="713" y="516" width="47" height="26" frameX="-0" frameY="-0" frameWidth="47" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-titlo-outline0002" x="713" y="544" width="47" height="26" frameX="-0" frameY="-0" frameWidth="47" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-titlo-outline0003" x="713" y="544" width="47" height="26" frameX="-0" frameY="-0" frameWidth="47" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-verticalline-fill0000" x="672" y="700" width="8" height="15" frameX="-0" frameY="-1" frameWidth="8" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-verticalline-fill0001" x="672" y="700" width="8" height="15" frameX="-0" frameY="-1" frameWidth="8" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-verticalline-fill0002" x="301" y="718" width="8" height="15" frameX="-0" frameY="-1" frameWidth="8" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-verticalline-fill0003" x="301" y="718" width="8" height="15" frameX="-0" frameY="-1" frameWidth="8" frameHeight="17"/>
|
||||
<SubTexture name="diacritic-verticalline-outline0000" x="215" y="765" width="18" height="27" frameX="-0" frameY="-0" frameWidth="18" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-verticalline-outline0001" x="215" y="765" width="18" height="27" frameX="-0" frameY="-0" frameWidth="18" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-verticalline-outline0002" x="269" y="756" width="18" height="27" frameX="-0" frameY="-0" frameWidth="18" frameHeight="27"/>
|
||||
<SubTexture name="diacritic-verticalline-outline0003" x="269" y="756" width="18" height="27" frameX="-0" frameY="-0" frameWidth="18" frameHeight="27"/>
|
||||
</TextureAtlas>
|
||||
@@ -42,8 +42,7 @@
|
||||
|
||||
<str id="category.engine">Engine</str>
|
||||
<group name="engine" prefix="engine.">
|
||||
<!-- Change this to / when alphabet has it -->
|
||||
<str id="switchMod">Change Mod or Mode</str>
|
||||
<str id="switchMod">Mod/Mode</str>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ class EditorPickerOption extends FlxTypedSpriteGroup<FlxSprite> {
|
||||
iconSpr.x = 25 + ((height - iconSpr.width) / 2);
|
||||
iconSpr.y = (height - iconSpr.height) / 2;
|
||||
|
||||
label = new Alphabet(25 + iconSpr.width + 25, 0, name, true);
|
||||
label = new Alphabet(25 + iconSpr.width + 25, 0, name, "bold");
|
||||
label.y = (height - label.height) / 2;
|
||||
|
||||
selectionBG = new FlxSprite().makeGraphic(1, 1, -1);
|
||||
|
||||
@@ -13,7 +13,7 @@ class BetaWarningState extends MusicBeatState {
|
||||
public override function create() {
|
||||
super.create();
|
||||
|
||||
titleAlphabet = new Alphabet(0, 0, TU.translate("betaWarning.title"), true);
|
||||
titleAlphabet = new Alphabet(0, 0, TU.translate("betaWarning.title"), "bold");
|
||||
titleAlphabet.screenCenter(X);
|
||||
add(titleAlphabet);
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ class FreeplayState extends MusicBeatState
|
||||
|
||||
for (i in 0...songs.length)
|
||||
{
|
||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, songs[i].displayName, true, false);
|
||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, songs[i].displayName, "bold");
|
||||
songText.isMenuItem = true;
|
||||
songText.targetY = i;
|
||||
grpSongs.add(songText);
|
||||
|
||||
@@ -28,7 +28,7 @@ class ModSwitchMenu extends MusicBeatSubstate {
|
||||
|
||||
alphabets = new FlxTypedGroup<Alphabet>();
|
||||
for(mod in mods) {
|
||||
var a = new Alphabet(0, 0, mod == null ? TU.translate("mods.disableMods") : mod, true);
|
||||
var a = new Alphabet(0, 0, mod == null ? TU.translate("mods.disableMods") : mod, "bold");
|
||||
if(mod == ModsFolder.currentModFolder)
|
||||
a.color = FlxColor.LIME;
|
||||
a.isMenuItem = true;
|
||||
|
||||
@@ -107,7 +107,7 @@ class PauseSubState extends MusicBeatSubstate
|
||||
for (i in 0...menuItems.length)
|
||||
{
|
||||
var pauseId = "pause." + TU.raw2Id(menuItems[i]);
|
||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, TU.translate(pauseId), true, false);
|
||||
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, TU.translate(pauseId), "bold");
|
||||
songText.isMenuItem = true;
|
||||
songText.targetY = i;
|
||||
grpMenuShit.add(songText);
|
||||
|
||||
@@ -40,7 +40,7 @@ class PlaytestingWarningSubstate extends MusicBeatSubstate
|
||||
bg.scrollFactor.set();
|
||||
add(bg);
|
||||
|
||||
titleAlphabet = new Alphabet(0, 140, TU.translate("playtesting.warningTitle"), true);
|
||||
titleAlphabet = new Alphabet(0, 140, TU.translate("playtesting.warningTitle"), "bold");
|
||||
titleAlphabet.screenCenter(X);
|
||||
add(titleAlphabet);
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@ class TitleState extends MusicBeatState
|
||||
for (i=>text in textArray)
|
||||
{
|
||||
if (text == "" || text == null) continue;
|
||||
var money:Alphabet = new Alphabet(0, (i * 60) + 200, text, true, false);
|
||||
var money:Alphabet = new Alphabet(0, (i * 60) + 200, text, "bold");
|
||||
money.screenCenter(X);
|
||||
textGroup.add(money);
|
||||
}
|
||||
@@ -183,7 +183,7 @@ class TitleState extends MusicBeatState
|
||||
|
||||
public function addMoreText(text:String)
|
||||
{
|
||||
var coolText:Alphabet = new Alphabet(0, (textGroup.length * 60) + 200, text, true, false);
|
||||
var coolText:Alphabet = new Alphabet(0, (textGroup.length * 60) + 200, text, "bold");
|
||||
coolText.screenCenter(X);
|
||||
textGroup.add(coolText);
|
||||
}
|
||||
|
||||
+607
-243
@@ -1,284 +1,648 @@
|
||||
package funkin.menus.ui;
|
||||
|
||||
import flixel.group.FlxSpriteGroup;
|
||||
import flixel.util.FlxColor;
|
||||
import flixel.util.FlxTimer;
|
||||
import funkin.backend.assets.AssetsLibraryList;
|
||||
import funkin.backend.assets.IModsAssetLibrary;
|
||||
import funkin.backend.assets.LimeLibrarySymbol;
|
||||
import flixel.util.typeLimit.OneOfTwo;
|
||||
import haxe.ds.Vector;
|
||||
import funkin.menus.ui.effects.RegionEffect;
|
||||
|
||||
import flixel.animation.FlxAnimation;
|
||||
import flixel.util.FlxDirectionFlags;
|
||||
import flixel.math.FlxPoint;
|
||||
import flixel.math.FlxAngle;
|
||||
import flixel.FlxTypes;
|
||||
|
||||
import haxe.xml.Access;
|
||||
import openfl.utils.AssetLibrary;
|
||||
|
||||
using StringTools;
|
||||
using flixel.util.FlxColorTransformUtil;
|
||||
|
||||
/**
|
||||
* Loosely based on FlxTypeText lolol
|
||||
*/
|
||||
class Alphabet extends FlxSpriteGroup
|
||||
{
|
||||
public var delay:Float = 0.05;
|
||||
public var paused:Bool = false;
|
||||
@:structInit
|
||||
final class AlphabetComponent {
|
||||
public var anim:String;
|
||||
public var x:Float;
|
||||
public var y:Float;
|
||||
|
||||
// Precalculated values for angle
|
||||
public var shouldRotate:Bool;
|
||||
public var sin:Float;
|
||||
public var cos:Float;
|
||||
public var scaleX:Float;
|
||||
public var scaleY:Float;
|
||||
|
||||
public var hasColorMode:Bool;
|
||||
public var colorMode:ColorMode;
|
||||
}
|
||||
|
||||
@:structInit
|
||||
final class AlphabetLetterData {
|
||||
@:optional public var isDefault:Bool = false;
|
||||
public var advance:Float;
|
||||
public var advanceEmpty:Bool;
|
||||
public var components:Array<AlphabetComponent>;
|
||||
}
|
||||
|
||||
enum abstract AlphabetAlignment(ByteUInt) from ByteUInt to ByteUInt {
|
||||
var LEFT;
|
||||
var CENTER;
|
||||
var RIGHT;
|
||||
|
||||
public function getMultiplier():Float {
|
||||
return switch(this) {
|
||||
case CENTER: 0.5;
|
||||
case RIGHT: 1.0;
|
||||
default: 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
@:from
|
||||
public static function fromString(value:String):AlphabetAlignment
|
||||
return switch(value) {
|
||||
case "left": LEFT;
|
||||
case "center": CENTER;
|
||||
case "right": RIGHT;
|
||||
default: LEFT;
|
||||
}
|
||||
}
|
||||
|
||||
enum abstract CaseMode(ByteUInt) from ByteUInt to ByteUInt {
|
||||
var NONE;
|
||||
var UPPER;
|
||||
var LOWER;
|
||||
|
||||
@:from
|
||||
public static function fromString(value:String):CaseMode
|
||||
return switch(value) {
|
||||
case "none": NONE;
|
||||
case "upper": UPPER;
|
||||
case "lower": LOWER;
|
||||
default: NONE;
|
||||
}
|
||||
}
|
||||
|
||||
enum abstract ColorMode(ByteInt) from ByteInt to ByteInt {
|
||||
var TINT = 0;
|
||||
var OFFSET = 1;
|
||||
var NONE = 2;
|
||||
|
||||
public function setColorTransform(color:openfl.geom.ColorTransform, red:Float, green:Float, blue:Float, alpha:Float) {
|
||||
var moduloWorkaround:Int = this;
|
||||
var tintMult = Math.max(-moduloWorkaround + 1, 0);
|
||||
var tintOffset = Math.min(moduloWorkaround, 1);
|
||||
var offsetMult = (moduloWorkaround % 2) * 255;
|
||||
|
||||
color.redMultiplier = red * tintMult + tintOffset;
|
||||
color.greenMultiplier = green * tintMult + tintOffset;
|
||||
color.blueMultiplier = blue * tintMult + tintOffset;
|
||||
color.redOffset = red * offsetMult;
|
||||
color.greenOffset = green * offsetMult;
|
||||
color.blueOffset = blue * offsetMult;
|
||||
color.alphaMultiplier = alpha;
|
||||
}
|
||||
}
|
||||
|
||||
class Alphabet extends FlxSprite {
|
||||
public var effects:Array<RegionEffect> = [];
|
||||
var __renderData:AlphabetRenderData;
|
||||
var __component:AlphabetComponent;
|
||||
|
||||
public var text(default, set):String = "";
|
||||
@:isVar public var textWidth(get, set):Float;
|
||||
public var textHeight(get, null):Float;
|
||||
|
||||
public var alignment:AlphabetAlignment = LEFT;
|
||||
public var forceCase:CaseMode = NONE;
|
||||
|
||||
var __laneWidths:Array<Float> = []; // TODO: add alignment.
|
||||
var __forceWidth:Float = 0.0; // TODO: implement functionality for this.
|
||||
var __queueResize:Bool = false;
|
||||
var __animTime:Float = 0.0;
|
||||
var __ogForceScreen:Bool = false;
|
||||
|
||||
public var originOffset:FlxPoint = FlxPoint.get();
|
||||
|
||||
public var font(default, set):String;
|
||||
var colorMode:ColorMode = TINT;
|
||||
var defaultAdvance:Float = 40.0;
|
||||
var lineGap:Float = 75.0;
|
||||
var fps:Float = 24.0;
|
||||
var letterData:Map<String, AlphabetLetterData> = [];
|
||||
var defaults:Vector<AlphabetLetterData> = {
|
||||
var v = new Vector(3);
|
||||
v[0] = null;
|
||||
v[1] = null;
|
||||
v[2] = null;
|
||||
v;
|
||||
};
|
||||
var loaded:Vector<Array<String>> = {
|
||||
var v = new Vector(3);
|
||||
v[0] = [];
|
||||
v[1] = [];
|
||||
v[2] = [];
|
||||
v;
|
||||
};
|
||||
var failedLetters:Array<String> = [];
|
||||
|
||||
// for menu shit
|
||||
public var targetY:Float = 0;
|
||||
public var isMenuItem:Bool = false;
|
||||
|
||||
public var text:String = "";
|
||||
|
||||
var _finalText:String = "";
|
||||
var _curText:String = "";
|
||||
|
||||
var yMulti:Float = 1;
|
||||
|
||||
// custom shit
|
||||
// amp, backslash, question mark, apostrophy, comma, angry faic, period
|
||||
var lastSprite:AlphaCharacter;
|
||||
var xPosResetted:Bool = false;
|
||||
|
||||
var splitWords:Array<String> = [];
|
||||
|
||||
var isBold:Bool = false;
|
||||
|
||||
private override function set_color(c:Int):Int {
|
||||
for(e in group.members) {
|
||||
if (e is AlphaCharacter) {
|
||||
var char:AlphaCharacter = cast e;
|
||||
char.setColor(c, isBold);
|
||||
}
|
||||
}
|
||||
return super.set_color(c);
|
||||
}
|
||||
|
||||
// TODO: fix this shit refreshing
|
||||
public function refreshAlphabetXML(path:String) {
|
||||
AlphaCharacter.__alphaPath = Paths.getAssetsRoot() + path;
|
||||
try {
|
||||
var xml = new Access(Xml.parse(Assets.getText(path)).firstElement());
|
||||
AlphaCharacter.boldAnims = [];
|
||||
AlphaCharacter.letterAnims = [];
|
||||
AlphaCharacter.boldAlphabetPath = AlphaCharacter.letterAlphabetPath = 'ui/alphabet';
|
||||
|
||||
for(e in xml.elements) {
|
||||
var bold = e.name == "bold";
|
||||
var list = bold ? AlphaCharacter.boldAnims : AlphaCharacter.letterAnims;
|
||||
if (e.has.spritesheet) {
|
||||
if (bold)
|
||||
AlphaCharacter.boldAlphabetPath = e.att.spritesheet;
|
||||
else
|
||||
AlphaCharacter.letterAlphabetPath = e.att.spritesheet;
|
||||
}
|
||||
for(e in e.nodes.letter) {
|
||||
if (!e.has.char || !e.has.anim) continue;
|
||||
var name = e.att.char;
|
||||
var anim = e.att.anim;
|
||||
list[name] = anim;
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
trace(e.details());
|
||||
}
|
||||
}
|
||||
public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false)
|
||||
{
|
||||
public function new(?x:Float, ?y:Float, ?text:String = "", ?font:OneOfTwo<String, Bool> = "normal") {
|
||||
super(x, y);
|
||||
this.text = text;
|
||||
this.font = (font is String) ? font : ((font == true) ? "bold" : "normal"); // == true just in case
|
||||
this.__renderData = new AlphabetRenderData(this);
|
||||
}
|
||||
|
||||
_finalText = this.text = text;
|
||||
isBold = bold;
|
||||
|
||||
var alphabetPath = Paths.xml("alphabet");
|
||||
if (Paths.getAssetsRoot() + alphabetPath != AlphaCharacter.__alphaPath) {
|
||||
refreshAlphabetXML(alphabetPath);
|
||||
}
|
||||
#if MOD_SUPPORT else {
|
||||
var libThing = new LimeLibrarySymbol(alphabetPath);
|
||||
if (libThing.library is AssetLibrary) {
|
||||
var library = AssetsLibraryList.getCleanLibrary(libThing.library);
|
||||
if (library is IModsAssetLibrary) {
|
||||
var modLib = cast(library, IModsAssetLibrary);
|
||||
@:privateAccess
|
||||
if (!modLib.__isCacheValid(library.cachedBytes, libThing.symbolName)) {
|
||||
refreshAlphabetXML(alphabetPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
override function update(elapsed:Float):Void {
|
||||
//super.update(elapsed);
|
||||
// FLXOBJECT UPDATE
|
||||
#if FLX_DEBUG
|
||||
@:privateAccess FlxBasic.activeCount += 1;
|
||||
#end
|
||||
|
||||
if (text != "")
|
||||
{
|
||||
if (typed)
|
||||
{
|
||||
startTypedText();
|
||||
}
|
||||
else
|
||||
{
|
||||
addText();
|
||||
}
|
||||
}
|
||||
}
|
||||
last.set(x, y);
|
||||
|
||||
public function addText()
|
||||
{
|
||||
doSplitWords();
|
||||
if (path != null && path.active)
|
||||
path.update(elapsed);
|
||||
|
||||
var xPos:Float = 0;
|
||||
var curRow:Int = 0;
|
||||
for (i=>character in splitWords)
|
||||
{
|
||||
if (lastSprite != null)
|
||||
xPos = lastSprite.x + lastSprite.width - x;
|
||||
if (moves)
|
||||
updateMotion(elapsed);
|
||||
|
||||
if (xPosResetted && !(xPosResetted = false)) xPos = 0;
|
||||
wasTouching = touching;
|
||||
touching = FlxDirectionFlags.NONE;
|
||||
// FLXOBJECT UPDATE END
|
||||
|
||||
var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
|
||||
letter.row = curRow;
|
||||
if (isBold)
|
||||
letter.createBold(character);
|
||||
else
|
||||
letter.createLetter(character);
|
||||
__animTime += elapsed;
|
||||
for (effect in effects)
|
||||
effect.effectTime += elapsed * effect.speed;
|
||||
|
||||
// anim not found
|
||||
if (!letter.visible)
|
||||
xPos += 40;
|
||||
|
||||
letter.setColor(color, isBold);
|
||||
add(letter);
|
||||
|
||||
lastSprite = letter;
|
||||
if (_finalText.fastCodeAt(i) == "\n".code)
|
||||
{
|
||||
xPosResetted = true;
|
||||
curRow += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function doSplitWords():Void
|
||||
{
|
||||
splitWords = _finalText.split("");
|
||||
}
|
||||
|
||||
//public var personTalking:String = 'gf';
|
||||
|
||||
public function startTypedText():Void
|
||||
{
|
||||
_finalText = text;
|
||||
doSplitWords();
|
||||
|
||||
// trace(arrayShit);
|
||||
|
||||
var loopNum:Int = 0;
|
||||
|
||||
var xPos:Float = 0;
|
||||
var curRow:Int = 0;
|
||||
|
||||
new FlxTimer().start(0.05, function(tmr:FlxTimer)
|
||||
{
|
||||
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
|
||||
if (_finalText.fastCodeAt(loopNum) == "\n".code)
|
||||
{
|
||||
yMulti += 1;
|
||||
xPosResetted = true;
|
||||
xPos = 0;
|
||||
curRow += 1;
|
||||
}
|
||||
loopNum += 1;
|
||||
|
||||
tmr.time = FlxG.random.float(0.04, 0.09);
|
||||
}, splitWords.length);
|
||||
}
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
super.update(elapsed);
|
||||
|
||||
if (isMenuItem)
|
||||
{
|
||||
var scaledY = FlxMath.remapToRange(targetY, 0, 1, 0, 1.3);
|
||||
if (isMenuItem) {
|
||||
var scaledY = targetY * 1.3;
|
||||
|
||||
y = CoolUtil.fpsLerp(y, (scaledY * 120) + (FlxG.height * 0.48), 0.16);
|
||||
x = CoolUtil.fpsLerp(x, (targetY * 20) + 90, 0.16);
|
||||
}
|
||||
|
||||
if (text != _finalText) {
|
||||
_finalText = text;
|
||||
for(e in members)
|
||||
e.destroy();
|
||||
members.clear();
|
||||
lastSprite = null;
|
||||
addText();
|
||||
}
|
||||
}
|
||||
|
||||
override function draw() {
|
||||
override function draw():Void {
|
||||
__ogForceScreen = forceIsOnScreen;
|
||||
forceIsOnScreen = true;
|
||||
super.draw();
|
||||
}
|
||||
}
|
||||
|
||||
class AlphaCharacter extends FlxSprite
|
||||
{
|
||||
@:dox(hide) @:noCompletion public static var __alphaPath:String = null;
|
||||
override function isSimpleRender(?camera:FlxCamera):Bool {
|
||||
return false; // maybe ill get simple render working another time??? not right now tho.
|
||||
}
|
||||
|
||||
public static var letterAlphabetPath:String;
|
||||
public static var boldAlphabetPath:String;
|
||||
override function drawComplex(camera:FlxCamera):Void {
|
||||
forceIsOnScreen = __ogForceScreen;
|
||||
|
||||
public static var boldAnims:Map<String, String> = [];
|
||||
public static var letterAnims:Map<String, String> = [];
|
||||
if (__queueResize)
|
||||
recalcSizes();
|
||||
var curLine = 0;
|
||||
var lastLine = 0;
|
||||
var daText = switch (forceCase) {
|
||||
case UPPER: text.toUpperCase();
|
||||
case LOWER: text.toLowerCase();
|
||||
case NONE: text;
|
||||
}
|
||||
|
||||
public var row:Int = 0;
|
||||
var alignmentMultiplier = alignment.getMultiplier();
|
||||
|
||||
public function setColor(c:FlxColor, isBold:Bool) {
|
||||
if (isBold) {
|
||||
colorTransform.redMultiplier = c.redFloat;
|
||||
colorTransform.greenMultiplier = c.greenFloat;
|
||||
colorTransform.blueMultiplier = c.blueFloat;
|
||||
} else {
|
||||
colorTransform.redOffset = c.red;
|
||||
colorTransform.greenOffset = c.green;
|
||||
colorTransform.blueOffset = c.blue;
|
||||
var ogOffX = frameOffset.x;
|
||||
var ogOffY = frameOffset.y;
|
||||
frameOffset.x -= (textWidth - __laneWidths[0]) * alignmentMultiplier;
|
||||
|
||||
var isGraphicsShader = shader != null && shader is flixel.graphics.tile.FlxGraphicsShader;
|
||||
var ogRed:Float = colorTransform.redMultiplier;
|
||||
var ogGreen:Float = colorTransform.greenMultiplier;
|
||||
var ogBlue:Float = colorTransform.blueMultiplier;
|
||||
var ogAlpha:Float = colorTransform.alphaMultiplier;
|
||||
|
||||
var frameTime = Math.floor(__animTime * fps);
|
||||
|
||||
for (i in 0...daText.length) {
|
||||
__renderData.reset(this, ogRed, ogGreen, ogBlue, ogAlpha, daText.charAt(i));
|
||||
for (effect in effects) {
|
||||
if (effect.willModify(i, i - lastLine, __renderData))
|
||||
effect.modify(i, i - lastLine, __renderData);
|
||||
}
|
||||
|
||||
var letter = __renderData.letter;
|
||||
if (letter == "\n") {
|
||||
curLine++;
|
||||
lastLine = i + 1;
|
||||
frameOffset.x = ogOffX - (textWidth - __laneWidths[curLine]) * alignmentMultiplier;
|
||||
frameOffset.y -= lineGap;
|
||||
continue;
|
||||
}
|
||||
|
||||
var data = getData(letter);
|
||||
|
||||
if (data == null) {
|
||||
frameOffset.x -= defaultAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
var advance:Float = Math.NaN;
|
||||
|
||||
for (i in 0...data.components.length) {
|
||||
__component = data.components[i];
|
||||
var anim = getLetterAnim(letter, data, __component, i);
|
||||
advance = (Math.isNaN(advance)) ? getAdvance(letter, anim, data) : advance;
|
||||
|
||||
if (anim == null || __renderData.alpha <= 0.0)
|
||||
break; // shouldnt this be like continue?
|
||||
|
||||
var frameToGet = frameTime % anim.numFrames;
|
||||
frame = frames.frames[anim.frames[frameToGet]];
|
||||
|
||||
var offsetX = __component.x + __renderData.offsetX;
|
||||
var offsetY = frame.sourceSize.y - lineGap + __component.y + __renderData.offsetY;
|
||||
frameOffset.x += offsetX;
|
||||
frameOffset.y += offsetY;
|
||||
if (!isOnScreen(camera)) {
|
||||
frameOffset.y -= offsetY;
|
||||
frameOffset.x -= offsetX;
|
||||
break;
|
||||
}
|
||||
if (isGraphicsShader)
|
||||
shader.setCamSize(_frame.frame.x, _frame.frame.y, _frame.frame.width, _frame.frame.height);
|
||||
|
||||
if (__component.hasColorMode)
|
||||
__component.colorMode.setColorTransform(colorTransform, __renderData.red, __renderData.green, __renderData.blue, __renderData.alpha);
|
||||
else
|
||||
colorMode.setColorTransform(colorTransform, __renderData.red, __renderData.green, __renderData.blue, __renderData.alpha);
|
||||
|
||||
drawLetter(camera);
|
||||
frameOffset.y -= offsetY;
|
||||
frameOffset.x -= offsetX;
|
||||
}
|
||||
frameOffset.x -= advance;
|
||||
}
|
||||
__component = null;
|
||||
|
||||
setColorTransform(ogRed, ogGreen, ogBlue, ogAlpha, 0, 0, 0, 0);
|
||||
frameOffset.set(ogOffX, ogOffY);
|
||||
}
|
||||
|
||||
function drawLetter(camera) {
|
||||
_frame.prepareMatrix(_matrix, ANGLE_0, checkFlipX() != camera.flipX, checkFlipY() != camera.flipY);
|
||||
|
||||
_matrix.translate(_frame.frame.width * -0.5, _frame.frame.height * -0.5);
|
||||
_matrix.scale(__component.scaleX, __component.scaleY);
|
||||
if(__component.shouldRotate) _matrix.rotateWithTrig(__component.cos, __component.sin);
|
||||
_matrix.translate(_frame.frame.width * 0.5, _frame.frame.height * 0.5);
|
||||
|
||||
_matrix.translate(-origin.x, -origin.y);
|
||||
|
||||
if (frameOffsetAngle != null && frameOffsetAngle != angle)
|
||||
{
|
||||
var angleOff = (frameOffsetAngle - angle) * FlxAngle.TO_RAD;
|
||||
var cos = Math.cos(angleOff);
|
||||
var sin = Math.sin(angleOff);
|
||||
// cos doesnt need to be negated
|
||||
_matrix.rotateWithTrig(cos, -sin);
|
||||
_matrix.translate(-frameOffset.x, -frameOffset.y);
|
||||
_matrix.rotateWithTrig(cos, sin);
|
||||
}
|
||||
else
|
||||
_matrix.translate(-frameOffset.x, -frameOffset.y);
|
||||
|
||||
_matrix.scale(scale.x, scale.y);
|
||||
|
||||
if (bakedRotationAngle <= 0)
|
||||
{
|
||||
updateTrig();
|
||||
|
||||
if (angle != 0)
|
||||
_matrix.rotateWithTrig(_cosAngle, _sinAngle);
|
||||
}
|
||||
|
||||
getScreenPosition(_point, camera).subtractPoint(offset);
|
||||
_point.add(origin.x, origin.y);
|
||||
_matrix.translate(_point.x, _point.y);
|
||||
|
||||
if (isPixelPerfectRender(camera))
|
||||
{
|
||||
_matrix.tx = Math.floor(_matrix.tx);
|
||||
_matrix.ty = Math.floor(_matrix.ty);
|
||||
}
|
||||
|
||||
doAdditionalMatrixStuff(_matrix, camera);
|
||||
|
||||
if (layer != null)
|
||||
layer.drawPixels(this, camera, _frame, framePixels, _matrix, colorTransform, blend, antialiasing, shaderEnabled ? shader : null);
|
||||
else
|
||||
camera.drawPixels(_frame, framePixels, _matrix, colorTransform, blend, antialiasing, shaderEnabled ? shader : null);
|
||||
}
|
||||
|
||||
override function updateHitbox():Void {
|
||||
offset.set(-0.5 * (width - textWidth), -0.5 * (height - textHeight));
|
||||
origin.set(textWidth * 0.5 + originOffset.x, textHeight * 0.5 + originOffset.y);
|
||||
}
|
||||
|
||||
function recalcSizes():Void {
|
||||
__queueResize = false;
|
||||
var curLine = 0;
|
||||
var daText = switch (forceCase) {
|
||||
case UPPER: text.toUpperCase();
|
||||
case LOWER: text.toLowerCase();
|
||||
case NONE: text;
|
||||
}
|
||||
@:bypassAccessor textWidth = 0;
|
||||
textHeight = lineGap;
|
||||
__laneWidths = [0];
|
||||
for (i in 0...daText.length) {
|
||||
var letter = daText.charAt(i);
|
||||
if (letter == "\n") {
|
||||
textHeight += lineGap;
|
||||
__laneWidths.push(0);
|
||||
curLine++;
|
||||
continue;
|
||||
}
|
||||
|
||||
var data = getData(letter);
|
||||
__laneWidths[curLine] += (data != null) ? getAdvance(letter, getLetterAnim(letter, data, data.components[0], 0), data) : defaultAdvance;
|
||||
@:bypassAccessor textWidth = Math.max(textWidth, __laneWidths[curLine]);
|
||||
}
|
||||
|
||||
origin.set(textWidth * 0.5 + originOffset.x, textHeight * 0.5 + originOffset.y);
|
||||
}
|
||||
|
||||
function getAdvance(letter:String, anim:FlxAnimation, data:AlphabetLetterData):Float {
|
||||
if (anim == null)
|
||||
return defaultAdvance;
|
||||
|
||||
if (data.advanceEmpty && !data.isDefault) {
|
||||
data.advanceEmpty = false;
|
||||
data.advance = frames.frames[anim.frames[0]].sourceSize.x;
|
||||
}
|
||||
return (data.isDefault) ? frames.frames[anim.frames[0]].sourceSize.x : data.advance;
|
||||
}
|
||||
|
||||
function getData(char:String):AlphabetLetterData {
|
||||
if (failedLetters.contains(char)) return null;
|
||||
for (i in 0...3) { // this feels wrong
|
||||
if (loaded[i].contains(char))
|
||||
return defaults[i];
|
||||
}
|
||||
|
||||
var data:AlphabetLetterData = null;
|
||||
if (letterData.exists(char))
|
||||
data = letterData.get(char);
|
||||
|
||||
if (data == null) {
|
||||
var charCode:Int = char.charCodeAt(0);
|
||||
if (charCode >= 'A'.code && charCode <= 'Z'.code && defaults[CaseMode.UPPER] != null)
|
||||
data = defaults[CaseMode.UPPER];
|
||||
else if (charCode >= 'a'.code && charCode <= 'z'.code && defaults[CaseMode.LOWER] != null)
|
||||
data = defaults[CaseMode.LOWER];
|
||||
else
|
||||
data = defaults[CaseMode.NONE];
|
||||
}
|
||||
|
||||
if(data == null) {
|
||||
failedLetters.push(char);
|
||||
return null;
|
||||
} else if (data.isDefault)
|
||||
loaded[defaultsIndexOf(data)].push(char);
|
||||
return data;
|
||||
}
|
||||
|
||||
final function defaultsIndexOf(data:AlphabetLetterData):Int {
|
||||
//while(i < defaults.length) {
|
||||
for(i in 0...3) {
|
||||
if(defaults[i] == data)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
function getLetterAnim(char:String, data:AlphabetLetterData, component:AlphabetComponent, index:Int):FlxAnimation {
|
||||
if (data == null) return null;
|
||||
var name = char + Std.string(index);
|
||||
if (animation.exists(name)) return animation.getByName(name);
|
||||
|
||||
var anim = (data.isDefault) ?
|
||||
component.anim.replace("LETTER", char) :
|
||||
component.anim;
|
||||
animation.addByPrefix(name, anim, fps);
|
||||
if (!animation.exists(name)) {
|
||||
failedLetters.push(char);
|
||||
return null;
|
||||
}
|
||||
return animation.getByName(name);
|
||||
}
|
||||
|
||||
function checkNode(node:Xml):Void {
|
||||
switch (node.nodeName) {
|
||||
case "spritesheet":
|
||||
if (frames == null)
|
||||
frames = Paths.getFrames(node.firstChild().nodeValue);
|
||||
else {
|
||||
for (frame in Paths.getFrames(node.firstChild().nodeValue).frames)
|
||||
frames.pushFrame(frame);
|
||||
}
|
||||
case "defaultAnim":
|
||||
var idx = ["UPPER", "LOWER"].indexOf(node.get("casing").toUpperCase()) + 1;
|
||||
|
||||
var rad:Float = Std.parseFloat(node.get("angle")).getDefaultFloat(0.0) * FlxAngle.TO_RAD;
|
||||
var angleCos = Math.cos(rad);
|
||||
var angleSin = Math.sin(rad);
|
||||
|
||||
var res:AlphabetLetterData = {
|
||||
isDefault: true,
|
||||
advance: 0.0,
|
||||
advanceEmpty: true,
|
||||
components: [{
|
||||
anim: node.firstChild().nodeValue,
|
||||
|
||||
x: 0.0,
|
||||
y: 0.0,
|
||||
scaleX: Std.parseFloat(node.get("scaleX")).getDefaultFloat(1.0),
|
||||
scaleY: Std.parseFloat(node.get("scaleY")).getDefaultFloat(1.0),
|
||||
|
||||
shouldRotate: rad != 0,
|
||||
cos: angleCos,
|
||||
sin: angleSin,
|
||||
|
||||
hasColorMode: false,
|
||||
colorMode: 0
|
||||
}]
|
||||
}
|
||||
|
||||
defaults[idx] = res;
|
||||
case "composite":
|
||||
if(!node.exists("char")) {
|
||||
Logs.error("<composite> must have a char attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
var char = node.get("char");
|
||||
var advance:Float = Std.parseFloat(node.get("advance"));
|
||||
var components:Array<AlphabetComponent> = [];
|
||||
for (component in node.elementsNamed("component")) {
|
||||
if(!component.exists("anim")) {
|
||||
Logs.error("<component> must have a anim attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
|
||||
var rad:Float = Std.parseFloat(component.get("angle")).getDefaultFloat(0.0) * FlxAngle.TO_RAD;
|
||||
var angleCos = Math.cos(rad);
|
||||
var angleSin = Math.sin(rad);
|
||||
|
||||
var xOff:Float = -Std.parseFloat(component.get("x")).getDefaultFloat(0.0);
|
||||
var yOff:Float = Std.parseFloat(component.get("y")).getDefaultFloat(0.0);
|
||||
|
||||
var colorMode = ["tint", "offsets", "none"].indexOf(component.get("colorMode"));
|
||||
|
||||
components.push({
|
||||
anim: component.get("anim"),
|
||||
|
||||
x: xOff,
|
||||
y: yOff,
|
||||
scaleX: Std.parseFloat(component.get("scaleX")).getDefaultFloat(1.0),
|
||||
scaleY: Std.parseFloat(component.get("scaleY")).getDefaultFloat(1.0),
|
||||
|
||||
shouldRotate: rad != 0,
|
||||
cos: angleCos,
|
||||
sin: angleSin,
|
||||
|
||||
hasColorMode: colorMode >= 0,
|
||||
colorMode: colorMode
|
||||
});
|
||||
}
|
||||
letterData.set(char, {
|
||||
isDefault: false,
|
||||
advance: advance,
|
||||
advanceEmpty: Math.isNaN(advance),
|
||||
components: components
|
||||
});
|
||||
case "anim":
|
||||
if(!node.exists("char")) {
|
||||
Logs.error("<anim> must have a char attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
var char = node.get("char");
|
||||
|
||||
var rad:Float = Std.parseFloat(node.get("angle")).getDefaultFloat(0.0) * FlxAngle.TO_RAD;
|
||||
var angleCos = Math.cos(rad);
|
||||
var angleSin = Math.sin(rad);
|
||||
|
||||
var xOff:Float = -Std.parseFloat(node.get("x")).getDefaultFloat(0.0);
|
||||
var yOff:Float = Std.parseFloat(node.get("y")).getDefaultFloat(0.0);
|
||||
var advance:Float = Std.parseFloat(node.get("advance"));
|
||||
|
||||
var colorMode = ["tint", "offsets", "none"].indexOf(node.get("colorMode"));
|
||||
|
||||
letterData.set(char, {
|
||||
isDefault: false,
|
||||
advance: advance,
|
||||
advanceEmpty: Math.isNaN(advance),
|
||||
components: [{
|
||||
anim: node.firstChild().nodeValue,
|
||||
|
||||
x: xOff,
|
||||
y: yOff,
|
||||
scaleX: Std.parseFloat(node.get("scaleX")).getDefaultFloat(1.0),
|
||||
scaleY: Std.parseFloat(node.get("scaleY")).getDefaultFloat(1.0),
|
||||
|
||||
shouldRotate: rad != 0,
|
||||
cos: angleCos,
|
||||
sin: angleSin,
|
||||
|
||||
hasColorMode: colorMode >= 0,
|
||||
colorMode: colorMode
|
||||
}]
|
||||
});
|
||||
case "languageSection": // used to only parse characters if a specific language is selected
|
||||
if(!node.exists("langs")) {
|
||||
Logs.error("<languageSection> must have a langs attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
var langs = [for (lang in node.get("langs").split(",")) lang.trim()];
|
||||
// maybe add a way to toggle this off? like force it to add all
|
||||
if (langs.contains(Options.language)) {
|
||||
for (langNode in node.elements())
|
||||
checkNode(langNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
public function new(x:Float, y:Float)
|
||||
{
|
||||
super(x, y);
|
||||
|
||||
antialiasing = true;
|
||||
}
|
||||
function loadFont(value:String):Void {
|
||||
__queueResize = true;
|
||||
|
||||
public function createBold(letter:String)
|
||||
{
|
||||
if(!boldAnims.exists(letter))
|
||||
letter = letter.toUpperCase();
|
||||
if (!boldAnims.exists(letter)) {
|
||||
visible = false;
|
||||
active = false;
|
||||
scale.set();
|
||||
width = 40;
|
||||
return;
|
||||
var xml:Xml = Xml.parse(Assets.getText(Paths.xml("alphabet/" + value))).firstElement();
|
||||
|
||||
// reset old values
|
||||
letterData = new Map();
|
||||
defaults = {
|
||||
var v = new Vector(3);
|
||||
v[0] = null;
|
||||
v[1] = null;
|
||||
v[2] = null;
|
||||
v;
|
||||
}
|
||||
frames = Paths.getFrames(boldAlphabetPath);
|
||||
animation.addByPrefix(letter, boldAnims[letter], 24);
|
||||
animation.play(letter);
|
||||
updateHitbox();
|
||||
|
||||
y += row * height;
|
||||
}
|
||||
|
||||
public function createLetter(letter:String):Void
|
||||
{
|
||||
if (!letterAnims.exists(letter)) {
|
||||
visible = false;
|
||||
active = false;
|
||||
scale.set();
|
||||
width = 40;
|
||||
return;
|
||||
loaded = {
|
||||
var v = new Vector(3);
|
||||
v[0] = [];
|
||||
v[1] = [];
|
||||
v[2] = [];
|
||||
v;
|
||||
}
|
||||
frames = Paths.getFrames(letterAlphabetPath);
|
||||
animation.addByPrefix(letter, letterAnims[letter], 24);
|
||||
animation.play(letter);
|
||||
updateHitbox();
|
||||
failedLetters = [];
|
||||
|
||||
y = (110 - height);
|
||||
y += row * 60;
|
||||
defaultAdvance = Std.parseFloat(xml.get("advance")).getDefaultFloat(40.0);
|
||||
lineGap = Std.parseFloat(xml.get("lineGap")).getDefaultFloat(75.0);
|
||||
fps = Std.parseFloat(xml.get("fps")).getDefaultFloat(24.0);
|
||||
forceCase = xml.get("forceCasing").getDefault("none").toLowerCase();
|
||||
colorMode = (["offsets", "none"].indexOf(xml.get("colorMode")) + 1);
|
||||
|
||||
frames = null;
|
||||
|
||||
for (node in xml.elements())
|
||||
checkNode(node);
|
||||
}
|
||||
}
|
||||
|
||||
override function destroy():Void {
|
||||
originOffset = FlxDestroyUtil.destroy(originOffset);
|
||||
failedLetters = [];
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
function get_textWidth():Float {
|
||||
if (__queueResize)
|
||||
recalcSizes();
|
||||
return textWidth;
|
||||
}
|
||||
function set_textWidth(value:Float):Float {
|
||||
if(!__queueResize)
|
||||
__queueResize = __forceWidth != value;
|
||||
return __forceWidth = value;
|
||||
}
|
||||
|
||||
override function get_width():Float {
|
||||
return textWidth * scale.x;
|
||||
}
|
||||
override function get_height():Float {
|
||||
return textHeight * scale.y;
|
||||
}
|
||||
|
||||
function get_textHeight():Float {
|
||||
if (__queueResize)
|
||||
recalcSizes();
|
||||
return textHeight;
|
||||
}
|
||||
|
||||
function set_text(value:String):String {
|
||||
if(!__queueResize)
|
||||
__queueResize = text != value;
|
||||
return text = value;
|
||||
}
|
||||
|
||||
function set_font(value:String):String {
|
||||
if (font != value) {
|
||||
loadFont(font = value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,284 @@
|
||||
package funkin.menus.ui;
|
||||
|
||||
import flixel.group.FlxSpriteGroup;
|
||||
import flixel.util.FlxColor;
|
||||
import flixel.util.FlxTimer;
|
||||
import funkin.backend.assets.AssetsLibraryList;
|
||||
import funkin.backend.assets.IModsAssetLibrary;
|
||||
import funkin.backend.assets.LimeLibrarySymbol;
|
||||
import haxe.xml.Access;
|
||||
import openfl.utils.AssetLibrary;
|
||||
|
||||
using StringTools;
|
||||
|
||||
/**
|
||||
* Loosely based on FlxTypeText lolol
|
||||
*/
|
||||
class ClassicAlphabet extends FlxSpriteGroup
|
||||
{
|
||||
public var delay:Float = 0.05;
|
||||
public var paused:Bool = false;
|
||||
|
||||
// for menu shit
|
||||
public var targetY:Float = 0;
|
||||
public var isMenuItem:Bool = false;
|
||||
|
||||
public var text:String = "";
|
||||
|
||||
var _finalText:String = "";
|
||||
var _curText:String = "";
|
||||
|
||||
var yMulti:Float = 1;
|
||||
|
||||
// custom shit
|
||||
// amp, backslash, question mark, apostrophy, comma, angry faic, period
|
||||
var lastSprite:AlphaCharacter;
|
||||
var xPosResetted:Bool = false;
|
||||
|
||||
var splitWords:Array<String> = [];
|
||||
|
||||
var isBold:Bool = false;
|
||||
|
||||
private override function set_color(c:Int):Int {
|
||||
for(e in group.members) {
|
||||
if (e is AlphaCharacter) {
|
||||
var char:AlphaCharacter = cast e;
|
||||
char.setColor(c, isBold);
|
||||
}
|
||||
}
|
||||
return super.set_color(c);
|
||||
}
|
||||
|
||||
// TODO: fix this shit refreshing
|
||||
public function refreshAlphabetXML(path:String) {
|
||||
AlphaCharacter.__alphaPath = Paths.getAssetsRoot() + path;
|
||||
try {
|
||||
var xml = new Access(Xml.parse(Assets.getText(path)).firstElement());
|
||||
AlphaCharacter.boldAnims = [];
|
||||
AlphaCharacter.letterAnims = [];
|
||||
AlphaCharacter.boldAlphabetPath = AlphaCharacter.letterAlphabetPath = 'ui/alphabet';
|
||||
|
||||
for(e in xml.elements) {
|
||||
var bold = e.name == "bold";
|
||||
var list = bold ? AlphaCharacter.boldAnims : AlphaCharacter.letterAnims;
|
||||
if (e.has.spritesheet) {
|
||||
if (bold)
|
||||
AlphaCharacter.boldAlphabetPath = e.att.spritesheet;
|
||||
else
|
||||
AlphaCharacter.letterAlphabetPath = e.att.spritesheet;
|
||||
}
|
||||
for(e in e.nodes.letter) {
|
||||
if (!e.has.char || !e.has.anim) continue;
|
||||
var name = e.att.char;
|
||||
var anim = e.att.anim;
|
||||
list[name] = anim;
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
trace(e.details());
|
||||
}
|
||||
}
|
||||
public function new(x:Float, y:Float, text:String = "", ?bold:Bool = false, typed:Bool = false)
|
||||
{
|
||||
super(x, y);
|
||||
|
||||
_finalText = this.text = text;
|
||||
isBold = bold;
|
||||
|
||||
var alphabetPath = Paths.xml("alphabet");
|
||||
if (Paths.getAssetsRoot() + alphabetPath != AlphaCharacter.__alphaPath) {
|
||||
refreshAlphabetXML(alphabetPath);
|
||||
}
|
||||
#if MOD_SUPPORT else {
|
||||
var libThing = new LimeLibrarySymbol(alphabetPath);
|
||||
if (libThing.library is AssetLibrary) {
|
||||
var library = AssetsLibraryList.getCleanLibrary(libThing.library);
|
||||
if (library is IModsAssetLibrary) {
|
||||
var modLib = cast(library, IModsAssetLibrary);
|
||||
@:privateAccess
|
||||
if (!modLib.__isCacheValid(library.cachedBytes, libThing.symbolName)) {
|
||||
refreshAlphabetXML(alphabetPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
if (text != "")
|
||||
{
|
||||
if (typed)
|
||||
{
|
||||
startTypedText();
|
||||
}
|
||||
else
|
||||
{
|
||||
addText();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function addText()
|
||||
{
|
||||
doSplitWords();
|
||||
|
||||
var xPos:Float = 0;
|
||||
var curRow:Int = 0;
|
||||
for (i=>character in splitWords)
|
||||
{
|
||||
if (lastSprite != null)
|
||||
xPos = lastSprite.x + lastSprite.width - x;
|
||||
|
||||
if (xPosResetted && !(xPosResetted = false)) xPos = 0;
|
||||
|
||||
var letter:AlphaCharacter = new AlphaCharacter(xPos, 0);
|
||||
letter.row = curRow;
|
||||
if (isBold)
|
||||
letter.createBold(character);
|
||||
else
|
||||
letter.createLetter(character);
|
||||
|
||||
// anim not found
|
||||
if (!letter.visible)
|
||||
xPos += 40;
|
||||
|
||||
letter.setColor(color, isBold);
|
||||
add(letter);
|
||||
|
||||
lastSprite = letter;
|
||||
if (_finalText.fastCodeAt(i) == "\n".code)
|
||||
{
|
||||
xPosResetted = true;
|
||||
curRow += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function doSplitWords():Void
|
||||
{
|
||||
splitWords = _finalText.split("");
|
||||
}
|
||||
|
||||
//public var personTalking:String = 'gf';
|
||||
|
||||
public function startTypedText():Void
|
||||
{
|
||||
_finalText = text;
|
||||
doSplitWords();
|
||||
|
||||
// trace(arrayShit);
|
||||
|
||||
var loopNum:Int = 0;
|
||||
|
||||
var xPos:Float = 0;
|
||||
var curRow:Int = 0;
|
||||
|
||||
new FlxTimer().start(0.05, function(tmr:FlxTimer)
|
||||
{
|
||||
// trace(_finalText.fastCodeAt(loopNum) + " " + _finalText.charAt(loopNum));
|
||||
if (_finalText.fastCodeAt(loopNum) == "\n".code)
|
||||
{
|
||||
yMulti += 1;
|
||||
xPosResetted = true;
|
||||
xPos = 0;
|
||||
curRow += 1;
|
||||
}
|
||||
loopNum += 1;
|
||||
|
||||
tmr.time = FlxG.random.float(0.04, 0.09);
|
||||
}, splitWords.length);
|
||||
}
|
||||
|
||||
override function update(elapsed:Float)
|
||||
{
|
||||
super.update(elapsed);
|
||||
|
||||
if (isMenuItem)
|
||||
{
|
||||
var scaledY = FlxMath.remapToRange(targetY, 0, 1, 0, 1.3);
|
||||
|
||||
y = CoolUtil.fpsLerp(y, (scaledY * 120) + (FlxG.height * 0.48), 0.16);
|
||||
x = CoolUtil.fpsLerp(x, (targetY * 20) + 90, 0.16);
|
||||
}
|
||||
|
||||
if (text != _finalText) {
|
||||
_finalText = text;
|
||||
for(e in members)
|
||||
e.destroy();
|
||||
members.clear();
|
||||
lastSprite = null;
|
||||
addText();
|
||||
}
|
||||
}
|
||||
|
||||
override function draw() {
|
||||
super.draw();
|
||||
}
|
||||
}
|
||||
|
||||
class AlphaCharacter extends FlxSprite
|
||||
{
|
||||
@:dox(hide) @:noCompletion public static var __alphaPath:String = null;
|
||||
|
||||
public static var letterAlphabetPath:String;
|
||||
public static var boldAlphabetPath:String;
|
||||
|
||||
public static var boldAnims:Map<String, String> = [];
|
||||
public static var letterAnims:Map<String, String> = [];
|
||||
|
||||
public var row:Int = 0;
|
||||
|
||||
public function setColor(c:FlxColor, isBold:Bool) {
|
||||
if (isBold) {
|
||||
colorTransform.redMultiplier = c.redFloat;
|
||||
colorTransform.greenMultiplier = c.greenFloat;
|
||||
colorTransform.blueMultiplier = c.blueFloat;
|
||||
} else {
|
||||
colorTransform.redOffset = c.red;
|
||||
colorTransform.greenOffset = c.green;
|
||||
colorTransform.blueOffset = c.blue;
|
||||
}
|
||||
}
|
||||
public function new(x:Float, y:Float)
|
||||
{
|
||||
super(x, y);
|
||||
|
||||
antialiasing = true;
|
||||
}
|
||||
|
||||
public function createBold(letter:String)
|
||||
{
|
||||
if(!boldAnims.exists(letter))
|
||||
letter = letter.toUpperCase();
|
||||
if (!boldAnims.exists(letter)) {
|
||||
visible = false;
|
||||
active = false;
|
||||
scale.set();
|
||||
width = 40;
|
||||
return;
|
||||
}
|
||||
frames = Paths.getFrames(boldAlphabetPath);
|
||||
animation.addByPrefix(letter, boldAnims[letter], 24);
|
||||
animation.play(letter);
|
||||
updateHitbox();
|
||||
|
||||
y += row * height;
|
||||
}
|
||||
|
||||
public function createLetter(letter:String):Void
|
||||
{
|
||||
if (!letterAnims.exists(letter)) {
|
||||
visible = false;
|
||||
active = false;
|
||||
scale.set();
|
||||
width = 40;
|
||||
return;
|
||||
}
|
||||
frames = Paths.getFrames(letterAlphabetPath);
|
||||
animation.addByPrefix(letter, letterAnims[letter], 24);
|
||||
animation.play(letter);
|
||||
updateHitbox();
|
||||
|
||||
y = (110 - height);
|
||||
y += row * 60;
|
||||
}
|
||||
}
|
||||
@@ -1,630 +0,0 @@
|
||||
package funkin.menus.ui;
|
||||
|
||||
import haxe.ds.Vector;
|
||||
import funkin.menus.ui.effects.RegionEffect;
|
||||
|
||||
import flixel.animation.FlxAnimation;
|
||||
import flixel.util.FlxDirectionFlags;
|
||||
import flixel.math.FlxPoint;
|
||||
import flixel.math.FlxAngle;
|
||||
import flixel.FlxTypes;
|
||||
|
||||
import haxe.xml.Access;
|
||||
|
||||
using StringTools;
|
||||
using flixel.util.FlxColorTransformUtil;
|
||||
|
||||
@:structInit
|
||||
final class AlphabetComponent {
|
||||
public var anim:String;
|
||||
public var x:Float;
|
||||
public var y:Float;
|
||||
|
||||
// Precalculated values for angle
|
||||
public var shouldRotate:Bool;
|
||||
public var sin:Float;
|
||||
public var cos:Float;
|
||||
public var scaleX:Float;
|
||||
public var scaleY:Float;
|
||||
|
||||
public var hasColorMode:Bool;
|
||||
public var colorMode:ColorMode;
|
||||
}
|
||||
|
||||
@:structInit
|
||||
final class AlphabetLetterData {
|
||||
@:optional public var isDefault:Bool = false;
|
||||
public var advance:Float;
|
||||
public var advanceEmpty:Bool;
|
||||
public var components:Array<AlphabetComponent>;
|
||||
}
|
||||
|
||||
enum abstract AlphabetAlignment(ByteUInt) from ByteUInt to ByteUInt {
|
||||
var LEFT;
|
||||
var CENTER;
|
||||
var RIGHT;
|
||||
|
||||
public function getMultiplier():Float {
|
||||
return switch(this) {
|
||||
case CENTER: 0.5;
|
||||
case RIGHT: 1.0;
|
||||
default: 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
@:from
|
||||
public static function fromString(value:String):AlphabetAlignment
|
||||
return switch(value) {
|
||||
case "left": LEFT;
|
||||
case "center": CENTER;
|
||||
case "right": RIGHT;
|
||||
default: LEFT;
|
||||
}
|
||||
}
|
||||
|
||||
enum abstract CaseMode(ByteUInt) from ByteUInt to ByteUInt {
|
||||
var NONE;
|
||||
var UPPER;
|
||||
var LOWER;
|
||||
|
||||
@:from
|
||||
public static function fromString(value:String):CaseMode
|
||||
return switch(value) {
|
||||
case "none": NONE;
|
||||
case "upper": UPPER;
|
||||
case "lower": LOWER;
|
||||
default: NONE;
|
||||
}
|
||||
}
|
||||
|
||||
enum abstract ColorMode(ByteInt) from ByteInt to ByteInt {
|
||||
var TINT = 0;
|
||||
var OFFSET = 1;
|
||||
var NONE = 2;
|
||||
|
||||
public function setColorTransform(color:openfl.geom.ColorTransform, red:Float, green:Float, blue:Float, alpha:Float) {
|
||||
var moduloWorkaround:Int = this;
|
||||
var tintMult = Math.max(-moduloWorkaround + 1, 0);
|
||||
var tintOffset = Math.min(moduloWorkaround, 1);
|
||||
var offsetMult = (moduloWorkaround % 2) * 255;
|
||||
|
||||
color.redMultiplier = red * tintMult + tintOffset;
|
||||
color.greenMultiplier = green * tintMult + tintOffset;
|
||||
color.blueMultiplier = blue * tintMult + tintOffset;
|
||||
color.redOffset = red * offsetMult;
|
||||
color.greenOffset = green * offsetMult;
|
||||
color.blueOffset = blue * offsetMult;
|
||||
color.alphaMultiplier = alpha;
|
||||
}
|
||||
}
|
||||
|
||||
class NewAlphabet extends FlxSprite {
|
||||
public var effects:Array<RegionEffect> = [];
|
||||
var __renderData:AlphabetRenderData;
|
||||
var __component:AlphabetComponent;
|
||||
|
||||
public var text(default, set):String = "";
|
||||
@:isVar public var textWidth(get, set):Float;
|
||||
public var textHeight(get, null):Float;
|
||||
|
||||
public var alignment:AlphabetAlignment = LEFT;
|
||||
public var forceCase:CaseMode = NONE;
|
||||
|
||||
var __laneWidths:Array<Float> = []; // TODO: add alignment.
|
||||
var __forceWidth:Float = 0.0; // TODO: implement functionality for this.
|
||||
var __queueResize:Bool = false;
|
||||
var __animTime:Float = 0.0;
|
||||
var __ogForceScreen:Bool = false;
|
||||
|
||||
public var originOffset:FlxPoint = FlxPoint.get();
|
||||
|
||||
public var font(default, set):String;
|
||||
var colorMode:ColorMode = TINT;
|
||||
var defaultAdvance:Float = 40.0;
|
||||
var lineGap:Float = 75.0;
|
||||
var fps:Float = 24.0;
|
||||
var letterData:Map<String, AlphabetLetterData> = [];
|
||||
var defaults:Vector<AlphabetLetterData> = {
|
||||
var v = new Vector(3);
|
||||
v[0] = null;
|
||||
v[1] = null;
|
||||
v[2] = null;
|
||||
v;
|
||||
};
|
||||
var loaded:Vector<Array<String>> = {
|
||||
var v = new Vector(3);
|
||||
v[0] = [];
|
||||
v[1] = [];
|
||||
v[2] = [];
|
||||
v;
|
||||
};
|
||||
var failedLetters:Array<String> = [];
|
||||
|
||||
public function new(?x:Float, ?y:Float, ?font:String = "bold") {
|
||||
super(x, y);
|
||||
this.font = font;
|
||||
this.__renderData = new AlphabetRenderData(this);
|
||||
}
|
||||
|
||||
override function update(elapsed:Float):Void {
|
||||
//super.update(elapsed);
|
||||
// FLXOBJECT UPDATE
|
||||
#if FLX_DEBUG
|
||||
@:privateAccess FlxBasic.activeCount += 1;
|
||||
#end
|
||||
|
||||
last.set(x, y);
|
||||
|
||||
if (path != null && path.active)
|
||||
path.update(elapsed);
|
||||
|
||||
if (moves)
|
||||
updateMotion(elapsed);
|
||||
|
||||
wasTouching = touching;
|
||||
touching = FlxDirectionFlags.NONE;
|
||||
// FLXOBJECT UPDATE END
|
||||
|
||||
__animTime += elapsed;
|
||||
for (effect in effects)
|
||||
effect.effectTime += elapsed * effect.speed;
|
||||
}
|
||||
|
||||
override function draw():Void {
|
||||
__ogForceScreen = forceIsOnScreen;
|
||||
forceIsOnScreen = true;
|
||||
super.draw();
|
||||
}
|
||||
|
||||
override function isSimpleRender(?camera:FlxCamera):Bool {
|
||||
return false; // maybe ill get simple render working another time??? not right now tho.
|
||||
}
|
||||
|
||||
override function drawComplex(camera:FlxCamera):Void {
|
||||
forceIsOnScreen = __ogForceScreen;
|
||||
|
||||
if (__queueResize)
|
||||
recalcSizes();
|
||||
var curLine = 0;
|
||||
var lastLine = 0;
|
||||
var daText = switch (forceCase) {
|
||||
case UPPER: text.toUpperCase();
|
||||
case LOWER: text.toLowerCase();
|
||||
case NONE: text;
|
||||
}
|
||||
|
||||
var alignmentMultiplier = alignment.getMultiplier();
|
||||
|
||||
var ogOffX = frameOffset.x;
|
||||
var ogOffY = frameOffset.y;
|
||||
frameOffset.x -= (textWidth - __laneWidths[0]) * alignmentMultiplier;
|
||||
|
||||
var isGraphicsShader = shader != null && shader is flixel.graphics.tile.FlxGraphicsShader;
|
||||
var ogRed:Float = colorTransform.redMultiplier;
|
||||
var ogGreen:Float = colorTransform.greenMultiplier;
|
||||
var ogBlue:Float = colorTransform.blueMultiplier;
|
||||
var ogAlpha:Float = colorTransform.alphaMultiplier;
|
||||
|
||||
var frameTime = Math.floor(__animTime * fps);
|
||||
|
||||
for (i in 0...daText.length) {
|
||||
__renderData.reset(this, ogRed, ogGreen, ogBlue, ogAlpha, daText.charAt(i));
|
||||
for (effect in effects) {
|
||||
if (effect.willModify(i, i - lastLine, __renderData))
|
||||
effect.modify(i, i - lastLine, __renderData);
|
||||
}
|
||||
|
||||
var letter = __renderData.letter;
|
||||
if (letter == "\n") {
|
||||
curLine++;
|
||||
lastLine = i + 1;
|
||||
frameOffset.x = ogOffX - (textWidth - __laneWidths[curLine]) * alignmentMultiplier;
|
||||
frameOffset.y -= lineGap;
|
||||
continue;
|
||||
}
|
||||
|
||||
var data = getData(letter);
|
||||
|
||||
if (data == null) {
|
||||
frameOffset.x -= defaultAdvance;
|
||||
continue;
|
||||
}
|
||||
|
||||
var advance:Float = Math.NaN;
|
||||
|
||||
for (i in 0...data.components.length) {
|
||||
__component = data.components[i];
|
||||
var anim = getLetterAnim(letter, data, __component, i);
|
||||
advance = (Math.isNaN(advance)) ? getAdvance(letter, anim, data) : advance;
|
||||
|
||||
if (anim == null || __renderData.alpha <= 0.0)
|
||||
break; // shouldnt this be like continue?
|
||||
|
||||
var frameToGet = frameTime % anim.numFrames;
|
||||
frame = frames.frames[anim.frames[frameToGet]];
|
||||
|
||||
var offsetX = __component.x + __renderData.offsetX;
|
||||
var offsetY = frame.sourceSize.y - lineGap + __component.y + __renderData.offsetY;
|
||||
frameOffset.x += offsetX;
|
||||
frameOffset.y += offsetY;
|
||||
if (!isOnScreen(camera)) {
|
||||
frameOffset.y -= offsetY;
|
||||
frameOffset.x -= offsetX;
|
||||
break;
|
||||
}
|
||||
if (isGraphicsShader)
|
||||
shader.setCamSize(_frame.frame.x, _frame.frame.y, _frame.frame.width, _frame.frame.height);
|
||||
|
||||
if (__component.hasColorMode)
|
||||
__component.colorMode.setColorTransform(colorTransform, __renderData.red, __renderData.green, __renderData.blue, __renderData.alpha);
|
||||
else
|
||||
colorMode.setColorTransform(colorTransform, __renderData.red, __renderData.green, __renderData.blue, __renderData.alpha);
|
||||
|
||||
drawLetter(camera);
|
||||
frameOffset.y -= offsetY;
|
||||
frameOffset.x -= offsetX;
|
||||
}
|
||||
frameOffset.x -= advance;
|
||||
}
|
||||
__component = null;
|
||||
|
||||
setColorTransform(ogRed, ogGreen, ogBlue, ogAlpha, 0, 0, 0, 0);
|
||||
frameOffset.set(ogOffX, ogOffY);
|
||||
}
|
||||
|
||||
function drawLetter(camera) {
|
||||
_frame.prepareMatrix(_matrix, ANGLE_0, checkFlipX() != camera.flipX, checkFlipY() != camera.flipY);
|
||||
|
||||
_matrix.translate(_frame.frame.width * -0.5, _frame.frame.height * -0.5);
|
||||
_matrix.scale(__component.scaleX, __component.scaleY);
|
||||
if(__component.shouldRotate) _matrix.rotateWithTrig(__component.cos, __component.sin);
|
||||
_matrix.translate(_frame.frame.width * 0.5, _frame.frame.height * 0.5);
|
||||
|
||||
_matrix.translate(-origin.x, -origin.y);
|
||||
|
||||
if (frameOffsetAngle != null && frameOffsetAngle != angle)
|
||||
{
|
||||
var angleOff = (frameOffsetAngle - angle) * FlxAngle.TO_RAD;
|
||||
var cos = Math.cos(angleOff);
|
||||
var sin = Math.sin(angleOff);
|
||||
// cos doesnt need to be negated
|
||||
_matrix.rotateWithTrig(cos, -sin);
|
||||
_matrix.translate(-frameOffset.x, -frameOffset.y);
|
||||
_matrix.rotateWithTrig(cos, sin);
|
||||
}
|
||||
else
|
||||
_matrix.translate(-frameOffset.x, -frameOffset.y);
|
||||
|
||||
_matrix.scale(scale.x, scale.y);
|
||||
|
||||
if (bakedRotationAngle <= 0)
|
||||
{
|
||||
updateTrig();
|
||||
|
||||
if (angle != 0)
|
||||
_matrix.rotateWithTrig(_cosAngle, _sinAngle);
|
||||
}
|
||||
|
||||
getScreenPosition(_point, camera).subtractPoint(offset);
|
||||
_point.add(origin.x, origin.y);
|
||||
_matrix.translate(_point.x, _point.y);
|
||||
|
||||
if (isPixelPerfectRender(camera))
|
||||
{
|
||||
_matrix.tx = Math.floor(_matrix.tx);
|
||||
_matrix.ty = Math.floor(_matrix.ty);
|
||||
}
|
||||
|
||||
doAdditionalMatrixStuff(_matrix, camera);
|
||||
|
||||
if (layer != null)
|
||||
layer.drawPixels(this, camera, _frame, framePixels, _matrix, colorTransform, blend, antialiasing, shaderEnabled ? shader : null);
|
||||
else
|
||||
camera.drawPixels(_frame, framePixels, _matrix, colorTransform, blend, antialiasing, shaderEnabled ? shader : null);
|
||||
}
|
||||
|
||||
override function updateHitbox():Void {
|
||||
width = Math.abs(scale.x) * textWidth;
|
||||
height = Math.abs(scale.y) * textHeight;
|
||||
offset.set(-0.5 * (width - textWidth), -0.5 * (height - textHeight));
|
||||
origin.set(textWidth * 0.5 + originOffset.x, textHeight * 0.5 + originOffset.y);
|
||||
}
|
||||
|
||||
function recalcSizes():Void {
|
||||
__queueResize = false;
|
||||
var curLine = 0;
|
||||
var daText = switch (forceCase) {
|
||||
case UPPER: text.toUpperCase();
|
||||
case LOWER: text.toLowerCase();
|
||||
case NONE: text;
|
||||
}
|
||||
@:bypassAccessor textWidth = 0;
|
||||
textHeight = lineGap;
|
||||
__laneWidths = [0];
|
||||
for (i in 0...daText.length) {
|
||||
var letter = daText.charAt(i);
|
||||
if (letter == "\n") {
|
||||
textHeight += lineGap;
|
||||
__laneWidths.push(0);
|
||||
curLine++;
|
||||
continue;
|
||||
}
|
||||
|
||||
var data = getData(letter);
|
||||
__laneWidths[curLine] += (data != null) ? getAdvance(letter, getLetterAnim(letter, data, data.components[0], 0), data) : defaultAdvance;
|
||||
@:bypassAccessor textWidth = Math.max(textWidth, __laneWidths[curLine]);
|
||||
}
|
||||
|
||||
origin.set(textWidth * 0.5 + originOffset.x, textHeight * 0.5 + originOffset.y);
|
||||
}
|
||||
|
||||
function getAdvance(letter:String, anim:FlxAnimation, data:AlphabetLetterData):Float {
|
||||
if (anim == null)
|
||||
return defaultAdvance;
|
||||
|
||||
if (data.advanceEmpty && !data.isDefault) {
|
||||
data.advanceEmpty = false;
|
||||
data.advance = frames.frames[anim.frames[0]].sourceSize.x;
|
||||
}
|
||||
return (data.isDefault) ? frames.frames[anim.frames[0]].sourceSize.x : data.advance;
|
||||
}
|
||||
|
||||
function getData(char:String):AlphabetLetterData {
|
||||
if (failedLetters.contains(char)) return null;
|
||||
for (i in 0...3) { // this feels wrong
|
||||
if (loaded[i].contains(char))
|
||||
return defaults[i];
|
||||
}
|
||||
|
||||
var data:AlphabetLetterData = null;
|
||||
if (letterData.exists(char))
|
||||
data = letterData.get(char);
|
||||
|
||||
if (data == null) {
|
||||
var charCode:Int = char.charCodeAt(0);
|
||||
if (charCode >= 'A'.code && charCode <= 'Z'.code && defaults[CaseMode.UPPER] != null)
|
||||
data = defaults[CaseMode.UPPER];
|
||||
else if (charCode >= 'a'.code && charCode <= 'z'.code && defaults[CaseMode.LOWER] != null)
|
||||
data = defaults[CaseMode.LOWER];
|
||||
else
|
||||
data = defaults[CaseMode.NONE];
|
||||
}
|
||||
|
||||
if(data == null) {
|
||||
failedLetters.push(char);
|
||||
return null;
|
||||
} else if (data.isDefault)
|
||||
loaded[defaultsIndexOf(data)].push(char);
|
||||
return data;
|
||||
}
|
||||
|
||||
final function defaultsIndexOf(data:AlphabetLetterData):Int {
|
||||
//while(i < defaults.length) {
|
||||
for(i in 0...3) {
|
||||
if(defaults[i] == data)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
function getLetterAnim(char:String, data:AlphabetLetterData, component:AlphabetComponent, index:Int):FlxAnimation {
|
||||
if (data == null) return null;
|
||||
var name = char + Std.string(index);
|
||||
if (animation.exists(name)) return animation.getByName(name);
|
||||
|
||||
var anim = (data.isDefault) ?
|
||||
component.anim.replace("LETTER", char) :
|
||||
component.anim;
|
||||
animation.addByPrefix(name, anim, fps);
|
||||
if (!animation.exists(name)) {
|
||||
failedLetters.push(char);
|
||||
return null;
|
||||
}
|
||||
return animation.getByName(name);
|
||||
}
|
||||
|
||||
function checkNode(node:Xml):Void {
|
||||
switch (node.nodeName) {
|
||||
case "spritesheet":
|
||||
if (frames == null)
|
||||
frames = Paths.getFrames(node.firstChild().nodeValue);
|
||||
else {
|
||||
for (frame in Paths.getFrames(node.firstChild().nodeValue).frames)
|
||||
frames.pushFrame(frame);
|
||||
}
|
||||
case "defaultAnim":
|
||||
var idx = ["UPPER", "LOWER"].indexOf(node.get("casing").toUpperCase()) + 1;
|
||||
|
||||
var rad:Float = Std.parseFloat(node.get("angle")).getDefaultFloat(0.0) * FlxAngle.TO_RAD;
|
||||
var angleCos = Math.cos(rad);
|
||||
var angleSin = Math.sin(rad);
|
||||
|
||||
var res:AlphabetLetterData = {
|
||||
isDefault: true,
|
||||
advance: 0.0,
|
||||
advanceEmpty: true,
|
||||
components: [{
|
||||
anim: node.firstChild().nodeValue,
|
||||
|
||||
x: 0.0,
|
||||
y: 0.0,
|
||||
scaleX: Std.parseFloat(node.get("scaleX")).getDefaultFloat(1.0),
|
||||
scaleY: Std.parseFloat(node.get("scaleY")).getDefaultFloat(1.0),
|
||||
|
||||
shouldRotate: rad != 0,
|
||||
cos: angleCos,
|
||||
sin: angleSin,
|
||||
|
||||
hasColorMode: false,
|
||||
colorMode: 0
|
||||
}]
|
||||
}
|
||||
|
||||
defaults[idx] = res;
|
||||
case "composite":
|
||||
if(!node.exists("char")) {
|
||||
Logs.error("<composite> must have a char attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
var char = node.get("char");
|
||||
var advance:Float = Std.parseFloat(node.get("advance"));
|
||||
var components:Array<AlphabetComponent> = [];
|
||||
for (component in node.elementsNamed("component")) {
|
||||
if(!component.exists("anim")) {
|
||||
Logs.error("<component> must have a anim attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
|
||||
var rad:Float = Std.parseFloat(component.get("angle")).getDefaultFloat(0.0) * FlxAngle.TO_RAD;
|
||||
var angleCos = Math.cos(rad);
|
||||
var angleSin = Math.sin(rad);
|
||||
|
||||
var xOff:Float = -Std.parseFloat(component.get("x")).getDefaultFloat(0.0);
|
||||
var yOff:Float = Std.parseFloat(component.get("y")).getDefaultFloat(0.0);
|
||||
|
||||
var colorMode = ["tint", "offsets", "none"].indexOf(component.get("colorMode"));
|
||||
|
||||
components.push({
|
||||
anim: component.get("anim"),
|
||||
|
||||
x: xOff,
|
||||
y: yOff,
|
||||
scaleX: Std.parseFloat(component.get("scaleX")).getDefaultFloat(1.0),
|
||||
scaleY: Std.parseFloat(component.get("scaleY")).getDefaultFloat(1.0),
|
||||
|
||||
shouldRotate: rad != 0,
|
||||
cos: angleCos,
|
||||
sin: angleSin,
|
||||
|
||||
hasColorMode: colorMode >= 0,
|
||||
colorMode: colorMode
|
||||
});
|
||||
}
|
||||
letterData.set(char, {
|
||||
isDefault: false,
|
||||
advance: advance,
|
||||
advanceEmpty: Math.isNaN(advance),
|
||||
components: components
|
||||
});
|
||||
case "anim":
|
||||
if(!node.exists("char")) {
|
||||
Logs.error("<anim> must have a char attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
var char = node.get("char");
|
||||
|
||||
var rad:Float = Std.parseFloat(node.get("angle")).getDefaultFloat(0.0) * FlxAngle.TO_RAD;
|
||||
var angleCos = Math.cos(rad);
|
||||
var angleSin = Math.sin(rad);
|
||||
|
||||
var xOff:Float = -Std.parseFloat(node.get("x")).getDefaultFloat(0.0);
|
||||
var yOff:Float = Std.parseFloat(node.get("y")).getDefaultFloat(0.0);
|
||||
var advance:Float = Std.parseFloat(node.get("advance"));
|
||||
|
||||
var colorMode = ["tint", "offsets", "none"].indexOf(node.get("colorMode"));
|
||||
|
||||
letterData.set(char, {
|
||||
isDefault: false,
|
||||
advance: advance,
|
||||
advanceEmpty: Math.isNaN(advance),
|
||||
components: [{
|
||||
anim: node.firstChild().nodeValue,
|
||||
|
||||
x: xOff,
|
||||
y: yOff,
|
||||
scaleX: Std.parseFloat(node.get("scaleX")).getDefaultFloat(1.0),
|
||||
scaleY: Std.parseFloat(node.get("scaleY")).getDefaultFloat(1.0),
|
||||
|
||||
shouldRotate: rad != 0,
|
||||
cos: angleCos,
|
||||
sin: angleSin,
|
||||
|
||||
hasColorMode: colorMode >= 0,
|
||||
colorMode: colorMode
|
||||
}]
|
||||
});
|
||||
case "languageSection": // used to only parse characters if a specific language is selected
|
||||
if(!node.exists("langs")) {
|
||||
Logs.error("<languageSection> must have a langs attribute", "Alphabet");
|
||||
return;
|
||||
}
|
||||
var langs = [for (lang in node.get("langs").split(",")) lang.trim()];
|
||||
// maybe add a way to toggle this off? like force it to add all
|
||||
if (langs.contains(Options.language)) {
|
||||
for (langNode in node.elements())
|
||||
checkNode(langNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function loadFont(value:String):Void {
|
||||
__queueResize = true;
|
||||
|
||||
var xml:Xml = Xml.parse(Assets.getText(Paths.xml("alphabet/" + value))).firstElement();
|
||||
|
||||
// reset old values
|
||||
letterData = new Map();
|
||||
defaults = {
|
||||
var v = new Vector(3);
|
||||
v[0] = null;
|
||||
v[1] = null;
|
||||
v[2] = null;
|
||||
v;
|
||||
}
|
||||
loaded = {
|
||||
var v = new Vector(3);
|
||||
v[0] = [];
|
||||
v[1] = [];
|
||||
v[2] = [];
|
||||
v;
|
||||
}
|
||||
failedLetters = [];
|
||||
|
||||
defaultAdvance = Std.parseFloat(xml.get("advance")).getDefaultFloat(40.0);
|
||||
lineGap = Std.parseFloat(xml.get("lineGap")).getDefaultFloat(75.0);
|
||||
fps = Std.parseFloat(xml.get("fps")).getDefaultFloat(24.0);
|
||||
forceCase = xml.get("forceCasing").getDefault("none").toLowerCase();
|
||||
colorMode = (["offsets", "none"].indexOf(xml.get("colorMode")) + 1);
|
||||
|
||||
frames = null;
|
||||
|
||||
for (node in xml.elements())
|
||||
checkNode(node);
|
||||
}
|
||||
|
||||
override function destroy():Void {
|
||||
originOffset = FlxDestroyUtil.destroy(originOffset);
|
||||
failedLetters = [];
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
function get_textWidth():Float {
|
||||
if (__queueResize)
|
||||
recalcSizes();
|
||||
return textWidth;
|
||||
}
|
||||
function set_textWidth(value:Float):Float {
|
||||
if(!__queueResize)
|
||||
__queueResize = __forceWidth != value;
|
||||
return __forceWidth = value;
|
||||
}
|
||||
|
||||
function get_textHeight():Float {
|
||||
if (__queueResize)
|
||||
recalcSizes();
|
||||
return textHeight;
|
||||
}
|
||||
|
||||
function set_text(value:String):String {
|
||||
if(!__queueResize)
|
||||
__queueResize = text != value;
|
||||
return text = value;
|
||||
}
|
||||
|
||||
function set_font(value:String):String {
|
||||
if (font != value) {
|
||||
loadFont(font = value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package funkin.menus.ui.effects;
|
||||
import flixel.util.FlxColor;
|
||||
|
||||
class AlphabetRenderData {
|
||||
public var parent:NewAlphabet;
|
||||
public var parent:Alphabet;
|
||||
public var letter:String;
|
||||
public var offsetX:Float = 0;
|
||||
public var offsetY:Float = 0;
|
||||
@@ -13,11 +13,11 @@ class AlphabetRenderData {
|
||||
public var blue:Float = 0;
|
||||
public var alpha:Float = 1;
|
||||
|
||||
public function new(parent:NewAlphabet) {
|
||||
public function new(parent:Alphabet) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public function reset(parent:NewAlphabet, red:Float, green:Float, blue:Float, alpha:Float, letter:String) {
|
||||
public function reset(parent:Alphabet, red:Float, green:Float, blue:Float, alpha:Float, letter:String) {
|
||||
this.parent = parent;
|
||||
this.letter = letter;
|
||||
this.offsetX = 0;
|
||||
|
||||
@@ -20,7 +20,7 @@ class KeybindSetting extends FlxTypedSpriteGroup<FlxSprite> {
|
||||
public function new(x:Float, y:Float, name:String, value:String, ?sparrowIcon:String, ?sparrowAnim:String) {
|
||||
super();
|
||||
this.value = value;
|
||||
title = new Alphabet(0, 0, name, true);
|
||||
title = new Alphabet(0, 0, name, "bold");
|
||||
add(title);
|
||||
|
||||
var controlArrayP1:Array<FlxKey> = Reflect.field(Options, 'P1_${value}');
|
||||
@@ -31,12 +31,13 @@ class KeybindSetting extends FlxTypedSpriteGroup<FlxSprite> {
|
||||
|
||||
for(i in 1...3) {
|
||||
var b = null;
|
||||
var bx = FlxG.width * (0.25 * (i+1)) - x;
|
||||
if (i == 1)
|
||||
b = bind1 = new Alphabet(0, 0, "", false);
|
||||
b = bind1 = new Alphabet(bx, 0, "", "normal");
|
||||
else
|
||||
b = bind2 = new Alphabet(0, 0, "", false);
|
||||
b = bind2 = new Alphabet(bx, 0, "", "normal");
|
||||
|
||||
b.setPosition(FlxG.width * (0.25 * (i+1)) - x, -60);
|
||||
//b.setPosition(FlxG.width * (0.25 * (i+1)) - x, -60);
|
||||
add(b);
|
||||
}
|
||||
updateText();
|
||||
|
||||
@@ -148,7 +148,7 @@ class KeybindsOptions extends MusicBeatSubstate {
|
||||
var k:Int = 0;
|
||||
for(category in categories) {
|
||||
k++;
|
||||
var title = new Alphabet(0, k * 75, category.name, true);
|
||||
var title = new Alphabet(0, k * 75, category.name, "bold");
|
||||
title.screenCenter(X);
|
||||
add(title);
|
||||
|
||||
|
||||
@@ -37,8 +37,8 @@ class ArrayOption extends OptionType {
|
||||
|
||||
this.optionName = optionName;
|
||||
|
||||
add(__text = new Alphabet(100, 20, text, true));
|
||||
add(__selectiontext = new Alphabet(__text.width + 120, -30, formatTextOption(), false));
|
||||
add(__text = new Alphabet(100, 20, text, "bold"));
|
||||
add(__selectiontext = new Alphabet(__text.width + 120, 20, formatTextOption(), "normal"));
|
||||
|
||||
rawText = text;
|
||||
}
|
||||
|
||||
@@ -39,8 +39,8 @@ class NumOption extends OptionType {
|
||||
this.changeVal = changeVal;
|
||||
this.optionName = optionName;
|
||||
|
||||
add(__text = new Alphabet(100, 20, text, true));
|
||||
add(__number = new Alphabet(__text.width + 120, -30, ': $currentSelection', false));
|
||||
add(__text = new Alphabet(100, 20, text, "bold"));
|
||||
add(__number = new Alphabet(__text.width + 120, 20, ': $currentSelection', "normal"));
|
||||
|
||||
rawText = text;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ class TextOption extends OptionType {
|
||||
public function new(text:String, desc:String, ?suffix:String = "", ?selectCallback:Void->Void = null) {
|
||||
super(desc);
|
||||
this.selectCallback = selectCallback;
|
||||
add(__text = new Alphabet(100, 20, text, true));
|
||||
add(__text = new Alphabet(100, 20, text, "bold"));
|
||||
this.suffix = suffix;
|
||||
rawText = text;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user