From 71a72ffe032b787f07a525bdaf2036e989004629 Mon Sep 17 00:00:00 2001 From: AT <101066547+UmbratheUmbreon@users.noreply.github.com> Date: Sat, 25 Mar 2023 19:07:25 -0700 Subject: [PATCH] 0.8.1 --- Changelog.md | 65 ++ assets/preload/data/dialogue/TEST.json | 2 +- assets/preload/images/alphabet.png | Bin 88623 -> 0 bytes assets/preload/images/alphabet.xml | 599 ------------------ assets/preload/images/alphabet/A BOLD.png | Bin 0 -> 1474 bytes .../preload/images/alphabet/A LOWERCASE.png | Bin 0 -> 622 bytes assets/preload/images/alphabet/A.png | Bin 0 -> 817 bytes .../images/alphabet/AMPERSAND BOLD.png | Bin 0 -> 1710 bytes assets/preload/images/alphabet/AMPERSAND.png | Bin 0 -> 858 bytes assets/preload/images/alphabet/ANGRY FAIC.png | Bin 0 -> 1162 bytes .../images/alphabet/APOSTROPHE BOLD.png | Bin 0 -> 687 bytes assets/preload/images/alphabet/APOSTROPHE.png | Bin 0 -> 374 bytes .../preload/images/alphabet/ASTERISK BOLD.png | Bin 0 -> 889 bytes assets/preload/images/alphabet/ASTERISK.png | Bin 0 -> 481 bytes assets/preload/images/alphabet/AT.png | Bin 0 -> 1053 bytes assets/preload/images/alphabet/B BOLD.png | Bin 0 -> 1406 bytes .../preload/images/alphabet/B LOWERCASE.png | Bin 0 -> 602 bytes assets/preload/images/alphabet/B.png | Bin 0 -> 818 bytes assets/preload/images/alphabet/BACKSLASH.png | Bin 0 -> 643 bytes assets/preload/images/alphabet/BAR.png | Bin 0 -> 425 bytes assets/preload/images/alphabet/C BOLD.png | Bin 0 -> 1518 bytes .../preload/images/alphabet/C LOWERCASE.png | Bin 0 -> 516 bytes assets/preload/images/alphabet/C.png | Bin 0 -> 812 bytes assets/preload/images/alphabet/CARROT.png | Bin 0 -> 485 bytes assets/preload/images/alphabet/COLON.png | Bin 0 -> 381 bytes assets/preload/images/alphabet/COMMA.png | Bin 0 -> 359 bytes assets/preload/images/alphabet/D BOLD.png | Bin 0 -> 1407 bytes .../preload/images/alphabet/D LOWERCASE.png | Bin 0 -> 644 bytes assets/preload/images/alphabet/D.png | Bin 0 -> 869 bytes assets/preload/images/alphabet/DASH BOLD.png | Bin 0 -> 572 bytes assets/preload/images/alphabet/DASH.png | Bin 0 -> 315 bytes .../images/alphabet/DBL QUOTE END BOLD.png | Bin 0 -> 1035 bytes .../preload/images/alphabet/DBL QUOTE END.png | Bin 0 -> 553 bytes .../images/alphabet/DBL QUOTE START BOLD.png | Bin 0 -> 1030 bytes .../images/alphabet/DBL QUOTE START.png | Bin 0 -> 557 bytes assets/preload/images/alphabet/DOLLAR.png | Bin 0 -> 867 bytes assets/preload/images/alphabet/DOWN ARROW.png | Bin 0 -> 614 bytes assets/preload/images/alphabet/E BOLD.png | Bin 0 -> 1066 bytes .../preload/images/alphabet/E LOWERCASE.png | Bin 0 -> 593 bytes assets/preload/images/alphabet/E.png | Bin 0 -> 597 bytes assets/preload/images/alphabet/EIGHT BOLD.png | Bin 0 -> 1321 bytes assets/preload/images/alphabet/EIGHT.png | Bin 0 -> 727 bytes assets/preload/images/alphabet/ENE BOLD.png | Bin 0 -> 3109 bytes .../preload/images/alphabet/ENE LOWERCASE.png | Bin 0 -> 1132 bytes assets/preload/images/alphabet/ENE.png | Bin 0 -> 1490 bytes assets/preload/images/alphabet/EQUAL.png | Bin 0 -> 487 bytes .../images/alphabet/EXCLAMATION BOLD.png | Bin 0 -> 1036 bytes .../preload/images/alphabet/EXCLAMATION.png | Bin 0 -> 572 bytes assets/preload/images/alphabet/F BOLD.png | Bin 0 -> 929 bytes .../preload/images/alphabet/F LOWERCASE.png | Bin 0 -> 591 bytes assets/preload/images/alphabet/F.png | Bin 0 -> 560 bytes assets/preload/images/alphabet/FIVE BOLD.png | Bin 0 -> 1317 bytes assets/preload/images/alphabet/FIVE.png | Bin 0 -> 732 bytes .../preload/images/alphabet/FORWARD SLASH.png | Bin 0 -> 609 bytes assets/preload/images/alphabet/FOUR BOLD.png | Bin 0 -> 1228 bytes assets/preload/images/alphabet/FOUR.png | Bin 0 -> 694 bytes assets/preload/images/alphabet/G BOLD.png | Bin 0 -> 1615 bytes .../preload/images/alphabet/G LOWERCASE.png | Bin 0 -> 637 bytes assets/preload/images/alphabet/G.png | Bin 0 -> 823 bytes .../preload/images/alphabet/GREATER BOLD.png | Bin 0 -> 1248 bytes assets/preload/images/alphabet/GREATER.png | Bin 0 -> 639 bytes assets/preload/images/alphabet/H BOLD.png | Bin 0 -> 968 bytes .../preload/images/alphabet/H LOWERCASE.png | Bin 0 -> 556 bytes assets/preload/images/alphabet/H.png | Bin 0 -> 623 bytes assets/preload/images/alphabet/HASHTAG.png | Bin 0 -> 710 bytes assets/preload/images/alphabet/HEART.png | Bin 0 -> 604 bytes assets/preload/images/alphabet/I BOLD.png | Bin 0 -> 953 bytes .../preload/images/alphabet/I LOWERCASE.png | Bin 0 -> 407 bytes assets/preload/images/alphabet/I.png | Bin 0 -> 536 bytes assets/preload/images/alphabet/J BOLD.png | Bin 0 -> 1226 bytes .../preload/images/alphabet/J LOWERCASE.png | Bin 0 -> 571 bytes assets/preload/images/alphabet/J.png | Bin 0 -> 667 bytes assets/preload/images/alphabet/K BOLD.png | Bin 0 -> 1346 bytes .../preload/images/alphabet/K LOWERCASE.png | Bin 0 -> 691 bytes assets/preload/images/alphabet/K.png | Bin 0 -> 746 bytes assets/preload/images/alphabet/L BOLD.png | Bin 0 -> 780 bytes .../preload/images/alphabet/L LOWERCASE.png | Bin 0 -> 348 bytes .../images/alphabet/L PARENTHESIS BOLD.png | Bin 0 -> 1136 bytes .../preload/images/alphabet/L PARENTHESIS.png | Bin 0 -> 588 bytes .../preload/images/alphabet/L SQR BRACKET.png | Bin 0 -> 495 bytes assets/preload/images/alphabet/L.png | Bin 0 -> 463 bytes assets/preload/images/alphabet/LEFT ARROW.png | Bin 0 -> 538 bytes assets/preload/images/alphabet/LESS BOLD.png | Bin 0 -> 1236 bytes assets/preload/images/alphabet/LESS.png | Bin 0 -> 661 bytes assets/preload/images/alphabet/M BOLD.png | Bin 0 -> 1673 bytes .../preload/images/alphabet/M LOWERCASE.png | Bin 0 -> 612 bytes assets/preload/images/alphabet/M.png | Bin 0 -> 924 bytes assets/preload/images/alphabet/MULTIPLY.png | Bin 0 -> 567 bytes assets/preload/images/alphabet/N BOLD.png | Bin 0 -> 1261 bytes .../preload/images/alphabet/N LOWERCASE.png | Bin 0 -> 489 bytes assets/preload/images/alphabet/N.png | Bin 0 -> 700 bytes assets/preload/images/alphabet/NINE BOLD.png | Bin 0 -> 1350 bytes assets/preload/images/alphabet/NINE.png | Bin 0 -> 699 bytes assets/preload/images/alphabet/O BOLD.png | Bin 0 -> 1500 bytes .../preload/images/alphabet/O LOWERCASE.png | Bin 0 -> 536 bytes assets/preload/images/alphabet/O.png | Bin 0 -> 796 bytes assets/preload/images/alphabet/ONE BOLD.png | Bin 0 -> 892 bytes assets/preload/images/alphabet/ONE.png | Bin 0 -> 478 bytes assets/preload/images/alphabet/P BOLD.png | Bin 0 -> 1190 bytes .../preload/images/alphabet/P LOWERCASE.png | Bin 0 -> 549 bytes assets/preload/images/alphabet/P.png | Bin 0 -> 631 bytes assets/preload/images/alphabet/PERCENTAGE.png | Bin 0 -> 952 bytes .../preload/images/alphabet/PERIOD BOLD.png | Bin 0 -> 433 bytes assets/preload/images/alphabet/PERIOD.png | Bin 0 -> 285 bytes assets/preload/images/alphabet/PLUS BOLD.png | Bin 0 -> 945 bytes assets/preload/images/alphabet/PLUS.png | Bin 0 -> 531 bytes assets/preload/images/alphabet/Q BOLD.png | Bin 0 -> 1763 bytes .../preload/images/alphabet/Q LOWERCASE.png | Bin 0 -> 645 bytes assets/preload/images/alphabet/Q.png | Bin 0 -> 830 bytes .../preload/images/alphabet/QUESTION BOLD.png | Bin 0 -> 1443 bytes assets/preload/images/alphabet/QUESTION.png | Bin 0 -> 791 bytes assets/preload/images/alphabet/R BOLD.png | Bin 0 -> 1335 bytes .../preload/images/alphabet/R LOWERCASE.png | Bin 0 -> 423 bytes .../images/alphabet/R PARENTHESIS BOLD.png | Bin 0 -> 1141 bytes .../preload/images/alphabet/R PARENTHESIS.png | Bin 0 -> 553 bytes .../preload/images/alphabet/R SQR BRACKET.png | Bin 0 -> 500 bytes assets/preload/images/alphabet/R.png | Bin 0 -> 796 bytes .../preload/images/alphabet/RIGHT ARROW.png | Bin 0 -> 514 bytes assets/preload/images/alphabet/S BOLD.png | Bin 0 -> 1310 bytes .../preload/images/alphabet/S LOWERCASE.png | Bin 0 -> 517 bytes assets/preload/images/alphabet/S.png | Bin 0 -> 754 bytes assets/preload/images/alphabet/SEMICOLON.png | Bin 0 -> 437 bytes assets/preload/images/alphabet/SEVEN BOLD.png | Bin 0 -> 1098 bytes assets/preload/images/alphabet/SEVEN.png | Bin 0 -> 579 bytes assets/preload/images/alphabet/SIX BOLD.png | Bin 0 -> 1363 bytes assets/preload/images/alphabet/SIX.png | Bin 0 -> 711 bytes assets/preload/images/alphabet/T BOLD.png | Bin 0 -> 792 bytes .../preload/images/alphabet/T LOWERCASE.png | Bin 0 -> 460 bytes assets/preload/images/alphabet/T.png | Bin 0 -> 512 bytes assets/preload/images/alphabet/THREE BOLD.png | Bin 0 -> 1272 bytes assets/preload/images/alphabet/THREE.png | Bin 0 -> 721 bytes assets/preload/images/alphabet/TILDA BOLD.png | Bin 0 -> 879 bytes assets/preload/images/alphabet/TILDA.png | Bin 0 -> 509 bytes assets/preload/images/alphabet/TWO BOLD.png | Bin 0 -> 1315 bytes assets/preload/images/alphabet/TWO.png | Bin 0 -> 695 bytes assets/preload/images/alphabet/U BOLD.png | Bin 0 -> 1121 bytes .../preload/images/alphabet/U LOWERCASE.png | Bin 0 -> 574 bytes assets/preload/images/alphabet/U.png | Bin 0 -> 674 bytes assets/preload/images/alphabet/UNDERSCORE.png | Bin 0 -> 351 bytes assets/preload/images/alphabet/UP ARROW.png | Bin 0 -> 582 bytes assets/preload/images/alphabet/V BOLD.png | Bin 0 -> 1426 bytes .../preload/images/alphabet/V LOWERCASE.png | Bin 0 -> 540 bytes assets/preload/images/alphabet/V.png | Bin 0 -> 739 bytes assets/preload/images/alphabet/W BOLD.png | Bin 0 -> 1688 bytes .../preload/images/alphabet/W LOWERCASE.png | Bin 0 -> 667 bytes assets/preload/images/alphabet/W.png | Bin 0 -> 939 bytes assets/preload/images/alphabet/X BOLD.png | Bin 0 -> 1527 bytes .../preload/images/alphabet/X LOWERCASE.png | Bin 0 -> 560 bytes assets/preload/images/alphabet/X.png | Bin 0 -> 812 bytes assets/preload/images/alphabet/Y BOLD.png | Bin 0 -> 1285 bytes .../preload/images/alphabet/Y LOWERCASE.png | Bin 0 -> 606 bytes assets/preload/images/alphabet/Y.png | Bin 0 -> 690 bytes assets/preload/images/alphabet/Z BOLD.png | Bin 0 -> 1098 bytes .../preload/images/alphabet/Z LOWERCASE.png | Bin 0 -> 506 bytes assets/preload/images/alphabet/Z.png | Bin 0 -> 600 bytes assets/preload/images/alphabet/ZERO BOLD.png | Bin 0 -> 1394 bytes assets/preload/images/alphabet/ZERO.png | Bin 0 -> 775 bytes assets/preload/images/credits/dany.png | Bin 4323 -> 0 bytes assets/preload/update/tracking/GitVer.txt | 2 +- source/Alphabet.hx | 64 +- source/CharacterSelectSubstate.hx | 4 +- source/CrossFades.hx | 171 +++-- source/CustomFadeTransition.hx | 1 + source/CutsceneHandler.hx | 7 +- source/DenpaState.hx | 468 ++++++-------- source/DialogueBoxDenpa.hx | 21 +- source/FreeplaySectionSubstate.hx | 2 +- source/FreeplayState.hx | 10 +- source/FunkinLua.hx | 24 +- source/HUD.hx | 43 +- source/HealthIcon.hx | 54 +- source/Main.hx | 13 +- source/MainMenuState.hx | 4 +- source/Note.hx | 1 + source/PatchState.hx | 1 + source/Paths.hx | 6 +- source/PauseSubState.hx | 5 +- source/PlayState.hx | 314 ++++----- source/Prompt.hx | 4 + source/StoryMenuState.hx | 6 +- source/TitleState.hx | 14 +- source/VanillaBG.hx | 8 +- source/editors/CharacterEditorState.hx | 6 +- source/editors/ChartingState.hx | 66 +- .../editors/DialogueCharacterEditorState.hx | 4 +- source/editors/DialogueEditorState.hx | 4 +- source/flixel/ui/FlxBar.hx | 23 +- source/flixel/util/FlxGradient.hx | 6 - 188 files changed, 658 insertions(+), 1364 deletions(-) create mode 100644 Changelog.md delete mode 100644 assets/preload/images/alphabet.png delete mode 100644 assets/preload/images/alphabet.xml create mode 100644 assets/preload/images/alphabet/A BOLD.png create mode 100644 assets/preload/images/alphabet/A LOWERCASE.png create mode 100644 assets/preload/images/alphabet/A.png create mode 100644 assets/preload/images/alphabet/AMPERSAND BOLD.png create mode 100644 assets/preload/images/alphabet/AMPERSAND.png create mode 100644 assets/preload/images/alphabet/ANGRY FAIC.png create mode 100644 assets/preload/images/alphabet/APOSTROPHE BOLD.png create mode 100644 assets/preload/images/alphabet/APOSTROPHE.png create mode 100644 assets/preload/images/alphabet/ASTERISK BOLD.png create mode 100644 assets/preload/images/alphabet/ASTERISK.png create mode 100644 assets/preload/images/alphabet/AT.png create mode 100644 assets/preload/images/alphabet/B BOLD.png create mode 100644 assets/preload/images/alphabet/B LOWERCASE.png create mode 100644 assets/preload/images/alphabet/B.png create mode 100644 assets/preload/images/alphabet/BACKSLASH.png create mode 100644 assets/preload/images/alphabet/BAR.png create mode 100644 assets/preload/images/alphabet/C BOLD.png create mode 100644 assets/preload/images/alphabet/C LOWERCASE.png create mode 100644 assets/preload/images/alphabet/C.png create mode 100644 assets/preload/images/alphabet/CARROT.png create mode 100644 assets/preload/images/alphabet/COLON.png create mode 100644 assets/preload/images/alphabet/COMMA.png create mode 100644 assets/preload/images/alphabet/D BOLD.png create mode 100644 assets/preload/images/alphabet/D LOWERCASE.png create mode 100644 assets/preload/images/alphabet/D.png create mode 100644 assets/preload/images/alphabet/DASH BOLD.png create mode 100644 assets/preload/images/alphabet/DASH.png create mode 100644 assets/preload/images/alphabet/DBL QUOTE END BOLD.png create mode 100644 assets/preload/images/alphabet/DBL QUOTE END.png create mode 100644 assets/preload/images/alphabet/DBL QUOTE START BOLD.png create mode 100644 assets/preload/images/alphabet/DBL QUOTE START.png create mode 100644 assets/preload/images/alphabet/DOLLAR.png create mode 100644 assets/preload/images/alphabet/DOWN ARROW.png create mode 100644 assets/preload/images/alphabet/E BOLD.png create mode 100644 assets/preload/images/alphabet/E LOWERCASE.png create mode 100644 assets/preload/images/alphabet/E.png create mode 100644 assets/preload/images/alphabet/EIGHT BOLD.png create mode 100644 assets/preload/images/alphabet/EIGHT.png create mode 100644 assets/preload/images/alphabet/ENE BOLD.png create mode 100644 assets/preload/images/alphabet/ENE LOWERCASE.png create mode 100644 assets/preload/images/alphabet/ENE.png create mode 100644 assets/preload/images/alphabet/EQUAL.png create mode 100644 assets/preload/images/alphabet/EXCLAMATION BOLD.png create mode 100644 assets/preload/images/alphabet/EXCLAMATION.png create mode 100644 assets/preload/images/alphabet/F BOLD.png create mode 100644 assets/preload/images/alphabet/F LOWERCASE.png create mode 100644 assets/preload/images/alphabet/F.png create mode 100644 assets/preload/images/alphabet/FIVE BOLD.png create mode 100644 assets/preload/images/alphabet/FIVE.png create mode 100644 assets/preload/images/alphabet/FORWARD SLASH.png create mode 100644 assets/preload/images/alphabet/FOUR BOLD.png create mode 100644 assets/preload/images/alphabet/FOUR.png create mode 100644 assets/preload/images/alphabet/G BOLD.png create mode 100644 assets/preload/images/alphabet/G LOWERCASE.png create mode 100644 assets/preload/images/alphabet/G.png create mode 100644 assets/preload/images/alphabet/GREATER BOLD.png create mode 100644 assets/preload/images/alphabet/GREATER.png create mode 100644 assets/preload/images/alphabet/H BOLD.png create mode 100644 assets/preload/images/alphabet/H LOWERCASE.png create mode 100644 assets/preload/images/alphabet/H.png create mode 100644 assets/preload/images/alphabet/HASHTAG.png create mode 100644 assets/preload/images/alphabet/HEART.png create mode 100644 assets/preload/images/alphabet/I BOLD.png create mode 100644 assets/preload/images/alphabet/I LOWERCASE.png create mode 100644 assets/preload/images/alphabet/I.png create mode 100644 assets/preload/images/alphabet/J BOLD.png create mode 100644 assets/preload/images/alphabet/J LOWERCASE.png create mode 100644 assets/preload/images/alphabet/J.png create mode 100644 assets/preload/images/alphabet/K BOLD.png create mode 100644 assets/preload/images/alphabet/K LOWERCASE.png create mode 100644 assets/preload/images/alphabet/K.png create mode 100644 assets/preload/images/alphabet/L BOLD.png create mode 100644 assets/preload/images/alphabet/L LOWERCASE.png create mode 100644 assets/preload/images/alphabet/L PARENTHESIS BOLD.png create mode 100644 assets/preload/images/alphabet/L PARENTHESIS.png create mode 100644 assets/preload/images/alphabet/L SQR BRACKET.png create mode 100644 assets/preload/images/alphabet/L.png create mode 100644 assets/preload/images/alphabet/LEFT ARROW.png create mode 100644 assets/preload/images/alphabet/LESS BOLD.png create mode 100644 assets/preload/images/alphabet/LESS.png create mode 100644 assets/preload/images/alphabet/M BOLD.png create mode 100644 assets/preload/images/alphabet/M LOWERCASE.png create mode 100644 assets/preload/images/alphabet/M.png create mode 100644 assets/preload/images/alphabet/MULTIPLY.png create mode 100644 assets/preload/images/alphabet/N BOLD.png create mode 100644 assets/preload/images/alphabet/N LOWERCASE.png create mode 100644 assets/preload/images/alphabet/N.png create mode 100644 assets/preload/images/alphabet/NINE BOLD.png create mode 100644 assets/preload/images/alphabet/NINE.png create mode 100644 assets/preload/images/alphabet/O BOLD.png create mode 100644 assets/preload/images/alphabet/O LOWERCASE.png create mode 100644 assets/preload/images/alphabet/O.png create mode 100644 assets/preload/images/alphabet/ONE BOLD.png create mode 100644 assets/preload/images/alphabet/ONE.png create mode 100644 assets/preload/images/alphabet/P BOLD.png create mode 100644 assets/preload/images/alphabet/P LOWERCASE.png create mode 100644 assets/preload/images/alphabet/P.png create mode 100644 assets/preload/images/alphabet/PERCENTAGE.png create mode 100644 assets/preload/images/alphabet/PERIOD BOLD.png create mode 100644 assets/preload/images/alphabet/PERIOD.png create mode 100644 assets/preload/images/alphabet/PLUS BOLD.png create mode 100644 assets/preload/images/alphabet/PLUS.png create mode 100644 assets/preload/images/alphabet/Q BOLD.png create mode 100644 assets/preload/images/alphabet/Q LOWERCASE.png create mode 100644 assets/preload/images/alphabet/Q.png create mode 100644 assets/preload/images/alphabet/QUESTION BOLD.png create mode 100644 assets/preload/images/alphabet/QUESTION.png create mode 100644 assets/preload/images/alphabet/R BOLD.png create mode 100644 assets/preload/images/alphabet/R LOWERCASE.png create mode 100644 assets/preload/images/alphabet/R PARENTHESIS BOLD.png create mode 100644 assets/preload/images/alphabet/R PARENTHESIS.png create mode 100644 assets/preload/images/alphabet/R SQR BRACKET.png create mode 100644 assets/preload/images/alphabet/R.png create mode 100644 assets/preload/images/alphabet/RIGHT ARROW.png create mode 100644 assets/preload/images/alphabet/S BOLD.png create mode 100644 assets/preload/images/alphabet/S LOWERCASE.png create mode 100644 assets/preload/images/alphabet/S.png create mode 100644 assets/preload/images/alphabet/SEMICOLON.png create mode 100644 assets/preload/images/alphabet/SEVEN BOLD.png create mode 100644 assets/preload/images/alphabet/SEVEN.png create mode 100644 assets/preload/images/alphabet/SIX BOLD.png create mode 100644 assets/preload/images/alphabet/SIX.png create mode 100644 assets/preload/images/alphabet/T BOLD.png create mode 100644 assets/preload/images/alphabet/T LOWERCASE.png create mode 100644 assets/preload/images/alphabet/T.png create mode 100644 assets/preload/images/alphabet/THREE BOLD.png create mode 100644 assets/preload/images/alphabet/THREE.png create mode 100644 assets/preload/images/alphabet/TILDA BOLD.png create mode 100644 assets/preload/images/alphabet/TILDA.png create mode 100644 assets/preload/images/alphabet/TWO BOLD.png create mode 100644 assets/preload/images/alphabet/TWO.png create mode 100644 assets/preload/images/alphabet/U BOLD.png create mode 100644 assets/preload/images/alphabet/U LOWERCASE.png create mode 100644 assets/preload/images/alphabet/U.png create mode 100644 assets/preload/images/alphabet/UNDERSCORE.png create mode 100644 assets/preload/images/alphabet/UP ARROW.png create mode 100644 assets/preload/images/alphabet/V BOLD.png create mode 100644 assets/preload/images/alphabet/V LOWERCASE.png create mode 100644 assets/preload/images/alphabet/V.png create mode 100644 assets/preload/images/alphabet/W BOLD.png create mode 100644 assets/preload/images/alphabet/W LOWERCASE.png create mode 100644 assets/preload/images/alphabet/W.png create mode 100644 assets/preload/images/alphabet/X BOLD.png create mode 100644 assets/preload/images/alphabet/X LOWERCASE.png create mode 100644 assets/preload/images/alphabet/X.png create mode 100644 assets/preload/images/alphabet/Y BOLD.png create mode 100644 assets/preload/images/alphabet/Y LOWERCASE.png create mode 100644 assets/preload/images/alphabet/Y.png create mode 100644 assets/preload/images/alphabet/Z BOLD.png create mode 100644 assets/preload/images/alphabet/Z LOWERCASE.png create mode 100644 assets/preload/images/alphabet/Z.png create mode 100644 assets/preload/images/alphabet/ZERO BOLD.png create mode 100644 assets/preload/images/alphabet/ZERO.png delete mode 100644 assets/preload/images/credits/dany.png diff --git a/Changelog.md b/Changelog.md new file mode 100644 index 0000000..8e57b04 --- /dev/null +++ b/Changelog.md @@ -0,0 +1,65 @@ +# 0.8.1 + +## Compiled files altered + +- DenpaEngine.exe +- assets/images/alphabet.png +- assets/images/alphabet.xml + +## Changelog + +### Additions + +- The Time Bar now has its own entering animation for normal and pixel stages. + +- Alphabet now supports the characters `¿`, `¡`, and `ñ`. + +### Improvements + +- Windows Builds now utilize DPI Awareness for higher fidelity visuals on resolutions greater than 1280x720. + +### Fixes + +- Freeplay vocals can no longer persist into PlayState. + +- Icon animations now all respect `gfSpeed`. + +- Ghost Tapping animations now consider whether the current section is a `gfSection`. + +- FlxBars no longer have choppy filling due to a rounding error. + +- FlxBars no longer incorrectly floor their percentage `Float` and now have a `roundedPercentage` value for the floored version. + +- Strums are now perfectly centered. + +- The Bold `(`, `)`, and `.` characters are no longer improperly offset when using the Alphabet class. + +- The Duet and Mirror Section buttons in the Charter now work properly on all key amounts. + +- Mod Maps now properly refresh where they should be. + +- Note splashes are no longer spawned in `popUpScore()` and will spawn if ratings are disabled for the note, but not notesplashes. + +- `popUpScore()` is no longer run when a note has its ratings disabled. + +### Optimizations + +- Note Spawning now `shift()`s instead of `splice()`ing. + +- Philly Glow Particles are now `recycle()`ed instead of recreated whenever a new one is needed. + +- Modifier indicators are now made with much more compact code that only adds the sprites if needed. + +- The majoroity of objects are now properly `remove()`ed and `destroy()`ed instead of `kill()`ed and `destroy()`ed, as `kill()`ing does nothing since it is immediately destroyed. + +- Text made using the Alphabet class now loads characters on demand, rather than loading a huge sprite sheet, which saves on RAM usage. + +- Crossfades are now `recycle()`ed rather than being made anew whenever one is needed. + +- The Discouragement Elevator track, and the bfBeep, scrollMenu, confirmMenu, and cancelMenu sound effects are no longer cleared from the cache, allowing for faster load times on the Manual, as well as not needing to reload the basic menu sounds every time you swap states. + +- Icons no longer load their graphic twice when changing icons. + +### Removals + +- N/A diff --git a/assets/preload/data/dialogue/TEST.json b/assets/preload/data/dialogue/TEST.json index a932395..ac074e5 100644 --- a/assets/preload/data/dialogue/TEST.json +++ b/assets/preload/data/dialogue/TEST.json @@ -2,7 +2,7 @@ "dialogue": [ { "expression": "talk", - "text": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM\\nNOPQRSTUVWXYZ1234567890|~#&$%()*+-:;\\n<=>@[]^_.,'\"!?{}\\/×↑→←↓♥😡", + "text": "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJK\\nLMNÑOPQRSTUVWXYZ1234567890|~#&$%()*\\n+-:;<=>@[]^_.,'\"!¡?¿{}\\/×↑→←↓♥😡", "boxState": "normal", "sound": "", "speed": 0.05, diff --git a/assets/preload/images/alphabet.png b/assets/preload/images/alphabet.png deleted file mode 100644 index e3d2b851e762e55ccc186ebdf2f1e16885cea8d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88623 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/preload/images/alphabet/A BOLD.png b/assets/preload/images/alphabet/A BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ffce26a916e9ee849200453becb75f509aef74 GIT binary patch literal 1474 zcmV;z1wHzSP)0{{R3O1Hov00009a7bBm001@A z001@A0bXV02mk;8V^B;~MMrQ<0000000000000000000000000000000000000000 z0000000000000000RR900001ge}4}T5AW~qpP!%4&(B|9U%$Ve-8_;Ro?qPS-W>|*{mhA&UT-S%XioQ4Hh5zYWZqq+Z?#Wj>}%a z%EnS-2PyjrD+i|P*ar4Dlo?`LuVJn1{lZD1uC7Ka#xQ{wZI)vh4F>B11bP2>_ z+Gi%|5{MNAuP6qLG zk2MzFluKT~>gHT{FteG!TwN*&mRUL1f|W-jn+&#JE(zF8>K(Z%s&fYu*O)^I6iNrf z(U=MuI|~L_ghcpj1DgysK@|)47@JR%b2G}C?w-w%c(6km>*)&-a_&l9M$1d|mzGl-OvYEWg1kkeTjs@;qd&SrX8slunI_Ef-^M}0W@uvNT z&EoidxyZ|6l}%Suhy)4sA^QYKM<=ojzI;83ND5$^CWCUAtA{T+tGo+h(<6)X0`!$L zo{%;(bFR+(kx0>IK(>4B1&cUrK(L&Qcm-;CBKCmTOsRJ7O~7zw6r@mg5a7gdoDj4G zE0qdJU&jIW60i}%e3Hu%$(NgW8I=ktgpCNcAvWV1QZ8#yoeA}@8o?$6a}5Hk$>lmV z6#@gSLajhTkkaF3p~7XeRVze>`ZgSc9d$^NK3U6l+w03(+#xygxq9`$<9I}|9ml1v zXAH{~Qnu1;wVZjlfaz>gV*XSH1Im=(Wke6G+9<=^itP7fo2AyntB7WnFgfN=D=tM8 zLd<1%3)^uJ_z=I|;x=3%P`xymlnOy5H^J=+lvyt$ib92U3At=X1nW_PM0l6OIq*!% zg#~WpTyiiVU<(Rf4qKvXB`X*&EG<#T62!?$z=YO!2y;=*nHvhX!6<}8{r(YF!YrOuCq*+ku(_Sza&df`poT)3D1hR5oQ|81;Ul7wG_y30nFIL)8c`D8! zY!^LvLG&>>b)7l^_kAAG+B8=^fhcMri4dmGNX|I{$RSZSUl6vCt#YBjA|Zs*)X~Q< z>U_COEmALXWalX)iaVO(CiOP1dQ)$WC`aNJf2sxSshPe%u;KcykSlerFy5jc&Up_n zvVav5?CZZH17qDFjo$25|AKw|!#}=mJ`xD!O502=VIQF59pCSf c)*lpq0WiKMBPxXh&;S4c07*qoM6N<$g7sjUhyVZp literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/A LOWERCASE.png b/assets/preload/images/alphabet/A LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..aff7a4069a0ee382206de1384b04643965b3228b GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^9zd+d!3-n=&g#YkDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1v8wN*XO@)U;lpp{P_O${`smI0Wk~=j7L3P978;g zPn{Mic36SKb*|{*V}I9g^JHgk@;#k?j@QU8G%KQ`Agb3__iWC`EqB*Vy!-uh*F=H# z87j)BUi#^Xp3CVp60o?e_N>IzU0(8%vh`~2XLoIxr*Ouay#1FlW!geMdxNjlpVqML zH#nugFz;WYRF|=a__mtb6LUW5%1jeZ4oMA^n$f?z=JofG8LKnqTT1TxYdWv)lkE%> zp~A<}Gk@<|$hh>}+K^iotOAt|?TjDyeLnSQf?1T3(R*b!U$2m(a~Z45Vr332Wl^k_ znWS2}#Cuj@`TH5^JKcY2M;dy!eT#0p5Rj+Mw$?Y=vM54VyvMU;qT-&#Qigtfzi!@E zu~?+kX2R0BTCvA@ZLX8({l0`-Y=9q|B<<<$46&GE?xX8x)$$&DWYNodY*}^M zL(ko9p)dL>V;LLghZopSy|FUxu4==)yVC2=hn?-4GJD3B?ni6*>9{Bvci24 YKc7qTp`(V+CxTLkr>mdKI;Vst0H34oZ2$lO literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/A.png b/assets/preload/images/alphabet/A.png new file mode 100644 index 0000000000000000000000000000000000000000..eeaf74993c10325e40936f8652ec68c83d41b0a6 GIT binary patch literal 817 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|X!3-qN+{--=q&N#aB8wRqOs{}2V_fP}4xpfM zfKQ04dw~y-NfNm2sHX+gAW#zI7tC-!pMQS*`~C9g`}OVX*Zbd)Z<@uxz|`UC;usQf zcxuGWZHE;&dVY)b{{O#q`|`7)CR{Dc?R<22n3axiG*~}(+P?>pTIY6lbM}4Bp2@ne z?!lphs{-z^T6Kwq@87g~ z7$?nhS1wh!eRAHkGV#f2R~%R0zOh-~({SpM1?Rs#3)I*ub)Z0DX|6*;ThMAYrAbS+ z$o?o+wX&@EUoc^g$4bvb0xXVOTfQn}*ey8bFXdyn=y(dtmOA$hN)m#LTexohD@$lB zkGC(CZw`E`UMCc$pIEj=p;S7J)5Xf=fu}>%k~urKM_m8h|LBW|yhSay{ON6`C)97e zdl?;af1coXmiM>sud2?qULEz~;jL}{?IBqH77g{0cYTYIANls{ijKi(QZp+kK8xK`*w*eid8xvAcfL4!KpCZYKm3l~Y;_ zj&0uO5YJPPqF(4A&Ss%-`Sv`)^NicA3^uSxy}fpH&Uqu_ORj4_=U%Ujt}F?ABeo~a zjirb??sLq&pC@hCd#2zuNSYP5RuoSBtarzvpkN+ji0Kx3rJm%q3;-Ucb)F4LkGn(L>ha%|ABU Y^XGJbd$acRAy5MMboFyt=akR{0MPMXs{jB1 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/AMPERSAND BOLD.png b/assets/preload/images/alphabet/AMPERSAND BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..1206757182f0af5c229ec8cfddefea8dd0a86274 GIT binary patch literal 1710 zcmV;f22uHmP)8F2MMrQ<0000000000000000000000000000000000000000 z00000000000000003#zK|Ns90008gr?+*_Te}8|!zrQ~}KhMw4A0HoIUtcdTFQ1>E z-{0S_udh!}Pmhm}Z*OmgL#c%T000qmQchCjm`7>$0l17jF z?Qe;n5tq9BTRSMi1|=zfX;(#RX=lHUH;yF1rFQ6Qr^WRV9*s}Z-0#vo^r|1F8A-x&LWq=XH2ph?)CJ=A3-z5p&A~hm zBmEk4w>GT9QJnSkpN4Hs(XeJ%Slmzd9B`~c>~M_ zfZ5A~RS1s*&DRL~K{7@K=69M}!GHKHmqt`@c%_%5Xa@j!l8OB7kdMOR%dRyjNrNnf zTA;|eA^!=~r=oX_;7n|nZIAxc$e?czkY%y}$0~h{I-_2Y?lW6mR+@1qOAR(hFh8Sz zguoHYx(;{5HgcfoCLIR@(^W3Pv3VL+4ekqb2HMPJ@CaFrQRlgLp|4%3RI&vUB|?+j z+|#P#^++LG=j*mH3CFfjmT;P_$gVnW58Xx3u`?<}v;#3xuuW|bA|WBAu~+?JcA5!> zr`x@)Ds(2bvhlVoL6)g!u#>Y0ofg{3ZnQMJ9aUd1=P1P`4e8LmiyGuXL&DIf=u~09 zz?`-m`3HO2ay1)VsLLs{bM#aHh+H_6)cC`9g*E2re=(U=RdsiBOJ|)`cd2i8NpiPR z=v>FtfFlOt2qr94yf_tr4ms@qvPC{7i}dW(eHAi8bY;Na)&4mnYM8XYn(JU1~VN9%NoRGB}VTlTcdoxwcp2F#g2 zY>z472c6Zmlbyro1zG)-8gN=NeJ}mm>S6gKZ-uH@AY3(*l}B?pM;gRIm%rki-oMRJ z$$0DAZJ@vRy4+rU*lJY44?M%ArOgYBN$eC?n=!qN;_8bkIicUV3!t?lpp*Ra=jKf~ ztLR8w^_n-`jxhy0F)6e>tdUs+PRt7A8`NiU*a&9(rt9?wwo`YZhxokw4QtG1SvNCV z%<`zQSXT+(p3rUi8*~4W*+eCc$$B}ZOW0-_xGcCMEu4*PeYq08;|f^mgMCY4v**NV zy!7v!iwv(8O{8v!S@dh2ox9uWtad-3t%(;ByndG9k7YbR+>`El1L{$jqqRJW>?>AW zlP^5u4A%A0)4lHnvBX3g<<%2YoU z@^A}(i$#Zk&f}Yh`*(XSbbhcg)vhd!EA!wR`3kRt{4@SCFB36tnAGu*ak8t=Lc7P$ zn4f8!dMPL8aqtVLL+^?$uOp7`a1)WXRXXLLCDDCr^LEYR=@FWf4~BLVXUtr3LV9~Pd3XnJEdgIifhbxp)$?+v8ztOL7)4o>(srbKdRh4>w$C2aW;m8 zfQaqCHD(kqcI?|a^_RI)()P>mJ{G3t3g>&fUvpV9VRdO@=|}bNA>65zdkl9TTee0C zsHfXpW0lR-m?`~>-G4uxn)|t_&_8*N&qdy~FI87AEqp2-KHp?lWX!CRSzmdKI;Vst0NQJ5d;kCd literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/ANGRY FAIC.png b/assets/preload/images/alphabet/ANGRY FAIC.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7bc2eb7043542a3dd1a37b4687064e6c9885b0 GIT binary patch literal 1162 zcmeAS@N?(olHy`uVBq!ia0vp^SwL*Y!3-oNHviECQk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3uZVUzkdIG`+ENO`ttYv`}1{8e8m|Um>+t&IEF+V zUK??9(i#Px&~L5>{{O#~y`9OE<3@1lXQOU8r*FdBdnZP$35}l^Hsh^(r`k<5rGHHq zes>|3oTG?dvUA*)h--PuiwjAjA`y^Goc#6fjnKIY@N)|6vJ9VaR-I3xA8;;Fc zo|Km%vNK@g%!*=uk(86%m--ecrbya`eUqNE!0=r1jL9FetZdmP+>kw@XSs8?u+T9l zCEo-5T$R@|N(z^7+iY5#eb6>x=1NxyWuMfFB`>aRQoTL@{TyYL*>fJK{oQFD_Or_gCL_Pd4VBGbP?+?yjm6`x_EEW=Br@{anZLyvN;Q&kE+qoR_t{reQBXn;ETE zxL_D#aJT<<_V%UwmhE?uQ+jyyDqp|jEZ*=B{2qq|uDb|{`fu7hHuY#-E?<m(4p{Hc5tC38!?~%O%_1{o~_0aM)vN{K7{Iy!Ng7WH57r)=>kwI~U&GaC*v= zvV7Go$9*eqJu*6#?G~D)P^#nT5jxvDeA<-r@9pk}ZVu)W;Iu^Uqzx6Z$^IM_zw@jZtu>z$Pnn{Q<^r8pi6*30wo4O_~f9>FuwU=+l&s*xYHVcl$l%C|c?RlajwMN8~ zPefqFD;^oswn^37Lro8|`bRqaE?s;37u)sQX4)tG*1L93Y?mv^;`7?7`*L1aU$oAK z@2~5WqoTW+y=7d!1m#Aux}TkRM%S}{;_o|JjYp=QZQ`0VIZxs@<1)TTm+LEyc-`7x znjBt~v~c#4R>RP#QkUZ%dPuoXI9R<_O7f-O*)y%rUVq{}aIoN!fyC9DGiQ~mZrPc3 zrc!)%hlFOeqUGKgtzSw7KHqjXHagF`%O5oP-u3PCp`S?`!9M zZb`fT&d$SlvChhqa;$vXc^_-le7~jps`0<+oToC&eeRwsKZUup+=JLx_e^^SGuulNu@ a?LXs^q&*QD7J_o1lEc&0&t;ucLK6URE(sj~ literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/APOSTROPHE BOLD.png b/assets/preload/images/alphabet/APOSTROPHE BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..beb2952da4ff00bcbd6bbc44af9f126d642be58a GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^RzR%E!3-o-o^pi%Db50q$YKTt(<>m%7?=8#11Ojr z;1lBNUf=^{5)c0W{|{8m&(A-9{`~#>_t)3guV24DKR-V{KK}mw`||Sg=g*&i|Ngzc zzP`V|zrDSEe}8|I&@xS+9)Xe|zhH*@_UrZQ&-1^JpP#?qU%vlIoar0}2F7ciE{-7{ z$9t!~oYt(s(;6F;uY27l+WpY7R%;9Y1!eihl{u3a8p{~J`_hoLRPcXB)!HE4Iq!9(-Q8!M z6aBX<;>O1m#bxI%*-cs1vE>f`>czMJFBN$IBExy}%7uHn+Lw4cC)%)cvxg;W{JYKV zIeVtSo_())nGe5u;4~}Zy0P4)1Cw@U$OWCRVs5>`x9v=h*ZV!@!t)>2*neHKa@|wQ z_5WsJF+j^HnmCBgt1UHZuikC z4fEY*c1?I`xQyk_`ElW0S8xr<#vDW{fM=o=0R{nWv6Rf7x@8WGX u*(UT|ul}M_?@#^y<(pjad}fD{VDtWp?SXxMHveit$;;E#&t;ucLK6V9RwCm7 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/APOSTROPHE.png b/assets/preload/images/alphabet/APOSTROPHE.png new file mode 100644 index 0000000000000000000000000000000000000000..9a969b30cec815d77bac37cb1d8f87b170ff6ba2 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^N;3P`=i5*J78L=MJL~D<7@~2$ z^wMpy76lI00OO-q^#1+7ey*dfAdNTwU1^ifoY|q?8kRdl#RczjUAkCxG`2@VinHg) z_Oh1bL)VrZ3+6v`duw=_h2WNg$9v8dZ<%%3iM@Zrz1*(46gQ0J3qJBVD9u(AS$eeT!Sn5Z`9C(ve>tSO;cUHz_^-yU?g{Z49GbU$3pvBw z#TIg;?DjS~zFwD?<7$kXgX%Gv{f^gHG`RN47W*uEe`@9VJxe58c|?46lmu@IDzE;> YkbYjqLFo~*3n-L4UHx3vIVCg!0RB9J-2eap literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/ASTERISK BOLD.png b/assets/preload/images/alphabet/ASTERISK BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..ab721855ab2e471e5354e2b5c3923a28378246c9 GIT binary patch literal 889 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qg!3-o@BhGmODb50q$YKTt(<>m%7?=8#11Ojr z;1lBNUf=^{5)c0W{|{9B{{8#?`}gzn^Viqc>+9>w%gfu_+s~grKR-X;-{1fK{rmCp z@#oK<@9*zlzkYq;1JiV%9)Xe|zhDOY{Q3Lu$G@-VKkqNE-@jf#d1?{^1JeRe7sn8f z$lP0b2CrMVYZvAV=$WxuaKWw=IgJx99mbsaf$}~l+JCi9f?UjA?&A;vbj}3U3_m9OY;@b2a@nSbwQ-24AV>THu@ z-?0pHNo{AIqlIS)dB+c$J}Qwc^Jzip8WFr_{~RxS+jg<(du43>prlT=H6XrgMoV_p|i+ z0~-?j%+h0TEkERV%415Tf%@*vtL$!=RJOS7dUW}9yQ@{w!I@rByfe?6zB!ZmwM2Tc z>z@OP(>7i*vR=FDuZ*3zU!T|OD+g~CuQ_pMap{a@sjj<1CaktjYgAmQJ+WG9@+r^S z2UQ_{0=as!zJ1J_8Qsp&USnN^BnjMh)YAfL5GV=q3ubuVzutcS{`36$_vPdL>+|2cD$HYGV6^abaSV}= zoO&>_?687}%fZt>7{GnVy)7IUuf z6<+6bEo6zdpTGWs8EQ7|vHYFeAALz^buBhwRv>y>)&xYzb#+&Ia)7PH9 zWcHB&AM?)1*PS1%ogrt_9xALId(CC(ZIjClD`vV}HwjhDJa#d2ox?Sexq9bj+sRBQ z-MFCNC*A6%6Q|W$hYRiPOB6$PtvVRG>($kr9^rG_T*No4bo0z!nLRbQr|{v1C2A-4 i&geA!)Gm?y@E!YhHhbTWk1LjfBE-|x&t;ucLK6U1#I}V1 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/AT.png b/assets/preload/images/alphabet/AT.png new file mode 100644 index 0000000000000000000000000000000000000000..9c693a22f732b384d0ce86ea212ae572df1b1181 GIT binary patch literal 1053 zcmeAS@N?(olHy`uVBq!ia0vp^89;2o!3-qTe0)=Y6lZ})WHAGS=@k%Wj7xpW0TeV2 z@Ck8sFYo~}NdmVW^|XK*1WJPZf*IoH-+y0!em}pxe15z zIKI;x87=+p8;Y#0+-|_i_fxU@v6s59_N;F{&aV#rV$h0Xzqz&c=Eba|qM_a1XC`S~ zxO{2lJVTK!8)DB(e0pl#_9#S5^U~`>Ut}M3A0(-zPGh; z2Iq3FviEuP(U3vX{m`}3H~vpD?#Z9PWiiY3fS z$uDH)g89M9FJ0O+1Ls+VRh4Y_>e+nkyOW5^_QHuPr_Wv@@uebrclirzA^z2YhN&Xf zo+n7M!}doV%kV+~AR{e@k|?xlt0=y4mGMo3{ z)0My8&v;`W&%$`1F}^a+AT_e4bgSgf(yz0o2LD^BIJxe4dEK5(DoVTV<$0VH;rYEx zbfwSklUpwzXx~_Iyx{#ivA(408ynxm>m8n0d~WB#_NkxFNA3B?zAWW()4N5lK7cZ_ Mr>mdKI;Vst06O5(T>t<8 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/B BOLD.png b/assets/preload/images/alphabet/B BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..e587dace6c034d45ac8b7af92a0d03f19135a632 GIT binary patch literal 1406 zcmV-^1%djBP)>6)t`42Er8soGI+seAALDvuU{1Q0p-HBaaDlO-e}27$1!B$={;ywg{3ZDCGG z0eC{nG`fPLJc(=59{Xdt<)P?p#q0Xd@{X{4)((3nImQb&UZeU8jdH&9l9zZQ{qlxy`3^ii<*N_htVrw?NY;O7cOZ+|q*ZqQNY+^NIBoFZo;Hz}C6v=n+APs5)i{SBE!h=+I zqqaJx{EUwF&>Fl$9=NxXj}X86RGjSD;e24lzGlcDNA5@_XY`*8oNt!or}M|C#11Rh zo}ghKGQY!_|NcMYSrvvn6MRU}?|e^)2(Vx@{BVW|!fSzB&Kfc0D|XNePDTw(C;ZehM>hF@ z!Jl=A10PTP!INQh!&5Q;)Mqp;6{{<19VgFZR4D_G(X1WLv~KxDg{%aXQFfet4E&U* zmU&K~%#rxDJZmiYmHfEE(64ID3;A~a0GtGO@@xZRF9J<|G4aldUoTEIHI~VyK5Lmo z9`eu;+-$y-H%GPXMQV9c@UbwI|sR0nmj5Mh7neKe03bSDi!n!nHtFn>#z8Fa)C>I zp5h;-{DQB)4ZfbdoTE3YK+D?y8X<&aXD^^fMP_QO{nGqRdS#ER3eP*==Qdg5x!B zrsK=D(_gyiw}%)u(_9reDq=HV{Ou`!PX8Hr$&0&59QesoR4M3NdzEPgej_hiSE4K} zuw!1`9*W>rzGcf-tD*$n+VFL=RDqn|7(*8@#waYQb^K^|!dHw8cQM1j(uQq>b$X9C zvf+xq>cRSTg@O9n`*63YL)Zbo#bLRAR@5#la0@@a89MIA2TylzItjJU1Fi=CL;E)1 zoNb(0KX8P5I!H1d&Gsx2T0fhlIWg!zlDj^&{FXHp7I@f8($O{a4=5yPjKwyX+W-In M07*qoM6N<$g4<4!xBvhE literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/B LOWERCASE.png b/assets/preload/images/alphabet/B LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..692728dd4b17ed15c2fa5de205c6ae21eff209a3 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^c0g>z!3-pg@6O-_Qk(@Ik;M!QrdL3iF)sBf2S_f! zC&bmgzz4`A3EXzn(*kM`C<*clX1KrJ|2@CH{r>v-`SJ4o=k2E%I5RLXZuE3<4DmR= zciQVo%?doNPvr!rey_hZ^;#=~;+rkTv-dBT*RnkMa$D{>=Yrc?_&5)qOI5xU%dWp# zlP}UQQSJA19^;$K%6;YPRpj{j?SB5MZH(u)+bR3=gt5)XT|fBz>yOCl%in*P*XSM> z#w}BEGruNXsGt4X6mJ>3!(W-~D`mub+y5Wz?=RT-!S^6<{bp^OylZd&t$U$iWZ}`+X0p{_`H)JTIO-Zh!JMjg_yTF4%o>%G4ag(!1j8 z_RU*)T>aF^jSrYox4HbDJ}V+rTt~HfOTFgZP}_ov1s^v*nipZ-@J)Y-;Ud$<-G*hG z*C%iYJq}EFzay%oyyMs|82L!tN84HFxqZODxZCNdl)Dsc)I$ztaD0e F0stK`^f~|l literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/B.png b/assets/preload/images/alphabet/B.png new file mode 100644 index 0000000000000000000000000000000000000000..e1735a87f048c1601a7d21eaa699e7bd29be0934 GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^K0s{E!3-py<;_U|Qk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy#S<`ByihNPYb9)pd`pInBn~W`TXzo_uJR^%g5)h_uo>(2DFE%)6>NBC|h*#qQ=8@Zg&w;Ga`n;NP-=)2iqEarLKLbuH$| zuiP>{UrV;NL(XL45~F3?4z(Chm?X1xZN}83+fODv)ikh-R137+?(#H9Y)5YAEdI)) za|LbNb9NoI+tL*+^=TQ4$C^ESNf*|6Z*@=dYPX&vr73u?pK;DZ*$KbCPxlCjexsRq zr6YFZV^In3ppEhA3Wgi%+171dd@J(6D_J#>TjeJMgw)^48kfy*&aASRnRBD>-$~uh z(kUxX+oUI%J`LV@M>fwp`Rj=(CW5P{E-c_w(AoNFx(#ce+moYy0j!Nn4|J$*Oxj@k z`SbmQ9q-lnXIxCa?x9>N5SuJ;dc}qB%cFL8F3N0N+{1n7aoU3RN4xAFO}pY}bY$B) zPA})c&ZP{~Wb*wRUg`2@nC4`h-LRrkOKO$%myO(BIbOcEcAw%-x^X!@ZsDKpH(X8q z?U!v6KGM~BbffKrLLN14AdT|p2|%)(qJDM$7ABjdGt{M zJNwDhqX%Yec)0qZ)Vrule)GB#?02hmUAlI}#=o-SZh&?~lt{78GRC(2h$lwNlfKIR z5PqRIhv#Uwtij7Z;qHuVi;WGpMAh3g*_!)$wPa2I2A55Z+xX(XMPR0v%S*R~?MtQC zY5u=>;ZKnBX14gFX}mwZ&*W+IZ@Yf&dD8pY#=3itJUee6X?syGaPsrjylF?{w<^wZ zUM{j(ad))2_FR_oFItm-cllNBc^u*UcgMs{>-0TJS@K`pxBs?yso$m>RZE`#5sv@M YY?{6DjFU*uBv1^BnjMh)YAfL5GV=q3ud@4Ki~fRe*X9M`tknj^ZWmo%obu`V7%q&;usQf zcsl0eT0})yTz>!auRga+I`@0iOtsTrTMm4A{lVCG=kgssS5BxdJ?6PQ^dGzG zx#?R1Hk<8qQ(f{=cj>lk_itGyy!E zRLbZ|4u1+u>fHOcgH3&AHZfidIO-Vr{JYrHWQ}j1E(>c&Z!xh{a8|WzVGnBL`@XDV zioAAs;*-IB%tTNLpEDx9#Ud5{>Es$Dv&mo<8 z7f;B%6O-9LdGEQ<&b8=Z$MFwg{JecOy7SJwESZ8@){<{E_WISE{T-G@yGywpFFb^*P literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/BAR.png b/assets/preload/images/alphabet/BAR.png new file mode 100644 index 0000000000000000000000000000000000000000..739b1eee73b9514b0c33fb90dd64335488176455 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^VnFQ1!3-q-Kbi6mNO2Z;L>4nJm|g*4#<;L+@%o$rbh0E2|9ObYr;TF^QEyY?2DEL(m)HOonHM)5Tuyu<}dNd$dNpNXS1gEmSAZ zM0By;G@s{2Yz#KyRfpfz&g*{s^u*?hi)9fo?sb084=sh z^B&K5>+F|&Zu^}1iFRjJmp!{V_ptemf9Jj)x_DRXcm!tv~_m>FVdQ&MBb@0ArJ$*#H0l literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/C BOLD.png b/assets/preload/images/alphabet/C BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6017027aa8e5e0802043bdfb3912eda702c392 GIT binary patch literal 1518 zcmV~7s-vVXJ_>^2j-$``AU8~4C1Cqbc*BW>H2w8erobGoY}sYhYc%U)ksMTIA2}|Z_R=Cs{?Z%T%5qW4I@M^~ z=d+>@@!2l9$BS!4b=-Ue#CD=(&9#LT#(%k+dr{uQ)*(ARIo&HP4R+qfdSV~0*u9Ke zSu=B1xiQooOnZ(G+{it74G6U~C@KzaloZyjnnu)~rgkmBx$G;ZZR!=+c6r#ssD$Xe zy;^PK8+Q?w81+}yNoF1Fs&rZ`=nOQlZ1q6uT?O+!Qf-?7_s#>&K?SR_hgm%vYvRAf zgFxDoV&Ggmp=#H~rJ+U!urW-?#5l>!mrDVht0is0n>Tot`!WN?{Nmbjcy-FSQ1p`l zmAdz&SB;w|fuha@nVUr6y@>*DaAB<6vV{J9^}L!^IGhzzZV~h=L@j8D z_jo-BN)P(sHwlE54d@s*)ipw0@dKP(fHd+0QS*0;UF)=toq-eH%o(@zD-53OvL= zbe~~BiF&U#1_liQJm5lHK(U_H$NQWq;|(D z^9HlNH?;oepjoek^wf5c+Fg9%VGtai3FWi6eh@h+^w2AojwZr(d5*OCToLui< zoP2xbN`v1#v*5h+&XZawKRCr{cI$-;G8->?W{w|^ghzJC6F|9q>ogJ}#5jM1Jhjv*e$ z=T5yn?SKG}>)pp;fBs+hTOO;*k>)G+*6oW2-?0D*^{v-zEDU1wp z#}CmXJ9g{TR$N{F+BSS!Phw%O!NW&K?e>e@+o4i$vNv68|B2YY)+J9TK3V$eMTVT+ zybQggX7@iG{eSQ=bvv*DR9|X zDZ1h9rSu6KzSqv*HN9}csblBr6M~BBY88K_-OZEAn{dLWG>*sIX5*|HMwb7KXX9O_ TL@;eU1&T9IS3j3^P6^BnjMh)YAfL5GV=q3ud^lKi^)ye*b&^^YQER`~8IvTv@}wz|`#N;usQf z_-w@Obx##IzFu3kcKiSTw{GU14=GX3FjAM4n;qJ8f@zvl&CRl`>d0H4)go@6`@1p2 zhB@@s)GR&MSM2p(40=X^hBrQ?{ywp@f8Ft2wNEPbXLvTxfA4URi&ye!T$x|{M@|_= z>F`rq^5u^`*z;(oh-vi!?RW2rL|*Q^am|=F@BJnDRx^oh%WcK4@3`jM@$p&Lsp^W? zW_*V?Jli-!rp%Php*c(QOO0=Z#JZKg{y29xJb$Om3`|TPmHasI5cxX_S26~6%TnWoBl~r#&>O?sqccT zL3YzNeQ)ZYS@TBwMePka&o4gT-Y_vA(48fE-FT(g;+ek9N4v6ro$?W~$|GBUF zYEQ)17cQIJDCjIYpG%%`65|Y|MozOi(lU!X-+FBfYE$@i{#Z5BqJHB~?<&%kJ>2m< zVdDG?`TMzN=1*SGtXbxA{p{^uhfIa;u5I!HUx!7&J<8ri{ ziCK2lg9E)$AByf7ua0YupKviRdcwu3Gqo=BzdzmA%m4Dsq2vx{jkoU8i#5_N=ACQb ze*T5pVuuJ{t9?IJ_TQU(LVSb7o8Rr#YIkmITIV?>(d~8adFdlpj{Q*lksGn6o+0;d V#k1BGiKjqm+tbz0Wt~$(69DX|Y`p*g literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/CARROT.png b/assets/preload/images/alphabet/CARROT.png new file mode 100644 index 0000000000000000000000000000000000000000..d998733cee3561727e99eda109012a11f90c6d71 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^4nQo;!3-pS|Es(Kq&N#aB8wRqOs{}2V_fP}4xpfM zfKQ04dw~y-NfNm2sHX+gAW#zI7tAnUU%ozmKmYsl_wCpB`{ysvQ=iAcz-Z&?;uvCa zx;6Cnq80^?FMZq3{QrMz^R+T2$LZUpnA#+LHD!FChpdfiyQrA4xyA9j;KlbJSynSG zyf65a$0OcGXJ7f>&gAI&R_8zdFI*4Q-hZsMkVW^(d5-BGyZR3QKTydo?a8z_Q{&F< z7zcmOyX!dPRL)d6Uz(tPc%`&Y3g_J%j=mL}j;uJ!FOwa4Z+k|Vx}Zx^ih$Id9gz>k z3MA|+n)&s+&2rPZRgB&)p0eCoHs5K6O`W8H!BVZclJhzJRreH}cIyyU-?GVO-sde> zlcgAEm$RrMSZMTELa9{nOz)9x3K7>6`=YE4=yzWBzQ&)iK5&=E z?dS(-0gn6R?9c7yO4+<8Ub*z^=C<^S1)X6xdB4i|+qQ8Yn*U(7!IaE(oaRe>f5#t) lO>EZII48Q5^FyA_JN{WdMw?C;v-W@@#naW#Wt~$(69A0Lum%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBXHKmR^np1#g z^in_JIjVvUvz9qtKI5EMemZg57sG!hoBv$c|1W6a)@Ls*Ip61^ z=&b(MKTke5TgNQ5KgHRqfAPc_E_?}V^0fE8v{<&ZXNLQdwcPSfUxTH&FSvZlTJxJz zbNa+>UXvxRTX^1lwC-g_|MV$4SDb#|xjf7B^mEVfb3fx2$RF*IXuK+Y-VGEip00i_ I>zopr02PaSAOHXW literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/D BOLD.png b/assets/preload/images/alphabet/D BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..65798992b28c2c2548f7da9d556de822dcac935c GIT binary patch literal 1407 zcmV-_1%UdAP)0{{R3PC^hI00009a7bBm001@A z001@A0bXV02mk;8V^B;~MMrQ<0000000000000000000000000000000000000000 z0000000000000000RR900000#KRSjOH*=l-v9TM!e9FzY;rUwg0d^^=f<5G)H0LY(jzS#*v#Onpl` zTtdhO#S99)r^ol#+l73*vQ(+!gi$1?qR^2dBrY`LB?H|o(omvR+^8@ZFMf6;F`?cV z^6bKFL~tGaiF9~D=js3lnSVrVN|&qrkbBVtUjyaOK@ znu=X>3x5==!PLyD4>ZVuZGm`vLHjWMrEK>Cqk7v4CkXnD+@r5xOJQEB5s^KkSi`0xJu`S0}w7z@goqMb}s_;54 zY|%JsK(8%uQlb>u!~%@bkb`-&XKD?@xU64_)X4keF6JFY#8xq6=ih{x!I)=i7Ze(Yc9&y2Yq@+mmWVcZ7DHf%_!D-$XGu@fvtfBv42!0#m5Dy<9Dp zaAFsgnuv|JCm@G|m?MPeYCuWEDgkpIv4pcn;r~sHz;9P!yz$K_BsPIx4=?Ub#ByNc z0C=NDEWdwsMc02niP1n4sb{eS*yG$Dn_lonK@3urGN_SQ&q5{uiHD{uUnRyUns+|j zHmDFA>HbfBu~j8vEH+%fW+H_XaRf7UNoPP0rZnr%!WM(YD*93nl_oPQUG9;=O?N#f zPHgyzbZ0_hi6G`$j+T;a)j_}&c&loIFP|vMPW`aMkJ@UYga$L9uvjhDPI9+8sa~Wy zu8?+z`{&PuVOfnRehSi_yQPy@zAYu4}u=xzL$toKr*V--3Bm+0`hAz{pVFSNQ} z4i1;?T!X?(lNVR**F(SeHmZ+`BJx9m@)UEP#?!!%`obl1xqg!R_=D{6BSn|&UC8TL z)fw`Qx-PuKs>~6~+EBgn?D=V-6^S85_X)hE(w5SwG)L2_KC$DDjI#54gi=5|Yx*@; z*Tq9(?YJ~1eGr1g2E*=2_$P`*i=$cLBj|eEP2y6b$~Uf#SHQA|ugBQYkoC!MN>p^$ zSo7B7%I@}|-Bn5`loF-WVwubKglb*oyv=>$jZ~)>iPU|(Mp|@ZpQV#pR!JKb)IoBp z>OceBlavE|gR}V#xIv6JKT2`#*wk}1bg28ywf1TKRDn@;e3v>PmWCS2vgIi|6mAg= z`sImm_uv~)vE)i7&`P=1AE=nf?qagvzfXIQ5M-|WuE=}%$T(F%*BM4x%h2*8e>`vJaCd{{gN!V8L@S*aQFo N002ovPDHLkV1jbNjc@<} literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/D LOWERCASE.png b/assets/preload/images/alphabet/D LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..13f718138245e2f19a3e6124ffa94623a683ebfc GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^4nS_gC}h#;w4l8iDE>InAb9!@H$xADpWbJQ2ke$y_nDsfGd{e{@WZ{~X|RL9-zV=G z!pvVk>Yp)_)$___v5#_ZnI^w=?mzo&#RtiqGgYROx|<9KOc`F3ozZKV5X+pw|Da)qk1x~T z>Kp5L6+$9|uUD>(o$hg7M>XK=gbSsPo*S2bsWq7@vVO|*pT8PiUjEL|x~b@Ud75C7 zXYF|-UX7XFTXs&Z-s$UM$9n4E!AbHTzV1_=*?fy*-j!t5DTmK=e$wIaP*n^$yu$q8 zA?}6FTjhBB?F@Ei=G`q{mHYSISD~DmH(w6#+q`^T==_Z)&C|NpzRgy8qf(#v&bVvK z%chD0%9?>T3%@8|s}9U#zw-UNoBXO-`t9AG0WB(@plFP|HCO61@aoT& zrVmrzwoH3y_CRUhBISI)2h$kpSdSj~_&j^<)k_`WWv$mIuPnMd$FXx$WBkkB^3v)* zr){eDyo+`G`d~*|WO37W*=Ae871xyo`#x;4Ty*Wd#5&`e%Z=T2@3%_FPBwJ>aPPHY z!Pf`LD}`%M{CgDibh^M^UzOmR$5;Pu`=&n4r$BG|jo-Uj_w83(y7>FO`&Y96vqWB5 zb9-6CE2GmpZh9nrng6^vV7|bfMbGXDcVwh1`?7GVJX&H>9(viZ$JKe`F2NHorWL>Y zJN4OihLCA1#Q3xXyf0jz6xiBt+BRP|pz#NH=??}DwxrJ*x|NR^gRfUHHhpB>aXcql zxWr92oyBRBl|4&xiRo11*H30Hi0xEW_|bOLxk+r*-^tR7c47Cb0vta09jG|{zm-*H z_CE#2>e5qG|=PQhlu&W|(ee{O6@m9JwzeD0HGl3-&} zx2#$~X>7Mz(*gTHDZ!KvOB9tO%fByTlNJn;GzS-yZ zCib~3YnpV;tLJLUU8;&Z$7WY}`|jZYy_=T%JMvj1eiR)}+$kzt%O3y0^rN>vr&t7o zTxD!&WB2aL(@#p2_B@`w-7S$-+-XYsT*X*FcJAXJSnfS_3VQTFKv1yr^Wwbs<>fya YCyLCPVsCyMly4Y3UHx3vIVCg!0OWacU;qFB literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/DASH BOLD.png b/assets/preload/images/alphabet/DASH BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..4930cbde5e1a5ae0172493b157d0ea4055b17c2e GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^2|z5&!3-oLKKw`pQk(@Ik;M!QrdL3iF)sBf2T(9M zz$e7jy}$>^Bp&?#{~xHhzP{ex-hTi7{qpki>({T>*VoU_&%b~F{`vFgJcaj@(X6T&p+Q@fBpXY_xbYi=llI<^Hl)l7?V9+978Nl zPn~*wT8n~!i>gM)i~}aee*Rw{BTG77rONWfB z#{r$@e#xaRE#`d!u5GR=<-r@y%v5}EjCn=Dj3@6FojTxLUN`R|cg)%-$w%gFTRnH@ zXRh35^n?BInxKP+rfuW@C4c+JGL21}Z#k{JWaj(uY`|&1j#rmVSI<8)@0DeTS@o3A z1%Jf;D(kOdGCCb6TJXrd_*4}uUrqkpgBNy-8EBu_o$kKaQF!;e%0K?;Tsnrj%kw|l zM{^2ySziAYcJ1ol7l%>;mU2WkN-tS)>+u8Mos2P}3-*hcK29~cwNd+R#P8>`!%k;% zmITj#Ka)MV+AZjYZq~&wLff5*r;p@4(T9Ik#9j{%oCUWx zJIft@zrTNt8!pDK_N#a@w{>Tg<+*hhKsQY}zs^jXXG8gNj^xni>Q(&ObAmU`tMYiU b_+eoEvYv!a>D4NSL2>Qr>gTe~DWM4fv{dX3 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/DASH.png b/assets/preload/images/alphabet/DASH.png new file mode 100644 index 0000000000000000000000000000000000000000..70c5bddd07c169fc27440f0bd2c5273391f3009b GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^9ze{)!3-q7{o>{aQk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3ueeauWx^U{{DLY_wwug`{REZZ?*%#5LnA#-0Uo982#mX5^H_inY2|lU(7a0ZuVWZXK|mt zxMA?yJ(pw}((P6sI8ifAcAli?JxN28wkr~=9&k@J{Lp$Pz%_ZrdLGrDa~@7fM;a&n z^kMAy6nJ>qlFsX!MBjKl?$s2Xb0WuAo8RiDR-f?nlx0)fS9PCly34-km5!I{kDLb} OuX?)rxvX^Bp&?#{~xHhzP_HHpMU@U{rB(R*Vos#x3_=){{8v$=jG+)r;e1Cuc{QUeIz7ars83am#{DK+e=g04_KhOW(-oIb}{`&m4TMF_R7?_PbT^vI^ zj;{^BxowpJ&r*&ljv^YHAAS74|C5vPmZME}clOL-ezW!Rl9PTsO?&TVZBgOw^A%&z zT6b{f$t7lGliLl-qSU7gZ`-s@*Y=a_tradT`w#T}{3QG8K?9TB_rnHrKDk=2-#Y*O zy8X7RukJEu@Q(lYW%{z**=&KO?-pOa{&mHHd0xzi{Uf&RozHmn+ws5`3QunEbw#b<@3{trji&=Sj6~{q^(Jc`sY@#m(A%39=t;b7pWXzRHyt6=qr%<<$`T z_^RHack_;(#FCb3G8h<^!B z(bpEqF4y}rGd9cKj=DRON7nAH)J99b1x1Sk{~ig<$-f+He!p2JekHGk!{U>&T2pES zc(ZfX=U%mCKkUx9ny*kW^vSKST*f;-Exg~`|3XM_L772TGvjxk^dpHmJoiO^Je&A( zoBia~iqT%ltFExV$SJI-`C!T?8~(T@>u_h_pZQGwuU(=|9la^73}!Qh=0bCBUkm_T$+T)6i&-SyalmRE@!>0X;m|3+|66`WnDwx4bKMU9XvpRZ0!x#RzfD)xEaCa;{++4wC~+*&Vk-PZMHkS%z`Ec&kCOym?b<%1iaetVb4!JHBh zxJyrs?SgCg6tSQ>sc#zZmUwQhD%>*Zn4XBXuI$pKe7YBpe$6wA)94ew>Xr6l&QT@5 zNEfSJ-9M5OCzPwy)LmHm?v7h%lWe6jY~UhzX#EG6<8=R^5t|JoJ>M&I)WWnE8KKbLh*2~7aK?bc2J literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/DBL QUOTE END.png b/assets/preload/images/alphabet/DBL QUOTE END.png new file mode 100644 index 0000000000000000000000000000000000000000..f743a6a316f2a5d5783a05394e593cd9b09a73f1 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^7C@}R!3-o{`*5BCQk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3ubtqFTa0&e7!xt{`vd;{_D3@efq(`z}VpF;uzv_ zymo4|*kJ_@m#aU_)ZW!^-Fi`DLCgMmw;d-;08$<(E#ItiN^2fjB?j zlJ`=^Hd&!RUjKZ>eBZKl#@9^N_kV-Gmg@WREmKK&`SE%1{v39e+3ah-edMpM>b>sSla~IY&=jiv(*0B^Bp&?#{~xH>-rk;{pMU@U{qNtuudlDy*VjLP{`~#>_vPi~4>S=gC3jJeMkLoo z%U8FY-dp-EvBvM=FP}Mo`d*h@5HpuMBAm5D-#p@~fu+W_=T|wuFyD4@2swIO>)^Wo z3j;TAF$hesPc>6jQ`X-0X1VZXDd{Jx3V*Hs-u5f>#5K3f9O;!eWnQZ%M1QCju)sa)&6j;!T|(#*3|;8F5>v4{2TW7%Jr5{i;%_b7Gk+(@sxEr z3+;0E__ePI37E&-JMmUB^DeFzB2(+HR?p@8s;sb>YqfmRgt^N()FP^5d8cZp|5kbZ z>dcNa;j7uptPXlf>G^m*yu<0MzJvW@aC(+!^^JA8KhEs2GUS=O_GU}@GQUnK*{^1M zYo9jTr?t-(Pd|JhY~jW|yX+j-uDLDK+>lnW`%rV9agcVb_v1$|_=<1O;=a7`+zaD# zcW2fv^tW0kUD#Drvo$cpqGiUO3g-14IrD|rq$oQ_>^dZJH)EaF<8J?rik4=9RE_)f5xGmT5 zY|y9uJzZ>_$EQEn?cJJb7x&>unDX@x+aA0RdLKOF9>^BnjMh)YAfL5GV=q3ud^VFaO>?et$iG|N8Uu_5JnJGou+87+XAD978Nl zFAcr9twn(+I7M6G)BpHtNlBHZJ^I`GpS9>^KHheBVso*d?CpMq*V%tsYBL{Za7N#K zP8WoTOG+)+`S}z zfwNBV$1D4n*r@BL|4rJ*e~jOU=h~J)smZIXtlDNTOllTw*4<>k_0k-h&wjG$#-iRQ z*L(};c9mUq#^HL}ypWHHLAmcz_e|q6T=_^g{d1W1-;-tce$TV0v)p!mPl?XHl{pqM zCl;m@f4VYz=WQ|Xfb^>`JCAVPHQMBDz3lqSh4PQAZnb^Oo%p)mU-{AJd7D>i3-0^f zzbV61Vs}fqwNTurPs|55-u_v2?){ouYch>=*K$03Cv;wK_VYMj;f9N{6@0Uf917xy z%J*J;^@*vq-Pa78W2GCt`X%`?s;syto4wfK77=;upw!Ecl3Dhx=d(0iqBJX8_i`@Z zr*j~)nsd%0DYN`9wIaKg?LV~D^1EO8|Anu=>I>ABz2e;#xaA-F!T|G=?4Da6fFjq^ L)z4*}Q$iB}I9KJ1 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/DOLLAR.png b/assets/preload/images/alphabet/DOLLAR.png new file mode 100644 index 0000000000000000000000000000000000000000..4323097aaf9e077581917ce333de651cbd95fc64 GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0vp^0YGfe!3-oFa`y`WDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA9o*RMbS-hMy7{CxlQ{rNX7r$1+4VA|#B;usQf zcin_P=>IbgsgahZV2nOpgm4;hK^aee*G2)?Kq~bH-(dO3k;2 z-T8AiwK3u8y4Nv98_lGYUbZAx8-lc^{&hEZz9+v_BSOSv^?qYW$`uvmfSeK zj}b-UdApy5-KsisR9G$3VV1qy-TY;bbv{hKv!M1{hW(>1pY?nkDR&gF?4E9T(&EZ|`Haj~RSj?kIEi?ho-3Ja~KW`}it@W-Fn0{+}LBQRH@I&7aTDeD2Sp zA4M<2`IsWrGaRlIG|XKfrIzjZ|C7sw1(jB6O{M-VcB_9qx#VGRPH7Go+oXahl^Lx~ zdB-N!K6-PqN#V(fSG?uV6mpl%xz(C5jZ5v=l$tYEoIaP2IA4BLe9lI5P1~o?s}UD{ zbMq$uT+O-pl*gpf{_?@|?^Lncnu6C5akaOe5 zyf5=lHVQbsvh6DR_OLAxJsux@a+DUH{n5Ntw^VJ@2^FkH>EaKZVz2jR(fgk9Lu}Fzgpblv4k(1(-N5gK-75qp;0w?Are zl{u30#A~g(((|m#r{DaQVsZBK;bXr3dAi1Lor1R?%6_(C(bJ2p;+x(yMK89Q^MZ?S z$A_OWEbEnCyR$2P|IaEMy?;jY`%h2RHnE?4*jRRQL@c bsK3n5AFrHkbyIICC`)*{`njxgN@xNAxk-LW literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/DOWN ARROW.png b/assets/preload/images/alphabet/DOWN ARROW.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9856eab630a6cdf0befd1d85c2e0c88d000a5b GIT binary patch literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^K0vI)!3-pS>|N&!q&N#aB8wRqOs{}2V_fP}4xpfM zfKQ04djUu>N#M4lo)%DpKuM5aFvEO(`S=GjQ01 z#fmZXadzu6Fx2f?=We<%c01SefKnT+9_?Q5O&))`0&D(p!2DWZ*gWYV*>kn+;IKAv;@9qr`7rfD*Va>>Lx3MQ`C99?#opxFO z#>G4RYbUKta}PE6ckQv8LHo0Pp&MfS6ucM%b}{~zY5Kk|*Lu;)GafEa6oc$uDqr8Q zr-orok@55EwKFf)wO5;q`fy&8YpE0pO9|Pz{hLr3hiHv}TJ^$7l4}La)HsVLv3|C_ z@K9yViHZ}t&F2hSgQk6Ie!W6RxUkOV^wSjP8C$k2TU+$hul!I}CC7KAu(MY?SLZzN zb6aPWw{}zD|CH-!j%&rfV7NTWvmcE!0pl&9kpPd~Da^O3zo) zW$sz4oZcISe*5y^2m7x3kCw^){_VZZcdf#rq*YI9t}GOb;I*E$rhH*u%}$w39p_oY zQltC7)_AF}nRG2(@MHPww-5Y|X0^JyM6F%1?e>n~^Zx>GRKBnLrM=lS^glz9VdD0W S-{0tfQiZ3hpUXO@geCyFvHd;( literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/E BOLD.png b/assets/preload/images/alphabet/E BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..04df9fdadf3be1558e336ea13046a897e66a79ad GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0vp^5kTz7!3-pmCQS|nQk(@Ik;M!QrdL3iF)sBf2T(9M zz$e7jy}$>^Bp&?#{~xG$|Ni~<_V)Gl_5J<*^XJch|NgzaynK9o{Q2|e{r&yduU~)v z{(XLa{`~xWeSQ77I=KTtJpv^`e!&d!^Y!`V@9(d-&p-cuy?=jIOnVUn19PCKi(^Q{ z;iEHdPg||Pq|NoRSS5tz?y5iHP&q$Sj4`^(8Q0cHFbDFx=iObeK z246WNFDUiq1kSQMDbiX|vpnp{M=v+wm%^frr_+M|E}608?3(_h_uW6+nljbcejnI; z!ZE;0Z^KT3$=pdg(HwxA>SWrv9zt zsL1upDc>(|`TrtyK}6nWC8>W`xhJd5W8SY_kZbkkL(>J>kNiiw9~$mRDw}k7LQbJ$ z4forh4-{TkXJ4}swC9@nO#T>G(~(LIZYEQ=jUB?9IPGJy*-ej}{p9Q$d_T582!Ryr@S;?p7FjhhQLJaXsh zysszS_{cmU_1lr9rh#rl~$_viOjY;T&=)w`m1(vz2anndUGCMhrbAETq* za_f=omfWhA9l1LK#m!gOiSe`jmQ&w$`@UkyZmnCpnzsi#nTyu0=-YO$=E8cfimUF^ zcEsO2mzex}?^>X{3JY`IHEx)DuSlrzO-8D3{p<;jA9WSQvNmo#$QGFqK0()J$NN_) z0{s^bA21UC6>PpjYDx7Z;ZHrW+oo#f=6wrU?kSSpZM{LTOJADJ{sXNTphjXK-xa(s1n>{YN!$&KLud3p6?tJ{0J*4_DA72KI+vib;H z44;ol>(>V+iXRWnsw~ckE0(t8`&KnI>6X&2*|Hz~O0>?37H}3;-E*~(*)&y1xMjz! zj+^s^i#7TFO`Gw@zi|Du+f4o9M@+k>8thj%w(--mH1Rx1>7T1F-@ej*qwL;-uUBg8 zug%?l=h&Isa=(477_Ka%R(p`=& z1rMFx%RS2H%6GFYou_KWbumDiebe9iHSb%l=B}CUTf5@N>5ykfQ}Zhd0%b&_CZFFb b_v?WEf+YPY<8Xd;P|o&r^>bP0l+XkKSqa@$ literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/E LOWERCASE.png b/assets/preload/images/alphabet/E LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..ea5f6c4c7a86b9f884e8a95a511b1b40df1bfbaa GIT binary patch literal 593 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 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/EIGHT.png b/assets/preload/images/alphabet/EIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..9d99a2dd170ed8b648303f728074da7686ca3b6d GIT binary patch literal 727 zcmeAS@N?(olHy`uVBq!ia0vp^PC#tI!3-qpjPKO~Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBuUx4$2+zrX(de0l%;{`JpVH%ButFzI=^IEHu} zpBo-Itwn)niYqhIslWc#Yi*Sx6+XB5@7}d3i1YNPd0XTd3ffAe+0vsAmv&9A_p8oT ze&56x=WKRM-U(%&C~|4%=> z5^?K*R91y_cy*{zSyt#wlLxyrKFz!$_r3mAVfgEqXX(KYvYD5OB-*LH(^L10=tx;4 z%9X&$Di-CYa-@?xKxtFsoQ|30m()TyYMp~_?%Mc$jYosgf(>p_QDsK2XPhb#*?4>H zo*A~vxqcfLTO4`H&CtJYz3{&M%#J&D?sZ@&=rk15Ep1%RB)Vje$UckX`mwJrzkFyX z#=pa1yE+ep&Hp3+&J{Pz=J>HWVTR@dfo}@?Hr-g|yV_Z}`Q)D8qQ^d3RJ+_;z4~>* z&e~OPOxhMMe?K+SwC&&yt6$gK7&?ArPL1%Zowt9t-D|$;*`f!u4VYW_1o|&3U%Kmm gV!~x3_6GuW3_I5^s|v9?=?O}Pp00i_>zopr0EJ^H^#A|> literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/ENE BOLD.png b/assets/preload/images/alphabet/ENE BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..3302e9899a945e7d25d13ad5921a918d7bfecff4 GIT binary patch literal 3109 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 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/ENE LOWERCASE.png b/assets/preload/images/alphabet/ENE LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fe213e94cfd0eda9dc32e1c5babc561b3c4fbb GIT binary patch literal 1132 zcmV-y1e5!TP)+w-T-*G&GM{yf2 z;sidy5v(-WZ^7Pzc{tT^8{WrxtYWRwR`4sHDh3>;op=xb;-`j5?GOT0XRYFIyp3BM z><{CD5cs5~i%G2|+Fy7B*VSyd;={@$Pc^XK#iayi1wY_%8w0ro?^IZSq(Juxo~N8D z+dsv?lZEXyc+vWxe34*1AOt9f^(SU=dxiC~uu^58Z)2csIBH}1rP>OP;~-uyCQwbM z*CMQ)_+|vwj}=xuD4)h0d$KSt2RS9AK~q}B+C|(SVI8cn)`ToMeg&*myb^Ql<4VUq z?!+ya!C(Z~DIsNs>FY|rGuSUw#6v=gw`HBjo|t357oASv?#l0Dcuc5pxv8^)S7V@J zB5U|w*w>}D;#r(+!CDoLhN#X8sc>)P`7V4eUByb!FTx7Mv?Of&UgY_M_)>FfuHq!_ zNICW}o)Hern0DYL{APGW%e@(!aH+kRYG7^0^Z42DU|zykxT}HHO1p&paK>eaP73Az z<}N|F2`>oc`~sGR8t^o3=$Q5Y)mY{43E>q9=7gmmre4u+vhrKMXh$-+)f8>AnX0ki zm{7eNwZr;SJ`fzOYBv_8H}RmDNJ_n$%~COTeLmCD$IAfwnjD)QVmMzsn}|G5wZ&p` z!!#^7OGW=tSkp15>Z?_4hgw4F5v{NKM56zEVjfLxc9>)J)abI!Td#ea$l9=S2R0G5 zW__WUzFMr*!Pu4NDu4Gkne}G*$GA{BH&c_E-$1(3o|1JnR*cK%O|)dy16ZPr1C2FXpuPGIsQ&*1Vmhmne%VNdu)Hg$Yd1>F2t~rjKCVdYPdq1pe zF=LEUM-zPp;+H^eSiN!K{%|HSP+zxaSd6tStVZL%TH9*ajnr(WZJQM%e2P?U7By!@ zsrd|6uWq!v__1f>)mchS*K|uQ#%fZ| yWQ|2lN7Di859LYpZ@?tL*&E)`?3fC000001J`PThrV(|6BVxQy-7mfz;{YMWNsx?K!iYStxy#GIz?|yo;uzv_eCzbkDb{XoYUC~nw`+3xb~}nI-#uEpXMf_`y^XgY{5kx)Tt9aA%hix+?YBgpy<4otzwZ9-NniJyw6QR*c3jOXb7x-3_5FMc`hIr56YCT2 zGj)G4m+t}Rv(?TMwwGR3@7Z_q$al$)=FF_~Ka@+?>Ps^u|6n_`fTN*ePkoA#=XcTP z+V2hS-?6{+#n!cHzTuIttx^xZy|H}$*YLoF9VeP^dwh^iczL~Fmyd77_d+{%17rK_ z^@sO7*AS{{-G6_Q`u5DObgB97d)V#Psu@>T%>0~SKkx94Pskbs~P-&9J?<`SvBpM^;DwES~wXc6s?y=Mwo_iCZ!cf8#l_c=GYvAC1|M zNmWn(CS&-odbN?zMWK75qI;Y;64#x%yz+2dGIz7!rC~?{J zY3c>$kInc~XE9E4EB0gYD}I;C$zb8cRVH^ptJO<;f!mDuwi^zg@;SBFwQQfy{o_&E zQ>GV}IJG<;ykODM+Oc%6tBOaC6ywVS8xMRu#hNkiD-(z5cZsIFX}35kCe=)HoSk$c zJ?utnmx}XRhCeY3e+-2b4}~$Y@WiP*$_0Lj6%>w4IKdRpqwq*Zlv`@8tmg%K>gVn-5%P z47{%uF7Raay)};_HI6NAb$HOHwV-Bl!>Wg?nHq)X9?;z~?X(HgIp=Wg6MU1u%zeak zYC<}6Gi0uHH5pm$V(_V+Cn;aya zgm#2QGfwSG{rM*QbZn;k_EW5%7B4xT)LY zv{u$|aV$4>=1g7r$@3$!xLi)ptT;2n%y4PYjYI7#Jw2v(#Kt~c z>VNP`ar8QiDPpg*Ql>a9S-oK@NB7h}@dZy-PMz(Z`7>U~Yxd9o%r8SlPMCU4y96qK NJYD@<);T3K0RWn1_s9SM literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/EQUAL.png b/assets/preload/images/alphabet/EQUAL.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1a3ea85000207f72da1e7bde42fe40f92357ad GIT binary patch literal 487 zcmeAS@N?(olHy`uVBq!ia0vp^en2eC!3-pg^H!AsDb50q$YKTt(<>m%7?=8#10)yV z6XNP#-~(im1a3R(X#q6|lmz(&GrXT4&o8gPzuta*|NVUb^E~bToeT_&cAhSdArg{% z4>~3tR^VYdz{)a-;r8$U*RN&HI+mGqc%^a0*BzQ)k@k+Z1Gl$6l=kKy@E?Q^motn84VlmsMq z3o+|U=6Uh#nX*B9sJhf;F=lw&!tuC;FU3zoV@?8t zP&<#q(+g@hM4y@-_0#zfb$*9%dGNf<9h0}N{4|9tP9%O&*}p(p{hF1xek!fVI{m}v j&Rw}{J^h>PA3oro^*KXU!G!5OC|W#S{an^LB{Ts5QY@?o literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/EXCLAMATION BOLD.png b/assets/preload/images/alphabet/EXCLAMATION BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..6a222e937960df93c5ccd5a19f22e9b14549a141 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^20-l3!3-p4t=P5@NO2Z;L>4nJm|g*4#<HGH0PC;X@7ts$=DwTXGJCH~N6Bwx$J-k$59x65 zy?>w}^4#&B?oX!^`vprpDr72rTO#E|4#)7738-iO>f zN_qu6LRDN`n&wC@S>@`nBe={tOz2_p1JMIp6?96{J!g1^&SaGTcg^x(rwV7n3lYT~ z*4~GXWgYk^@_yoCvpEkQ^%UJva=$v~!0AhlGpxd-&nYIBBpNq;UYzCnapRB4@r)e& z_J@70K1kHINGy>ID?apM%L!3+o4x58ocwaEDm;3j#!sJ^vFvbC<}lyor265mWKdG_ zB8@A8=Y_phqTgw9smLvP?ba6MzF^73M>}6_@Rs3R{Be%=pH$x15RVT>f;+$N@tE`K zZ*WJ}hpQ5o>=KWOJey~noFR~OThA(iEB&QjiCHMLai zaB%F3|H-Bo7*-~G5$;+>p@V@vbzYHkvdb;|#taD0e0st_3!K(lO literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/EXCLAMATION.png b/assets/preload/images/alphabet/EXCLAMATION.png new file mode 100644 index 0000000000000000000000000000000000000000..236483b9890b16ce4253e1a79ce4b857df46b259 GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3-pQ0$S$)Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1v9MAzt4ZZ-hTi4`SS7l{r(9(8jBbh7$EsQ~`fwz&z!RY|w1jY>Qq#l_Y3vHaV zcW`s{Sk7RRDD)_d-1}j#jzihq*-Q$DyV7j9PxGIYows~zr|dP$wM@=!qWY@g9gh>w z6;EToP}I(OX8YdFCPoTA3P6(GnDM`)g6eO6Oi-#@>)Y1PB4=`Xjt zbpP!tcR$?wwYn;(PUe&GM^bj;??N;&n-%PV#-2^US1)ts@?oA*wi)Gwyj WqAo4pxYe>jaqa2q=d#Wzp$P!Gj@b+V literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/F BOLD.png b/assets/preload/images/alphabet/F BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..06bfbe51dff5811bf39e457dcad2ae6156e61c15 GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^5kTzB!3-qzqm1H!6lZ})WHAGS=@k%Wj7xpW0TfIQ z@Ck8sFYo~}i3k7x{|73zx3{mauiw9ae|&sAKR>^}zrVb^yuQBv`}gnj^YicDzdwKe z{PX9}_xJa&U%!6K`!{oedIU;>{DK+o>#vu8AHUze{=9!afB*a+ryLp>7?@6Yx;TbJ z9DY0FX3=5;0oS8ioCa(v2cqBn`5)eQM94cMJ2fs%>*e$*r`6l_PJR(p*b?r=u~7Gz z#Y_IF33INhFA4R^@-htzkO&Smy*c5G!Oc}s4<_%}@j@!WR_*vNendFLN9l-V!`~aT6$A@> zgaZv4YI__$PTu%1JAx(RTzr0+tkbRSbL!ujUs~e7@R-uGn3yVwGo4#`#P)qJ|JtXs zs@u}IJM?bEKkMw8FRuF<=<%%pPqv83RbMK$iV zvgfy@Dwl2iDXdp8+4{(tZHno!f374QJ-Ntb@8>tsYrA)ved_bwe>DB)&*c1{OycYj zS5Eb>`MmXwK=JiPr^fcfKG(Ikc3a!Ic3A5jdpcK_o%h^&t34a^OIPs=#raFUUcaQU zOLsYc?3pI@sq%XJa(@eo+_#Wke|+w?F8QXK`}ekb*GztB@mh11)e)tV=gA(=%0BY! zSbBVIbM}L2VMphGW7xRqn&c8bMbUY4{k7Dx`TyP0+vekY$BaYc*z-1ph8?FeYB}Vl z?>LYc+40&l zQt?a$*&9@SYWO==ZagNUmezjbmv&)Nho*;3`;ouqN8g11`QLS1;-jsTO~aAPpFU-A z|GlI??+N#s>Its*j>d{EJmsZvPH&_W)%mPgg&ebxsLQ06$ThrT_o{ literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/F LOWERCASE.png b/assets/preload/images/alphabet/F LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..496d0a24b0758b2b822d20adbc627847aac83c22 GIT binary patch literal 591 zcmeAS@N?(olHy`uVBq!ia0vp^W^BnjMh)YAfL5GV=q3uefV*MHA1UvIyEy?_7t`S(xp-s)yxU|iW=zeHWN+5nOIA7$oGKTsUcow7a#VyRhM;bwX477Wi)bvoLG%l_?cI-HB?7Qqg;C zHw)hAwzXW`qD}&0ZGgD6V7hhQKFulwp@Y%DqPgo|- zUv_Dg-rj%apP#UVPI(n;bKx&@x^BPO3I136-8Mb`Wgz3Nu=(6Z6OSMRw&aK3izfPd zU$bp2^wDHadUC|b+y^3}1ww?23^mQH&p>>if#*X^3;vAjKsyVq<_ z(Y>|l-FBsDSO1L9#tT>*r zF-iXoUsm$dYO6>k+l@_U*jH4sib*&A?rY`Wlw|xz;k4Q9XGY%se5|2QpDN!o(z3Qc vaVgL8<)uuq2YKxZ@ulxu{>|Ou<$9N2O*81+)akpVK+*5%>gTe~DWM4fc0BRg literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/F.png b/assets/preload/images/alphabet/F.png new file mode 100644 index 0000000000000000000000000000000000000000..1f2b2a064bdf56b74c46aa8a42161d54a553c4ef GIT binary patch literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^9zbl&!3-psuk9-bQk(@Ik;M!QrdL3iF)sBf2S`PL zPl&5~fe(;L61eTCrv=m?P!i-9%&`8wK7aiD{q^?w{^#ZI_nThKKFPqq*zW1#7~*mK z?DT_0%?3O!;u~~N3Ox9~e;a!fv+lI*%$HxrZT`%2$;*P_*p>C4t}UAFc3Xsjfg|v| z)Y+T^o`?7Bn#AZ3{y)+sh=-vh_vO`ZUziQd9c6zlb8pzXR{XJ|Uv#dLjZ5#f>o>mf za0q|==e@hnLEyeIt4Z`FRvD&*G_zH!)C4D%zg1ykc=Et-^O{{J+%vnEOuN1&oBd#L z<)Y;dKQ$-(Q`N9x{q!oL>`3l}Kh_uKefFrZxe(CyO5oSgL#i5Yy{%`}wqGlA;S*Ol z9~|rP_qgaB(cqB#rrsYTt_s(i9kD)lr}rE8g$jO=+oen5d^_8glx_Tdw8rPxA}4%~*c&P*9a*Dk++P;DL+ZqBfrnb}wpNCu^`6+fe3`?P z=am=URD9F+KHspXzka52+Ry4t;YS<%JtP9^xUM{m``4N|TWGoHg(D3u43)X3Su_k6 zG)gQvv1D7!zquFrY>l@@{qw)``OWnIFX99w`47!lvbjyYv*cVu4PzZ|QmTCO{|TV@ N^>p=fS?83{1OWK7;Yt7i literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/FIVE BOLD.png b/assets/preload/images/alphabet/FIVE BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..55af250d3296a0a04166e60d0524cf81087d46a5 GIT binary patch literal 1317 zcmV+=1={+FP)gqO%{!gS0c=l2NkVEU^aoSWW z;KG$=2u$+|^yWyiR0kAoo;`Y3fLOznwHwm+wKS`^0ewIuP{L#(nEuH@Fn{)e0XR(w zLNR@H@z^In4#TjbPb?ezreUDG503}K029H2CQLdZ@FPYcEL>_8|S z>nuKg$1JX$v^(QxRK$qs1|!k7SU7Z|gh5`zIukpl+cctKpN`HIgf2raU|tA!?jUqH zu>k6PfheXBFeni8jKYbIRX#vrM3a2H1BlL-a=L?v&R$wMKhZf}$0dt`iO4(}LDuJ| z)uapb=GZV8qs1UwR-!jXgLq#uC=(5aT|xV($YT*%i10^oKFTv}>ebH$K~;&!gwQ^W z1{p3Q3(;F=l*dAT~OBzE7+KG20Vr8=N+J+z&RowgxVOhNlm^Qnnr0lF~XhjPiiatpt#ka%ojW+)U0AgXQ`l|TGe%KG%H%J7|LbO$*AKMNWkxI}AgNOaC{|ngkF12=*DSD6-+?^p#tVajuSw%Syw$mZ bsfFYpiW5-*+KGNR00000NkvXXu0mjfnYc~` literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/FIVE.png b/assets/preload/images/alphabet/FIVE.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf4b67b05b067c1d018b91fc46d8c14c4d7424a GIT binary patch literal 732 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 N002ovPDHLkV1nz1@{s@l literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/G LOWERCASE.png b/assets/preload/images/alphabet/G LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fc0bac75eeec9ac0fd2820d3e2087325f4c76e GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^PC%^5!3-p~?c{d`Qk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3uZVUKcD~o{d)WT`uXzf`~7t?9+@&QFkbO=aSZV| z-WwJzX+FrSCnfZI(p^Hc2CCj>Y1g{tAkK|zu;Zj&y$sMK9x3O`{^67aQ z)$3<|D%IN+{B`Q*?Ya`&Vd*Cs3v|x>lt?vFEJ?a5Q<(mVGvZW0ywQZ{NS}3&cP+?` z)hOLO*W`?+Q8t(0_SA#xlfShcdBeU`;MTU~3yK;hLz<^XtEev1n@5S@8$!THRdicm8P*U+Hr@q}Dt@%<-bof3x1^-u=@VuIHaRxhsNko$Gd%ij8(p z*mS0y{46zV`L3V*4we1~Ss1E*ZL4?{uvetP^O)(rtudSWY>KbkOWh;;WbPB;5{3ut p%!j|O*uwRb_rc^^hLnH*8F;FbA6#@m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA8-zt1mkU%&so{`&d({{5xJBBvM_nEE_j977@w zuZ?goQa0pC$vdX_|Nkx96Jo*#7OoaEpL$E6<3dJ6$H^X_d)4o2+2#nU8}rGp@SouR zVzRTe&(#x7sk0Vtcys>uwwdKBCeLJ}GS>&1pAur!RS625IiYvs9>;?Uhv#j+6R~+a z zjp;uQT>1FDuumsKP=6ZV!A;C!XQaQ#yqPoUfM{ZUin4U4T4dP|^VQ!EezWsfA5cGk zU0<#4436)D9Hn!aKeo$!5v*=K_FL=AtG3^d_L=7%fA&A}PT$dG%yX(4D&E`Pxe|Y) z?Hc3N>i4#FX@75XoS)&k=5*{$MyoKLu&sHMjXw3fJ>?d-+P!Rhyqn>LGv97YEzHPc zUOn|iO2YK7ufje`|KPuHb#3nTyyV^G)d7s>nT|46y*Hb|dTKSp)~PyjN)a~>&--#J zD$cDZQ+*rTYWCLcpB62A?H#01ac~R&uG9ane>vjJVluH)_A39;A61VOE0uPe1c%ua zY@WM+bMK@6(u>nlC$DIBGI#mV^K47@OXb0B8MLFMqLk8S247mn=JeIze{iHpSDoK=&ySC1R)u^@?TFZaIwPEc fLA5JeW8%vCX)Y7)^ltY40ZQhcu6{1-oD!M<@Y`kg literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/GREATER BOLD.png b/assets/preload/images/alphabet/GREATER BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..b71861f37ede4b1aef3cea8a17d54b5eb8c89a10 GIT binary patch literal 1248 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 Y>{`d{zOT!C-T{hgPgg&ebxsLQ01FJ}$^ZZW literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/J.png b/assets/preload/images/alphabet/J.png new file mode 100644 index 0000000000000000000000000000000000000000..00bd863cf279a3506aa0ffe818936b07491e9403 GIT binary patch literal 667 zcmeAS@N?(olHy`uVBq!ia0vp^en4!-!3-qhSmT?46lZ})WHAGS=@k%Wj7xpW0TeV2 z@Ck8sFYo~}NdmVW^|XK*1WJPZf*H>9_rI5qx8GksU;n;;{`y^s^Vc&lFn;oMaSVw# zd~~{J-%$k~7i}N235~z!ZxdfTUoGK4eAksYw|*tIX6^;t{uhfxKYp2TNI0BbX$J$t!$+FWC$Tq#Tzi+18#=nOhq!h4G*T>$iJI9ZM*F;hmfhd{r~1BD_j=&A^W|=&5B)iTe93&yUYy+ z({~qJl@?{{Z4dvw@?eB!c!{UZlQ+|giq}}Z$xjeXPrI@5@T%aVGX_CoQ+DqB;a2OU zdHlbU`+K$O7f=3NZ*|(G5~umNxFhwGl%;Ii_aLs>tm$j2rY?Ko2e&WZTV55IM{OO zj_@aQt}Lp`QT%Sm{xh?q?dh1Cl~0uAeiq67p8h5Bz}a6j4S!zQ>3#gptQ4h1t)F-Ayg0@F X;-aeD#gTe~DWM4flZF|a literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/K BOLD.png b/assets/preload/images/alphabet/K BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc6f3bbb184b237294a5505d49ea020d8db97d0 GIT binary patch literal 1346 zcmV-I1-<%-P)6+^x2!^vSZPGS-)BXOh@=T*3AhtdJnP<#5?Z+>Jee}yH>MHNL zJpC?=kGl>={7rpm+Wa^1fneXGf)D%Z@3(~i@gYtVDo&X=Z#bGs-{W9E*#EdA+AJ5^ zL{J#Jl;p0o>%eVfD2_dGB*fJEMF`!xr4=A^c#I={n(Z2xdP zZKEgXW2dn_v0OA2Z>#pv!cO@%?~ zKL*7$ig6*k40hgAb&9cc{hOOs8dn~=M%&GQb8aCm*vX<__Ba;yWIVT7WEU#h9;4;_ zo}6ZK@F;q;XdBY2nLQ0IDhc{&#Ws{4zF0xqGdE9W7A=@Dv=Q&D?FLIeLr7&DeKWIm zhn75Dogb-VCd)8CZk7PcsD-UhG&q4U6EFUkIH;cOR9HL{vEAWHV~?w^PJN@!f{ez* zgA<==gaO&8!3h@>U$_ga=o9+Imyu_YkH(|AaB`B7q}ogI%*B|Vbac=BjpABGkIaQG z@x>bYIx$D#{ivev+&=CyZHZ;k4-fXY?owjtCv!NsiQJAAIbimL+0*jyue+3@N4n@I zNlTy5y*rxDg(w#2QS+M9HyNvoP`fOvSv! z;bH8pv{&L* zD%xz(FU(c-P2Zs|o&sWXYfAN~dOUy*iA`GY7P7b-?)$0(VjYc{srbd#PhA{9Lx_mz z)6t<&4WQxdw!fgkB<)XVJYp=S+JN|}=8zB?a(m*5yRev>o1@RKeiXY*!{~<-UlnsR z^n)JF(NBI1J-%6@Cy6#SoZ8+~}Pyp7n(Y^i`I>%?C8r z%AIs&jTam#C-1`C@JwwKH2S8OkGq%@K(6?F33Df;K$K{#2ZY$FM_D1>gm)5G*1|Uw zLy_-l;E!m$TOagF4TuN*vJR+mm#pF{>5FLa9tBPue?l)0k=Jq*_nz1-WF_e#gzlCb zyUn&lRnSM@T@ynjl!$&(bixA`qUtEB1v9iY`P1o)&Z@#TYd7jCdtz zZnK0e#Gv6l4?*?lIJzU~3Og1f6W8+QuxMzV+}UxjHFOv8g@CvSp%1xxrQ;hV3!vdi z-xF~a>FCn+uU;-x_mPUuutoP?_R4Y&MPG2ff*kl@Io?N?u93Fl(XIVknskV)NoHQ) z>S!>@%pb4;v}+2oiZ1tpZxbJKO>EHDej9@{l-7*X#EsH}6g@ifiMHdKZ{mz}X6xvi zI@;%6b662)qNz#?0ACHehwc`6qg0`$Dt2<|gXSp3ZjF1dC~u{>6^BnjMh)YAfL5GV=q3ue%lpKpKu{r-CX`22qV_4fm~<^?h^FmZXhIEHu} zUpxKcwlxYI4!*u7s}KLLe`{;m$GB)-`|aCXzU7EGo|Q)CU@9eVTHqnP(mk?cQ% z2m3P)MQsl4jdyD*{p#s^$}ms6SN*@GiLc)JJKM!gdP~>%#axXr5?S%y&+fs#jQdZU z`!+I8-228`QdCw%xv*$3Wc{_*%sRCDD@NB8Hsg5d|*q_%M>w>cEHOyJ=&{jqti z$&uoR5?*mS4EtFf8 zI>pRSvUvWNZ41p!3s!%56S7!2HTb@08(a6THYEd&qucb?E1THYEy!g5J$VA7(>X== zx(~OxSI*B~Q0e`+{G#LQOtWXgUp!QmN_M#m!#< z8{ba2dw0EI`k{-hXZCXLyn1Crx4-P4we{*XzfP53mwv|Se%ohC_nvy2hgqFL`m3XR w=1&%$V!OxhulP#k4VJf$hM$}E_)FhEe)isk)&Lg4t)L|4>FVdQ&MBb@09mjk6#xJL literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/K.png b/assets/preload/images/alphabet/K.png new file mode 100644 index 0000000000000000000000000000000000000000..2337ad1ed4e63e8884041f6de0806a2ed27d12ce GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0vp^Za{3p!3-oBr1sSSNzMX~$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^#Mhdv?sHX)~FHjQX7tByUKb~Lzy#4$A_xpWGq zRqtDSOYqcLiJg;#If{0t@4hABv{JdRa=Mz)>W30aS_jf&G&NZs)@_n;elqj#cdzO| zj@yg33S7)nC{jGt))VxT!D8pL6^{%~xvYGYdS}zZN1+ckoobU_>3@Q~t*7Jh)Ok_Q zlqWDWPyE(*Vp&s&5Rc@-pd#lmHRXvZPino>N zyY)ljrMqN%__6<@hBKeaUi7^l)Vbc{=<1%ZpKOLR9?MGh9E?`URjE}BzNEcrUw+Mn zh4&9FD6KmyJ=O9{cGo@Mx15FBd^9H))HW{oKk;*l;kEorKJDfE6Y}SI=YP5Nmtnp7 z+*hi6MVh1RWy zE{S<{t5Tsm2<+O0o!}ik8 z1FY1H4z=HO37RRRD5+c%!TVj4KTPqkl$8CE50g?&YtQM-n{zOG{n^r@N%k{(UR2aX zZ?Kjt=l|vzo)Y*@RZh(#@gnc!e2Mzqj{Q?xBQNBv?&7rF{crwvG217%EH}6?tP~2A z-2d2V{inOaqVnk;)#mBHr8ittwy#rr_q_EFb5wWh>oiB_TcCvL>FVdQ&MBb@0Au(u A@&Et; literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/L BOLD.png b/assets/preload/images/alphabet/L BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..047c02aa77b140b6acb1c0ab96c26d174da07b1d GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0vp^Ane4!3?x6R6dD03&H|6fVg?4&D_gD3~1J z6XNP#-~(h55B~rE4^&)VUvF=3zkmP!{{H^>`1t(%{QLLspFe+IUS9tF`}gbDuh-Yt z=jZ32KYzZzzyC{?Rsos6>L%I$`D$RvGwi$`czF8gBho7%Vx}6H&6X~(Pn2RPV>%1zd2Uk@(|Qj zznT9vylVh{q2~FXqHEvE zYL~K1xf2oA@ktsUS&RrtQa==+H-HPtmCa+&{D2K~)l8tMD9 zPs4mgP<8(7$RB<$?yp&6nfi6hr6R9pt=C_tiUrCspL%nCiq-<3z^8p-*AB4nU!9Zh zk$T~3llX?Zi&87RVibQRPvHu@cP;#t=@iCI5i4FcCMhqu!zI4UdcB>6ilY1z8|kgH zHNBa1gaU4!t#Y}^pa1X1e1}IfH!VEy*uq8ia>ee|Zw?w?mbJa2`dI3Z+r&fpx6gKN z2&&+Iw%YL7(R&rC(OqHJ+RRt&GZJvt@DvFDrd;y$Ku$p22bJ63et+1-S-*AJl&)~U zsp8A`*e%y#Nc}k{=x==Ls=se?5 zRgo-(sf^kikC{Kbyhh>0G-ka^Z@q8ID7`Ry9JAy|;H^J$M=P2%WBJ}rzdW_6^Tm17 oRJCQFPy3Xzopr07%qU`~Uy| literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/L LOWERCASE.png b/assets/preload/images/alphabet/L LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..e65144e95adca1214ae8222ee95d070042f292a9 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^B0y}w!3-qTvR26hDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1v8w_UoX!eZ(qOPU;q95`~8`w-|hkBHha1_hG?8W zdwI9eAp;(li`mEdEjbha|IgNB&@|rB5K?08-mBw%U|Y{bZHL^noeWoEC-pIvdQ9Rf zn6C1Yty_Iw>dJzOqBkdmGuz~TU*EwN)-QG=ZO54pcbA>|aYW?lt3sAf%xdneZhzA6 zq}|YeXy-gX$eQ=e(*duc`bgb~+(W?hE%0wzT7N8S^vZll$zhUp^;Z|E&7r w_Z>T)u-|N$rJ@;npv;qvK{dKsb+c#%!_(!4_f;n6XMw`P)78&qol`;+01@nTbpQYW literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/L PARENTHESIS BOLD.png b/assets/preload/images/alphabet/L PARENTHESIS BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5cb78df8b7597bd8d2ca4fa7c982d14254c16d GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^K0xfv!3-qd`b=C1q&N#aB8wRqOs{}2V_fP}4xnIi zfKQ04djUu>@!-{%&A6?48z&zd4#W5t} z@YESEr!^Vyv@%Af20E05-21QTp4;8|L~PmqIhNmRawnT`7RnT=7XFNKoM!cH>a%~@ zu3?cyT3UMoD71?IGFnm%e*F?QvT}yf+$|l@Z&`#f2EF5{q zamLh-79x?y1h_A|7<_R5lox;Ua#F`mC!OND)b8x{k)2<5l`hH<(7t%`&$@_mL*CgM zH9=>;70!0J(qDZgyv&vV?#g91HtFeT^c<|yo3P@)pXtsgo*IgBTU$FfM3jA>?BXhL zsM+?Ws{ekiuluT1XC-**uK2h$Z*!)T^YgY-J(IN}eJ_8x<~{xG!I+4iE$Xkia%SZh zt&UKwEvhTtAh06sk^Yt;2^4)48OpekwT{(Qf1 zaL3+@GY@G6%rwnWIDhHjhKV~~KDm)-%Vos3J30H0{52rKZYD6<(mkPZsdvbxBKB*O zKet<$Omp7QR^oPZ-WjG~%h^9-Y8b6duf<2~`rf4dX8DiVQq^}Fwe4+BIDg;B{w_XS zWYQ}qAM3|$c7LVTZoM;kSubDo+26}naW3E6B+?}&<~!F#eu+5eccCKw;HjrFgipQ; zvc0l2>E6nNzvd}hM(qhdQuX6y>AgLoo}~+y?sEOReCNT8_fx*GiiK6OG>bgR*uGcp z-N{`YOtsGaYi9Qzn7k_M+Rf*EYbQojf8%(wa`)10n@)!uG)udEszRQ9cGUd1Ev_b) z6SJg@^0jKeYl zC2#nu>fODqINN3}kAF<-u@*sT;dvJ)TwcEF#|4JV$BWMyOBSh3oB8sU-u-1odzDvR z54E?tzx8}gsMjZ>^!%OcX20p0bK?8v&~NPi@%#3f-^rW~Djz&u{an^LB{Ts5B*_P` literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/L PARENTHESIS.png b/assets/preload/images/alphabet/L PARENTHESIS.png new file mode 100644 index 0000000000000000000000000000000000000000..57a14d3bc3e402790f23154783581f40815ea26f GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^CO~Y-!3-q*EPk*9Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBio_m9^<|DM18zWn<6`Tc6e`+*K&T6-oN`DC0tZLy*?B8=p(}l^@*Qc4yh?A3CUQV zGQW9O&t7Qao=F@YZx@|D_Bh&cjafv{rbyqbxl1-H{=T4d)bHZErGAc5GHadAc1#P~ z{rmpTrNWt){%uop7IGBsXqxmP@7j^4u6h!=wu;I-cL?=f3p*60tv5A%;=I*-i+38w zC+^_k;}^_55xn+<`f|41yjK&JySx=$C-fq_P^ztW#fr7c?DM~~cBWll=y-1z*V^PO zA5U6)a5+BtbM4%(HzKJKZ{E3bcE!bhx+nNX=;5T05W$;uf)~}5{;BMJEpI6>hr7wy z`q>(XNrlCGYo+zH4lmqUSSP-#GvoMEqdi9=KZNn#TUX`n+7{lIeN{nrUh#WYwZrz` z=cOKe@8h)UBhybYf5z#%zIEno`z@n>?Z?Gi?IvlVr+7|$+Td$H>FM?aPn(TiNe)L+ z;=3av8c)?koy!PieVckt-~4pn^7`5NC1#4t^NPeA&cv7O?e&#<*L>;Xf;YV9Rj%&t q@Ywa&Hlklm>E)v1M-@YU<<>HqZ*ys~Z~OcY6!)I4elF{r5}E)O6Yj$R literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/L SQR BRACKET.png b/assets/preload/images/alphabet/L SQR BRACKET.png new file mode 100644 index 0000000000000000000000000000000000000000..b04868fb28c3b1f058723a526347099ec3a43bee GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^MnG)K!3-pCY(EtSq&N#aB8wRqOs{}2V_fP}4xpfM zfKQ04dw~y-NfNm2sHX+gAW#zI7tHX!Up{`l{{DJ<{`u$c`{(zmdYximV080zaSZV| z{&f23qGkggSAB`-Ps|to*XN2aIij{N*e0^%Qr64EjJ0_*q)>iSIz#-HyBAGb7*ZJAKCI;qL^tWp;uR%spph z1U9KLsku)%)L`+&<6?uHz}>#eOu28nj(nN%aO)|zJ@Xzngp}qsHT_@sg7ec3rTuHp z_{>~UqE~|c|MSq`qLF+f~QdW=0ToRm*y;#2$y4uHSKJNOX_>_6sr*~e@ zey2)@r@2j&zPevvZ?T5zx1YP0FTG=-`|_{Sd+nd;PbU?|&PexvaBEl1{ePR(7tOeN zE%3~lWe%d;wMW(1uiX({G$ZI}g!PU~M|6x1Os!Il7nu~17Mq^=d)>C}OP{*Gu*hba ya7z2banU(t`btWXSGzlYY~F4Ek9A(5$%pvxsw}(Yn^vzu(c|gr=d#Wzp$Py(1;i!* literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/L.png b/assets/preload/images/alphabet/L.png new file mode 100644 index 0000000000000000000000000000000000000000..752504807b130883cd140bdb2e9cf375f8c8f510 GIT binary patch literal 463 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 T?9fvo00000NkvXXu0mjfbdwdC literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/M LOWERCASE.png b/assets/preload/images/alphabet/M LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..722f9be760f5ce9b53196101b0b81895f4fa4ad9 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^AS}(n3?y$X)!+qEoCO|{#S9FlS3sCCF7+t~P|!HQ zC&bmgzz4`A3EXzn(*kM`C<*clW{5wZ|DJ#Se*1d){`>R&_0K3Cwqjsl-0kV&7~*lf zH_WrCMS;hK<kNIr-qylv9?u-6e+> z1POnSyv2JlQnTyD`Ay}#E3GbEiLakEyYbs8kCmsdg^DkDd%$abKcfk6#n$~Z5}t>= z*0`Mvdr zqs=u!orQwF9l15L$UUJ(qgv?2OA&U%;9KGgo}Lt+;K_f&LgSEa;=IPr(o4Q8MgR2u z$?l0QH$8JeaIJHJ@l#udrw=AR$e0&3apgP98xhZb?b!S2PgzugOi6zB(PO1--y+Xh zd3)PM?!U+0_BE!^e{;;!gMR)7 Ppfus>>gTe~DWM4fTC4X( literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/M.png b/assets/preload/images/alphabet/M.png new file mode 100644 index 0000000000000000000000000000000000000000..0621dbc0ab5bc347e1a145e1f1985f6b1e07f7e9 GIT binary patch literal 924 zcmeAS@N?(olHy`uVBq!ia0vp^5kPFj!3-qdtGuxSQk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3uZVU@Bf}(zJ9-b|N8s$^Ywp31~xG;Fn#uPaSVw# z+#7LoTeAU&&lxwfr~mhVvx^Ykmi<~e-D*;zL(ubi>I_p(|NXLr?Lys=U2Pp5u7x5D zGo~JA5ENYf$inm*t4sIKF1H`&7~2=@{Ud9iX;9B$pf>Hc@UoYxTPA<-pVJjGPeD$^ zI$Yw*Ll>drhsuOnMN`>(#0sMielz7f^kjUeEY~`x9wZoT2;3?yX^myw=ZwTjnhZ0T)eqg9Wly%cH^{F zaiQ6d4U3Ly9p~FzT#{NTmhPof?AQ0TP3ZOsUR_mti1VE%%R{cqFn@lqD%S5u)7Ld}2~)%uFP1y?ME5iAX{$BTZAZ>^ zFncOVMEG}do5s7Fnz1SBZFv)z+}QWh>9%X;#IpFXpxp^y442IfUs@a9`|#+92<9)*d|Z>)V-I`O4}=dq(dF7U46dvpJ9 z``T&QU52mJ{*4tv^k2DqROEAB2%jUE({u*E!Bx6v_2$WbtQ`gCuB<~y<9JF<(`$3HI1GC0At^48j*-zwk3 z3XbXOxVX4@Tw0rO=W&tCk%?EA{S|PpJ8pBzvrf0e^4im=$@{DiF28^JwrRC5^ZIw~ zuNqa~u6#e^e`EIL^6;Nuo=*B>`fz#G=XdP?yY}V^HW$B}6|nEm(*Qa5SXr;C<8pF^ iE%N_Q3$Xrr`IC9=kwuq1)?MBR%1fTEelF{r5}E)+g`QRb literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/MULTIPLY.png b/assets/preload/images/alphabet/MULTIPLY.png new file mode 100644 index 0000000000000000000000000000000000000000..53cb64ea8b5b821f2d310d945b5943f5ffe69382 GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^Ez2oqpVQj zb>)NX)zDNI4aUP-TUAdT`ZLYIf8BZ3q;i&)jk+^V?ib=#%i}c7EuJ*NE+B88@`j|v zOo{FyX48(RiQWs?VRZLV!<>-RN#ck3CfIa`tv7v_vHok`jlR08$92A+4tccR&GNeF zG4&IR(l4)*zdvn?_M)e%QaTCRRR)^VNB%OTLDEaVM zp{GyFk!A0iSdVf|Q4dv*P5xprMeov`(>HArr|PsmuKM)>}tr+`k``weerqg59e?N~;Z_h8UZ;UFP000CONkld?v<_Iw+WkLQj z@tc~B0|Y`obfPl`XJ`9_`*40I%QqrjBnxzUV)N=Vz2|s6x;b4&=u-aBZ2V9G|ExN9 z+t4F&VY)uc^Jke(<8s){rqNHM?a#Tx|BM;*I2yqH);GNdTFtZ_y_c(zytUOd+N)oe zF#-C@4Gor2-e}X=>AT;$X`a#`Hx->9vu?ySOy590(u1d;gnq#E;N>NecNV_{a)aeF z?H)7_=q@6!8rY;Y@~X$QUzWB2K;i#Tl3bCn#bbikjrAlD?jzQ|!q3C-l)I|yb`-oAqbSd@P% zv*}1My AF!%b=k}7>H$e%c$I-I%|Ke-zhTG^h^FHC1tuE`1UVh>sq`2(kurH6n{ zP^~ni6sp&?Zd!aH8P?5ZrJ2U*tT!sQf_=aUMFA_dzIZ zkGy<8=hI`BKO%BOqfm5Au4WwF%z^}K0av0t3|*3&TDag+eCi-vLwUGI*DvxQ^gnk& zFX!({{G7oaHAG$``6d%WhxgWUK8mb7llG{AH)|A&J(LS2)P^Qro; zw%BF7HsbP9*rPy>O7xTnp=Wy4{GTxbaOPCOdxbr8&v)zavnOppa*gYT}R}azO=<@F5e2Fdz?L|TB7l>=wIjNVV3&mz*EljUOQJKp1+;)7CTG@o}JVIIs$>a4nsu#)K{r<1;$ zeJqG5KkWGOX4|=uO%^gQp$~m7OO@LO_=R-8)8pPw@8=HpuG~6ye<)MjQwO+EHjd;U X7A{&D4wja500000NkvXXu0mjfbFM>l literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/N LOWERCASE.png b/assets/preload/images/alphabet/N LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..22584a214d17377bce35f3adef731a8ce9cd9e85 GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^Wm%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vAL!$G_*FUvIx(zkj{|{qqS@YNr?&7#%!a978Nl z*G`ROI;_CqVyKs~sPnshZmg8x^fTcnUo$vnF*+!4X>2-X*)BF~O>X0nB@P~|B|^W= z)eF=7xhtq({!i-_|5ix)^4W3-d-{ooe7ZABaY>SAc#76j*S~K>otK$zn&7XoCU9l> znn<6`2W)TMdY7yG@uvCA;<^R4#?>WDlT)6447kFzy;5r1{B zp%cRU+-+`62vdGt(83qB!fJ9~W}dUttNrKlWvrs_N?Cb?C~vwlJvslF#8*MJ+jo1@ zvu6wR{9T{(?(j49Z*K%mJB5p@S+1XWaj-?jc7yU_siOHG52vx-pUCGaaCoC2^N;f` zFEx{+PnDn8t9zl;Ra}3{9rv7{W_#R qG%i2bPJ2p~XT8GlNe(A8cGelcbXd1D;s+lnVmw{_T-G@yGywpq*R}fq literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/N.png b/assets/preload/images/alphabet/N.png new file mode 100644 index 0000000000000000000000000000000000000000..a57285b03d1bf90249aa8a066e49fec614db5587 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^4nSm%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA9o&wtM^zu&%oe*gOO{`$6I?`AVFFbR9QIEHu} zZ=L>jQL_R^+vSiYMV0@Mi+|JO}?w6g<#fS&>PnI!XF1~#EvBTQNog2)VW2{fH zJXyLWb0JHHKjZHnrUHg6c?Qk#oA)RKEdL4LsU<> z&eg6<+zA$zi(-7mPj}=bhy_X+INX(5(3i`Swo#i|?fMt)3p&5vpGck1;L2o{$6(|3 z*J1KzWrle1N7@Wen7B4<+`Wk5>R+ZidOi&Q)Dvbi?^~Y9w&NTVqlkBWhdu9umqIKF zudbOTEew=+&hTYz7taO1z1Eo`zp8dJ&yX`w=vN6mpL&^LSu<;g>}zGIhK18JnC2xF z-CxOgKycSWd9#L`%m9XU;nEYfFfz|EK2Ynl-SWVNBBNi(##I zLzEN4qI%Ypz-g&(tFJCT@uH4zLiEgPHur0@1ey;pMlw1~sTYy-d8J@{N0DdJ34epD z8`oQKy*{}4gP!!1vurQeUNa`_KD3P6w)Wz?q*MlVafQxCh6wg2nhyFCDi(T5Jy_v5 zYfHp^C4q>CVtNM_zYm-JQ%2rgYg!qjk8I`4LTihQT-8xNvIp8vU(DK*BR*&C`%RAn z7Dvb$6+YZxm6Q6g@Y7y_l#HhymEZOj-aTFO^FO=lp&B)o*wv>&Y0cBs&t;ucLK6VO C)(hPL literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/NINE BOLD.png b/assets/preload/images/alphabet/NINE BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..68e8d8034dfe3b96d9e087d4c3c00ebaccb67261 GIT binary patch literal 1350 zcmV-M1-bf(P)^-{0TQ&(D8TWivEbdDpx%5>)cj^tzrb_1j`^f zg`Us9XVP&|%%!5u#EURlM}mhl(8zRrc5qkiHK>`bkkI-QQe3VufNr;?IjjS&hq{`; z?}7LIQN~@BY`9zr&L4XN{MmJ@DU$8{&9|U=bM^ekbmh!Td47I54hFLUdGREg={^}| zFq!i6QRgK!NvgI1XkCd(PHAp>ShW)zdv50C*a4v#XU8CVR5Z)EU}S-G7w%}MwC3l> z!Z5$GLY_>h10-5iVno~x7^GN{w+J1>dVcG6{vHT4<+zS$l&%1{Do+%`q^OGe04+X? z@(?x4H@m8$CY(sP{?iMfMKtl9TcUkI-q^?ix2T2(lE?vkwYUPvje4>b&U9mt^E>(8 z+0cNzCmccK>y5l0Dw3Sx`eVOkccr4wdvjKfg?d|KCV8#DxIY(`c#d3S z*}i~$t$vv#_rPqmoOA192jt6N$$hlu2y5iwlHb?4gZzP4uHAOo=h^Rr$Ry8y9CC1o z)Db$k;j<*q>OZg#YPZPK;wy*RpILlsU)-7Dn*5<;BAZ9e&-u}mhLB-Ox_D|Go6Zd1 zwlTEECd0h6h4`1V&zsv4Ra?;%b8OxYPChOTgDp23s=f#*x!S`Gogk@597Jl%Np?z` zk09moO^DhLi%y4m6UBzihiq4c4V=&Qb-f5YORN*fN(yfxWuAui z16PzYhWCY=H!IMs<^5(9_=k!AyLQ523fBvpJ=4P?q;VP)Cb}`Aq{x$)y61}eP6Iqz z-RK5R=go0tIa&xil@&u%Ur8CAj%TQ81v(^d^#w|b5cBnmK!;FQ4DgQgD=9)Lr36}3 zbFX0Sqr{n%0bYox;=hsZlW5|7;f0jNFuB4EYIsUYl}x-u$PGE8q)=f#;l>(vCpt$- z*=koc12p%uGbtWQ3cp|cEspollgyd$8KsbD+T;m$CwD&m_#s-f%oV17py>fRcFvma zE5&W?lq5yFQ$<-gxm5;N$(=ez?U)}CXE(V@uecYWGVSkMmtv^r0YsU(Hj0+VN&tj` zV=3252csm4DO{OW2&PgfgcKWL4-!#65@T-;tJW=1;g~hG!pGgsE#vIRL*iVw=$JaI z&Yt~r=L3hnND)yg&ynTiJMLd!HgWkc^XPY3i!6FNUX+WQBZcEV`Hj(`=X`(mAh>kD zY$Mmx;>YW@!JcP7u;6(%eEx(VBIndN?=pD&!KC7f@{&&WKefsi#T3Rg6951J07*qo IM6N<$g7t2HDF6Tf literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/NINE.png b/assets/preload/images/alphabet/NINE.png new file mode 100644 index 0000000000000000000000000000000000000000..3fcce182b2b62f099b86427f1063fe62e365d133 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^Em%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA{&kKf;K&;Pz&etrJ=`Tjv2{x__IbKj@_I2QFXMZvq}zS0Gj)BHjzk1kFM zP?AzR>YhD+N65?{9);YGE`lv z+%m})I?e8TCb?dXmI^(Sx#o;VQ1Cs@UJ*?d@yv5!CU>Qt2Sf_UZ>sxA&PQE;pN@ zlNHSU%)p4*U9ftE^Nzhz)y};U?=8=6Ju0-i^+3jJk-rQz6GFn;4?bG6%p>Ccv%T3@ zCcJohr)2sPrf%2P)E z-{0SFZ*Q-!uTM`;mcT{00000GbW%=J0M8%aKkr|EzYi~;uWye}mDl-~000F8Nkl=c21141nvz(V-%4ZQuVX?`Z{0!qCgVQ_p80WP7_AD||7=vfpB9c)POl_`&v- z#+QKb5!Gl#E9Jx&E|wO z(oGd+q@={u+g&1}t;iaC355=W`4~tw$orvo@Q_CtD|5B8G#+BfYGW3pnys3a=bu*_ zQnkIs+?2{1J0dR?`!@3-RrQu?%S|l{2QpeT5K1eqTuT_oiT7V-C$gEx*)OwOos850 zIF7vk@eIj~olRABcAS(T!hn^d6*YcP1d`Z+%RU6)kOM0spaXf1!hKi{T0G z^S8?%F-$GhK!DAx1H_;_e>*&T{~>psUq}m{N2&pJp8-*G10vu+RFJ~+ABP!dO>~C} zKJY#ZqUHsK*##Tueb1K!89OU70Yv)Q$1bJrMvK<&Sfe9JH8$ji4M2HsoJ%*K)t-U7 z?Z`?zqzE(Ov-_W~!)Q7j^MXS)`g%UvK4bi{;qb#0yVHEc&j(V#0uzM{+bgusO#iOl zwZfQ>Z*4m^a7Q}pk+Wy;IJ>43jl9ueQsn9aZTir23tx37A*F>|pvdkW5%%>CU38($ znWLQ@xix}E<{nsVo4!CU%KYOa^leNyIKOFrqcabs{k>6vJVp zxm^>(FNsk~i>@FOcwE}VAPuA-unNhXAThACNm-i7q<$xeEy&B<8Sxv)v}UCYEyO0K zGLaG>gEA^VQ@|*>T@tg$rx{0E3zHcN5ReHmGSmLz0Yj(G9f?& z;9!p$X;+V*;;D!i5p;YRo$gJ#MnncSUW5!1E{tEyaZ*hCY{$k>HCECgfPJ3!G)H#R zi4-(X%WI#m6%yn|_IAm!B03kr5k*Bq37J7M)9DSwm_a^k$L=N-7me|#8d~>s*0=Pv zbE2vz-8~%cEIPoM$T5TFFeVL3NF9X!!S!cqzH1sf?}%K@C%%@=cSP{B>3!~*+}BV0 z!2enQ_q6}d4qWs8%=!5ujvPqf`5Kcm8zOB7n+xiDk!b_638#f;S0000^BnjMh)YAfL5GV=q3ubuV@4sLEynQ|Y{QL3i_460(VR_2Hz?kpp;uvCa zx;E5P=&%A$vU$tb|Lb#4nA~XS^qZ@7=um{h5$@SjUItik@CE$s<>Col*LLEzxL9VT zZqA3?wvET9=Eq!_U7G9c6m@#)l!!aWjvd&)<$1*4sq|U%|PSy~<12e9s-9Q26V1*OJbExAJ?6Lpg6 rpWnOcn{@xerT75;un!y;47KZD&GeR+JGuNnC>}js{an^LB{Ts5Iiunh literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/O.png b/assets/preload/images/alphabet/O.png new file mode 100644 index 0000000000000000000000000000000000000000..fb60b3a8d768c0316bc7bb97718ad76c132ec547 GIT binary patch literal 796 zcmeAS@N?(olHy`uVBq!ia0vp^0YGfV!3-qRliu9`Qk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3ucI)e_o#7et-S@etrM-`S;W1-kUKnFco{cIEF+V zo*Qv;+7ksHW+n-a+yCp|%B;#(5`O$_Yk#ZKow@msgl#@zI*Rv5$W;EHw12&0>NGQsv=eWGD<|BW(DV64(7N?PH}jJ|Md^Ke z`dI1R%IBP!TIO&JDR@= z>9*c`IB(Lktw&ntNA44N>JYK^mD7u#9}C~?5ZP#K+5GtI`)eCN1xO^XdmHoF=4P{X zPg$e?!@JX&^b~6AdKa)f)|7jw^lf4_qqcxr>NnSz?B5-VXIOlnh#q3PJGIr2ucgwq z=&`*rv}4YMZdGAOv2k{xvhwQeSXzp=g;Yf)X%v{ zC0eM~Jldj_*dk`3vM1E3Zcs`^x*d1 zqsfs|RqWzQHJY!oJh5$o#ox zXK`NSlR)XasXJcaAOLaUT9DCRaH9#~S{p3DLs ze`DqJyZ`M2KJ?~Y{V%ghS!t2nUM}u$&BfoAdjDfQ-_@Heb~eogl$JeR{an^LB{Ts5 Dy98TF literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/ONE BOLD.png b/assets/preload/images/alphabet/ONE BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..1b6c2cd66ef546aeb5407d606cff431e3e365f90 GIT binary patch literal 892 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!I14-?iy0V9uYfRPT&?`T6fpD!;judlD)-`^h}A3uNo{PX9} zuV26Z{{8#@{{COhuBrm{2$Tf*1vBX9-{(L7-oAeS`uXzl{r+cGRVpzsFfI0UaSVw# zymb1_Y0U~eZ7Z#}&1E~f)av$c`==I4P97JG=f-S(&Mz;}q2eT#~2POnd*Gk*sA%ekO0czwkx!uis{J zR&O@+Z|76KmVf)Bf0>QRiNyZ*?APA)y0cXfSF6mo`*xf&t-QNe8P*n=2sc~60hev$D!~;Ae(80AHzw- z1tlv5m{VSIGT5hyDCiyKJg`^%#KGFn6|%JxPpw)t$%aiJQg!K?r;G_(joZ0i-#@t9 zLFOF8S;+;Jf(C!ZFSs#s`qgl0_%k%_+c)>6J;Rn`njepU4R!czQd&6>rnM zy{C61nHVrk$zy)YaY1ahF~j4AZ61>iPdqQIzUi@kq4IYfh8e*=Gt*qEud5ty*vo-U3d9>>p4 zyIIt1z~jnVF;U#%|NpIu4j;04t8G-ZDnrGE{a;?4u%acU`XuwMN3SEps_Z7E^Xtv^{wwn| z=F*Kb|9HB+;#{+TU)g!=IF}w%Y4=BygnI|w6!;~w8*4gs`8GUTXMBLqH{*JEi|M&d zFJ*ZqcZU`!d(UxlZ=VrZy#Lb9#qqf^h2J*bS+U-AR_?;+mZ!Iv=6TJ%_Ap|4l=|+w zx?Nedw`I;nW|bEFk$5cs;$8Bu0{`dRU;mny_kXqB{mXabUthU+)pl;(`syCj+WBp- z&7WSbvh%op(f9esc6U>Ij!OB><%v4=GCLB3TP$o}Zal)L<}cs2_0aJpNxxrSnpYX7 dYj!5>IKSea$Y*uuJb6H|;pyt{IGyyXA@ literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/P BOLD.png b/assets/preload/images/alphabet/P BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..06959c825b89dd8ecb9edfe710625bf231412b34 GIT binary patch literal 1190 zcmV;X1X=ruP)^}zkh#!4-XHoudh!}PcJVo@9*!AkB?tpUmqVI zpP!%4&(CjfZ{OeFcB|j60000GbW%=J0FQ6q5AUD9e?MQ(PcI*@_ehSn000BcNkl-~<5I}KX5{)1(aY^$3U)iWA0|FUO=cTQ^xd&N>fe`YIFw4^fgqN<7XIV%L zQRe9bOP4XVNA&R3kA!((r-L|G>74$GIFob{{GuO)r0*0F$^L;7L*MSZ{6vH_O`UWrUezZkyn2ZljH7F@I*{^e-1tlM z%_x7ZbLC@bjGeB{w2rfVK$@<79)r3)DmGdU=<}c{lXN9#SE|SdxD=Xpf86YNt_(jj z)7#@E2_)a2U8P!%m=!$Tn!>dvp6G6;S2?rEX$$4aCLe#%T#@(sypW3=_Ew@drPJsh z(hni0R-D#g0tmSrP_EN2K;MW7PnIO&$FLud*`+pRr%5LAABT(X)aMHx!A!5=RFN}D zZ$JkJ`uj9G$>~{M+2s_np$Sw7a~)v$L=-=1jiEdS1oWoLP+JJ*rVslJ`RhHuHz zsISt}fqr9jGU!|&RlBZ8FoN3npRnIMRcZ^3 zZjWT+6Qg`t>3ugZE9ngqQvzrpue;^Uu+jsl9AaXWkCszQXq0oy`Hz_8ZnrKspGJK` zF5u}E+5_j@pZF~3qh`;0ZcW^1Ln&yiz%Dd(N#WiVOAVAKTgzC0>5IDoCyJ zC`s=Gg%evC>8!Yf-;p$TH$}(a+Vn8dlP1rw^42Z)>8Z@UAg|r>OqI_V`J~A`q`Zb% z$`E%oi`FnrA?4Qh6vc0?9yzV@V*U3ME7$YCTW+KuKjiIybZQ-&QvnH1Yom?`iTrKb`$>lR*tClkitp*0Y4@$7}dL2&Hw-a07*qoM6N<$ Eg1_o8bpQYW literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/P LOWERCASE.png b/assets/preload/images/alphabet/P LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..db8180890fc10fe6340c0d1fe6f406b781498601 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^7C@}c!3-p&q;^XJDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vALU_w(O>zu&&zKVN_S`T39B^H(!4FxGgwIEHu} zKReZX+6n^>my`2V+;0BQs$THZdDs0nhL@|g1T+L6bZZ|Max#cKDCTus$fu_&`IJSL z;H5+F&c)2T;9T6Y+VJ;}nU-(fEHka~t@_y;=(|e7ZArZBNgf{V`*Rvozl6Q6e8G5N z(g7U?4aP}q4xN$=CxlAE#3r$JynSePa*=fKtFYOQM@;Tm@H%}yx9swT$jaY0R%$2ye z8ILb~o|>BU?uCicGXtp&k#~-^bX@f16FBSm@Iao0gUyB-fnCg>!`l8?8FTKsKZBv$ z)`0a;S;5oI^0&`#k=*C!Xx^Nw-qx`@x3i<^;^RYePj`G?#J5^r@?md=c|_}Z#}l%* zT0ScD{BJk-=QzX9sdfdMztf-a#8=+2HdB&wLyLUmBi=GtCttP8)SHtrXV)`c{hB9% zwZFqZI;kjqvI!|Nyno)C+h_N~`x}n7dZmOV*~`5Pl8w4+-3*FUPgg&ebxsLQ029a9 AIsgCw literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/P.png b/assets/preload/images/alphabet/P.png new file mode 100644 index 0000000000000000000000000000000000000000..17f8680ff8ec03c662f70fdedc0746046c534a51 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^Za{3z!3-p2<@=5RDb50q$YKTt(<>m%7?=8#1EeCr zC&bmgzz4`A3EXzn(*kM`C<*clX1L!!pZ~r7e*60K`SJei<%@Q%7h_;xJm=}+7~*k! z>9m{cS`>I3x~DBwI`zN)t?YU$5#1>%zsydae7QuLDdyoHQDasCW@gQf**?z<*Xz6A z%4yB{E!^o{*Sd0L!o3qQiW(k$Gd3v1xjk!gI6P_dU$Fz`g5}CnZWo50c*${tZ}Q{F z8FEH*XWi)yy&ALf*Q}Z=>2HZTZlbX zy0p{qTd6kJq<_=(>?C%tmafz3aeH&?tM&S|ekJEh6WMfXc~`O*IbJYPTk*Wg`77@t zX~VNNoKu#cxv)-A)xXeA zHWpK4x4HLo+q2#8jki4hxQts+YP#>03F|uTGZz$gyQ=+Nw$ZAXpS9^6PX2#8Bv~9Vk^@p*Tym%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA9Yzkl9-|9gIY`TG9+_5Q22Puar2z|8OI;usQf zcx}Y%Yikua&Uh!ydiLA??aQ>Lgxc!0kN3|N=Hg*~oB8W>(5(R!_We&6xkQZpm2y2R1&d2VNyeO7_ScU&tx{iKPzg)ROz8b{eX5tq{SzfFEbEsQTF9_Ti>#Sd zd|Jm|oHI^1-$QcVF{z5}&y80-?+lU<>vGF}{C&s4IV-{z1TD4No>LJu<-~e1{va9A zJK86TGhJ`k7j9qw^yb7WsYSAz*RZR8x$@{#@QIoGo+}vKQ@r@T<^8736T4iCT-Vp8 zPJbaQW?q$h`e4Yri3Sc_YYynXRP8LBYr=kY`{wS&6S997F?r6f4)+c#R9ow`{?6?e zO6?unAGMa;Rax~Q!$?D4Zc}lA;}3m7P#@4{kB zH*m*<{F9z@?9+otF6YmZk9LIVtp5@HyyZr$(B2tJW&L{EF%PSa*46IY-PkWO;Z^D~ z`K22dXnYIlSC0_cJ$rGci9`VFjTJiH?$BaeHh0CYna#|K1>e>$;}w)LYI2=f6BVZ5 z7uuQ|@G)HJhvWVep|f|3{@XIMt@xSklJ<2qDidqhRem=4z5V6Vxiz0$UwoDR_vyNM zg}DEPL-mS`sX~9h3qBFsdU&qoYV+0W{DK+QpO5E%pIH8ApyX;Sodz5oBGwhCzF8Sm9MNO#H;Iy576-4w4Nu~Un5R~tDT<^0}p z{g7ctjf(z()hjxV+Osr0QsTIxpye#GxSdOoW48W%g%!MB7e6gN{`BvG?QM#e)=oTT zk*xi;GCy$gUUeN#0lTRoH!pAGi!NTFZlaK6(KD^Y`1>24ztU}di=F)=4wo&vacF}= z_0FoNp4=;cPhFX9?dx1_Jj-`q-8bf&z2Z|G&k7pKwQKDDrIX*SmFfOOaO0_b-@9vG kyU97RNgvn$J}Ib{QC>y9>i*M*=Ro1>>FVdQ&MBb@0DgI#G5`Po literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/PERIOD.png b/assets/preload/images/alphabet/PERIOD.png new file mode 100644 index 0000000000000000000000000000000000000000..532db51ef9f085a57d5ca95f0f56c9efa68d4ed1 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^GC<77!3-q1&-R!BDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBv1+spUI@1OsEeg1j<`~LH0ynY3gEAe!343Utm zJs2s*tjNJ~AS^K9+P?pphoyxNUk_1yQyToX>7@y8*`tMXwl!V&c~!9NUj-xEbViQ< zB8OZOe9DrOEM~-!1HPV>jC!re}opZfA2O1dB)S#&t;ucLK6T-9#xwF literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/PLUS BOLD.png b/assets/preload/images/alphabet/PLUS BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..55cce622e7b896380b05e5f23d5b33b1c4505de2 GIT binary patch literal 945 zcmeAS@N?(olHy`uVBq!ia0vp^X+W&c!3-qT!u-DgDb50q$YKTt(<>m%7?=8#11Ojr z;1lBNUf=^{5)c0W{|{8WfB*ja`g(hNdwF?zet!P*=g;To=g*%%|NZ;-@$vEf{r&6L zuh-YtzkmO}zrVlX4^?)c9)Xe|zhH*>{O9ZS@9(#NzrH_S-antq+TMnNf$4^)i(^Q{ z;k6OBr!_0^gk&Af7JVPK_V@qzom?Gvwmf`u&bU~uEk)>yjqnTsp`E71A#nRRIznpOchH&3ouVCrC*l48W`(Y9>o^c1BRSJ&tnRnNM8$+s=e_qfMX zcBd+@$hK1fd^30ObcoEcWH#zsC;9Y-OcC2O&lfw*AD2XRjqOC0Iu;rS3B`%f~ zo1N8~V|mX@YMY#No%}}0VB+RU^1bG}zctI=n*P+}S;)Ca%NP5cljLK+FI(YzRk;5~ zK%;2*FG~w`oR5z}8jo(6^3l@s z=^e=>?UveXof}KaX7yF?0Vn;GiuF9A4KA;bJ)cq*u}(WJ_QkoNY@_N& zb#A|Tzgj~|QUq|6T>y}m{Hv!2d zPpsJfcstyfdN9uIWMZD-o9h$A=a#*AK9Bjv|Fb6Mw< G&;$TRww_!7 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/PLUS.png b/assets/preload/images/alphabet/PLUS.png new file mode 100644 index 0000000000000000000000000000000000000000..ed634dad09a60f5d2fc9ab17dc9ac5f606aaed23 GIT binary patch literal 531 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 FV1meHD#ri- literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/Q LOWERCASE.png b/assets/preload/images/alphabet/Q LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..30cb5c08dbcfbbf99206032d7e443395d7782198 GIT binary patch literal 645 zcmeAS@N?(olHy`uVBq!ia0vp^9zd+k!3-qd1lu(NDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA{&pU+<}Z@>S2ynp}t{PUhy-tsaqFy8TWaSZV| z-aGy7wiX4B*1rdjNOga&zf~OQE_m=$*0kDe?WX8sJF8n-Ix6z=EQ`)bh8<}8(sQ`Y zuU^^oHn(Wj3tTc;_Ch2r=+xh6 zn@j)o89zSmYzykXm;U_K=iNO%8CupmmKf*GGm5X&nL62jyFu%O=bzgIKKV{iyrT42 zkz?WiIS&s=IGs4WWPy=5|7B?>))^DbCvE#$BM_C|vanU5d-vJji{qF7h|8YLzM^N3 zsy(leTVY*9Pxv-XmZx(sexJK`RV-)gC%%L1ZlSXlJno*r9qRP_v!d9c1v@l^Zv`j$ z9~0}Ibjy0-(=et+o5*e#m)1xw75%$rCr)uQPp(MhdA8-L&6N5i@x^Pe&$L=1^G5oP zx9RPkuW~}>a{I*=HF_R1WxxH@rvHW(TgvAI3yE|i$@D2V{K^kkXlZYopX%3HyFsQ$ z|C#Q>JGz_P+m7X~e4{x1*_N+|cR#6}IrHr7XHWEw>Oc9tcIM?Px*Bzwdv9Ll?@1GX zxb|qEE~}l6nQ@f6DC^>{X^GSL5arG)z4*}Q$iB}gWC+p literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/Q.png b/assets/preload/images/alphabet/Q.png new file mode 100644 index 0000000000000000000000000000000000000000..556873d216d3c4359b987ef33d60f24dca16eeca GIT binary patch literal 830 zcmeAS@N?(olHy`uVBq!ia0vp^AZ*OR3?ie}hXER#XjWRe7KJL+ixH3*ah`2{oF*Uz`-kFVeVe!l#9|NiwKSIEy`U|^c+>Eaj?akzKJ z?OiPj9B#%RbDsXTf4gqx&87~ua^Kg#1w}U8G&?Dj@jSn~s(Rz!iUS#EXE2mkgMor!Vex}AlQ>K4|7uwT z>pXQaSl3j1H0V;c+)pFvqXkyH8yF|__AYw;`I+41TC?E8iFOQk|2Py?O_|mdvOivi zaki4fckBDJCOj$r%E}w&bmR79(OG+(B^xygKlwfpjlDj9{_>64Jb#(xR%BGVGTtp_ zdKY{3dd0l8JJMvE%vkN2S99IrkF@!1e|kmJb0^LPYVY1`>5Z&exjdJrqidG#q)C;$ zUsPl=C%Rnnk;>5Ktd%`IX~%tqK9(sq6`H*&vfAf1rilESr15fj;pGE=O{TgS@xM;g z*m>G{v)43B4vAb{6`2*+Q-6y!PZGUyZrMKR9cz{CPlvJ3H#u-H|MSXL5kvhsCAk%$ zmv|2RsSc?)Vj+1;Xk`lfvu6xTjHcy0-*dE9=I1{-QSZ3VvjTjr_g!#Iu&y(W{iY;3 z`6g%CmSX8k3^uQwck{%#*nRj`vpjgRgx(p({VFX_G9F*HDf$w(N$KCN&GS?~WZHF} z&$4RDw091#WBQdQ^2eM{`HtMen-*u6b4YjWlHPeCQ)}Cb+9xrkzZbI4n%4Zk^7(^< zvv`lKYh~HG-%5Guqn`0)_|4N++mDuBn#qyXb!%z9NSUO;=KlV)6aMz1w_aa5*wpVJcBN*w(fgZy z>pP!JE$W=ta>mWD=^o?Rf_iC>YqrbE#gfZq4UV(79NAW0|GVM;^`7+)=BaO25PLM& jpOyQ;w?EY%IDhlASxycrKcV*=l-fOA{an^LB{Ts5C$wRl literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/QUESTION BOLD.png b/assets/preload/images/alphabet/QUESTION BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..42441faa155e5acd1393a0732ecee22205fa9e36 GIT binary patch literal 1443 zcmV;U1zh@xP)~zJlC>5~iNR$Hwu}wbQERoRy32f7{o_a? zJ{p&f+o)tLH0cEP^M@P0BhtJux-oTIqij1Tfqxj7r$HjueVG(D0*BlSNKEYz`1r?- zPJ^z>kx+pPmK$gDYs0J`GiJZo4dCzeqX`S)(U@%GLS`b9N-J~I^dBC05z8n2acRuf zFG%j1{_wGYg@P$Op%pA#DT#{8*jv#ZlZ3fVPdM4ZP4kwX5E_+vbAUhUj4A!^-~cxp z^F)HbesCuJ(1c!xVSvY2curNusPq^5$893A6rOPBVO|vZ$~qMbIMS}~-ZVWYb&{_r zgh=yaP*ppv^0)MtB?}A8yM2~unY+D+4E3c{ za7qO@OMBFo)CX@sz2Jk>=~W_60ClIOurd?%f#s+lS9l5PK_^Qn1m4&Q%Os3(0z+!7 zQVkkQ2T$|FV3v_D3P#j3&k&e;gUCo(N(T&jh^RNfOd$0pSfEG?%iciM{{V!_1Elo= z`e6vQrr?Mlh1WnogQg$DMB{ou>K;xAI{rot9O%A9-02Jq2PRY%z~uV^r&+Vm!7%7= zB_1Ec8~7jzP!TM^=_jZ=cJxfdc2x57Mw`IYJLK7OCErXdpUpq|`5PuX{hPT|xrZ>r^p*`;_1T%-ozbb=#rNR0@?@`lgLxstR&zPhs&e~x44 z6;?(9;E)WO2kBVy#>xX-muSEtOQ&-tX--tA!4FotQhBFX(2gU zzzV)8F0gM##IPGClKI39Innnl&djAdU?$~o`3xiJGyCSuqb<57@I!ECL^6*n8c%q~ zCeN#3WU**>pB}AQltx(`T^9hNqQpk%F2J^n2LT220W#Ua3@yE|f>|cg8ti7*o)6M? zm02XZl80I@zX@@JCpgILZYb(isO-Qp@LRP0i})1;ermSlMWOrN$f=prb>Rkc>a7Jc z(oH?`ftvWhochr37ANJsnRK*?ei(%9FhTlcxc#UyADW!LVXm~L(xPe~G zvfDM#dK+b-y|1~ew`}ioljtA7LXKk_zUTb&(xcf^+$_7d;aSM+G`lAE>smtkeFP6C)?O_Za52*#PO#YD_@4Z7cZ31oWouW9oaIBnHaW8-)1HY|SC3E83FY&E ziyA)Od8y|fAJICPYVBd9hgV;-)(7_5D#%OIdU2jHNAEd8`PqXZ0WX z@b)EkEvn#s+1$F<9P;~)UOH;G{C!5h*~)y?_|tLFMZ-QBP4Cb?ZqI;BQ497hTLie0 xdpD6n&4N4gF;4zG&$BwbGr_9#vX^Dp{RalR?oXt8bqoLi002ovPDHLkV1iMJsdoSX literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/QUESTION.png b/assets/preload/images/alphabet/QUESTION.png new file mode 100644 index 0000000000000000000000000000000000000000..900592fa45354323535055d41f941aa78fb183b4 GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0vp^en9NV!3-oll#+e{Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vAL&&wtM!zu&(8{C)rR{rS9YJ{=4UOnIIzjv*0; z-_E#Q_Sk^KHTABp_qKokv(^1xxg-dbl>Q2nyS?|q+kyjzY;G1YR>^A*`Y1j5Dq1=- z;Nn;Roc5(FpK35ai%p%BE9~&%H6>i^((N12NAJ z@lThnSi}F*>G4Lzcn#q-(X!XN`95FYy2P&kZ}g0}K{ox>9XCGjxYj+#T2v`WKU8$) z>%?#05~@QRZ9_J^*zo(=w!eY5&MLoC``qp?Qh8M<{(Z1uyVnNYkeShc;$BDJdLUo< z&|pKhj+*%u*#NK9O^#C+me?7*Jj0bY{otO)av|Qcsx$IZ4G+(j-ogApaB;L=fn?cL z(Kl9#f%QBB*OaF7?O4akf8$uF`3sxgBApa@&i7X*6m@;@nP++U=e^KlLYI0MZ(N?s z{>kgn-MhjMzkOUc&!vNJ#+i>-1va)X{?*0NU1HY0>fPPMgxy{*awkoATlLy&+k1cM zYR%`dZQBZjHfR2DZdt}QE63~Yr69S~m)hoE81{dhIJft}wHt}AFC=OgGsqnNy6sG| zeBsYzGq!#66`x8jyLC%p-OE|?g(8>Vn7S@P^q9TIlYhcxg^>r|+&y16>0C^$_x3kR zg>q5H=6EYjE15AZ`_x_2H}^IxO}^|JyK9ZlcbW5LlEoSG9)7m zZY{kP_w94@9@!ux^Pl%rt&Yk_&%Wyt!fsr=aK$`X*_&z4#ShL|vGKIQ;n!#MWWH~; z{(pi$>HVCjO+vd1?W0BKFFGR=_;Fi7$*aKj+)oaLzx|kkzQ-q?O$ewy-l}8EdByhHv@yGtDnm{r-UW|8ueZC literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/R BOLD.png b/assets/preload/images/alphabet/R BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..25006fafc47787811ae6cf38a0a14cbc98daf830 GIT binary patch literal 1335 zcmV-71<3k|P)*000DDNklhB{(@`mP@xx8fc;*r`Fjro^me_wL-tqM@enxQw z2<|8wO*Y-3&FmQeLaB461jJnlERY~I_=UjB-+`rQH*ac@K&w@P1f?P934G%cfJ#zt z9ZR5CAqcj+Ncej87BouuL=p@t1G79#FqylENPOWE+`W2w2mt=1N-Tj#0-buy(G^V; zfyVDwI^o>+5PSkYUgwp)2em!U9PY=T8H;h8Ed2I!0@pV#{)N1_nu-Z5hxHiLk9TB=g zX|ufTX)4AY@VU(tgNldd)!Ktd8EBc$)*VDd06!Y9n-&`&06~@W=$K&f4ui2Nc0~Ke z18qzajQ(L$kUjS89m#2n!TnUxHw2w`9xo5^;*92fnm{GkDf*5;maNix1EC3I&5DaJ z38X^#*94<)R1OfR1{Y_pMt85*9=`X94L<~@#*`))*Q|V-tXFwyA`kl*WGrX6h@hb$Hp-qxtK zOnlMrL_UknrD{jV);pk`?VaN|<>-r#0N`INIl(F&#~^{}Xz$+ED1jPzy13H< z<;(9zFbDAZp>%Xb5SXT~GIS3OM&TWeWY6K0fC)YotXs_>2>=7C8Hp}gm#R%VlWgIjO5NL)8__$WTga|7079}g|0FyZe#RU>5 zo#sYIX=yiv0pN>V&&>frTYoFaTdt|>J^k$avp2X8ipa3`!si*sPFT6osKA%ZOStbZ#< z0E{)NDuJ$_1PG$6bnyEUj@+sin?w#K+U(C3K%-*vG2*X;&yw(dzTlkW2Y4Bs^T-jf to}6lCPU8QI0slF{*=7Gjg7M-2{11^BnjMh)YAfL5GV=q3uZWffBt)Ue*60U@&5Vx{p-~>!~_E6{&~7MhFF~L zopM{KS%HT&oRul=)zAOy-#SOLs?W@n`@Ula16M@0XhTj~T5Epf+UlJ@KRynf6gQ>z z+VW*z7pr@&ea_9G>KU}^m6oJ|=cIFu;R%z&wQoM<6*IrE?f0Hbe-iAN3lyCdr z-N3&1rA%wcety5yCu?i1JS#IaWfLYZvFzuT447;(wJ^GzfzMds>)*e5dFy>J^g@qQ^N1|%X2ecR`Ob8*KdqTl(P`qBBgtU)ARwqBKsjhP8Ozx8(5sUf82ee zd_#HRz55&Oj|A`d$8=nI#@*(&NAu5@>IQQ*iPrCU&fO5cYhP>OuA9;93udJDKmK5D Ws;)07+|!&43RX{7KbLh*2~7Y(6_iE* literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/R PARENTHESIS BOLD.png b/assets/preload/images/alphabet/R PARENTHESIS BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..d00ab3a912ff924f57bef154a754202c2e803029 GIT binary patch literal 1141 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgPoCO|{#S9FlS3sCCF7+t~P%t^b zC&bmg0Hm0B@c;jRpkjW0{`c?S>+9>EKYxDz{{8dk&#$kqx3{;KmzR%^kH3HazQ4bJ zetv#`fB*XR>#wH$i392pC<*clW;j1zUVp#+`*{BT`uq9*>#sR%TFSt{Jjc_;F(l&f z+8M8BEi&L~n|Qfk%3=+TSAXN5u30j5%M)#z-KXu-Kkdon^Sx9dSL-S2ntuK-tLK;J zr<-h7uKHOM_-c}t^w*<&LEjcHofXV+^ik+4≺*v;3E46=-@GM_g#ztje0v`?oW( zBWI=1p?B94CEne-WE^sH->c(q7S;ayxX%9m1+6HKgzfzy=GHo~CUIi7ST9f8zh7+S zufEKZf5-XOM)W^hG%@@4Ip5PS-WNY#wsgss?dQ_&&U8o($iJ{ntVP9q;{A2M^p<>z zy|s8{OU`}2S^1Z$T)i)b?vygQUwm;_+_jyT;@UHcYkSJfGb|U}<&ApUs1dP+<-$6* zC&nJey1k5N_ZX@!iJiO9{^EUgu9pn!o0jo*-_dEe3*EBunHb0P$cr!L)itZe&v@p! zMg6bVwzJAlI=^H*jgmCK!|;}0UaacUFE%gX!@0MZ7A{JQc^!PtOg8A0Qm&)o6t7S3 zUA)u_{`$2o%&#yJZISM;>3rpLwmIP7w!39I_KSK0&I#{%_adBOwv_B!$0SXGAgxfB zrDdY|{bg>ROZvaGE%@-lIj;tjybsoh~S2+H0Dh2J)AgBn4I;+5Bh6GEAGn-+hy-s%;=9WdC0Tk;>(@4XY6D8 zZez=|pY2%7vP;X0&hKZgSo+HG-BIq}YF?c`h0%6TjRMuA}0uM>ow|HfyPnk9XvB zqv?@hD*M;0?iOVVQ_^#Y>YnOZ>Sw=Se)67s9x1&ue@wd&Y0+q&S=h4FCQVmzo2cul zIk|%8B2BOJpU~A#IecLHRO?$Q-&=G_jk1>M#!0QbR`yM>u8Sfdij~AI%cE| z6FoDLPkl#U6?R|JxD%;Zohj+sx&1e5p-jd9Uw@for1pI{94gEUDkMBz{an^LB{Ts5 Dpr;5M literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/R PARENTHESIS.png b/assets/preload/images/alphabet/R PARENTHESIS.png new file mode 100644 index 0000000000000000000000000000000000000000..4c696e04de54e1da1b13c0936220f09eb15fd05e GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^CO~Y?!3-ozjAoVtDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBiomp?y0p8tKle*XRb_5SPCw>vX1FgAF)IEHu} zKRWGX-Vp;H=e_Se|NM`?y=cZukFvOl(Y2}?m#65QoS_|cd-hJtb#?RS*?y}vd$@? F2>`0i+@Amd literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/R SQR BRACKET.png b/assets/preload/images/alphabet/R SQR BRACKET.png new file mode 100644 index 0000000000000000000000000000000000000000..27f65ebbf7ada56d086d88923005ee7d97fa27b4 GIT binary patch literal 500 zcmeAS@N?(olHy`uVBq!ia0vp^MnG)O!3-p))@R28Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBLPzn7n{Z(qOve*Aj={`31p)*obGVD$EMaSZV| z{&w2!q80_7Hf45U5&rl8x43T6Ui~wD;oP!(v*|ydB{#V6TvV=_X8GjBotaBJkG_BT zz}oJ!PNJ^zH}-;mn)`3n#Xp;L&QHu|59556jjP3!cSb5t%ZT~f!Q|l2IKhD7K*~g> zPpg&rJ6sqpeO;vMFQ%DtMVDvg7G{Q@zy20kpPD8=)taOKleO|nU;n<~+ob_J!> zudh#VwrHK?7YY6nxAc(f{yokwZ;84sUlaJ_I#=zKu%p|wANo((7gqQ*J9PPl*`oYY zSv8raURZae%rzi(!==47BKcg~wfQvJv|2>|Y4mdaU7vK0@sda1>PN?t@6|Bn#Z7U{ ze1FN6_41-~VbR)A3|}I3CrUCJ^m~3>y;rM=gF$xTQ68z>%i?w`6Ex*--)31p*T|1c zBI&sM+v5|~-TW1Ea>|_~_M4Jr2{!_LEuQ_G_m}D1!4#J!mW&yoIP!G$b6Mw<&;$Vd CP`T~^ literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/R.png b/assets/preload/images/alphabet/R.png new file mode 100644 index 0000000000000000000000000000000000000000..1cec838a51b4fb8c57147e30f295bc8650d5b09c GIT binary patch literal 796 zcmeAS@N?(olHy`uVBq!ia0vp^0YGfd!3-qV*xA+sDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA{|Kfhl;zTW=5{CxlX{`C)jS=?h_U@G=>aSVw# zymZFxNlO)YTz7iz=xG1{|JKap+g>NwR=%={I_=A$*s1k3g6rU9>$kyXrrQL#=7u>* zIaT*fovA1BWoF{FWUuhdLh+ba)Bmp1Q8f?W_>^x6hhg@v2}i7qw(Z!cth1>jKiPKK zj4u+|qL+QvUz=@G)pqpxj?7izZ1+idQ=9rvenirL8cXL_&FJgDrbL$n^nR__UA~_6_bQ9SrOfYlRAtIPKKAI> z#nh00yGuh4-gW6yis)l;=iV*L>1LvP(B#VOsLvPlxypo3t6V$2Xu+K4hk}BP9j&fy zYBZYHpmJkMiD%wf*87iDtkx>1zkT4gGmqy@y5F^{mX^;Z$!bT1CCpr8{Nh!l;U%lq z)6-?LIK|j4RphfS1#dfeu%xNxdg8SuHuriS+}fLA%s6uq`yIBTxmR)~Xs+;OeAjTd z>428hjt(`A?q8BZUkWl@GEJxE>PPs#`+l&MAmL7Qb^ywd--HF07 z8#(sx3QXy2&b@K!q3!{rFLyi+AHJ}ao&VW_xtof2YCC;ze`*}5`hL!5+4AKQE5*4V z*DXDuzA1RU*uIB9XN14|qxs<8&d>3lQ3tPxoy+~htk*v2z`{@2&p>I})78&qol`;+ E04={?fWwHJ$r=^t!gWmHa+Q=kId;(&ipURnBEQ);`?f zP%SADe&vSV+i!EDqxz~f(~cMU=q}%2*mUgmVckg~p`nXABADBLF|Ix$zC!8ksn?t* z58CwzP{{Fm%>DZ=XW3T%n|^*)$r;o6J5MdkN=vi(cgoeJw7%%?q!R&- zOKydHZwj4l^X`Fs{PzDjGuFS#`}9q*qqy9v<<8T zmt6c}`d*bkk*!_&ALn_nf{r-Z=lWV%Qnm^X|c2Y5fm>^4o6>W6ddZ Q`3H(IPgg&ebxsLQ02J2AvH$=8 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/S BOLD.png b/assets/preload/images/alphabet/S BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..4d85981eae47716e1cbf9eee361f2c668270d71f GIT binary patch literal 1310 zcmV+(1>yRMP)^}zkh#!@9*yq4-enp-(O!}A0Ho2Pfsr|FQ1>E z&(F_qZ*Q-!uaA$9Z3pJy0000GbW%=J0AFvf?++ipe?Q-!k5A7paK88c000C=az#Y5QS}sHHnH?SAGAdT#cX%)yzNl@a0mct>*zlX__WUf-#P&!!nHXAVxtF zdwRP8Zb=fP`(L%dyLeS*^Hm@YumuR!@wVZIz2*7m4j_<#q;gpTfi(LOC@ez<9pP6$ z&PiAUt?QnAZEKqLb6Bks@8~9`@fh74)_qJs%z0kcTZ^t;s#hZbBtj;j8-5X~ z0PvIUI}0F6q-=cqc__hv;m-<)66bZDObV(*_6R72qdVu+e4a{_C(u0x*v1axmiP$LIHbH=0`eE>d})S_g1ToUe{v3cca!-4X#@_U3%7 z=f?If1wjIXWjAhrZ~`;m)yge#e)B6n7>N=}a9}h7NRr^oKELh&bNQl7S~dh;Dv*0N zi6~5g-%c?O5tN`1fU)5Ka%7U2*c@JkzlTh1Ed9RiS^~0skEf|2{6Yz$?rB~k6{t%X_ol3RC_&g^dk@|61Nj<^=~OkA+Wjtj3gID1;5!5GS<6M zeVW67KNW!EUvDXH>%4#0^tGzNVkFfBq;6e=w;R2oym@LX#37CE1zXcV1gH_gOAimnBB})62n-m z8oe@x4LB-fN`8lH?}(Ii8j*?;=up{-BkTg&L2{m68JU>66(1PplQL(hJ%}ShvK<>4 z77u4>bKkjXRzzHP0jmYWcCkaGYTD_CTHy2)oxD@r(Q^xmNLu-#EllF0M*7-a0F7cc z_4X|0=U^EG-gJ${Apka0b)`wCiLmhM39t#7Mq!sgk+|>&5~a9PEx3aw!(#Y(Ai=z_ z2)w)}JN1J^@hkAoekA-%yn}AwDwCfQ7eI8t_brH57?t<4nx9CBb-n`l_bZEz{=#m# z=;mlE5ZU+F#8-{OL(tUW-j6A zOx$HGVT8R`LWu+<4vAW*F-PWdY!buP%0;DbJBn!mnF3{XiC%*4xrNkv-~c0zw#PTy zIs^UMG;(5b-49lD*O!fiteOJ(?}}kkhHA8#-&t3c4uQyfE-~DH(^9ceGQjrR{~uvH U|B-#PQvd(}07*qoM6N<$f>5wfsQ>@~ literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/S LOWERCASE.png b/assets/preload/images/alphabet/S LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..970874a6366fead8dc8c3d8caafb7b5e845a2399 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^W^BnjMh)YAfL5GV=q3udr?uOGkvem(#B_4)Gs^Zi#vy^m&KV2tr}aSX9I zT{|^e?63ld%heS>eD3_un!U^|V9B3*%q-~&UWqK#R?q#SMfzWN2R+jWxm+y`uD38@+-^`D_DldO-<6-VyZa$OquFFipSf0#pHM6%kr^RI(_9~mcj9I?x zN};CzzNoDq!(7zgo-8@+(k8Ud&%h@*+=V&v^3l#B?HYbXpWic`wGdR+l@%8k`!GB7@712qpW3BnyPuDrxTJBl2j8A}-tG6U zt|?uhea+RFa}D3-fZbQ?R2c+apSqU)bM$iY{nuChdr^zehoa4M<>R?SH$Kpvdf{B2 zzqVXQ(BEy>H|N#G7d&ow-q;?wRrum{#tGlTAG$5cU@802)TVA`fBCT8lS6Lu;d1U_ Th60BjL6PR^>gTe~DWM4fIe*5* literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/S.png b/assets/preload/images/alphabet/S.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc2218f878a9312eb6ae9a54e5c01b3130b88da GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^K0s{F!3-oPu8ENbQk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy#S<`ByihNPYb9)pd`pIm_h!2{`>j-_51Dp_507SkI&k?;~4`3lc%SPV@Sl| ztJ7~!dZWPMDxAL}@bUlpw>wl+fzhvdXcNdrsI{ z5A9I9L%;XgZ7k1P*m~}ztM|GUeVKxyFYnvVQFLJl_oVQOV%wM%{afNGtr`fdN z5@%VTPg$N1)?(F=zC&e`_&Gz%X3lE7ZdV@orTXQeQtmf} zx3t=%erNks)`d)Z=zQL~tyZM7`@z-Qt9lg9+}CF`x-Jr4wfl|Zlx02L)9O8VG?Z-j ztNjboHt%c_7TCGeJn|&x1oO4`X1zFfsOiT+g;Qn-xuFgq~n;0*h zaVxd1iZErrQMO}wbEm)hm$T8PE1S>e@SaWkdn5b8ZIcIfj`_ZCrk`IhNm}l2K;gwp z-!5FU6*Xk3SzWtYeYvRV!h=S(E&dE&70pcyg4c;>eCkinUAI0lyqKx5`GeQWSf`n{ zdHe)J?;WZ0&R(0gPxSGhSzYgy1z)M9Wx_fhdgZKL<*G!tfztEh){Q61E_4!xs zm%o4h`hjg_<`&LFzmKglF;8??E15dY`Jmvt0`K|U_Z5Bmz3das>hqt)KDh)+p`NaO JF6*2Ung9!nMcDuV literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/SEMICOLON.png b/assets/preload/images/alphabet/SEMICOLON.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1dadbac4f7cd2981b151e95747a4548cad3acb GIT binary patch literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^azL!Z!3-o_V}6(cDb50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA*sujjuXzyH0yeE$0L{{7SL{CvW|z{un2;uvCa z`t6kLro##xEn7c|UODo6ewkx$!_9Y`W&dhrIeGaE*+jj1R4t4}m0neRShIHZJlR;8 z7woexEfW%`lUuV_?pBb?7O9^mT<6^zzf?4y&9XVu{eRQp+kU%l-us>Qr6Y22VN9K1 zRjb9;BXc>I&p$NhRq17YQMJC6cE)cvUE{Jc{r9?@@#w}io;!O^?n`8ijo_1!WI3u9G&XUZ%j%1 z{ruQ#@wKZWrYyHxw&rfA-F~?ZJCpP3YIC~Eev7FF?AZNW++2NYprifHPp+G**UNmp om940%+SCzgu}OGiairdJ{^Q$J-~3N^Bp&?#{~xHhzP^6{{{8m$_Wb<(@87?lKYzZwyu7}?etdlV{rmU*{r%6M zKfiwc`u_g@{QUgMB`qg_dIU;>{DK+!*T?U_|K7fyU;n(kfByUeUdHPT49ta|E{-7) zhu22j+}5nXb7W~()NQRD`G5bf-?O$sXsy7xot3(mPa1g&IGK4Dy=qM?%oOxJad48w zvO0-0`}65_e0=wtpRe6;TlcQw{rc@mW&7VX_9sT@PBXOM*l@d+wW77V*7meAyTcFF z!p9na`lBZbEB%-d^Ea&U-08c=%Df{UJPRvRczNvn{f+B=*Dv<%=3+e-S8KqX{Nckd z`DArJ522T))skyPniRdB#>Sg9a~k9%MS8|btX`Vjl(O<|hoAaGKb1va)mWN#Pd>5e zgjUiXp(IaP53!}cnPxtW68op;5yj%Z`D9$kTwV`8QO|?-KQ}zyp*s6T^u7(Z&I!(& zwejg5{nO8`X!uCSJ+J${;73J9L!kVs>Ad#mWJuI0j=8lFp+T#cISD%X_478fXd zTsCa)#a$mx87a6u3{Cmu^(`%w*`uRi^+9&0JcS82<4T608;sy?HdHMoN%zPL!xb&$1ld1#dJrnxB+@VXoAX z!~4s{u-#9|AkfW4(6;u%)sA&amS@D&$`pR4?fx5ew<-Cxo4{O)mkWQVP4amk8?vov zL%E=F9A^c?1Q9`NcISI{R16EU-7>uO<_G=XVemZMPjRdGy%{X-zgU};KWV3XaXt%c zSXsUHx%u%U`z)rYT-&cK;dX!}W}d_{m7Vh*uuYEl2vS;RvnHwkq*zC68RyXnUw(Z!;c(_iJ8dZ49F;oue72_`cxD4uMY)a7?cS>=Cl|4e4j?D(thlZ2MK_og^J4UaX? zUVC5DaW(f=Z@%UgMI7_8zl&&l?#Ta? z@zdmteq^Pou6uX8_r;HOnf!J2*S8d}2#`@|XFti{SX7`>=9?QW)UW^m literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/SEVEN.png b/assets/preload/images/alphabet/SEVEN.png new file mode 100644 index 0000000000000000000000000000000000000000..84cae58740c6197595a7b6cd31cbc83bbdef325c GIT binary patch literal 579 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 RF6e`jou{jx%Q~loCIH;DCTIWv literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/T BOLD.png b/assets/preload/images/alphabet/T BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..0114b0debc5241a0e1f2e8b3c80134e55bf7e782 GIT binary patch literal 792 zcmeAS@N?(olHy`uVBq!ia0vp^Q9$g#!3-qVT2D9&q&N#aB8wRqOs{}2V_fP}4xnIi zfKQ04dw~y-Nj&)f|36T1eSN*Xz5V|E`{U!|`}_Ol<>mSL`ThO<-@kvaudjdq{{8jq z*PlOsK0iNy{`~oM3QX-lJpv^`e!&d<_v7`~zu#YPKi@xJ{(S#*!)C1F@Q>N*ZJbe-nFlndBd~T?e5lZn{_y0?YadeT6TGM-~OqZwjKDouE1nHRyys z%;E{T=W~C$f_G+>)P}0EA4|4Pv9+9ZE^M9-zlrq2gKXBB*-x$4)<5yP5hfN>vL@`+ zqBe`fizd%F=SUqt>!_}AYO`vLWx~}dLP|>2Qa2ZE%qjiIF`eztmP0Q$^{%^;@@7Vn zVCqihb-WhycfGg#wCbW;SQg8I|IA-aUCt)HDn4P6BF?xv^y|xpELU^IEV(6V_AY1Z zuI_(TA8_~G@^y``oI8GrEV9#jBJ38fm{q%O=lkXR8eU}Bo0@)`_j`rD_3GUUrq^%p z`F>!9!3+LMPvrY0|6bV{{#S5OnnUTo>HEyz zhrW)LNp@cEZ~c!m@oWhj`--y_SG$8>l&`ofD!cRHrJ|ItVRJ0oi&jt6i<6N#k>=iS z{CRD*VD6!l+C4Uwe(QTUUH_?s>=Qb+v{dUKgO2j~gojF3YeDJQ)78&qol`;+0He-b AbpQYW literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/T LOWERCASE.png b/assets/preload/images/alphabet/T LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..7f190de4daea90b20c33d8673d9d38a1ebaf018e GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^7C>yk!3-pexjh|$6lZ})WHAGS=@k%Wj7xpW0TeV2 z@Ck8sFYo~}NdmVW^|XK*1WJPZf*H>D$J@Wxuiww_zka@a{{2?(v%(AvjLM!ajv*e$ zpH91-ci4c#;pEX{WqHs4?=R!`l`3W3=9XoexkpZxr88H+aj*%xUeK z3|CXQ9iDfvHl%HmWN`Ok_~Ljer~AS6&5Q;&?mtr#QrWs%vb^xiQK7D1S*Gn4>^YrB zgf=|;Uwg#0gt3r-B1 z$LX0rEAj2|y?$m%Vwrtx8M=DWN7I+sB{&H<27S}cI<~~oFSE{c=dQosLsiyKKDxW^ zwafl*Hih9&!K_$m8RLN@`WEY6#Dx3(JyX8 z*XGjC-<0#uxGs)abWqDaU-sm^>um{~r#N4%+HPkSI(_Z08K1aQHaaA+#^${Tg}tY% KpUXO@geCx=a;Y8w literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/T.png b/assets/preload/images/alphabet/T.png new file mode 100644 index 0000000000000000000000000000000000000000..1517ed41e42298c8ea783f210f8305845db5b4be GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^AwX=z!3-q7O7Ls}Qk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3ubtKUOs<4|9<=W`|-+^Of+7F@XYZaNnERS1-)2L`{cF{FTAl$9tfa&>4ZWvdSa!Z=Tl$yt z*_o4qWA=6ZxGS7n+i+NQ#&w2-*~XI<7509r>F4g4>EokgnUogzJR)d=4%lKmuIm%c^Mw~>dia&t<2E)^4^PY%y&nH@H51PhMw0I zzjEe`SF2{+vyFa=%2^W^H$`5$z^D7hh(m_a9%&r<8j2Ja2xME2JN5WbNP2Y6SAyd9`ZKsl{@`g zE@;c-U2>QHurIxOx7@_)`-L_}@;~bnn#@ooc7oXZ@Wy#nz|$YO7V|@%;g&_gs3EE~^w(zN%#`%Z_v2|MIRP PD84*h{an^LB{Ts5WopZe literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/THREE BOLD.png b/assets/preload/images/alphabet/THREE BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..2e1b5b64d0e8fb02c3131cf4d227291008177313 GIT binary patch literal 1272 zcmVv&yR0USb(2J000CZNklY??TsXjWOeUm$Tv5$jAgTAqL;ld|J{pk&cdi&bre#x| zrCjeoQbF`aCFg@udT0`2=6i_j6cQB5O;4XT-X};813v#;DgB&Nw?gDjD7~TY481Vt zbRMN=bFLWK5K8aXlmB`jbbz6j(#=xIU;5yH(&)~%RvCsE3W~b4rh*kx2b89mXC)DJ zR`sVgmqvQE)#Y)HOGdEziB}8lR(j{7Idc%~4=TNfE~|FD{*jBogTq#}p)_`L%a>zoZ>SW2M6r63str zQgviZIbohg3aC9*gilXupIHcG7L)b|44tS{2@ZI5#N4xwG*v6o2;v&4JyCB-Q13!- zl*}w?y;UjLfyAtcU{Ru7H47bYHJhKXP3_u8RlSh;M~m-{vuZ^JR%v5@qpK>(wX-wM zs$DCgS$$_56eHI3XK4{Y?}3`@$%v|o(U%m4=gI1Yh8cn6p1V(pCg0?@AL97uZ%RX? z)bFXPLMnVo;u))>)P?SlQ|cSaN?8m^1zUSDN)vQ-3>aep3hFY2;<;;WZk?2#ThWHH z{{*)PTSio;5g4VmC=Qf;lKRbSwwyJx;@`~=`qJYwe zS@im8fLRy#%|?z2S-6i9^Ktg71O{`fFb@Nuqo!k!0k6cMa0RI7sYx*tR>eO}s0000m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vBW!-?y)qf4`r9{rvp%{r*p~R(LTmFll(YIEHu} z?+p)M)MCJ4ayG>GUHz@)kkgKEJdj~%O)7#vT>cVdG8Lzv=`^i zR8KN{#s$`;2PRlg+RV25=LD6zpPRQdsAQUcx!mmj?&V|8cd?ohA4R^+e9)sPJZPdH{WZ=^Al?yeRwP~$A9V6=og=&1AlvjoOxn% ztbdu9|N9rKITM#z#irUW7h5y=+JYXfB-aTS(&DC6WHv2yOLDe3WBy^5i=X1mo{k71 z^{6+qGhG5UN?r7w;5lKjfpGOU^A#Jag}GNhd#}dFcz?-~#bT~UwA4df?5*v1H*Jx; z>Y@8)^4iJIKU*?hWwpPX&j1yL(Zk=F9!vkHyZV?ePzp9i8OA&wpQ}!o|(a z@8+2@CS8bi^zLI=DYWQyr?{3U!Fl66*2JOn3GH>7O9=u)`{gP4E z@4nJm|g*4#<+9?9-@pI<{rmp@{`2S0KY#vwe}BKc zynKFsetdlV`t|GG7O`&!>Jcaj@(X4-KmY!F`S|_z_4@q%{_FFV@7#F7z`!)k)5S5w z|jusOa#>TSC+0)AdNAfNR9S)4%bz0@oBxm!3mco?Er-?dx&m|rPfkmc%fL+dtU z!3GKLym)KTU9ZC1dP8lGn{1wXYPXZZ<1o<+&yKcz+WI|&_sEy9?@3eBe~PU#Z9Z)) z*phn5AZ(fPW~HTT^m$evc)Qi=QPcNL&(86xu~cpExqG0~sL)DOY_`Rkxq7z}m=o)6 z+%S->zp|nB-Oggm=aSs*rJuuEk6(YbLt}1s?1W{v-}VToKeCzssBx?M#jAI`KZ`JT zgsCpPyQ}YpUzYkx|R%>~!DdU;nGTV3B zWbH0yR@kxcnBS%&&x+FT8@sj7;!6Ezp*Gb>?F{p28L`E)4RbfkHpgBUY}|KXU2^BnjMh)YAfL5GV=q3uef_ufM^*nQIS*LG%M_5ad@z|~12 z>cQ8`cegctQ_zZm8=UZ#7L^-xxpW+cEmJ-6CY#24o`$o3I;q?y}>xdh( zxkcJ9v|KaCv+we%iJ#7Mw%q$7vL}((ah3U2;f3?Me(lPbJ#Qt83Rjgwa722hn2#Py z{{D^Alc$|naqPCnk1KC$`?=ozU-3_i@uBR_nU|8&%cXHUwOO`flEEsam?H=nf0 z7vYn~-@V<$w$RGsuSj@ea_*GakZYiuvMa{O-1$=x3s zPf6}=pM7hsTsQaJ_6M)aS*J$i-dC)Ae&}XFuDs6itB1Q5+)w$(U?t{s*!oexK2T(N My85}Sb4q9e04S@$i~s-t literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/TWO BOLD.png b/assets/preload/images/alphabet/TWO BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..fb20be8753bdd0c7bbf3972ada8658e753cd5a81 GIT binary patch literal 1315 zcmV+;1>E|HP)^L zpxnXqs${0M#Wr*K53IOcCXzo}YEK9J(#RhN3*L@0rwJ&yOtOzQT=5sso5ah$1uXr) znktZy3KzT`EcdGe_RW9E9}{@zhPMlGUwX56;40n}!+RgRBku3saN)zZvVKZ!KNGIse{xEc2^qb9sxG%3tP0#fu%arTG>tS~G z%L+Rgu+|`4W-_Uq^nYiyJG#r$tmJ*a zJ1>1A;3nGeqzrKGXCPDHnsmAw>_0vUeWvMO0KNs4;!5a&jO_9{b(?YNjMNq0dg(u6 z{N(C3%l0COiX^D@Fw+WZa`8t%zxR@aG63%&-twK9w#x=oF3=F7agzKC6Q04p_Rs;c?raE8&PCQM!Is$tO7faPR% z!N~>`>osf|9mh&z&9snkG=r<5r0{KR%frQvod;_eUI?B*S^(T=?C@~GvGb+Tz}_|e zk!{bwr_Q-Mpk)9E{+o=kllGwHHY-Vzb9dSGLyoiom|_wAK%Us+24QtfHUkj;$zZ zFFZsCXCFw(2VXt91SbI(X%5Rx>DtuNUTVZ3f*^EPMa{*TCUkYW4G<>BQ& Z>>u3)E7@1pD8&E(002ovPDHLkV1g((bp`+c literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/TWO.png b/assets/preload/images/alphabet/TWO.png new file mode 100644 index 0000000000000000000000000000000000000000..77385b6ffeb68554da4801f0ef5a1effbcdb4d03 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^UO;TZ!3-p&)Z#t?Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA{2kLTY%-@g96e!lxih)zD z6}~C#Ua7go&M7=6ib35_z$1=sxkX%5_5>}@uA zUpe>W$AYhael;(5Y!%MUbjlL1scdDTu}*ZYeK3wu_)t;%EDeCF}Zw>}E5 zsNd)=DVme^OTWFThJW_mZ;PbduiX`#aX;=O`-(NQr7mwUDg-4nPgg&ebxsLQ0J47@ A{Qv*} literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/U BOLD.png b/assets/preload/images/alphabet/U BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..efbc63a240003a43a9d2aef20bb79a85b0329187 GIT binary patch literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^Q9x|X!3-qN+{--=q&N#aB8wRqOs{}2V_fP}4xnIi zfKQ04dw~y-Nj&)f|36T1eSN*Xz5V|E`}z6##twGzQ4bJ{`~oxGo#i4^$3&%`2{oZ-}jGyuWw(!|NQ*?_455~R}~&IFfey`x;TbJ z99}x(^|e(B0uFl@I7M|$-=g#O@BB|w8qO4K-ecaO2FD>KV{>wMqe&zP2nA_WaA1PRH z??L)?#vdMc&6RfLUy=B>!oGOJ-N&zj%WoH~zH%h&coc7<*vXlh`va#7mECM`sI0lULE1D4;5Gww{Vv1%8Mp!LJP0yT3wmzy|+zR zasLYKHDdfFxtAy3nO_$Wyk_6q=(Uda|CTJ9w(FnY-(Q}0nXI;FD%~sF%Ri6DbaPn8 z0`3j*r=!G~%2o*OS#5k?&PiddnEduE-LS0G)xrB`Rb3UDSNmb#y0=Xq-ll}*PdDE$ z^-l58k&g$iHs^0$#@OB}e1+wTorU?8xpo^01Fi>NymN0o;~lB;#{tu;-u6};^9%TU zLw-ZZ0dJ4myXmoa9wq2_Sr{gKomwV0tt#~E-Cl^n`-iYhu0>uMNH=Tt6Gp9Vb3D+rj4WS99zsA?&a4jw2NvoBIKidN;l{Df4yL)CiC7T zz&!bXpCHekveK-BXD@Ag%~StcS-zF~xU6~28s5YFe-o!2@;xnk*zWmH!#^Rx>x5=9 zePFWl+^qbA@7q(0&9B=ZuTpoblafF5X^P9kyoVivb=QP`G<`VyX^-M7^D_@Ur^r7R z-*LQB`)p{r)1RorPfw`KVYw`J+F91`O7w*L&S|CHtD-kpJQS_%eBC)m=H1U_zvR?x z*e)gPy1vMY!F=<*ze~P#)U=0AUTpew{mD01U-;ZB{>d=&{QBiL18zP@xxXOZYU;nN zFDW5UcD**fd&~dMF3vYcOW-2b4RHN|Ri=8CBvUNfqL+|RP%lEH&e{l-~1LIUr7sn8f zL~Z#%5O;d1eTt?%>y`@h*-;nuKys;Pb3k=?aZV@dZnj`DSX^NkBKcNQIIxF=o5 z$WWxX$h@K2{~hB4Jr@^2hHXy-85qJlj2KvYYmd7eVPM$1uT8G=1T%y79F~74?wfsg zVQ5&kL43#UEl)LUmI*et{tnRHum0Ts+b`F1wJWAQKiNFB_T*uSU#@;v4|w}6i}_&V zvo66|&SzfctUKpJrc2w*{WQIEuIBmWHZyPdR~oOq{!!PjwsGT+tSav<(<~na6_tO8 zKBfHaQo6*{_@(tMWy0s@aWOrfS+i^Pr1MKFgpK!xt1YUt<@ovL?&}i154T*y{d%^B z#rG{`UO!cCyOq#lv$|ZRsj|x}4H*k==1aKFD71VuL0&lT*`a!iiF5w-EcD-PQ2!;5e`|_*qLrTH z9oViEU01@@&$91qyKj6WzwzhAyN&ezZJ82Oweq*t<>^0mbUx(Pt1Ru5JRka8IPYb& cSGeLY=5vDHJZ~1K&IQG`r>mdKI;Vst024js{{R30 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/U.png b/assets/preload/images/alphabet/U.png new file mode 100644 index 0000000000000000000000000000000000000000..914b013dc2bec02104243788d04424df21923030 GIT binary patch literal 674 zcmeAS@N?(olHy`uVBq!ia0vp^K0s{9!3-qbzwT!PQk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy#S<`ByihNPYb9)pd`pIm|^|>`S0WP>+Sc;^ZV!bpFf~_`3VC9<4;c)#}JR> zTc_VnYF6NBn;OgzSowdsY%qJL+LX1ic~URu_ZJu(GATWq>$v>o)U}EZd;YK-V6T|G zUw4imLtpyY_AKi^Yj<9mHhJo1UH*lCq^3=qaB6;DiqP(mNZ-k>miK((R|QOd60~~5 zrOQh{@tjeJcpcmJbAHFn$i;tJQm;2(?Qji~WU1~e&fOrDXdSCGqw+*Udr`Xotk}n3HNNbgnhaP(i8vH-Y{bMyeZ4Merb6k<6l;11MT<5 zJgfIbS{WS3-^}7%C!qD>VtVUKJ)P4AmlGDQeJ!83^Q0X|@cy<`NwI&NX60#RJZ;Z% z-mjb>@1C&Je6vQ9Y?I~23)4hHB4^zWW8!IADwiXgD0b2zgt5(ZlUVAkA3>~22CDUQ zJf>YTQ{HfArS7Iv4>%o+qAnz*b^m_b@Zd$B!J&H$Ou>hWvSxWp^VWunc&0rIXHcD% z$*J<5!7FEZf5z=yW^0T^yBDp}TlA&>;o_C1Uk!Sk)_=a(6uqe}$vD$$`J62+O1GL0 z`d(LmBKFI`b_tVOmdKI;Vst0Atn`nE(I) literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/UNDERSCORE.png b/assets/preload/images/alphabet/UNDERSCORE.png new file mode 100644 index 0000000000000000000000000000000000000000..02bc0ebef01034a337f2dd4714b3c360b40f4475 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^Ss*qCGmtFf<8}v9oCO|{#S9FlS3sCCF7+t~P|!HQ zC&bmgzz4`A3EXzn(*kM`C<*clX5jDlf4_eI{(5`)^ZEMstVT=vG=4UPLp)* z=5a6e$a`${^pnZvFTPvl{KNwirR!5RZ{Jp>`dMB>UN)?#ViL2!oeb81c5|nUJeP#> z#S@*sEEe40t08U7VVpJ7@%5RtMz?sHjva|uBH0qKX9ZKic~?dTkxQQyF7_I|uDey< y_2m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vA9YU(bKuzJC9EeSi7<{`*bm_n0v-FwXUKaSZV| zzIIylre*~m2f<2vli%@g*M@61PC7Dk+WuRI9XZqjS4n3^I!B0DckwB{IAf%F$ne`K zgVQGuoHBTp#Bhf>ZL#aGvkj&qoA2>Va1W4jo@JEeahYq;N|!T7RC0RETIbE2WyWxE zOV63SA7_Ob{REF(J*CdPp#8*cPUBf=XEH7YFEc+o^Iixi+ibA~ZoeaBPPVYiHJp)s zv_a~5W5$bSxpl&?cj_^|-f1@7QKFBNEv?KmCH4HrTihLoRcC7cRlnc2K00rkkL=bQc1 z%FK2O-_b7|ccSkrCT^>rU-r-?{EzbOjINIvp#j>J|NHW5jaPN1L~DQD^8TAXSM9fp lJKwkot$Z{2gvIyDOZAQNQ3}mM3T>cR_jL7hS?83{1OOul>~R19 literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/V BOLD.png b/assets/preload/images/alphabet/V BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..32559cf6c989b8f31b7fb24f0463bd2d9fa4a1b0 GIT binary patch literal 1426 zcmV;D1#S9?P)tYlT^Sm zlI3!pc;MyE)Y5L7OCEl-2P;XI%erf@AZE;t1DlvBdKhCqX`B%VI!r z=O^+`;y$?EUXXELu=(TherQ1u-VC;s<(n<6jaNWlGPxsPirog7?jsoY=1uehXxyuT zo?hiYXxafw<=3Y zfjc@>FhQl)3b+p)wul)-Aq64e8?w(74CUAt6o?h}!HJS!NmiO$WLP_Fw$z9Q8gQLVYg(PLOM&ikqOw~;BlCY=>!D=qpsY-y_Q4c zM53UH3dxI0;SxaOctjbV#X{tkO_%;18rM@((+x>|%lIUQ#tr18jHA8#_6v zh2e{xl8~^_fDKqqzU3eQ@qB%{=fj*zZ8;_@**J_3TVJJ;T1~h_<2(cV>>4MMx;Ahv z@zQ4$P7_w|8^_zF!PBk+*qjYme_)(=kEluG(%=C0)?m|taTfEcLzWTl0^6A@P$T9S+p zU{}Wz_gI9zvJIu=;z!nB(N|r+M{u5Op4=l2qflE$-~*nFelIx67Un7*k361s|40K5 zj5GJAp#y6F1P&b8C*GOorT=01Ul=&rKKJD+_($Ymx?E4f_$Q&ecXq|@1;ud7dD!|n g>=vAd1>p|t543Lk#lHPaK>z>%07*qoM6N<$g7m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vAv&KR;jIp8x&+`1Sqy{`ww?LT?xt7>hk!978Nl zw@$sgs6~OJ<>T@zXJ&n`zg0X@lH=XWtn7$iY#tqNwC66Jvg7h6D=*EDaj!)g8dBRh z7*2=_UVK`z==D$gqD5EkEc>$eb)yC=LmuA;TZXsi82qFe7%p-$Xn0E1ll24 zQ&TnU_wU&t=+?CMwc`zo_@6(LJ};AHDm+lsHYMJ6V~WnAK9=9l+paD&WG``cHSGnx6ry;}@Y3;n8QeA#C8^rlrAkl tQM^^BnjMh)YAfL5GV=q3uc(FZ-2jDo`3&)|Ni*=_2)}UHnRRB8T&B52$i) z|9g1DrT5SJ!V(_*`CG;LJWj%FRXLL*+m?b({TKi9Te;$Re*6y-(+HEew(FO~u7U^M z*1AVKpBnQ!#5YzS{mHmJe9mK&CO?DY^A+Vo=Por?_xSQJ_KMKs2Q}4a-Mf=pny0(kEp9A+$J*0s%7 z7fkW2Ijq7_soJ&A_`9lLPSNJCjdL#@s-4~(`|*zO3a{NuH^0?=z`1nm9o?f07Z3TK zK6pvvTUPSN-VJN!yLH$UTwfJ2_u-Cov&FaNV+t=Y>;GB$a6#h2{AnvsbIds^t2VcV z^^lnKWZtbMx%rQ#Z||#fF#DPzbHL(CcZ>Csm4~?Kll}l86r?^}zt)1>N!=P8YW@o*GcurG|U7y;!8OkTlU4F_u;~B@k(vuIFx1W1a s;gZg9-Mrv)l)Q|6@OGnS<>xMv^;4Bo!!=q$4uF!Rr>mdKI;Vst06_~YD*ylh literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/W BOLD.png b/assets/preload/images/alphabet/W BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..fd08434b4ea6f6bf5394117119a2dc879b9750d1 GIT binary patch literal 1688 zcmV;J250$+P)N-{0S#pPxTJKfk}fPft&ekB@(Ue=jdD z&(F_aUth1UuWxT}H^(yT0000GbW%=J0M8#!?|+{^55He8kKeCvgxq@4000HQNkl8bRo6SG0s*3{-4F{i+lauIE*OtKYzw~4yb-%kO1r;!G*cFq-lJp;1L0?^1zK*6R0p&?;pYlh_og9a?l z-3;gcOUXw-7%(l)0?_-mdvH@HM{uouw?mZE4y;;lS&Wp#M-SR|azl^DB_oczx|1pl zO&L@$OMXZxdmcged%8*#$;zm|ZVc2do1UFSk|p#&|Nd4#sBD-XZ^(E-D<~622C4?> zpoW?Vq1ub}h*ZrctH%tLZ`5Oo?mB5iBR>Y5>s`Dm4XqG*M)i;{zVZc`LFXP?R@R_L zfk8nW|JE3-%^FHb{n0DRkJLlZhpb)@z4^pJN7$$HkP$)wAL{M*XBsku4sNp1+6|zu zi4g^HHtlL4Y~v208)g>D6`k|M{Br`(hs&&2Odm(%p5N$zz-dw|k>#_|&^VbFS=Z`W zy-OKq!+`z$ZZy;@+PscX1-mM2L@J3?C5EW#NjtbYiysiVlOt-0ObN2Ft_D(-4xiEa z->4KlR2d@^y%D8#5|vhXAMno+s;fQ)Mi_g}SndK;P97_xSnN}RqA&|GXe=zJorQk!Qz;%yPlL5Kc23$($DS-W z^vS2{B;fu(dRN2}qu$u~Vu{P_fUsf{I$~5f;nXNblk_Ds#f(CU_Z``W>K${Oc!!!dqB#!D%FR%_UPY%KQc7l&rYs$Oq%L~&`0-Rl0m4x zNj&B5sFs)ie}z&mzc1>idLO#vSZk`?hdx%y$rMhQth7SlSz-Hqvxmljdu(p)VY8`gvP^1L zL85X89ZOr6Q&~RsHtLXjOm0B5C#x3PW= zbfYuJRQRDMWLdiFpOfEdUP8lQyCus literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/W LOWERCASE.png b/assets/preload/images/alphabet/W LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..db3df1494715a3fd83bdbd9ca30b517431eee12b GIT binary patch literal 667 zcmeAS@N?(olHy`uVBq!ia0vp^AwVq8!3-q*w4`Ey6lZ})WHAGS=@k%Wj7xpW0TeV2 z@Ck8sFYo~}NdmVW^|XK*1WJPZf*H=+%io{BpZ|S)y?%bb|N2+%yZsm#7(aQsIEHu} z?+v@Xs6~O}%es}h|NdW>)75W?YM-8)TqNNz(NJxj_9pSo7bWsfUw-&kdlGBzquwu? zv+Eq=SQoHt-eWUI-{Yatfz~tg@;*mDdC$0{V6%Gq_wH3~6>@CXxCF&cOxaOc_kB^4 z>%28~TLSpY>n#phN-11*om?YhwEU=~KtrkMf{1D(5AF8>lUHQEc+h;W+~xm?hpK(k zes7FeTyIo*tv)dw#X7%b)%_y2L&T+OQs9q%2hmr{IW{k2&1w&_?EQRg z;q>EcC-0R}U7Q^@%WS4XeWzqG!z*WHjy= zM`zD|_Q%ES*N4tG&nNw8ajQzo&6P=9;@}p%A|*Sp%Bjz}dk4!}qxpPq+_t$3Y0Qr} z5L4vxdZ%9S&7LcXSEFnfo_??DH+Sh`-Y_Xyrna@NnOjaT^DOq^`Vl28B)UvbJR`;O zR>r}#ri_7ee3o527re@5W=}$#K;ZE&YU|RiXS}LeD)(ys#Ij1>hVrhkaI0rOL#9k? zc=_(p!;}@$dws0L&Bevof9Z%QZQsE^_vk_9-)4am#HV@Xn>PD%e6tsJ+QDF6Tf literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/W.png b/assets/preload/images/alphabet/W.png new file mode 100644 index 0000000000000000000000000000000000000000..49c1d4b2be34dc9e362420638af5e8212e5352e5 GIT binary patch literal 939 zcmeAS@N?(olHy`uVBq!ia0vp^F+gn0!3-pIC(nNhq&N#aB8wRqOs{}2V_fP}4v>lf zpAc8~0v{lgByihNPYb9)pd`pInBjf?{CNKR_WSGQ_1B;8_m5e-Xb%GeGn1!_V@Sl| zwGk(qUMui43v6=``uqR-K4<9<$Flh@doS-ic4E_+XLnZnzh2t%>|WissPEqs7#QA7 z_Yq?FF+GOwKj*v0+7-VR@jtgZ^^v*u;qR3j6`sn!__IL2obiJ_ix&SL5r!52-LE&6 z{d3*-vhn-*>;L+^%J0{lJk7w6sqAl%^0Q{CM#ZfcXIBQ*P@^!5%k2Faayt>_JxAS#J*Jkw->(BYx$>;ejadOp{c^f%zO|-K4 z&xY`8YON^`S)^uO`JAGap7-fvLB;1~2RC06*ugQin{)bBEr+Q}L0?oac4}luNTRa%!GQEK<94_WFuYt?tUs8)htXokfF-W?wtCy)AuThivfF+Fm)H zB89z=MfZGs@O#dw%g8Bp6j)hr|HY0Q(I1`PW$$Bo73f`S$@Wa ztm~)kIrXVO^2>(hrcX9MxW9}kv+>&Du=F#D=lM3yRC#J*T&}fTR9&yh`tGM=6K<~6 z%Hq2j7BcIr$tzni?PF8)w#Hx4A2{Zms!ap1k;^*L7cD zK(~7uN=K(GdzWh!D7A71XKMQO|5wym3awUrTXEN@dqL4m$4#X!kEDOcRvudUZC2u< zmoAD9Cg+^C{F&3GnU|EV66|tnqyB}vODb-%8@#ggnmd>8JgZeks_S*v^g#Q23pT$> zn^^xq-%r;vmto$2<5e~+)i;*^=9esVFGy(2`^M{d;8D(=(gj0{{R3bI@^m00009a7bBm001@A z001@A0bXV02mk;8V^B;~MMrQ<0000000000000000000000000000000000000000 z0000000000000000RR900000F4-cQ8pYQMQ&(F^wMdChz~0C#kWlVLQp;rv2*v$eNbSZui3zoeovG`~5kd^5cJC zNv&Sb;dd^5b7${zmSvGkjZEn$abjh1&fM>;HZF3k#pjb=Jo)9RJa%mIPYIPeHhKbX z&-WM|6g=XkkzFgehiX`o5(~>wXYA36`Zib7q91){5O`<5bsfb*s+DFq|xc(q-SoAL$2|vxOB@+mUeioCz)$#% z?`O85VG4!OP|ND5oPM*0$j))+jQ-ZW97EH(IU(6{`?uwqu>q=&c?h zai3=4L2_SnkA`_M1Mb1(nZSsNxnIvsS4OkXiK+mh7*n%>iiVr1cTwmUI1sJHm7;$K zc^NrEtWkTywSud5G-qtYjhGuamjahFqlP(D_cpQn~x6~2*kke;3Ih}~Loioxon{h=%9frW#kR5R~}T&?SK1gYYpYq@9m77+VD2d*X0X&K(?r;hW$q)72Izh zkmqSikBS#nCU5WNHfLPD@*-aooGO0e*gE%0KaV`_3@$JC%7erGfw`x*=j2UYyJD`t zgzbWjiuY>H>NGUPWRf!(8I)(w+m$;o4Npy}kof$HGc{FR*y-<%YuPE=Q2maxy>iDa z^NGy3X};ukJ03Ty`i|sWIOpZGvo?+I)D3dW4_SygTsD^0IjDT(K;rQ;M|0Sa>5p8e zK4k{%^XaY`#V3x{n(jl*Fx)80cNZ+e1wZ5kSB2%tvJa%gIHf5Tm%+icUN-_~PXtuI-p zs!jetw;#q$9X=CKZ7&h|MEz8ZjRp=(#1uD+DHxl(b2K3)-)?rFb&0M^2V}9#F*e++ zJbDfHlGr)htRuPdwfFk=y0CLzqgR64Qx(+YX+SG_JI%TF*1C`N)XgD@oxH`bGz5@9z(#=R=R{D-gO+_kTdC%U?L# z4At%?`RwDOa66y*=b0iruoS-eDanK5L*~70`FmyH!r_=@v3qDP^3Wi^PmCnFv dp3{Hf{sE8%Gy2D|7Nr0H002ovPDHLkV1h%G-L3!t literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/X LOWERCASE.png b/assets/preload/images/alphabet/X LOWERCASE.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a6b2a29933373a6a900956eca05f4bbca3f848 GIT binary patch literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^PC%^4!3-p$UiIn$Db50q$YKTt(<>m%7?=8#11M-5 z;1lBNUf=^{k_2u$>S+Nr2$Tf*1vAW-Uw?jo{Cj@=di(tT`~KmtxZ4>R7~4Hv978;g zw}##pJFLL5I!Y_<`v3p8GOd?$Y_rR4*J+cuv287%8bfgo|ML%akAm;c`#MAQ!Q||_ zyG$SanLCy5|LW-4+NVC}%(zsISA^MLUVEbH`jPg({S8bSHI{l3S_%b6nVlV9Oy2pZ zdhe;6g5MM0Sv;2C|Nm~e^WL~z&v0YspR!xdpRGM3azU{7u>`|3rab2}M>e=>ak(ET zeV?8qGxJ2GSjI7jv$wZCYEWdpZ1{FzBIApTJVpv%-OuUsTsfc@$@98t;fn_XtGB23 zRUWuwmtC-WVdOdapwl9^nXBp(H3W)$A28fn6Q4IDbg_wy5X0r}NR`dz4P{NcKcxI% zT9Bt-DwG5moB1x6ubkQ}w7bj1&9}GBdeO$Y z^WRF|u6U|&ZpvQkZibq7eXFj&H|6fVxZU+5N3=^eaZn8G!F0y zadj{70WwJfw;lDgfEol!g8YIR_S@^9ua|$%A3uNn{e1uaA8RZ185o$FJzX3_A`VZD z@Ltrcz{A7Aw5aS|{jKdAbQM*mJm)GslRk-Oi;MmGzXj{(hOK+_>RVi#`AxgLAtFD{r+Muz&v7M{NRN?6Ps^A9cTen|t zUc>c)!T6=!>*6IZg(V7vuD%aXO%gmZF>!;$zW03pZfZ7ej4b)PHf3ey;jf8^sDUf-gGGP-(^u`(UPHi=)Y<gwyQBG`9P9 zynk(*)BdUQ_|bJXzr$v zZQo)sVYk(zS-#E*eNzir8aDi&BXj!M)>YGE-^Wd!vTKX?rpBH3x30cBZ(;WF+a>dk zuG2mC!hoe<`jN2ak5;F`13G(*Y_BQQrBnu&HyZu=xT@l-Y~+=-C-@JXPjU54YF;&Q zz2Vnj*0w;$u8rqID<|#v;?)s#@6hSYRq3M3_vQ2!i8|ifX7cp(lok8-*gB>zQn9;n zKu>4UOqUN~pNvKOr=83#TXiyct9`|z%w5eprX92tvkcCZr`0000GbW%=J0MB0^KM%j}FMr>UPp_YElPy`2000CmNkl5YEHGo)LdB`k7KCABQA?Ar95dN3iPe*IrDD&9nLQC|>}wzSqN>X$P`J_959wz)$|mMku6UxYK+}>utZ{K@vo|X=r-kLU2C9Rw|W#*d8b)V($DpnhsAdTmO6@BMZ5q zlGqDpJjdFvQR*#~JSx=p)D*a%yx6?BapLpKKbBZ{{~bN}qAXwEn5dAgAN>}MS0lgy zE_En}WnfJ(RKlu6t5ULTo-g zl$BOf`79nkuy#|&QXI4aRy&bi2JFI+-i)xxiix-gJ+bU4CbI$K8Mud;)MSZ!Z2auB zEpUQ$m={jr=38Oau9^(2FN6v`d!jIe=<$wR$`yJ*IksnaZwo)Pnno$?9lO`SXhTV`)T6}IYq!?~{9zM8Jr zjKjO6V7&Zuy{7LQoRhxyqi>hxXTg7|$-bR+lL1T8om)ww*K%1W_b}1GzNQV9r+c>` z(I?F=YN~bYHfquSt?P<+_tVgpnucg92d$X@z+}4c!d!2AX9`ADQ$17*wowxN#6*@o zpqD=R63c2(B?>zB1lW~yY0kjv@gtLttzMSqo7P7;E~3btVV_?8jU4H9Cx-Qi&RwBg>nb<9%Ee&c@r~yoHyo22 zoaJ)JwYDcA%cBjF%P4Z}7>7>gk&K1t1RCs3iczkIw@Zp#YLLr+W066QQrb-%a}7#w ze|6N~$6zty#Wo?!-CgA}bono-!Ss)LiHi~aD9H?R?4Vrof8_}E0UhSYI#L;-{I6Dz_AtY99N(C35Pe zyBa>DqE<0x8ZL5R5ag17C`UMfuE*rgChYf;Z-0%TWporD!aOhV3r#U6^*Fcq5cZY4 voTaz1@6oYLYC2%zg#L`w6A$~O1Cqc zbQIYI-WLZvs+eTPnpn4J)wzEu*UgIz=L#x6o?YVqB-miGmA2!V4{gN`S&ygJ9MWex ztk`JqB69ZGldTG_AAg_g*>f!>{X|jClJJ{1G}^dMnu%=ho6|Y(M!F9#yD&U`_o=7-r-hxmVqN=`1Fv;^$16+fG$(XUml0RKe1FnjsY0^Yz__S9^yx9r?cyQTuE}%md90Q;)~a^;ts!arH~Za@ z&Yy`gIrZtQ)n#{;3pE|_xR<+Y?~3b}&Mo@Ly0~xsj?LYDQ`G-9@F*E&F*ggYyn1vd zU(u@*>O0yS`XtUyk69M2`u5b#)sy5*OIF{xVDPQ;0mHR-uFv=v?056{^7o1?C^dMx L`njxgN@xNAEXn%= literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/Y.png b/assets/preload/images/alphabet/Y.png new file mode 100644 index 0000000000000000000000000000000000000000..d15ae8902b3b50bb3835eb2943df442051de6597 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^AwX=x!3-po9pA46Qk(@Ik;M!QrdL3iF)sBf2T;&B zz$e7jy}$>^BnjMh)YAfL5GV=q3ue%_m#?3{|2=>F`TPCr^ZnPYnX`_8fr-=8#W5t} z@YWeG%Z?~;wEFgBU;AEvD@~f2tI;z3)qJzL`RfW?O-$WnGQZs`bu-+R=n=?#YtLNe zlP^k|ChJHae=E1QWta4s=fUUQWk0(Y&;GVz`dkww%QtR6g6Hw6h!%ZTYki#lBJQz` z=kJsGOXu)2Z2j)MY?G9khE;u?Y_u6uQL(C+`x(BICs{IB=U>_vFi$<#VF@Gu-PvhI z^HdKi#U5p!w@TGvR`scQs?WPz;$?3K>D@~f(iNNa_s@}Qn**+~|8`n*^S#Whj#o^& zPa3ArQ1VV(^kVlm2kxIakssWBmX%f8J62ALx&7gzOXofF>q(YvE@4lr9x}h;=1yrp zwd{!4`JkhH)xIqgTW{>2AbHh=M>Yn#5d`xEMpNnTsayjC$VDfNqqN9oK}w@&na z_Vaox@oo0^vOhfD^Vv7+E#0Ml@!DnEiT*3IxO=`{={z7Ots<#YFU3C9_xOojPiFVJ zUXe{d@T02MA@k+Q&>d#Bd}n59pL@EZ;%HE6|La@b+(jT}%H* z`aO`@Xn&fs<5jQF^7?aSdsldTyM28g+un=-_g7yRU9Ruo%L<(NW}kTM8UE+jr?0%a zc$HYEZEsZIPM@xfFlkl&x=4+^zc>A4eS7uEDgoXvxB2x~Rf>Lpo6TkHW?I>u)l-!9 v$*Q{9^puli=>HB2rWtFye2&jH{drPeqAb>UTGJg+s$}qV^>bP0l+XkK^_nAd literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/Z BOLD.png b/assets/preload/images/alphabet/Z BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..0e789533c58d4b7afafe4d1b11d72b2c5bbef545 GIT binary patch literal 1098 zcmeAS@N?(olHy`uVBq!ia0vp^89?mF!3-q15(RUC6lZ})WHAGS=@k%Wj7xpW0TfIQ z@Ck8sFYo~}i3k7x{|73rudlbax8J{i|NHmv_4W1Rb5pvCp5L@xHw7%^OZWgMjnNh5efw-YoK% zq~dqkmL1@^Psd~bFJb#-$cG|B0+Kc}d8NnGI@qkZY$MPF()ylnI@r$5;c zC~Vqw?t0(T)j_@@a};CuZ#SK`C@X%F!l8-pbPXlfU-`UX)rtc%r=Qx;yPiX!`*xG-!ickHomk{HO7<*D-*A>UJ?Pw-4R`G9>OBM8o_v!KP~*DV z9`&urz4*|VrL$%izG(Q__*{8c`|hpJ-LvMbnXzs41bva0tk;v}{x7O>%Q$$5<73I% zY0+(!X?LCfBtPSu+_zpyxniB&Bgv?xC1;K*&j>vIw#{(EKc|;0D|f5A%vAqxCu}2k z|5mVb-m=XxOAPl~UuK#-v#2@!mrSmA$Q9`dt2ZAz;u@|uCU9k+|8ZoR!1?o2tOVxC zeEncp!Mo%6qBE8!bdT81nW=SUvEhVhiJL}?c;47H6@DmrCs$Kyow~-hU-s~ArYVBo zg|_nxC7vm{bBpD=%GK|0`7cY)NIHKYuIN-w!n-FE#XJ+LN{vnDKViMBm0BRuSyO*S zTYJ&NNzWC`>s+jT`F_2Ke5HG~aLaXNpAGwOH`(rRcP(GL{D7o|Peb}_zQa{tFI^AH zdEb+;!F7MIU$Ju1;TxWPttD@!+NAz8yUY4Pt~W!jSYy$?t?fHboLbzK@ltQm|2UCb z#_#Prl*HTqIX?MozNoB7?Cts=c28sHyX-%A=&sK8lqcS&Pnqh4g$w_Rdak1s-_h}% zbxN(KSIo>W)^0jKzjZvfHjF&AKK;UvKdUvme_C3e>PU^T{LFnJCPMjnB4ZpV=X<*P KxvXm%7?=8#11M-5 z;1lBNUI0=|61eTCrv=m?P!i-9%)ozM{=I&Dz5V|C>*xFT=OXK88dx03OU89SwC2Xt#}{*Yj?BxvnS z>7=c*BVAE~iC%2F_$NJ!$+j>-LTBn;e7I zE$cnwvBO{S&AZie-log*>+`BJChUB|?dEL%@ozxoZS<=6bBcb=WQEbe*J z%&OSmh4Ze@oOxjNi9JD^y>BG9S(d(87%O1peTK&;{&1CNA=|=f0UxVa+}I5|qTj{b z;eT3EZaw$6?BeqbRRyK;lh0aT*lR!E{miBvJP%8cE^zRqQFdtj^z7e5NK8I3=h{{GqRBc-Co;(A0?C6J~oy z7uQ;B-nW5uQIcear|CLD)u~FF&XS94mMuHmb9_cQN2o|eqpuHFpvz|o;TN{kmpjFt zVc356Osf5Xq@zI&D|}~FOw^OP)9uw0kiXJx-jjJpOR|fvPRm|2FC>3w24DZI?6~S* zJZ*rwbUQK=E1@Zo&i-w)@jH_ZQA{N-rb zS(YqA{=H9F0zYnhe=P2Df84X|^*5GY`q}+xf-q~=hJE60v9lJ%zx%LZZq((!Po^qr ziKTExbOd!+oxgQwX;{C>QOmVVs__cz+g;6Tqu;eVxvg+1+H1^k^7yH_3!luE_b%Bt z^@;whM?cPm`Of*L{{P36b)u)O#oqq^sWH>_U3h=$Uj4=x|ExPJCP+u!{aEI4cKg#S z`;)BfmnpgAp0#tn5;Eb0#3GJ`U7Q?K6*fOm=n^nquh1IPugf@duI|>~>Tl+rm$_db zlfC%azJDffuPjSuD3Nb(?Uy&Z`iyPUpJ^)tinsn@^iZzU`8-z-oD@7={an^LB{Ts5 Da`E?* literal 0 HcmV?d00001 diff --git a/assets/preload/images/alphabet/ZERO BOLD.png b/assets/preload/images/alphabet/ZERO BOLD.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd297dfae2de740bcaaa94a917e9a60bc39d561 GIT binary patch literal 1394 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 JN)33_{{R*JIKBV? diff --git a/assets/preload/update/tracking/GitVer.txt b/assets/preload/update/tracking/GitVer.txt index 437cab5..c18d72b 100644 --- a/assets/preload/update/tracking/GitVer.txt +++ b/assets/preload/update/tracking/GitVer.txt @@ -1 +1 @@ -0.8.0e \ No newline at end of file +0.8.1 \ No newline at end of file diff --git a/source/Alphabet.hx b/source/Alphabet.hx index 0961ffb..bbc12ee 100644 --- a/source/Alphabet.hx +++ b/source/Alphabet.hx @@ -79,9 +79,9 @@ class Alphabet extends FlxSpriteGroup { for (i in 0...lettersArray.length) { var letter = lettersArray[0]; - letter.destroy(); - remove(letter); + remove(letter, true); lettersArray.remove(letter); + letter.destroy(); } lettersArray = []; splitWords = []; @@ -244,6 +244,7 @@ class Alphabet extends FlxSpriteGroup } add(letter); + lettersArray.push(letter); //so it can be destroyed later lastSprite = letter; } @@ -327,6 +328,9 @@ class AlphaCharacter extends FlxSprite { //actual xml mapping private static final characters:Map = [ + //SPECIAL CHARS -> DIFF NAME + "ñ" => "ENE LOWERCASE", + "Ñ" => "ENE", //numbers -> proper name "1" => "ONE", "2" => "TWO", @@ -362,22 +366,24 @@ class AlphaCharacter extends FlxSprite "_" => "UNDERSCORE", "." => "PERIOD", "," => "COMMA", - "'" => "QUOTE", + "'" => "APOSTROPHE", "\"" => "DBL QUOTE START", "!" => "EXCLAMATION", + "¡" => "EXCLAMATION", "?" => "QUESTION", + "¿" => "QUESTION", "{" => "L CRLY BRACKET", "}" => "R CRLY BRACKET", "`" => "BACKTICK", "\\" => "BACKSLASH", - "/" => "SLASH", + "/" => "FORWARD SLASH", "×" => "MULTIPLY", "↑" => "UP ARROW", "→" => "RIGHT ARROW", "←" => "LEFT ARROW", "↓" => "DOWN ARROW", "♥" => "HEART", - "😡" => "ANGRY" //ah yes, emoji in code + "😡" => "ANGRY FAIC" //ah yes, emoji in code ]; //for determaining which it is @@ -385,7 +391,7 @@ class AlphaCharacter extends FlxSprite public static final numbers:String = "1234567890"; - public static final symbols:String = "|~#&$%()*+-:;<=>@[]^_.,'\"!?\\/×↑→←↓♥😡"; + public static final symbols:String = "|~#&$%()*+-:;<=>@[]^_.,'\"!¡?¿\\/×↑→←↓♥😡ñÑ"; public var row:Int = 0; @@ -394,44 +400,37 @@ class AlphaCharacter extends FlxSprite public function new(x:Float, y:Float, textSize:Float) { super(x, y); - var tex = Paths.getSparrowAtlas('alphabet'); - frames = tex; - setGraphicSize(Std.int(width * textSize)); - updateHitbox(); this.textSize = textSize; moves = false; } public function set(character:String, letter:Bool, bold:Bool, ?typed:Bool = false) { - if (letter) { - final prefix:String = ((character.toUpperCase() != character) ? '${character.toUpperCase()} LOWERCASE' : character); - animation.addByPrefix(character, '${bold ? '${character.toUpperCase()} BOLD' : '${prefix}0'}', 24); - } else { - final prefix:String = ((bold && character == '_') ? characters.get('-') : characters.get(character)); - animation.addByPrefix(character, '$prefix${bold ? ' BOLD' : '0'}', 24); - } + var path = (letter ? (character.toUpperCase() != character ? '${character.toUpperCase()} LOWERCASE' : character) : ''); + if (!letter) path = characters.get((bold && character == '_') ? '-' : character); //?? + if (!Paths.fileExists('images/alphabet/' + (bold ? path.replace('LOWERCASE', '').trim() + ' BOLD' : path) + '.png', IMAGE)) + path = 'QUESTION'; + var gfx = Paths.image('alphabet/' + (bold ? path.replace('LOWERCASE', '').trim() + ' BOLD' : path)); + loadGraphic(gfx, true, Math.floor(gfx.width/2), gfx.height); + setGraphicSize(Std.int(width * textSize)); + animation.add(character, [0, 0, 1, 1], 24); animation.play(character); updateHitbox(); if (bold) { - switch (character) + switch (character.toUpperCase()) { case "'": y -= 20 * textSize; - case '-': y += 20 * textSize; + case '-': y += 22 * textSize; case '_': y += 50 * textSize; //totally real underscore - case '(': - x += (typed ? 1 * textSize : -35 * textSize); - y -= 5 * textSize; - offset.x = (typed ? -58 * textSize : -3 * textSize); - case ')': - x -= (typed ? 32 * textSize : 10 / textSize); - y -= 5 * textSize; - offset.x = (typed ? 12 * textSize : 24 * textSize); - case '.': - y += 45 * textSize; - x += (typed ? -3 : 5) * textSize; - offset.x += 3 * textSize; + case '(' | ')': y -= 5 * textSize; + case '.': y += 47 * textSize; + case 'Ñ': y -= 26 * textSize; //ñ (eñe) + case '!': y -= 11 * textSize; + case '?': y -= 7 * textSize; + case '¿' | '¡': flipX = flipY = true; + case '+': y += 13 * textSize; + case '~': y += 16 * textSize; } return; } @@ -457,6 +456,9 @@ class AlphaCharacter extends FlxSprite case 'j': y += 5.7 * textSize; case 'q': y += 12.8 * textSize; case 'y': y += 11.4 * textSize; + case '¿' | '¡': + y += 10 * textSize; + flipX = flipY = true; } } } diff --git a/source/CharacterSelectSubstate.hx b/source/CharacterSelectSubstate.hx index 991c373..7c3e7dc 100644 --- a/source/CharacterSelectSubstate.hx +++ b/source/CharacterSelectSubstate.hx @@ -247,7 +247,7 @@ class CharacterSelectSubstate extends MusicBeatSubstate function leEpicTween() { FlxTween.tween(bg, {alpha: 0}, 0.7, { onComplete: function(_) { - bg.kill(); + remove(bg, true); bg.destroy(); } }); @@ -255,7 +255,7 @@ class CharacterSelectSubstate extends MusicBeatSubstate for (shit in shitToTween) { FlxTween.tween(shit, {alpha: 0}, 0.5, { onComplete: function(_) { - shit.kill(); + remove(shit, true); shit.destroy(); } }); diff --git a/source/CrossFades.hx b/source/CrossFades.hx index 9530b7e..d57f416 100644 --- a/source/CrossFades.hx +++ b/source/CrossFades.hx @@ -13,124 +13,111 @@ import flixel.util.FlxColor; */ class CrossFade extends FlxSprite { - public var isPlayer:Bool = false; - public var playerOffsets:Bool = false; - public var flippedFlipX:Bool = false; - //dynamic is a big no no - //AT this is literally a dynamic - public function new(character:Any, group:FlxTypedGroup, ?isDad:Bool = true) - { + private static var colorMap:Map> = [ + 'gf-tutorial' => [0xFFa5004d], + 'gf' => [0xFFa5004d], + 'gf-pixel' => [0xFFa5004d], + 'monster' => [0xff919400], + 'monster-streetlight' => [0xff919400], + 'monster-christmas' => [0xff919400], + 'bf' => [0xFF1b008c], + 'bf-streetlight' => [0xFF1b008c], + 'bf-car' => [0xFF1b008c], + 'bf-christmas' => [0xFF1b008c], + 'bf-holding-gf' => [0xFF1b008c, 0xFFa5004d], + 'bf-pixel' => [0xFF00368c], + 'bf-pixel-opponent' => [0xFF00368c], + 'pico' => [0xff2c8c00], + 'pico-player' => [0xff2c8c00], + 'parents-christmas' => [0xff6a3381, 0xff882952], + 'spooky' => [0xff777777, 0xff925500], + 'senpai' => [0xFFffaa6f], + 'senpai-angry' => [0xFFffaa6f], + 'sarvente' => [0xFFe32486], + 'sarvente-dark' => [0xFFe32486], + 'sarvente-lucifer' => [0xFFe32486], + 'selever' => [0xFFe32486], + 'ruv' => [0xFF2e0069], + 'tankman' => [0xffcccccc, 0xff7c0000, 0xff7e3200, 0xff7c6900, 0xff0a7c00, 0xff00407c, 0xff13007c, 0xff63007c] + ]; + private var isPlayer:Bool = false; + private var playerOffsets:Bool = false; + private var flippedFlipX:Bool = false; + + //these are recycled now so the new function is empty except for the super + public function new() super(); - var char:Character = cast(character, Character); + public function resetShit(character:Character, ?isDad:Bool = true) { + if (character.trailData.enabled) { + kill(); + return; + } - isPlayer = char.isPlayer; - playerOffsets = char.playerOffsets; - flippedFlipX = char.flippedFlipX; - frames = char.frames; + isPlayer = character.isPlayer; + playerOffsets = character.playerOffsets; + flippedFlipX = character.flippedFlipX; + frames = character.frames; alpha = (!isDad ? ClientPrefs.settings.get('crossFadeData')[3] : 0.3); - setGraphicSize(Std.int(char.width), Std.int(char.height)); - scrollFactor.set(char.scrollFactor.x, char.scrollFactor.y); + setGraphicSize(Std.int(character.width), Std.int(character.height)); + scrollFactor.set(character.scrollFactor.x, character.scrollFactor.y); updateHitbox(); - flipX = char.flipX; - flipY = char.flipY; + flipX = character.flipX; + flipY = character.flipY; final curCrossFadeMode:String = ClientPrefs.settings.get('crossFadeData')[0]; switch (curCrossFadeMode) { case 'Static': - x = char.x + (isDad ? 60 : -60); - y = char.y - 48; + x = character.x + (isDad ? 60 : -60); + y = character.y - 48; case 'Subtle': - x = char.x; - y = char.y; + x = character.x; + y = character.y; case 'Eccentric': - x = char.x + FlxG.random.float(-20,90); - y = char.y + FlxG.random.float(-80, 80); + x = character.x + FlxG.random.float(-20,90); + y = character.y + FlxG.random.float(-80, 80); default: - x = char.x + FlxG.random.float(0,60); - y = char.y + FlxG.random.float(-50, 50); + x = character.x + FlxG.random.float(0,60); + y = character.y + FlxG.random.float(-50, 50); } - offset.x = char.offset.x; - offset.y = char.offset.y; - animation.add('cur', char.animation.curAnim.frames, 24, false); + offset.set(character.offset.x, character.offset.y); + animation.add('cur', character.animation.curAnim.frames, 24, false); animation.play('cur', true); - animation.curAnim.curFrame = char.animation.curAnim.curFrame; - antialiasing = char.antialiasing; - if (!char.trailData.enabled) { - switch(char.curCharacter) - { - case 'gf-pixel': - color = 0xFFa5004d; - antialiasing = false; - case 'monster' | 'monster-christmas' | 'monster-streetlight': - color = 0xff919400; - case 'bf' | 'bf-car' | 'bf-christmas' | 'bf-streetlight': - color = 0xFF1b008c; - case 'pico' | 'pico-player': - color = 0xff2c8c00; - case 'bf-holding-gf': - color = FlxG.random.bool(50) ? 0xFF1b008c : 0xFFa5004d; - case 'parents-christmas': - color = PlayState.SONG.notes[PlayState.instance.curSection].altAnim ? 0xff882952 : 0xff6a3381; - case 'spooky': - color = FlxG.random.bool(50) ? 0xff777777 : 0xff925500; - case 'bf-pixel' | 'bf-pixel-opponent': - color = 0xFF00368c; - antialiasing = false; - case 'senpai' | 'senpai-angry': - color = 0xFFffaa6f; - antialiasing = false; - case 'sarvente' | 'sarvente-dark' | 'sarvente-lucifer' | 'selever': - color = 0xFFe32486; - case 'ruv': - color = 0xFF2e0069; - case 'tankman' | 'tankman-player': - color = 0xffcccccc; - if (PlayState.instance != null && PlayState.instance.tankmanRainbow) { - switch(FlxG.random.int(0,5)) { - case 0: color = 0xff7c0000; - case 1: color = 0xff7e3200; - case 2: color = 0xff7c6900; - case 3: color = 0xff0a7c00; - case 4: color = 0xff02007c; - case 5: color = 0xff6d007c; - } - } - default: - //oooo scary chaining - color = FlxColor.subtract(FlxColor.fromRGB(char.healthColorArray[0].red, char.healthColorArray[0].green, char.healthColorArray[0].blue), 0x00333333); - } - } else { - alpha = 0; - kill(); - destroy(); - return; - } + animation.curAnim.curFrame = character.animation.curAnim.curFrame; + //animation.copyFrom(character.animation); //might be faster? + antialiasing = character.antialiasing; + + if (colorMap.exists(character.curCharacter)) { + final colors = colorMap.get(character.curCharacter); + var index:Int = 0; + + if (character.curCharacter == 'parents-christmas') + index = (PlayState.SONG.notes[PlayState.instance.curSection].altAnim ? 1 : 0); + else if (character.curCharacter == 'spooky' || character.curCharacter == 'bf-holding-gf') + index = (FlxG.random.bool() ? 1 : 0); + else if ((character.curCharacter == 'tankman' || character.curCharacter == 'tankman-player') && PlayState.instance.tankmanRainbow) + index = FlxG.random.int(1, 7); + + color = colors[index]; + } else + color = FlxColor.subtract(FlxColor.fromRGB(character.healthColorArray[0].red, character.healthColorArray[0].green, character.healthColorArray[0].blue), 0x00333333); - final dirLeft = FlxG.random.bool(70); //no mor shadow wario naming wahoo + final oppositeDir = FlxG.random.bool(70); //no mor shadow wario naming wahoo final velo = 12 * (curCrossFadeMode == 'Eccentric' ? 8 : 5); switch (curCrossFadeMode) { case 'Static' | 'Subtle': velocity.x = 0; case 'Eccentric': - velocity.x = (isDad ? (dirLeft ? -velo : velo) : (dirLeft ? velo : -velo)) * PlayState.instance.playbackRate; + velocity.x = (isDad ? (oppositeDir ? -velo : velo) : (oppositeDir ? velo : -velo)) * PlayState.instance.playbackRate; acceleration.x = (velocity.x > 0 ? FlxG.random.int(25,75) : FlxG.random.int(-25,-75)) * PlayState.instance.playbackRate * PlayState.instance.playbackRate; default: - velocity.x = (isDad ? (dirLeft ? -velo : velo) : (dirLeft ? velo : -velo)) * PlayState.instance.playbackRate; + velocity.x = (isDad ? (oppositeDir ? -velo : velo) : (oppositeDir ? velo : -velo)) * PlayState.instance.playbackRate; acceleration.x = (velocity.x > 0 ? FlxG.random.int(4,12) : FlxG.random.int(-4,-12)) * PlayState.instance.playbackRate * PlayState.instance.playbackRate; } var fadeTime = (!isDad ? ClientPrefs.settings.get('crossFadeData')[4] : 0.35); - FlxTween.tween(this, {alpha: 0}, FlxG.random.float(fadeTime - 0.03, fadeTime + 0.03) / PlayState.instance.playbackRate, { - onComplete: _ -> { - kill(); - group.remove(this, true); - destroy(); - } - }); - - group.add(this); - } + FlxTween.tween(this, {alpha: 0}, FlxG.random.float(fadeTime - 0.03, fadeTime + 0.03) / PlayState.instance.playbackRate, {onComplete: _ -> kill()}); + } public override function getScreenBounds(?newRect:FlxRect, ?camera:FlxCamera):FlxRect { if (flipDrawing) { diff --git a/source/CustomFadeTransition.hx b/source/CustomFadeTransition.hx index 7894e16..222b873 100644 --- a/source/CustomFadeTransition.hx +++ b/source/CustomFadeTransition.hx @@ -92,6 +92,7 @@ class CustomFadeTransition extends MusicBeatSubstate { if(leTween != null) { finishCallback(); leTween.cancel(); + leTween.destroy(); } colorForFunnyGrad = FlxColor.BLACK; super.destroy(); diff --git a/source/CutsceneHandler.hx b/source/CutsceneHandler.hx index 09c7d52..30505d3 100644 --- a/source/CutsceneHandler.hx +++ b/source/CutsceneHandler.hx @@ -59,7 +59,6 @@ class CutsceneHandler extends FlxBasic for (spr in objects) { - spr.kill(); PlayState.instance.remove(spr); spr.destroy(); } @@ -77,10 +76,9 @@ class CutsceneHandler extends FlxBasic for (spr in objects) { - spr.kill(); PlayState.instance.remove(spr); - spr.destroy(); objects.remove(spr); + spr.destroy(); } for (sound in sounds) @@ -99,9 +97,8 @@ class CutsceneHandler extends FlxBasic timedEvents = []; - kill(); - destroy(); PlayState.instance.remove(this); + destroy(); } } diff --git a/source/DenpaState.hx b/source/DenpaState.hx index efbf2ba..fbe1348 100644 --- a/source/DenpaState.hx +++ b/source/DenpaState.hx @@ -2,6 +2,7 @@ package; import flash.system.System; import flixel.FlxSprite; +import flixel.addons.display.FlxBackdrop; import flixel.addons.text.FlxTypeText; import flixel.addons.transition.FlxTransitionableState; import flixel.input.keyboard.FlxKey; @@ -34,35 +35,29 @@ class DenpaState extends MusicBeatState #if desktop Application.current.window.focus(); #end - var directory:String = 'splash'; - var weekDir:String = StageData.forceNextDirectory; - StageData.forceNextDirectory = null; - if(weekDir != null && weekDir.length > 0 && weekDir != '') directory = weekDir; - - Paths.setCurrentLevel(directory); - CoolUtil.precacheSound('denpa'); + CoolUtil.precacheSound('denpa', 'splash'); if (chooseYerIntroMate == 9) { - CoolUtil.precacheSound('dennad'); + CoolUtil.precacheSound('dennad', 'splash'); } if (FlxG.random.bool(1)) { chooseYerIntroMate = 9999; - CoolUtil.precacheSound('explosion'); + CoolUtil.precacheSound('explosion', 'splash'); } #if desktop if (FlxG.random.bool(0.01)) { chooseYerIntroMate = 666; - CoolUtil.precacheSound('JON_JUIMPSCARE'); - CoolUtil.precacheSound('undertale-game-over'); - CoolUtil.precacheSound('wasted'); - CoolUtil.precacheSound('soulbreak'); - CoolUtil.precacheSound('ourple'); + CoolUtil.precacheSound('JON_JUIMPSCARE', 'splash'); + CoolUtil.precacheSound('undertale-game-over', 'splash'); + CoolUtil.precacheSound('wasted', 'splash'); + CoolUtil.precacheSound('soulbreak', 'splash'); + CoolUtil.precacheSound('ourple', 'splash'); } #end - logo = new FlxSprite().loadGraphic(Paths.image('logo', null, false)); + logo = new FlxSprite().loadGraphic(Paths.image('logo', 'splash', false)); logo.scrollFactor.set(); logo.screenCenter(); logo.alpha = 0; @@ -77,7 +72,7 @@ class DenpaState extends MusicBeatState FlxTween.tween(skipTxt, {alpha: 0}, 0.5, { startDelay: 0.2, ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { remove(skipTxt, true); skipTxt.destroy(); } @@ -90,46 +85,42 @@ class DenpaState extends MusicBeatState FlxTransitionableState.skipNextTransOut = true; switch (chooseYerIntroMate){ case 0: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 1: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); logo.scale.set(0.1,0.1); logo.updateHitbox(); logo.screenCenter(); FlxTween.tween(logo, {alpha: 1, "scale.x": 1, "scale.y": 1,}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { logo.updateHitbox(); logo.screenCenter(); FlxTween.tween(logo, {alpha: 0, "scale.x": 8, "scale.y": 8}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 9999: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxG.sound.pause(); - FlxG.sound.play(Paths.sound('explosion')); + FlxG.sound.play(Paths.sound('explosion', 'splash')); for (i in 0...5) { var kaboom:FlxSprite = new FlxSprite(); - kaboom.frames = Paths.getSparrowAtlas('explosion'); + kaboom.frames = Paths.getSparrowAtlas('explosion', 'splash'); kaboom.animation.addByPrefix('boom', 'kaboom', 16, false); kaboom.animation.play('boom'); kaboom.scrollFactor.set(); @@ -140,27 +131,23 @@ class DenpaState extends MusicBeatState add(kaboom); FlxTween.tween(kaboom, {alpha: 0}, 1, { ease: FlxEase.quadOut, - onComplete: function(twn:FlxTween) { - kaboom.kill(); + onComplete: _ -> { + remove(kaboom, true); kaboom.destroy(); } }); } FlxTween.tween(logo, {y: logo.y - 250}, 0.2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - FlxTween.tween(logo, {y: 15000, x: logo.x + 500}, 1.8, { - onComplete: function(twnFlxTween) { - goToTitle(); - } - }); + onComplete: _ -> { + FlxTween.tween(logo, {y: 15000, x: logo.x + 500}, 1.8, {onComplete: _ -> goToTitle()}); } }); } }); case 2: for (i in 0...80) { - var logoPiece:FlxSprite = new FlxSprite().loadGraphic(Paths.image('loader/' + 'row-' + (i+1) + '-column-1', null, false)); + var logoPiece:FlxSprite = new FlxSprite().loadGraphic(Paths.image('loader/' + 'row-' + (i+1) + '-column-1', 'splash', false)); logoPiece.scrollFactor.set(); logoPiece.screenCenter(); logoPiece.alpha = 0; @@ -168,309 +155,252 @@ class DenpaState extends MusicBeatState logoPiece.x = logo.x + 1*i + FlxG.random.int(-100,100); logoPiece.active = false; add(logoPiece); - FlxTween.tween(logoPiece, {alpha: 1, x: logo.x}, 0.01 + i/34, { - ease: FlxEase.quadInOut - }); + FlxTween.tween(logoPiece, {alpha: 1, x: logo.x}, 0.01 + i/34, {ease: FlxEase.quadInOut}); } - FlxG.sound.play(Paths.sound('denpa')); - new FlxTimer().start(2, function(tmr:FlxTimer) - { - goToTitle(); - }); + FlxG.sound.play(Paths.sound('denpa', 'splash')); + new FlxTimer().start(2, _ -> goToTitle()); case 3: logo.x = -1000; - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1, x: FlxG.width/2 - 691/2}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0, x: FlxG.width + 1000}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 4: logo.y = -500; - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1, y: FlxG.height/2 - 476/2}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0, y: FlxG.height + 500}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); #if desktop case 666: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxG.sound.pause(); - FlxG.sound.play(Paths.sound('JON_JUIMPSCARE')); - jonScare = new FlxSprite().loadGraphic(Paths.image('JONJUMPSCARE', null, false)); + FlxG.sound.play(Paths.sound('JON_JUIMPSCARE', 'splash')); + jonScare = new FlxSprite().loadGraphic(Paths.image('JONJUMPSCARE', 'splash', false)); jonScare.scrollFactor.set(); jonScare.screenCenter(); add(jonScare); - logo.kill(); + remove(logo, true); logo.destroy(); - new FlxTimer().start(2.66, function(tmr:FlxTimer) - { - var random:Bool = FlxG.random.bool(10); - if (!random) { - var gameOver:FlxSprite = new FlxSprite().loadGraphic(Paths.image('fnaf1dead', null, false)); - gameOver.scrollFactor.set(); - gameOver.screenCenter(); - add(gameOver); - jonScare.kill(); - jonScare.destroy(); - FlxG.sound.pause(); - new FlxTimer().start(3, function(tmr:FlxTimer) + new FlxTimer().start(2.66, _ -> + { + var random:Bool = FlxG.random.bool(10); + if (!random) { + var gameOver:FlxSprite = new FlxSprite().loadGraphic(Paths.image('fnaf1dead', 'splash', false)); + gameOver.scrollFactor.set(); + gameOver.screenCenter(); + add(gameOver); + remove(jonScare, true); + jonScare.destroy(); + FlxG.sound.pause(); + new FlxTimer().start(3, _ -> System.exit(0)); + } else { + var randomInt:Int = FlxG.random.int(0,2); + switch (randomInt) { + case 0: + FlxG.sound.pause(); + remove(jonScare, true); + jonScare.destroy(); + var soul:FlxSprite = new FlxSprite().loadGraphic(Paths.image('soul', 'splash', false)); + soul.scrollFactor.set(); + soul.scale.set(3,3); + soul.updateHitbox(); + soul.screenCenter(); + soul.antialiasing = false; + soul.y += 150; + add(soul); + new FlxTimer().start(1, _ -> { - System.exit(0); - }); - } else { - var randomInt:Int = FlxG.random.int(0,2); - switch (randomInt) { - case 0: - FlxG.sound.pause(); - jonScare.kill(); - jonScare.destroy(); - var soul:FlxSprite = new FlxSprite().loadGraphic(Paths.image('soul', null, false)); - soul.scrollFactor.set(); - soul.scale.set(3,3); - soul.updateHitbox(); - soul.screenCenter(); - soul.antialiasing = false; - soul.y += 150; - add(soul); - new FlxTimer().start(1, function(tmr:FlxTimer){ - FlxG.sound.play(Paths.sound('soulbreak')); - soul.kill(); - soul.destroy(); - var brokenSoul:FlxSprite = new FlxSprite().loadGraphic(Paths.image('brokensoul', null, false)); - brokenSoul.scrollFactor.set(); - brokenSoul.scale.set(3,3); - brokenSoul.updateHitbox(); - brokenSoul.screenCenter(); - brokenSoul.antialiasing = false; - brokenSoul.y += 150; - add(brokenSoul); - new FlxTimer().start(1.3, function(tmr:FlxTimer) - { - brokenSoul.kill(); - brokenSoul.destroy(); - for (i in 0...3) { - var soulShard:FlxSprite = new FlxSprite().loadGraphic(Paths.image('shard' + (i+1), null, false)); - soulShard.scrollFactor.set(); - soulShard.scale.set(3,3); - soulShard.updateHitbox(); - soulShard.screenCenter(); - soulShard.antialiasing = false; - soulShard.y += 150; - soulShard.velocity.x = FlxG.random.int(-455,455); - soulShard.velocity.y = FlxG.random.int(55,755); - FlxTween.tween(soulShard, {alpha: 0}, FlxG.random.float(0.1,1), { - ease: FlxEase.quadInOut - }); - add(soulShard); + FlxG.sound.play(Paths.sound('soulbreak', 'splash')); + remove(soul, true); + soul.destroy(); + var brokenSoul:FlxSprite = new FlxSprite().loadGraphic(Paths.image('brokensoul', 'splash', false)); + brokenSoul.scrollFactor.set(); + brokenSoul.scale.set(3,3); + brokenSoul.updateHitbox(); + brokenSoul.screenCenter(); + brokenSoul.antialiasing = false; + brokenSoul.y += 150; + add(brokenSoul); + new FlxTimer().start(1.3, _ -> + { + remove(brokenSoul, true); + brokenSoul.destroy(); + var velY = 755; + var velX = 455; + var durs:Array = [0.1, 1]; + for (i in 0...6) { + if (i == 3) { + velY = 255; + velX = 55; + durs = [0.3, 1.3]; + } + var soulShard:FlxSprite = new FlxSprite().loadGraphic(Paths.image('shard' + Math.min(4, Math.max(i+1 % 5, 1)), 'splash', false)); + soulShard.scrollFactor.set(); + soulShard.scale.set(3,3); + soulShard.updateHitbox(); + soulShard.screenCenter(); + soulShard.antialiasing = false; + soulShard.y += 150; + soulShard.velocity.x = FlxG.random.int(-velX, velX); + soulShard.velocity.y = FlxG.random.int(55, velY); + FlxTween.tween(soulShard, {alpha: 0}, FlxG.random.float(durs[0], durs[1]), { + ease: FlxEase.quadInOut, + onComplete: _ -> { + remove(soulShard, true); + soulShard.destroy(); } - for (i in 0...3) { - var soulShard:FlxSprite = new FlxSprite().loadGraphic(Paths.image('shard' + (i+1), null, false)); - soulShard.scrollFactor.set(); - soulShard.scale.set(3,3); - soulShard.updateHitbox(); - soulShard.screenCenter(); - soulShard.antialiasing = false; - soulShard.y += 150; - soulShard.velocity.x = FlxG.random.int(-55,55); - soulShard.velocity.y = FlxG.random.int(55,255); - FlxTween.tween(soulShard, {alpha: 0}, FlxG.random.float(0.3,1.3), { - ease: FlxEase.quadInOut - }); - add(soulShard); - } - new FlxTimer().start(1.6, function(tmr:FlxTimer) - { - FlxG.sound.play(Paths.sound('undertale-game-over')); - var gameOver:FlxSprite = new FlxSprite().loadGraphic(Paths.image('undertaledead', null, false)); - gameOver.scrollFactor.set(); - gameOver.screenCenter(); - gameOver.antialiasing = false; - gameOver.y -= 200; - gameOver.alpha = 0; - add(gameOver); - FlxTween.tween(gameOver, {alpha: 1}, 0.95, { - ease: FlxEase.quadInOut - }); - new FlxTimer().start(2.76, function(tmr:FlxTimer) - { - var text = new FlxTypeText(0, 0, 0, "DONT GIVE UP"); - text.scrollFactor.set(); - text.setFormat(Paths.font("determination.otf"), 36, FlxColor.WHITE, CENTER, FlxTextBorderStyle.SHADOW, FlxColor.BLACK); - text.screenCenter(); - text.y = gameOver.y + 350; - text.cursorBlinkSpeed = 0; - text.antialiasing = false; - text.x -= 220/2; - add(text); - text.start(0.06); - new FlxTimer().start(1, function(tmr:FlxTimer) - { - var text = new FlxTypeText(0, 0, 0, "STAY DETERMINED"); - text.scrollFactor.set(); - text.setFormat(Paths.font("determination.otf"), 36, FlxColor.WHITE, CENTER, FlxTextBorderStyle.SHADOW, FlxColor.BLACK); - text.screenCenter(); - text.y = gameOver.y + 400; - text.cursorBlinkSpeed = 0; - text.antialiasing = false; - text.x -= 274/2; - add(text); - text.start(0.06); - }); - }); - new FlxTimer().start(8.4, function(tmr:FlxTimer) - { - System.exit(0); - }); - }); }); - }); - case 1: - FlxG.sound.pause(); - FlxG.sound.play(Paths.sound('wasted')); - var wasted:FlxSprite = new FlxSprite().loadGraphic(Paths.image('wasted', null, false)); - wasted.scrollFactor.set(); - wasted.screenCenter(); - wasted.alpha = 0; - add(wasted); - jonScare.kill(); - jonScare.destroy(); - FlxTween.tween(wasted, {alpha: 1}, 0.3, { - ease: FlxEase.quadInOut - }); - new FlxTimer().start(6, function(tmr:FlxTimer) + add(soulShard); + } + new FlxTimer().start(1.6, _ -> { - System.exit(0); - }); - case 2: - FlxG.sound.pause(); - FlxG.sound.play(Paths.sound('ourple')); - for (i in 0...4) { - var ourple:FlxSprite = new FlxSprite(); - ourple.frames = Paths.getSparrowAtlas('ourple'); - ourple.animation.addByPrefix('dance', 'dance', 24, true); - ourple.animation.play('dance'); - ourple.scrollFactor.set(); - ourple.screenCenter(); - ourple.x = -250 + (450*i); - ourple.y = -200; - add(ourple); - } - for (i in 0...4) { - var ourple:FlxSprite = new FlxSprite(); - ourple.frames = Paths.getSparrowAtlas('ourple'); - ourple.animation.addByPrefix('dance', 'dance', 24, true); - ourple.animation.play('dance'); - ourple.scrollFactor.set(); - ourple.screenCenter(); - ourple.x = -250 + (450*i); - ourple.y = 200; - add(ourple); - } - for (i in 0...4) { - var ourple:FlxSprite = new FlxSprite(); - ourple.frames = Paths.getSparrowAtlas('ourple'); - ourple.animation.addByPrefix('dance', 'dance', 24, true); - ourple.animation.play('dance'); - ourple.scrollFactor.set(); - ourple.screenCenter(); - ourple.x = -250 + (450*i); - ourple.y = 600; - add(ourple); - } - jonScare.kill(); - jonScare.destroy(); - new FlxTimer().start(9, function(tmr:FlxTimer) - { - System.exit(0); + FlxG.sound.play(Paths.sound('undertale-game-over', 'splash')); + var gameOver:FlxSprite = new FlxSprite().loadGraphic(Paths.image('undertaledead', 'splash', false)); + gameOver.scrollFactor.set(); + gameOver.screenCenter(); + gameOver.antialiasing = false; + gameOver.y -= 200; + gameOver.alpha = 0; + add(gameOver); + FlxTween.tween(gameOver, {alpha: 1}, 0.95, {ease: FlxEase.quadInOut}); + new FlxTimer().start(2.76, function(tmr:FlxTimer) + { + var text = new FlxTypeText(0, 0, 0, "DONT GIVE UP"); + text.scrollFactor.set(); + text.setFormat(Paths.font("determination.otf"), 36, FlxColor.WHITE, CENTER, FlxTextBorderStyle.SHADOW, FlxColor.BLACK); + text.screenCenter(); + text.y = gameOver.y + 350; + text.cursorBlinkSpeed = 0; + text.antialiasing = false; + text.x -= 220/2; + add(text); + text.start(0.06); + new FlxTimer().start(1, function(tmr:FlxTimer) + { + var text = new FlxTypeText(0, 0, 0, "STAY DETERMINED"); + text.scrollFactor.set(); + text.setFormat(Paths.font("determination.otf"), 36, FlxColor.WHITE, CENTER, FlxTextBorderStyle.SHADOW, FlxColor.BLACK); + text.screenCenter(); + text.y = gameOver.y + 400; + text.cursorBlinkSpeed = 0; + text.antialiasing = false; + text.x -= 274/2; + add(text); + text.start(0.06); + }); + }); + new FlxTimer().start(8.4, _ -> System.exit(0)); }); - } + }); + }); + case 1: + FlxG.sound.pause(); + FlxG.sound.play(Paths.sound('wasted', 'splash')); + var wasted:FlxSprite = new FlxSprite().loadGraphic(Paths.image('wasted', 'splash', false)); + wasted.scrollFactor.set(); + wasted.screenCenter(); + wasted.alpha = 0; + add(wasted); + remove(jonScare, true); + jonScare.destroy(); + FlxTween.tween(wasted, {alpha: 1}, 0.3, {ease: FlxEase.quadInOut}); + new FlxTimer().start(6, _ -> System.exit(0)); + case 2: + FlxG.sound.pause(); + FlxG.sound.play(Paths.sound('ourple', 'splash')); + var ourple:FlxBackdrop = new FlxBackdrop(Paths.image('ourple', 'splash'), XY, 0, 0); + ourple.frames = Paths.getSparrowAtlas('ourple', 'splash'); + ourple.animation.addByPrefix('dance', 'dance', 24, true); + ourple.animation.play('dance'); + ourple.scrollFactor.set(); + ourple.acceleration.set(700, 700); + new FlxTimer().start(0.5, tmr -> { + ourple.acceleration.y *= -1.2; + tmr.reset(0.5); + }); + add(ourple); + remove(jonScare, true); + jonScare.destroy(); + new FlxTimer().start(9, _ -> System.exit(0)); } - }); + } + }); } }); #end case 5: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); logo.scale.set(8,8); logo.updateHitbox(); logo.screenCenter(); FlxTween.tween(logo, {alpha: 1, "scale.x": 1, "scale.y": 1,}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { logo.updateHitbox(); logo.screenCenter(); FlxTween.tween(logo, {alpha: 0, "scale.x": 0.1, "scale.y": 0.1}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 6: logo.x = 1000; - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1, x: FlxG.width/2 - 691/2}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0, x: FlxG.width - 1000}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 7: logo.y = 500; - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1, y: FlxG.height/2 - 476/2}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0, y: FlxG.height - 500}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 8: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1, angle: -12}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0, angle: 12}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); case 9: - FlxG.sound.play(Paths.sound('dennad')); + FlxG.sound.play(Paths.sound('dennad', 'splash')); FlxTween.tween(logo, {alpha: 1}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - var circle:FlxSprite = new FlxSprite().loadGraphic(Paths.image('bigCircle', null, false)); + onComplete: _ -> { + var circle:FlxSprite = new FlxSprite().loadGraphic(Paths.image('bigCircle', 'splash', false)); circle.blend = openfl.display.BlendMode.INVERT; circle.scrollFactor.set(); circle.scale.set(0.001,0.001); @@ -480,22 +410,18 @@ class DenpaState extends MusicBeatState add(circle); FlxTween.tween(circle, {alpha: 1, "scale.x": 1.3, "scale.y": 1.3}, 0.95, { ease: FlxEase.expoOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); default: - FlxG.sound.play(Paths.sound('denpa')); + FlxG.sound.play(Paths.sound('denpa', 'splash')); FlxTween.tween(logo, {alpha: 1}, 0.95, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { + onComplete: _ -> { FlxTween.tween(logo, {alpha: 0}, 2, { ease: FlxEase.quadInOut, - onComplete: function(twn:FlxTween) { - goToTitle(); - } + onComplete: _ -> goToTitle() }); } }); diff --git a/source/DialogueBoxDenpa.hx b/source/DialogueBoxDenpa.hx index af2427c..4111cc9 100644 --- a/source/DialogueBoxDenpa.hx +++ b/source/DialogueBoxDenpa.hx @@ -272,9 +272,7 @@ class DialogueBoxDenpa extends FlxSpriteGroup if(PlayerSettings.player1.controls.ACCEPT) { if(!daText.finishedText) { if(daText != null) { - daText.killTheTimer(); - daText.kill(); - remove(daText); + remove(daText, true); daText.destroy(); } daText = new Alphabet(DEFAULT_TEXT_X, DEFAULT_TEXT_Y, textToType, false, true, 0.0, 0.7); @@ -297,10 +295,8 @@ class DialogueBoxDenpa extends FlxSpriteGroup box.animation.curAnim.curFrame = box.animation.curAnim.frames.length - 1; box.animation.curAnim.reverse(); - daText.kill(); - remove(daText); + remove(daText, true); daText.destroy(); - daText = null; updateBoxOffsets(box); FlxG.sound.music.fadeOut(1, 0); } else { @@ -370,19 +366,15 @@ class DialogueBoxDenpa extends FlxSpriteGroup } } else { //Dialogue ending if(box != null && box.animation.curAnim.curFrame <= 0) { - box.kill(); - remove(box); + remove(box, true); box.destroy(); - box = null; } if(bgFade != null) { bgFade.alpha -= 0.5 * elapsed; if(bgFade.alpha == 0) { - bgFade.kill(); - remove(bgFade); + remove(bgFade, true); bgFade.destroy(); - bgFade = null; } } @@ -405,14 +397,13 @@ class DialogueBoxDenpa extends FlxSpriteGroup for (i in 0...arrayCharacters.length) { var leChar:DialogueCharacter = arrayCharacters[0]; if(leChar != null) { + remove(leChar, true); arrayCharacters.remove(leChar); - leChar.kill(); - remove(leChar); leChar.destroy(); } } finishThing(); - kill(); + destroy(); } } super.update(elapsed); diff --git a/source/FreeplaySectionSubstate.hx b/source/FreeplaySectionSubstate.hx index 3d59b1a..6957271 100644 --- a/source/FreeplaySectionSubstate.hx +++ b/source/FreeplaySectionSubstate.hx @@ -133,7 +133,7 @@ class FreeplaySectionSubstate extends MusicBeatSubstate { bgScroll2.visible = true; } for (spr in funnyArray) { - spr.kill(); + remove(spr, true); funnyArray.remove(spr); spr.destroy(); } diff --git a/source/FreeplayState.hx b/source/FreeplayState.hx index fc2b198..d03ac65 100644 --- a/source/FreeplayState.hx +++ b/source/FreeplayState.hx @@ -72,7 +72,7 @@ class FreeplayState extends MusicBeatState override function create() { Paths.clearUnusedCache(); - Paths.refreshModsMaps(false, true, true); + Paths.refreshModsMaps(true, true, true); instance = this; persistentUpdate = true; @@ -525,8 +525,8 @@ class FreeplayState extends MusicBeatState funnyText.setFormat("VCR OSD Mono", 64, FlxColor.RED, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(funnyText); FlxTween.tween(funnyText, {alpha: 0}, 0.9, { - onComplete: function(tween:FlxTween) - { + onComplete: _ -> { + remove(funnyText, true); funnyText.destroy(); } }); @@ -597,8 +597,8 @@ class FreeplayState extends MusicBeatState funnyText.setFormat("VCR OSD Mono", 64, FlxColor.RED, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(funnyText); FlxTween.tween(funnyText, {alpha: 0}, 0.9, { - onComplete: function(tween:FlxTween) - { + onComplete: _ -> { + remove(funnyText, true); funnyText.destroy(); } }); diff --git a/source/FunkinLua.hx b/source/FunkinLua.hx index afbd9dd..dda6194 100644 --- a/source/FunkinLua.hx +++ b/source/FunkinLua.hx @@ -1437,8 +1437,8 @@ class FunkinLua { } if(destroy) { - sprite.destroy(); PlayState.instance.modchartSprites.remove(tag); + sprite.destroy(); } }); @@ -1967,8 +1967,8 @@ class FunkinLua { } if(destroy) { - text.destroy(); PlayState.instance.modchartTexts.remove(tag); + text.destroy(); } }); @@ -2299,23 +2299,23 @@ class FunkinLua { return; } - var pee:ModchartText = PlayState.instance.modchartTexts.get(tag); - pee.kill(); - if(pee.wasAdded) { - PlayState.instance.remove(pee, true); + var text:ModchartText = PlayState.instance.modchartTexts.get(tag); + text.kill(); + if(text.wasAdded) { + PlayState.instance.remove(text, true); } - pee.destroy(); + text.destroy(); PlayState.instance.modchartTexts.remove(tag); } function resetSpriteTag(tag:String) { if (PlayState.instance.modchartSprites.exists(tag)) { - var pee:ModchartSprite = PlayState.instance.modchartSprites.get(tag); - pee.kill(); - if(pee.wasAdded) { - PlayState.instance.remove(pee, true); + var spr:ModchartSprite = PlayState.instance.modchartSprites.get(tag); + spr.kill(); + if(spr.wasAdded) { + PlayState.instance.remove(spr, true); } - pee.destroy(); + spr.destroy(); PlayState.instance.modchartSprites.remove(tag); return; } diff --git a/source/HUD.hx b/source/HUD.hx index 8bbdc86..ee50a42 100644 --- a/source/HUD.hx +++ b/source/HUD.hx @@ -360,26 +360,24 @@ class HUD extends FlxSpriteGroup { FlxTween.tween(songCard, {x: 0}, 0.7, { startDelay: 0.1, ease: FlxEase.backInOut, - onComplete: function(twn:FlxTween) + onComplete: _ -> { - new FlxTimer().start(1.3/(Conductor.bpm/100)/PlayState.instance.playbackRate, function(tmr:FlxTimer) + new FlxTimer().start(1.3/(Conductor.bpm/100)/PlayState.instance.playbackRate, _ -> { if(songCard != null){ FlxTween.tween(songCard, {x: cardTweenTo}, 0.5, { startDelay: 0.1, ease: FlxEase.backInOut, - onComplete: function(twn:FlxTween) + onComplete: _ -> { - var objects = [songCard, mirrorSongCard, songCreditsTxt, remixCreditsTxt, songNameTxt]; - for (obj in objects) { - obj.kill(); + for (obj in [songCard, mirrorSongCard, songCreditsTxt, remixCreditsTxt, songNameTxt]) { + remove(obj, true); obj.destroy(); } } }); } - var objects = [mirrorSongCard, songCreditsTxt, remixCreditsTxt, songNameTxt]; - for (obj in objects) { + for (obj in [mirrorSongCard, songCreditsTxt, remixCreditsTxt, songNameTxt]) { FlxTween.tween(obj, {x: (obj == mirrorSongCard ? -1202 : cardTweenTo)}, 0.5, { startDelay: 0.1, ease: (obj == songNameTxt ? FlxEase.quadInOut : FlxEase.backInOut) @@ -397,9 +395,8 @@ class HUD extends FlxSpriteGroup { } } else { if (songCard != null) { - var objects = [songCard, mirrorSongCard, songCreditsTxt, remixCreditsTxt, songNameTxt]; - for (obj in objects) { - obj.kill(); + for (obj in [songCard, mirrorSongCard, songCreditsTxt, remixCreditsTxt, songNameTxt]) { + remove(obj, true); obj.destroy(); } } @@ -412,11 +409,7 @@ class HUD extends FlxSpriteGroup { timeTxtTween.cancel(); } timeTxt.scale.set(1.075, 1.075); - timeTxtTween = FlxTween.tween(timeTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 1.5 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, { - onComplete: function(twn:FlxTween) { - timeTxtTween = null; - } - }); + timeTxtTween = FlxTween.tween(timeTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 1.5 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, {onComplete: _ -> timeTxtTween = null}); } public function scoreTween(daRating:String) { @@ -431,20 +424,8 @@ class HUD extends FlxSpriteGroup { scoreTxt.scale.set(scaler, scaler); leftTxt.scale.set(scaler, scaler); rightTxt.scale.set(scaler, scaler); - scoreTxtTween = FlxTween.tween(scoreTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 2 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, { - onComplete: function(twn:FlxTween) { - scoreTxtTween = null; - } - }); - leftTxtTween = FlxTween.tween(leftTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 2 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, { - onComplete: function(twn:FlxTween) { - leftTxtTween = null; - } - }); - rightTxtTween = FlxTween.tween(rightTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 2 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, { - onComplete: function(twn:FlxTween) { - rightTxtTween = null; - } - }); + scoreTxtTween = FlxTween.tween(scoreTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 2 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, {onComplete: _ ->scoreTxtTween = null}); + leftTxtTween = FlxTween.tween(leftTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 2 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, {onComplete: _ -> leftTxtTween = null}); + rightTxtTween = FlxTween.tween(rightTxt.scale, {x: 1, y: 1}, Conductor.crochet / 1250 / 2 / PlayState.instance.playbackRate * PlayState.instance.gfSpeed, {onComplete: _ -> rightTxtTween = null}); } } \ No newline at end of file diff --git a/source/HealthIcon.hx b/source/HealthIcon.hx index ae58bd8..703240a 100644 --- a/source/HealthIcon.hx +++ b/source/HealthIcon.hx @@ -57,11 +57,12 @@ class HealthIcon extends FlxSprite } //Internal Bopping + //maybe make this affected by gf speed would be cool i think (takes longer on higher ones) switch (curBopType.toLowerCase()) { case 'swing' | 'snap' | 'none': //Prevent Default Scaling case 'stretch': - setGraphicSize(Std.int(FlxMath.lerp(150 * scaleMult, width, 0.8)),Std.int(FlxMath.lerp(150 * scaleMult, height, 0.8))); + setGraphicSize(Std.int(FlxMath.lerp(150 * scaleMult, width, 0.8)), Std.int(FlxMath.lerp(150 * scaleMult, height, 0.8))); updateHitbox(); case 'old': setGraphicSize(Std.int(FlxMath.lerp(150 * scaleMult, width, 0.50))); @@ -88,9 +89,9 @@ class HealthIcon extends FlxSprite if(curBopType != iconAnim) curBopType = iconAnim; final info:BopInfo = checkInfo(bopInfo); - switch (iconAnim.toLowerCase()) { //Messy Math hell jumpscare (it is more customizeable though) - case 'swing': - if (info.curBeat % info.gfSpeed == 0) { + if (info.curBeat % info.gfSpeed == 0) { + switch (iconAnim.toLowerCase()) { //Messy Math hell jumpscare (it is more customizeable though) + case 'swing': info.curBeat % (info.gfSpeed * 2) == 0 ? { var scaleArray:Array = [1.1 * bopMult, 0.8 / bopMult]; switch(type) { @@ -99,7 +100,7 @@ class HealthIcon extends FlxSprite } scale.set(scaleMult * scaleArray[0], scaleMult * scaleArray[1]); final reverse = type > 0 ? 1 : -1; - + FlxTween.angle(this, 15 * reverse, 0, Conductor.crochet / 1300 / info.playbackRate * info.gfSpeed, {ease: FlxEase.quadOut}); } : { var scaleArray:Array = [1.1 / bopMult, 1.3 * bopMult]; @@ -109,20 +110,18 @@ class HealthIcon extends FlxSprite } scale.set(scaleMult * scaleArray[0], scaleMult * scaleArray[1]); final reverse = type > 0 ? -1 : 1; - + FlxTween.angle(this, 15 * reverse, 0, Conductor.crochet / 1300 / info.playbackRate * info.gfSpeed, {ease: FlxEase.quadOut}); } - + final scaleThing:Float = type == 2 ? 0.75 : 1; FlxTween.tween(this, {'scale.x': scaleMult * scaleThing, 'scale.y': scaleMult * scaleThing}, Conductor.crochet / 1250 / info.playbackRate * info.gfSpeed, {ease: FlxEase.quadOut}); - } - case 'bop': - final scaleThing:Float = type == 2 ? 1 : 1.2; - scale.set((scaleMult * scaleThing) * bopMult, (scaleMult * scaleThing) * bopMult); - case 'old': - setGraphicSize(Std.int((width + 30) * bopMult)); - case 'snap': - if (info.curBeat % info.gfSpeed == 0) { + case 'bop': + final scaleThing:Float = type == 2 ? 1 : 1.2; + scale.set((scaleMult * scaleThing) * bopMult, (scaleMult * scaleThing) * bopMult); + case 'old': + setGraphicSize(Std.int((width + 30) * bopMult)); + case 'snap': info.curBeat % (info.gfSpeed * 2) == 0 ? { var scaleArray:Array = [1.1 * bopMult, 0.8 / bopMult]; switch(type) { @@ -130,7 +129,7 @@ class HealthIcon extends FlxSprite case 2: scaleArray = [0.85 / bopMult, 1.1 * bopMult]; } scale.set(scaleMult * scaleArray[0], scaleMult * scaleArray[1]); - + angle = type > 0 ? 15 : -15; } : { var scaleArray:Array = [1.1 / bopMult, 1.3 * bopMult]; @@ -139,19 +138,19 @@ class HealthIcon extends FlxSprite case 2: scaleArray = [0.85 * bopMult, 0.65 / bopMult]; } scale.set(scaleMult * scaleArray[0], scaleMult * scaleArray[1]); - + angle = type > 0 ? -15 : 15; } - + final scaleThing:Float = type == 2 ? 0.75 : 1; FlxTween.tween(this, {'scale.x': scaleMult * scaleThing, 'scale.y': scaleMult * scaleThing}, Conductor.crochet / 1250 / info.playbackRate * info.gfSpeed, {ease: FlxEase.quadOut}); - } - case 'stretch': - var funny:Float = (info.healthBarPercent * 0.01) + 0.01; - final trueFunny:Float = type > 0 ? (scaleMult * (2 - funny)) * bopMult : (scaleMult * funny) * bopMult; - final stretchValues = type == 2 ? [25, 12] : [50, 25]; - - setGraphicSize(Std.int(width + (stretchValues[0] * trueFunny)),Std.int(height - (stretchValues[1] * trueFunny))); + case 'stretch': + var funny:Float = (info.healthBarPercent * 0.01) + 0.01; + final trueFunny:Float = type > 0 ? (scaleMult * (2 - funny)) * bopMult : (scaleMult * funny) * bopMult; + final stretchValues = type == 2 ? [25, 12] : [50, 25]; + + setGraphicSize(Std.int(width + (stretchValues[0] * trueFunny)),Std.int(height - (stretchValues[1] * trueFunny))); + } } updateHitbox(); } @@ -182,10 +181,9 @@ class HealthIcon extends FlxSprite if(!Paths.fileExists('images/' + name + '.png', IMAGE)) name = 'icons/icon-face'; //Prevents crash from missing icon var file:FlxGraphic = Paths.image(name); - loadGraphic(file); //Load stupidly first for getting the file size - type = (width < 200 ? SINGLE : ((width > 199 && width < 301) ? DEFAULT : WINNING)); + type = (file.width < 200 ? SINGLE : ((file.width > 199 && file.width < 301) ? DEFAULT : WINNING)); - loadGraphic(file, true, Math.floor(width / (type+1)), Math.floor(height)); + loadGraphic(file, true, Math.floor(file.width / (type+1)), file.height); offsets[0] = offsets[1] = (width - 150) / (type+1); var frames:Array = []; for (i in 0...type+1) frames.push(i); diff --git a/source/Main.hx b/source/Main.hx index 6b2a0f2..122f6c7 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -36,6 +36,12 @@ class Main extends Sprite public function new() { super(); + #if windows + @:functionCode(' + #include + SetProcessDPIAware() + ') + #end if (stage != null) init(); @@ -60,7 +66,7 @@ class Main extends Sprite * * Use `debugVersion` to get the version with build date. */ - public static final denpaEngineVersion:GameVersion = new GameVersion(0, 8, 0, 'e'); + public static final denpaEngineVersion:GameVersion = new GameVersion(0, 8, 1, ''); public static var fpsCounter:FramerateDisplay; public static var ramCount:DebugDisplay; @@ -129,7 +135,6 @@ class Main extends Sprite //negates need for constant clearStored etc FlxG.signals.preStateSwitch.add(() -> { Paths.clearStoredCache(true); - FlxG.bitmap.dumpCache(); FlxG.sound.destroy(false); var cache = cast(Assets.cache, AssetCache); @@ -139,11 +144,11 @@ class Main extends Sprite cache.removeSound(key); cache = null; - gc(); + gc(true); }); FlxG.signals.postStateSwitch.add(() -> { Paths.clearUnusedCache(); - gc(true); + gc(); }); #if html5 diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx index 20139ce..d417329 100644 --- a/source/MainMenuState.hx +++ b/source/MainMenuState.hx @@ -289,8 +289,8 @@ class MainMenuState extends MusicBeatState funnyText.setFormat("VCR OSD Mono", 64, FlxColor.RED, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(funnyText); FlxTween.tween(funnyText, {alpha: 0}, 0.6, { - onComplete: function(tween:FlxTween) - { + onComplete: _ -> { + remove(funnyText, true); funnyText.destroy(); } }); diff --git a/source/Note.hx b/source/Note.hx index e2bbb57..2b6683a 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -93,6 +93,7 @@ class Note extends FlxSprite // Lua shit public var noteSplashDisabled:Bool = false; + public var forceNoteSplash:Bool = false; public var noteSplashTexture:String = null; public var noteSplashHue:Float = 0; public var noteSplashSat:Float = 0; diff --git a/source/PatchState.hx b/source/PatchState.hx index 898e852..9c311d7 100644 --- a/source/PatchState.hx +++ b/source/PatchState.hx @@ -96,6 +96,7 @@ class PatchState extends MusicBeatState var pisspoop:Array> = [ //Ver - Icon name - Update Ver - Update Name - Description - Link - BG Color ['Denpa Engine'], + ['0.8.1', 'widol', "0.8.1", "", 'Additions:\nTimebar intro animations\nAlphabet now supports ¿, ¡, and ñ.\nImprovements:\nWindows builds now utilize DPI Awareness for crisper visuals.\nFixes:\nFreeplay vocals no longer persist into PlayState\nIcon animations now respect gfSpeed\nGhost tapping animations now respect gfSection\nFlxBars now fill smoothly\nFlxBars no longer incorrectly return a roudned percentage\nStrums are now perfectly centered\nThe bold (, ), and . characters are now properly offset in Alphabet\nThe duet and mirror section buttons now work properly on all mania amounts\nMod maps no longer require a game restart to refresh\nNote splashes are no longer incorrectly not spawned when a note has its ratings disabled\ncombo and rating popups no longer happen when the notes ratings are disabled.\nRFV-0.8.1', '', '4DB33C'], ['0.8.0', 'widol', "0.8.0", "", 'This update is too large to list in a reasonable format. Explore the engine to see the changes!', '', '4DB33C'], ['0.7.0b', 'iidol', "0.7.0b", "", 'Press ' + InputFormatter.getKeyName(ClientPrefs.keyBinds.get('accept')[0]) + ' or ' + InputFormatter.getKeyName(ClientPrefs.keyBinds.get('accept')[1]) + ' to view.', 'https://docs.google.com/document/d/1FYPeiyaO2OSlejfHyqvg8VlNH2PbRCJ2PTIDohbZmUI/edit?usp=sharing', '6FD2D2'], ['0.7.0', 'iidol', "0.7.0", "", 'Press ' + InputFormatter.getKeyName(ClientPrefs.keyBinds.get('accept')[0]) + ' or ' + InputFormatter.getKeyName(ClientPrefs.keyBinds.get('accept')[1]) + ' to view.', 'https://docs.google.com/document/d/1FYPeiyaO2OSlejfHyqvg8VlNH2PbRCJ2PTIDohbZmUI/edit?usp=sharing', '6FD2D2'], diff --git a/source/Paths.hx b/source/Paths.hx index b66ab44..a2912a1 100644 --- a/source/Paths.hx +++ b/source/Paths.hx @@ -39,7 +39,11 @@ class Paths [ 'assets/music/freakyMenu.$SOUND_EXT', 'assets/shared/music/breakfast.$SOUND_EXT', - 'assets/shared/music/tea-time.$SOUND_EXT', + 'assets/music/elevator.$SOUND_EXT', + 'assets/sounds/bfBeep.$SOUND_EXT', + 'assets/sounds/scrollMenu.$SOUND_EXT', + 'assets/sounds/confirmMenu.$SOUND_EXT', + 'assets/sounds/cancelMenu.$SOUND_EXT' ]; /// haya I love you for the base cache dump I took to the max /** diff --git a/source/PauseSubState.hx b/source/PauseSubState.hx index 5d25bb7..86eebaa 100644 --- a/source/PauseSubState.hx +++ b/source/PauseSubState.hx @@ -252,8 +252,8 @@ class PauseSubState extends MusicBeatSubstate funnyText.setFormat("VCR OSD Mono", 64, FlxColor.RED, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(funnyText); FlxTween.tween(funnyText, {alpha: 0}, 0.6, { - onComplete: function(tween:FlxTween) - { + onComplete: _ -> { + remove(funnyText, true); funnyText.destroy(); } }); @@ -455,7 +455,6 @@ class PauseSubState extends MusicBeatSubstate function regenMenu():Void { for (i in 0...grpMenuShit.members.length) { var obj = grpMenuShit.members[0]; - obj.kill(); grpMenuShit.remove(obj, true); obj.destroy(); } diff --git a/source/PlayState.hx b/source/PlayState.hx index a2c350d..66f3555 100644 --- a/source/PlayState.hx +++ b/source/PlayState.hx @@ -60,7 +60,7 @@ class PlayState extends MusicBeatState public static var instance:PlayState; //Strum positions?? - public static var STRUM_X = 42; + public static var STRUM_X = 48.5; public static var STRUM_X_MIDDLESCROLL = -278; public static var ratingStuff:Array = [ @@ -486,6 +486,7 @@ class PlayState extends MusicBeatState MusicBeatState.disableManual = true; SoundTestState.isPlaying = false; FlxG.mouse.visible = false; + FreeplayState.destroyFreeplayVocals(); instance = this; debugKeysChart = ClientPrefs.keyBinds.get('debug_1').copy(); debugKeysCharacter = ClientPrefs.keyBinds.get('debug_2').copy(); @@ -516,7 +517,7 @@ class PlayState extends MusicBeatState FlxG.cameras.add(camTint, false); FlxG.cameras.add(camHUD, false); FlxG.cameras.add(camOther, false); - grpNoteSplashes = new FlxTypedGroup((mania+1)*2); //We add a limit so it doesnt cause absurd lag. Since its jsut recyling, we shouldnt have any issues. + grpNoteSplashes = new FlxTypedGroup((mania+1)*3); //We add a limit so it doesnt cause absurd lag. Since its jsut recyling, we shouldnt have any issues. FlxG.cameras.setDefaultDrawTarget(camGame, true); CustomFadeTransition.nextCamera = camOther; @@ -1467,107 +1468,34 @@ class PlayState extends MusicBeatState flashLightSprite = null; } - var modifierArray:Array = []; - - var botspr:ModifierSprite = new ModifierSprite('botplay', camHUD, 0, 0); - botspr.visible = cpuControlled; - add(botspr); - modifierArray.insert(0, botspr); - - var hpgainspr:ModifierSprite = new ModifierSprite('healthgain', camHUD, 0, 1); - if (healthGain != 1) { - hpgainspr.visible = true; - } else { - hpgainspr.visible = false; - } - add(hpgainspr); - modifierArray.insert(0, hpgainspr); - - var hplossspr:ModifierSprite = new ModifierSprite('healthloss', camHUD, 0, 2); - if (healthLoss != 1) { - hplossspr.visible = true; - } else { - hplossspr.visible = false; - } - add(hplossspr); - modifierArray.insert(0, hplossspr); - - var instakillspr:ModifierSprite = new ModifierSprite('instakill', camHUD, 0, 3); - instakillspr.visible = instakillOnMiss; - add(instakillspr); - modifierArray.insert(0, instakillspr); - - var poisonspr:ModifierSprite = new ModifierSprite('poison', camHUD, 1, 0); - poisonspr.visible = poison; - add(poisonspr); - modifierArray.insert(0, poisonspr); - - var practicespr:ModifierSprite = new ModifierSprite('practice', camHUD, 1, 1); - practicespr.visible = practiceMode; - add(practicespr); - modifierArray.insert(0, practicespr); - - var sicksspr:ModifierSprite = new ModifierSprite('sickonly', camHUD, 1, 2); - sicksspr.visible = sickOnly; - add(sicksspr); - modifierArray.insert(0, sicksspr); - - var toVisible:Bool = false; songSpeedType = ClientPrefs.getGameplaySetting('scrolltype','multiplicative'); - switch(songSpeedType) - { - case "multiplicative": - var scrollspr:ModifierSprite = new ModifierSprite('scrolltypemultiplicative', camHUD, 1, 3); - toVisible = (ClientPrefs.getGameplaySetting('scrollspeed', 1) != 1) ? true : false; - scrollspr.visible = toVisible; - add(scrollspr); - modifierArray.insert(0, scrollspr); - case "constant": - var scrollspr:ModifierSprite = new ModifierSprite('scrolltypeconstant', camHUD, 1, 3); - toVisible = true; - scrollspr.visible = toVisible; - add(scrollspr); - modifierArray.insert(0, scrollspr); - } - - var freezespr:ModifierSprite = new ModifierSprite('freeze', camHUD, 2, 0); - freezespr.visible = freeze; - add(freezespr); - modifierArray.insert(0, freezespr); - - var flashlightspr:ModifierSprite = new ModifierSprite('flashlight', camHUD, 2, 1); - flashlightspr.visible = flashLight; - add(flashlightspr); - modifierArray.insert(0, flashlightspr); - - var randomspr:ModifierSprite = new ModifierSprite('randommode', camHUD, 2, 2); - randomspr.visible = randomMode; - add(randomspr); - modifierArray.insert(0, randomspr); - - var ghostspr:ModifierSprite = new ModifierSprite('ghostmode', camHUD, 2, 3); - ghostspr.visible = ghostMode; - add(ghostspr); - modifierArray.insert(0, ghostspr); - - var quartizspr:ModifierSprite = new ModifierSprite('quartiz', camHUD, 3, 0); - quartizspr.visible = quartiz; - add(quartizspr); - modifierArray.insert(0, quartizspr); - - var flipspr:ModifierSprite = new ModifierSprite('flip', camHUD, 3, 1); - flipspr.visible = flip; - add(flipspr); - modifierArray.insert(0, flipspr); - - for (sprite in modifierArray) { - FlxTween.tween(sprite, {alpha: 0}, 0.5, { + final modifierDatas:Array = [ + {name: 'botplay', condition: cpuControlled, xPos:0, yPos:0}, + {name: 'healthgain', condition: healthGain != 1, xPos:0, yPos:1}, + {name: 'healthloss', condition: healthLoss != 1, xPos:0, yPos:2}, + {name: 'instakill', condition: instakillOnMiss, xPos:0, yPos:3}, + {name: 'poison', condition: poison, xPos:1, yPos:0}, + {name: 'practice', condition: practiceMode, xPos:1, yPos:1}, + {name: 'sickonly', condition: sickOnly, xPos:1, yPos:2}, + {name: (songSpeedType == 'constant' ? 'scrolltypeconstant' : 'scrolltypemultiplicative'), condition: (songSpeedType == 'constant' ? true : ClientPrefs.getGameplaySetting('scrollspeed', 1) != 1), xPos:1, yPos:3}, + {name: 'freeze', condition: freeze, xPos:2, yPos:0}, + {name: 'flashlight', condition: flashLight, xPos:2, yPos:1}, + {name: 'randommode', condition: randomMode, xPos:2, yPos:2}, + {name: 'ghostmode', condition: ghostMode, xPos:2, yPos:3}, + {name: 'quartiz', condition: quartiz, xPos:3, yPos:0}, + {name: 'flip', condition: flip, xPos:3, yPos:1} + ]; + + for (data in modifierDatas) { + if (!data.condition) continue; + var spr:ModifierSprite = new ModifierSprite(data.name, camHUD, data.xPos, data.yPos); + add(spr); + FlxTween.tween(spr, {alpha: 0}, 0.5, { ease: FlxEase.quadInOut, startDelay: 2.5/(Conductor.bpm/100), onComplete: _ -> { - sprite.kill(); - modifierArray.remove(sprite); - sprite.destroy(); + remove(spr, true); + spr.destroy(); } }); } @@ -1763,12 +1691,9 @@ class PlayState extends MusicBeatState { camHUD.visible = true; camHUD.alpha = 0; - blackScreen.kill(); remove(blackScreen, true); blackScreen.destroy(); - FlxTween.tween(camHUD, {alpha: 1}, 2.5, { - ease: FlxEase.quadInOut - }); + FlxTween.tween(camHUD, {alpha: 1}, 2.5, {ease: FlxEase.quadInOut}); FlxTween.tween(FlxG.camera, {zoom: defaultStageZoom}, 2.5, { ease: FlxEase.quadInOut, onComplete: _ -> startCountdown() @@ -1778,7 +1703,6 @@ class PlayState extends MusicBeatState schoolIntro(doof); case 'ugh' | 'guns' | 'stress': tankIntro(); - default: callOnHscripts("onCutscene", []); startCountdown(); @@ -1806,8 +1730,6 @@ class PlayState extends MusicBeatState else if(ClientPrefs.settings.get("pauseMusic") != 'None') precacheList.set(Paths.formatToSongPath(ClientPrefs.settings.get("pauseMusic")), 'music'); - precacheList.set('alphabet', 'image'); - //cant use keyPress override because it would count EVERY key FlxG.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress); FlxG.stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease); @@ -1818,7 +1740,7 @@ class PlayState extends MusicBeatState if (customTransition && loading != null) { FlxTween.tween(loading, {alpha: 0}, 0.45, { onComplete: _ -> { - loading.kill(); + remove(loading, true); loading.destroy(); } }); @@ -1999,8 +1921,8 @@ class PlayState extends MusicBeatState if(luaDebugGroup.members.length > 34) { var blah = luaDebugGroup.members[34]; - blah.destroy(); luaDebugGroup.remove(blah, true); + blah.destroy(); } luaDebugGroup.insert(0, new DebugLuaText(text, luaDebugGroup)); #end @@ -2577,11 +2499,6 @@ class PlayState extends MusicBeatState var daNote:Note = unspawnNotes[i]; if(daNote.strumTime - 500 < time) { - daNote.active = false; - daNote.visible = false; - daNote.ignoreNote = true; - - daNote.kill(); unspawnNotes.remove(daNote); daNote.destroy(); } @@ -2594,11 +2511,6 @@ class PlayState extends MusicBeatState var daNote:Note = notes.members[i]; if(daNote.strumTime - 500 < time) { - daNote.active = false; - daNote.visible = false; - daNote.ignoreNote = true; - - daNote.kill(); notes.remove(daNote, true); daNote.destroy(); } @@ -2610,11 +2522,6 @@ class PlayState extends MusicBeatState var daNote:Note = sustains.members[i]; if(daNote.strumTime - 500 < time) { - daNote.active = false; - daNote.visible = false; - daNote.ignoreNote = true; - - daNote.kill(); sustains.remove(daNote, true); daNote.destroy(); } @@ -2712,8 +2619,23 @@ class PlayState extends MusicBeatState // Song duration in a float, useful for the time left feature songLength = FlxG.sound.music.length; - FlxTween.tween(hud.timeBar, {alpha: 1}, 0.5, {ease: FlxEase.circOut}); - FlxTween.tween(hud.timeTxt, {alpha: 1}, 0.5, {ease: FlxEase.circOut}); + hud.timeBar.scale.x = 0.01; + hud.timeBarBG.scale.x = 0.01; + if (isPixelStage) { + var loops:Int = 0; + new FlxTimer().start(0.1, tmr -> { + loops++; + hud.timeBarBG.scale.x = hud.timeBar.scale.x = FlxMath.lerp(hud.timeBar.scale.x, 1, 0.7); + hud.timeBar.alpha += 0.2; + hud.timeBarBG.alpha += 0.2; + hud.timeTxt.alpha += 0.2; + if (loops < 5) tmr.reset(0.1); + }); + } else { + FlxTween.tween(hud.timeBar, {alpha: 1, "scale.x": 1}, 0.5, {ease: FlxEase.circOut}); + FlxTween.tween(hud.timeBarBG, {alpha: 1, "scale.x": 1}, 0.5, {ease: FlxEase.circOut}); + FlxTween.tween(hud.timeTxt, {alpha: 1}, 0.5, {ease: FlxEase.circOut}); + } switch(curStage) { @@ -3141,7 +3063,6 @@ class PlayState extends MusicBeatState if(!ClientPrefs.settings.get("lowQuality")) { grpLimoParticles.forEach(function(spr:BGSprite) { if(spr.animation.curAnim.finished) { - spr.kill(); grpLimoParticles.remove(spr, true); spr.destroy(); } @@ -3273,7 +3194,7 @@ class PlayState extends MusicBeatState //not optimized! hell yeah! // but I love optimization :( - if (ClientPrefs.settings.get("scoreDisplay") == 'FNF+') hud.rightTxt.text = 'HP\n${hud.healthBar.percent}%\n\nACCURACY\n${Highscore.floorDecimal(ratingPercent * 100, 2)}%\n\nSCORE\n${FlxStringUtil.formatMoney(songScore, false)}'; + if (ClientPrefs.settings.get("scoreDisplay") == 'FNF+') hud.rightTxt.text = 'HP\n${hud.healthBar.roundedPercent}%\n\nACCURACY\n${Highscore.floorDecimal(ratingPercent * 100, 2)}%\n\nSCORE\n${FlxStringUtil.formatMoney(songScore, false)}'; if (FlxG.keys.anyJustPressed(debugKeysCharacter) && !endingSong && !inCutscene) { persistentUpdate = false; @@ -3351,21 +3272,19 @@ class PlayState extends MusicBeatState doDeathCheck(true); //NOTE SPAWNING BABY!! + //swap to recylcing soon if (unspawnNotes[0] != null) { final spawnTime:Float = (1750/songSpeed)/(FlxMath.bound(camHUD.zoom, null, 1)); //spawns within [time] ms (btw this BARELY edges close enough to the screen to not be too far ahead and not spawning on screen) while (unspawnNotes.length > 0 && unspawnNotes[0].strumTime - Conductor.songPosition < spawnTime * unspawnNotes[0].spawnTimeMult) { - var dunceNote:Note = unspawnNotes[0]; - //dunceNote.active = false; + var dunceNote:Note = unspawnNotes.shift(); if(ghostMode) ghostModeRoutine(dunceNote); if (!dunceNote.isSustainNote) notes.insert(0, dunceNote); else sustains.insert(0, dunceNote); - - unspawnNotes.splice(unspawnNotes.indexOf(dunceNote), 1); } } @@ -3483,13 +3402,9 @@ class PlayState extends MusicBeatState // Kill extremely late notes and cause misses if (Conductor.songPosition > noteKillOffset + daNote.strumTime) { - if (daNote.mustPress && !cpuControlled &&!daNote.ignoreNote && !endingSong && (daNote.tooLate || !daNote.wasGoodHit)) + if (daNote.mustPress && !cpuControlled && !daNote.ignoreNote && !endingSong && (daNote.tooLate || !daNote.wasGoodHit)) noteMiss(daNote); - daNote.active = false; - daNote.visible = false; - - daNote.kill(); group.remove(daNote, true); daNote.destroy(); } @@ -3661,14 +3576,10 @@ class PlayState extends MusicBeatState who.color = FlxColor.WHITE; phillyGlowGradient.kill(); - phillyGlowParticles.forEachAlive(function(particle:PhillyGlowParticle) { - particle.kill(); + phillyGlowParticles.forEach(function(particle:PhillyGlowParticle) { phillyGlowParticles.remove(particle, true); particle.destroy(); }); - phillyGlowParticles.forEachDead(function(particle:PhillyGlowParticle) { - phillyGlowParticles.remove(particle, true); - }); } case 1: //turn on @@ -3717,24 +3628,24 @@ class PlayState extends MusicBeatState var color:FlxColor = phillyLightsColors[curLightEvent]; if(!ClientPrefs.settings.get("lowQuality")) { + phillyGlowParticles.forEachAlive(function(particle:PhillyGlowParticle) { + if (particle.alpha > 0) { + particle.color = color; + } else { + particle.kill(); //refresh recycler + } + }); var particlesNum:Int = FlxG.random.int(8, 12); var width:Float = (2000 / particlesNum); for (j in 0...3) { for (i in 0...particlesNum) { - var particle:PhillyGlowParticle = new PhillyGlowParticle(-400 + width * i + FlxG.random.float(-width / 5, width / 5), phillyGlowGradient.originalY + 200 + (FlxG.random.float(0, 125) + j * 40), color); + var particle = phillyGlowParticles.recycle(PhillyGlowParticle); + particle.start(-400 + width * i + FlxG.random.float(-width / 5, width / 5), phillyGlowGradient.originalY + 200 + (FlxG.random.float(0, 125) + j * 40), color); phillyGlowParticles.add(particle); } } - phillyGlowParticles.forEachAlive(function(particle:PhillyGlowParticle) { - if (particle.alpha > 0) { - particle.color = color; - } - }); - phillyGlowParticles.forEachDead(function(particle:PhillyGlowParticle) { - phillyGlowParticles.remove(particle, true); - }); } phillyGlowGradient.bop(); } @@ -4062,7 +3973,6 @@ class PlayState extends MusicBeatState new FlxTimer().start(val2 / playbackRate, function(tmr:FlxTimer) { FlxTween.tween(tint, {alpha: 0}, 0.25 / playbackRate, { onComplete: _ -> { - tint.kill(); behindGfGroup.remove(tint, true); tint.destroy(); } @@ -4245,11 +4155,11 @@ class PlayState extends MusicBeatState add(sub); new FlxTimer().start(stepsToSecs(val3), function(timer:FlxTimer) { FlxTween.tween(sub, {alpha: 0}, stepsToSecs(1), {ease: FlxEase.quadInOut, onComplete: _ -> { - sub.kill(); + remove(sub, true); sub.destroy(); }}); FlxTween.tween(subBG, {alpha: 0}, stepsToSecs(1), {ease: FlxEase.quadInOut, onComplete: _ -> { - subBG.kill(); + remove(subBG, true); subBG.destroy(); }}); }); @@ -4565,7 +4475,7 @@ class PlayState extends MusicBeatState else { var curDifficulty:Int = -1; - var lastDifficultyName:String = ''; + var lastDifficultyName:String = CoolUtil.difficulties[storyDifficulty]; if(lastDifficultyName == '') { lastDifficultyName = CoolUtil.defaultDifficulty; @@ -4641,10 +4551,6 @@ class PlayState extends MusicBeatState public function KillNotes() { function killNote(note:Note, grp:Dynamic) { - note.active = false; - note.visible = false; - - note.kill(); grp.remove(note, true); note.destroy(); } @@ -4679,7 +4585,7 @@ class PlayState extends MusicBeatState for (i in 0...10) Paths.image('${numsPath}num${i}${skinOverride}'); } - public function popUpScore(note:Note = null):Void + public function popUpScore(note:Note = null):String { final noteDiff:Float = Math.abs(note.strumTime - Conductor.songPosition + ClientPrefs.settings.get("ratingOffset")); final msTiming:Float = note.strumTime - Conductor.songPosition + ClientPrefs.settings.get("ratingOffset"); @@ -4701,36 +4607,33 @@ class PlayState extends MusicBeatState totalNotesHit += (ClientPrefs.settings.get("complexAccuracy") ? -(noteDiff/205 - 1) : 0); score = -100; - if(!note.ratingDisabled) wtfs++; + wtfs++; case "shit": if (sickOnly) health -= 5; totalNotesHit += (ClientPrefs.settings.get("complexAccuracy") ? -(noteDiff/205 - 1) : 0.25); score = -50; - if(!note.ratingDisabled) shits++; + shits++; case "bad": if (sickOnly) health -= 5; totalNotesHit += (ClientPrefs.settings.get("complexAccuracy") ? -(noteDiff/205 - 1) : 0.5); score = 50; - if(!note.ratingDisabled) bads++; + bads++; case "good": if (sickOnly) health -= 5; totalNotesHit += (ClientPrefs.settings.get("complexAccuracy") ? -(noteDiff/205 - 1) : 0.75); score = 200; - if(!note.ratingDisabled) goods++; + goods++; case "sick": totalNotesHit += (ClientPrefs.settings.get("complexAccuracy") ? -(noteDiff/205 - 1) : 0.95); score = 350; - if(!note.ratingDisabled) sicks++; + sicks++; case "perfect": totalNotesHit += (ClientPrefs.settings.get("complexAccuracy") ? -(noteDiff/205 - 1) : 1); score = 600; - if(!note.ratingDisabled) perfects++; + perfects++; } note.rating = daRating; - if((daRating == 'sick' || daRating == 'perfect') && !note.noteSplashDisabled) - spawnNoteSplashOnNote(note); - switch (ratingIntensity) { case 'Default': if(daRating == 'wtf' || daRating == 'shit') { @@ -4749,15 +4652,12 @@ class PlayState extends MusicBeatState if(!practiceMode && !cpuControlled) { songScore += score; - if(!note.ratingDisabled) - { - songHits++; - totalPlayed++; - recalculateRating(); - #if desktop - ratingText = ratingName + " " + ratingFC; - #end - } + songHits++; + totalPlayed++; + recalculateRating(); + #if desktop + ratingText = ratingName + " " + ratingFC; + #end if(ClientPrefs.settings.get("scoreZoom")) hud.scoreTween(daRating); } @@ -4947,6 +4847,8 @@ class PlayState extends MusicBeatState rating.destroy(); } }); + + return daRating; } public function onKeyPress(event:KeyboardEvent):Void @@ -4987,7 +4889,6 @@ class PlayState extends MusicBeatState { for (doubleNote in pressNotes) { if (Math.abs(doubleNote.strumTime - epicNote.strumTime) < 1) { - doubleNote.kill(); if (doubleNote.isSustainNote) sustains.remove(doubleNote, true); else @@ -5104,7 +5005,6 @@ class PlayState extends MusicBeatState //Dupe note remove function noteKillCheck(note:Note, grp:Dynamic) { if (note != note && note.mustPress && note.noteData == note.noteData && Math.abs(note.strumTime - note.strumTime) < 1) { - note.kill(); grp.remove(note, true); note.destroy(); } @@ -5233,10 +5133,11 @@ class PlayState extends MusicBeatState vocals.volume = 0; } - public function gsTap(direction:Int = 1, ?miss:Bool = false):Void //GS Tap Miss + inline function gsTap(direction:Int = 1, ?miss:Bool = false):Void //GS Tap Miss { var missStr:String = miss ? 'miss' : ''; - if ((freeze && boyfriend.stunned) || boyfriend.specialAnim) return; + var char = ((SONG.notes[curSection].gfSection && SONG.notes[curSection].mustHitSection && gf != null) ? gf : boyfriend); + if ((freeze && char.stunned) || char.specialAnim) return; if(ClientPrefs.settings.get("flinching") && miss) { flinching = true; @@ -5251,17 +5152,17 @@ class PlayState extends MusicBeatState }); } - if (!boyfriend.hasMissAnimations) { - boyfriend.missing = miss; + if (!char.hasMissAnimations) { + char.missing = miss; missStr = ''; } var animToPlay:String = 'sing' + Note.keysShit.get(mania).get('anims')[direction] + missStr; var noAnimation:String = 'singUP' + missStr; - if (boyfriend.animOffsets.exists(animToPlay)) { - boyfriend.playAnim(animToPlay, true); + if (char.animOffsets.exists(animToPlay)) { + char.playAnim(animToPlay, true); } else { - boyfriend.playAnim(noAnimation, true); + char.playAnim(noAnimation, true); } } @@ -5309,7 +5210,9 @@ class PlayState extends MusicBeatState function makeCrossFade(_char:Character, _grp:FlxTypedGroup, ?noteTypeThing:Bool = false) { if (ClientPrefs.settings.get("crossFadeMode") == 'Off' || note.isSustainNote || noteTypeThing) return; - new CrossFade(_char, _grp, true); + var crossfade = _grp.recycle(CrossFade); + crossfade.resetShit(_char, true); + _grp.add(crossfade); } if (SONG.notes[curSection] != null) @@ -5369,7 +5272,6 @@ class PlayState extends MusicBeatState if (!note.isSustainNote) { - note.kill(); notes.remove(note, true); note.destroy(); } @@ -5414,19 +5316,23 @@ class PlayState extends MusicBeatState note.wasGoodHit = true; if (!note.isSustainNote) { - note.kill(); notes.remove(note, true); note.destroy(); } return; } - if (!note.isSustainNote) + var rate:String = 'sick'; + if (!note.isSustainNote && !note.ratingDisabled) { combo += 1; if(highestCombo < combo) highestCombo = combo; - popUpScore(note); + rate = popUpScore(note); } + + if (!note.isSustainNote && !note.noteSplashDisabled && (['sick', 'perfect'].contains(rate) || note.forceNoteSplash)) + spawnNoteSplashOnNote(note); + intendedHealth += note.hitHealth * healthGain; var resetFlinch:Bool = false; @@ -5483,9 +5389,13 @@ class PlayState extends MusicBeatState if (ClientPrefs.settings.get("crossFadeMode") == 'Off' || note.isSustainNote || noteTypeThing) return; switch (_gf) { case true: - new CrossFade(gf, gfCrossFade, true); + var crossfade = gfCrossFade.recycle(CrossFade); + crossfade.resetShit(gf, true); + gfCrossFade.add(crossfade); default: - new CrossFade(boyfriend, grpBFCrossFade, false); + var crossfade = grpBFCrossFade.recycle(CrossFade); + crossfade.resetShit(boyfriend, false); + grpBFCrossFade.add(crossfade); } } @@ -5523,7 +5433,6 @@ class PlayState extends MusicBeatState if (!note.isSustainNote) { - note.kill(); notes.remove(note, true); note.destroy(); } @@ -5851,16 +5760,14 @@ class PlayState extends MusicBeatState FlxTween.tween(gunsThing, {alpha: 0}, 0.2 / playbackRate, { ease: FlxEase.quadInOut, onComplete: _ -> { - gunsThing.visible = false; - gunsThing.kill(); + remove(gunsThing, true); gunsThing.destroy(); } }); FlxTween.tween(gunsExtraClouds, {alpha: 0}, 0.35 / playbackRate, { ease: FlxEase.quadInOut, onComplete: _ -> { - gunsExtraClouds.visible = false; - gunsExtraClouds.kill(); + remove(gunsExtraClouds, true); gunsExtraClouds.destroy(); } }); @@ -6404,7 +6311,7 @@ class PlayState extends MusicBeatState } } case 'FPS+': hud.scoreTxt.text = 'Score: ${FlxStringUtil.formatMoney(songScore, false)} | Breaks: $songMisses | Accuracy: ${Highscore.floorDecimal(ratingPercent * 100, 2)}%'; - case 'FNF+': hud.rightTxt.text = 'HP\n${hud.healthBar.percent}%\n\nACCURACY\n${Highscore.floorDecimal(ratingPercent * 100, 2)}%\n\nSCORE\n${FlxStringUtil.formatMoney(songScore, false)}'; + case 'FNF+': hud.rightTxt.text = 'HP\n${hud.healthBar.roundedPercent}%\n\nACCURACY\n${Highscore.floorDecimal(ratingPercent * 100, 2)}%\n\nSCORE\n${FlxStringUtil.formatMoney(songScore, false)}'; case 'Vanilla': hud.rightTxt.text = 'Score:${FlxStringUtil.formatMoney(songScore, false)}'; case 'FNM': hud.rightTxt.text = 'score:${FlxStringUtil.formatMoney(songScore, false)}'; } @@ -6454,7 +6361,9 @@ class PlayState extends MusicBeatState } } + public var autoPositionIcons:Bool = true; public function setIconPositions(?y:Bool = false) { + if (!autoPositionIcons) return; if (y) { iconP1.y = hud.healthBar.y - 75; iconP1Poison.y = iconP1.y + 5; @@ -7151,6 +7060,13 @@ class PlayState extends MusicBeatState } } +@:structInit class ModifierSpriteData { + public var name:String; + public var condition:Bool; + public var xPos:Int; + public var yPos:Int; +} + class ModifierSprite extends FlxSprite { public function new(image:String, camera:FlxCamera, gridPosX:Int, gridPosY:Int) diff --git a/source/Prompt.hx b/source/Prompt.hx index 7f7b182..8f045ba 100644 --- a/source/Prompt.hx +++ b/source/Prompt.hx @@ -112,6 +112,10 @@ class Prompt extends MusicBeatSubstate override function destroy() { open = false; + panel = FlxDestroyUtil.destroy(panel); + panelbg = FlxDestroyUtil.destroy(panelbg); + buttonAccept = FlxDestroyUtil.destroy(buttonAccept); + buttonNo = FlxDestroyUtil.destroy(buttonNo); super.destroy(); } } \ No newline at end of file diff --git a/source/StoryMenuState.hx b/source/StoryMenuState.hx index d145833..a169a20 100644 --- a/source/StoryMenuState.hx +++ b/source/StoryMenuState.hx @@ -272,8 +272,8 @@ class StoryMenuState extends MusicBeatState funnyText.setFormat("VCR OSD Mono", 64, FlxColor.RED, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(funnyText); FlxTween.tween(funnyText, {alpha: 0}, 0.6, { - onComplete: function(tween:FlxTween) - { + onComplete: _ -> { + remove(funnyText, true); funnyText.destroy(); } }); @@ -515,7 +515,7 @@ class StoryMenuState extends MusicBeatState } for (text in trackListGrp) { - text.kill(); + text.kill(); //why cant i remove() these texts without them breaking? text.destroy(); } diff --git a/source/TitleState.hx b/source/TitleState.hx index a13ecce..01bbf45 100644 --- a/source/TitleState.hx +++ b/source/TitleState.hx @@ -137,10 +137,10 @@ class TitleState extends MusicBeatState FlxG.save.flush(); MusicBeatState.switchState(new FlashingState()); } else { - new FlxTimer().start(1, function(tmr:FlxTimer) - { + //new FlxTimer().start(1, function(tmr:FlxTimer) + //{ startIntro(); - }); + //}); } } @@ -559,8 +559,10 @@ class TitleState extends MusicBeatState for (i in [credIcon1, credIcon2, credIcon3, credIcon4]) i.visible = true; case 1: - for (i in [credIcon1, credIcon2, credIcon3, credIcon4]) + for (i in [credIcon1, credIcon2, credIcon3, credIcon4]) { + remove(i, true); i.destroy(); + } } #end } @@ -579,8 +581,10 @@ class TitleState extends MusicBeatState remove(credGroup); #if DENPA_WATERMARKS for (i in [credIcon1, credIcon2, credIcon3, credIcon4]) - if (i != null) + if (i != null) { + remove(i, true); i.destroy(); + } #end FlxG.camera.flash(FlxColor.WHITE, 3); diff --git a/source/VanillaBG.hx b/source/VanillaBG.hx index 60a24c4..c4cc9e4 100644 --- a/source/VanillaBG.hx +++ b/source/VanillaBG.hx @@ -19,8 +19,14 @@ class PhillyGlowParticle extends FlxSprite public function new(x:Float, y:Float, color:FlxColor) { super(x, y); + start(x, y, color); + } + + public function start(x:Float, y:Float, color:FlxColor) { + setPosition(x, y); this.color = color; + alpha = 1; loadGraphic(Paths.image('effectSprites/particle')); lifeTime = FlxG.random.float(0.6, 0.9); decay = FlxG.random.float(0.8, 1); @@ -48,8 +54,6 @@ class PhillyGlowParticle extends FlxSprite if(alpha > 0) { scale.set(originalScale * alpha, originalScale * alpha); - } else { - return destroy(); //AMBATUKUM } } super.update(elapsed); diff --git a/source/editors/CharacterEditorState.hx b/source/editors/CharacterEditorState.hx index 7da0741..7d26525 100644 --- a/source/editors/CharacterEditorState.hx +++ b/source/editors/CharacterEditorState.hx @@ -111,7 +111,7 @@ class CharacterEditorState extends MusicBeatState override function create() { Paths.clearUnusedCache(); - Paths.refreshModsMaps(false, true, true); + Paths.refreshModsMaps(true, true, true); if (PlayState.curStage != null && PlayState.curStage != '') currentStage = PlayState.curStage; music = new EditorMusic(); @@ -322,7 +322,6 @@ class CharacterEditorState extends MusicBeatState while(i >= 0) { var memb:FlxBasic = bgLayer.members[i]; if(memb != null) { - memb.kill(); bgLayer.remove(memb, true); memb.destroy(); } @@ -334,7 +333,6 @@ class CharacterEditorState extends MusicBeatState while(i >= 0) { var memb:FlxBasic = frontLayer.members[i]; if(memb != null) { - memb.kill(); frontLayer.remove(memb, true); memb.destroy(); } @@ -346,7 +344,6 @@ class CharacterEditorState extends MusicBeatState while(i >= 0) { var memb:FlxBasic = fuckLayer.members[i]; if(memb != null) { - memb.kill(); fuckLayer.remove(memb, true); memb.destroy(); } @@ -1566,7 +1563,6 @@ class CharacterEditorState extends MusicBeatState while(i >= 0) { var memb:Character = charLayer.members[i]; if(memb != null) { - memb.kill(); charLayer.remove(memb); memb.destroy(); } diff --git a/source/editors/ChartingState.hx b/source/editors/ChartingState.hx index b2c2351..495c79b 100644 --- a/source/editors/ChartingState.hx +++ b/source/editors/ChartingState.hx @@ -301,7 +301,7 @@ class ChartingState extends MusicBeatState { for(listener in mouse_listeners) FlxG.stage.addEventListener(listener, handleMouseInput); Paths.clearUnusedCache(); - Paths.refreshModsMaps(false, true, true); + Paths.refreshModsMaps(true, true, true); if (PlayState.SONG != null) _song = PlayState.SONG; @@ -1139,41 +1139,30 @@ class ChartingState extends MusicBeatState for (note in _song.notes[curSection].sectionNotes) { var boob = note[1]; - if (boob>_song.options.mania){ - boob -= _song.options.mania+1; + if (boob > _song.options.mania){ + boob -= Note.ammo[_song.options.mania]; }else{ - boob += _song.options.mania+1; + boob += Note.ammo[_song.options.mania]; } var copiedNote:Array = [note[0], boob, note[2], note[3]]; duetNotes.push(copiedNote); } - for (i in duetNotes){ - _song.notes[curSection].sectionNotes.push(i); - - } + for (i in duetNotes) + _song.notes[curSection].sectionNotes.push(i); updateGrid(false); }); var mirrorButton:FlxButton = new FlxButton(210, duetButton.y + 40, "Mirror Notes", function() { - //istg this doesnt work on the right side - var duetNotes:Array> = []; for (note in _song.notes[curSection].sectionNotes) { - var boob = note[1]%(Note.ammo[_song.options.mania] * 2); + var boob = note[1] % Note.ammo[_song.options.mania]; boob = _song.options.mania - boob; - if (note[1] > _song.options.mania) boob += _song.options.mania+1; + if (note[1] > _song.options.mania) boob += Note.ammo[_song.options.mania]; note[1] = boob; - //var copiedNote:Array = [note[0], boob, note[2], note[3]]; - //duetNotes.push(copiedNote); - } - - for (i in duetNotes){ - //_song.notes[curSection].sectionNotes.push(i); - } updateGrid(false); @@ -2622,7 +2611,10 @@ class ChartingState extends MusicBeatState selectionArrow.size = GRID_SIZE; } - gridLayer.forEach(obj -> obj.destroy()); + gridLayer.forEach(obj -> { + gridLayer.remove(obj); + obj.destroy(); + }); gridLayer.clear(); gridBG = FlxGridOverlay.create(GRID_SIZE, GRID_SIZE, GRID_SIZE + GRID_SIZE * Note.ammo[_song.options.mania] * 2, Std.int(GRID_SIZE * 32 * zoomList[curZoom])); gridBG.active = false; @@ -2664,7 +2656,10 @@ class ChartingState extends MusicBeatState if (strumLineNotes != null) { - strumLineNotes.forEach(note -> note.destroy()); + strumLineNotes.forEach(note -> { + strumLineNotes.remove(note); + note.destroy(); + }); strumLineNotes.clear(); for (i in 0...(Note.ammo[_song.options.mania] * 2)){ var note:Note.StrumNote = new Note.StrumNote(GRID_SIZE * (i+1), strumLine.y, i % Note.ammo[_song.options.mania], 0); @@ -2995,16 +2990,31 @@ class ChartingState extends MusicBeatState function updateGrid(?updateNext:Bool = true):Void { renderedSustainsMap.clear(); - curRenderedNotes.forEach(note -> note.destroy()); + curRenderedNotes.forEach(note -> { + curRenderedNotes.remove(note, true); + note.destroy(); + }); curRenderedNotes.clear(); - curRenderedSustains.forEach(sus -> sus.destroy()); + curRenderedSustains.forEach(sus -> { + curRenderedSustains.remove(sus, true); + sus.destroy(); + }); curRenderedSustains.clear(); - curRenderedNoteType.forEach(txt -> txt.destroy()); + curRenderedNoteType.forEach(txt -> { + curRenderedNoteType.remove(txt, true); + txt.destroy(); + }); curRenderedNoteType.clear(); if (updateNext) { - nextRenderedNotes.forEach(note -> note.destroy()); + nextRenderedNotes.forEach(note -> { + nextRenderedNotes.remove(note, true); + note.destroy(); + }); nextRenderedNotes.clear(); - nextRenderedSustains.forEach(sus -> sus.destroy()); + nextRenderedSustains.forEach(sus -> { + nextRenderedSustains.remove(sus, true); + sus.destroy(); + }); nextRenderedSustains.clear(); } @@ -3527,8 +3537,8 @@ class ChartingState extends MusicBeatState funnyText.setFormat("VCR OSD Mono", 64, FlxColor.RED, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK); add(funnyText); FlxTween.tween(funnyText, {alpha: 0}, 0.6, { - onComplete: function(tween:FlxTween) - { + onComplete: _ -> { + remove(funnyText, true); funnyText.destroy(); } }); diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index 08ade5b..70902f7 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -414,9 +414,7 @@ class DialogueCharacterEditorState extends MusicBeatState private static var DEFAULT_TEXT:String = 'Lorem ipsum dolor sit amet'; function reloadText() { if(daText != null) { - daText.killTheTimer(); - daText.kill(); - hudGroup.remove(daText); + hudGroup.remove(daText, true); daText.destroy(); } daText = new Alphabet(0, 0, DEFAULT_TEXT, false, true, 0.05, 0.7); diff --git a/source/editors/DialogueEditorState.hx b/source/editors/DialogueEditorState.hx index 823b171..11ec3ef 100644 --- a/source/editors/DialogueEditorState.hx +++ b/source/editors/DialogueEditorState.hx @@ -242,9 +242,7 @@ class DialogueEditorState extends MusicBeatState private static var DEFAULT_BUBBLETYPE:String = "normal"; function reloadText(speed:Float = 0.05, ?bold:Bool = false) { if(daText != null) { - daText.killTheTimer(); - daText.kill(); - remove(daText); + remove(daText, true); daText.destroy(); } diff --git a/source/flixel/ui/FlxBar.hx b/source/flixel/ui/FlxBar.hx index 8b60aaf..1702ef2 100644 --- a/source/flixel/ui/FlxBar.hx +++ b/source/flixel/ui/FlxBar.hx @@ -50,10 +50,15 @@ class FlxBar extends FlxSprite public var killOnEmpty:Bool = false; /** - * The percentage of how full the bar is (a value between 0 and 100) + * The percentage of how full the bar is, as a Float. (a value between 0 and 100) */ public var percent(get, set):Float; + /** + * The percentage of how full the bar is, as an Integer. (a value between 0 and 100) + */ + public var roundedPercent(get, never):Float; + /** * The current value - must always be between min and max */ @@ -217,7 +222,7 @@ class FlxBar extends FlxSprite _filledBarPoint = null; parent = null; - positionOffset = null; + positionOffset = FlxDestroyUtil.put(positionOffset); emptyCallback = null; filledCallback = null; @@ -757,7 +762,7 @@ class FlxBar extends FlxSprite var percent:Float = fraction * _maxPercent; var maxScale:Float = (_fillHorizontal) ? barWidth : barHeight; var scaleInterval:Float = maxScale / numDivisions; - var interval:Float = Math.round(Std.int(fraction * maxScale / scaleInterval) * scaleInterval); + var interval:Float = Math.round((fraction * maxScale / scaleInterval) * scaleInterval); if (_fillHorizontal) { @@ -809,7 +814,7 @@ class FlxBar extends FlxSprite if (frontFrames != null) { _filledFlxRect.copyFromFlash(_filledBarRect).round(); - if (Std.int(percent) > 0) + if (roundedPercent > 0) { _frontFrame = frontFrames.frame.clipTo(_filledFlxRect, _frontFrame); } @@ -852,7 +857,7 @@ class FlxBar extends FlxSprite if (alpha == 0) return; - if (percent > 0 && _frontFrame.type != FlxFrameType.EMPTY) + if (roundedPercent > 0 && _frontFrame.type != FlxFrameType.EMPTY) { for (camera in cameras) { @@ -916,7 +921,8 @@ class FlxBar extends FlxSprite return _maxPercent; } - return Math.floor(((value - min) / range) * _maxPercent); + //Was previously incorrectly rounded. + return ((value - min) / range) * _maxPercent; } function set_percent(newPct:Float):Float @@ -928,6 +934,11 @@ class FlxBar extends FlxSprite return newPct; } + function get_roundedPercent():Float + { + return Math.floor(percent); + } + function set_value(newValue:Float):Float { value = Math.max(min, Math.min(newValue, max)); diff --git a/source/flixel/util/FlxGradient.hx b/source/flixel/util/FlxGradient.hx index 86124c5..a4e4d07 100644 --- a/source/flixel/util/FlxGradient.hx +++ b/source/flixel/util/FlxGradient.hx @@ -111,11 +111,6 @@ class FlxGradient { height = 1; } - - var cacheName = 'gradient:$width:$height:$colors:$chunkSize:$rotation:$interpolate'; - if (FlxG.bitmap.checkCache(cacheName)) - return FlxG.bitmap.get(cacheName).bitmap; - var gradient:GradientMatrix = createGradientMatrix(width, height, colors, chunkSize, rotation); var shape = new Shape(); var interpolationMethod = interpolate ? InterpolationMethod.RGB : InterpolationMethod.LINEAR_RGB; @@ -150,7 +145,6 @@ class FlxGradient data.fillRect(remainingRect, colors[colors.length - 1]); } - FlxG.bitmap.add(data, false, cacheName); return data; }